├── .github
└── workflows
│ └── build_check_test.yml
├── .gitignore
├── .idea
├── libraries
│ └── Dart_SDK.xml
├── modules.xml
└── workspace.xml
├── .metadata
├── .vscode
└── launch.json
├── CHANGELOG.md
├── LICENSE
├── README.md
├── analysis_options.yaml
├── backbone.iml
├── docs
├── docs.md
└── example_app
│ ├── .DS_Store
│ ├── assets
│ ├── AssetManifest.json
│ ├── FontManifest.json
│ ├── NOTICES
│ ├── assets
│ │ └── images
│ │ │ └── dash.png
│ ├── fonts
│ │ └── MaterialIcons-Regular.otf
│ └── packages
│ │ └── cupertino_icons
│ │ └── assets
│ │ └── CupertinoIcons.ttf
│ ├── canvaskit
│ ├── canvaskit.js
│ ├── canvaskit.wasm
│ └── profiling
│ │ ├── canvaskit.js
│ │ └── canvaskit.wasm
│ ├── favicon.png
│ ├── flutter.js
│ ├── flutter_service_worker.js
│ ├── icons
│ ├── Icon-192.png
│ ├── Icon-512.png
│ ├── Icon-maskable-192.png
│ └── Icon-maskable-512.png
│ ├── index.html
│ ├── main.dart.js
│ ├── manifest.json
│ └── version.json
├── example
├── .gitignore
├── .metadata
├── README.md
├── analysis_options.yaml
├── android
│ ├── .gitignore
│ ├── app
│ │ ├── build.gradle
│ │ └── src
│ │ │ ├── debug
│ │ │ └── AndroidManifest.xml
│ │ │ ├── main
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── kotlin
│ │ │ │ └── com
│ │ │ │ │ └── example
│ │ │ │ │ └── example
│ │ │ │ │ └── MainActivity.kt
│ │ │ └── res
│ │ │ │ ├── drawable-v21
│ │ │ │ └── launch_background.xml
│ │ │ │ ├── drawable
│ │ │ │ └── launch_background.xml
│ │ │ │ ├── mipmap-hdpi
│ │ │ │ └── ic_launcher.png
│ │ │ │ ├── mipmap-mdpi
│ │ │ │ └── ic_launcher.png
│ │ │ │ ├── mipmap-xhdpi
│ │ │ │ └── ic_launcher.png
│ │ │ │ ├── mipmap-xxhdpi
│ │ │ │ └── ic_launcher.png
│ │ │ │ ├── mipmap-xxxhdpi
│ │ │ │ └── ic_launcher.png
│ │ │ │ ├── values-night
│ │ │ │ └── styles.xml
│ │ │ │ └── values
│ │ │ │ └── styles.xml
│ │ │ └── profile
│ │ │ └── AndroidManifest.xml
│ ├── build.gradle
│ ├── gradle.properties
│ ├── gradle
│ │ └── wrapper
│ │ │ └── gradle-wrapper.properties
│ └── settings.gradle
├── assets
│ └── images
│ │ └── dash.png
├── ios
│ ├── .gitignore
│ ├── Flutter
│ │ ├── AppFrameworkInfo.plist
│ │ ├── Debug.xcconfig
│ │ └── Release.xcconfig
│ ├── Runner.xcodeproj
│ │ ├── project.pbxproj
│ │ ├── project.xcworkspace
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata
│ │ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ │ └── WorkspaceSettings.xcsettings
│ │ └── xcshareddata
│ │ │ └── xcschemes
│ │ │ └── Runner.xcscheme
│ ├── Runner.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata
│ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ └── WorkspaceSettings.xcsettings
│ └── Runner
│ │ ├── AppDelegate.swift
│ │ ├── Assets.xcassets
│ │ ├── AppIcon.appiconset
│ │ │ ├── Contents.json
│ │ │ ├── Icon-App-1024x1024@1x.png
│ │ │ ├── Icon-App-20x20@1x.png
│ │ │ ├── Icon-App-20x20@2x.png
│ │ │ ├── Icon-App-20x20@3x.png
│ │ │ ├── Icon-App-29x29@1x.png
│ │ │ ├── Icon-App-29x29@2x.png
│ │ │ ├── Icon-App-29x29@3x.png
│ │ │ ├── Icon-App-40x40@1x.png
│ │ │ ├── Icon-App-40x40@2x.png
│ │ │ ├── Icon-App-40x40@3x.png
│ │ │ ├── Icon-App-60x60@2x.png
│ │ │ ├── Icon-App-60x60@3x.png
│ │ │ ├── Icon-App-76x76@1x.png
│ │ │ ├── Icon-App-76x76@2x.png
│ │ │ └── Icon-App-83.5x83.5@2x.png
│ │ └── LaunchImage.imageset
│ │ │ ├── Contents.json
│ │ │ ├── LaunchImage.png
│ │ │ ├── LaunchImage@2x.png
│ │ │ ├── LaunchImage@3x.png
│ │ │ └── README.md
│ │ ├── Base.lproj
│ │ ├── LaunchScreen.storyboard
│ │ └── Main.storyboard
│ │ ├── Info.plist
│ │ └── Runner-Bridging-Header.h
├── lib
│ ├── bouncer.dart
│ ├── bouncer_counter.dart
│ ├── dash.dart
│ ├── game.dart
│ ├── main.dart
│ ├── message_systems.dart
│ ├── messages.dart
│ ├── systems.dart
│ ├── template.dart
│ └── template_bar.dart
├── linux
│ ├── .gitignore
│ ├── CMakeLists.txt
│ ├── flutter
│ │ ├── CMakeLists.txt
│ │ ├── generated_plugin_registrant.cc
│ │ ├── generated_plugin_registrant.h
│ │ └── generated_plugins.cmake
│ ├── main.cc
│ ├── my_application.cc
│ └── my_application.h
├── macos
│ ├── .gitignore
│ ├── Flutter
│ │ ├── Flutter-Debug.xcconfig
│ │ ├── Flutter-Release.xcconfig
│ │ └── GeneratedPluginRegistrant.swift
│ ├── Runner.xcodeproj
│ │ ├── project.pbxproj
│ │ ├── project.xcworkspace
│ │ │ └── xcshareddata
│ │ │ │ └── IDEWorkspaceChecks.plist
│ │ └── xcshareddata
│ │ │ └── xcschemes
│ │ │ └── Runner.xcscheme
│ ├── Runner.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ └── Runner
│ │ ├── AppDelegate.swift
│ │ ├── Assets.xcassets
│ │ └── AppIcon.appiconset
│ │ │ ├── Contents.json
│ │ │ ├── app_icon_1024.png
│ │ │ ├── app_icon_128.png
│ │ │ ├── app_icon_16.png
│ │ │ ├── app_icon_256.png
│ │ │ ├── app_icon_32.png
│ │ │ ├── app_icon_512.png
│ │ │ └── app_icon_64.png
│ │ ├── Base.lproj
│ │ └── MainMenu.xib
│ │ ├── Configs
│ │ ├── AppInfo.xcconfig
│ │ ├── Debug.xcconfig
│ │ ├── Release.xcconfig
│ │ └── Warnings.xcconfig
│ │ ├── DebugProfile.entitlements
│ │ ├── Info.plist
│ │ ├── MainFlutterWindow.swift
│ │ └── Release.entitlements
├── pubspec.yaml
├── web
│ ├── favicon.png
│ ├── icons
│ │ ├── Icon-192.png
│ │ ├── Icon-512.png
│ │ ├── Icon-maskable-192.png
│ │ └── Icon-maskable-512.png
│ ├── index.html
│ ├── manifest.json
│ └── worker.js
└── windows
│ ├── .gitignore
│ ├── CMakeLists.txt
│ ├── flutter
│ ├── CMakeLists.txt
│ ├── generated_plugin_registrant.cc
│ ├── generated_plugin_registrant.h
│ └── generated_plugins.cmake
│ └── runner
│ ├── CMakeLists.txt
│ ├── Runner.rc
│ ├── flutter_window.cpp
│ ├── flutter_window.h
│ ├── main.cpp
│ ├── resource.h
│ ├── resources
│ └── app_icon.ico
│ ├── runner.exe.manifest
│ ├── utils.cpp
│ ├── utils.h
│ ├── win32_window.cpp
│ └── win32_window.h
├── lib
├── archetype.dart
├── backbone.dart
├── builders.dart
├── component_node.dart
├── filter.dart
├── iterable.dart
├── logging
│ ├── log.dart
│ └── no_op_log.dart
├── message.dart
├── node.dart
├── position_node.dart
├── prelude
│ ├── input
│ │ ├── key.dart
│ │ ├── long.dart
│ │ ├── mod.dart
│ │ ├── plugins
│ │ │ ├── drag.dart
│ │ │ ├── hoverable.dart
│ │ │ ├── selectable.dart
│ │ │ └── taps.dart
│ │ └── pointer.dart
│ ├── mod.dart
│ ├── sprite
│ │ ├── mod.dart
│ │ ├── system.dart
│ │ └── trait.dart
│ ├── text
│ │ ├── mod.dart
│ │ ├── system.dart
│ │ └── trait.dart
│ ├── time.dart
│ └── transform.dart
├── realm.dart
├── realm_mixin.dart
├── system.dart
├── trait.dart
└── widget.dart
├── pubspec.yaml
├── run_test.bat
├── run_test.sh
└── test
├── archetype_test.dart
├── filter_test.dart
├── node_test.dart
├── query_test.dart
├── realm_test.dart
├── resource_test.dart
├── system_test.dart
└── test_game.dart
/.github/workflows/build_check_test.yml:
--------------------------------------------------------------------------------
1 | # This is a basic workflow to help you get started with Actions
2 |
3 | name: Build, Check & Test
4 |
5 | # Controls when the workflow will run
6 | on:
7 | push:
8 | pull_request:
9 |
10 | # Allows you to run this workflow manually from the Actions tab
11 | workflow_dispatch:
12 |
13 | # A workflow run is made up of one or more jobs that can run sequentially or in parallel
14 | jobs:
15 | # This workflow contains a single job called "build"
16 | build:
17 | # The type of runner that the job will run on
18 | runs-on: ubuntu-latest
19 |
20 | # Steps represent a sequence of tasks that will be executed as part of the job
21 | steps:
22 | # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
23 | - uses: actions/checkout@v3
24 | # Flutter
25 | - uses: subosito/flutter-action@v2
26 | with:
27 | channel: 'stable' # or: 'beta', 'dev' or 'master'
28 | - run: flutter --version
29 | # Restore packages
30 | - name: Restore packages
31 | run: |
32 | flutter pub get
33 | # Run tests
34 | - name: Run flutter tests
35 | run: |
36 | flutter analyze
37 | flutter test --coverage .
38 | - name: Upload coverage to codecov
39 | run: |
40 | curl -Os https://uploader.codecov.io/latest/linux/codecov
41 | chmod +x codecov
42 | ./codecov
43 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Miscellaneous
2 | *.class
3 | *.lock
4 | *.log
5 | *.pyc
6 | *.swp
7 | .DS_Store
8 | .atom/
9 | .buildlog/
10 | .history
11 | .svn/
12 |
13 | # IntelliJ related
14 | *.iml
15 | *.ipr
16 | *.iws
17 | .idea/
18 |
19 | # Visual Studio Code related
20 | .classpath
21 | .project
22 | .settings/
23 | .vscode/
24 |
25 | # Flutter repo-specific
26 | /bin/cache/
27 | /bin/internal/bootstrap.bat
28 | /bin/internal/bootstrap.sh
29 | /bin/mingit/
30 | /dev/benchmarks/mega_gallery/
31 | /dev/bots/.recipe_deps
32 | /dev/bots/android_tools/
33 | /dev/devicelab/ABresults*.json
34 | /dev/docs/doc/
35 | /dev/docs/flutter.docs.zip
36 | /dev/docs/lib/
37 | /dev/docs/pubspec.yaml
38 | /dev/integration_tests/**/xcuserdata
39 | /dev/integration_tests/**/Pods
40 | /packages/flutter/coverage/
41 | version
42 | analysis_benchmark.json
43 |
44 | # packages file containing multi-root paths
45 | .packages.generated
46 |
47 | # Flutter/Dart/Pub related
48 | **/doc/api/
49 | .dart_tool/
50 | .flutter-plugins
51 | .flutter-plugins-dependencies
52 | **/generated_plugin_registrant.dart
53 | .packages
54 | .pub-cache/
55 | .pub/
56 | build/
57 | flutter_*.png
58 | linked_*.ds
59 | unlinked.ds
60 | unlinked_spec.ds
61 |
62 | # Android related
63 | **/android/**/gradle-wrapper.jar
64 | .gradle/
65 | **/android/captures/
66 | **/android/gradlew
67 | **/android/gradlew.bat
68 | **/android/local.properties
69 | **/android/**/GeneratedPluginRegistrant.java
70 | **/android/key.properties
71 | *.jks
72 |
73 | # iOS/XCode related
74 | **/ios/**/*.mode1v3
75 | **/ios/**/*.mode2v3
76 | **/ios/**/*.moved-aside
77 | **/ios/**/*.pbxuser
78 | **/ios/**/*.perspectivev3
79 | **/ios/**/*sync/
80 | **/ios/**/.sconsign.dblite
81 | **/ios/**/.tags*
82 | **/ios/**/.vagrant/
83 | **/ios/**/DerivedData/
84 | **/ios/**/Icon?
85 | **/ios/**/Pods/
86 | **/ios/**/.symlinks/
87 | **/ios/**/profile
88 | **/ios/**/xcuserdata
89 | **/ios/.generated/
90 | **/ios/Flutter/.last_build_id
91 | **/ios/Flutter/App.framework
92 | **/ios/Flutter/Flutter.framework
93 | **/ios/Flutter/Flutter.podspec
94 | **/ios/Flutter/Generated.xcconfig
95 | **/ios/Flutter/ephemeral
96 | **/ios/Flutter/app.flx
97 | **/ios/Flutter/app.zip
98 | **/ios/Flutter/flutter_assets/
99 | **/ios/Flutter/flutter_export_environment.sh
100 | **/ios/ServiceDefinitions.json
101 | **/ios/Runner/GeneratedPluginRegistrant.*
102 |
103 | # macOS
104 | **/Flutter/ephemeral/
105 | **/Pods/
106 | **/macos/Flutter/GeneratedPluginRegistrant.swift
107 | **/macos/Flutter/ephemeral
108 | **/xcuserdata/
109 |
110 | # Windows
111 | **/windows/flutter/generated_plugin_registrant.cc
112 | **/windows/flutter/generated_plugin_registrant.h
113 | **/windows/flutter/generated_plugins.cmake
114 |
115 | # Linux
116 | **/linux/flutter/generated_plugin_registrant.cc
117 | **/linux/flutter/generated_plugin_registrant.h
118 | **/linux/flutter/generated_plugins.cmake
119 |
120 | # Coverage
121 | coverage/
122 |
123 | # Symbols
124 | app.*.symbols
125 |
126 | # Exceptions to above rules.
127 | !**/ios/**/default.mode1v3
128 | !**/ios/**/default.mode2v3
129 | !**/ios/**/default.pbxuser
130 | !**/ios/**/default.perspectivev3
131 | !/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages
132 | !/dev/ci/**/Gemfile.lock
--------------------------------------------------------------------------------
/.idea/libraries/Dart_SDK.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/.idea/modules.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/.idea/workspace.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
--------------------------------------------------------------------------------
/.metadata:
--------------------------------------------------------------------------------
1 | # This file tracks properties of this Flutter project.
2 | # Used by Flutter tool to assess capabilities and perform upgrades etc.
3 | #
4 | # This file should be version controlled and should not be manually edited.
5 |
6 | version:
7 | revision: f1875d570e39de09040c8f79aa13cc56baab8db1
8 | channel: stable
9 |
10 | project_type: package
11 |
--------------------------------------------------------------------------------
/.vscode/launch.json:
--------------------------------------------------------------------------------
1 | {
2 | // Use IntelliSense to learn about possible attributes.
3 | // Hover to view descriptions of existing attributes.
4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
5 | "version": "0.2.0",
6 | "configurations": [
7 | {
8 | "name": "backbone",
9 | "request": "launch",
10 | "type": "dart"
11 | },
12 | {
13 | "name": "backbone (profile mode)",
14 | "request": "launch",
15 | "type": "dart",
16 | "flutterMode": "profile"
17 | },
18 | {
19 | "name": "backbone (release mode)",
20 | "request": "launch",
21 | "type": "dart",
22 | "flutterMode": "release"
23 | },
24 | {
25 | "name": "benchmark",
26 | "cwd": "benchmark",
27 | "request": "launch",
28 | "type": "dart"
29 | },
30 | {
31 | "name": "benchmark (profile mode)",
32 | "cwd": "benchmark",
33 | "request": "launch",
34 | "type": "dart",
35 | "flutterMode": "profile"
36 | },
37 | {
38 | "name": "benchmark (release mode)",
39 | "cwd": "benchmark",
40 | "request": "launch",
41 | "type": "dart",
42 | "flutterMode": "release"
43 | },
44 | {
45 | "name": "example",
46 | "cwd": "example",
47 | "request": "launch",
48 | "type": "dart"
49 | },
50 | {
51 | "name": "example (profile mode)",
52 | "cwd": "example",
53 | "request": "launch",
54 | "type": "dart",
55 | "flutterMode": "profile"
56 | },
57 | {
58 | "name": "example (release mode)",
59 | "cwd": "example",
60 | "request": "launch",
61 | "type": "dart",
62 | "flutterMode": "release"
63 | },
64 | {
65 | "name": "prefmon",
66 | "cwd": "prefmon",
67 | "request": "launch",
68 | "type": "dart"
69 | },
70 | {
71 | "name": "prefmon (profile mode)",
72 | "cwd": "prefmon",
73 | "request": "launch",
74 | "type": "dart",
75 | "flutterMode": "profile"
76 | },
77 | {
78 | "name": "prefmon (release mode)",
79 | "cwd": "prefmon",
80 | "request": "launch",
81 | "type": "dart",
82 | "flutterMode": "release"
83 | }
84 | ]
85 | }
--------------------------------------------------------------------------------
/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | ## 0.0.1
2 |
3 | * TODO: Describe initial release.
4 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | TODO: Add your license here.
2 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # backbone
2 | ## What is backbone?
3 | Lightweight, ECS-like package for Flame and Flutter. Backbone doesn't seek to replace the component system in Flame, it extends it by ECS patterns and a unified multi-platform input system.
4 |
5 | ## Is it ready for production?
6 | *No*, we are still working on this package, currently we are using it in a not yet announced project.
7 |
8 | ## What does backbone do for me?
9 | It helps you to organize and structure features of your game and still use the many great features Flame ships. With backbone you can also increase the reusability of code. Backbone comes with a some build in features to support you.
10 |
11 | - Multiplatform input system for:
12 | - Taps
13 | - Drags
14 | - Long press
15 | - Keyboard events
16 | - All pointer types are supported (touch, mouse, stylus)
17 | - Message system to decouple game elements from each other
18 | - Fast queries for your nodes (game elements)
19 |
20 | ## Can I use backbone beside the existing component system?
21 | Yes! Backbone doesn't try to replace the component system at all. You can see it as an addition/upgrade to it.
22 |
23 | ## Is it only something for new projects?
24 | No! You can add backbone to any Flame game and use it alongside the existing components.
25 |
26 | ## Do you have an example?
27 | Yes, there is simple example application that showcases all basic uses-cases of backbone. The code for the app can be found in [example](https://github.com/sturdykeep/backbone/tree/main/example/lib), a [live demo can be found here](https://sturdykeep.github.io/backbone/example_app/).
28 |
29 | ## Check out the docs
30 | Check out our [documentation here](https://github.com/sturdykeep/backbone/blob/main/docs/docs.md) in the repository or directly in the code.
31 |
--------------------------------------------------------------------------------
/analysis_options.yaml:
--------------------------------------------------------------------------------
1 | include: package:flutter_lints/flutter.yaml
2 |
3 | # Additional information about this file can be found at
4 | # https://dart.dev/guides/language/analysis-options
5 |
--------------------------------------------------------------------------------
/backbone.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/docs/docs.md:
--------------------------------------------------------------------------------
1 | # Placeholder
--------------------------------------------------------------------------------
/docs/example_app/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sturdykeep/backbone/0e274866877f25bf0b21a80de2eff4b54ec6f5db/docs/example_app/.DS_Store
--------------------------------------------------------------------------------
/docs/example_app/assets/AssetManifest.json:
--------------------------------------------------------------------------------
1 | {"assets/images/dash.png":["assets/images/dash.png"],"packages/cupertino_icons/assets/CupertinoIcons.ttf":["packages/cupertino_icons/assets/CupertinoIcons.ttf"]}
--------------------------------------------------------------------------------
/docs/example_app/assets/FontManifest.json:
--------------------------------------------------------------------------------
1 | [{"family":"MaterialIcons","fonts":[{"asset":"fonts/MaterialIcons-Regular.otf"}]},{"family":"packages/cupertino_icons/CupertinoIcons","fonts":[{"asset":"packages/cupertino_icons/assets/CupertinoIcons.ttf"}]}]
--------------------------------------------------------------------------------
/docs/example_app/assets/assets/images/dash.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sturdykeep/backbone/0e274866877f25bf0b21a80de2eff4b54ec6f5db/docs/example_app/assets/assets/images/dash.png
--------------------------------------------------------------------------------
/docs/example_app/assets/fonts/MaterialIcons-Regular.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sturdykeep/backbone/0e274866877f25bf0b21a80de2eff4b54ec6f5db/docs/example_app/assets/fonts/MaterialIcons-Regular.otf
--------------------------------------------------------------------------------
/docs/example_app/assets/packages/cupertino_icons/assets/CupertinoIcons.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sturdykeep/backbone/0e274866877f25bf0b21a80de2eff4b54ec6f5db/docs/example_app/assets/packages/cupertino_icons/assets/CupertinoIcons.ttf
--------------------------------------------------------------------------------
/docs/example_app/canvaskit/canvaskit.wasm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sturdykeep/backbone/0e274866877f25bf0b21a80de2eff4b54ec6f5db/docs/example_app/canvaskit/canvaskit.wasm
--------------------------------------------------------------------------------
/docs/example_app/canvaskit/profiling/canvaskit.wasm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sturdykeep/backbone/0e274866877f25bf0b21a80de2eff4b54ec6f5db/docs/example_app/canvaskit/profiling/canvaskit.wasm
--------------------------------------------------------------------------------
/docs/example_app/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sturdykeep/backbone/0e274866877f25bf0b21a80de2eff4b54ec6f5db/docs/example_app/favicon.png
--------------------------------------------------------------------------------
/docs/example_app/icons/Icon-192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sturdykeep/backbone/0e274866877f25bf0b21a80de2eff4b54ec6f5db/docs/example_app/icons/Icon-192.png
--------------------------------------------------------------------------------
/docs/example_app/icons/Icon-512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sturdykeep/backbone/0e274866877f25bf0b21a80de2eff4b54ec6f5db/docs/example_app/icons/Icon-512.png
--------------------------------------------------------------------------------
/docs/example_app/icons/Icon-maskable-192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sturdykeep/backbone/0e274866877f25bf0b21a80de2eff4b54ec6f5db/docs/example_app/icons/Icon-maskable-192.png
--------------------------------------------------------------------------------
/docs/example_app/icons/Icon-maskable-512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sturdykeep/backbone/0e274866877f25bf0b21a80de2eff4b54ec6f5db/docs/example_app/icons/Icon-maskable-512.png
--------------------------------------------------------------------------------
/docs/example_app/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 | example
34 |
35 |
36 |
40 |
41 |
42 |
43 |
44 |
45 |
59 |
60 |
61 |
--------------------------------------------------------------------------------
/docs/example_app/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "example",
3 | "short_name": "example",
4 | "start_url": ".",
5 | "display": "standalone",
6 | "background_color": "#0175C2",
7 | "theme_color": "#0175C2",
8 | "description": "A new Flutter project.",
9 | "orientation": "portrait-primary",
10 | "prefer_related_applications": false,
11 | "icons": [
12 | {
13 | "src": "icons/Icon-192.png",
14 | "sizes": "192x192",
15 | "type": "image/png"
16 | },
17 | {
18 | "src": "icons/Icon-512.png",
19 | "sizes": "512x512",
20 | "type": "image/png"
21 | },
22 | {
23 | "src": "icons/Icon-maskable-192.png",
24 | "sizes": "192x192",
25 | "type": "image/png",
26 | "purpose": "maskable"
27 | },
28 | {
29 | "src": "icons/Icon-maskable-512.png",
30 | "sizes": "512x512",
31 | "type": "image/png",
32 | "purpose": "maskable"
33 | }
34 | ]
35 | }
36 |
--------------------------------------------------------------------------------
/docs/example_app/version.json:
--------------------------------------------------------------------------------
1 | {"app_name":"example","version":"1.0.0","build_number":"1","package_name":"example"}
--------------------------------------------------------------------------------
/example/.gitignore:
--------------------------------------------------------------------------------
1 | # Miscellaneous
2 | *.class
3 | *.log
4 | *.pyc
5 | *.swp
6 | .DS_Store
7 | .atom/
8 | .buildlog/
9 | .history
10 | .svn/
11 | migrate_working_dir/
12 |
13 | # IntelliJ related
14 | *.iml
15 | *.ipr
16 | *.iws
17 | .idea/
18 |
19 | # The .vscode folder contains launch configuration and tasks you configure in
20 | # VS Code which you may wish to be included in version control, so this line
21 | # is commented out by default.
22 | #.vscode/
23 |
24 | # Flutter/Dart/Pub related
25 | **/doc/api/
26 | **/ios/Flutter/.last_build_id
27 | .dart_tool/
28 | .flutter-plugins
29 | .flutter-plugins-dependencies
30 | .packages
31 | .pub-cache/
32 | .pub/
33 | /build/
34 |
35 | # Web related
36 |
37 | # Symbolication related
38 | app.*.symbols
39 |
40 | # Obfuscation related
41 | app.*.map.json
42 |
43 | # Android Studio will place build artifacts here
44 | /android/app/debug
45 | /android/app/profile
46 | /android/app/release
47 |
--------------------------------------------------------------------------------
/example/.metadata:
--------------------------------------------------------------------------------
1 | # This file tracks properties of this Flutter project.
2 | # Used by Flutter tool to assess capabilities and perform upgrades etc.
3 | #
4 | # This file should be version controlled.
5 |
6 | version:
7 | revision: 4f9d92fbbdf072a70a70d2179a9f87392b94104c
8 | channel: stable
9 |
10 | project_type: app
11 |
12 | # Tracks metadata for the flutter migrate command
13 | migration:
14 | platforms:
15 | - platform: root
16 | create_revision: 4f9d92fbbdf072a70a70d2179a9f87392b94104c
17 | base_revision: 4f9d92fbbdf072a70a70d2179a9f87392b94104c
18 | - platform: android
19 | create_revision: 4f9d92fbbdf072a70a70d2179a9f87392b94104c
20 | base_revision: 4f9d92fbbdf072a70a70d2179a9f87392b94104c
21 | - platform: ios
22 | create_revision: 4f9d92fbbdf072a70a70d2179a9f87392b94104c
23 | base_revision: 4f9d92fbbdf072a70a70d2179a9f87392b94104c
24 | - platform: linux
25 | create_revision: 4f9d92fbbdf072a70a70d2179a9f87392b94104c
26 | base_revision: 4f9d92fbbdf072a70a70d2179a9f87392b94104c
27 | - platform: macos
28 | create_revision: 4f9d92fbbdf072a70a70d2179a9f87392b94104c
29 | base_revision: 4f9d92fbbdf072a70a70d2179a9f87392b94104c
30 | - platform: web
31 | create_revision: 4f9d92fbbdf072a70a70d2179a9f87392b94104c
32 | base_revision: 4f9d92fbbdf072a70a70d2179a9f87392b94104c
33 | - platform: windows
34 | create_revision: 4f9d92fbbdf072a70a70d2179a9f87392b94104c
35 | base_revision: 4f9d92fbbdf072a70a70d2179a9f87392b94104c
36 |
37 | # User provided section
38 |
39 | # List of Local paths (relative to this file) that should be
40 | # ignored by the migrate tool.
41 | #
42 | # Files that are not part of the templates will be ignored by default.
43 | unmanaged_files:
44 | - 'lib/main.dart'
45 | - 'ios/Runner.xcodeproj/project.pbxproj'
46 |
--------------------------------------------------------------------------------
/example/README.md:
--------------------------------------------------------------------------------
1 | # Example is comming soons
--------------------------------------------------------------------------------
/example/analysis_options.yaml:
--------------------------------------------------------------------------------
1 | # This file configures the analyzer, which statically analyzes Dart code to
2 | # check for errors, warnings, and lints.
3 | #
4 | # The issues identified by the analyzer are surfaced in the UI of Dart-enabled
5 | # IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be
6 | # invoked from the command line by running `flutter analyze`.
7 |
8 | # The following line activates a set of recommended lints for Flutter apps,
9 | # packages, and plugins designed to encourage good coding practices.
10 | include: package:flutter_lints/flutter.yaml
11 |
12 | linter:
13 | # The lint rules applied to this project can be customized in the
14 | # section below to disable rules from the `package:flutter_lints/flutter.yaml`
15 | # included above or to enable additional rules. A list of all available lints
16 | # and their documentation is published at
17 | # https://dart-lang.github.io/linter/lints/index.html.
18 | #
19 | # Instead of disabling a lint rule for the entire project in the
20 | # section below, it can also be suppressed for a single line of code
21 | # or a specific dart file by using the `// ignore: name_of_lint` and
22 | # `// ignore_for_file: name_of_lint` syntax on the line or in the file
23 | # producing the lint.
24 | rules:
25 | # avoid_print: false # Uncomment to disable the `avoid_print` rule
26 | # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule
27 |
28 | # Additional information about this file can be found at
29 | # https://dart.dev/guides/language/analysis-options
30 |
--------------------------------------------------------------------------------
/example/android/.gitignore:
--------------------------------------------------------------------------------
1 | gradle-wrapper.jar
2 | /.gradle
3 | /captures/
4 | /gradlew
5 | /gradlew.bat
6 | /local.properties
7 | GeneratedPluginRegistrant.java
8 |
9 | # Remember to never publicly share your keystore.
10 | # See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app
11 | key.properties
12 | **/*.keystore
13 | **/*.jks
14 |
--------------------------------------------------------------------------------
/example/android/app/build.gradle:
--------------------------------------------------------------------------------
1 | def localProperties = new Properties()
2 | def localPropertiesFile = rootProject.file('local.properties')
3 | if (localPropertiesFile.exists()) {
4 | localPropertiesFile.withReader('UTF-8') { reader ->
5 | localProperties.load(reader)
6 | }
7 | }
8 |
9 | def flutterRoot = localProperties.getProperty('flutter.sdk')
10 | if (flutterRoot == null) {
11 | throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")
12 | }
13 |
14 | def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
15 | if (flutterVersionCode == null) {
16 | flutterVersionCode = '1'
17 | }
18 |
19 | def flutterVersionName = localProperties.getProperty('flutter.versionName')
20 | if (flutterVersionName == null) {
21 | flutterVersionName = '1.0'
22 | }
23 |
24 | apply plugin: 'com.android.application'
25 | apply plugin: 'kotlin-android'
26 | apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
27 |
28 | android {
29 | compileSdkVersion flutter.compileSdkVersion
30 | ndkVersion flutter.ndkVersion
31 |
32 | compileOptions {
33 | sourceCompatibility JavaVersion.VERSION_1_8
34 | targetCompatibility JavaVersion.VERSION_1_8
35 | }
36 |
37 | kotlinOptions {
38 | jvmTarget = '1.8'
39 | }
40 |
41 | sourceSets {
42 | main.java.srcDirs += 'src/main/kotlin'
43 | }
44 |
45 | defaultConfig {
46 | // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
47 | applicationId "com.example.example"
48 | // You can update the following values to match your application needs.
49 | // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-build-configuration.
50 | minSdkVersion flutter.minSdkVersion
51 | targetSdkVersion flutter.targetSdkVersion
52 | versionCode flutterVersionCode.toInteger()
53 | versionName flutterVersionName
54 | }
55 |
56 | buildTypes {
57 | release {
58 | // TODO: Add your own signing config for the release build.
59 | // Signing with the debug keys for now, so `flutter run --release` works.
60 | signingConfig signingConfigs.debug
61 | }
62 | }
63 | }
64 |
65 | flutter {
66 | source '../..'
67 | }
68 |
69 | dependencies {
70 | implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
71 | }
72 |
--------------------------------------------------------------------------------
/example/android/app/src/debug/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/example/android/app/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
7 |
15 |
19 |
23 |
24 |
25 |
26 |
27 |
28 |
30 |
33 |
34 |
35 |
--------------------------------------------------------------------------------
/example/android/app/src/main/kotlin/com/example/example/MainActivity.kt:
--------------------------------------------------------------------------------
1 | package com.example.example
2 |
3 | import io.flutter.embedding.android.FlutterActivity
4 |
5 | class MainActivity: FlutterActivity() {
6 | }
7 |
--------------------------------------------------------------------------------
/example/android/app/src/main/res/drawable-v21/launch_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
12 |
13 |
--------------------------------------------------------------------------------
/example/android/app/src/main/res/drawable/launch_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
12 |
13 |
--------------------------------------------------------------------------------
/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sturdykeep/backbone/0e274866877f25bf0b21a80de2eff4b54ec6f5db/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sturdykeep/backbone/0e274866877f25bf0b21a80de2eff4b54ec6f5db/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sturdykeep/backbone/0e274866877f25bf0b21a80de2eff4b54ec6f5db/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sturdykeep/backbone/0e274866877f25bf0b21a80de2eff4b54ec6f5db/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sturdykeep/backbone/0e274866877f25bf0b21a80de2eff4b54ec6f5db/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/example/android/app/src/main/res/values-night/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
9 |
15 |
18 |
19 |
--------------------------------------------------------------------------------
/example/android/app/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
9 |
15 |
18 |
19 |
--------------------------------------------------------------------------------
/example/android/app/src/profile/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/example/android/build.gradle:
--------------------------------------------------------------------------------
1 | buildscript {
2 | ext.kotlin_version = '1.6.10'
3 | repositories {
4 | google()
5 | mavenCentral()
6 | }
7 |
8 | dependencies {
9 | classpath 'com.android.tools.build:gradle:7.1.2'
10 | classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
11 | }
12 | }
13 |
14 | allprojects {
15 | repositories {
16 | google()
17 | mavenCentral()
18 | }
19 | }
20 |
21 | rootProject.buildDir = '../build'
22 | subprojects {
23 | project.buildDir = "${rootProject.buildDir}/${project.name}"
24 | }
25 | subprojects {
26 | project.evaluationDependsOn(':app')
27 | }
28 |
29 | task clean(type: Delete) {
30 | delete rootProject.buildDir
31 | }
32 |
--------------------------------------------------------------------------------
/example/android/gradle.properties:
--------------------------------------------------------------------------------
1 | org.gradle.jvmargs=-Xmx1536M
2 | android.useAndroidX=true
3 | android.enableJetifier=true
4 |
--------------------------------------------------------------------------------
/example/android/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | #Fri Jun 23 08:50:38 CEST 2017
2 | distributionBase=GRADLE_USER_HOME
3 | distributionPath=wrapper/dists
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-all.zip
7 |
--------------------------------------------------------------------------------
/example/android/settings.gradle:
--------------------------------------------------------------------------------
1 | include ':app'
2 |
3 | def localPropertiesFile = new File(rootProject.projectDir, "local.properties")
4 | def properties = new Properties()
5 |
6 | assert localPropertiesFile.exists()
7 | localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) }
8 |
9 | def flutterSdkPath = properties.getProperty("flutter.sdk")
10 | assert flutterSdkPath != null, "flutter.sdk not set in local.properties"
11 | apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle"
12 |
--------------------------------------------------------------------------------
/example/assets/images/dash.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sturdykeep/backbone/0e274866877f25bf0b21a80de2eff4b54ec6f5db/example/assets/images/dash.png
--------------------------------------------------------------------------------
/example/ios/.gitignore:
--------------------------------------------------------------------------------
1 | **/dgph
2 | *.mode1v3
3 | *.mode2v3
4 | *.moved-aside
5 | *.pbxuser
6 | *.perspectivev3
7 | **/*sync/
8 | .sconsign.dblite
9 | .tags*
10 | **/.vagrant/
11 | **/DerivedData/
12 | Icon?
13 | **/Pods/
14 | **/.symlinks/
15 | profile
16 | xcuserdata
17 | **/.generated/
18 | Flutter/App.framework
19 | Flutter/Flutter.framework
20 | Flutter/Flutter.podspec
21 | Flutter/Generated.xcconfig
22 | Flutter/ephemeral/
23 | Flutter/app.flx
24 | Flutter/app.zip
25 | Flutter/flutter_assets/
26 | Flutter/flutter_export_environment.sh
27 | ServiceDefinitions.json
28 | Runner/GeneratedPluginRegistrant.*
29 |
30 | # Exceptions to above rules.
31 | !default.mode1v3
32 | !default.mode2v3
33 | !default.pbxuser
34 | !default.perspectivev3
35 |
--------------------------------------------------------------------------------
/example/ios/Flutter/AppFrameworkInfo.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | App
9 | CFBundleIdentifier
10 | io.flutter.flutter.app
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | App
15 | CFBundlePackageType
16 | FMWK
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | 1.0
23 | MinimumOSVersion
24 | 11.0
25 |
26 |
27 |
--------------------------------------------------------------------------------
/example/ios/Flutter/Debug.xcconfig:
--------------------------------------------------------------------------------
1 | #include "Generated.xcconfig"
2 |
--------------------------------------------------------------------------------
/example/ios/Flutter/Release.xcconfig:
--------------------------------------------------------------------------------
1 | #include "Generated.xcconfig"
2 |
--------------------------------------------------------------------------------
/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | PreviewsEnabled
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
30 |
31 |
37 |
38 |
39 |
40 |
41 |
42 |
52 |
54 |
60 |
61 |
62 |
63 |
69 |
71 |
77 |
78 |
79 |
80 |
82 |
83 |
86 |
87 |
88 |
--------------------------------------------------------------------------------
/example/ios/Runner.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | PreviewsEnabled
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/example/ios/Runner/AppDelegate.swift:
--------------------------------------------------------------------------------
1 | import UIKit
2 | import Flutter
3 |
4 | @UIApplicationMain
5 | @objc class AppDelegate: FlutterAppDelegate {
6 | override func application(
7 | _ application: UIApplication,
8 | didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
9 | ) -> Bool {
10 | GeneratedPluginRegistrant.register(with: self)
11 | return super.application(application, didFinishLaunchingWithOptions: launchOptions)
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "size" : "20x20",
5 | "idiom" : "iphone",
6 | "filename" : "Icon-App-20x20@2x.png",
7 | "scale" : "2x"
8 | },
9 | {
10 | "size" : "20x20",
11 | "idiom" : "iphone",
12 | "filename" : "Icon-App-20x20@3x.png",
13 | "scale" : "3x"
14 | },
15 | {
16 | "size" : "29x29",
17 | "idiom" : "iphone",
18 | "filename" : "Icon-App-29x29@1x.png",
19 | "scale" : "1x"
20 | },
21 | {
22 | "size" : "29x29",
23 | "idiom" : "iphone",
24 | "filename" : "Icon-App-29x29@2x.png",
25 | "scale" : "2x"
26 | },
27 | {
28 | "size" : "29x29",
29 | "idiom" : "iphone",
30 | "filename" : "Icon-App-29x29@3x.png",
31 | "scale" : "3x"
32 | },
33 | {
34 | "size" : "40x40",
35 | "idiom" : "iphone",
36 | "filename" : "Icon-App-40x40@2x.png",
37 | "scale" : "2x"
38 | },
39 | {
40 | "size" : "40x40",
41 | "idiom" : "iphone",
42 | "filename" : "Icon-App-40x40@3x.png",
43 | "scale" : "3x"
44 | },
45 | {
46 | "size" : "60x60",
47 | "idiom" : "iphone",
48 | "filename" : "Icon-App-60x60@2x.png",
49 | "scale" : "2x"
50 | },
51 | {
52 | "size" : "60x60",
53 | "idiom" : "iphone",
54 | "filename" : "Icon-App-60x60@3x.png",
55 | "scale" : "3x"
56 | },
57 | {
58 | "size" : "20x20",
59 | "idiom" : "ipad",
60 | "filename" : "Icon-App-20x20@1x.png",
61 | "scale" : "1x"
62 | },
63 | {
64 | "size" : "20x20",
65 | "idiom" : "ipad",
66 | "filename" : "Icon-App-20x20@2x.png",
67 | "scale" : "2x"
68 | },
69 | {
70 | "size" : "29x29",
71 | "idiom" : "ipad",
72 | "filename" : "Icon-App-29x29@1x.png",
73 | "scale" : "1x"
74 | },
75 | {
76 | "size" : "29x29",
77 | "idiom" : "ipad",
78 | "filename" : "Icon-App-29x29@2x.png",
79 | "scale" : "2x"
80 | },
81 | {
82 | "size" : "40x40",
83 | "idiom" : "ipad",
84 | "filename" : "Icon-App-40x40@1x.png",
85 | "scale" : "1x"
86 | },
87 | {
88 | "size" : "40x40",
89 | "idiom" : "ipad",
90 | "filename" : "Icon-App-40x40@2x.png",
91 | "scale" : "2x"
92 | },
93 | {
94 | "size" : "76x76",
95 | "idiom" : "ipad",
96 | "filename" : "Icon-App-76x76@1x.png",
97 | "scale" : "1x"
98 | },
99 | {
100 | "size" : "76x76",
101 | "idiom" : "ipad",
102 | "filename" : "Icon-App-76x76@2x.png",
103 | "scale" : "2x"
104 | },
105 | {
106 | "size" : "83.5x83.5",
107 | "idiom" : "ipad",
108 | "filename" : "Icon-App-83.5x83.5@2x.png",
109 | "scale" : "2x"
110 | },
111 | {
112 | "size" : "1024x1024",
113 | "idiom" : "ios-marketing",
114 | "filename" : "Icon-App-1024x1024@1x.png",
115 | "scale" : "1x"
116 | }
117 | ],
118 | "info" : {
119 | "version" : 1,
120 | "author" : "xcode"
121 | }
122 | }
123 |
--------------------------------------------------------------------------------
/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sturdykeep/backbone/0e274866877f25bf0b21a80de2eff4b54ec6f5db/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png
--------------------------------------------------------------------------------
/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sturdykeep/backbone/0e274866877f25bf0b21a80de2eff4b54ec6f5db/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png
--------------------------------------------------------------------------------
/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sturdykeep/backbone/0e274866877f25bf0b21a80de2eff4b54ec6f5db/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png
--------------------------------------------------------------------------------
/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sturdykeep/backbone/0e274866877f25bf0b21a80de2eff4b54ec6f5db/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png
--------------------------------------------------------------------------------
/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sturdykeep/backbone/0e274866877f25bf0b21a80de2eff4b54ec6f5db/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png
--------------------------------------------------------------------------------
/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sturdykeep/backbone/0e274866877f25bf0b21a80de2eff4b54ec6f5db/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png
--------------------------------------------------------------------------------
/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sturdykeep/backbone/0e274866877f25bf0b21a80de2eff4b54ec6f5db/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png
--------------------------------------------------------------------------------
/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sturdykeep/backbone/0e274866877f25bf0b21a80de2eff4b54ec6f5db/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png
--------------------------------------------------------------------------------
/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sturdykeep/backbone/0e274866877f25bf0b21a80de2eff4b54ec6f5db/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png
--------------------------------------------------------------------------------
/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sturdykeep/backbone/0e274866877f25bf0b21a80de2eff4b54ec6f5db/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png
--------------------------------------------------------------------------------
/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sturdykeep/backbone/0e274866877f25bf0b21a80de2eff4b54ec6f5db/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png
--------------------------------------------------------------------------------
/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sturdykeep/backbone/0e274866877f25bf0b21a80de2eff4b54ec6f5db/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png
--------------------------------------------------------------------------------
/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sturdykeep/backbone/0e274866877f25bf0b21a80de2eff4b54ec6f5db/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png
--------------------------------------------------------------------------------
/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sturdykeep/backbone/0e274866877f25bf0b21a80de2eff4b54ec6f5db/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png
--------------------------------------------------------------------------------
/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sturdykeep/backbone/0e274866877f25bf0b21a80de2eff4b54ec6f5db/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png
--------------------------------------------------------------------------------
/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "LaunchImage.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "LaunchImage@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "LaunchImage@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sturdykeep/backbone/0e274866877f25bf0b21a80de2eff4b54ec6f5db/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png
--------------------------------------------------------------------------------
/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sturdykeep/backbone/0e274866877f25bf0b21a80de2eff4b54ec6f5db/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png
--------------------------------------------------------------------------------
/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sturdykeep/backbone/0e274866877f25bf0b21a80de2eff4b54ec6f5db/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png
--------------------------------------------------------------------------------
/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md:
--------------------------------------------------------------------------------
1 | # Launch Screen Assets
2 |
3 | You can customize the launch screen with your own desired assets by replacing the image files in this directory.
4 |
5 | You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images.
--------------------------------------------------------------------------------
/example/ios/Runner/Base.lproj/LaunchScreen.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
--------------------------------------------------------------------------------
/example/ios/Runner/Base.lproj/Main.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/example/ios/Runner/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CADisableMinimumFrameDurationOnPhone
6 |
7 | CFBundleDevelopmentRegion
8 | $(DEVELOPMENT_LANGUAGE)
9 | CFBundleDisplayName
10 | Example
11 | CFBundleExecutable
12 | $(EXECUTABLE_NAME)
13 | CFBundleIdentifier
14 | $(PRODUCT_BUNDLE_IDENTIFIER)
15 | CFBundleInfoDictionaryVersion
16 | 6.0
17 | CFBundleName
18 | example
19 | CFBundlePackageType
20 | APPL
21 | CFBundleShortVersionString
22 | $(FLUTTER_BUILD_NAME)
23 | CFBundleSignature
24 | ????
25 | CFBundleVersion
26 | $(FLUTTER_BUILD_NUMBER)
27 | LSRequiresIPhoneOS
28 |
29 | UILaunchStoryboardName
30 | LaunchScreen
31 | UIMainStoryboardFile
32 | Main
33 | UISupportedInterfaceOrientations
34 |
35 | UIInterfaceOrientationPortrait
36 | UIInterfaceOrientationLandscapeLeft
37 | UIInterfaceOrientationLandscapeRight
38 |
39 | UISupportedInterfaceOrientations~ipad
40 |
41 | UIInterfaceOrientationPortrait
42 | UIInterfaceOrientationPortraitUpsideDown
43 | UIInterfaceOrientationLandscapeLeft
44 | UIInterfaceOrientationLandscapeRight
45 |
46 | UIViewControllerBasedStatusBarAppearance
47 |
48 |
49 |
50 |
--------------------------------------------------------------------------------
/example/ios/Runner/Runner-Bridging-Header.h:
--------------------------------------------------------------------------------
1 | #import "GeneratedPluginRegistrant.h"
2 |
--------------------------------------------------------------------------------
/example/lib/bouncer.dart:
--------------------------------------------------------------------------------
1 | import 'dart:async';
2 |
3 | import 'package:backbone/position_node.dart';
4 | import 'package:backbone/prelude/input/plugins/hoverable.dart';
5 | import 'package:backbone/prelude/input/plugins/selectable.dart';
6 | import 'package:backbone/prelude/input/plugins/taps.dart';
7 | import 'package:backbone/prelude/transform.dart';
8 | import 'package:backbone/trait.dart';
9 | import 'package:flame/components.dart';
10 | import 'package:flame/extensions.dart';
11 | import 'package:flutter/material.dart';
12 |
13 | /// Marker trait for entities that can be bounced.
14 | class BouncerTrait extends ATrait {
15 | final Vector2 direction;
16 | final double speed;
17 |
18 | BouncerTrait(this.direction, this.speed);
19 | }
20 |
21 | class BouncerNode extends PositionNode {
22 | final Color color;
23 |
24 | var oldColor = Colors.white;
25 | var hovered = false;
26 | var selected = false;
27 |
28 | Paint get currentPaint => (children.first as RectangleComponent).paint;
29 |
30 | Color colorFromFlags() {
31 | if (hovered) {
32 | return Colors.red;
33 | } else if (selected) {
34 | return Colors.blue;
35 | } else {
36 | return color;
37 | }
38 | }
39 |
40 | BouncerNode(
41 | Vector2 size,
42 | this.color,
43 | Vector2 direction,
44 | double speed,
45 | ) : super(
46 | transformTrait: TransformTrait()..size = size,
47 | ) {
48 | // Receive tap ups
49 | final tappableTrait = TappableTrait(
50 | onJustReleased: (pointer) {
51 | if (pointer.handled == false) {
52 | debugPrint('Bouncer tapped');
53 | }
54 | },
55 | );
56 | addTrait(tappableTrait);
57 |
58 | oldColor = color;
59 | // Receive hover
60 | final hoverableTrait = HoverableTrait(
61 | onHoverEnter: (pointer) {
62 | hovered = true;
63 | currentPaint.color = colorFromFlags();
64 | },
65 | onHoverExit: (pointer) {
66 | hovered = false;
67 | currentPaint.color = colorFromFlags();
68 | },
69 | );
70 | addTrait(hoverableTrait);
71 |
72 | // Selectable trait
73 | final selectableTrait = SelectableTrait(
74 | onSelected: (pointer) {
75 | selected = true;
76 | currentPaint.color = colorFromFlags();
77 | pointer?.handled = true;
78 | return true;
79 | },
80 | onDeselected: (pointer) {
81 | selected = false;
82 | currentPaint.color = colorFromFlags();
83 | pointer?.handled = true;
84 | return true;
85 | },
86 | );
87 | addTrait(selectableTrait);
88 |
89 | addTrait(BouncerTrait(
90 | direction,
91 | speed,
92 | ));
93 | }
94 |
95 | @override
96 | FutureOr onLoad() {
97 | // Add child components here
98 | add(RectangleComponent(
99 | size: transformTrait.size, paint: Paint()..color = color));
100 |
101 | return super.onLoad();
102 | }
103 | }
104 |
--------------------------------------------------------------------------------
/example/lib/bouncer_counter.dart:
--------------------------------------------------------------------------------
1 | import 'dart:async';
2 |
3 | import 'package:backbone/filter.dart';
4 | import 'package:backbone/position_node.dart';
5 | import 'package:backbone/prelude/text/trait.dart';
6 | import 'package:backbone/prelude/transform.dart';
7 | import 'package:backbone/realm.dart';
8 | import 'package:backbone/trait.dart';
9 | import 'package:example/bouncer.dart';
10 | import 'package:flame/components.dart';
11 |
12 | class BouncerCounterTrait extends ATrait {}
13 |
14 | class BouncerCounterNode extends PositionNode {
15 | BouncerCounterNode()
16 | : super(transformTrait: TransformTrait()..position = Vector2(10, 10)) {
17 | addTrait(TextTrait());
18 | addTrait(BouncerCounterTrait());
19 | }
20 |
21 | @override
22 | FutureOr onLoad() {
23 | add(TextComponent());
24 | return super.onLoad();
25 | }
26 | }
27 |
28 | void bouncerCounterSystem(Realm realm) {
29 | final totalBouncer = realm.query(Has([BouncerTrait])).length;
30 | final counterNodes = realm.query(Has([BouncerCounterTrait, TextTrait]));
31 | for (final node in counterNodes) {
32 | node.get().text = "Bouncer: $totalBouncer";
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/example/lib/dash.dart:
--------------------------------------------------------------------------------
1 | import 'dart:async';
2 |
3 | import 'package:backbone/position_node.dart';
4 | import 'package:backbone/prelude/sprite/trait.dart';
5 | import 'package:backbone/prelude/transform.dart';
6 | import 'package:example/bouncer.dart';
7 | import 'package:flame/components.dart';
8 |
9 | class DashNode extends PositionNode {
10 | DashNode({
11 | required Vector2 direction,
12 | required double speed,
13 | }) : super(
14 | transformTrait: TransformTrait()..size = Vector2(35, 35),
15 | ) {
16 | final spriteTrait = SpriteTrait();
17 | addTrait(spriteTrait);
18 | addTrait(BouncerTrait(
19 | direction,
20 | speed,
21 | ));
22 | }
23 |
24 | @override
25 | FutureOr onLoad() async {
26 | final spriteTrait = get();
27 | spriteTrait.sprite = await gameRef.loadSprite('dash.png');
28 | add(SpriteComponent(sprite: spriteTrait.sprite));
29 | return super.onLoad();
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/example/lib/game.dart:
--------------------------------------------------------------------------------
1 | import 'dart:math';
2 |
3 | import 'package:backbone/backbone.dart';
4 | import 'package:backbone/builders.dart';
5 | import 'package:backbone/logging/log.dart';
6 | import 'package:backbone/realm_mixin.dart';
7 | import 'package:example/bouncer.dart';
8 | import 'package:example/bouncer_counter.dart';
9 | import 'package:example/message_systems.dart';
10 | import 'package:example/systems.dart';
11 | import 'package:flame/events.dart';
12 | import 'package:flame/experimental.dart';
13 | import 'package:flame/game.dart';
14 | import 'package:flutter/foundation.dart';
15 | import 'package:flutter/material.dart';
16 | import 'package:perfmon_logger/perfmon_logger.dart';
17 |
18 | import 'template_bar.dart';
19 | import 'messages.dart';
20 |
21 | class MainGame extends FlameGame
22 | with
23 | HasTappableComponents,
24 | HasDraggableComponents,
25 | KeyboardEvents,
26 | HasRealm {
27 | @override
28 | Future onLoad() async {
29 | Log? logger;
30 | if (kProfileMode) {
31 | logger = PerfmonLogger();
32 | }
33 | realm = RealmBuilder()
34 | .withPlugin(defaultPlugin)
35 | .withTrait(BouncerTrait)
36 | .withTrait(GameResizeTrait)
37 | .withTrait(TemplateSpawnerTrait)
38 | .withTrait(BouncerCounterTrait)
39 | .withSystem(bouncerCounterSystem)
40 | .withSystem(bounceSystem)
41 | .withSystem(tapSpawnSystem)
42 | .withSystem(deleteRemoveSystem)
43 | .withMessageSystem(removeBounceMessageSystem)
44 | .withMessageSystem(resizeMessageSystem)
45 | .build(realmLogger: logger);
46 | add(realm);
47 |
48 | // Generate some bouncers
49 | final rng = Random();
50 | for (var i = 0; i < 5; i++) {
51 | final bouncer = BouncerNode(
52 | Vector2.all(50.0 + 50.0 * rng.nextDouble()),
53 | Color.fromARGB(
54 | 255,
55 | (rng.nextDouble() * 255.0).toInt(),
56 | (rng.nextDouble() * 255.0).toInt(),
57 | (rng.nextDouble() * 255.0).toInt()),
58 | (Vector2.all(-1.0) + Vector2.random(rng) * 2.0),
59 | 200.0 + 200.0 * rng.nextDouble());
60 | bouncer.transformTrait.position =
61 | Vector2(canvasSize.x / 2, canvasSize.y / 2);
62 | realm.add(bouncer);
63 | }
64 | realm.add(TemplateBar(size));
65 | realm.add(BouncerCounterNode());
66 | realmReady = true;
67 | }
68 |
69 | @override
70 | void onGameResize(Vector2 canvasSize) {
71 | super.onGameResize(canvasSize);
72 | if (realmReady) {
73 | realm.pushMessage(GameResizseMessage());
74 | }
75 | }
76 | }
77 |
--------------------------------------------------------------------------------
/example/lib/main.dart:
--------------------------------------------------------------------------------
1 | import 'package:example/game.dart';
2 | import 'package:flutter/material.dart';
3 | import 'package:backbone/widget.dart';
4 |
5 | void main() async {
6 | // Spin up Flutter
7 | WidgetsFlutterBinding.ensureInitialized();
8 | // Start the actual app
9 | runApp(
10 | BackboneGameWidget(
11 | game: MainGame(),
12 | ),
13 | );
14 | }
15 |
--------------------------------------------------------------------------------
/example/lib/message_systems.dart:
--------------------------------------------------------------------------------
1 | import 'package:backbone/filter.dart';
2 | import 'package:backbone/message.dart';
3 | import 'package:backbone/realm.dart';
4 | import 'package:example/template_bar.dart';
5 | import 'package:example/messages.dart';
6 |
7 | bool removeBounceMessageSystem(Realm realm, AMessage message) {
8 | if (message is RemoveBouncerMessage) {
9 | message.bouncer.removeFromParent();
10 | return true;
11 | }
12 | return false;
13 | }
14 |
15 | bool resizeMessageSystem(Realm realm, AMessage message) {
16 | if (message is GameResizseMessage) {
17 | final nodes = realm.query(Has([GameResizeTrait]));
18 | for (var element in nodes) {
19 | element.get().resized();
20 | }
21 | return true;
22 | }
23 | return false;
24 | }
25 |
--------------------------------------------------------------------------------
/example/lib/messages.dart:
--------------------------------------------------------------------------------
1 | import 'package:backbone/message.dart';
2 | import 'package:example/bouncer.dart';
3 |
4 | class RemoveBouncerMessage extends AMessage {
5 | final BouncerNode bouncer;
6 |
7 | RemoveBouncerMessage(this.bouncer);
8 | }
9 |
10 | class GameResizseMessage extends AMessage {}
11 |
--------------------------------------------------------------------------------
/example/lib/systems.dart:
--------------------------------------------------------------------------------
1 | import 'dart:math';
2 |
3 | import 'package:backbone/filter.dart';
4 | import 'package:backbone/position_node.dart';
5 | import 'package:backbone/prelude/input/mod.dart';
6 | import 'package:backbone/prelude/input/plugins/selectable.dart';
7 | import 'package:backbone/prelude/time.dart';
8 | import 'package:backbone/prelude/transform.dart';
9 | import 'package:backbone/realm.dart';
10 | import 'package:example/bouncer.dart';
11 | import 'package:example/dash.dart';
12 | import 'package:example/messages.dart';
13 | import 'package:flame/extensions.dart';
14 | import 'package:flutter/services.dart';
15 |
16 | import 'template_bar.dart';
17 |
18 | /// System that bounces boxes off screen edges
19 | void bounceSystem(Realm realm) {
20 | final time = realm.getResource