From 43c0630d24c200bda435780b951f52721a22300a Mon Sep 17 00:00:00 2001 From: Lukas Klingsbo Date: Wed, 23 Sep 2026 16:52:32 +0200 Subject: [PATCH 1/3] chore: Migrate to Melos 8 with a pub workspace and add the Flame release workflows --- .github/.cspell/dart_dictionary.txt | 5 + .github/.cspell/mini_sprite_dictionary.txt | 3 + .github/.cspell/people_usernames.txt | 2 + .github/.cspell/words_dictionary.txt | 2 + .github/FUNDING.yml | 3 + .github/cspell.json | 46 + .github/pull_request_template.md | 72 +- .github/workflows/cicd.yml | 68 ++ .github/workflows/flame_mini_sprite.yaml | 45 - .github/workflows/flutter_mini_sprite.yaml | 46 - .github/workflows/gh-pages.yaml | 38 - .github/workflows/gh-pages.yml | 20 + .github/workflows/mini_hub_client.yaml | 46 - .github/workflows/mini_sprite.yaml | 46 - .github/workflows/mini_sprite_editor.yaml | 46 - .github/workflows/mini_treasure_quest.yaml | 37 - .github/workflows/release-prepare.yml | 28 + .github/workflows/release-publish.yml | 21 + .github/workflows/release-tag.yml | 29 + .github/workflows/spell_checker.yml | 23 + .github/workflows/title-validation.yml | 34 + .gitignore | 55 +- .idea/.name | 1 - .idea/runConfigurations/melos_bootstrap.xml | 11 - .idea/runConfigurations/melos_clean.xml | 11 - .../melos_flutter_run_example.xml | 6 - .../melos_flutter_run_mini_sprite_editor.xml | 6 - .../melos_flutter_run_mini_treasure_quest.xml | 6 - .../melos_flutter_test_flame_mini_sprite.xml | 7 - .markdownlint.yaml | 239 +++++ .markdownlintignore | 6 + CONTRIBUTING.md | 220 +++++ README.md | 27 +- melos.yaml | 5 - melos_mini_sprite.iml | 15 - packages/flame_mini_sprite/README.md | 16 +- packages/flame_mini_sprite/example/README.md | 1 + .../example/lib/main_advanced.dart | 46 +- .../flame_mini_sprite/example/pubspec.lock | 251 ----- .../flame_mini_sprite/example/pubspec.yaml | 3 +- .../src/components/mini_sprite_component.dart | 4 +- .../flame_mini_sprite/lib/src/extensions.dart | 5 +- packages/flame_mini_sprite/pubspec.lock | 508 ---------- packages/flame_mini_sprite/pubspec.yaml | 5 +- .../test/src/flame_mini_sprite_test.dart | 89 +- .../test/src/mini_sprite_component_test.dart | 81 +- packages/flutter_mini_sprite/README.md | 5 +- .../flutter_mini_sprite/example/lib/main.dart | 55 +- .../flutter_mini_sprite/example/pubspec.yaml | 3 +- packages/flutter_mini_sprite/pubspec.yaml | 3 +- packages/mini_sprite/README.md | 30 +- .../mini_sprite/lib/src/mini_library.dart | 13 +- packages/mini_sprite/lib/src/mini_map.dart | 25 +- packages/mini_sprite/lib/src/mini_sprite.dart | 32 +- packages/mini_sprite/melos_mini_sprite.iml | 16 - packages/mini_sprite/pubspec.yaml | 3 +- .../test/src/mini_library_test.dart | 57 +- .../.github/PULL_REQUEST_TEMPLATE.md | 23 - .../.github/workflows/main.yaml | 10 - .../.idea/runConfigurations/development.xml | 7 - .../.idea/runConfigurations/production.xml | 7 - .../.idea/runConfigurations/staging.xml | 7 - packages/mini_sprite_editor/.metadata | 10 - .../.vscode/extensions.json | 9 - .../mini_sprite_editor/.vscode/launch.json | 34 - packages/mini_sprite_editor/README.md | 7 +- .../mini_sprite_editor/lib/app/view/app.dart | 87 +- .../lib/config/view/config_dialog.dart | 42 +- .../lib/l10n/arb/app_en.arb | 12 +- .../lib/l10n/arb/app_localizations.dart | 10 +- .../lib/l10n/arb/app_localizations_en.dart | 4 +- .../lib/library/cubit/library_cubit.dart | 5 +- .../lib/library/view/library_panel.dart | 7 +- packages/mini_sprite_editor/lib/main.dart | 7 +- .../lib/map/cubit/map_cubit.dart | 11 +- .../lib/map/cubit/map_tool_cubit.dart | 2 +- .../lib/map/map_board/map_board_game.dart | 4 +- .../lib/map/map_board/tile_component.dart | 9 +- .../lib/map/view/map_page.dart | 51 +- .../lib/map/view/map_size_dialog.dart | 8 +- .../lib/map/view/new_property_dialog.dart | 8 +- .../lib/map/view/object_panel.dart | 11 +- .../lib/sprite/cubit/tools_cubit.dart | 2 +- .../lib/sprite/view/sprite_page.dart | 82 +- .../lib/sprite/view/sprite_size_dialog.dart | 8 +- .../lib/workspace/view/tab_workspace.dart | 7 +- packages/mini_sprite_editor/pubspec.lock | 869 ------------------ packages/mini_sprite_editor/pubspec.yaml | 3 +- .../test/config/cubit/config_cubit_test.dart | 46 +- .../library/cubit/library_cubit_test.dart | 411 ++++----- .../test/sprite/cubit/sprite_cubit_test.dart | 358 ++++---- .../test/sprite/cubit/sprite_state_test.dart | 2 +- .../test/sprite/cubit/tools_cubit_test.dart | 4 +- .../test/sprite/cubit/tools_state_test.dart | 2 +- .../test/sprite/view/sprite_view_test.dart | 6 +- .../workspace/view/workspace_view_test.dart | 4 +- packages/mini_treasure_quest/README.md | 1 + .../lib/game/entities/player.dart | 17 +- .../lib/game/entities/tile.dart | 22 +- .../lib/game/entities/treasure.dart | 6 +- .../lib/game/views/game_view.dart | 4 +- .../lib/game/views/win_dialog.dart | 10 +- packages/mini_treasure_quest/lib/main.dart | 12 +- .../lib/stages/views/stages_view.dart | 4 +- .../lib/title/views/title_view.dart | 9 +- packages/mini_treasure_quest/pubspec.lock | 499 ---------- packages/mini_treasure_quest/pubspec.yaml | 3 +- pubspec.lock | 325 ------- pubspec.yaml | 77 +- scripts/cspell-run.sh | 4 + scripts/cspell-verify.sh | 84 ++ scripts/test_formatter.dart | 211 +++++ 112 files changed, 2067 insertions(+), 3943 deletions(-) create mode 100644 .github/.cspell/dart_dictionary.txt create mode 100644 .github/.cspell/mini_sprite_dictionary.txt create mode 100644 .github/.cspell/people_usernames.txt create mode 100644 .github/.cspell/words_dictionary.txt create mode 100644 .github/FUNDING.yml create mode 100644 .github/cspell.json create mode 100644 .github/workflows/cicd.yml delete mode 100644 .github/workflows/flame_mini_sprite.yaml delete mode 100644 .github/workflows/flutter_mini_sprite.yaml delete mode 100644 .github/workflows/gh-pages.yaml create mode 100644 .github/workflows/gh-pages.yml delete mode 100644 .github/workflows/mini_hub_client.yaml delete mode 100644 .github/workflows/mini_sprite.yaml delete mode 100644 .github/workflows/mini_sprite_editor.yaml delete mode 100644 .github/workflows/mini_treasure_quest.yaml create mode 100644 .github/workflows/release-prepare.yml create mode 100644 .github/workflows/release-publish.yml create mode 100644 .github/workflows/release-tag.yml create mode 100644 .github/workflows/spell_checker.yml create mode 100644 .github/workflows/title-validation.yml delete mode 100644 .idea/.name delete mode 100644 .idea/runConfigurations/melos_bootstrap.xml delete mode 100644 .idea/runConfigurations/melos_clean.xml delete mode 100644 .idea/runConfigurations/melos_flutter_run_example.xml delete mode 100644 .idea/runConfigurations/melos_flutter_run_mini_sprite_editor.xml delete mode 100644 .idea/runConfigurations/melos_flutter_run_mini_treasure_quest.xml delete mode 100644 .idea/runConfigurations/melos_flutter_test_flame_mini_sprite.xml create mode 100644 .markdownlint.yaml create mode 100644 .markdownlintignore create mode 100644 CONTRIBUTING.md delete mode 100644 melos.yaml delete mode 100644 melos_mini_sprite.iml delete mode 100644 packages/flame_mini_sprite/example/pubspec.lock delete mode 100644 packages/flame_mini_sprite/pubspec.lock delete mode 100644 packages/mini_sprite/melos_mini_sprite.iml delete mode 100644 packages/mini_sprite_editor/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 packages/mini_sprite_editor/.github/workflows/main.yaml delete mode 100644 packages/mini_sprite_editor/.idea/runConfigurations/development.xml delete mode 100644 packages/mini_sprite_editor/.idea/runConfigurations/production.xml delete mode 100644 packages/mini_sprite_editor/.idea/runConfigurations/staging.xml delete mode 100644 packages/mini_sprite_editor/.metadata delete mode 100644 packages/mini_sprite_editor/.vscode/extensions.json delete mode 100644 packages/mini_sprite_editor/.vscode/launch.json delete mode 100644 packages/mini_sprite_editor/pubspec.lock delete mode 100644 packages/mini_treasure_quest/pubspec.lock delete mode 100644 pubspec.lock create mode 100755 scripts/cspell-run.sh create mode 100755 scripts/cspell-verify.sh create mode 100644 scripts/test_formatter.dart diff --git a/.github/.cspell/dart_dictionary.txt b/.github/.cspell/dart_dictionary.txt new file mode 100644 index 0000000..5c25aad --- /dev/null +++ b/.github/.cspell/dart_dictionary.txt @@ -0,0 +1,5 @@ +# keywords/terms specific to the Dart/Flutter ecosystem +endtemplate # Use @endtemplate to close a @template block in dartdoc +LTWH # Left, Top, Width, Height, as in Rect.fromLTWH +pubspec # dependency and configuration file of every Dart project +xcworkspace # Xcode workspace file used by Flutter on macOS and iOS diff --git a/.github/.cspell/mini_sprite_dictionary.txt b/.github/.cspell/mini_sprite_dictionary.txt new file mode 100644 index 0000000..be9e676 --- /dev/null +++ b/.github/.cspell/mini_sprite_dictionary.txt @@ -0,0 +1,3 @@ +# dictionary file for Mini Sprite related words, including companies, tools, and libraries mentioned in the codebase +Bluefire # The team behind Mini Sprite and Flame https://github.com/bluefireteam +Dashbook # UI development tool for Flutter https://github.com/bluefireteam/dashbook diff --git a/.github/.cspell/people_usernames.txt b/.github/.cspell/people_usernames.txt new file mode 100644 index 0000000..8c5c3e3 --- /dev/null +++ b/.github/.cspell/people_usernames.txt @@ -0,0 +1,2 @@ +# specific people's names and/or usernames +erickzanardo # github.com/erickzanardo diff --git a/.github/.cspell/words_dictionary.txt b/.github/.cspell/words_dictionary.txt new file mode 100644 index 0000000..072478d --- /dev/null +++ b/.github/.cspell/words_dictionary.txt @@ -0,0 +1,2 @@ +# actual english words (or common abbreviations) missing from CSpell +unfill # the opposite of fill, used for the editor's unfill tool diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 0000000..446246a --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1,3 @@ +open_collective: blue-fire +github: bluefireteam +patreon: bluefireoss \ No newline at end of file diff --git a/.github/cspell.json b/.github/cspell.json new file mode 100644 index 0000000..f9df14c --- /dev/null +++ b/.github/cspell.json @@ -0,0 +1,46 @@ +{ + "version": "0.2", + "language": "en", + "flagWords": [ + "teh", + "hte" + ], + "ignorePaths": [ + "**/art/**", + "**/assets/**", + "**/CHANGELOG.md" + ], + "ignoreRegExpList": [ + "\\#[\\w\\-]+" + ], + "dictionaries": [ + "en_US", + "softwareTerms", + "dart_dictionary", + "mini_sprite_dictionary", + "people_usernames", + "words_dictionary" + ], + "dictionaryDefinitions": [ + { + "name": "dart_dictionary", + "path": "./.cspell/dart_dictionary.txt", + "addWords": true + }, + { + "name": "mini_sprite_dictionary", + "path": "./.cspell/mini_sprite_dictionary.txt", + "addWords": true + }, + { + "name": "people_usernames", + "path": "./.cspell/people_usernames.txt", + "addWords": true + }, + { + "name": "words_dictionary", + "path": "./.cspell/words_dictionary.txt", + "addWords": true + } + ] +} diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 6b9372e..df809bd 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -1,23 +1,67 @@ + + +# Description + + +Replace this text. - Please look at the following checklist to ensure that your PR can be accepted quickly: + +## Checklist + -## Description +- [ ] I have followed the [Contributor Guide] when preparing my PR. +- [ ] I have updated/added tests for ALL new/updated/fixed functionality. +- [ ] I have updated/added relevant documentation and added dartdoc comments with `///`. + - +## Breaking Change? + + +- [ ] Yes, this PR is a breaking change. +- [ ] No, this PR is not a breaking change. + + + + + +## Related Issues + +Closes #1234 +!--> -- [ ] โœจ New feature (non-breaking change which adds functionality) -- [ ] ๐Ÿ› ๏ธ Bug fix (non-breaking change which fixes an issue) -- [ ] โŒ Breaking change (fix or feature that would cause existing functionality to change) -- [ ] ๐Ÿงน Code refactor -- [ ] โœ… Build configuration change -- [ ] ๐Ÿ“ Documentation -- [ ] ๐Ÿ—‘๏ธ Chore + +[Contributor Guide]: https://github.com/bluefireteam/mini_sprite/blob/main/CONTRIBUTING.md +[Conventional Commit]: https://conventionalcommits.org +[CHANGELOG]: https://github.com/bluefireteam/mini_sprite/blob/main/CHANGELOG.md + diff --git a/.github/workflows/cicd.yml b/.github/workflows/cicd.yml new file mode 100644 index 0000000..1ceba2c --- /dev/null +++ b/.github/workflows/cicd.yml @@ -0,0 +1,68 @@ +name: cicd + +on: + push: + branches: + - main + pull_request: + types: [opened, reopened, synchronize] + + +env: + FLUTTER_MIN_VERSION: '3.35.0' + +jobs: + # BEGIN LINTING STAGE + format: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v7 + - uses: subosito/flutter-action@v2 + - uses: bluefireteam/melos-action@v3 + - run: melos run format-check + + analyze: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v7 + - uses: subosito/flutter-action@v2 + with: + flutter-version: ${{env.FLUTTER_MIN_VERSION}} + - uses: bluefireteam/melos-action@v3 + - name: "Analyze with lowest supported version" + run: melos exec -- dart analyze --fatal-infos . + + analyze-latest: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v7 + - uses: subosito/flutter-action@v2 + - uses: bluefireteam/melos-action@v3 + - name: "Analyze with latest stable" + uses: invertase/github-action-dart-analyzer@v3 + with: + fatal-infos: true + + markdown-lint: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v7 + - uses: actions/setup-node@v7 + with: + node-version: 18 + - run: npm install -g markdownlint-cli + - run: markdownlint . -p .markdownlintignore -c .markdownlint.yaml + # END LINTING STAGE + + # BEGIN TESTING STAGE + test: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v7 + - uses: subosito/flutter-action@v2 + with: + cache: true + - uses: bluefireteam/melos-action@v3 + - name: Run tests + run: melos run test:select --no-select + # END TESTING STAGE diff --git a/.github/workflows/flame_mini_sprite.yaml b/.github/workflows/flame_mini_sprite.yaml deleted file mode 100644 index f2921ec..0000000 --- a/.github/workflows/flame_mini_sprite.yaml +++ /dev/null @@ -1,45 +0,0 @@ -name: flame_mini_sprite - -on: - push: - branches: - - main - paths: - - .github/workflows/flame_mini_sprite.yaml - - packages/flame_mini_sprite/** - - pull_request: - branches: - - main - paths: - - .github/workflows/flame_mini_sprite.yaml - - packages/flame_mini_sprite/** - -jobs: - build: - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v2.3.4 - - uses: subosito/flutter-action@v2 - with: - channel: 'stable' - cache: true - - uses: bluefireteam/melos-action@main - - - name: Install Dependencies - run: melos bootstrap - - - name: Format - run: melos exec --scope flame_mini_sprite dart format --set-exit-if-changed lib - - - name: Analyze - run: melos exec --scope flame_mini_sprite flutter analyze --fatal-infos --fatal-warnings . - - - name: Run Tests - run: melos exec --scope flame_mini_sprite flutter test --coverage - - - name: Check Code Coverage - uses: VeryGoodOpenSource/very_good_coverage@v1 - with: - path: packages/flame_mini_sprite/coverage/lcov.info diff --git a/.github/workflows/flutter_mini_sprite.yaml b/.github/workflows/flutter_mini_sprite.yaml deleted file mode 100644 index b9294d0..0000000 --- a/.github/workflows/flutter_mini_sprite.yaml +++ /dev/null @@ -1,46 +0,0 @@ -name: flutter_mini_sprite - -on: - push: - branches: - - main - paths: - - .github/workflows/flutter_mini_sprite.yaml - - packages/flutter_mini_sprite/** - - pull_request: - branches: - - main - paths: - - .github/workflows/flutter_mini_sprite.yaml - - packages/flutter_mini_sprite/** - -jobs: - build: - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v2.3.4 - - uses: subosito/flutter-action@v2 - with: - channel: 'stable' - cache: true - - uses: bluefireteam/melos-action@main - - - name: Install Dependencies - run: melos bootstrap - - - name: Format - run: melos exec --scope flutter_mini_sprite dart format --set-exit-if-changed lib - - - name: Analyze - run: melos exec --scope flutter_mini_sprite flutter analyze --fatal-infos --fatal-warnings . - - - name: Run Tests - run: melos exec --scope flutter_mini_sprite flutter test --coverage - - - name: Check Code Coverage - uses: VeryGoodOpenSource/very_good_coverage@v1 - with: - path: packages/flutter_mini_sprite/coverage/lcov.info - min_coverage: 70 diff --git a/.github/workflows/gh-pages.yaml b/.github/workflows/gh-pages.yaml deleted file mode 100644 index 9983e52..0000000 --- a/.github/workflows/gh-pages.yaml +++ /dev/null @@ -1,38 +0,0 @@ -name: Gh-Pages - -on: workflow_dispatch - -jobs: - build: - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v2.3.4 - - uses: subosito/flutter-action@v2 - with: - channel: 'stable' - cache: true - - uses: bluefireteam/melos-action@main - - - name: Install Dependencies - run: melos bootstrap - - - run: melos exec --scope mini_sprite_editor flutter build web --release --base-href / - - shell: bash - - - run: git config user.name github-actions - shell: bash - - - run: git config user.email github-actions@github.com - shell: bash - - - run: git --work-tree packages/mini_sprite_editor/build/web add --all - shell: bash - - - run: git commit -m "Automatic deployment by github-actions" - shell: bash - - - run: git push origin HEAD:gh-pages --force - shell: bash - diff --git a/.github/workflows/gh-pages.yml b/.github/workflows/gh-pages.yml new file mode 100644 index 0000000..d3b8189 --- /dev/null +++ b/.github/workflows/gh-pages.yml @@ -0,0 +1,20 @@ +name: Gh-Pages + +on: + push: + branches: [main] + workflow_dispatch: + +jobs: + build: + runs-on: ubuntu-latest + permissions: + contents: write + steps: + - uses: actions/checkout@v7 + - uses: subosito/flutter-action@v2 + - uses: bluefireteam/melos-action@v3 + - uses: bluefireteam/flutter-gh-pages@v9 + with: + workingDir: packages/mini_sprite_editor + baseHref: / diff --git a/.github/workflows/mini_hub_client.yaml b/.github/workflows/mini_hub_client.yaml deleted file mode 100644 index 4a18570..0000000 --- a/.github/workflows/mini_hub_client.yaml +++ /dev/null @@ -1,46 +0,0 @@ -name: mini_hub_client - -on: - push: - branches: - - main - paths: - - .github/workflows/mini_hub_client.yaml - - packages/mini_hub_client/** - - pull_request: - branches: - - main - paths: - - .github/workflows/mini_hub_client.yaml - - packages/mini_hub_client/** - -jobs: - build: - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v2.3.4 - - uses: subosito/flutter-action@v2 - with: - channel: 'stable' - cache: true - - uses: bluefireteam/melos-action@main - - - name: Install Dependencies - run: melos bootstrap - - - name: Format - run: melos exec --scope mini_hub_client dart format --set-exit-if-changed lib - - - name: Analyze - run: melos exec --scope mini_hub_client dart analyze --fatal-infos --fatal-warnings . - - #- name: Run Tests - # run: melos exec --scope mini_hub_client flutter test --coverage - - #- name: Check Code Coverage - # uses: VeryGoodOpenSource/very_good_coverage@v1 - # with: - # path: packages/mini_hub_client/coverage/lcov.info - # min_coverage: 0 diff --git a/.github/workflows/mini_sprite.yaml b/.github/workflows/mini_sprite.yaml deleted file mode 100644 index 72275a8..0000000 --- a/.github/workflows/mini_sprite.yaml +++ /dev/null @@ -1,46 +0,0 @@ -name: mini_sprite - -on: - push: - branches: - - main - paths: - - .github/workflows/mini_sprite.yaml - - packages/mini_sprite/** - - pull_request: - branches: - - main - paths: - - .github/workflows/mini_sprite.yaml - - packages/mini_sprite/** - -jobs: - build: - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v2.3.4 - - uses: subosito/flutter-action@v2 - with: - channel: 'stable' - cache: true - - uses: bluefireteam/melos-action@main - - - name: Install Dependencies - run: melos bootstrap - - - name: Format - run: melos exec --scope mini_sprite dart format --set-exit-if-changed lib - - - name: Analyze - run: melos exec --scope mini_sprite dart analyze --fatal-infos --fatal-warnings . - - - name: Run Tests - run: melos exec --scope mini_sprite flutter test --coverage - - - name: Check Code Coverage - uses: VeryGoodOpenSource/very_good_coverage@v1 - with: - path: packages/mini_sprite/coverage/lcov.info - min_coverage: 100 diff --git a/.github/workflows/mini_sprite_editor.yaml b/.github/workflows/mini_sprite_editor.yaml deleted file mode 100644 index 4364705..0000000 --- a/.github/workflows/mini_sprite_editor.yaml +++ /dev/null @@ -1,46 +0,0 @@ -name: mini_sprite_editor - -on: - push: - branches: - - main - paths: - - .github/workflows/mini_sprite_editor.yaml - - packages/mini_sprite_editor/** - - pull_request: - branches: - - main - paths: - - .github/workflows/mini_sprite_editor.yaml - - packages/mini_sprite_editor/** - -jobs: - build: - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v2.3.4 - - uses: subosito/flutter-action@v2 - with: - channel: 'stable' - cache: true - - uses: bluefireteam/melos-action@main - - - name: Install Dependencies - run: melos bootstrap - - - name: Format - run: melos exec --scope mini_sprite_editor dart format --set-exit-if-changed lib - - - name: Analyze - run: melos exec --scope mini_sprite_editor flutter analyze --fatal-infos --fatal-warnings . - - - name: Run Tests - run: melos exec --scope mini_sprite_editor flutter test --coverage - - - name: Check Code Coverage - uses: VeryGoodOpenSource/very_good_coverage@v1 - with: - path: packages/mini_sprite_editor/coverage/lcov.info - min_coverage: 50 diff --git a/.github/workflows/mini_treasure_quest.yaml b/.github/workflows/mini_treasure_quest.yaml deleted file mode 100644 index b030d7b..0000000 --- a/.github/workflows/mini_treasure_quest.yaml +++ /dev/null @@ -1,37 +0,0 @@ -name: mini_treasure_quest - -on: - push: - branches: - - main - paths: - - .github/workflows/mini_treasure_quest.yaml - - packages/mini_treasure_quest/** - - pull_request: - branches: - - main - paths: - - .github/workflows/mini_treasure_quest.yaml - - packages/mini_treasure_quest/** - -jobs: - build: - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v2.3.4 - - uses: subosito/flutter-action@v2 - with: - channel: 'stable' - cache: true - - uses: bluefireteam/melos-action@main - - - name: Install Dependencies - run: melos bootstrap - - - name: Format - run: melos exec --scope mini_treasure_quest dart format --set-exit-if-changed lib - - - name: Analyze - run: melos exec --scope mini_treasure_quest flutter analyze --fatal-infos --fatal-warnings . diff --git a/.github/workflows/release-prepare.yml b/.github/workflows/release-prepare.yml new file mode 100644 index 0000000..a6a9b0d --- /dev/null +++ b/.github/workflows/release-prepare.yml @@ -0,0 +1,28 @@ +name: Prepare release +on: + workflow_dispatch: + inputs: + prerelease: + description: 'Version as prerelease' + required: false + default: false + type: boolean + +jobs: + prepare-release: + name: Prepare release + permissions: + contents: write + pull-requests: write + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v7 + with: + fetch-depth: 0 + - uses: subosito/flutter-action@v2 + - uses: bluefireteam/melos-action@v3 + with: + run-versioning: ${{ inputs.prerelease == false }} + run-versioning-prerelease: ${{ inputs.prerelease == true }} + publish-dry-run: true + create-pr: true diff --git a/.github/workflows/release-publish.yml b/.github/workflows/release-publish.yml new file mode 100644 index 0000000..b47fa11 --- /dev/null +++ b/.github/workflows/release-publish.yml @@ -0,0 +1,21 @@ +name: Publish packages +on: + workflow_dispatch: + +jobs: + publish-packages: + name: Publish packages + permissions: + contents: write + id-token: write # Required for authentication using OIDC + runs-on: [ ubuntu-latest ] + steps: + - uses: actions/checkout@v7 + with: + fetch-depth: 0 + - uses: subosito/flutter-action@v2 + - uses: bluefireteam/melos-action@v3 + with: + publish: true + create-release: true + diff --git a/.github/workflows/release-tag.yml b/.github/workflows/release-tag.yml new file mode 100644 index 0000000..3e13fc9 --- /dev/null +++ b/.github/workflows/release-tag.yml @@ -0,0 +1,29 @@ +name: Tag release +on: + push: + branches: [main] + +jobs: + publish-packages: + name: Create tags for release + permissions: + actions: write + contents: write + runs-on: [ ubuntu-latest ] + if: contains(github.event.head_commit.message, 'chore(release)') + steps: + - uses: actions/checkout@v7 + with: + fetch-depth: 0 + - uses: subosito/flutter-action@v2 + - uses: bluefireteam/melos-action@v3 + with: + tag: true + - name: Trigger publish for unpublished packages + run: | + melos exec -c1 --no-published --no-private --order-dependents -- \ + gh workflow run release-publish.yml \ + --ref \$MELOS_PACKAGE_NAME-v\$MELOS_PACKAGE_VERSION + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + diff --git a/.github/workflows/spell_checker.yml b/.github/workflows/spell_checker.yml new file mode 100644 index 0000000..1deed20 --- /dev/null +++ b/.github/workflows/spell_checker.yml @@ -0,0 +1,23 @@ +name: spell_checker + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +on: + push: + branches: + - main + pull_request: + types: [opened, reopened, synchronize] + +jobs: + test: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v7 + - run: npm -g install cspell@9.2.1 + # spell check + - run: ./scripts/cspell-run.sh + # verify dictionary words are sorted and not orphan + - run: ./scripts/cspell-verify.sh \ No newline at end of file diff --git a/.github/workflows/title-validation.yml b/.github/workflows/title-validation.yml new file mode 100644 index 0000000..7710311 --- /dev/null +++ b/.github/workflows/title-validation.yml @@ -0,0 +1,34 @@ +# See https://github.com/amannn/action-semantic-pull-request +name: 'PR Title is Conventional' + +on: + pull_request_target: + types: + - opened + - edited + - synchronize + +jobs: + main: + name: Validate PR title + runs-on: ubuntu-latest + steps: + - uses: amannn/action-semantic-pull-request@v6 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + types: | + build + chore + ci + docs + feat + fix + perf + refactor + revert + style + test + subjectPattern: ^[^a-z].+$ + subjectPatternError: | + The subject of the PR can't begin with a lowercase letter. diff --git a/.gitignore b/.gitignore index 69cff5b..771c3b9 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,53 @@ +# Miscellaneous +*.class +*.bak +*.fvm +*.log +*.pyc +*.swp .DS_Store -.idea +.atom/ +.buildlog/ +.history +.vscode/ +.venv/ + +# IntelliJ related +*.iml +*.ipr +*.iws +.idea/ + +# Flutter/Dart/Pub related +**/doc/api/ +**/failures +.dart_tool/ +.flutter-plugins +.flutter-plugins-dependencies +.packages +.pub-cache/ +.pub/ +**/build/ +coverage/ +pubspec.lock pubspec_overrides.yaml -.dart_tool -melos_mini_sprite_workspace.iml -.idea/modules.xml +devtools_options.yaml + +# Custom +lib/generated_plugin_registrant.dart + +**/example/android +**/example/ios +**/example/linux +**/example/macos +**/example/windows + +.metadata + +# FVM +.fvm/ +.fvmrc + +# LLM +.claude/ +.cursor/ diff --git a/.idea/.name b/.idea/.name deleted file mode 100644 index 4ae1ed7..0000000 --- a/.idea/.name +++ /dev/null @@ -1 +0,0 @@ -mini_sprite \ No newline at end of file diff --git a/.idea/runConfigurations/melos_bootstrap.xml b/.idea/runConfigurations/melos_bootstrap.xml deleted file mode 100644 index d571530..0000000 --- a/.idea/runConfigurations/melos_bootstrap.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - diff --git a/.idea/runConfigurations/melos_clean.xml b/.idea/runConfigurations/melos_clean.xml deleted file mode 100644 index f45d436..0000000 --- a/.idea/runConfigurations/melos_clean.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - diff --git a/.idea/runConfigurations/melos_flutter_run_example.xml b/.idea/runConfigurations/melos_flutter_run_example.xml deleted file mode 100644 index ff35f1f..0000000 --- a/.idea/runConfigurations/melos_flutter_run_example.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - \ No newline at end of file diff --git a/.idea/runConfigurations/melos_flutter_run_mini_sprite_editor.xml b/.idea/runConfigurations/melos_flutter_run_mini_sprite_editor.xml deleted file mode 100644 index ac2f0a3..0000000 --- a/.idea/runConfigurations/melos_flutter_run_mini_sprite_editor.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - \ No newline at end of file diff --git a/.idea/runConfigurations/melos_flutter_run_mini_treasure_quest.xml b/.idea/runConfigurations/melos_flutter_run_mini_treasure_quest.xml deleted file mode 100644 index e89a680..0000000 --- a/.idea/runConfigurations/melos_flutter_run_mini_treasure_quest.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - \ No newline at end of file diff --git a/.idea/runConfigurations/melos_flutter_test_flame_mini_sprite.xml b/.idea/runConfigurations/melos_flutter_test_flame_mini_sprite.xml deleted file mode 100644 index 5aea7cb..0000000 --- a/.idea/runConfigurations/melos_flutter_test_flame_mini_sprite.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - \ No newline at end of file diff --git a/.markdownlint.yaml b/.markdownlint.yaml new file mode 100644 index 0000000..9bfa8e3 --- /dev/null +++ b/.markdownlint.yaml @@ -0,0 +1,239 @@ +# Default state for all rules +default: true + +# MD001/heading-increment/header-increment - Heading levels should only increment by one level at a time +MD001: true + +# MD002/first-heading-h1/first-header-h1 - First heading should be a top-level heading +MD002: + # Heading level + level: 1 + +# MD003/heading-style/header-style - Heading style +MD003: + # Heading style + style: "atx" + +# MD004/ul-style - Unordered list style +MD004: + # List style + style: "dash" + +# MD005/list-indent - Inconsistent indentation for list items at the same level +MD005: true + +# MD006/ul-start-left - Consider starting bulleted lists at the beginning of the line +MD006: true + +# MD007/ul-indent - Unordered list indentation +MD007: + # Spaces for indent + indent: 2 + # Whether to indent the first level of the list + start_indented: false + # Spaces for first level indent (when start_indented is set) + start_indent: 2 + +# MD009/no-trailing-spaces - Trailing spaces +MD009: + # Spaces for line break + br_spaces: 2 + # Allow spaces for empty lines in list items + list_item_empty_lines: false + # Include unnecessary breaks + strict: false + +# MD010/no-hard-tabs - Hard tabs +MD010: + # Include code blocks + code_blocks: true + # Fenced code languages to ignore + ignore_code_languages: [] + # Number of spaces for each hard tab + spaces_per_tab: 1 + +# MD011/no-reversed-links - Reversed link syntax +MD011: true + +# MD012/no-multiple-blanks - Multiple consecutive blank lines +MD012: + # Consecutive blank lines + maximum: 2 + +# MD013/line-length - Line length +MD013: + # Number of characters + line_length: 100 + # Number of characters for headings + heading_line_length: 80 + # Number of characters for code blocks + code_block_line_length: 80 + # Include code blocks + code_blocks: true + # Include tables + tables: true + # Include headings + headings: true + # Include headings + headers: true + # Strict length checking + strict: false + # Stern length checking + stern: false + +# MD014/commands-show-output - Dollar signs used before commands without showing output +MD014: true + +# MD018/no-missing-space-atx - No space after hash on atx style heading +MD018: true + +# MD019/no-multiple-space-atx - Multiple spaces after hash on atx style heading +MD019: true + +# MD020/no-missing-space-closed-atx - No space inside hashes on closed atx style heading +MD020: true + +# MD021/no-multiple-space-closed-atx - Multiple spaces inside hashes on closed atx style heading +MD021: true + +# MD022/blanks-around-headings/blanks-around-headers - Headings should be surrounded by blank lines +MD022: + # Blank lines above heading + lines_above: 2 + # Blank lines below heading + lines_below: 1 + +# MD023/heading-start-left/header-start-left - Headings must start at the beginning of the line +MD023: true + +# MD024/no-duplicate-heading/no-duplicate-header - Multiple headings with the same content +MD024: + # Only check sibling headings + allow_different_nesting: false + # Only check sibling headings + siblings_only: false + +# MD025/single-title/single-h1 - Multiple top-level headings in the same document +MD025: + # Heading level + level: 1 + # RegExp for matching title in front matter + front_matter_title: "^\\s*title\\s*[:=]" + +# MD026/no-trailing-punctuation - Trailing punctuation in heading +MD026: + # Punctuation characters + punctuation: ".,;:!ใ€‚๏ผŒ๏ผ›๏ผš๏ผ" + +# MD027/no-multiple-space-blockquote - Multiple spaces after blockquote symbol +MD027: true + +# MD028/no-blanks-blockquote - Blank line inside blockquote +MD028: true + +# MD029/ol-prefix - Ordered list item prefix +MD029: + # List style + style: "one_or_ordered" + +# MD030/list-marker-space - Spaces after list markers +MD030: + # Spaces for single-line unordered list items + ul_single: 1 + # Spaces for single-line ordered list items + ol_single: 1 + # Spaces for multi-line unordered list items + ul_multi: 1 + # Spaces for multi-line ordered list items + ol_multi: 1 + +# MD031/blanks-around-fences - Fenced code blocks should be surrounded by blank lines +MD031: + # Include list items + list_items: true + +# MD032/blanks-around-lists - Lists should be surrounded by blank lines +MD032: true + +# MD033/no-inline-html - Inline HTML +MD033: + # Allowed elements + allowed_elements: [p, a, img, h2] + +# MD034/no-bare-urls - Bare URL used +MD034: true + +# MD035/hr-style - Horizontal rule style +MD035: + # Horizontal rule style + style: "---" + +# MD036/no-emphasis-as-heading/no-emphasis-as-header - Emphasis used instead of a heading +MD036: + # Punctuation characters + punctuation: ".,;:!?ใ€‚๏ผŒ๏ผ›๏ผš๏ผ๏ผŸ" + +# MD037/no-space-in-emphasis - Spaces inside emphasis markers +MD037: true + +# MD038/no-space-in-code - Spaces inside code span elements +MD038: true + +# MD039/no-space-in-links - Spaces inside link text +MD039: true + +# MD040/fenced-code-language - Fenced code blocks should have a language specified +MD040: true + +# MD041/first-line-heading - First line in a file should be a top-level heading +MD041: false + +# MD042/no-empty-links - No empty links +MD042: true + +# MD044/proper-names - Proper names should have the correct capitalization +MD044: + # List of proper names + names: [] + # Include code blocks + code_blocks: true + # Include HTML elements + html_elements: true + +# MD045/no-alt-text - Images should have alternate text (alt text) +# TODO: Activate this with #2913 +MD045: false + +# MD046/code-block-style - Code block style +MD046: + # Block style + style: "fenced" + +# MD047/single-trailing-newline - Files should end with a single newline character +MD047: true + +# MD048/code-fence-style - Code fence style +MD048: + # Code fence style + style: "backtick" + +# MD049/emphasis-style - Emphasis style should be consistent +MD049: + # Emphasis style should be consistent + style: "asterisk" + +# MD050/strong-style - Strong style should be consistent +MD050: + # Strong style should be consistent + style: "asterisk" + +# MD051/link-fragments - Link fragments should be valid +MD051: true + +# MD052/reference-links-images - Reference links and images should use a label that is defined +MD052: true + +# MD053/link-image-reference-definitions - Link and image reference definitions should be needed +MD053: + # Ignored definitions + ignored_definitions: ["//"] diff --git a/.markdownlintignore b/.markdownlintignore new file mode 100644 index 0000000..cd71065 --- /dev/null +++ b/.markdownlintignore @@ -0,0 +1,6 @@ +**/CHANGELOG.md +**/ios/** +**/doc/api/static-assets/** +**/macos/** +**/windows/** +**/linux/** diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..5f0f902 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,220 @@ +# Contribution Guidelines + +**Note:** If these contribution guidelines are not followed your issue or PR might be closed, so +please read these instructions carefully. + + +## Contribution types + + +### Bug Reports + +- If you find a bug, please first report it using [Github issues]. + - First check if there is not already an issue for it; duplicated issues will be closed. + + +### Bug Fix + +- If you'd like to submit a fix for a bug, please read the [How To](#how-to-contribute) for how to + send a Pull Request. +- Indicate on the open issue that you are working on fixing the bug and the issue will be assigned + to you. +- Write `Fixes #xxxx` in your PR text, where xxxx is the issue number (if there is one). +- Include a test that isolates the bug and verifies that it was fixed. + + +### New Features + +- If you'd like to add a feature to the library that doesn't already exist, feel free to describe + the feature in a new [GitHub issue]. + - You can also join us on [Discord] to discuss some initials thoughts. +- If you'd like to implement the new feature, please wait for feedback from the project maintainers + before spending too much time writing the code. In some cases, enhancements may not align well + with the project's future development direction. +- Implement the code for the new feature and please read the [How To](#how-to-contribute). + + +### Documentation & Miscellaneous + +- If you have suggestions for improvements to the documentation, tutorial or examples (or something + else), we would love to hear about it. +- As always first file a [Github issue]. +- Implement the changes to the documentation, please read the [How To](#how-to-contribute). + + +## How To Contribute + + +### Requirements + +For a contribution to be accepted: + +- Format the code using `dart format .`; +- Lint the code with `melos analyze`; +- Check that all tests pass: `melos test:select`; +- Documentation should always be updated or added (if applicable); +- Tests should always be updated or added (if applicable); +- The PR title should start with a [conventional commit] prefix (`feat:`, `fix:` etc). + +If the contribution doesn't meet these criteria, a maintainer will discuss it with you on the issue +or PR. You can still continue to add more commits to the branch you have sent the Pull Request from +and it will be automatically reflected in the PR. + + +## Open an issue and fork the repository + +- If it is a bigger change or a new feature, first of all + [file a bug or feature report][GitHub issue], so that we can discuss what direction to follow. +- [Fork the project][fork guide] on GitHub. +- Clone the forked repository to your local development machine + (e.g. `git clone git@github.com:/mini_sprite.git`). + + +### Environment Setup + +Mini Sprite is setup to run with the most recent `stable` version of Flutter, so make sure your +version matches that: + +```shell +flutter channel stable +``` + +Also, Mini Sprite uses [Melos] to manage the project and dependencies. + +To install Melos, run the following command from your terminal: + +```shell +flutter pub global activate melos +``` + +Next, at the root of your locally cloned repository bootstrap the projects dependencies: + +```shell +melos bootstrap +``` + +The bootstrap command resolves all the packages in the [pub workspace] together, so that all +packages, examples and tests build from the local clone of the project. You should only need to run +this command once. + +> You do not need to run `flutter pub get` once bootstrap has been completed. + + +#### CSpell + +If you want to run the spellchecker locally, you will have to install +[cspell](https://github.com/streetsidesoftware/cspell/tree/main/packages/cspell); +you can do so using npm or yarn: + +```bash +npm install -g cspell +``` + +Then you can run it using the provided script: + +```bash +./scripts/cspell-run.sh +``` + + +#### Markdown Lint + +If you want to lint the markdown files you have to install +[markdownlint-cli](https://github.com/igorshubovych/markdownlint-cli) and once that is installed you +can run `melos markdown-check` to check if the markdown follows the rules. Some markdown linting +errors can be automatically fixed with `melos markdown-fix`. + + +### Performing changes + +- Create a new local branch from `main` (e.g. `git checkout -b my-new-feature`) +- Make your changes (try to split them up with one PR per feature/fix). +- When committing your changes, make sure that each commit message is clear + (e.g. `git commit -m 'Add support for multiple colors to MiniSprite'`). +- Push your new branch to your own fork into the same remote branch + (e.g. `git push origin my-username.my-new-feature`, replace `origin` if you use another remote.) + + +### Breaking changes + +When doing breaking changes a deprecation tag should be added when possible and contain a message +that conveys to the user what which version that the deprecated method/field will be removed in and +what method they should use instead to perform the task. The version specified should be at least +two versions after the current one, such that there will be at least one stable release where the +users get to see the deprecation warning and in the version after that (or a later version) the +deprecated entity should be removed. + +Example (if the current version is v1.3.0): + +```dart +@Deprecated('Will be removed in v1.5.0, use nonDeprecatedFeature() instead') +void deprecatedFeature() {} +``` + + +### Open a pull request + +Go to the [pull request page of Mini Sprite][PRs] and in the top +of the page it will ask you if you want to open a pull request from your newly created branch. + +The title of the pull request should start with a [conventional commit] type. + +Allowed types are: + +- `fix:` -- patches a bug and is not a new feature; +- `feat:` -- introduces a new feature; +- `docs:` -- updates or adds documentation or examples; +- `test:` -- updates or adds tests; +- `refactor:` -- refactors code but doesn't introduce any changes or additions to the public API; +- `perf:` -- code change that improves performance; +- `build:` -- code change that affects the build system or external dependencies; +- `ci:` -- changes to the CI configuration files and scripts; +- `chore:` -- other changes that don't modify source or test files; +- `revert:` -- reverts a previous commit. + +If you introduce a **breaking change** the conventional commit type MUST end with an exclamation +mark (e.g. `feat!: Remove the pixels argument from MiniSprite`). + +The sentence of the commit (after the `:`) should start with a verb in the present tense; as a rule +of thumb, think that the commit message will complete the sentence "This commit will ...". +For example, "Add support for ..." or "Fix bug with ...". + + +## Maintainers + +These instructions are for the maintainers of Mini Sprite. + + +### Merging a pull request + +When merging a pull request, make sure that the title of the merge commit has the correct +conventional commit tag and a descriptive title. This is extra important since sometimes the title +of the PR doesn't reflect what GitHub defaults to for the merge commit title (if the title has been +changed during the life time of the PR for example). + +All the default text should be removed from the commit message and the PR description and the +instructions from the "Migration instruction" (if the PR is breaking) should be copied into the +commit message. + + +### Creating a release + +Releases are automated with GitHub Actions: + +- Run the `Prepare release` workflow from the Actions tab. It runs `melos version`, which bumps + the versions and generates the `CHANGELOG.md` files, and opens a release PR. +- Go through the PRs with breaking changes and add migration documentation to the changelog. + There should be migration docs on each PR, if they haven't been copied to the commit message. +- Once the release PR is merged, the `Tag release` workflow tags each released package and triggers + the `Publish packages` workflow, which publishes the packages to pub.dev and creates the GitHub + releases. + + +[GitHub issue]: https://github.com/bluefireteam/mini_sprite/issues +[GitHub issues]: https://github.com/bluefireteam/mini_sprite/issues +[PRs]: https://github.com/bluefireteam/mini_sprite/pulls +[fork guide]: https://docs.github.com/en/get-started/quickstart/contributing-to-projects +[Discord]: https://discord.com/invite/pxrBmy4 +[Melos]: https://github.com/invertase/melos +[pub workspace]: https://dart.dev/tools/pub/workspaces +[conventional commit]: https://www.conventionalcommits.org diff --git a/README.md b/README.md index b61f1ef..7ac253d 100644 --- a/README.md +++ b/README.md @@ -12,34 +12,41 @@ Mini sprite is a simple, matrix based format for creating 1bit styled graphics. + ## Project structure Mini Sprite is composed of several projects: + ### [Mini Sprite](packages/mini_sprite) The core package contains the engine/platform agnostic code to handle the format for the sprites and maps. + ### [Mini Sprite Editor](packages/mini_sprite_editor) -The flutter application, deployed at [https://minisprit.es](https://minisprit.es), which can be used to design sprites -and maps using the Mini Sprite format. +The flutter application, deployed at [https://minisprit.es](https://minisprit.es), which can be +used to design sprites and maps using the Mini Sprite format. + ### [Flame Mini Sprite](packages/flame_mini_sprite) Provides bridge methods to make it easier to use Mini Sprite inside the [flame game engine](https://flame-engine.org). + ### [Mini Treasure Quest](packages/mini_treasure_quest) An example game made with Flame and Mini Sprite. + ### Get help Check each link provided above to read the documentation for each package. -Join Bluefire's [discord server](https://discord.gg/pxrBmy4) to ask questions to the team and the community. +Join the Bluefire [discord server](https://discord.gg/pxrBmy4) to ask questions to the team and the +community. ## Roadmap @@ -53,18 +60,18 @@ Also, this roadmap does not consider bugfixes of any sort, as this is implicitly bug should be fixed as they are discovered (considering their tradeoff between impact and complexity) - + ### Priorities - - [ ] Tool stabilization and increase of code coverage: Mini Sprite had a rough couple of weeks before +- [ ] Tool stabilization and increase of code coverage: Mini Sprite had a rough couple of weeks before its release, some features was rushed in order to get done in time for the Midyear Flame Game Jam so some tests were omitted and some features could be re-organized. This is an important first step before we start to grown the tool. - - [ ] Improve Map editor perfomance. One of the feedbacks received during the Game Jam, the map +- [ ] Improve Map editor performance. One of the feedbacks received during the Game Jam, the map editor crashes the app if you try to create a big map (50x20 tiles). - - [ ] Improve shortcuts support. Mini Sprite Editor already have some shortcuts, but they are very +- [ ] Improve shortcuts support. Mini Sprite Editor already have some shortcuts, but they are very unstable, sometimes they work, sometimes they don't, this helps usability a lot and we should find - a good solution for it before the editor growns more in features. - - [ ] Create proper infrastructure for the HUB. Having the hub accessible to everybody is + a good solution for it before the editor grows more in features. +- [ ] Create proper infrastructure for the HUB. Having the hub accessible to everybody is an important step towards the goal of making Mini Sprite a community powered tool. - - [ ] Add support to animations. +- [ ] Add support to animations. diff --git a/melos.yaml b/melos.yaml deleted file mode 100644 index 4433e34..0000000 --- a/melos.yaml +++ /dev/null @@ -1,5 +0,0 @@ -name: mini_sprite -repository: https://github.com/bluefireteam/mini_sprite -packages: - - packages/** - - . diff --git a/melos_mini_sprite.iml b/melos_mini_sprite.iml deleted file mode 100644 index b11563a..0000000 --- a/melos_mini_sprite.iml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/packages/flame_mini_sprite/README.md b/packages/flame_mini_sprite/README.md index 787eaf5..8c944fe 100644 --- a/packages/flame_mini_sprite/README.md +++ b/packages/flame_mini_sprite/README.md @@ -3,24 +3,27 @@ [![style: very good analysis][very_good_analysis_badge]][very_good_analysis_link] [![License: MIT][license_badge]][license_link] -Library to act as a bridge betwenn Mini Sprite and Flame Engine +Library to act as a bridge between Mini Sprite and Flame Engine [license_badge]: https://img.shields.io/badge/license-MIT-blue.svg [license_link]: https://opensource.org/licenses/MIT [very_good_analysis_badge]: https://img.shields.io/badge/style-very_good_analysis-B22C89.svg [very_good_analysis_link]: https://pub.dev/packages/very_good_analysis -# How to use it + +## How to use it Add flame mini sprite to the project pubspec: -``` +```shell dart pub add flame_mini_sprite ``` -## Helpers -### MiniSprite.toSprite +### Helpers + + +#### MiniSprite.toSprite Convert a `MiniSprite` instance into a Flame `Sprite` instance: @@ -32,7 +35,8 @@ final sprite = await miniSprite.toSprite( ); ``` -### MiniLibrary.toSprites + +#### MiniLibrary.toSprites Convert a `MiniLibrary` instance into a map of Flame `Sprite` instances. diff --git a/packages/flame_mini_sprite/example/README.md b/packages/flame_mini_sprite/example/README.md index 2b3fce4..93ac265 100644 --- a/packages/flame_mini_sprite/example/README.md +++ b/packages/flame_mini_sprite/example/README.md @@ -2,6 +2,7 @@ A new Flutter project. + ## Getting Started This project is a starting point for a Flutter application. diff --git a/packages/flame_mini_sprite/example/lib/main_advanced.dart b/packages/flame_mini_sprite/example/lib/main_advanced.dart index 673452b..f36a99d 100644 --- a/packages/flame_mini_sprite/example/lib/main_advanced.dart +++ b/packages/flame_mini_sprite/example/lib/main_advanced.dart @@ -28,19 +28,16 @@ class MyGame extends FlameGame { sprite: sprite, anchor: Anchor.center, children: [ - SequenceEffect( - [ - ScaleEffect.to( - Vector2.all(4), - CurvedEffectController(4, Curves.easeIn), - ), - ScaleEffect.to( - Vector2.all(1), - CurvedEffectController(4, Curves.easeOut), - ), - ], - infinite: true, - ), + SequenceEffect([ + ScaleEffect.to( + Vector2.all(4), + CurvedEffectController(4, Curves.easeIn), + ), + ScaleEffect.to( + Vector2.all(1), + CurvedEffectController(4, Curves.easeOut), + ), + ], infinite: true), ], ), ); @@ -53,19 +50,16 @@ class MyGame extends FlameGame { palette: [const Color(0xFFFFFFFF)], anchor: Anchor.center, children: [ - SequenceEffect( - [ - ScaleEffect.to( - Vector2.all(4), - CurvedEffectController(4, Curves.easeIn), - ), - ScaleEffect.to( - Vector2.all(1), - CurvedEffectController(4, Curves.easeOut), - ), - ], - infinite: true, - ), + SequenceEffect([ + ScaleEffect.to( + Vector2.all(4), + CurvedEffectController(4, Curves.easeIn), + ), + ScaleEffect.to( + Vector2.all(1), + CurvedEffectController(4, Curves.easeOut), + ), + ], infinite: true), ], ), ); diff --git a/packages/flame_mini_sprite/example/pubspec.lock b/packages/flame_mini_sprite/example/pubspec.lock deleted file mode 100644 index e3770dc..0000000 --- a/packages/flame_mini_sprite/example/pubspec.lock +++ /dev/null @@ -1,251 +0,0 @@ -# Generated by pub -# See https://dart.dev/tools/pub/glossary#lockfile -packages: - async: - dependency: transitive - description: - name: async - sha256: e2eb0491ba5ddb6177742d2da23904574082139b07c1e33b8503b9f46f3e1a37 - url: "https://pub.dev" - source: hosted - version: "2.13.1" - boolean_selector: - dependency: transitive - description: - name: boolean_selector - sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea" - url: "https://pub.dev" - source: hosted - version: "2.1.2" - characters: - dependency: transitive - description: - name: characters - sha256: faf38497bda5ead2a8c7615f4f7939df04333478bf32e4173fcb06d428b5716b - url: "https://pub.dev" - source: hosted - version: "1.4.1" - clock: - dependency: transitive - description: - name: clock - sha256: e51d50bca3217c9a9fa2b41a30e4a38971133f5f9ec7a3d57bae095007f1d28e - url: "https://pub.dev" - source: hosted - version: "1.1.3" - collection: - dependency: transitive - description: - name: collection - sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76" - url: "https://pub.dev" - source: hosted - version: "1.19.1" - cupertino_icons: - dependency: "direct main" - description: - name: cupertino_icons - sha256: "41e005c33bd814be4d3096aff55b1908d419fde52ca656c8c47719ec745873cd" - url: "https://pub.dev" - source: hosted - version: "1.0.9" - equatable: - dependency: transitive - description: - name: equatable - sha256: ea36e500cbf0ec18361deabca755434f73e42fe53c5130021c7e2d6b5ebe1702 - url: "https://pub.dev" - source: hosted - version: "3.0.0" - fake_async: - dependency: transitive - description: - name: fake_async - sha256: "5368f224a74523e8d2e7399ea1638b37aecfca824a3cc4dfdf77bf1fa905ac44" - url: "https://pub.dev" - source: hosted - version: "1.3.3" - flame: - dependency: "direct main" - description: - name: flame - sha256: b9e65f6d7d06a301d6ea3cde03731cad3cdc255d56e0fb53c56c1e7806aaaf6a - url: "https://pub.dev" - source: hosted - version: "1.37.0" - flame_mini_sprite: - dependency: "direct main" - description: - path: ".." - relative: true - source: path - version: "0.0.2" - flutter: - dependency: "direct main" - description: flutter - source: sdk - version: "0.0.0" - flutter_lints: - dependency: "direct dev" - description: - name: flutter_lints - sha256: "3105dc8492f6183fb076ccf1f351ac3d60564bff92e20bfc4af9cc1651f4e7e1" - url: "https://pub.dev" - source: hosted - version: "6.0.0" - flutter_test: - dependency: "direct dev" - description: flutter - source: sdk - version: "0.0.0" - leak_tracker: - dependency: transitive - description: - name: leak_tracker - sha256: "33e2e26bdd85a0112ec15400c8cbffea70d0f9c3407491f672a2fad47915e2de" - url: "https://pub.dev" - source: hosted - version: "11.0.2" - leak_tracker_flutter_testing: - dependency: transitive - description: - name: leak_tracker_flutter_testing - sha256: "1dbc140bb5a23c75ea9c4811222756104fbcd1a27173f0c34ca01e16bea473c1" - url: "https://pub.dev" - source: hosted - version: "3.0.10" - leak_tracker_testing: - dependency: transitive - description: - name: leak_tracker_testing - sha256: "8d5a2d49f4a66b49744b23b018848400d23e54caf9463f4eb20df3eb8acb2eb1" - url: "https://pub.dev" - source: hosted - version: "3.0.2" - lints: - dependency: transitive - description: - name: lints - sha256: "12f842a479589fea194fe5c5a3095abc7be0c1f2ddfa9a0e76aed1dbd26a87df" - url: "https://pub.dev" - source: hosted - version: "6.1.0" - matcher: - dependency: transitive - description: - name: matcher - sha256: "31bd099b47c10cd1aeb55146a2d46ce0277630ecef3f7dae54ad7873f36696cd" - url: "https://pub.dev" - source: hosted - version: "0.12.20" - material_color_utilities: - dependency: transitive - description: - name: material_color_utilities - sha256: "9c337007e82b1889149c82ed242ed1cb24a66044e30979c44912381e9be4c48b" - url: "https://pub.dev" - source: hosted - version: "0.13.0" - meta: - dependency: transitive - description: - name: meta - sha256: "307249ce4ff29d58a18e97f6345f539382eb9c9c29ecda628900f31de0443dd9" - url: "https://pub.dev" - source: hosted - version: "1.19.0" - mini_sprite: - dependency: "direct main" - description: - path: "../../mini_sprite" - relative: true - source: path - version: "0.1.0" - ordered_set: - dependency: transitive - description: - name: ordered_set - sha256: ca415a0e28b8e8f5e284af4b7d1b189d2d09af6d2082532ddaec54473f67d226 - url: "https://pub.dev" - source: hosted - version: "8.0.1" - path: - dependency: transitive - description: - name: path - sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5" - url: "https://pub.dev" - source: hosted - version: "1.9.1" - sky_engine: - dependency: transitive - description: flutter - source: sdk - version: "0.0.0" - source_span: - dependency: transitive - description: - name: source_span - sha256: "56a02f1f4cd1a2d96303c0144c93bd6d909eea6bee6bf5a0e0b685edbd4c47ab" - url: "https://pub.dev" - source: hosted - version: "1.10.2" - stack_trace: - dependency: transitive - description: - name: stack_trace - sha256: "277654b3034d17ac6f9f1cb5595db011b1d5d41e8806866db28e0abaa101c490" - url: "https://pub.dev" - source: hosted - version: "1.12.2" - stream_channel: - dependency: transitive - description: - name: stream_channel - sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d" - url: "https://pub.dev" - source: hosted - version: "2.1.4" - string_scanner: - dependency: transitive - description: - name: string_scanner - sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43" - url: "https://pub.dev" - source: hosted - version: "1.4.1" - term_glyph: - dependency: transitive - description: - name: term_glyph - sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e" - url: "https://pub.dev" - source: hosted - version: "1.2.2" - test_api: - dependency: transitive - description: - name: test_api - sha256: "2a122cbe059f8b610d3a5415f42e255b6c17b1f21eee1d960f31080237fb4f11" - url: "https://pub.dev" - source: hosted - version: "0.7.12" - vector_math: - dependency: transitive - description: - name: vector_math - sha256: "92b9910f66ed1057fd4da7b040ae7c74cafacf885bdc81be496928d5049b032d" - url: "https://pub.dev" - source: hosted - version: "2.4.3" - vm_service: - dependency: transitive - description: - name: vm_service - sha256: "5f37239c4851efcef929cea7824e76df7f2f0970aef85d66bbc430afa40e72f0" - url: "https://pub.dev" - source: hosted - version: "15.3.0" -sdks: - dart: ">=3.11.0 <4.0.0" - flutter: ">=3.41.0" diff --git a/packages/flame_mini_sprite/example/pubspec.yaml b/packages/flame_mini_sprite/example/pubspec.yaml index 51e3c90..dcff423 100644 --- a/packages/flame_mini_sprite/example/pubspec.yaml +++ b/packages/flame_mini_sprite/example/pubspec.yaml @@ -1,4 +1,5 @@ name: example +resolution: workspace description: A new Flutter project. publish_to: 'none' @@ -6,7 +7,7 @@ publish_to: 'none' version: 1.0.0+1 environment: - sdk: ">=2.17.6 <3.0.0" + sdk: ">=3.9.0 <4.0.0" dependencies: flame: ">=1.32.0 <1.38.0" diff --git a/packages/flame_mini_sprite/lib/src/components/mini_sprite_component.dart b/packages/flame_mini_sprite/lib/src/components/mini_sprite_component.dart index a21adf7..f468974 100644 --- a/packages/flame_mini_sprite/lib/src/components/mini_sprite_component.dart +++ b/packages/flame_mini_sprite/lib/src/components/mini_sprite_component.dart @@ -43,9 +43,7 @@ class MiniSpriteComponent extends PositionComponent { ), ]; - _palette = [ - for (final color in palette) Paint()..color = color, - ]; + _palette = [for (final color in palette) Paint()..color = color]; } /// The [MiniSprite] to render. diff --git a/packages/flame_mini_sprite/lib/src/extensions.dart b/packages/flame_mini_sprite/lib/src/extensions.dart index 8a43a39..ebbc163 100644 --- a/packages/flame_mini_sprite/lib/src/extensions.dart +++ b/packages/flame_mini_sprite/lib/src/extensions.dart @@ -14,8 +14,9 @@ extension FlameMiniSpriteX on MiniSprite { final recorder = PictureRecorder(); final canvas = Canvas(recorder); - final _paintPalette = - palette.map((color) => Paint()..color = color).toList(); + final _paintPalette = palette + .map((color) => Paint()..color = color) + .toList(); final w = pixels[0].length * pixelSize.toInt(); final h = pixels.length * pixelSize.toInt(); diff --git a/packages/flame_mini_sprite/pubspec.lock b/packages/flame_mini_sprite/pubspec.lock deleted file mode 100644 index b164d31..0000000 --- a/packages/flame_mini_sprite/pubspec.lock +++ /dev/null @@ -1,508 +0,0 @@ -# Generated by pub -# See https://dart.dev/tools/pub/glossary#lockfile -packages: - _fe_analyzer_shared: - dependency: transitive - description: - name: _fe_analyzer_shared - sha256: "1b0e6a07425a3e460666e88bf1c949ccc7bb0116ad562ce94a1eca60fe820725" - url: "https://pub.dev" - source: hosted - version: "103.0.0" - analyzer: - dependency: transitive - description: - name: analyzer - sha256: "61c04d0c1bfed555c681ea079519933f071a5a026578ff73c4ff0df2d3462e5e" - url: "https://pub.dev" - source: hosted - version: "13.3.0" - args: - dependency: transitive - description: - name: args - sha256: d0481093c50b1da8910eb0bb301626d4d8eb7284aa739614d2b394ee09e3ea04 - url: "https://pub.dev" - source: hosted - version: "2.7.0" - async: - dependency: transitive - description: - name: async - sha256: e2eb0491ba5ddb6177742d2da23904574082139b07c1e33b8503b9f46f3e1a37 - url: "https://pub.dev" - source: hosted - version: "2.13.1" - boolean_selector: - dependency: transitive - description: - name: boolean_selector - sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea" - url: "https://pub.dev" - source: hosted - version: "2.1.2" - characters: - dependency: transitive - description: - name: characters - sha256: faf38497bda5ead2a8c7615f4f7939df04333478bf32e4173fcb06d428b5716b - url: "https://pub.dev" - source: hosted - version: "1.4.1" - cli_config: - dependency: transitive - description: - name: cli_config - sha256: ac20a183a07002b700f0c25e61b7ee46b23c309d76ab7b7640a028f18e4d99ec - url: "https://pub.dev" - source: hosted - version: "0.2.0" - clock: - dependency: transitive - description: - name: clock - sha256: e51d50bca3217c9a9fa2b41a30e4a38971133f5f9ec7a3d57bae095007f1d28e - url: "https://pub.dev" - source: hosted - version: "1.1.3" - collection: - dependency: transitive - description: - name: collection - sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76" - url: "https://pub.dev" - source: hosted - version: "1.19.1" - convert: - dependency: transitive - description: - name: convert - sha256: b30acd5944035672bc15c6b7a8b47d773e41e2f17de064350988c5d02adb1c68 - url: "https://pub.dev" - source: hosted - version: "3.1.2" - coverage: - dependency: transitive - description: - name: coverage - sha256: "956a3de0725ca232ad353565a8290d3357592bf4250f6f298a185e2d949c5d3d" - url: "https://pub.dev" - source: hosted - version: "1.15.1" - crypto: - dependency: transitive - description: - name: crypto - sha256: c8ea0233063ba03258fbcf2ca4d6dadfefe14f02fab57702265467a19f27fadf - url: "https://pub.dev" - source: hosted - version: "3.0.7" - equatable: - dependency: transitive - description: - name: equatable - sha256: ea36e500cbf0ec18361deabca755434f73e42fe53c5130021c7e2d6b5ebe1702 - url: "https://pub.dev" - source: hosted - version: "3.0.0" - fake_async: - dependency: transitive - description: - name: fake_async - sha256: "5368f224a74523e8d2e7399ea1638b37aecfca824a3cc4dfdf77bf1fa905ac44" - url: "https://pub.dev" - source: hosted - version: "1.3.3" - file: - dependency: transitive - description: - name: file - sha256: a3b4f84adafef897088c160faf7dfffb7696046cb13ae90b508c2cbc95d3b8d4 - url: "https://pub.dev" - source: hosted - version: "7.0.1" - flame: - dependency: "direct main" - description: - name: flame - sha256: b9e65f6d7d06a301d6ea3cde03731cad3cdc255d56e0fb53c56c1e7806aaaf6a - url: "https://pub.dev" - source: hosted - version: "1.37.0" - flame_test: - dependency: "direct dev" - description: - name: flame_test - sha256: "15b3f9cdd886965078f8b66c9ab2eec6e9c4000d5657a12f290e49f3e16627c3" - url: "https://pub.dev" - source: hosted - version: "1.19.2" - flutter: - dependency: "direct main" - description: flutter - source: sdk - version: "0.0.0" - flutter_test: - dependency: "direct dev" - description: flutter - source: sdk - version: "0.0.0" - frontend_server_client: - dependency: transitive - description: - name: frontend_server_client - sha256: f64a0333a82f30b0cca061bc3d143813a486dc086b574bfb233b7c1372427694 - url: "https://pub.dev" - source: hosted - version: "4.0.0" - glob: - dependency: transitive - description: - name: glob - sha256: "218aeb56050c714f62a3182775320dfa04602b55074873e24e31bbd39bda96fb" - url: "https://pub.dev" - source: hosted - version: "2.2.0" - http_multi_server: - dependency: transitive - description: - name: http_multi_server - sha256: aa6199f908078bb1c5efb8d8638d4ae191aac11b311132c3ef48ce352fb52ef8 - url: "https://pub.dev" - source: hosted - version: "3.2.2" - http_parser: - dependency: transitive - description: - name: http_parser - sha256: "178d74305e7866013777bab2c3d8726205dc5a4dd935297175b19a23a2e66571" - url: "https://pub.dev" - source: hosted - version: "4.1.2" - io: - dependency: transitive - description: - name: io - sha256: "2635216ca6a737e60de577ffa1a48a0bec76ca8a62917cfc1bb88c14c570646f" - url: "https://pub.dev" - source: hosted - version: "1.1.0" - leak_tracker: - dependency: transitive - description: - name: leak_tracker - sha256: "33e2e26bdd85a0112ec15400c8cbffea70d0f9c3407491f672a2fad47915e2de" - url: "https://pub.dev" - source: hosted - version: "11.0.2" - leak_tracker_flutter_testing: - dependency: transitive - description: - name: leak_tracker_flutter_testing - sha256: "1dbc140bb5a23c75ea9c4811222756104fbcd1a27173f0c34ca01e16bea473c1" - url: "https://pub.dev" - source: hosted - version: "3.0.10" - leak_tracker_testing: - dependency: transitive - description: - name: leak_tracker_testing - sha256: "8d5a2d49f4a66b49744b23b018848400d23e54caf9463f4eb20df3eb8acb2eb1" - url: "https://pub.dev" - source: hosted - version: "3.0.2" - logging: - dependency: transitive - description: - name: logging - sha256: c8245ada5f1717ed44271ed1c26b8ce85ca3228fd2ffdb75468ab01979309d61 - url: "https://pub.dev" - source: hosted - version: "1.3.0" - matcher: - dependency: transitive - description: - name: matcher - sha256: "31bd099b47c10cd1aeb55146a2d46ce0277630ecef3f7dae54ad7873f36696cd" - url: "https://pub.dev" - source: hosted - version: "0.12.20" - material_color_utilities: - dependency: transitive - description: - name: material_color_utilities - sha256: "9c337007e82b1889149c82ed242ed1cb24a66044e30979c44912381e9be4c48b" - url: "https://pub.dev" - source: hosted - version: "0.13.0" - meta: - dependency: transitive - description: - name: meta - sha256: "307249ce4ff29d58a18e97f6345f539382eb9c9c29ecda628900f31de0443dd9" - url: "https://pub.dev" - source: hosted - version: "1.19.0" - mime: - dependency: transitive - description: - name: mime - sha256: bd47de35f07e27267e69c8c8b22edf9473bfee170a60d60fcc93730c5144b7f6 - url: "https://pub.dev" - source: hosted - version: "2.1.0" - mini_sprite: - dependency: "direct main" - description: - path: "../mini_sprite" - relative: true - source: path - version: "0.1.0" - node_preamble: - dependency: transitive - description: - name: node_preamble - sha256: "6e7eac89047ab8a8d26cf16127b5ed26de65209847630400f9aefd7cd5c730db" - url: "https://pub.dev" - source: hosted - version: "2.0.2" - ordered_set: - dependency: transitive - description: - name: ordered_set - sha256: ca415a0e28b8e8f5e284af4b7d1b189d2d09af6d2082532ddaec54473f67d226 - url: "https://pub.dev" - source: hosted - version: "8.0.1" - package_config: - dependency: transitive - description: - name: package_config - sha256: f096c55ebb7deb7e384101542bfba8c52696c1b56fca2eb62827989ef2353bbc - url: "https://pub.dev" - source: hosted - version: "2.2.0" - path: - dependency: transitive - description: - name: path - sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5" - url: "https://pub.dev" - source: hosted - version: "1.9.1" - pool: - dependency: transitive - description: - name: pool - sha256: "4177f68c237ea2128d1bee66ac17b2ce05ba3dbaafcbdd54c5d40a39d0b6b11c" - url: "https://pub.dev" - source: hosted - version: "1.5.3" - pub_semver: - dependency: transitive - description: - name: pub_semver - sha256: "261236774e8b1d69cfc6b9eabbc96c40f25e7a2d6b171f3385d4f65d5734fb24" - url: "https://pub.dev" - source: hosted - version: "2.2.1" - shelf: - dependency: transitive - description: - name: shelf - sha256: e7dd780a7ffb623c57850b33f43309312fc863fb6aa3d276a754bb299839ef12 - url: "https://pub.dev" - source: hosted - version: "1.4.2" - shelf_packages_handler: - dependency: transitive - description: - name: shelf_packages_handler - sha256: "89f967eca29607c933ba9571d838be31d67f53f6e4ee15147d5dc2934fee1b1e" - url: "https://pub.dev" - source: hosted - version: "3.0.2" - shelf_static: - dependency: transitive - description: - name: shelf_static - sha256: c87c3875f91262785dade62d135760c2c69cb217ac759485334c5857ad89f6e3 - url: "https://pub.dev" - source: hosted - version: "1.1.3" - shelf_web_socket: - dependency: transitive - description: - name: shelf_web_socket - sha256: "3632775c8e90d6c9712f883e633716432a27758216dfb61bd86a8321c0580925" - url: "https://pub.dev" - source: hosted - version: "3.0.0" - sky_engine: - dependency: transitive - description: flutter - source: sdk - version: "0.0.0" - source_map_stack_trace: - dependency: transitive - description: - name: source_map_stack_trace - sha256: c0713a43e323c3302c2abe2a1cc89aa057a387101ebd280371d6a6c9fa68516b - url: "https://pub.dev" - source: hosted - version: "2.1.2" - source_maps: - dependency: transitive - description: - name: source_maps - sha256: "14c2945847669b44089bb1222f66873d7ff7103c58911917f2a63c5a62327898" - url: "https://pub.dev" - source: hosted - version: "0.10.14" - source_span: - dependency: transitive - description: - name: source_span - sha256: "56a02f1f4cd1a2d96303c0144c93bd6d909eea6bee6bf5a0e0b685edbd4c47ab" - url: "https://pub.dev" - source: hosted - version: "1.10.2" - stack_trace: - dependency: transitive - description: - name: stack_trace - sha256: "277654b3034d17ac6f9f1cb5595db011b1d5d41e8806866db28e0abaa101c490" - url: "https://pub.dev" - source: hosted - version: "1.12.2" - stream_channel: - dependency: transitive - description: - name: stream_channel - sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d" - url: "https://pub.dev" - source: hosted - version: "2.1.4" - string_scanner: - dependency: transitive - description: - name: string_scanner - sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43" - url: "https://pub.dev" - source: hosted - version: "1.4.1" - term_glyph: - dependency: transitive - description: - name: term_glyph - sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e" - url: "https://pub.dev" - source: hosted - version: "1.2.2" - test: - dependency: transitive - description: - name: test - sha256: ca578dc12bb8b2f40b67b7d3bd2fac4f31c01a6ff7130a14e2597b919934507f - url: "https://pub.dev" - source: hosted - version: "1.31.1" - test_api: - dependency: transitive - description: - name: test_api - sha256: "2a122cbe059f8b610d3a5415f42e255b6c17b1f21eee1d960f31080237fb4f11" - url: "https://pub.dev" - source: hosted - version: "0.7.12" - test_core: - dependency: transitive - description: - name: test_core - sha256: d2e98ec12998368dc59ddd47ab709f2cd55acd6b66dc7db764455a44082f4bc5 - url: "https://pub.dev" - source: hosted - version: "0.6.18" - typed_data: - dependency: transitive - description: - name: typed_data - sha256: f9049c039ebfeb4cf7a7104a675823cd72dba8297f264b6637062516699fa006 - url: "https://pub.dev" - source: hosted - version: "1.4.0" - vector_math: - dependency: transitive - description: - name: vector_math - sha256: "92b9910f66ed1057fd4da7b040ae7c74cafacf885bdc81be496928d5049b032d" - url: "https://pub.dev" - source: hosted - version: "2.4.3" - very_good_analysis: - dependency: "direct dev" - description: - name: very_good_analysis - sha256: "0bd5eb8d6be76aa0d71e70cbdae6cac8f784f761170568e3c2214a6948c7f6d3" - url: "https://pub.dev" - source: hosted - version: "11.0.0" - vm_service: - dependency: transitive - description: - name: vm_service - sha256: "5f37239c4851efcef929cea7824e76df7f2f0970aef85d66bbc430afa40e72f0" - url: "https://pub.dev" - source: hosted - version: "15.3.0" - watcher: - dependency: transitive - description: - name: watcher - sha256: "1398c9f081a753f9226febe8900fce8f7d0a67163334e1c94a2438339d79d635" - url: "https://pub.dev" - source: hosted - version: "1.2.1" - web: - dependency: transitive - description: - name: web - sha256: "868d88a33d8a87b18ffc05f9f030ba328ffefba92d6c127917a2ba740f9cfe4a" - url: "https://pub.dev" - source: hosted - version: "1.1.1" - web_socket: - dependency: transitive - description: - name: web_socket - sha256: "34d64019aa8e36bf9842ac014bb5d2f5586ca73df5e4d9bf5c936975cae6982c" - url: "https://pub.dev" - source: hosted - version: "1.0.1" - web_socket_channel: - dependency: transitive - description: - name: web_socket_channel - sha256: d645757fb0f4773d602444000a8131ff5d48c9e47adfe9772652dd1a4f2d45c8 - url: "https://pub.dev" - source: hosted - version: "3.0.3" - webkit_inspection_protocol: - dependency: transitive - description: - name: webkit_inspection_protocol - sha256: "87d3f2333bb240704cd3f1c6b5b7acd8a10e7f0bc28c28dcf14e782014f4a572" - url: "https://pub.dev" - source: hosted - version: "1.2.1" - yaml: - dependency: transitive - description: - name: yaml - sha256: f67cdd8e07d3c6329146aaef1ba043542b3134c12489f553ca9a7435d1068aea - url: "https://pub.dev" - source: hosted - version: "3.1.4" -sdks: - dart: ">=3.13.0 <4.0.0" - flutter: ">=3.41.0" diff --git a/packages/flame_mini_sprite/pubspec.yaml b/packages/flame_mini_sprite/pubspec.yaml index 35faed2..8a8dcb1 100644 --- a/packages/flame_mini_sprite/pubspec.yaml +++ b/packages/flame_mini_sprite/pubspec.yaml @@ -1,10 +1,11 @@ name: flame_mini_sprite -description: Library to act as a bridge betwenn Mini Sprite and Flame Engine +resolution: workspace +description: Library to act as a bridge between Mini Sprite and Flame Engine version: 0.0.2 homepage: https://github.com/bluefireteam/mini_sprite environment: - sdk: ">=2.17.0 <3.0.0" + sdk: ">=3.9.0 <4.0.0" dependencies: flame: ">=1.32.0 <1.38.0" diff --git a/packages/flame_mini_sprite/test/src/flame_mini_sprite_test.dart b/packages/flame_mini_sprite/test/src/flame_mini_sprite_test.dart index 031e8eb..0a12669 100644 --- a/packages/flame_mini_sprite/test/src/flame_mini_sprite_test.dart +++ b/packages/flame_mini_sprite/test/src/flame_mini_sprite_test.dart @@ -12,34 +12,29 @@ void main() { const raw = '16,16;20,-1;1,0;7,-1;1,0;8,-1;7,0;8,-1;1,0;7,-1;1,0;7,-1;1,0;7,-1;1,0;7,-1;1,0;1,-1;2,0;1,-1;2,0;1,-1;1,0;6,-1;1,0;9,-1;1,0;5,-1;1,0;2,-1;1,0;3,-1;1,0;2,-1;1,0;5,-1;1,0;2,-1;1,0;3,-1;1,0;2,-1;1,0;5,-1;1,0;2,-1;1,0;3,-1;1,0;2,-1;1,0;5,-1;1,0;2,-1;1,0;3,-1;1,0;2,-1;1,0;5,-1;1,0;9,-1;1,0;6,-1;9,0;51,-1'; - testGolden( - 'renders correctly', - (game) async { - final miniSprite = MiniSprite.fromDataString(raw); - final sprite = - await miniSprite.toSprite(palette: palette, pixelSize: 4); + testGolden('renders correctly', (game) async { + final miniSprite = MiniSprite.fromDataString(raw); + final sprite = await miniSprite.toSprite(palette: palette, pixelSize: 4); - await game.world - .ensureAdd(SpriteComponent(sprite: sprite, anchor: Anchor.center)); - }, - goldenFile: 'goldens/flame_mini_sprite.png', - ); + await game.world.ensureAdd( + SpriteComponent(sprite: sprite, anchor: Anchor.center), + ); + }, goldenFile: 'goldens/flame_mini_sprite.png'); - testGolden( - 'renders correctly when a background color is used', - (game) async { - final miniSprite = MiniSprite.fromDataString(raw); - final sprite = await miniSprite.toSprite( - palette: palette, - pixelSize: 4, - backgroundColor: Colors.blue, - ); + testGolden('renders correctly when a background color is used', ( + game, + ) async { + final miniSprite = MiniSprite.fromDataString(raw); + final sprite = await miniSprite.toSprite( + palette: palette, + pixelSize: 4, + backgroundColor: Colors.blue, + ); - await game.world - .ensureAdd(SpriteComponent(sprite: sprite, anchor: Anchor.center)); - }, - goldenFile: 'goldens/flame_mini_sprite_with_background_color.png', - ); + await game.world.ensureAdd( + SpriteComponent(sprite: sprite, anchor: Anchor.center), + ); + }, goldenFile: 'goldens/flame_mini_sprite_with_background_color.png'); }); group('FlameMiniLibraryX', () { @@ -47,38 +42,26 @@ void main() { '''flower|16,16;20,-1;1,0;7,-1;1,0;8,-1;7,0;8,-1;1,0;7,-1;1,0;7,-1;1,0;7,-1;1,0;7,-1;1,0;1,-1;2,0;1,-1;2,0;1,-1;1,0;6,-1;1,0;9,-1;1,0;5,-1;1,0;2,-1;1,0;3,-1;1,0;2,-1;1,0;5,-1;1,0;2,-1;1,0;3,-1;1,0;2,-1;1,0;5,-1;1,0;2,-1;1,0;3,-1;1,0;2,-1;1,0;5,-1;1,0;2,-1;1,0;3,-1;1,0;2,-1;1,0;5,-1;1,0;9,-1;1,0;6,-1;9,0;51,-1 ground|16,16;16,0;1,-1;15,0;224,-1'''; - testGolden( - 'renders correctly the ground', - (game) async { - final library = MiniLibrary.fromDataString(raw); - final sprites = await library.toSprites( - palette: palette, - pixelSize: 4, - ); + testGolden('renders correctly the ground', (game) async { + final library = MiniLibrary.fromDataString(raw); + final sprites = await library.toSprites(palette: palette, pixelSize: 4); - final sprite = sprites['ground']; + final sprite = sprites['ground']; - await game.world - .ensureAdd(SpriteComponent(sprite: sprite, anchor: Anchor.center)); - }, - goldenFile: 'goldens/flame_mini_library_ground.png', - ); + await game.world.ensureAdd( + SpriteComponent(sprite: sprite, anchor: Anchor.center), + ); + }, goldenFile: 'goldens/flame_mini_library_ground.png'); - testGolden( - 'renders correctly the ground', - (game) async { - final library = MiniLibrary.fromDataString(raw); - final sprites = await library.toSprites( - palette: palette, - pixelSize: 4, - ); + testGolden('renders correctly the ground', (game) async { + final library = MiniLibrary.fromDataString(raw); + final sprites = await library.toSprites(palette: palette, pixelSize: 4); - final sprite = sprites['flower']; + final sprite = sprites['flower']; - await game.world - .ensureAdd(SpriteComponent(sprite: sprite, anchor: Anchor.center)); - }, - goldenFile: 'goldens/flame_mini_library_flower.png', - ); + await game.world.ensureAdd( + SpriteComponent(sprite: sprite, anchor: Anchor.center), + ); + }, goldenFile: 'goldens/flame_mini_library_flower.png'); }); } diff --git a/packages/flame_mini_sprite/test/src/mini_sprite_component_test.dart b/packages/flame_mini_sprite/test/src/mini_sprite_component_test.dart index cb87d99..22e43f8 100644 --- a/packages/flame_mini_sprite/test/src/mini_sprite_component_test.dart +++ b/packages/flame_mini_sprite/test/src/mini_sprite_component_test.dart @@ -14,52 +14,39 @@ void main() { const palette = [Colors.white, Colors.black]; group('MiniSpriteComponent', () { - testGolden( - 'when no size is specified, pixel size is one', - (game) async { - final miniSprite = MiniSprite.fromDataString(raw); - await game.world.ensureAdd( - MiniSpriteComponent( - miniSprite: miniSprite, - palette: palette, - ), - ); - }, - goldenFile: 'goldens/mini_sprite_component_no_size.png', - ); - - testGolden( - 'correctly calculates the pixel size given the size', - (game) async { - final miniSprite = MiniSprite.fromDataString(raw); - await game.world.ensureAdd( - MiniSpriteComponent( - miniSprite: miniSprite, - size: Vector2.all(150), - palette: palette, - ), - ); - }, - goldenFile: 'goldens/mini_sprite_component_with_size.png', - ); - - testGolden( - 'updates the pixel size when the size changes', - (game) async { - final miniSprite = MiniSprite.fromDataString(raw); - late MiniSpriteComponent component; - - await game.world.ensureAdd( - component = MiniSpriteComponent( - miniSprite: miniSprite, - size: Vector2.all(150), - palette: palette, - ), - ); - - component.size = Vector2.all(50); - }, - goldenFile: 'goldens/mini_sprite_component_update_size.png', - ); + testGolden('when no size is specified, pixel size is one', (game) async { + final miniSprite = MiniSprite.fromDataString(raw); + await game.world.ensureAdd( + MiniSpriteComponent(miniSprite: miniSprite, palette: palette), + ); + }, goldenFile: 'goldens/mini_sprite_component_no_size.png'); + + testGolden('correctly calculates the pixel size given the size', ( + game, + ) async { + final miniSprite = MiniSprite.fromDataString(raw); + await game.world.ensureAdd( + MiniSpriteComponent( + miniSprite: miniSprite, + size: Vector2.all(150), + palette: palette, + ), + ); + }, goldenFile: 'goldens/mini_sprite_component_with_size.png'); + + testGolden('updates the pixel size when the size changes', (game) async { + final miniSprite = MiniSprite.fromDataString(raw); + late MiniSpriteComponent component; + + await game.world.ensureAdd( + component = MiniSpriteComponent( + miniSprite: miniSprite, + size: Vector2.all(150), + palette: palette, + ), + ); + + component.size = Vector2.all(50); + }, goldenFile: 'goldens/mini_sprite_component_update_size.png'); }); } diff --git a/packages/flutter_mini_sprite/README.md b/packages/flutter_mini_sprite/README.md index 97dc316..29ea9be 100644 --- a/packages/flutter_mini_sprite/README.md +++ b/packages/flutter_mini_sprite/README.md @@ -10,11 +10,12 @@ Provides Widgets to render mini sprites into Flutter [very_good_analysis_badge]: https://img.shields.io/badge/style-very_good_analysis-B22C89.svg [very_good_analysis_link]: https://pub.dev/packages/very_good_analysis -# How to use it + +## How to use it Add flutter mini sprite to the project's pubspec: -``` +```shell dart pub add flutter_mini_sprite ``` diff --git a/packages/flutter_mini_sprite/example/lib/main.dart b/packages/flutter_mini_sprite/example/lib/main.dart index 706973d..3af983f 100644 --- a/packages/flutter_mini_sprite/example/lib/main.dart +++ b/packages/flutter_mini_sprite/example/lib/main.dart @@ -6,41 +6,40 @@ import 'package:mini_sprite/mini_sprite.dart'; void main() { final dashbook = Dashbook(); - dashbook.storiesOf('Flutter Mini Sprite').add( - 'default', - (context) { - return Center( - child: MiniSpriteWidget( - pixelSize: context.numberProperty('pixelSize', 10), - sprite: MiniSprite.fromDataString( - '8,8;1,-1;3,1;4,-1;1,1;3,0;1,1;3,-1;1,1;4,0;2,1;1,-1;1,1;6,0;2,1;6,0;2,1;4,0;2,1;1,-1;1,1;3,0;1,1;4,-1;3,1;4,-1'), - palette: [ - context.colorProperty('color 1', const Color(0xFFFFFFFF)), - context.colorProperty('color 2', const Color(0xFF000000)), - ], - ), - ); - }, - ).add( - 'animating', - (context) { - return Center( - child: AnimatedScale( - duration: const Duration(seconds: 1), - scale: context.numberProperty('scale', 1.0), + dashbook + .storiesOf('Flutter Mini Sprite') + .add('default', (context) { + return Center( child: MiniSpriteWidget( - pixelSize: 2, + pixelSize: context.numberProperty('pixelSize', 10), sprite: MiniSprite.fromDataString( - '8,8;1,-1;3,1;4,-1;1,1;3,0;1,1;3,-1;1,1;4,0;2,1;1,-1;1,1;6,0;2,1;6,0;2,1;4,0;2,1;1,-1;1,1;3,0;1,1;4,-1;3,1;4,-1'), + '8,8;1,-1;3,1;4,-1;1,1;3,0;1,1;3,-1;1,1;4,0;2,1;1,-1;1,1;6,0;2,1;6,0;2,1;4,0;2,1;1,-1;1,1;3,0;1,1;4,-1;3,1;4,-1', + ), palette: [ context.colorProperty('color 1', const Color(0xFFFFFFFF)), context.colorProperty('color 2', const Color(0xFF000000)), ], ), - ), - ); - }, - ); + ); + }) + .add('animating', (context) { + return Center( + child: AnimatedScale( + duration: const Duration(seconds: 1), + scale: context.numberProperty('scale', 1.0), + child: MiniSpriteWidget( + pixelSize: 2, + sprite: MiniSprite.fromDataString( + '8,8;1,-1;3,1;4,-1;1,1;3,0;1,1;3,-1;1,1;4,0;2,1;1,-1;1,1;6,0;2,1;6,0;2,1;4,0;2,1;1,-1;1,1;3,0;1,1;4,-1;3,1;4,-1', + ), + palette: [ + context.colorProperty('color 1', const Color(0xFFFFFFFF)), + context.colorProperty('color 2', const Color(0xFF000000)), + ], + ), + ), + ); + }); runApp(dashbook); } diff --git a/packages/flutter_mini_sprite/example/pubspec.yaml b/packages/flutter_mini_sprite/example/pubspec.yaml index 5099df1..7ab4063 100644 --- a/packages/flutter_mini_sprite/example/pubspec.yaml +++ b/packages/flutter_mini_sprite/example/pubspec.yaml @@ -1,4 +1,5 @@ name: flutter_mini_sprite_example +resolution: workspace description: Example app for flutter_mini_sprite publish_to: 'none' @@ -6,7 +7,7 @@ publish_to: 'none' version: 1.0.0+1 environment: - sdk: '>=2.18.0 <3.0.0' + sdk: ">=3.9.0 <4.0.0" dependencies: dashbook: ^0.1.10 diff --git a/packages/flutter_mini_sprite/pubspec.yaml b/packages/flutter_mini_sprite/pubspec.yaml index d09d8ba..1731659 100644 --- a/packages/flutter_mini_sprite/pubspec.yaml +++ b/packages/flutter_mini_sprite/pubspec.yaml @@ -1,10 +1,11 @@ name: flutter_mini_sprite +resolution: workspace description: Provides Widgets to render mini sprites into Flutter homepage: https://github.com/bluefireteam/mini_sprite version: 0.0.1+1 environment: - sdk: ">=2.17.0 <3.0.0" + sdk: ">=3.9.0 <4.0.0" dependencies: flutter: diff --git a/packages/mini_sprite/README.md b/packages/mini_sprite/README.md index 9c44f49..b031c15 100644 --- a/packages/mini_sprite/README.md +++ b/packages/mini_sprite/README.md @@ -10,20 +10,23 @@ A simplified sprite format meant for 1bit styled games. [very_good_analysis_badge]: https://img.shields.io/badge/style-very_good_analysis-B22C89.svg [very_good_analysis_link]: https://pub.dev/packages/very_good_analysis -# How to use + +## How to use Add mini sprite to your project pubspec: -``` +```shell dart pub add mini_sprite ``` -## MiniSprite + +### MiniSprite `MiniSprite` holds the information for a single sprite, it can be generated at runtime or be loaded from its raw format: -### Generating at runtime + +#### Generating a MiniSprite at runtime ```dart List> _generatePixels() { @@ -34,7 +37,8 @@ final miniSprite = MiniSprite(_generatePixels()); print(miniSprite.pixels); ``` -### Reading from its raw format + +#### Reading a MiniSprite from its raw format ```dart const spriteData = '...'; @@ -45,6 +49,7 @@ print(miniSprite.pixels); Each value on the matrix represents a color index on a palette, where `-1`, means an unfilled pixel. + ### MiniLibrary `MiniLibrary` is a class that represents a collection of `MiniSprite`s. It is a helper class that @@ -52,7 +57,8 @@ makes it easy to store and load a collection of sprites. Just like `MiniSprite` it can be generated at runtime or loaded from its raw format. -### Generating at runtime + +#### Generating a MiniLibrary at runtime ```dart List> _generatePixels() { @@ -66,7 +72,8 @@ final miniLibrary = MiniLibrary({ print(miniLibrary.sprites); ``` -### Reading from its raw format + +#### Reading a MiniLibrary from its raw format ```dart const libraryData = '...'; @@ -74,6 +81,7 @@ final miniLibrary = MiniLibrary.fromDataString(libraryData); print(miniLibrary.sprite); ``` + ### MiniMap `MiniMap` is a class that holds information for a map (or stage) of a game. Its coordinate system @@ -84,11 +92,12 @@ Objects are stored in a `Map` where the key is a `MapPosition` (a simple object properties of the object. With the exception of the `sprite` key on the properties, which holds the sprite name from a -`MiniLibrary`, all other properties are custom values set in the editor. +`MiniLibrary`, all other properties are custom values set in the editor. Just like the other classes it can be generated at runtime or loaded from its raw format. -### Generating at runtime + +#### Generating a MiniMap at runtime ```dart final miniMap = MiniMap({ @@ -105,7 +114,8 @@ final miniMap = MiniMap({ }); ``` -### Reading from its raw format + +#### Reading a MiniMap from its raw format ```dart const mapData = '...'; diff --git a/packages/mini_sprite/lib/src/mini_library.dart b/packages/mini_sprite/lib/src/mini_library.dart index 209773b..5b3ba62 100644 --- a/packages/mini_sprite/lib/src/mini_library.dart +++ b/packages/mini_sprite/lib/src/mini_library.dart @@ -25,10 +25,7 @@ class MiniLibrary extends Equatable { final name = blocks.first; final data = blocks.last; - return { - ...map, - name: MiniSprite.fromDataString(data), - }; + return {...map, name: MiniSprite.fromDataString(data)}; }); return MiniLibrary(sprites); @@ -36,9 +33,11 @@ class MiniLibrary extends Equatable { /// Returns this as a data string. String toDataString() { - return sprites.entries.map((entry) { - return '${entry.key}|${entry.value.toDataString()}'; - }).join('\n'); + return sprites.entries + .map((entry) { + return '${entry.key}|${entry.value.toDataString()}'; + }) + .join('\n'); } /// The library of sprites. diff --git a/packages/mini_sprite/lib/src/mini_map.dart b/packages/mini_sprite/lib/src/mini_map.dart index fe0ab66..c960792 100644 --- a/packages/mini_sprite/lib/src/mini_map.dart +++ b/packages/mini_sprite/lib/src/mini_map.dart @@ -8,12 +8,9 @@ import 'package:equatable/equatable.dart'; /// {@endtemplate} class MiniMap extends Equatable { /// {@macro mini_map} - const MiniMap({ - required this.objects, - int? width, - int? height, - }) : _width = width, - _height = height; + const MiniMap({required this.objects, int? width, int? height}) + : _width = width, + _height = height; /// {@macro mini_map} /// @@ -62,10 +59,7 @@ class MiniMap extends Equatable { _width ?? objects.keys.fold( 0, - (previousValue, element) => max( - previousValue, - element.x, - ), + (previousValue, element) => max(previousValue, element.x), ) + 1; @@ -75,10 +69,7 @@ class MiniMap extends Equatable { _height ?? objects.keys.fold( 0, - (previousValue, element) => max( - previousValue, - element.y, - ), + (previousValue, element) => max(previousValue, element.y), ) + 1; @@ -88,11 +79,7 @@ class MiniMap extends Equatable { final x = entry.key.x; final y = entry.key.y; final data = entry.value; - return { - 'x': x, - 'y': y, - 'data': data, - }; + return {'x': x, 'y': y, 'data': data}; }).toList(); return jsonEncode({ diff --git a/packages/mini_sprite/lib/src/mini_sprite.dart b/packages/mini_sprite/lib/src/mini_sprite.dart index b9577bf..6987401 100644 --- a/packages/mini_sprite/lib/src/mini_sprite.dart +++ b/packages/mini_sprite/lib/src/mini_sprite.dart @@ -13,7 +13,7 @@ class MiniSprite extends Equatable { /// /// Creates an empty sprite with the given width and height. MiniSprite.empty(int width, int height) - : pixels = List.generate(height, (_) => List.generate(width, (_) => -1)); + : pixels = List.generate(height, (_) => List.generate(width, (_) => -1)); /// {@macro mini_sprite} /// @@ -25,28 +25,24 @@ class MiniSprite extends Equatable { final height = int.parse(size[0]); final width = int.parse(size[1]); - final flatten = blocks.map((rawBlock) { - final blockSplit = rawBlock.split(','); + final flatten = blocks + .map((rawBlock) { + final blockSplit = rawBlock.split(','); - final count = int.parse(blockSplit[0]); - final value = int.parse(blockSplit[1]); + final count = int.parse(blockSplit[0]); + final value = int.parse(blockSplit[1]); - return List.filled(count, value); - }).fold>(List.empty(), (value, list) { - return [ - ...value, - ...list, - ]; - }); + return List.filled(count, value); + }) + .fold>(List.empty(), (value, list) { + return [...value, ...list]; + }); final pixels = List.generate( height, - (_) => List.generate( - width, - (_) { - return flatten.removeAt(0); - }, - ), + (_) => List.generate(width, (_) { + return flatten.removeAt(0); + }), ); return MiniSprite(pixels); diff --git a/packages/mini_sprite/melos_mini_sprite.iml b/packages/mini_sprite/melos_mini_sprite.iml deleted file mode 100644 index 389d07a..0000000 --- a/packages/mini_sprite/melos_mini_sprite.iml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/packages/mini_sprite/pubspec.yaml b/packages/mini_sprite/pubspec.yaml index c2d00a7..6322de1 100644 --- a/packages/mini_sprite/pubspec.yaml +++ b/packages/mini_sprite/pubspec.yaml @@ -1,10 +1,11 @@ name: mini_sprite +resolution: workspace description: A simple sprite format for building 1bit styled graphics. version: 0.1.0 homepage: https://github.com/bluefireteam/mini_sprite environment: - sdk: ">=2.17.0 <3.0.0" + sdk: ">=3.9.0 <4.0.0" dependencies: equatable: ^3.0.0 diff --git a/packages/mini_sprite/test/src/mini_library_test.dart b/packages/mini_sprite/test/src/mini_library_test.dart index 305f194..f798747 100644 --- a/packages/mini_sprite/test/src/mini_library_test.dart +++ b/packages/mini_sprite/test/src/mini_library_test.dart @@ -7,30 +7,21 @@ import 'package:test/test.dart'; void main() { group('MiniLibrary', () { test('empty returns an empty library', () { - expect( - MiniLibrary.empty().sprites, - isEmpty, - ); + expect(MiniLibrary.empty().sprites, isEmpty); }); test('toDataString returns the correct data', () { expect( - MiniLibrary( - const { - 'A': MiniSprite( - [ - [1, 1], - [1, 1], - ], - ), - 'B': MiniSprite( - [ - [0, 0], - [0, 0], - ], - ), - }, - ).toDataString(), + MiniLibrary(const { + 'A': MiniSprite([ + [1, 1], + [1, 1], + ]), + 'B': MiniSprite([ + [0, 0], + [0, 0], + ]), + }).toDataString(), equals('A|2,2;4,1\nB|2,2;4,0'), ); }); @@ -39,22 +30,16 @@ void main() { expect( MiniLibrary.fromDataString('A|2,2;4,1\nB|2,2;4,0'), equals( - MiniLibrary( - const { - 'A': MiniSprite( - [ - [1, 1], - [1, 1], - ], - ), - 'B': MiniSprite( - [ - [0, 0], - [0, 0], - ], - ), - }, - ), + MiniLibrary(const { + 'A': MiniSprite([ + [1, 1], + [1, 1], + ]), + 'B': MiniSprite([ + [0, 0], + [0, 0], + ]), + }), ), ); }); diff --git a/packages/mini_sprite_editor/.github/PULL_REQUEST_TEMPLATE.md b/packages/mini_sprite_editor/.github/PULL_REQUEST_TEMPLATE.md deleted file mode 100644 index 6b9372e..0000000 --- a/packages/mini_sprite_editor/.github/PULL_REQUEST_TEMPLATE.md +++ /dev/null @@ -1,23 +0,0 @@ - - -## Description - - - -## Type of Change - - - -- [ ] โœจ New feature (non-breaking change which adds functionality) -- [ ] ๐Ÿ› ๏ธ Bug fix (non-breaking change which fixes an issue) -- [ ] โŒ Breaking change (fix or feature that would cause existing functionality to change) -- [ ] ๐Ÿงน Code refactor -- [ ] โœ… Build configuration change -- [ ] ๐Ÿ“ Documentation -- [ ] ๐Ÿ—‘๏ธ Chore diff --git a/packages/mini_sprite_editor/.github/workflows/main.yaml b/packages/mini_sprite_editor/.github/workflows/main.yaml deleted file mode 100644 index b554ded..0000000 --- a/packages/mini_sprite_editor/.github/workflows/main.yaml +++ /dev/null @@ -1,10 +0,0 @@ -name: mini_sprite_editor - -on: [pull_request, push] - -jobs: - build: - uses: VeryGoodOpenSource/very_good_workflows/.github/workflows/flutter_package.yml@v1 - with: - flutter_channel: stable - flutter_version: 3.0.0 diff --git a/packages/mini_sprite_editor/.idea/runConfigurations/development.xml b/packages/mini_sprite_editor/.idea/runConfigurations/development.xml deleted file mode 100644 index 37d45fe..0000000 --- a/packages/mini_sprite_editor/.idea/runConfigurations/development.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - \ No newline at end of file diff --git a/packages/mini_sprite_editor/.idea/runConfigurations/production.xml b/packages/mini_sprite_editor/.idea/runConfigurations/production.xml deleted file mode 100644 index e55961d..0000000 --- a/packages/mini_sprite_editor/.idea/runConfigurations/production.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - \ No newline at end of file diff --git a/packages/mini_sprite_editor/.idea/runConfigurations/staging.xml b/packages/mini_sprite_editor/.idea/runConfigurations/staging.xml deleted file mode 100644 index 3f7d621..0000000 --- a/packages/mini_sprite_editor/.idea/runConfigurations/staging.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - \ No newline at end of file diff --git a/packages/mini_sprite_editor/.metadata b/packages/mini_sprite_editor/.metadata deleted file mode 100644 index cd984dd..0000000 --- a/packages/mini_sprite_editor/.metadata +++ /dev/null @@ -1,10 +0,0 @@ -# This file tracks properties of this Flutter project. -# Used by Flutter tool to assess capabilities and perform upgrades etc. -# -# This file should be version controlled and should not be manually edited. - -version: - revision: 9b2d32b605630f28625709ebd9d78ab3016b2bf6 - channel: stable - -project_type: app diff --git a/packages/mini_sprite_editor/.vscode/extensions.json b/packages/mini_sprite_editor/.vscode/extensions.json deleted file mode 100644 index 03e0c3b..0000000 --- a/packages/mini_sprite_editor/.vscode/extensions.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - // See https://go.microsoft.com/fwlink/?LinkId=827846 - // for the documentation about the extensions.json format - "recommendations": [ - "dart-code.dart-code", - "dart-code.flutter", - "felixangelov.bloc" - ] -} diff --git a/packages/mini_sprite_editor/.vscode/launch.json b/packages/mini_sprite_editor/.vscode/launch.json deleted file mode 100644 index b4e33ce..0000000 --- a/packages/mini_sprite_editor/.vscode/launch.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - // Use IntelliSense to learn about possible attributes. - // Hover to view descriptions of existing attributes. - // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 - "version": "0.2.0", - "configurations": [ - { - "name": "Launch development", - "request": "launch", - "type": "dart", - "program": "lib/main_development.dart", - "args": [ - "--flavor", - "development", - "--target", - "lib/main_development.dart" - ] - }, - { - "name": "Launch staging", - "request": "launch", - "type": "dart", - "program": "lib/main_staging.dart", - "args": ["--flavor", "staging", "--target", "lib/main_staging.dart"] - }, - { - "name": "Launch production", - "request": "launch", - "type": "dart", - "program": "lib/main_production.dart", - "args": ["--flavor", "production", "--target", "lib/main_production.dart"] - } - ] -} diff --git a/packages/mini_sprite_editor/README.md b/packages/mini_sprite_editor/README.md index cf25547..d098c34 100644 --- a/packages/mini_sprite_editor/README.md +++ b/packages/mini_sprite_editor/README.md @@ -8,15 +8,14 @@ Generated by the [Very Good CLI][very_good_cli_link] ๐Ÿค– Small, standalone application that can read and write mini sprites. -## Opening with a list of colors: -http://URL/#?colors=4283215696,4294198070,4280391411 +## Opening with a list of colors + + --- [coverage_badge]: coverage_badge.svg -[flutter_localizations_link]: https://api.flutter.dev/flutter/flutter_localizations/flutter_localizations-library.html -[internationalization_link]: https://flutter.dev/docs/development/accessibility-and-localization/internationalization [license_badge]: https://img.shields.io/badge/license-MIT-blue.svg [license_link]: https://opensource.org/licenses/MIT [very_good_analysis_badge]: https://img.shields.io/badge/style-very_good_analysis-B22C89.svg diff --git a/packages/mini_sprite_editor/lib/app/view/app.dart b/packages/mini_sprite_editor/lib/app/view/app.dart index 9b88335..a5fb1ca 100644 --- a/packages/mini_sprite_editor/lib/app/view/app.dart +++ b/packages/mini_sprite_editor/lib/app/view/app.dart @@ -30,56 +30,53 @@ class App extends StatelessWidget { BlocProvider(create: (context) => MapCubit()), ], child: BlocBuilder( - builder: - (context, state) => MaterialApp( - themeMode: state.themeMode, - theme: ThemeData(), - darkTheme: ThemeData.dark(), - localizationsDelegates: const [ - AppLocalizations.delegate, - GlobalMaterialLocalizations.delegate, - ], - supportedLocales: AppLocalizations.supportedLocales, - onGenerateRoute: (settings) { - final name = settings.name; + builder: (context, state) => MaterialApp( + themeMode: state.themeMode, + theme: ThemeData(), + darkTheme: ThemeData.dark(), + localizationsDelegates: const [ + AppLocalizations.delegate, + GlobalMaterialLocalizations.delegate, + ], + supportedLocales: AppLocalizations.supportedLocales, + onGenerateRoute: (settings) { + final name = settings.name; - if (name != null && name != '/') { - final uri = Uri.parse(name); - final colors = uri.queryParameters['colors']; + if (name != null && name != '/') { + final uri = Uri.parse(name); + final colors = uri.queryParameters['colors']; - List? colorList; - if (colors != null) { - colorList = - colors - .split(',') - .map(int.parse) - .map(Color.new) - .toList(); - } + List? colorList; + if (colors != null) { + colorList = colors + .split(',') + .map(int.parse) + .map(Color.new) + .toList(); + } - final spriteRaw = uri.queryParameters['sprite']; - MiniSprite? sprite; - if (spriteRaw != null) { - try { - sprite = MiniSprite.fromDataString(spriteRaw); - } on Exception catch (_) { - // ignore on invalid sprite data - } - } - return MaterialPageRoute( - builder: - (_) => WorkspaceView( - colorList: colorList, - sprite: sprite, - ), - ); + final spriteRaw = uri.queryParameters['sprite']; + MiniSprite? sprite; + if (spriteRaw != null) { + try { + sprite = MiniSprite.fromDataString(spriteRaw); + } on Exception catch (_) { + // ignore on invalid sprite data } + } + return MaterialPageRoute( + builder: (_) => WorkspaceView( + colorList: colorList, + sprite: sprite, + ), + ); + } - return MaterialPageRoute( - builder: (_) => const WorkspaceView(), - ); - }, - ), + return MaterialPageRoute( + builder: (_) => const WorkspaceView(), + ); + }, + ), ), ), ); diff --git a/packages/mini_sprite_editor/lib/config/view/config_dialog.dart b/packages/mini_sprite_editor/lib/config/view/config_dialog.dart index e560523..5aa6bd9 100644 --- a/packages/mini_sprite_editor/lib/config/view/config_dialog.dart +++ b/packages/mini_sprite_editor/lib/config/view/config_dialog.dart @@ -10,24 +10,23 @@ Future _showColorPicker(Color color, BuildContext context) { Color? color0 = color; return showDialog( context: context, - builder: - (context) => AlertDialog( - title: Text(context.l10n.chooseColor), - content: SingleChildScrollView( - child: ColorPicker( - pickerColor: color, - onColorChanged: (color) => color0 = color, - ), - ), - actions: [ - ElevatedButton( - child: Text(context.l10n.confirm), - onPressed: () { - Navigator.of(context).pop(color0); - }, - ), - ], + builder: (context) => AlertDialog( + title: Text(context.l10n.chooseColor), + content: SingleChildScrollView( + child: ColorPicker( + pickerColor: color, + onColorChanged: (color) => color0 = color, + ), + ), + actions: [ + ElevatedButton( + child: Text(context.l10n.confirm), + onPressed: () { + Navigator.of(context).pop(color0); + }, ), + ], + ), ); } @@ -56,9 +55,8 @@ class _ConfigDialogState extends State { @override void initState() { super.initState(); - _gridFieldController = - TextEditingController() - ..text = context.read().state.mapGridSize.toString(); + _gridFieldController = TextEditingController() + ..text = context.read().state.mapGridSize.toString(); } @override @@ -243,8 +241,8 @@ class _ColorEntry extends StatelessWidget { Widget build(BuildContext context) { return GestureDetector( onLongPress: () async { - final confirmaiton = await ConfirmDialog.show(context); - if (confirmaiton ?? false) { + final confirmation = await ConfirmDialog.show(context); + if (confirmation ?? false) { onRemove(); } }, diff --git a/packages/mini_sprite_editor/lib/l10n/arb/app_en.arb b/packages/mini_sprite_editor/lib/l10n/arb/app_en.arb index 0921e1a..23b15f4 100644 --- a/packages/mini_sprite_editor/lib/l10n/arb/app_en.arb +++ b/packages/mini_sprite_editor/lib/l10n/arb/app_en.arb @@ -54,7 +54,7 @@ }, "greaterThanZero": "Must be greater than zero", "@greaterThanZero": { - "description": "Error message for values that must be greated than zero." + "description": "Error message for values that must be greater than zero." }, "confirm": "Confirm", "@confirm": { @@ -84,9 +84,9 @@ "@clearSprite": { "description": "Label for clearing the sprite" }, - "toogleGrid": "Toogle grid", - "@toogleGrid": { - "description": "Label for the grid toogling" + "toggleGrid": "Toggle grid", + "@toggleGrid": { + "description": "Label for the grid toggling" }, "configurations": "Configurations", "@configurations": { @@ -176,8 +176,8 @@ "@removeProperty": { "description": "Label for the remove property" }, - "newPropery": "New property", - "@newPropery": { + "newProperty": "New property", + "@newProperty": { "description": "Label for the new property" }, "name": "Name", diff --git a/packages/mini_sprite_editor/lib/l10n/arb/app_localizations.dart b/packages/mini_sprite_editor/lib/l10n/arb/app_localizations.dart index ac27c52..f47e18b 100644 --- a/packages/mini_sprite_editor/lib/l10n/arb/app_localizations.dart +++ b/packages/mini_sprite_editor/lib/l10n/arb/app_localizations.dart @@ -172,7 +172,7 @@ abstract class AppLocalizations { /// **'Height'** String get height; - /// Error message for values that must be greated than zero. + /// Error message for values that must be greater than zero. /// /// In en, this message translates to: /// **'Must be greater than zero'** @@ -220,11 +220,11 @@ abstract class AppLocalizations { /// **'Clear sprite'** String get clearSprite; - /// Label for the grid toogling + /// Label for the grid toggling /// /// In en, this message translates to: - /// **'Toogle grid'** - String get toogleGrid; + /// **'Toggle grid'** + String get toggleGrid; /// Label for configurations /// @@ -362,7 +362,7 @@ abstract class AppLocalizations { /// /// In en, this message translates to: /// **'New property'** - String get newPropery; + String get newProperty; /// Label for the name /// diff --git a/packages/mini_sprite_editor/lib/l10n/arb/app_localizations_en.dart b/packages/mini_sprite_editor/lib/l10n/arb/app_localizations_en.dart index b1fe967..4525b63 100644 --- a/packages/mini_sprite_editor/lib/l10n/arb/app_localizations_en.dart +++ b/packages/mini_sprite_editor/lib/l10n/arb/app_localizations_en.dart @@ -72,7 +72,7 @@ class AppLocalizationsEn extends AppLocalizations { String get clearSprite => 'Clear sprite'; @override - String get toogleGrid => 'Toogle grid'; + String get toggleGrid => 'Toggle grid'; @override String get configurations => 'Configurations'; @@ -141,7 +141,7 @@ class AppLocalizationsEn extends AppLocalizations { String get removeProperty => 'Remove property'; @override - String get newPropery => 'New property'; + String get newProperty => 'New property'; @override String get name => 'Name'; diff --git a/packages/mini_sprite_editor/lib/library/cubit/library_cubit.dart b/packages/mini_sprite_editor/lib/library/cubit/library_cubit.dart index 95a1c2f..7553c22 100644 --- a/packages/mini_sprite_editor/lib/library/cubit/library_cubit.dart +++ b/packages/mini_sprite_editor/lib/library/cubit/library_cubit.dart @@ -79,8 +79,9 @@ class LibraryCubit extends Cubit { emit( state.copyWith( sprites: newSprites, - selected: - state.selected == key ? state.sprites.keys.last : state.selected, + selected: state.selected == key + ? state.sprites.keys.last + : state.selected, ), ); } diff --git a/packages/mini_sprite_editor/lib/library/view/library_panel.dart b/packages/mini_sprite_editor/lib/library/view/library_panel.dart index 1f55bd7..9bad38b 100644 --- a/packages/mini_sprite_editor/lib/library/view/library_panel.dart +++ b/packages/mini_sprite_editor/lib/library/view/library_panel.dart @@ -204,10 +204,9 @@ class _LibraryEntryState extends State<_LibraryEntry> { border: Border( bottom: BorderSide( width: 2, - color: - widget.selected - ? Theme.of(context).buttonTheme.colorScheme!.primary - : Colors.transparent, + color: widget.selected + ? Theme.of(context).buttonTheme.colorScheme!.primary + : Colors.transparent, ), ), ), diff --git a/packages/mini_sprite_editor/lib/main.dart b/packages/mini_sprite_editor/lib/main.dart index e80a3fc..417f0a6 100644 --- a/packages/mini_sprite_editor/lib/main.dart +++ b/packages/mini_sprite_editor/lib/main.dart @@ -10,10 +10,9 @@ import 'package:path_provider/path_provider.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); HydratedBloc.storage = await HydratedStorage.build( - storageDirectory: - kIsWeb - ? HydratedStorage.webStorageDirectory - : await getApplicationDocumentsDirectory(), + storageDirectory: kIsWeb + ? HydratedStorage.webStorageDirectory + : await getApplicationDocumentsDirectory(), ); unawaited(bootstrap(() => const App())); diff --git a/packages/mini_sprite_editor/lib/map/cubit/map_cubit.dart b/packages/mini_sprite_editor/lib/map/cubit/map_cubit.dart index bc7e5df..0392bf8 100644 --- a/packages/mini_sprite_editor/lib/map/cubit/map_cubit.dart +++ b/packages/mini_sprite_editor/lib/map/cubit/map_cubit.dart @@ -19,12 +19,11 @@ class MapCubit extends Cubit { final Future Function(String) _getClipboardData; void copyToClipboard() { - final data = - MiniMap( - objects: state.objects, - width: state.mapSize.width.toInt(), - height: state.mapSize.height.toInt(), - ).toDataString(); + final data = MiniMap( + objects: state.objects, + width: state.mapSize.width.toInt(), + height: state.mapSize.height.toInt(), + ).toDataString(); unawaited(_setClipboardData(ClipboardData(text: data))); } diff --git a/packages/mini_sprite_editor/lib/map/cubit/map_tool_cubit.dart b/packages/mini_sprite_editor/lib/map/cubit/map_tool_cubit.dart index b6bcf6a..d107a85 100644 --- a/packages/mini_sprite_editor/lib/map/cubit/map_tool_cubit.dart +++ b/packages/mini_sprite_editor/lib/map/cubit/map_tool_cubit.dart @@ -6,7 +6,7 @@ part 'map_tool_state.dart'; class MapToolCubit extends Cubit { MapToolCubit() : super(const MapToolState.initial()); - void toogleGrid() { + void toggleGrid() { emit(state.copyWith(gridActive: !state.gridActive)); } diff --git a/packages/mini_sprite_editor/lib/map/map_board/map_board_game.dart b/packages/mini_sprite_editor/lib/map/map_board/map_board_game.dart index 5f3d062..5a7b227 100644 --- a/packages/mini_sprite_editor/lib/map/map_board/map_board_game.dart +++ b/packages/mini_sprite_editor/lib/map/map_board/map_board_game.dart @@ -61,8 +61,8 @@ class MapBoardGame extends FlameGame with PanDetector { }, ), FlameBlocListener( - listenWhen: - (previous, current) => previous.mapSize != current.mapSize, + listenWhen: (previous, current) => + previous.mapSize != current.mapSize, onNewState: (state) { descendants().whereType().forEach( (e) => e.removeFromParent(), diff --git a/packages/mini_sprite_editor/lib/map/map_board/tile_component.dart b/packages/mini_sprite_editor/lib/map/map_board/tile_component.dart index d088640..ba8b00f 100644 --- a/packages/mini_sprite_editor/lib/map/map_board/tile_component.dart +++ b/packages/mini_sprite_editor/lib/map/map_board/tile_component.dart @@ -25,11 +25,10 @@ class TileComponent extends PositionComponent @override Future onLoad() async { - paint = - Paint() - ..color = const Color(0xFFFFFFFF) - ..style = PaintingStyle.stroke - ..strokeWidth = 1; + paint = Paint() + ..color = const Color(0xFFFFFFFF) + ..style = PaintingStyle.stroke + ..strokeWidth = 1; _selectedPaint = Paint()..color = game.primaryColor.withValues(alpha: 0.4); diff --git a/packages/mini_sprite_editor/lib/map/view/map_page.dart b/packages/mini_sprite_editor/lib/map/view/map_page.dart index f0192c1..3e4a76c 100644 --- a/packages/mini_sprite_editor/lib/map/view/map_page.dart +++ b/packages/mini_sprite_editor/lib/map/view/map_page.dart @@ -66,11 +66,11 @@ class MapView extends StatelessWidget { icon: const Icon(Icons.delete), ), IconButton( - key: const Key('toogle_grid_key'), + key: const Key('toggle_grid_key'), onPressed: () async { - context.read().toogleGrid(); + context.read().toggleGrid(); }, - tooltip: l10n.toogleGrid, + tooltip: l10n.toggleGrid, icon: Icon(gridActive ? Icons.grid_on : Icons.grid_off), ), IconButton( @@ -141,40 +141,37 @@ class MapView extends StatelessWidget { children: [ IconButton( key: const Key('map_cursor_key'), - onPressed: - tool == MapTool.none - ? null - : () { - context - .read() - .selectTool(MapTool.none); - }, + onPressed: tool == MapTool.none + ? null + : () { + context + .read() + .selectTool(MapTool.none); + }, tooltip: l10n.cursor, icon: const Icon(Icons.mouse), ), IconButton( key: const Key('map_brush_key'), - onPressed: - tool == MapTool.brush - ? null - : () { - context - .read() - .selectTool(MapTool.brush); - }, + onPressed: tool == MapTool.brush + ? null + : () { + context + .read() + .selectTool(MapTool.brush); + }, tooltip: l10n.brush, icon: const Icon(Icons.brush), ), IconButton( key: const Key('map_eraser_key'), - onPressed: - tool == MapTool.eraser - ? null - : () { - context - .read() - .selectTool(MapTool.eraser); - }, + onPressed: tool == MapTool.eraser + ? null + : () { + context + .read() + .selectTool(MapTool.eraser); + }, tooltip: l10n.eraser, icon: const Icon(Icons.rectangle), ), diff --git a/packages/mini_sprite_editor/lib/map/view/map_size_dialog.dart b/packages/mini_sprite_editor/lib/map/view/map_size_dialog.dart index 357542d..533ee77 100644 --- a/packages/mini_sprite_editor/lib/map/view/map_size_dialog.dart +++ b/packages/mini_sprite_editor/lib/map/view/map_size_dialog.dart @@ -32,10 +32,10 @@ class _MapSizeDialogState extends State { super.initState(); final state = context.read().state; - _widthController = - TextEditingController()..text = state.mapSize.width.toInt().toString(); - _heightController = - TextEditingController()..text = state.mapSize.height.toInt().toString(); + _widthController = TextEditingController() + ..text = state.mapSize.width.toInt().toString(); + _heightController = TextEditingController() + ..text = state.mapSize.height.toInt().toString(); } @override diff --git a/packages/mini_sprite_editor/lib/map/view/new_property_dialog.dart b/packages/mini_sprite_editor/lib/map/view/new_property_dialog.dart index 3415509..a5f3bb4 100644 --- a/packages/mini_sprite_editor/lib/map/view/new_property_dialog.dart +++ b/packages/mini_sprite_editor/lib/map/view/new_property_dialog.dart @@ -48,7 +48,7 @@ class _NewPropertyDialogState extends State { mainAxisAlignment: MainAxisAlignment.center, children: [ Text( - l10n.newPropery, + l10n.newProperty, style: Theme.of(context).textTheme.headlineMedium, ), const SizedBox(width: 8), @@ -90,9 +90,9 @@ class _NewPropertyDialogState extends State { _valueController.text.isEmpty ? null : MapEntry( - _nameController.text, - _valueController.text, - ), + _nameController.text, + _valueController.text, + ), ); }, child: Text(l10n.confirm), diff --git a/packages/mini_sprite_editor/lib/map/view/object_panel.dart b/packages/mini_sprite_editor/lib/map/view/object_panel.dart index 006cf32..dccddc9 100644 --- a/packages/mini_sprite_editor/lib/map/view/object_panel.dart +++ b/packages/mini_sprite_editor/lib/map/view/object_panel.dart @@ -11,11 +11,10 @@ class ObjectPanel extends StatelessWidget { @override Widget build(BuildContext context) { return BlocBuilder( - buildWhen: - (previous, current) => - previous.selectedObject != current.selectedObject || - previous.objects[previous.selectedObject] != - current.objects[current.selectedObject], + buildWhen: (previous, current) => + previous.selectedObject != current.selectedObject || + previous.objects[previous.selectedObject] != + current.objects[current.selectedObject], builder: (context, state) { if (state.selectedObject == const MapPosition(-1, -1)) { return const SizedBox(); @@ -53,7 +52,7 @@ class ObjectPanel extends StatelessWidget { ); } }, - tooltip: l10n.newPropery, + tooltip: l10n.newProperty, icon: const Icon(Icons.add), ), ], diff --git a/packages/mini_sprite_editor/lib/sprite/cubit/tools_cubit.dart b/packages/mini_sprite_editor/lib/sprite/cubit/tools_cubit.dart index 25f8d8a..175f2f3 100644 --- a/packages/mini_sprite_editor/lib/sprite/cubit/tools_cubit.dart +++ b/packages/mini_sprite_editor/lib/sprite/cubit/tools_cubit.dart @@ -19,7 +19,7 @@ class ToolsCubit extends Cubit { emit(state.copyWith(tool: tool)); } - void toogleGrid() { + void toggleGrid() { emit(state.copyWith(gridActive: !state.gridActive)); } diff --git a/packages/mini_sprite_editor/lib/sprite/view/sprite_page.dart b/packages/mini_sprite_editor/lib/sprite/view/sprite_page.dart index 8c723d4..f584dbf 100644 --- a/packages/mini_sprite_editor/lib/sprite/view/sprite_page.dart +++ b/packages/mini_sprite_editor/lib/sprite/view/sprite_page.dart @@ -89,9 +89,8 @@ class SpriteView extends StatelessWidget { ); }, child: BlocListener( - listenWhen: - (previous, current) => - previous.selected != current.selected, + listenWhen: (previous, current) => + previous.selected != current.selected, listener: (context, state) { context.read().setSprite( state.sprites[state.selected]!.pixels, @@ -110,10 +109,9 @@ class SpriteView extends StatelessWidget { for (var x = 0; x < pixels[y].length; x++) PixelCell( pixelSize: pixelSize, - color: - pixels[y][x] >= 0 - ? palette[pixels[y][x]] - : configState.backgroundColor, + color: pixels[y][x] >= 0 + ? palette[pixels[y][x]] + : configState.backgroundColor, hasBorder: gridActive, hovered: cursorPosition == @@ -167,11 +165,11 @@ class SpriteView extends StatelessWidget { icon: const Icon(Icons.delete), ), IconButton( - key: const Key('toogle_grid_key'), + key: const Key('toggle_grid_key'), onPressed: () async { - context.read().toogleGrid(); + context.read().toggleGrid(); }, - tooltip: l10n.toogleGrid, + tooltip: l10n.toggleGrid, icon: Icon(gridActive ? Icons.grid_on : Icons.grid_off), ), IconButton( @@ -261,8 +259,8 @@ class SpriteView extends StatelessWidget { final scaffoldMessenger = ScaffoldMessenger.of(context); - final imageService = - context.read(); + final imageService = context + .read(); final result = await imageService.importImage(); if (result != null) { final (pixels, colors) = result; @@ -340,53 +338,49 @@ class SpriteView extends StatelessWidget { children: [ IconButton( key: const Key('brush_key'), - onPressed: - tool == SpriteTool.brush - ? null - : () { - context.read().selectTool( - SpriteTool.brush, - ); - }, + onPressed: tool == SpriteTool.brush + ? null + : () { + context.read().selectTool( + SpriteTool.brush, + ); + }, tooltip: l10n.brush, icon: const Icon(Icons.brush), ), IconButton( key: const Key('eraser_key'), - onPressed: - tool == SpriteTool.eraser - ? null - : () { - context.read().selectTool( - SpriteTool.eraser, - ); - }, + onPressed: tool == SpriteTool.eraser + ? null + : () { + context.read().selectTool( + SpriteTool.eraser, + ); + }, tooltip: l10n.eraser, icon: const Icon(Icons.rectangle), ), IconButton( key: const Key('bucket_key'), - onPressed: - tool == SpriteTool.bucket - ? null - : () { - context.read().selectTool( - SpriteTool.bucket, - ); - }, + onPressed: tool == SpriteTool.bucket + ? null + : () { + context.read().selectTool( + SpriteTool.bucket, + ); + }, tooltip: l10n.bucket, icon: const Icon(Icons.egg_sharp), ), IconButton( key: const Key('bucket_eraser_key'), - onPressed: - tool == SpriteTool.bucketEraser - ? null - : () { - context.read().selectTool( - SpriteTool.bucketEraser, - ); - }, + onPressed: tool == SpriteTool.bucketEraser + ? null + : () { + context.read().selectTool( + SpriteTool.bucketEraser, + ); + }, tooltip: l10n.bucketEraser, icon: const Icon(Icons.egg_outlined), ), diff --git a/packages/mini_sprite_editor/lib/sprite/view/sprite_size_dialog.dart b/packages/mini_sprite_editor/lib/sprite/view/sprite_size_dialog.dart index 0da250b..bbedf48 100644 --- a/packages/mini_sprite_editor/lib/sprite/view/sprite_size_dialog.dart +++ b/packages/mini_sprite_editor/lib/sprite/view/sprite_size_dialog.dart @@ -32,10 +32,10 @@ class _SpriteSizeDialogState extends State { super.initState(); final state = context.read().state; - _widthController = - TextEditingController()..text = state.pixels[0].length.toString(); - _heightController = - TextEditingController()..text = state.pixels.length.toString(); + _widthController = TextEditingController() + ..text = state.pixels[0].length.toString(); + _heightController = TextEditingController() + ..text = state.pixels.length.toString(); } @override diff --git a/packages/mini_sprite_editor/lib/workspace/view/tab_workspace.dart b/packages/mini_sprite_editor/lib/workspace/view/tab_workspace.dart index c9b1777..383cd76 100644 --- a/packages/mini_sprite_editor/lib/workspace/view/tab_workspace.dart +++ b/packages/mini_sprite_editor/lib/workspace/view/tab_workspace.dart @@ -65,10 +65,9 @@ class _Tab extends StatelessWidget { decoration: BoxDecoration( border: Border( bottom: BorderSide( - color: - selected - ? Theme.of(context).buttonTheme.colorScheme!.primary - : Colors.transparent, + color: selected + ? Theme.of(context).buttonTheme.colorScheme!.primary + : Colors.transparent, ), ), ), diff --git a/packages/mini_sprite_editor/pubspec.lock b/packages/mini_sprite_editor/pubspec.lock deleted file mode 100644 index 322881f..0000000 --- a/packages/mini_sprite_editor/pubspec.lock +++ /dev/null @@ -1,869 +0,0 @@ -# Generated by pub -# See https://dart.dev/tools/pub/glossary#lockfile -packages: - _fe_analyzer_shared: - dependency: transitive - description: - name: _fe_analyzer_shared - sha256: "1b0e6a07425a3e460666e88bf1c949ccc7bb0116ad562ce94a1eca60fe820725" - url: "https://pub.dev" - source: hosted - version: "103.0.0" - analyzer: - dependency: transitive - description: - name: analyzer - sha256: "61c04d0c1bfed555c681ea079519933f071a5a026578ff73c4ff0df2d3462e5e" - url: "https://pub.dev" - source: hosted - version: "13.3.0" - archive: - dependency: transitive - description: - name: archive - sha256: "6c5bcd986e06b94e3c40244af471750840a3d2341d1f9763a1100a14add517b4" - url: "https://pub.dev" - source: hosted - version: "4.3.0" - args: - dependency: transitive - description: - name: args - sha256: d0481093c50b1da8910eb0bb301626d4d8eb7284aa739614d2b394ee09e3ea04 - url: "https://pub.dev" - source: hosted - version: "2.7.0" - async: - dependency: transitive - description: - name: async - sha256: e2eb0491ba5ddb6177742d2da23904574082139b07c1e33b8503b9f46f3e1a37 - url: "https://pub.dev" - source: hosted - version: "2.13.1" - bloc: - dependency: "direct main" - description: - name: bloc - sha256: "106842ad6569f0b60297619e9e0b1885c2fb9bf84812935490e6c5275777804e" - url: "https://pub.dev" - source: hosted - version: "8.1.4" - bloc_test: - dependency: "direct dev" - description: - name: bloc_test - sha256: "165a6ec950d9252ebe36dc5335f2e6eb13055f33d56db0eeb7642768849b43d2" - url: "https://pub.dev" - source: hosted - version: "9.1.7" - boolean_selector: - dependency: transitive - description: - name: boolean_selector - sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea" - url: "https://pub.dev" - source: hosted - version: "2.1.2" - characters: - dependency: transitive - description: - name: characters - sha256: faf38497bda5ead2a8c7615f4f7939df04333478bf32e4173fcb06d428b5716b - url: "https://pub.dev" - source: hosted - version: "1.4.1" - cli_config: - dependency: transitive - description: - name: cli_config - sha256: ac20a183a07002b700f0c25e61b7ee46b23c309d76ab7b7640a028f18e4d99ec - url: "https://pub.dev" - source: hosted - version: "0.2.0" - clock: - dependency: transitive - description: - name: clock - sha256: e51d50bca3217c9a9fa2b41a30e4a38971133f5f9ec7a3d57bae095007f1d28e - url: "https://pub.dev" - source: hosted - version: "1.1.3" - code_assets: - dependency: transitive - description: - name: code_assets - sha256: "828110d598123b5ea96c00c9f3c72105bf79f8ee36c20a39b26209ade421ec57" - url: "https://pub.dev" - source: hosted - version: "2.1.0" - collection: - dependency: "direct main" - description: - name: collection - sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76" - url: "https://pub.dev" - source: hosted - version: "1.19.1" - convert: - dependency: transitive - description: - name: convert - sha256: b30acd5944035672bc15c6b7a8b47d773e41e2f17de064350988c5d02adb1c68 - url: "https://pub.dev" - source: hosted - version: "3.1.2" - coverage: - dependency: transitive - description: - name: coverage - sha256: "956a3de0725ca232ad353565a8290d3357592bf4250f6f298a185e2d949c5d3d" - url: "https://pub.dev" - source: hosted - version: "1.15.1" - cross_file: - dependency: transitive - description: - name: cross_file - sha256: f141ea4f277af142a0356955707f6556f37b03947d39d55585981a06ca437bd6 - url: "https://pub.dev" - source: hosted - version: "0.3.5+5" - crypto: - dependency: transitive - description: - name: crypto - sha256: c8ea0233063ba03258fbcf2ca4d6dadfefe14f02fab57702265467a19f27fadf - url: "https://pub.dev" - source: hosted - version: "3.0.7" - diff_match_patch: - dependency: transitive - description: - name: diff_match_patch - sha256: "2efc9e6e8f449d0abe15be240e2c2a3bcd977c8d126cfd70598aee60af35c0a4" - url: "https://pub.dev" - source: hosted - version: "0.4.1" - equatable: - dependency: "direct main" - description: - name: equatable - sha256: ea36e500cbf0ec18361deabca755434f73e42fe53c5130021c7e2d6b5ebe1702 - url: "https://pub.dev" - source: hosted - version: "3.0.0" - fake_async: - dependency: transitive - description: - name: fake_async - sha256: "5368f224a74523e8d2e7399ea1638b37aecfca824a3cc4dfdf77bf1fa905ac44" - url: "https://pub.dev" - source: hosted - version: "1.3.3" - ffi: - dependency: transitive - description: - name: ffi - sha256: "6d7fd89431262d8f3125e81b50d3847a091d846eafcd4fdb88dd06f36d705a45" - url: "https://pub.dev" - source: hosted - version: "2.2.0" - file: - dependency: transitive - description: - name: file - sha256: a3b4f84adafef897088c160faf7dfffb7696046cb13ae90b508c2cbc95d3b8d4 - url: "https://pub.dev" - source: hosted - version: "7.0.1" - file_selector: - dependency: "direct main" - description: - name: file_selector - sha256: bd15e43e9268db636b53eeaca9f56324d1622af30e5c34d6e267649758c84d9a - url: "https://pub.dev" - source: hosted - version: "1.1.0" - file_selector_android: - dependency: transitive - description: - name: file_selector_android - sha256: d670cd0ce77a2e785b18d8b4d0a8d6a222d6a813ec9b7ddf2790a1b4fb6fa92c - url: "https://pub.dev" - source: hosted - version: "0.5.2+11" - file_selector_ios: - dependency: transitive - description: - name: file_selector_ios - sha256: "97269e5307a0ab813b1fa2430bada0a96e0afb74848417f8676f64ba5de0051c" - url: "https://pub.dev" - source: hosted - version: "0.5.3+6" - file_selector_linux: - dependency: transitive - description: - name: file_selector_linux - sha256: da76400e7872ce7637ffdce12749ec24169c25f6195c28372208e65a24bcd2ab - url: "https://pub.dev" - source: hosted - version: "0.9.4+1" - file_selector_macos: - dependency: transitive - description: - name: file_selector_macos - sha256: d57c62362766b5e7ae739448650b66c6aab7a68ba7ecc65e04018652645ae0f4 - url: "https://pub.dev" - source: hosted - version: "0.9.5+1" - file_selector_platform_interface: - dependency: transitive - description: - name: file_selector_platform_interface - sha256: "35e0bd61ebcdb91a3505813b055b09b79dfdc7d0aee9c09a7ba59ae4bb13dc85" - url: "https://pub.dev" - source: hosted - version: "2.7.0" - file_selector_web: - dependency: transitive - description: - name: file_selector_web - sha256: "73181fbc5257776d8ecaa6a94ab3c8e920ad143b9132a6d984a9271dfc6928d3" - url: "https://pub.dev" - source: hosted - version: "0.9.5" - file_selector_windows: - dependency: transitive - description: - name: file_selector_windows - sha256: fbefc5fb92c6d3cbe8d284a2cd971b593bb07d2cd6da8557b81a862250b4acec - url: "https://pub.dev" - source: hosted - version: "0.9.3+6" - flame: - dependency: "direct main" - description: - name: flame - sha256: b9e65f6d7d06a301d6ea3cde03731cad3cdc255d56e0fb53c56c1e7806aaaf6a - url: "https://pub.dev" - source: hosted - version: "1.37.0" - flame_bloc: - dependency: "direct main" - description: - name: flame_bloc - sha256: b4bde6e3e4aa7aa4944e41515149a29dd371729c4a074d3b2241290425ec3f04 - url: "https://pub.dev" - source: hosted - version: "1.12.23" - flame_mini_sprite: - dependency: "direct main" - description: - path: "../flame_mini_sprite" - relative: true - source: path - version: "0.0.2" - flutter: - dependency: "direct main" - description: flutter - source: sdk - version: "0.0.0" - flutter_bloc: - dependency: "direct main" - description: - name: flutter_bloc - sha256: b594505eac31a0518bdcb4b5b79573b8d9117b193cc80cc12e17d639b10aa27a - url: "https://pub.dev" - source: hosted - version: "8.1.6" - flutter_colorpicker: - dependency: "direct main" - description: - name: flutter_colorpicker - sha256: "969de5f6f9e2a570ac660fb7b501551451ea2a1ab9e2097e89475f60e07816ea" - url: "https://pub.dev" - source: hosted - version: "1.1.0" - flutter_localizations: - dependency: "direct main" - description: flutter - source: sdk - version: "0.0.0" - flutter_test: - dependency: "direct dev" - description: flutter - source: sdk - version: "0.0.0" - flutter_web_plugins: - dependency: transitive - description: flutter - source: sdk - version: "0.0.0" - frontend_server_client: - dependency: transitive - description: - name: frontend_server_client - sha256: f64a0333a82f30b0cca061bc3d143813a486dc086b574bfb233b7c1372427694 - url: "https://pub.dev" - source: hosted - version: "4.0.0" - glob: - dependency: transitive - description: - name: glob - sha256: "218aeb56050c714f62a3182775320dfa04602b55074873e24e31bbd39bda96fb" - url: "https://pub.dev" - source: hosted - version: "2.2.0" - hive: - dependency: transitive - description: - name: hive - sha256: "8dcf6db979d7933da8217edcec84e9df1bdb4e4edc7fc77dbd5aa74356d6d941" - url: "https://pub.dev" - source: hosted - version: "2.2.3" - hooks: - dependency: transitive - description: - name: hooks - sha256: eaac480a35ec0814146c2c48d96aaa829e0e44a7662c88ae84c9edf4bc35651f - url: "https://pub.dev" - source: hosted - version: "2.2.0" - http: - dependency: transitive - description: - name: http - sha256: "87721a4a50b19c7f1d49001e51409bddc46303966ce89a65af4f4e6004896412" - url: "https://pub.dev" - source: hosted - version: "1.6.0" - http_multi_server: - dependency: transitive - description: - name: http_multi_server - sha256: aa6199f908078bb1c5efb8d8638d4ae191aac11b311132c3ef48ce352fb52ef8 - url: "https://pub.dev" - source: hosted - version: "3.2.2" - http_parser: - dependency: transitive - description: - name: http_parser - sha256: "178d74305e7866013777bab2c3d8726205dc5a4dd935297175b19a23a2e66571" - url: "https://pub.dev" - source: hosted - version: "4.1.2" - hydrated_bloc: - dependency: "direct main" - description: - name: hydrated_bloc - sha256: af35b357739fe41728df10bec03aad422cdc725a1e702e03af9d2a41ea05160c - url: "https://pub.dev" - source: hosted - version: "9.1.5" - image: - dependency: "direct main" - description: - name: image - sha256: a1e7f4951e538a568e14b856702afc9ae1d2f4b202daced8d22c1b9cd211ce89 - url: "https://pub.dev" - source: hosted - version: "4.10.1" - intl: - dependency: "direct main" - description: - name: intl - sha256: "1ca20c894b1717686a2319b8548763d812bc0aabdac580420a44c5178c57a867" - url: "https://pub.dev" - source: hosted - version: "0.20.3" - io: - dependency: transitive - description: - name: io - sha256: "2635216ca6a737e60de577ffa1a48a0bec76ca8a62917cfc1bb88c14c570646f" - url: "https://pub.dev" - source: hosted - version: "1.1.0" - jni: - dependency: transitive - description: - name: jni - sha256: f038e58b4dc2c9037f50e233175086337e0b305e356d28211bf55f21c504cbd3 - url: "https://pub.dev" - source: hosted - version: "1.0.3" - jni_flutter: - dependency: transitive - description: - name: jni_flutter - sha256: b2310cdd4c18c65c081ab141a41efa94aa26c65431803703ece51996f174f351 - url: "https://pub.dev" - source: hosted - version: "1.0.3" - jni_util: - dependency: transitive - description: - name: jni_util - sha256: "1ba86da04a5f2bf18fde2edb235587e70c5b0fc5bd4ba955f46b00942c3fc35f" - url: "https://pub.dev" - source: hosted - version: "1.0.0" - leak_tracker: - dependency: transitive - description: - name: leak_tracker - sha256: "33e2e26bdd85a0112ec15400c8cbffea70d0f9c3407491f672a2fad47915e2de" - url: "https://pub.dev" - source: hosted - version: "11.0.2" - leak_tracker_flutter_testing: - dependency: transitive - description: - name: leak_tracker_flutter_testing - sha256: "1dbc140bb5a23c75ea9c4811222756104fbcd1a27173f0c34ca01e16bea473c1" - url: "https://pub.dev" - source: hosted - version: "3.0.10" - leak_tracker_testing: - dependency: transitive - description: - name: leak_tracker_testing - sha256: "8d5a2d49f4a66b49744b23b018848400d23e54caf9463f4eb20df3eb8acb2eb1" - url: "https://pub.dev" - source: hosted - version: "3.0.2" - logging: - dependency: transitive - description: - name: logging - sha256: c8245ada5f1717ed44271ed1c26b8ce85ca3228fd2ffdb75468ab01979309d61 - url: "https://pub.dev" - source: hosted - version: "1.3.0" - matcher: - dependency: transitive - description: - name: matcher - sha256: "31bd099b47c10cd1aeb55146a2d46ce0277630ecef3f7dae54ad7873f36696cd" - url: "https://pub.dev" - source: hosted - version: "0.12.20" - material_color_utilities: - dependency: transitive - description: - name: material_color_utilities - sha256: "9c337007e82b1889149c82ed242ed1cb24a66044e30979c44912381e9be4c48b" - url: "https://pub.dev" - source: hosted - version: "0.13.0" - meta: - dependency: transitive - description: - name: meta - sha256: "307249ce4ff29d58a18e97f6345f539382eb9c9c29ecda628900f31de0443dd9" - url: "https://pub.dev" - source: hosted - version: "1.19.0" - mime: - dependency: transitive - description: - name: mime - sha256: bd47de35f07e27267e69c8c8b22edf9473bfee170a60d60fcc93730c5144b7f6 - url: "https://pub.dev" - source: hosted - version: "2.1.0" - mini_sprite: - dependency: "direct main" - description: - path: "../mini_sprite" - relative: true - source: path - version: "0.1.0" - mocktail: - dependency: "direct dev" - description: - name: mocktail - sha256: "5e1bf53cc7baa8062a33b84424deb61513858ea05c601b8509e683815b5914aa" - url: "https://pub.dev" - source: hosted - version: "1.0.5" - nested: - dependency: transitive - description: - name: nested - sha256: "03bac4c528c64c95c722ec99280375a6f2fc708eec17c7b3f07253b626cd2a20" - url: "https://pub.dev" - source: hosted - version: "1.0.0" - node_preamble: - dependency: transitive - description: - name: node_preamble - sha256: "6e7eac89047ab8a8d26cf16127b5ed26de65209847630400f9aefd7cd5c730db" - url: "https://pub.dev" - source: hosted - version: "2.0.2" - objective_c: - dependency: transitive - description: - name: objective_c - sha256: ad56fd53a78ff6b1472fa59ff2a4e8b8ccabafc586fc263a1dfad0b99b5553e3 - url: "https://pub.dev" - source: hosted - version: "9.6.0" - ordered_set: - dependency: transitive - description: - name: ordered_set - sha256: ca415a0e28b8e8f5e284af4b7d1b189d2d09af6d2082532ddaec54473f67d226 - url: "https://pub.dev" - source: hosted - version: "8.0.1" - package_config: - dependency: transitive - description: - name: package_config - sha256: f096c55ebb7deb7e384101542bfba8c52696c1b56fca2eb62827989ef2353bbc - url: "https://pub.dev" - source: hosted - version: "2.2.0" - path: - dependency: transitive - description: - name: path - sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5" - url: "https://pub.dev" - source: hosted - version: "1.9.1" - path_provider: - dependency: "direct main" - description: - name: path_provider - sha256: a7f4874f987173da295a61c181b8ee71dab59b332a486b391babf26a1b884825 - url: "https://pub.dev" - source: hosted - version: "2.1.6" - path_provider_android: - dependency: transitive - description: - name: path_provider_android - sha256: "69cbd515a62b94d32a7944f086b2f82b4ac40a1d45bebfc00813a430ab2dabcd" - url: "https://pub.dev" - source: hosted - version: "2.3.1" - path_provider_foundation: - dependency: transitive - description: - name: path_provider_foundation - sha256: "2a376b7d6392d80cd3705782d2caa734ca4727776db0b6ec36ef3f1855197699" - url: "https://pub.dev" - source: hosted - version: "2.6.0" - path_provider_linux: - dependency: transitive - description: - name: path_provider_linux - sha256: "58c2005f147315b11e9b4a7bc889cd5203e250cba8e3f012dae259b4972b5c16" - url: "https://pub.dev" - source: hosted - version: "2.2.2" - path_provider_platform_interface: - dependency: transitive - description: - name: path_provider_platform_interface - sha256: "484838772624c3a4b94f1e44a3e19897fee738f2d5c4ce448443b0417f7c9dda" - url: "https://pub.dev" - source: hosted - version: "2.1.3" - path_provider_windows: - dependency: transitive - description: - name: path_provider_windows - sha256: bd6f00dbd873bfb70d0761682da2b3a2c2fccc2b9e84c495821639601d81afe7 - url: "https://pub.dev" - source: hosted - version: "2.3.0" - platform: - dependency: transitive - description: - name: platform - sha256: a36d119c13416516a7b5913fbe8af8531e11633d784c550b2125f76c758524ec - url: "https://pub.dev" - source: hosted - version: "3.2.0" - plugin_platform_interface: - dependency: transitive - description: - name: plugin_platform_interface - sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02" - url: "https://pub.dev" - source: hosted - version: "2.1.8" - pool: - dependency: transitive - description: - name: pool - sha256: "4177f68c237ea2128d1bee66ac17b2ce05ba3dbaafcbdd54c5d40a39d0b6b11c" - url: "https://pub.dev" - source: hosted - version: "1.5.3" - posix: - dependency: transitive - description: - name: posix - sha256: bc1bad54ad2b735816e31f8d4600cfde6c7839975085ddfbca48b6c9f7c4044e - url: "https://pub.dev" - source: hosted - version: "6.5.2" - provider: - dependency: transitive - description: - name: provider - sha256: "4e82183fa20e5ca25703ead7e05de9e4cceed1fbd1eadc1ac3cb6f565a09f272" - url: "https://pub.dev" - source: hosted - version: "6.1.5+1" - pub_semver: - dependency: transitive - description: - name: pub_semver - sha256: "261236774e8b1d69cfc6b9eabbc96c40f25e7a2d6b171f3385d4f65d5734fb24" - url: "https://pub.dev" - source: hosted - version: "2.2.1" - record_use: - dependency: transitive - description: - name: record_use - sha256: "1cb8564af8d43b464294411db9217f5ec04891c6f22ee2c32d73ae05e88a6bd2" - url: "https://pub.dev" - source: hosted - version: "1.1.1" - replay_bloc: - dependency: "direct main" - description: - name: replay_bloc - sha256: "36d0fb566e47aa0f1f96d567e93b442c3fa5c957777ef52a5f60d2f9e9d8e766" - url: "https://pub.dev" - source: hosted - version: "0.2.7" - shelf: - dependency: transitive - description: - name: shelf - sha256: e7dd780a7ffb623c57850b33f43309312fc863fb6aa3d276a754bb299839ef12 - url: "https://pub.dev" - source: hosted - version: "1.4.2" - shelf_packages_handler: - dependency: transitive - description: - name: shelf_packages_handler - sha256: "89f967eca29607c933ba9571d838be31d67f53f6e4ee15147d5dc2934fee1b1e" - url: "https://pub.dev" - source: hosted - version: "3.0.2" - shelf_static: - dependency: transitive - description: - name: shelf_static - sha256: c87c3875f91262785dade62d135760c2c69cb217ac759485334c5857ad89f6e3 - url: "https://pub.dev" - source: hosted - version: "1.1.3" - shelf_web_socket: - dependency: transitive - description: - name: shelf_web_socket - sha256: "3632775c8e90d6c9712f883e633716432a27758216dfb61bd86a8321c0580925" - url: "https://pub.dev" - source: hosted - version: "3.0.0" - sky_engine: - dependency: transitive - description: flutter - source: sdk - version: "0.0.0" - source_map_stack_trace: - dependency: transitive - description: - name: source_map_stack_trace - sha256: c0713a43e323c3302c2abe2a1cc89aa057a387101ebd280371d6a6c9fa68516b - url: "https://pub.dev" - source: hosted - version: "2.1.2" - source_maps: - dependency: transitive - description: - name: source_maps - sha256: "14c2945847669b44089bb1222f66873d7ff7103c58911917f2a63c5a62327898" - url: "https://pub.dev" - source: hosted - version: "0.10.14" - source_span: - dependency: transitive - description: - name: source_span - sha256: "56a02f1f4cd1a2d96303c0144c93bd6d909eea6bee6bf5a0e0b685edbd4c47ab" - url: "https://pub.dev" - source: hosted - version: "1.10.2" - stack_trace: - dependency: transitive - description: - name: stack_trace - sha256: "277654b3034d17ac6f9f1cb5595db011b1d5d41e8806866db28e0abaa101c490" - url: "https://pub.dev" - source: hosted - version: "1.12.2" - stream_channel: - dependency: transitive - description: - name: stream_channel - sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d" - url: "https://pub.dev" - source: hosted - version: "2.1.4" - string_scanner: - dependency: transitive - description: - name: string_scanner - sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43" - url: "https://pub.dev" - source: hosted - version: "1.4.1" - synchronized: - dependency: transitive - description: - name: synchronized - sha256: "397b146f97613b83d84bdccb439bc8d0f3aebb6c1d14a9641e6f24201c490b2d" - url: "https://pub.dev" - source: hosted - version: "3.4.2" - term_glyph: - dependency: transitive - description: - name: term_glyph - sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e" - url: "https://pub.dev" - source: hosted - version: "1.2.2" - test: - dependency: transitive - description: - name: test - sha256: ca578dc12bb8b2f40b67b7d3bd2fac4f31c01a6ff7130a14e2597b919934507f - url: "https://pub.dev" - source: hosted - version: "1.31.1" - test_api: - dependency: transitive - description: - name: test_api - sha256: "2a122cbe059f8b610d3a5415f42e255b6c17b1f21eee1d960f31080237fb4f11" - url: "https://pub.dev" - source: hosted - version: "0.7.12" - test_core: - dependency: transitive - description: - name: test_core - sha256: d2e98ec12998368dc59ddd47ab709f2cd55acd6b66dc7db764455a44082f4bc5 - url: "https://pub.dev" - source: hosted - version: "0.6.18" - typed_data: - dependency: transitive - description: - name: typed_data - sha256: f9049c039ebfeb4cf7a7104a675823cd72dba8297f264b6637062516699fa006 - url: "https://pub.dev" - source: hosted - version: "1.4.0" - vector_math: - dependency: transitive - description: - name: vector_math - sha256: "92b9910f66ed1057fd4da7b040ae7c74cafacf885bdc81be496928d5049b032d" - url: "https://pub.dev" - source: hosted - version: "2.4.3" - very_good_analysis: - dependency: "direct dev" - description: - name: very_good_analysis - sha256: "0bd5eb8d6be76aa0d71e70cbdae6cac8f784f761170568e3c2214a6948c7f6d3" - url: "https://pub.dev" - source: hosted - version: "11.0.0" - vm_service: - dependency: transitive - description: - name: vm_service - sha256: "5f37239c4851efcef929cea7824e76df7f2f0970aef85d66bbc430afa40e72f0" - url: "https://pub.dev" - source: hosted - version: "15.3.0" - watcher: - dependency: transitive - description: - name: watcher - sha256: "1398c9f081a753f9226febe8900fce8f7d0a67163334e1c94a2438339d79d635" - url: "https://pub.dev" - source: hosted - version: "1.2.1" - web: - dependency: transitive - description: - name: web - sha256: "868d88a33d8a87b18ffc05f9f030ba328ffefba92d6c127917a2ba740f9cfe4a" - url: "https://pub.dev" - source: hosted - version: "1.1.1" - web_socket: - dependency: transitive - description: - name: web_socket - sha256: "34d64019aa8e36bf9842ac014bb5d2f5586ca73df5e4d9bf5c936975cae6982c" - url: "https://pub.dev" - source: hosted - version: "1.0.1" - web_socket_channel: - dependency: transitive - description: - name: web_socket_channel - sha256: d645757fb0f4773d602444000a8131ff5d48c9e47adfe9772652dd1a4f2d45c8 - url: "https://pub.dev" - source: hosted - version: "3.0.3" - webkit_inspection_protocol: - dependency: transitive - description: - name: webkit_inspection_protocol - sha256: "87d3f2333bb240704cd3f1c6b5b7acd8a10e7f0bc28c28dcf14e782014f4a572" - url: "https://pub.dev" - source: hosted - version: "1.2.1" - xdg_directories: - dependency: transitive - description: - name: xdg_directories - sha256: "7a3f37b05d989967cdddcbb571f1ea834867ae2faa29725fd085180e0883aa15" - url: "https://pub.dev" - source: hosted - version: "1.1.0" - yaml: - dependency: transitive - description: - name: yaml - sha256: f67cdd8e07d3c6329146aaef1ba043542b3134c12489f553ca9a7435d1068aea - url: "https://pub.dev" - source: hosted - version: "3.1.4" -sdks: - dart: ">=3.13.0 <4.0.0" - flutter: ">=3.44.0" diff --git a/packages/mini_sprite_editor/pubspec.yaml b/packages/mini_sprite_editor/pubspec.yaml index 6a7d8bf..077b3db 100644 --- a/packages/mini_sprite_editor/pubspec.yaml +++ b/packages/mini_sprite_editor/pubspec.yaml @@ -1,10 +1,11 @@ name: mini_sprite_editor +resolution: workspace description: Small, standalone application that can read and write mini sprites version: 0.0.1+1 publish_to: none environment: - sdk: ">=3.7.0 <4.0.0" + sdk: ">=3.9.0 <4.0.0" dependencies: bloc: ^8.1.4 diff --git a/packages/mini_sprite_editor/test/config/cubit/config_cubit_test.dart b/packages/mini_sprite_editor/test/config/cubit/config_cubit_test.dart index 3f488d1..77491a4 100644 --- a/packages/mini_sprite_editor/test/config/cubit/config_cubit_test.dart +++ b/packages/mini_sprite_editor/test/config/cubit/config_cubit_test.dart @@ -24,44 +24,39 @@ void main() async { act: (cubit) { cubit.setThemeMode(ThemeMode.light); }, - expect: - () => [ - const ConfigState.initial().copyWith(themeMode: ThemeMode.light), - ], + expect: () => [ + const ConfigState.initial().copyWith(themeMode: ThemeMode.light), + ], ); blocTest( 'setColor', build: ConfigCubit.new, - seed: - () => const ConfigState.initial().copyWith( - colors: [Colors.white, Colors.transparent], - ), + seed: () => const ConfigState.initial().copyWith( + colors: [Colors.white, Colors.transparent], + ), act: (cubit) { cubit.setColor(1, Colors.red); }, - expect: - () => [ - const ConfigState.initial().copyWith( - colors: [Colors.white, Colors.red], - ), - ], + expect: () => [ + const ConfigState.initial().copyWith( + colors: [Colors.white, Colors.red], + ), + ], ); blocTest( 'removeColor', build: ConfigCubit.new, - seed: - () => const ConfigState.initial().copyWith( - colors: [Colors.white, Colors.transparent], - ), + seed: () => const ConfigState.initial().copyWith( + colors: [Colors.white, Colors.transparent], + ), act: (cubit) { cubit.removeColor(1); }, - expect: - () => [ - const ConfigState.initial().copyWith(colors: [Colors.white]), - ], + expect: () => [ + const ConfigState.initial().copyWith(colors: [Colors.white]), + ], ); blocTest( @@ -70,10 +65,9 @@ void main() async { act: (cubit) { cubit.setBackgroundColor(Colors.red); }, - expect: - () => [ - const ConfigState.initial().copyWith(backgroundColor: Colors.red), - ], + expect: () => [ + const ConfigState.initial().copyWith(backgroundColor: Colors.red), + ], ); blocTest( diff --git a/packages/mini_sprite_editor/test/library/cubit/library_cubit_test.dart b/packages/mini_sprite_editor/test/library/cubit/library_cubit_test.dart index e266c51..1f2a1e5 100644 --- a/packages/mini_sprite_editor/test/library/cubit/library_cubit_test.dart +++ b/packages/mini_sprite_editor/test/library/cubit/library_cubit_test.dart @@ -29,197 +29,184 @@ void main() { blocTest( 'startCollection initializes the state', build: LibraryCubit.new, - act: - (cubit) => cubit.startCollection([ - [1], - ]), - expect: - () => [ - LibraryState( - sprites: const { - 'sprite_1': MiniSprite([ - [1], - ]), - }, - selected: 'sprite_1', - ), - ], + act: (cubit) => cubit.startCollection([ + [1], + ]), + expect: () => [ + LibraryState( + sprites: const { + 'sprite_1': MiniSprite([ + [1], + ]), + }, + selected: 'sprite_1', + ), + ], ); blocTest( 'updates the selected sprite', - seed: - () => LibraryState( - sprites: const { - 'player': MiniSprite([ - [1, 1], - [1, 1], - ]), - 'tile': MiniSprite([ - [0, 1], - [1, 0], - ]), - }, - selected: 'player', - ), - build: LibraryCubit.new, - act: - (cubit) => cubit.updateSelected([ - [1, 0], + seed: () => LibraryState( + sprites: const { + 'player': MiniSprite([ + [1, 1], + [1, 1], + ]), + 'tile': MiniSprite([ [0, 1], + [1, 0], ]), - expect: - () => [ - LibraryState( - sprites: const { - 'player': MiniSprite([ - [1, 0], - [0, 1], - ]), - 'tile': MiniSprite([ - [0, 1], - [1, 0], - ]), - }, - selected: 'player', - ), - ], + }, + selected: 'player', + ), + build: LibraryCubit.new, + act: (cubit) => cubit.updateSelected([ + [1, 0], + [0, 1], + ]), + expect: () => [ + LibraryState( + sprites: const { + 'player': MiniSprite([ + [1, 0], + [0, 1], + ]), + 'tile': MiniSprite([ + [0, 1], + [1, 0], + ]), + }, + selected: 'player', + ), + ], ); blocTest( 'renames a sprite', - seed: - () => LibraryState( - sprites: const { - 'player': MiniSprite([ - [1, 1], - [1, 1], - ]), - 'tile': MiniSprite([ - [0, 1], - [1, 0], - ]), - }, - selected: 'player', - ), + seed: () => LibraryState( + sprites: const { + 'player': MiniSprite([ + [1, 1], + [1, 1], + ]), + 'tile': MiniSprite([ + [0, 1], + [1, 0], + ]), + }, + selected: 'player', + ), build: LibraryCubit.new, act: (cubit) => cubit.rename('player', 'char'), - expect: - () => [ - LibraryState( - sprites: const { - 'char': MiniSprite([ - [1, 1], - [1, 1], - ]), - 'tile': MiniSprite([ - [0, 1], - [1, 0], - ]), - }, - selected: 'char', - ), - ], + expect: () => [ + LibraryState( + sprites: const { + 'char': MiniSprite([ + [1, 1], + [1, 1], + ]), + 'tile': MiniSprite([ + [0, 1], + [1, 0], + ]), + }, + selected: 'char', + ), + ], ); blocTest( 'renames a sprite that is not selected', - seed: - () => LibraryState( - sprites: const { - 'player': MiniSprite([ - [1, 1], - [1, 1], - ]), - 'tile': MiniSprite([ - [0, 1], - [1, 0], - ]), - }, - selected: 'tile', - ), + seed: () => LibraryState( + sprites: const { + 'player': MiniSprite([ + [1, 1], + [1, 1], + ]), + 'tile': MiniSprite([ + [0, 1], + [1, 0], + ]), + }, + selected: 'tile', + ), build: LibraryCubit.new, act: (cubit) => cubit.rename('player', 'char'), - expect: - () => [ - LibraryState( - sprites: const { - 'char': MiniSprite([ - [1, 1], - [1, 1], - ]), - 'tile': MiniSprite([ - [0, 1], - [1, 0], - ]), - }, - selected: 'tile', - ), - ], + expect: () => [ + LibraryState( + sprites: const { + 'char': MiniSprite([ + [1, 1], + [1, 1], + ]), + 'tile': MiniSprite([ + [0, 1], + [1, 0], + ]), + }, + selected: 'tile', + ), + ], ); blocTest( 'removes a sprite', - seed: - () => LibraryState( - sprites: const { - 'player': MiniSprite([ - [1, 1], - [1, 1], - ]), - 'tile': MiniSprite([ - [0, 1], - [1, 0], - ]), - }, - selected: 'tile', - ), + seed: () => LibraryState( + sprites: const { + 'player': MiniSprite([ + [1, 1], + [1, 1], + ]), + 'tile': MiniSprite([ + [0, 1], + [1, 0], + ]), + }, + selected: 'tile', + ), build: LibraryCubit.new, act: (cubit) => cubit.removeSprite('player'), - expect: - () => [ - LibraryState( - sprites: const { - 'tile': MiniSprite([ - [0, 1], - [1, 0], - ]), - }, - selected: 'tile', - ), - ], + expect: () => [ + LibraryState( + sprites: const { + 'tile': MiniSprite([ + [0, 1], + [1, 0], + ]), + }, + selected: 'tile', + ), + ], ); blocTest( 'removes a sprite that is selected', - seed: - () => LibraryState( - sprites: const { - 'player': MiniSprite([ - [1, 1], - [1, 1], - ]), - 'tile': MiniSprite([ - [0, 1], - [1, 0], - ]), - }, - selected: 'player', - ), + seed: () => LibraryState( + sprites: const { + 'player': MiniSprite([ + [1, 1], + [1, 1], + ]), + 'tile': MiniSprite([ + [0, 1], + [1, 0], + ]), + }, + selected: 'player', + ), build: LibraryCubit.new, act: (cubit) => cubit.removeSprite('player'), - expect: - () => [ - LibraryState( - sprites: const { - 'tile': MiniSprite([ - [0, 1], - [1, 0], - ]), - }, - selected: 'tile', - ), - ], + expect: () => [ + LibraryState( + sprites: const { + 'tile': MiniSprite([ + [0, 1], + [1, 0], + ]), + }, + selected: 'tile', + ), + ], ); blocTest( @@ -227,68 +214,63 @@ void main() { seed: () => const LibraryState(sprites: {}, selected: ''), build: LibraryCubit.new, act: (cubit) => cubit.addSprite(2, 2), - expect: - () => [ - LibraryState( - sprites: const { - 'sprite_1': MiniSprite([ - [-1, -1], - [-1, -1], - ]), - }, - selected: '', - ), - ], + expect: () => [ + LibraryState( + sprites: const { + 'sprite_1': MiniSprite([ + [-1, -1], + [-1, -1], + ]), + }, + selected: '', + ), + ], ); blocTest( 'can handle name conflict on addSprite', - seed: - () => const LibraryState( - sprites: { - 'sprite_2': MiniSprite([ - [0, 0], - [0, 0], - ]), - }, - selected: '', - ), + seed: () => const LibraryState( + sprites: { + 'sprite_2': MiniSprite([ + [0, 0], + [0, 0], + ]), + }, + selected: '', + ), build: LibraryCubit.new, act: (cubit) => cubit.addSprite(2, 2), - expect: - () => [ - LibraryState( - sprites: const { - 'sprite_2': MiniSprite([ - [0, 0], - [0, 0], - ]), - 'sprite_3': MiniSprite([ - [-1, -1], - [-1, -1], - ]), - }, - selected: '', - ), - ], + expect: () => [ + LibraryState( + sprites: const { + 'sprite_2': MiniSprite([ + [0, 0], + [0, 0], + ]), + 'sprite_3': MiniSprite([ + [-1, -1], + [-1, -1], + ]), + }, + selected: '', + ), + ], ); blocTest( 'selects a sprite', - seed: - () => LibraryState( - sprites: {'player': MiniSprite.empty(1, 1)}, - selected: '', - ), + seed: () => LibraryState( + sprites: {'player': MiniSprite.empty(1, 1)}, + selected: '', + ), build: LibraryCubit.new, act: (cubit) => cubit.select('player'), - expect: - () => [ - LibraryState( - sprites: {'player': MiniSprite.empty(1, 1)}, - selected: 'player', - ), - ], + expect: () => [ + LibraryState( + sprites: {'player': MiniSprite.empty(1, 1)}, + selected: 'player', + ), + ], ); }); @@ -313,10 +295,9 @@ void main() { ).thenAnswer((_) async => ClipboardData(text: library.toDataString())); }, act: (cubit) => cubit.importFromClipboard(), - expect: - () => [ - LibraryState(sprites: {'player': sprite}, selected: 'player'), - ], + expect: () => [ + LibraryState(sprites: {'player': sprite}, selected: 'player'), + ], ); }); diff --git a/packages/mini_sprite_editor/test/sprite/cubit/sprite_cubit_test.dart b/packages/mini_sprite_editor/test/sprite/cubit/sprite_cubit_test.dart index 4eaf772..46ed1de 100644 --- a/packages/mini_sprite_editor/test/sprite/cubit/sprite_cubit_test.dart +++ b/packages/mini_sprite_editor/test/sprite/cubit/sprite_cubit_test.dart @@ -164,12 +164,11 @@ void main() { build: SpriteCubit.new, seed: () => SpriteState.initial().copyWith(cursorPosition: Offset.zero), act: (cubit) => cubit.cursorLeft(), - expect: - () => [ - SpriteState.initial().copyWith( - cursorPosition: const Offset(-1, -1), - ), - ], + expect: () => [ + SpriteState.initial().copyWith( + cursorPosition: const Offset(-1, -1), + ), + ], ); group('cursorHover', () { @@ -184,13 +183,12 @@ void main() { 'change cursor position on cursorHover', build: SpriteCubit.new, seed: () => state, - act: - (cubit) => cubit.cursorHover( - const Offset(30, 30), - 25, - SpriteTool.brush, - 1, - ), + act: (cubit) => cubit.cursorHover( + const Offset(30, 30), + 25, + SpriteTool.brush, + 1, + ), expect: () => [state.copyWith(cursorPosition: const Offset(1, 1))], ); @@ -198,13 +196,12 @@ void main() { "doesn't change the position when the position is the same", build: SpriteCubit.new, seed: () => state.copyWith(cursorPosition: const Offset(1, 1)), - act: - (cubit) => cubit.cursorHover( - const Offset(30, 30), - 25, - SpriteTool.brush, - 1, - ), + act: (cubit) => cubit.cursorHover( + const Offset(30, 30), + 25, + SpriteTool.brush, + 1, + ), expect: () => [], ); }); @@ -221,16 +218,15 @@ void main() { 'change cursor position on cursorDown and active the tool', build: SpriteCubit.new, seed: () => state, - act: - (cubit) => - cubit.cursorDown(const Offset(30, 30), 25, SpriteTool.brush, 1), + act: (cubit) => + cubit.cursorDown(const Offset(30, 30), 25, SpriteTool.brush, 1), expect: () => [state.copyWith(cursorPosition: const Offset(1, 1))], ); }); group('cursorUp', () { blocTest( - 'change cursor position on cursorUp and deactive the tool', + 'change cursor position on cursorUp and deactivate the tool', build: SpriteCubit.new, act: (cubit) { cubit @@ -264,57 +260,54 @@ void main() { 'paints the board', build: SpriteCubit.new, seed: () => emptyState, - act: - (cubit) => - cubit - ..cursorDown(Offset.zero, 25, SpriteTool.brush, 1) - ..cursorHover(const Offset(30, 0), 25, SpriteTool.brush, 1) - ..cursorHover(const Offset(60, 0), 25, SpriteTool.brush, 1) - ..cursorUp(SpriteTool.brush, 1), - expect: - () => [ - emptyState.copyWith(cursorPosition: Offset.zero), - emptyState.copyWith( - cursorPosition: Offset.zero, - pixels: [ - [1, -1, -1], - [-1, -1, -1], - [-1, -1, -1], - ], - ), - emptyState.copyWith( - cursorPosition: const Offset(1, 0), - pixels: [ - [1, -1, -1], - [-1, -1, -1], - [-1, -1, -1], - ], - ), - emptyState.copyWith( - cursorPosition: const Offset(1, 0), - pixels: [ - [1, 1, -1], - [-1, -1, -1], - [-1, -1, -1], - ], - ), - emptyState.copyWith( - cursorPosition: const Offset(2, 0), - pixels: [ - [1, 1, -1], - [-1, -1, -1], - [-1, -1, -1], - ], - ), - emptyState.copyWith( - cursorPosition: const Offset(2, 0), - pixels: [ - [1, 1, 1], - [-1, -1, -1], - [-1, -1, -1], - ], - ), + act: (cubit) => cubit + ..cursorDown(Offset.zero, 25, SpriteTool.brush, 1) + ..cursorHover(const Offset(30, 0), 25, SpriteTool.brush, 1) + ..cursorHover(const Offset(60, 0), 25, SpriteTool.brush, 1) + ..cursorUp(SpriteTool.brush, 1), + expect: () => [ + emptyState.copyWith(cursorPosition: Offset.zero), + emptyState.copyWith( + cursorPosition: Offset.zero, + pixels: [ + [1, -1, -1], + [-1, -1, -1], + [-1, -1, -1], + ], + ), + emptyState.copyWith( + cursorPosition: const Offset(1, 0), + pixels: [ + [1, -1, -1], + [-1, -1, -1], + [-1, -1, -1], + ], + ), + emptyState.copyWith( + cursorPosition: const Offset(1, 0), + pixels: [ + [1, 1, -1], + [-1, -1, -1], + [-1, -1, -1], + ], + ), + emptyState.copyWith( + cursorPosition: const Offset(2, 0), + pixels: [ + [1, 1, -1], + [-1, -1, -1], + [-1, -1, -1], + ], + ), + emptyState.copyWith( + cursorPosition: const Offset(2, 0), + pixels: [ + [1, 1, 1], + [-1, -1, -1], + [-1, -1, -1], ], + ), + ], ); }); @@ -323,57 +316,54 @@ void main() { 'clears the board', build: SpriteCubit.new, seed: () => filledState, - act: - (cubit) => - cubit - ..cursorDown(Offset.zero, 25, SpriteTool.eraser, 0) - ..cursorHover(const Offset(30, 0), 25, SpriteTool.eraser, 0) - ..cursorHover(const Offset(60, 0), 25, SpriteTool.eraser, 0) - ..cursorUp(SpriteTool.eraser, 0), - expect: - () => [ - filledState.copyWith(cursorPosition: Offset.zero), - filledState.copyWith( - cursorPosition: Offset.zero, - pixels: [ - [-1, 1, 1], - [1, 1, 1], - [1, 1, 1], - ], - ), - filledState.copyWith( - cursorPosition: const Offset(1, 0), - pixels: [ - [-1, 1, 1], - [1, 1, 1], - [1, 1, 1], - ], - ), - filledState.copyWith( - cursorPosition: const Offset(1, 0), - pixels: [ - [-1, -1, 1], - [1, 1, 1], - [1, 1, 1], - ], - ), - filledState.copyWith( - cursorPosition: const Offset(2, 0), - pixels: [ - [-1, -1, 1], - [1, 1, 1], - [1, 1, 1], - ], - ), - filledState.copyWith( - cursorPosition: const Offset(2, 0), - pixels: [ - [-1, -1, -1], - [1, 1, 1], - [1, 1, 1], - ], - ), + act: (cubit) => cubit + ..cursorDown(Offset.zero, 25, SpriteTool.eraser, 0) + ..cursorHover(const Offset(30, 0), 25, SpriteTool.eraser, 0) + ..cursorHover(const Offset(60, 0), 25, SpriteTool.eraser, 0) + ..cursorUp(SpriteTool.eraser, 0), + expect: () => [ + filledState.copyWith(cursorPosition: Offset.zero), + filledState.copyWith( + cursorPosition: Offset.zero, + pixels: [ + [-1, 1, 1], + [1, 1, 1], + [1, 1, 1], + ], + ), + filledState.copyWith( + cursorPosition: const Offset(1, 0), + pixels: [ + [-1, 1, 1], + [1, 1, 1], + [1, 1, 1], + ], + ), + filledState.copyWith( + cursorPosition: const Offset(1, 0), + pixels: [ + [-1, -1, 1], + [1, 1, 1], + [1, 1, 1], + ], + ), + filledState.copyWith( + cursorPosition: const Offset(2, 0), + pixels: [ + [-1, -1, 1], + [1, 1, 1], + [1, 1, 1], + ], + ), + filledState.copyWith( + cursorPosition: const Offset(2, 0), + pixels: [ + [-1, -1, -1], + [1, 1, 1], + [1, 1, 1], ], + ), + ], ); }); @@ -382,14 +372,12 @@ void main() { 'fills the board', seed: () => emptyState, build: SpriteCubit.new, - act: - (cubit) => - cubit..cursorDown(Offset.zero, 25, SpriteTool.bucket, 1), - expect: - () => [ - emptyState.copyWith(cursorPosition: Offset.zero), - filledState.copyWith(cursorPosition: Offset.zero), - ], + act: (cubit) => + cubit..cursorDown(Offset.zero, 25, SpriteTool.bucket, 1), + expect: () => [ + emptyState.copyWith(cursorPosition: Offset.zero), + filledState.copyWith(cursorPosition: Offset.zero), + ], ); }); @@ -398,15 +386,12 @@ void main() { 'clears the board', build: SpriteCubit.new, seed: () => filledState, - act: - (cubit) => - cubit - ..cursorDown(Offset.zero, 25, SpriteTool.bucketEraser, 0), - expect: - () => [ - filledState.copyWith(cursorPosition: Offset.zero), - emptyState.copyWith(cursorPosition: Offset.zero), - ], + act: (cubit) => + cubit..cursorDown(Offset.zero, 25, SpriteTool.bucketEraser, 0), + expect: () => [ + filledState.copyWith(cursorPosition: Offset.zero), + emptyState.copyWith(cursorPosition: Offset.zero), + ], ); }); }); @@ -416,79 +401,72 @@ void main() { 'resizes the sprite', build: SpriteCubit.new, act: (cubit) => cubit..setSize(2, 2), - expect: - () => [ - SpriteState.initial().copyWith( - pixels: [ - [-1, -1], - [-1, -1], - ], - ), + expect: () => [ + SpriteState.initial().copyWith( + pixels: [ + [-1, -1], + [-1, -1], ], + ), + ], ); blocTest( 'resizes the sprite keep any data possible', build: SpriteCubit.new, - seed: - () => SpriteState.initial().copyWith( - pixels: [ - [1], - [0], - ], - ), + seed: () => SpriteState.initial().copyWith( + pixels: [ + [1], + [0], + ], + ), act: (cubit) => cubit..setSize(2, 2), - expect: - () => [ - SpriteState.initial().copyWith( - pixels: [ - [1, -1], - [0, -1], - ], - ), + expect: () => [ + SpriteState.initial().copyWith( + pixels: [ + [1, -1], + [0, -1], ], + ), + ], ); }); blocTest( 'clears the sprite', build: SpriteCubit.new, - seed: - () => SpriteState.initial().copyWith( - pixels: [ - [1], - [1], - ], - ), + seed: () => SpriteState.initial().copyWith( + pixels: [ + [1], + [1], + ], + ), act: (cubit) => cubit.clearSprite(), - expect: - () => [ - SpriteState.initial().copyWith( - pixels: [ - [-1], - [-1], - ], - ), + expect: () => [ + SpriteState.initial().copyWith( + pixels: [ + [-1], + [-1], ], + ), + ], ); blocTest( 'sets the sprite', build: SpriteCubit.new, - act: - (cubit) => cubit.setSprite([ + act: (cubit) => cubit.setSprite([ + [0], + [0], + ]), + expect: () => [ + SpriteState.initial().copyWith( + pixels: [ [0], [0], - ]), - expect: - () => [ - SpriteState.initial().copyWith( - pixels: [ - [0], - [0], - ], - ), ], + ), + ], ); test('shouldReplay is 1 when pixels are different', () { diff --git a/packages/mini_sprite_editor/test/sprite/cubit/sprite_state_test.dart b/packages/mini_sprite_editor/test/sprite/cubit/sprite_state_test.dart index d865b57..37bfc97 100644 --- a/packages/mini_sprite_editor/test/sprite/cubit/sprite_state_test.dart +++ b/packages/mini_sprite_editor/test/sprite/cubit/sprite_state_test.dart @@ -41,7 +41,7 @@ void main() { ); }); - test('copyWith returns a new isntance with the field updated', () { + test('copyWith returns a new instance with the field updated', () { expect( SpriteState(pixels: const [], cursorPosition: Offset.zero).copyWith( pixels: [ diff --git a/packages/mini_sprite_editor/test/sprite/cubit/tools_cubit_test.dart b/packages/mini_sprite_editor/test/sprite/cubit/tools_cubit_test.dart index 37d8905..0703ca4 100644 --- a/packages/mini_sprite_editor/test/sprite/cubit/tools_cubit_test.dart +++ b/packages/mini_sprite_editor/test/sprite/cubit/tools_cubit_test.dart @@ -40,9 +40,9 @@ void main() { ); blocTest( - 'can toogle the grid', + 'can toggle the grid', build: ToolsCubit.new, - act: (cubit) => cubit.toogleGrid(), + act: (cubit) => cubit.toggleGrid(), expect: () => [ToolsState.initial().copyWith(gridActive: false)], ); }); diff --git a/packages/mini_sprite_editor/test/sprite/cubit/tools_state_test.dart b/packages/mini_sprite_editor/test/sprite/cubit/tools_state_test.dart index 8a99218..164ccc4 100644 --- a/packages/mini_sprite_editor/test/sprite/cubit/tools_state_test.dart +++ b/packages/mini_sprite_editor/test/sprite/cubit/tools_state_test.dart @@ -114,7 +114,7 @@ void main() { ); }); - test('copyWith returns a new isntance with the field updated', () { + test('copyWith returns a new instance with the field updated', () { expect( ToolsState( pixelSize: 10, diff --git a/packages/mini_sprite_editor/test/sprite/view/sprite_view_test.dart b/packages/mini_sprite_editor/test/sprite/view/sprite_view_test.dart index 23d4ac0..e21e839 100644 --- a/packages/mini_sprite_editor/test/sprite/view/sprite_view_test.dart +++ b/packages/mini_sprite_editor/test/sprite/view/sprite_view_test.dart @@ -754,7 +754,7 @@ void main() async { verifyNever(spriteCubit.clearSprite); }); - testWidgets('toogles the grid', (tester) async { + testWidgets('toggles the grid', (tester) async { mockState( spriteState: SpriteState.initial(), toolsState: ToolsState.initial(), @@ -768,10 +768,10 @@ void main() async { libraryCubit: libraryCubit, ); - await tester.tap(find.byKey(const Key('toogle_grid_key'))); + await tester.tap(find.byKey(const Key('toggle_grid_key'))); await tester.pumpAndSettle(); - verify(toolsCubit.toogleGrid).called(1); + verify(toolsCubit.toggleGrid).called(1); }); group('tools shortcuts', () { diff --git a/packages/mini_sprite_editor/test/workspace/view/workspace_view_test.dart b/packages/mini_sprite_editor/test/workspace/view/workspace_view_test.dart index 4f18cb2..ecbcc38 100644 --- a/packages/mini_sprite_editor/test/workspace/view/workspace_view_test.dart +++ b/packages/mini_sprite_editor/test/workspace/view/workspace_view_test.dart @@ -47,7 +47,9 @@ extension TestWidgetText on WidgetTester { BlocProvider.value(value: workspaceCubit), BlocProvider.value(value: mapCubit), ], - child: Scaffold(body: WorkspaceView(colorList: colors, sprite: sprite)), + child: Scaffold( + body: WorkspaceView(colorList: colors, sprite: sprite), + ), ), ); } diff --git a/packages/mini_treasure_quest/README.md b/packages/mini_treasure_quest/README.md index e83000f..82762ce 100644 --- a/packages/mini_treasure_quest/README.md +++ b/packages/mini_treasure_quest/README.md @@ -2,6 +2,7 @@ A new Flutter project. + ## Getting Started This project is a starting point for a Flutter application. diff --git a/packages/mini_treasure_quest/lib/game/entities/player.dart b/packages/mini_treasure_quest/lib/game/entities/player.dart index 09ddb9c..d1e05d3 100644 --- a/packages/mini_treasure_quest/lib/game/entities/player.dart +++ b/packages/mini_treasure_quest/lib/game/entities/player.dart @@ -5,9 +5,7 @@ import 'package:mini_treasure_quest/assets.dart'; import 'package:mini_treasure_quest/mini_treasure_quest.dart'; class Player extends forge.BodyComponent { - Player({ - required this.initialPosition, - }); + Player({required this.initialPosition}); final Vector2 initialPosition; @@ -78,14 +76,11 @@ class Player extends forge.BodyComponent { @override forge.Body createBody() { renderBody = false; - final bodyDef = forge.BodyDef( - userData: this, - type: forge.BodyType.dynamic, - )..position = forge.Vector2(initialPosition.x, initialPosition.y); + final bodyDef = forge.BodyDef(userData: this, type: forge.BodyType.dynamic) + ..position = forge.Vector2(initialPosition.x, initialPosition.y); - return world.createBody(bodyDef) - ..createFixtureFromShape( - forge.PolygonShape()..setAsBoxXY(tileSize / 2, tileSize / 2), - ); + return world.createBody(bodyDef)..createFixtureFromShape( + forge.PolygonShape()..setAsBoxXY(tileSize / 2, tileSize / 2), + ); } } diff --git a/packages/mini_treasure_quest/lib/game/entities/tile.dart b/packages/mini_treasure_quest/lib/game/entities/tile.dart index 201de6d..d1f020a 100644 --- a/packages/mini_treasure_quest/lib/game/entities/tile.dart +++ b/packages/mini_treasure_quest/lib/game/entities/tile.dart @@ -4,10 +4,7 @@ import 'package:mini_treasure_quest/assets.dart'; import 'package:mini_treasure_quest/mini_treasure_quest.dart'; class Tile extends forge.BodyComponent { - Tile({ - required this.initialPosition, - required this.sprite, - }); + Tile({required this.initialPosition, required this.sprite}); final Vector2 initialPosition; final String sprite; @@ -31,18 +28,11 @@ class Tile extends forge.BodyComponent { final bodyDef = forge.BodyDef( userData: this, type: forge.BodyType.kinematic, - )..position = forge.Vector2( - initialPosition.x, - initialPosition.y, - ); + )..position = forge.Vector2(initialPosition.x, initialPosition.y); - return world.createBody(bodyDef) - ..createFixtureFromShape( - forge.PolygonShape() - ..setAsBoxXY( - (tileSize / 2) * 0.8, - (tileSize / 2) * 0.8, - ), - ); + return world.createBody(bodyDef)..createFixtureFromShape( + forge.PolygonShape() + ..setAsBoxXY((tileSize / 2) * 0.8, (tileSize / 2) * 0.8), + ); } } diff --git a/packages/mini_treasure_quest/lib/game/entities/treasure.dart b/packages/mini_treasure_quest/lib/game/entities/treasure.dart index dde2c41..0153f21 100644 --- a/packages/mini_treasure_quest/lib/game/entities/treasure.dart +++ b/packages/mini_treasure_quest/lib/game/entities/treasure.dart @@ -36,11 +36,7 @@ class Treasure extends forge.BodyComponent body .createFixtureFromShape( - forge.PolygonShape() - ..setAsBoxXY( - tileSize / 2, - tileSize / 2, - ), + forge.PolygonShape()..setAsBoxXY(tileSize / 2, tileSize / 2), ) .setSensor(true); diff --git a/packages/mini_treasure_quest/lib/game/views/game_view.dart b/packages/mini_treasure_quest/lib/game/views/game_view.dart index 78f1279..a8a20ef 100644 --- a/packages/mini_treasure_quest/lib/game/views/game_view.dart +++ b/packages/mini_treasure_quest/lib/game/views/game_view.dart @@ -29,9 +29,7 @@ class GameView extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( - body: GameWidget( - game: MiniTreasureQuest(stage: stage), - ), + body: GameWidget(game: MiniTreasureQuest(stage: stage)), ); } } diff --git a/packages/mini_treasure_quest/lib/game/views/win_dialog.dart b/packages/mini_treasure_quest/lib/game/views/win_dialog.dart index 8cfa93c..757b181 100644 --- a/packages/mini_treasure_quest/lib/game/views/win_dialog.dart +++ b/packages/mini_treasure_quest/lib/game/views/win_dialog.dart @@ -28,9 +28,7 @@ class WinDialog extends StatelessWidget { ElevatedButton( autofocus: stage + 1 == stages.length, onPressed: () { - Navigator.of(context).pushReplacement( - StagesPage.route(), - ); + Navigator.of(context).pushReplacement(StagesPage.route()); }, child: const Text('Stages'), ), @@ -38,9 +36,9 @@ class WinDialog extends StatelessWidget { ElevatedButton( autofocus: true, onPressed: () { - Navigator.of(context).pushReplacement( - GamePage.route(stage + 1), - ); + Navigator.of( + context, + ).pushReplacement(GamePage.route(stage + 1)); }, child: const Text('Next'), ), diff --git a/packages/mini_treasure_quest/lib/main.dart b/packages/mini_treasure_quest/lib/main.dart index 4e3ca5a..4614bda 100644 --- a/packages/mini_treasure_quest/lib/main.dart +++ b/packages/mini_treasure_quest/lib/main.dart @@ -23,19 +23,15 @@ ThemeData _buildTheme(Brightness brightness) { cardTheme: CardThemeData( color: Colors.black, elevation: 2, - shape: Border.all( - color: Colors.white, - width: 4, - ), + shape: Border.all(color: Colors.white, width: 4), ), ); return baseTheme.copyWith( primaryColor: Colors.white, - textTheme: GoogleFonts.pressStart2pTextTheme(baseTheme.textTheme).apply( - bodyColor: Colors.white, - displayColor: Colors.white, - ), + textTheme: GoogleFonts.pressStart2pTextTheme( + baseTheme.textTheme, + ).apply(bodyColor: Colors.white, displayColor: Colors.white), ); } diff --git a/packages/mini_treasure_quest/lib/stages/views/stages_view.dart b/packages/mini_treasure_quest/lib/stages/views/stages_view.dart index a8b9422..5707219 100644 --- a/packages/mini_treasure_quest/lib/stages/views/stages_view.dart +++ b/packages/mini_treasure_quest/lib/stages/views/stages_view.dart @@ -6,9 +6,7 @@ class StagesPage extends StatelessWidget { const StagesPage({super.key}); static Route route() { - return MaterialPageRoute( - builder: (_) => const StagesPage(), - ); + return MaterialPageRoute(builder: (_) => const StagesPage()); } @override diff --git a/packages/mini_treasure_quest/lib/title/views/title_view.dart b/packages/mini_treasure_quest/lib/title/views/title_view.dart index e142ed4..1d33619 100644 --- a/packages/mini_treasure_quest/lib/title/views/title_view.dart +++ b/packages/mini_treasure_quest/lib/title/views/title_view.dart @@ -7,9 +7,7 @@ class TitlePage extends StatelessWidget { const TitlePage({super.key}); static Route route() { - return MaterialPageRoute( - builder: (_) => const TitlePage(), - ); + return MaterialPageRoute(builder: (_) => const TitlePage()); } @override @@ -33,10 +31,7 @@ class TitleView extends StatelessWidget { height: 300, padding: const EdgeInsets.all(32), decoration: BoxDecoration( - border: Border.all( - color: Colors.white, - width: 4, - ), + border: Border.all(color: Colors.white, width: 4), ), child: SpriteWidget( // TODO(erickzanardo): A MiniSpriteWidget is a good idea. diff --git a/packages/mini_treasure_quest/pubspec.lock b/packages/mini_treasure_quest/pubspec.lock deleted file mode 100644 index 542c11d..0000000 --- a/packages/mini_treasure_quest/pubspec.lock +++ /dev/null @@ -1,499 +0,0 @@ -# Generated by pub -# See https://dart.dev/tools/pub/glossary#lockfile -packages: - args: - dependency: transitive - description: - name: args - sha256: d0481093c50b1da8910eb0bb301626d4d8eb7284aa739614d2b394ee09e3ea04 - url: "https://pub.dev" - source: hosted - version: "2.7.0" - async: - dependency: transitive - description: - name: async - sha256: e2eb0491ba5ddb6177742d2da23904574082139b07c1e33b8503b9f46f3e1a37 - url: "https://pub.dev" - source: hosted - version: "2.13.1" - boolean_selector: - dependency: transitive - description: - name: boolean_selector - sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea" - url: "https://pub.dev" - source: hosted - version: "2.1.2" - characters: - dependency: transitive - description: - name: characters - sha256: faf38497bda5ead2a8c7615f4f7939df04333478bf32e4173fcb06d428b5716b - url: "https://pub.dev" - source: hosted - version: "1.4.1" - clock: - dependency: transitive - description: - name: clock - sha256: e51d50bca3217c9a9fa2b41a30e4a38971133f5f9ec7a3d57bae095007f1d28e - url: "https://pub.dev" - source: hosted - version: "1.1.3" - code_assets: - dependency: transitive - description: - name: code_assets - sha256: "828110d598123b5ea96c00c9f3c72105bf79f8ee36c20a39b26209ade421ec57" - url: "https://pub.dev" - source: hosted - version: "2.1.0" - collection: - dependency: transitive - description: - name: collection - sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76" - url: "https://pub.dev" - source: hosted - version: "1.19.1" - crypto: - dependency: transitive - description: - name: crypto - sha256: c8ea0233063ba03258fbcf2ca4d6dadfefe14f02fab57702265467a19f27fadf - url: "https://pub.dev" - source: hosted - version: "3.0.7" - equatable: - dependency: transitive - description: - name: equatable - sha256: ea36e500cbf0ec18361deabca755434f73e42fe53c5130021c7e2d6b5ebe1702 - url: "https://pub.dev" - source: hosted - version: "3.0.0" - fake_async: - dependency: transitive - description: - name: fake_async - sha256: "5368f224a74523e8d2e7399ea1638b37aecfca824a3cc4dfdf77bf1fa905ac44" - url: "https://pub.dev" - source: hosted - version: "1.3.3" - ffi: - dependency: transitive - description: - name: ffi - sha256: "6d7fd89431262d8f3125e81b50d3847a091d846eafcd4fdb88dd06f36d705a45" - url: "https://pub.dev" - source: hosted - version: "2.2.0" - flame: - dependency: "direct main" - description: - name: flame - sha256: b9e65f6d7d06a301d6ea3cde03731cad3cdc255d56e0fb53c56c1e7806aaaf6a - url: "https://pub.dev" - source: hosted - version: "1.37.0" - flame_behaviors: - dependency: "direct main" - description: - name: flame_behaviors - sha256: "46fa84fad5c6eaaebd3b9bf2af9c1c766051ab8e3e13d6c78d783653cae337dc" - url: "https://pub.dev" - source: hosted - version: "1.3.5" - flame_forge2d: - dependency: "direct main" - description: - name: flame_forge2d - sha256: "9c3fed8ae1bd7ad3014e541f1c2abbc8c6297ddc1c67616394bb7447453a4552" - url: "https://pub.dev" - source: hosted - version: "0.19.2+6" - flame_mini_sprite: - dependency: "direct main" - description: - path: "../flame_mini_sprite" - relative: true - source: path - version: "0.0.2" - flutter: - dependency: "direct main" - description: flutter - source: sdk - version: "0.0.0" - flutter_lints: - dependency: "direct dev" - description: - name: flutter_lints - sha256: "3105dc8492f6183fb076ccf1f351ac3d60564bff92e20bfc4af9cc1651f4e7e1" - url: "https://pub.dev" - source: hosted - version: "6.0.0" - flutter_test: - dependency: "direct dev" - description: flutter - source: sdk - version: "0.0.0" - forge2d: - dependency: transitive - description: - name: forge2d - sha256: "0f63d177f2e137a5007b879fda4076d0b81de065fcd72056c6fc896c82758bb7" - url: "https://pub.dev" - source: hosted - version: "0.14.2+1" - google_fonts: - dependency: "direct main" - description: - name: google_fonts - sha256: e3cb3ee6b47fd2472c23de6da5744796a4da195137759ddb3fbcc9467b7b3c7d - url: "https://pub.dev" - source: hosted - version: "8.2.1" - hooks: - dependency: transitive - description: - name: hooks - sha256: eaac480a35ec0814146c2c48d96aaa829e0e44a7662c88ae84c9edf4bc35651f - url: "https://pub.dev" - source: hosted - version: "2.2.0" - http: - dependency: transitive - description: - name: http - sha256: "87721a4a50b19c7f1d49001e51409bddc46303966ce89a65af4f4e6004896412" - url: "https://pub.dev" - source: hosted - version: "1.6.0" - http_parser: - dependency: transitive - description: - name: http_parser - sha256: "178d74305e7866013777bab2c3d8726205dc5a4dd935297175b19a23a2e66571" - url: "https://pub.dev" - source: hosted - version: "4.1.2" - jni: - dependency: transitive - description: - name: jni - sha256: f038e58b4dc2c9037f50e233175086337e0b305e356d28211bf55f21c504cbd3 - url: "https://pub.dev" - source: hosted - version: "1.0.3" - jni_flutter: - dependency: transitive - description: - name: jni_flutter - sha256: b2310cdd4c18c65c081ab141a41efa94aa26c65431803703ece51996f174f351 - url: "https://pub.dev" - source: hosted - version: "1.0.3" - jni_util: - dependency: transitive - description: - name: jni_util - sha256: "1ba86da04a5f2bf18fde2edb235587e70c5b0fc5bd4ba955f46b00942c3fc35f" - url: "https://pub.dev" - source: hosted - version: "1.0.0" - leak_tracker: - dependency: transitive - description: - name: leak_tracker - sha256: "33e2e26bdd85a0112ec15400c8cbffea70d0f9c3407491f672a2fad47915e2de" - url: "https://pub.dev" - source: hosted - version: "11.0.2" - leak_tracker_flutter_testing: - dependency: transitive - description: - name: leak_tracker_flutter_testing - sha256: "1dbc140bb5a23c75ea9c4811222756104fbcd1a27173f0c34ca01e16bea473c1" - url: "https://pub.dev" - source: hosted - version: "3.0.10" - leak_tracker_testing: - dependency: transitive - description: - name: leak_tracker_testing - sha256: "8d5a2d49f4a66b49744b23b018848400d23e54caf9463f4eb20df3eb8acb2eb1" - url: "https://pub.dev" - source: hosted - version: "3.0.2" - lints: - dependency: transitive - description: - name: lints - sha256: "12f842a479589fea194fe5c5a3095abc7be0c1f2ddfa9a0e76aed1dbd26a87df" - url: "https://pub.dev" - source: hosted - version: "6.1.0" - logging: - dependency: transitive - description: - name: logging - sha256: c8245ada5f1717ed44271ed1c26b8ce85ca3228fd2ffdb75468ab01979309d61 - url: "https://pub.dev" - source: hosted - version: "1.3.0" - matcher: - dependency: transitive - description: - name: matcher - sha256: "31bd099b47c10cd1aeb55146a2d46ce0277630ecef3f7dae54ad7873f36696cd" - url: "https://pub.dev" - source: hosted - version: "0.12.20" - material_color_utilities: - dependency: transitive - description: - name: material_color_utilities - sha256: "9c337007e82b1889149c82ed242ed1cb24a66044e30979c44912381e9be4c48b" - url: "https://pub.dev" - source: hosted - version: "0.13.0" - meta: - dependency: transitive - description: - name: meta - sha256: "307249ce4ff29d58a18e97f6345f539382eb9c9c29ecda628900f31de0443dd9" - url: "https://pub.dev" - source: hosted - version: "1.19.0" - mini_sprite: - dependency: "direct main" - description: - path: "../mini_sprite" - relative: true - source: path - version: "0.1.0" - objective_c: - dependency: transitive - description: - name: objective_c - sha256: ad56fd53a78ff6b1472fa59ff2a4e8b8ccabafc586fc263a1dfad0b99b5553e3 - url: "https://pub.dev" - source: hosted - version: "9.6.0" - ordered_set: - dependency: transitive - description: - name: ordered_set - sha256: ca415a0e28b8e8f5e284af4b7d1b189d2d09af6d2082532ddaec54473f67d226 - url: "https://pub.dev" - source: hosted - version: "8.0.1" - package_config: - dependency: transitive - description: - name: package_config - sha256: ffcf4cf3d6c0b74ac43708d9f56625506e8a68aa935abe9d267a7330f320eb5d - url: "https://pub.dev" - source: hosted - version: "3.0.0" - path: - dependency: transitive - description: - name: path - sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5" - url: "https://pub.dev" - source: hosted - version: "1.9.1" - path_provider: - dependency: transitive - description: - name: path_provider - sha256: a7f4874f987173da295a61c181b8ee71dab59b332a486b391babf26a1b884825 - url: "https://pub.dev" - source: hosted - version: "2.1.6" - path_provider_android: - dependency: transitive - description: - name: path_provider_android - sha256: "69cbd515a62b94d32a7944f086b2f82b4ac40a1d45bebfc00813a430ab2dabcd" - url: "https://pub.dev" - source: hosted - version: "2.3.1" - path_provider_foundation: - dependency: transitive - description: - name: path_provider_foundation - sha256: "2a376b7d6392d80cd3705782d2caa734ca4727776db0b6ec36ef3f1855197699" - url: "https://pub.dev" - source: hosted - version: "2.6.0" - path_provider_linux: - dependency: transitive - description: - name: path_provider_linux - sha256: "58c2005f147315b11e9b4a7bc889cd5203e250cba8e3f012dae259b4972b5c16" - url: "https://pub.dev" - source: hosted - version: "2.2.2" - path_provider_platform_interface: - dependency: transitive - description: - name: path_provider_platform_interface - sha256: "484838772624c3a4b94f1e44a3e19897fee738f2d5c4ce448443b0417f7c9dda" - url: "https://pub.dev" - source: hosted - version: "2.1.3" - path_provider_windows: - dependency: transitive - description: - name: path_provider_windows - sha256: bd6f00dbd873bfb70d0761682da2b3a2c2fccc2b9e84c495821639601d81afe7 - url: "https://pub.dev" - source: hosted - version: "2.3.0" - platform: - dependency: transitive - description: - name: platform - sha256: a36d119c13416516a7b5913fbe8af8531e11633d784c550b2125f76c758524ec - url: "https://pub.dev" - source: hosted - version: "3.2.0" - plugin_platform_interface: - dependency: transitive - description: - name: plugin_platform_interface - sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02" - url: "https://pub.dev" - source: hosted - version: "2.1.8" - pub_semver: - dependency: transitive - description: - name: pub_semver - sha256: "261236774e8b1d69cfc6b9eabbc96c40f25e7a2d6b171f3385d4f65d5734fb24" - url: "https://pub.dev" - source: hosted - version: "2.2.1" - record_use: - dependency: transitive - description: - name: record_use - sha256: "1cb8564af8d43b464294411db9217f5ec04891c6f22ee2c32d73ae05e88a6bd2" - url: "https://pub.dev" - source: hosted - version: "1.1.1" - sky_engine: - dependency: transitive - description: flutter - source: sdk - version: "0.0.0" - source_span: - dependency: transitive - description: - name: source_span - sha256: "56a02f1f4cd1a2d96303c0144c93bd6d909eea6bee6bf5a0e0b685edbd4c47ab" - url: "https://pub.dev" - source: hosted - version: "1.10.2" - stack_trace: - dependency: transitive - description: - name: stack_trace - sha256: "277654b3034d17ac6f9f1cb5595db011b1d5d41e8806866db28e0abaa101c490" - url: "https://pub.dev" - source: hosted - version: "1.12.2" - stream_channel: - dependency: transitive - description: - name: stream_channel - sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d" - url: "https://pub.dev" - source: hosted - version: "2.1.4" - string_scanner: - dependency: transitive - description: - name: string_scanner - sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43" - url: "https://pub.dev" - source: hosted - version: "1.4.1" - term_glyph: - dependency: transitive - description: - name: term_glyph - sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e" - url: "https://pub.dev" - source: hosted - version: "1.2.2" - test_api: - dependency: transitive - description: - name: test_api - sha256: "2a122cbe059f8b610d3a5415f42e255b6c17b1f21eee1d960f31080237fb4f11" - url: "https://pub.dev" - source: hosted - version: "0.7.12" - typed_data: - dependency: transitive - description: - name: typed_data - sha256: f9049c039ebfeb4cf7a7104a675823cd72dba8297f264b6637062516699fa006 - url: "https://pub.dev" - source: hosted - version: "1.4.0" - vector_math: - dependency: transitive - description: - name: vector_math - sha256: "92b9910f66ed1057fd4da7b040ae7c74cafacf885bdc81be496928d5049b032d" - url: "https://pub.dev" - source: hosted - version: "2.4.3" - very_good_analysis: - dependency: "direct dev" - description: - name: very_good_analysis - sha256: "0bd5eb8d6be76aa0d71e70cbdae6cac8f784f761170568e3c2214a6948c7f6d3" - url: "https://pub.dev" - source: hosted - version: "11.0.0" - vm_service: - dependency: transitive - description: - name: vm_service - sha256: "5f37239c4851efcef929cea7824e76df7f2f0970aef85d66bbc430afa40e72f0" - url: "https://pub.dev" - source: hosted - version: "15.3.0" - web: - dependency: transitive - description: - name: web - sha256: "868d88a33d8a87b18ffc05f9f030ba328ffefba92d6c127917a2ba740f9cfe4a" - url: "https://pub.dev" - source: hosted - version: "1.1.1" - xdg_directories: - dependency: transitive - description: - name: xdg_directories - sha256: "7a3f37b05d989967cdddcbb571f1ea834867ae2faa29725fd085180e0883aa15" - url: "https://pub.dev" - source: hosted - version: "1.1.0" - yaml: - dependency: transitive - description: - name: yaml - sha256: f67cdd8e07d3c6329146aaef1ba043542b3134c12489f553ca9a7435d1068aea - url: "https://pub.dev" - source: hosted - version: "3.1.4" -sdks: - dart: ">=3.13.0 <4.0.0" - flutter: ">=3.41.0" diff --git a/packages/mini_treasure_quest/pubspec.yaml b/packages/mini_treasure_quest/pubspec.yaml index 9a30c24..66b8ee3 100644 --- a/packages/mini_treasure_quest/pubspec.yaml +++ b/packages/mini_treasure_quest/pubspec.yaml @@ -1,4 +1,5 @@ name: mini_treasure_quest +resolution: workspace description: A game about a pirate hunting for treasure on dungeons publish_to: 'none' @@ -6,7 +7,7 @@ publish_to: 'none' version: 0.0.1+1 environment: - sdk: ">=2.17.3 <3.0.0" + sdk: ">=3.9.0 <4.0.0" dependencies: flame: ">=1.32.0 <1.38.0" diff --git a/pubspec.lock b/pubspec.lock deleted file mode 100644 index 896e7a0..0000000 --- a/pubspec.lock +++ /dev/null @@ -1,325 +0,0 @@ -# Generated by pub -# See https://dart.dev/tools/pub/glossary#lockfile -packages: - ansi_styles: - dependency: transitive - description: - name: ansi_styles - sha256: "9c656cc12b3c27b17dd982b2cc5c0cfdfbdabd7bc8f3ae5e8542d9867b47ce8a" - url: "https://pub.dev" - source: hosted - version: "0.3.2+1" - args: - dependency: transitive - description: - name: args - sha256: d0481093c50b1da8910eb0bb301626d4d8eb7284aa739614d2b394ee09e3ea04 - url: "https://pub.dev" - source: hosted - version: "2.7.0" - async: - dependency: transitive - description: - name: async - sha256: e2eb0491ba5ddb6177742d2da23904574082139b07c1e33b8503b9f46f3e1a37 - url: "https://pub.dev" - source: hosted - version: "2.13.1" - boolean_selector: - dependency: transitive - description: - name: boolean_selector - sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea" - url: "https://pub.dev" - source: hosted - version: "2.1.2" - charcode: - dependency: transitive - description: - name: charcode - sha256: fb0f1107cac15a5ea6ef0a6ef71a807b9e4267c713bb93e00e92d737cc8dbd8a - url: "https://pub.dev" - source: hosted - version: "1.4.0" - cli_launcher: - dependency: transitive - description: - name: cli_launcher - sha256: d2dd1baf7ae4ff1550e731dcb8fe669a5c652903e833f75359c178222c44214e - url: "https://pub.dev" - source: hosted - version: "0.3.4" - cli_util: - dependency: transitive - description: - name: cli_util - sha256: ff6785f7e9e3c38ac98b2fb035701789de90154024a75b6cb926445e83197d1c - url: "https://pub.dev" - source: hosted - version: "0.4.2" - collection: - dependency: transitive - description: - name: collection - sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76" - url: "https://pub.dev" - source: hosted - version: "1.19.1" - conventional_commit: - dependency: transitive - description: - name: conventional_commit - sha256: c40b1b449ce2a63fa2ce852f35e3890b1e182f5951819934c0e4a66254bc0dc3 - url: "https://pub.dev" - source: hosted - version: "0.6.1+1" - file: - dependency: transitive - description: - name: file - sha256: "1b92bec4fc2a72f59a8e15af5f52cd441e4a7860b49499d69dfa817af20e925d" - url: "https://pub.dev" - source: hosted - version: "6.1.4" - glob: - dependency: transitive - description: - name: glob - sha256: "218aeb56050c714f62a3182775320dfa04602b55074873e24e31bbd39bda96fb" - url: "https://pub.dev" - source: hosted - version: "2.2.0" - graphs: - dependency: transitive - description: - name: graphs - sha256: "741bbf84165310a68ff28fe9e727332eef1407342fca52759cb21ad8177bb8d0" - url: "https://pub.dev" - source: hosted - version: "2.3.2" - http: - dependency: transitive - description: - name: http - sha256: "87721a4a50b19c7f1d49001e51409bddc46303966ce89a65af4f4e6004896412" - url: "https://pub.dev" - source: hosted - version: "1.6.0" - http_parser: - dependency: transitive - description: - name: http_parser - sha256: "178d74305e7866013777bab2c3d8726205dc5a4dd935297175b19a23a2e66571" - url: "https://pub.dev" - source: hosted - version: "4.1.2" - io: - dependency: transitive - description: - name: io - sha256: "2635216ca6a737e60de577ffa1a48a0bec76ca8a62917cfc1bb88c14c570646f" - url: "https://pub.dev" - source: hosted - version: "1.1.0" - json_annotation: - dependency: transitive - description: - name: json_annotation - sha256: "2a743920d81b7910627f68ee2c9ac1fc0bfee32b9fc3403587d7c6791ca12f80" - url: "https://pub.dev" - source: hosted - version: "4.12.0" - matcher: - dependency: transitive - description: - name: matcher - sha256: "31bd099b47c10cd1aeb55146a2d46ce0277630ecef3f7dae54ad7873f36696cd" - url: "https://pub.dev" - source: hosted - version: "0.12.20" - melos: - dependency: "direct dev" - description: - name: melos - sha256: "96e64bbade5712c3f010137e195bca9f1b351fac34ab1f322af492ae34032067" - url: "https://pub.dev" - source: hosted - version: "3.4.0" - meta: - dependency: transitive - description: - name: meta - sha256: "307249ce4ff29d58a18e97f6345f539382eb9c9c29ecda628900f31de0443dd9" - url: "https://pub.dev" - source: hosted - version: "1.19.0" - mustache_template: - dependency: transitive - description: - name: mustache_template - sha256: "17a8de9072575bb1a3237b90ed1f756b2189995b334df2ad12b7cdd76b13f3ce" - url: "https://pub.dev" - source: hosted - version: "2.0.6" - path: - dependency: transitive - description: - name: path - sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5" - url: "https://pub.dev" - source: hosted - version: "1.9.1" - platform: - dependency: transitive - description: - name: platform - sha256: "5d6b1b0036a5f331ebc77c850ebc8506cbc1e9416c27e59b439f917a902a4984" - url: "https://pub.dev" - source: hosted - version: "3.1.6" - pool: - dependency: transitive - description: - name: pool - sha256: "4177f68c237ea2128d1bee66ac17b2ce05ba3dbaafcbdd54c5d40a39d0b6b11c" - url: "https://pub.dev" - source: hosted - version: "1.5.3" - process: - dependency: transitive - description: - name: process - sha256: "53fd8db9cec1d37b0574e12f07520d582019cb6c44abf5479a01505099a34a09" - url: "https://pub.dev" - source: hosted - version: "4.2.4" - prompts: - dependency: transitive - description: - name: prompts - sha256: "3773b845e85a849f01e793c4fc18a45d52d7783b4cb6c0569fad19f9d0a774a1" - url: "https://pub.dev" - source: hosted - version: "2.0.0" - pub_semver: - dependency: transitive - description: - name: pub_semver - sha256: "261236774e8b1d69cfc6b9eabbc96c40f25e7a2d6b171f3385d4f65d5734fb24" - url: "https://pub.dev" - source: hosted - version: "2.2.1" - pub_updater: - dependency: transitive - description: - name: pub_updater - sha256: b06600619c8c219065a548f8f7c192b3e080beff95488ed692780f48f69c0625 - url: "https://pub.dev" - source: hosted - version: "0.3.1" - pubspec: - dependency: transitive - description: - name: pubspec - sha256: f534a50a2b4d48dc3bc0ec147c8bd7c304280fff23b153f3f11803c4d49d927e - url: "https://pub.dev" - source: hosted - version: "2.3.0" - quiver: - dependency: transitive - description: - name: quiver - sha256: ea0b925899e64ecdfbf9c7becb60d5b50e706ade44a85b2363be2a22d88117d2 - url: "https://pub.dev" - source: hosted - version: "3.2.2" - source_span: - dependency: transitive - description: - name: source_span - sha256: "56a02f1f4cd1a2d96303c0144c93bd6d909eea6bee6bf5a0e0b685edbd4c47ab" - url: "https://pub.dev" - source: hosted - version: "1.10.2" - stack_trace: - dependency: transitive - description: - name: stack_trace - sha256: "277654b3034d17ac6f9f1cb5595db011b1d5d41e8806866db28e0abaa101c490" - url: "https://pub.dev" - source: hosted - version: "1.12.2" - stream_channel: - dependency: transitive - description: - name: stream_channel - sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d" - url: "https://pub.dev" - source: hosted - version: "2.1.4" - string_scanner: - dependency: transitive - description: - name: string_scanner - sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43" - url: "https://pub.dev" - source: hosted - version: "1.4.1" - term_glyph: - dependency: transitive - description: - name: term_glyph - sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e" - url: "https://pub.dev" - source: hosted - version: "1.2.2" - test_api: - dependency: transitive - description: - name: test_api - sha256: "0a10344e901e5b2e63819567951cb6a06673ed6b84f40462188ff5a0c41f371f" - url: "https://pub.dev" - source: hosted - version: "0.7.14" - typed_data: - dependency: transitive - description: - name: typed_data - sha256: f9049c039ebfeb4cf7a7104a675823cd72dba8297f264b6637062516699fa006 - url: "https://pub.dev" - source: hosted - version: "1.4.0" - uri: - dependency: transitive - description: - name: uri - sha256: "889eea21e953187c6099802b7b4cf5219ba8f3518f604a1033064d45b1b8268a" - url: "https://pub.dev" - source: hosted - version: "1.0.0" - web: - dependency: transitive - description: - name: web - sha256: "868d88a33d8a87b18ffc05f9f030ba328ffefba92d6c127917a2ba740f9cfe4a" - url: "https://pub.dev" - source: hosted - version: "1.1.1" - yaml: - dependency: transitive - description: - name: yaml - sha256: f67cdd8e07d3c6329146aaef1ba043542b3134c12489f553ca9a7435d1068aea - url: "https://pub.dev" - source: hosted - version: "3.1.4" - yaml_edit: - dependency: transitive - description: - name: yaml_edit - sha256: "07c9e63ba42519745182b88ca12264a7ba2484d8239958778dfe4d44fe760488" - url: "https://pub.dev" - source: hosted - version: "2.2.4" -sdks: - dart: ">=3.11.0 <4.0.0" diff --git a/pubspec.yaml b/pubspec.yaml index 828d536..c65e88a 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,7 +1,78 @@ -name: mini_sprite_workspace +name: _ +repository: https://github.com/bluefireteam/mini_sprite +workspace: + - packages/flame_mini_sprite + - packages/flame_mini_sprite/example + - packages/flutter_mini_sprite + - packages/flutter_mini_sprite/example + - packages/mini_sprite + - packages/mini_sprite_editor + - packages/mini_treasure_quest environment: - sdk: ">=3.0.0 <4.0.0" + sdk: ">=3.9.0 <4.0.0" dev_dependencies: - melos: ^3.4.0 + melos: ^8.1.0 + +melos: + command: + version: + # Only allow versioning to happen on main branch. + branch: main + # Generates a link to a prefilled GitHub release creation page. + releaseUrl: true + includeCommitId: true + linkToCommits: true + + bootstrap: + environment: + sdk: ">=3.9.0 <4.0.0" + flutter: ">=3.35.0" + + scripts: + lint:all: + steps: + - melos analyze + - format + description: Run all static analysis checks. + + format-check: + run: melos exec dart format . --set-exit-if-changed + description: Run `dart format` checks for all packages. + + markdown-check: + run: markdownlint . --ignore-path .markdownlintignore --config .markdownlint.yaml + description: Runs the markdown linting check. + + markdown-fix: + run: markdownlint . --fix --ignore-path .markdownlintignore --config .markdownlint.yaml + description: Fixes the markdown linting errors. + + test:select: + run: melos exec -c 1 -- flutter test --reporter=json 2>&1 | dart run "$MELOS_ROOT_PATH/scripts/test_formatter.dart" + packageFilters: + dirExists: test + description: Run `flutter test` for selected packages. + + coverage: + steps: + - melos exec -- flutter test --coverage + - melos exec -- genhtml coverage/lcov.info --output-directory=coverage/ + packageFilters: + dirExists: test + description: Generate coverage for the selected package. + + upgrade: melos exec flutter pub upgrade + + editor-run: + run: melos exec -- flutter run -d chrome + packageFilters: + scope: mini_sprite_editor + description: Runs the Mini Sprite Editor in Chrome. + + editor-build: + run: melos exec -- flutter build web --release --base-href / + packageFilters: + scope: mini_sprite_editor + description: Builds the Mini Sprite Editor for the web. diff --git a/scripts/cspell-run.sh b/scripts/cspell-run.sh new file mode 100755 index 0000000..d3bfb64 --- /dev/null +++ b/scripts/cspell-run.sh @@ -0,0 +1,4 @@ +#!/usr/bin/env bash +set -e + +cspell "$@" --no-progress -c .github/cspell.json "**/*.{md,dart}" \ No newline at end of file diff --git a/scripts/cspell-verify.sh b/scripts/cspell-verify.sh new file mode 100755 index 0000000..4f0a3fa --- /dev/null +++ b/scripts/cspell-verify.sh @@ -0,0 +1,84 @@ +#!/usr/bin/env bash +set -e + +fix=$([[ "$*" == *--fix* ]] && echo true || echo false) + +function sort_check_fn() { + sort -f -c +} + +function sort_run_fn() { + sort -f +} + +function sort_dictionary() { + local file="$1" + local tmp_file=$(mktemp) + + head -n 1 "$file" > "$tmp_file" + tail -n +2 "$file" | sort_run_fn >> "$tmp_file" + mv "$tmp_file" "$file" +} + +function delete_unused() { + local file="$1" + local word="$2" + + perl -i -ne "print unless /^\s*${word}\s*([# ].*)?$/i" "$file" +} + +function lowercase() { + tr 'A-Z' 'a-z' +} + +word_list="word_list.tmp" + +dictionary_dir=".github/.cspell" +tmp_dir=".cspell.tmp" + +mv "$dictionary_dir" "$tmp_dir" +mkdir "$dictionary_dir" +for file in "$tmp_dir"/*; do + if [[ -f "$file" ]]; then + touch "$dictionary_dir/$(basename "$file")" + fi +done + +./scripts/cspell-run.sh --dot --unique --words-only | lowercase | sort -f > $word_list || exit 1 +rm -r "$dictionary_dir" +mv "$tmp_dir" "$dictionary_dir" + +error=0 +for file in .github/.cspell/*.txt; do + echo "Processing dictionary '$file'..." + + violation=$(awk '!/^\s*(#|$)/' "$file" | sort_check_fn 2>&1 || true) + if [ -n "$violation" ]; then + # Extract only the line content after the last ': ' + violation_line=$(echo "$violation" | sed 's/.*: //') + echo "Error: The dictionary '$file' is not in alphabetical order. First violation: '$violation_line'" >&2 + error=1 + if $fix; then + echo "Fixing the dictionary '$file'" + sort_dictionary "$file" + fi + fi + + while IFS= read -r line; do + # split the line by # to remove comments + word=$(echo "$line" | cut -d '#' -f 1 | xargs | lowercase) # xargs trims whitespace + + # check if the word exists in the project + if [[ -n "$word" ]] && ! grep -wxF "$word" "$word_list" >/dev/null; then + echo "Error: The word '$word' in the dictionary '$file' is not needed." >&2 + error=1 + if $fix; then + echo "Fixing the dictionary '$file' with excess word $word" + delete_unused "$file" "$word" + fi + fi + done < "$file" +done + +rm $word_list +exit $error \ No newline at end of file diff --git a/scripts/test_formatter.dart b/scripts/test_formatter.dart new file mode 100644 index 0000000..d653129 --- /dev/null +++ b/scripts/test_formatter.dart @@ -0,0 +1,211 @@ +import 'dart:convert'; +import 'dart:io'; + +void main() { + final parser = _OutputParser(); + + stdin + .transform(utf8.decoder) + .transform(const LineSplitter()) + .listen( + parser.processLine, + onDone: () { + parser.flush(); + exitCode = parser.success ? 0 : 1; + }, + ); +} + +class _OutputParser { + final _packages = [_PackageParser()]; + + int get failed => _packages.sumBy((package) => package.failed); + int get passed => _packages.sumBy((package) => package.passed); + bool get success => failed == 0; + + void processLine(String line) { + if (!line.startsWith('{')) { + _packages.last.processPlainLine(line); + return; + } + + try { + final event = jsonDecode(line) as Map; + + if (!_packages.last.processJsonEvent(event)) { + _OutputWriter.info(line); + } + + if (event['type'] == 'done') { + _packages.add(_PackageParser()); + } + } on FormatException { + _OutputWriter.info(line); + return; + } + } + + void flush() { + _packages.last.flush(); + _OutputWriter.info(''); + final logLevel = success ? _LogLevel.success : _LogLevel.failure; + _OutputWriter.log(logLevel, 'Total: $passed passed, $failed failed'); + } +} + +class _PackageParser { + static final _dependencyLinePattern = RegExp( + r'^\s+\S+ \d+\.\S+.*available\)$', + ); + + var _suppressedDependencyCount = 0; + + final _activeTests = {}; + var passed = 0; + var failed = 0; + + void processPlainLine(String line) { + if (_dependencyLinePattern.hasMatch(line)) { + _suppressedDependencyCount++; + return; + } + + flush(); + _OutputWriter.info(line); + } + + void flush() { + if (_suppressedDependencyCount > 0) { + _flushDependencyBlock(); + } + } + + bool processJsonEvent(Map event) { + final type = event['type'] as String?; + + switch (type) { + case 'start': + case 'suite': + case 'allSuites': + case 'group': + break; + + case 'testStart': + final test = event['test'] as Map?; + final id = test?['id'] as int?; + final name = test?['name'] as String?; + if (id == null || name == null) { + return false; + } + _activeTests[id] = (name: name, output: StringBuffer()); + + case 'print': + final id = event['testID'] as int?; + final test = _activeTests[id]; + if (test == null) { + return false; + } + test.output.writeln(event['message'] ?? ''); + + case 'error': + final id = event['testID'] as int?; + final test = _activeTests[id]; + if (test == null) { + return false; + } + test.output.writeln(event['error'] ?? ''); + final stack = event['stackTrace'] as String?; + if (stack != null && stack.isNotEmpty) { + test.output.writeln(stack); + } + + case 'testDone': + final id = event['testID'] as int?; + if (id == null) { + return false; + } + if (event['hidden'] == true) { + _activeTests.remove(id); + break; + } + final test = _activeTests.remove(id); + final result = event['result'] as String?; + if (result == 'success') { + passed++; + } else { + failed++; + _OutputWriter.info(''); + _OutputWriter.failure('โ”โ”โ” FAIL: ${test?.name ?? 'unknown test'}'); + final output = test?.output; + if (output != null && output.isNotEmpty) { + _OutputWriter.failure(output.toString()); + } else { + _OutputWriter.failure('โ”โ”โ” No output captured for this test.'); + } + } + + case 'done': + final logLevel = failed > 0 ? _LogLevel.failure : _LogLevel.success; + _OutputWriter.log(logLevel, '$passed passed, $failed failed'); + + default: + // unknown - pass through + return false; + } + + return true; + } + + void _flushDependencyBlock() { + _OutputWriter.info( + ' ($_suppressedDependencyCount packages have newer versions available)', + ); + _suppressedDependencyCount = 0; + } +} + +extension _SumBy on List { + int sumBy(int Function(T) selector) { + return fold(0, (sum, element) => sum + selector(element)); + } +} + +typedef _TestEntry = ({String name, StringBuffer output}); + +enum _LogLevel { info, success, failure } + +class _OutputWriter { + _OutputWriter._(); + + static const _ansiRed = '\x1B[31m'; + static const _ansiGreen = '\x1B[32m'; + static const _ansiReset = '\x1B[0m'; + + static String _colored(String message, String color) { + return '$color$message$_ansiReset'; + } + + static void info(String message) { + stdout.writeln(message); + } + + static void success(String message) { + stdout.writeln(_colored(message, _ansiGreen)); + } + + static void failure(String message) { + stderr.writeln(_colored(message, _ansiRed)); + } + + static void Function(String) logger(_LogLevel level) { + return switch (level) { + _LogLevel.info => info, + _LogLevel.success => success, + _LogLevel.failure => failure, + }; + } + + static void log(_LogLevel level, String message) { + logger(level)(message); + } +} From 1f544d628b1af5632c9617e14b4b6d27558977e4 Mon Sep 17 00:00:00 2001 From: Lukas Klingsbo Date: Wed, 23 Sep 2026 17:03:56 +0200 Subject: [PATCH 2/3] chore: Require Dart 3.13 and Flutter 3.47 as the lowest supported versions --- .github/workflows/cicd.yml | 2 +- packages/flame_mini_sprite/example/pubspec.yaml | 2 +- packages/flame_mini_sprite/pubspec.yaml | 2 +- packages/flutter_mini_sprite/example/pubspec.yaml | 2 +- packages/flutter_mini_sprite/pubspec.yaml | 2 +- packages/mini_sprite/pubspec.yaml | 2 +- .../lib/l10n/arb/app_localizations_en.dart | 1 + packages/mini_sprite_editor/pubspec.yaml | 2 +- packages/mini_treasure_quest/pubspec.yaml | 2 +- pubspec.yaml | 6 +++--- 10 files changed, 12 insertions(+), 11 deletions(-) diff --git a/.github/workflows/cicd.yml b/.github/workflows/cicd.yml index 1ceba2c..3dab0ef 100644 --- a/.github/workflows/cicd.yml +++ b/.github/workflows/cicd.yml @@ -9,7 +9,7 @@ on: env: - FLUTTER_MIN_VERSION: '3.35.0' + FLUTTER_MIN_VERSION: '3.47.0' jobs: # BEGIN LINTING STAGE diff --git a/packages/flame_mini_sprite/example/pubspec.yaml b/packages/flame_mini_sprite/example/pubspec.yaml index dcff423..3e0aadc 100644 --- a/packages/flame_mini_sprite/example/pubspec.yaml +++ b/packages/flame_mini_sprite/example/pubspec.yaml @@ -7,7 +7,7 @@ publish_to: 'none' version: 1.0.0+1 environment: - sdk: ">=3.9.0 <4.0.0" + sdk: ">=3.13.0 <4.0.0" dependencies: flame: ">=1.32.0 <1.38.0" diff --git a/packages/flame_mini_sprite/pubspec.yaml b/packages/flame_mini_sprite/pubspec.yaml index 8a8dcb1..f633105 100644 --- a/packages/flame_mini_sprite/pubspec.yaml +++ b/packages/flame_mini_sprite/pubspec.yaml @@ -5,7 +5,7 @@ version: 0.0.2 homepage: https://github.com/bluefireteam/mini_sprite environment: - sdk: ">=3.9.0 <4.0.0" + sdk: ">=3.13.0 <4.0.0" dependencies: flame: ">=1.32.0 <1.38.0" diff --git a/packages/flutter_mini_sprite/example/pubspec.yaml b/packages/flutter_mini_sprite/example/pubspec.yaml index 7ab4063..1fb5204 100644 --- a/packages/flutter_mini_sprite/example/pubspec.yaml +++ b/packages/flutter_mini_sprite/example/pubspec.yaml @@ -7,7 +7,7 @@ publish_to: 'none' version: 1.0.0+1 environment: - sdk: ">=3.9.0 <4.0.0" + sdk: ">=3.13.0 <4.0.0" dependencies: dashbook: ^0.1.10 diff --git a/packages/flutter_mini_sprite/pubspec.yaml b/packages/flutter_mini_sprite/pubspec.yaml index 1731659..2b5d73b 100644 --- a/packages/flutter_mini_sprite/pubspec.yaml +++ b/packages/flutter_mini_sprite/pubspec.yaml @@ -5,7 +5,7 @@ homepage: https://github.com/bluefireteam/mini_sprite version: 0.0.1+1 environment: - sdk: ">=3.9.0 <4.0.0" + sdk: ">=3.13.0 <4.0.0" dependencies: flutter: diff --git a/packages/mini_sprite/pubspec.yaml b/packages/mini_sprite/pubspec.yaml index 6322de1..2932c0e 100644 --- a/packages/mini_sprite/pubspec.yaml +++ b/packages/mini_sprite/pubspec.yaml @@ -5,7 +5,7 @@ version: 0.1.0 homepage: https://github.com/bluefireteam/mini_sprite environment: - sdk: ">=3.9.0 <4.0.0" + sdk: ">=3.13.0 <4.0.0" dependencies: equatable: ^3.0.0 diff --git a/packages/mini_sprite_editor/lib/l10n/arb/app_localizations_en.dart b/packages/mini_sprite_editor/lib/l10n/arb/app_localizations_en.dart index 4525b63..9c450fa 100644 --- a/packages/mini_sprite_editor/lib/l10n/arb/app_localizations_en.dart +++ b/packages/mini_sprite_editor/lib/l10n/arb/app_localizations_en.dart @@ -1,5 +1,6 @@ // ignore: unused_import import 'package:intl/intl.dart' as intl; + import 'app_localizations.dart'; // ignore_for_file: type=lint diff --git a/packages/mini_sprite_editor/pubspec.yaml b/packages/mini_sprite_editor/pubspec.yaml index 077b3db..baf8f5a 100644 --- a/packages/mini_sprite_editor/pubspec.yaml +++ b/packages/mini_sprite_editor/pubspec.yaml @@ -5,7 +5,7 @@ version: 0.0.1+1 publish_to: none environment: - sdk: ">=3.9.0 <4.0.0" + sdk: ">=3.13.0 <4.0.0" dependencies: bloc: ^8.1.4 diff --git a/packages/mini_treasure_quest/pubspec.yaml b/packages/mini_treasure_quest/pubspec.yaml index 66b8ee3..72e56c0 100644 --- a/packages/mini_treasure_quest/pubspec.yaml +++ b/packages/mini_treasure_quest/pubspec.yaml @@ -7,7 +7,7 @@ publish_to: 'none' version: 0.0.1+1 environment: - sdk: ">=3.9.0 <4.0.0" + sdk: ">=3.13.0 <4.0.0" dependencies: flame: ">=1.32.0 <1.38.0" diff --git a/pubspec.yaml b/pubspec.yaml index c65e88a..0931b0a 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -10,7 +10,7 @@ workspace: - packages/mini_treasure_quest environment: - sdk: ">=3.9.0 <4.0.0" + sdk: ">=3.13.0 <4.0.0" dev_dependencies: melos: ^8.1.0 @@ -27,8 +27,8 @@ melos: bootstrap: environment: - sdk: ">=3.9.0 <4.0.0" - flutter: ">=3.35.0" + sdk: ">=3.13.0 <4.0.0" + flutter: ">=3.47.0" scripts: lint:all: From a01a87041af13468c00e47de853d7fab398b310a Mon Sep 17 00:00:00 2001 From: Lukas Klingsbo Date: Wed, 23 Sep 2026 17:08:21 +0200 Subject: [PATCH 3/3] chore: Apply dart fix for the lints enabled by very_good_analysis on Dart 3.13 --- .../test/src/flame_mini_sprite_test.dart | 3 +- .../lib/src/flutter_mini_sprite.dart | 4 +- .../mini_sprite/lib/src/mini_library.dart | 6 +-- packages/mini_sprite/lib/src/mini_map.dart | 8 ++-- packages/mini_sprite/lib/src/mini_sprite.dart | 6 +-- .../mini_sprite/test/src/mini_map_test.dart | 39 +++++++++---------- packages/mini_treasure_quest/lib/assets.dart | 2 +- .../lib/game/entities/player.dart | 2 +- .../lib/game/entities/tile.dart | 2 +- .../lib/game/entities/treasure.dart | 2 +- .../mini_treasure_quest/lib/game/game.dart | 2 +- .../lib/game/views/game_view.dart | 4 +- .../lib/game/views/win_dialog.dart | 7 ++-- packages/mini_treasure_quest/lib/main.dart | 5 +-- packages/mini_treasure_quest/lib/sprites.dart | 3 +- .../lib/stages/views/stages_view.dart | 4 +- .../lib/title/views/title_view.dart | 4 +- 17 files changed, 47 insertions(+), 56 deletions(-) diff --git a/packages/flame_mini_sprite/test/src/flame_mini_sprite_test.dart b/packages/flame_mini_sprite/test/src/flame_mini_sprite_test.dart index 0a12669..fb4ae51 100644 --- a/packages/flame_mini_sprite/test/src/flame_mini_sprite_test.dart +++ b/packages/flame_mini_sprite/test/src/flame_mini_sprite_test.dart @@ -38,8 +38,7 @@ void main() { }); group('FlameMiniLibraryX', () { - const raw = - '''flower|16,16;20,-1;1,0;7,-1;1,0;8,-1;7,0;8,-1;1,0;7,-1;1,0;7,-1;1,0;7,-1;1,0;7,-1;1,0;1,-1;2,0;1,-1;2,0;1,-1;1,0;6,-1;1,0;9,-1;1,0;5,-1;1,0;2,-1;1,0;3,-1;1,0;2,-1;1,0;5,-1;1,0;2,-1;1,0;3,-1;1,0;2,-1;1,0;5,-1;1,0;2,-1;1,0;3,-1;1,0;2,-1;1,0;5,-1;1,0;2,-1;1,0;3,-1;1,0;2,-1;1,0;5,-1;1,0;9,-1;1,0;6,-1;9,0;51,-1 + const raw = '''flower|16,16;20,-1;1,0;7,-1;1,0;8,-1;7,0;8,-1;1,0;7,-1;1,0;7,-1;1,0;7,-1;1,0;7,-1;1,0;1,-1;2,0;1,-1;2,0;1,-1;1,0;6,-1;1,0;9,-1;1,0;5,-1;1,0;2,-1;1,0;3,-1;1,0;2,-1;1,0;5,-1;1,0;2,-1;1,0;3,-1;1,0;2,-1;1,0;5,-1;1,0;2,-1;1,0;3,-1;1,0;2,-1;1,0;5,-1;1,0;2,-1;1,0;3,-1;1,0;2,-1;1,0;5,-1;1,0;9,-1;1,0;6,-1;9,0;51,-1 ground|16,16;16,0;1,-1;15,0;224,-1'''; testGolden('renders correctly the ground', (game) async { diff --git a/packages/flutter_mini_sprite/lib/src/flutter_mini_sprite.dart b/packages/flutter_mini_sprite/lib/src/flutter_mini_sprite.dart index be09b57..485b935 100644 --- a/packages/flutter_mini_sprite/lib/src/flutter_mini_sprite.dart +++ b/packages/flutter_mini_sprite/lib/src/flutter_mini_sprite.dart @@ -8,7 +8,7 @@ import 'package:mini_sprite/mini_sprite.dart'; /// {@endtemplate} class MiniSpriteWidget extends StatelessWidget { /// {@macro mini_sprite_widget} - const MiniSpriteWidget({ + const new({ required this.sprite, this.pixelSize = 1, this.palette = const [Color(0xFFFFFFFF), Color(0xFF000000)], @@ -40,7 +40,7 @@ class MiniSpriteWidget extends StatelessWidget { } class _MiniSpritePainter extends CustomPainter { - _MiniSpritePainter(this.sprite, this.pixelSize, this.palette); + new(this.sprite, this.pixelSize, this.palette); final MiniSprite sprite; final double pixelSize; diff --git a/packages/mini_sprite/lib/src/mini_library.dart b/packages/mini_sprite/lib/src/mini_library.dart index 5b3ba62..4c58298 100644 --- a/packages/mini_sprite/lib/src/mini_library.dart +++ b/packages/mini_sprite/lib/src/mini_library.dart @@ -8,15 +8,15 @@ import 'package:mini_sprite/mini_sprite.dart'; /// {@endtemplate} class MiniLibrary extends Equatable { /// {@macro mini_library} - const MiniLibrary(this.sprites); + const new(this.sprites); /// {@macro mini_library} - MiniLibrary.empty() : sprites = {}; + new empty() : sprites = {}; /// {@macro mini_library} /// /// Returns a [MiniLibrary] from the serialized data. - factory MiniLibrary.fromDataString(String value) { + factory fromDataString(String value) { const lineSplitter = LineSplitter(); final lines = lineSplitter.convert(value); diff --git a/packages/mini_sprite/lib/src/mini_map.dart b/packages/mini_sprite/lib/src/mini_map.dart index c960792..2044548 100644 --- a/packages/mini_sprite/lib/src/mini_map.dart +++ b/packages/mini_sprite/lib/src/mini_map.dart @@ -8,14 +8,12 @@ import 'package:equatable/equatable.dart'; /// {@endtemplate} class MiniMap extends Equatable { /// {@macro mini_map} - const MiniMap({required this.objects, int? width, int? height}) - : _width = width, - _height = height; + const new({required this.objects, this._width, this._height}); /// {@macro mini_map} /// /// Returns a new [MiniMap] parsed from the raw data. - factory MiniMap.fromDataString(String data) { + factory fromDataString(String data) { final dynamic dataRaw = jsonDecode(data); late Map objectsRaw; @@ -98,7 +96,7 @@ class MiniMap extends Equatable { /// {@endtemplate} class MapPosition extends Equatable { /// {@macro map_position} - const MapPosition(this.x, this.y); + const new(this.x, this.y); /// The x position. final int x; diff --git a/packages/mini_sprite/lib/src/mini_sprite.dart b/packages/mini_sprite/lib/src/mini_sprite.dart index 6987401..978ab73 100644 --- a/packages/mini_sprite/lib/src/mini_sprite.dart +++ b/packages/mini_sprite/lib/src/mini_sprite.dart @@ -7,18 +7,18 @@ import 'package:equatable/equatable.dart'; /// {@endtemplate} class MiniSprite extends Equatable { /// {@macro mini_sprite} - const MiniSprite(this.pixels); + const new(this.pixels); /// {@macro mini_sprite} /// /// Creates an empty sprite with the given width and height. - MiniSprite.empty(int width, int height) + new empty(int width, int height) : pixels = List.generate(height, (_) => List.generate(width, (_) => -1)); /// {@macro mini_sprite} /// /// Returns a [MiniSprite] from the serialized data. - factory MiniSprite.fromDataString(String value) { + factory fromDataString(String value) { final blocks = value.split(';'); final size = blocks.removeAt(0).split(','); diff --git a/packages/mini_sprite/test/src/mini_map_test.dart b/packages/mini_sprite/test/src/mini_map_test.dart index 7c2c0ce..85d2a6f 100644 --- a/packages/mini_sprite/test/src/mini_map_test.dart +++ b/packages/mini_sprite/test/src/mini_map_test.dart @@ -39,29 +39,26 @@ void main() { ); }); - test( - 'fromDataString returns the correct instance with width and height', - () { - const data = - // Ignore for tests - // ignore: lines_longer_than_80_chars - '{"width":2,"height":2,"objects":[{"x": 0, "y": 0, "data": {"sprite": "player"}}]}'; - final instance = MiniMap.fromDataString(data); + test('fromDataString parses the width and height', () { + const data = + // Ignore for tests + // ignore: lines_longer_than_80_chars + '{"width":2,"height":2,"objects":[{"x": 0, "y": 0, "data": {"sprite": "player"}}]}'; + final instance = MiniMap.fromDataString(data); - expect( - instance, - MiniMap( - width: 2, - height: 2, - objects: { - const MapPosition(0, 0): const { - 'sprite': 'player', - }, + expect( + instance, + MiniMap( + width: 2, + height: 2, + objects: { + const MapPosition(0, 0): const { + 'sprite': 'player', }, - ), - ); - }, - ); + }, + ), + ); + }); }); test('toDataString returns the correct serialized data', () { diff --git a/packages/mini_treasure_quest/lib/assets.dart b/packages/mini_treasure_quest/lib/assets.dart index 5252a40..7b2e8ce 100644 --- a/packages/mini_treasure_quest/lib/assets.dart +++ b/packages/mini_treasure_quest/lib/assets.dart @@ -5,7 +5,7 @@ import 'package:mini_sprite/mini_sprite.dart'; import 'package:mini_treasure_quest/sprites.dart'; class Assets { - Assets._(); + new _(); static final Assets _instance = Assets._(); diff --git a/packages/mini_treasure_quest/lib/game/entities/player.dart b/packages/mini_treasure_quest/lib/game/entities/player.dart index d1e05d3..ef5c00f 100644 --- a/packages/mini_treasure_quest/lib/game/entities/player.dart +++ b/packages/mini_treasure_quest/lib/game/entities/player.dart @@ -5,7 +5,7 @@ import 'package:mini_treasure_quest/assets.dart'; import 'package:mini_treasure_quest/mini_treasure_quest.dart'; class Player extends forge.BodyComponent { - Player({required this.initialPosition}); + new({required this.initialPosition}); final Vector2 initialPosition; diff --git a/packages/mini_treasure_quest/lib/game/entities/tile.dart b/packages/mini_treasure_quest/lib/game/entities/tile.dart index d1f020a..d3942f2 100644 --- a/packages/mini_treasure_quest/lib/game/entities/tile.dart +++ b/packages/mini_treasure_quest/lib/game/entities/tile.dart @@ -4,7 +4,7 @@ import 'package:mini_treasure_quest/assets.dart'; import 'package:mini_treasure_quest/mini_treasure_quest.dart'; class Tile extends forge.BodyComponent { - Tile({required this.initialPosition, required this.sprite}); + new({required this.initialPosition, required this.sprite}); final Vector2 initialPosition; final String sprite; diff --git a/packages/mini_treasure_quest/lib/game/entities/treasure.dart b/packages/mini_treasure_quest/lib/game/entities/treasure.dart index 0153f21..e074fc1 100644 --- a/packages/mini_treasure_quest/lib/game/entities/treasure.dart +++ b/packages/mini_treasure_quest/lib/game/entities/treasure.dart @@ -6,7 +6,7 @@ import 'package:mini_treasure_quest/mini_treasure_quest.dart'; class Treasure extends forge.BodyComponent with forge.ContactCallbacks { - Treasure({required this.initialPosition}); + new({required this.initialPosition}); final Vector2 initialPosition; diff --git a/packages/mini_treasure_quest/lib/game/game.dart b/packages/mini_treasure_quest/lib/game/game.dart index b7c3f15..959370a 100644 --- a/packages/mini_treasure_quest/lib/game/game.dart +++ b/packages/mini_treasure_quest/lib/game/game.dart @@ -12,7 +12,7 @@ import 'package:mini_treasure_quest/game/views/view.dart'; const double tileSize = 2; class MiniTreasureQuest extends Forge2DGame with HasKeyboardHandlerComponents { - MiniTreasureQuest({required this.stage}); + new({required this.stage}); final rng = Random(10); diff --git a/packages/mini_treasure_quest/lib/game/views/game_view.dart b/packages/mini_treasure_quest/lib/game/views/game_view.dart index a8a20ef..4874ca9 100644 --- a/packages/mini_treasure_quest/lib/game/views/game_view.dart +++ b/packages/mini_treasure_quest/lib/game/views/game_view.dart @@ -3,7 +3,7 @@ import 'package:flutter/material.dart'; import 'package:mini_treasure_quest/game/game.dart'; class GamePage extends StatelessWidget { - const GamePage({required this.stage, super.key}); + const new({required this.stage, super.key}); final int stage; @@ -22,7 +22,7 @@ class GamePage extends StatelessWidget { } class GameView extends StatelessWidget { - const GameView({required this.stage, super.key}); + const new({required this.stage, super.key}); final int stage; diff --git a/packages/mini_treasure_quest/lib/game/views/win_dialog.dart b/packages/mini_treasure_quest/lib/game/views/win_dialog.dart index 757b181..8d99641 100644 --- a/packages/mini_treasure_quest/lib/game/views/win_dialog.dart +++ b/packages/mini_treasure_quest/lib/game/views/win_dialog.dart @@ -4,7 +4,7 @@ import 'package:mini_treasure_quest/game/views/game_view.dart'; import 'package:mini_treasure_quest/stages/stages.dart'; class WinDialog extends StatelessWidget { - const WinDialog({required this.stage, super.key}); + const new({required this.stage, super.key}); final int stage; @@ -36,9 +36,8 @@ class WinDialog extends StatelessWidget { ElevatedButton( autofocus: true, onPressed: () { - Navigator.of( - context, - ).pushReplacement(GamePage.route(stage + 1)); + Navigator.of(context) + .pushReplacement(GamePage.route(stage + 1)); }, child: const Text('Next'), ), diff --git a/packages/mini_treasure_quest/lib/main.dart b/packages/mini_treasure_quest/lib/main.dart index 4614bda..a5aab03 100644 --- a/packages/mini_treasure_quest/lib/main.dart +++ b/packages/mini_treasure_quest/lib/main.dart @@ -29,9 +29,8 @@ ThemeData _buildTheme(Brightness brightness) { return baseTheme.copyWith( primaryColor: Colors.white, - textTheme: GoogleFonts.pressStart2pTextTheme( - baseTheme.textTheme, - ).apply(bodyColor: Colors.white, displayColor: Colors.white), + textTheme: GoogleFonts.pressStart2pTextTheme(baseTheme.textTheme) + .apply(bodyColor: Colors.white, displayColor: Colors.white), ); } diff --git a/packages/mini_treasure_quest/lib/sprites.dart b/packages/mini_treasure_quest/lib/sprites.dart index 4dbe91b..8bfa2d4 100644 --- a/packages/mini_treasure_quest/lib/sprites.dart +++ b/packages/mini_treasure_quest/lib/sprites.dart @@ -1,8 +1,7 @@ // Not relevant here // ignore_for_file: lines_longer_than_80_chars, leading_newlines_in_multiline_strings -const library = - '''LOGO|28,38;79,0;1,1;1,0;1,1;1,0;1,1;2,0;1,1;6,0;1,1;22,0;1,1;1,0;1,1;1,0;1,1;1,0;1,1;3,0;1,1;1,0;1,1;27,0;1,1;1,0;1,1;1,0;1,1;1,0;1,1;2,0;1,1;1,0;1,1;1,0;1,1;24,0;1,1;1,0;1,1;1,0;1,1;1,0;1,1;2,0;1,1;1,0;1,1;1,0;1,1;24,0;1,1;1,0;1,1;1,0;1,1;2,0;1,1;1,0;1,1;1,0;1,1;2,0;1,1;60,0;1,1;36,0;3,1;5,0;1,1;3,0;1,1;3,0;1,1;9,0;1,1;12,0;1,1;3,0;1,1;1,0;1,1;1,0;1,1;1,0;1,1;1,0;1,1;1,0;1,1;2,0;1,1;1,0;1,1;2,0;1,1;1,0;1,1;1,0;1,1;11,0;1,1;2,0;1,1;2,0;1,1;3,0;3,1;2,0;1,1;1,0;1,1;1,0;1,1;1,0;1,1;2,0;1,1;14,0;1,1;1,0;1,1;3,0;2,1;1,0;1,1;1,0;1,1;1,0;1,1;3,0;1,1;2,0;1,1;3,0;2,1;64,0;1,1;22,0;1,1;7,0;1,1;3,0;1,1;1,0;3,1;8,0;4,1;8,0;1,1;1,0;1,1;1,0;1,1;1,0;1,1;1,0;1,1;1,0;1,1;1,0;1,1;3,0;1,1;8,0;2,1;1,0;3,1;7,0;1,1;1,0;1,1;1,0;1,1;1,0;1,1;1,0;1,1;4,0;1,1;2,0;1,1;7,0;2,1;2,0;4,1;7,0;1,1;3,0;1,1;3,0;2,1;1,0;1,1;4,0;1,1;6,0;5,1;1,0;2,1;8,0;1,1;20,0;3,1;1,0;1,1;2,0;2,1;11,0;1,1;16,0;1,1;1,0;7,1;6,0;1,1;4,0;1,1;1,0;1,1;1,0;7,1;1,0;2,1;1,0;1,1;3,0;1,1;1,0;5,1;3,0;2,1;3,0;8,1;1,0;2,1;4,0;4,1;5,0;2,1;6,0;2,1;5,0;5,1;5,0;3,1;5,0;4,1;4,0;6,1;4,0;36,1;1,0;1,1;2,0;1,1;1,0;1,1;1,0;1,1;1,0;1,1;1,0;1,1;2,0;1,1;4,0;1,1;3,0;1,1;2,0;1,1;4,0;1,1;2,0;1,1;2,0;1,1;1,0;1,1;2,0;1,1;1,0;1,1;1,0;1,1;1,0;15,1;2,0;2,1;4,0;1,1;2,0;1,1;1,0;1,1;1,0;1,1;2,0;1,1;4,0;1,1;3,0;1,1;10,0;1,1;3,0;1,1;2,0;1,1;2,0;1,1;1,0;1,1 +const library = '''LOGO|28,38;79,0;1,1;1,0;1,1;1,0;1,1;2,0;1,1;6,0;1,1;22,0;1,1;1,0;1,1;1,0;1,1;1,0;1,1;3,0;1,1;1,0;1,1;27,0;1,1;1,0;1,1;1,0;1,1;1,0;1,1;2,0;1,1;1,0;1,1;1,0;1,1;24,0;1,1;1,0;1,1;1,0;1,1;1,0;1,1;2,0;1,1;1,0;1,1;1,0;1,1;24,0;1,1;1,0;1,1;1,0;1,1;2,0;1,1;1,0;1,1;1,0;1,1;2,0;1,1;60,0;1,1;36,0;3,1;5,0;1,1;3,0;1,1;3,0;1,1;9,0;1,1;12,0;1,1;3,0;1,1;1,0;1,1;1,0;1,1;1,0;1,1;1,0;1,1;1,0;1,1;2,0;1,1;1,0;1,1;2,0;1,1;1,0;1,1;1,0;1,1;11,0;1,1;2,0;1,1;2,0;1,1;3,0;3,1;2,0;1,1;1,0;1,1;1,0;1,1;1,0;1,1;2,0;1,1;14,0;1,1;1,0;1,1;3,0;2,1;1,0;1,1;1,0;1,1;1,0;1,1;3,0;1,1;2,0;1,1;3,0;2,1;64,0;1,1;22,0;1,1;7,0;1,1;3,0;1,1;1,0;3,1;8,0;4,1;8,0;1,1;1,0;1,1;1,0;1,1;1,0;1,1;1,0;1,1;1,0;1,1;1,0;1,1;3,0;1,1;8,0;2,1;1,0;3,1;7,0;1,1;1,0;1,1;1,0;1,1;1,0;1,1;1,0;1,1;4,0;1,1;2,0;1,1;7,0;2,1;2,0;4,1;7,0;1,1;3,0;1,1;3,0;2,1;1,0;1,1;4,0;1,1;6,0;5,1;1,0;2,1;8,0;1,1;20,0;3,1;1,0;1,1;2,0;2,1;11,0;1,1;16,0;1,1;1,0;7,1;6,0;1,1;4,0;1,1;1,0;1,1;1,0;7,1;1,0;2,1;1,0;1,1;3,0;1,1;1,0;5,1;3,0;2,1;3,0;8,1;1,0;2,1;4,0;4,1;5,0;2,1;6,0;2,1;5,0;5,1;5,0;3,1;5,0;4,1;4,0;6,1;4,0;36,1;1,0;1,1;2,0;1,1;1,0;1,1;1,0;1,1;1,0;1,1;1,0;1,1;2,0;1,1;4,0;1,1;3,0;1,1;2,0;1,1;4,0;1,1;2,0;1,1;2,0;1,1;1,0;1,1;2,0;1,1;1,0;1,1;1,0;1,1;1,0;15,1;2,0;2,1;4,0;1,1;2,0;1,1;1,0;1,1;1,0;1,1;2,0;1,1;4,0;1,1;3,0;1,1;10,0;1,1;3,0;1,1;2,0;1,1;2,0;1,1;1,0;1,1 PLAYER|12,12;3,0;7,1;4,0;9,1;2,0;5,1;1,0;2,1;1,0;9,1;2,0;9,1;1,0;2,1;1,0;15,1;10,0;2,1;10,0;2,1;10,0;2,1;5,0;4,1;1,0;2,1;10,0;13,1 SIMPLE_GROUND|12,12;12,1;3,0;2,1;5,0;1,1;14,0;1,1;25,0;1,1;3,0;1,1;2,0;1,1;19,0;1,1;7,0;1,1;45,0 LEFT_GROUND|12,12;7,0;1,1;1,0;1,1;1,0;1,1;11,0;1,1;11,0;1,1;8,0;1,1;2,0;1,1;10,0;2,1;11,0;1,1;11,0;1,1;8,0;1,1;2,0;1,1;11,0;1,1;10,0;2,1;11,0;1,1;11,0;1,1 diff --git a/packages/mini_treasure_quest/lib/stages/views/stages_view.dart b/packages/mini_treasure_quest/lib/stages/views/stages_view.dart index 5707219..6a2b253 100644 --- a/packages/mini_treasure_quest/lib/stages/views/stages_view.dart +++ b/packages/mini_treasure_quest/lib/stages/views/stages_view.dart @@ -3,7 +3,7 @@ import 'package:mini_treasure_quest/game/stages.dart'; import 'package:mini_treasure_quest/game/views/view.dart'; class StagesPage extends StatelessWidget { - const StagesPage({super.key}); + const new({super.key}); static Route route() { return MaterialPageRoute(builder: (_) => const StagesPage()); @@ -16,7 +16,7 @@ class StagesPage extends StatelessWidget { } class StagesView extends StatelessWidget { - const StagesView({super.key}); + const new({super.key}); @override Widget build(BuildContext context) { diff --git a/packages/mini_treasure_quest/lib/title/views/title_view.dart b/packages/mini_treasure_quest/lib/title/views/title_view.dart index 1d33619..1ac2a8b 100644 --- a/packages/mini_treasure_quest/lib/title/views/title_view.dart +++ b/packages/mini_treasure_quest/lib/title/views/title_view.dart @@ -4,7 +4,7 @@ import 'package:mini_treasure_quest/assets.dart'; import 'package:mini_treasure_quest/stages/stages.dart'; class TitlePage extends StatelessWidget { - const TitlePage({super.key}); + const new({super.key}); static Route route() { return MaterialPageRoute(builder: (_) => const TitlePage()); @@ -17,7 +17,7 @@ class TitlePage extends StatelessWidget { } class TitleView extends StatelessWidget { - const TitleView({super.key}); + const new({super.key}); @override Widget build(BuildContext context) {