brick-engine-js 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env.local.example +2 -0
- package/.github/workflows/publish.yml +73 -0
- package/.prettierignore +2 -0
- package/.prettierrc.json +8 -0
- package/README.adoc +84 -0
- package/dist/8e23286c2fdf41fd795f.svg +32 -0
- package/dist/CNAME +1 -0
- package/dist/app.js +2 -0
- package/dist/app.js.map +1 -0
- package/dist/brick-engine.js +2 -0
- package/dist/brick-engine.js.map +1 -0
- package/dist/config/configs.d.ts +180 -0
- package/dist/config/configs.test.d.ts +1 -0
- package/dist/config/env.d.ts +2 -0
- package/dist/config/env.test.d.ts +1 -0
- package/dist/config/styles.d.ts +0 -0
- package/dist/core/Game.d.ts +107 -0
- package/dist/core/Game.test.d.ts +1 -0
- package/dist/core/InitialStateSnapshot.d.ts +19 -0
- package/dist/core/InitialStateSnapshot.test.d.ts +1 -0
- package/dist/core/helpers/CellHelper.d.ts +13 -0
- package/dist/core/helpers/CellHelper.test.d.ts +1 -0
- package/dist/core/helpers/ControlInputHandlerHelper.d.ts +32 -0
- package/dist/core/helpers/ControlInputHandlerHelper.test.d.ts +1 -0
- package/dist/core/helpers/CoordinateHelper.d.ts +54 -0
- package/dist/core/helpers/CoordinateHelper.test.d.ts +1 -0
- package/dist/core/helpers/InterfaceIdentifierHelper.d.ts +7 -0
- package/dist/core/helpers/InterfaceIdentifierHelper.test.d.ts +1 -0
- package/dist/core/helpers/RelativeValuesHelper.d.ts +23 -0
- package/dist/core/helpers/RelativeValuesHelper.test.d.ts +1 -0
- package/dist/core/module/control/GameControl.d.ts +62 -0
- package/dist/core/module/control/GameControl.test.d.ts +1 -0
- package/dist/core/module/control/GameControlKeyBinding.d.ts +36 -0
- package/dist/core/module/control/GameControlKeyBinding.test.d.ts +1 -0
- package/dist/core/module/grid/GameGrid.d.ts +399 -0
- package/dist/core/module/grid/GameGrid.test.d.ts +1 -0
- package/dist/core/module/grid/GameHudGrid.d.ts +24 -0
- package/dist/core/module/grid/GameHudGrid.test.d.ts +1 -0
- package/dist/core/module/grid/engines/GridAnalysisEngine.d.ts +29 -0
- package/dist/core/module/grid/engines/GridAnalysisEngine.test.d.ts +1 -0
- package/dist/core/module/grid/engines/GridLineEngine.d.ts +56 -0
- package/dist/core/module/grid/engines/GridLineEngine.test.d.ts +1 -0
- package/dist/core/module/grid/engines/GridMovementEngine.d.ts +29 -0
- package/dist/core/module/grid/engines/GridMovementEngine.test.d.ts +1 -0
- package/dist/core/module/grid/engines/GridRegionEngine.d.ts +26 -0
- package/dist/core/module/grid/engines/GridRegionEngine.test.d.ts +1 -0
- package/dist/core/module/grid/engines/GridTransformEngine.d.ts +24 -0
- package/dist/core/module/grid/engines/GridTransformEngine.test.d.ts +1 -0
- package/dist/core/module/renderer/DisplayRenderer.d.ts +51 -0
- package/dist/core/module/renderer/DisplayRenderer.test.d.ts +1 -0
- package/dist/core/module/renderer/GameRenderer.d.ts +59 -0
- package/dist/core/module/renderer/GameRenderer.test.d.ts +1 -0
- package/dist/core/module/renderer/HudRenderer.d.ts +56 -0
- package/dist/core/module/renderer/HudRenderer.test.d.ts +1 -0
- package/dist/core/module/score/GameScore.d.ts +117 -0
- package/dist/core/module/score/GameScore.test.d.ts +1 -0
- package/dist/core/module/session/GameSession.d.ts +20 -0
- package/dist/core/module/session/GameSession.test.d.ts +1 -0
- package/dist/core/module/sound/GameSound.d.ts +85 -0
- package/dist/core/module/sound/GameSound.test.d.ts +1 -0
- package/dist/core/module/state/GameState.d.ts +172 -0
- package/dist/core/module/state/GameState.test.d.ts +1 -0
- package/dist/core/module/text/GameText.d.ts +87 -0
- package/dist/core/module/text/GameText.test.d.ts +1 -0
- package/dist/core/module/time/GameTime.d.ts +76 -0
- package/dist/core/module/time/GameTime.test.d.ts +1 -0
- package/dist/core/types/Interfaces.d.ts +53 -0
- package/dist/core/types/Types.d.ts +114 -0
- package/dist/core/types/enums.d.ts +106 -0
- package/dist/core/types/modules.d.ts +723 -0
- package/dist/css/app.743066d8e4172b0e73f9.css +824 -0
- package/dist/css/app.743066d8e4172b0e73f9.css.map +1 -0
- package/dist/docs/GAME_DEVELOPER_GUIDE.html +727 -0
- package/dist/docs/brick-engine-guide.html +610 -0
- package/dist/docs/diagrams/lifecycle.mmd +19 -0
- package/dist/docs/documentation_style_guide.html +994 -0
- package/dist/docs/getting-started.html +648 -0
- package/dist/docs/images/lifecycle.svg +1 -0
- package/dist/docs/index.html +593 -0
- package/dist/docs/jsdoc_standard.html +656 -0
- package/dist/docs/publishing.html +573 -0
- package/dist/docs/reference/enums/Color.html +533 -0
- package/dist/docs/reference/enums/ControlEventType.html +505 -0
- package/dist/docs/reference/enums/ControlKey.html +529 -0
- package/dist/docs/reference/enums/FontAlignment.html +545 -0
- package/dist/docs/reference/enums/FontSize.html +517 -0
- package/dist/docs/reference/enums/Sound.html +558 -0
- package/dist/docs/reference/enums/StateProperty.html +525 -0
- package/dist/docs/reference/helpers/CellHelper.html +520 -0
- package/dist/docs/reference/helpers/ControlInputHandlerHelper.html +569 -0
- package/dist/docs/reference/helpers/CoordinateHelper.html +703 -0
- package/dist/docs/reference/helpers/RelativeValuesHelper.html +560 -0
- package/dist/docs/reference/interfaces/Debuggable.html +501 -0
- package/dist/docs/reference/interfaces/GameModules.html +544 -0
- package/dist/docs/reference/interfaces/Initializable.html +495 -0
- package/dist/docs/reference/interfaces/RendererInitializable.html +517 -0
- package/dist/docs/reference/interfaces/StateSyncable.html +542 -0
- package/dist/docs/reference/interfaces/modules/Control.html +648 -0
- package/dist/docs/reference/interfaces/modules/Grid.html +1256 -0
- package/dist/docs/reference/interfaces/modules/Renderer.html +522 -0
- package/dist/docs/reference/interfaces/modules/RendererComposite.html +577 -0
- package/dist/docs/reference/interfaces/modules/Score.html +669 -0
- package/dist/docs/reference/interfaces/modules/Session.html +585 -0
- package/dist/docs/reference/interfaces/modules/State.html +897 -0
- package/dist/docs/reference/interfaces/modules/Text.html +668 -0
- package/dist/docs/reference/interfaces/modules/Time.html +684 -0
- package/dist/docs/reference/modules/Debugger.html +579 -0
- package/dist/docs/reference/modules/DisplayRenderer.html +557 -0
- package/dist/docs/reference/modules/Game.html +909 -0
- package/dist/docs/reference/modules/GameControl.html +716 -0
- package/dist/docs/reference/modules/GameGrid.html +1910 -0
- package/dist/docs/reference/modules/GameHudGrid.html +508 -0
- package/dist/docs/reference/modules/GameMenu.html +538 -0
- package/dist/docs/reference/modules/GameRenderer.html +589 -0
- package/dist/docs/reference/modules/GameScore.html +664 -0
- package/dist/docs/reference/modules/GameSession.html +533 -0
- package/dist/docs/reference/modules/GameSound.html +636 -0
- package/dist/docs/reference/modules/GameState.html +922 -0
- package/dist/docs/reference/modules/GameText.html +701 -0
- package/dist/docs/reference/modules/GameTime.html +696 -0
- package/dist/docs/reference/modules/HudRenderer.html +568 -0
- package/dist/docs/reference/modules/InitialStateSnapshot.html +557 -0
- package/dist/docs/reference/modules/SessionModal.html +520 -0
- package/dist/docs/reference/types/Axis.html +505 -0
- package/dist/docs/reference/types/Cell.html +514 -0
- package/dist/docs/reference/types/ControlCallback.html +488 -0
- package/dist/docs/reference/types/Coordinate.html +510 -0
- package/dist/docs/reference/types/GameEntry.html +514 -0
- package/dist/docs/reference/types/GameEvent.html +514 -0
- package/dist/docs/reference/types/Piece.html +506 -0
- package/dist/docs/reference/types/RendererMetrics.html +514 -0
- package/dist/docs/reference/types/Vector.html +509 -0
- package/dist/docs/testing_best_practices.html +770 -0
- package/dist/favicon.ico +0 -0
- package/dist/fonts/digital-7.monoitalic.ttf +0 -0
- package/dist/images/cell.svg +32 -0
- package/dist/images/close.png +0 -0
- package/dist/images/games.png +0 -0
- package/dist/images/github.png +0 -0
- package/dist/images/letter-a.png +0 -0
- package/dist/images/letter-d.png +0 -0
- package/dist/images/letter-j.png +0 -0
- package/dist/images/letter-s.png +0 -0
- package/dist/images/letter-w.png +0 -0
- package/dist/images/meta-image.png +0 -0
- package/dist/images/number-1.png +0 -0
- package/dist/images/number-2.png +0 -0
- package/dist/images/number-3.png +0 -0
- package/dist/images/number-4.png +0 -0
- package/dist/images/number-5.png +0 -0
- package/dist/images/number-6.png +0 -0
- package/dist/images/splash.gif +0 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.html +1 -0
- package/dist/index.test.d.ts +1 -0
- package/dist/main.d.ts +3 -0
- package/dist/main.test.d.ts +1 -0
- package/dist/menu/GameMenu.d.ts +15 -0
- package/dist/menu/GameMenu.test.d.ts +1 -0
- package/dist/menu/GameMenuSingleton.d.ts +6 -0
- package/dist/menu/GameMenuSingleton.test.d.ts +1 -0
- package/dist/menu/GameRepository.d.ts +7 -0
- package/dist/menu/GameRepository.test.d.ts +1 -0
- package/dist/menu/manager/GameManager.d.ts +6 -0
- package/dist/menu/manager/GameManager.test.d.ts +1 -0
- package/dist/sounds/sound_00.wav +0 -0
- package/dist/sounds/sound_01.wav +0 -0
- package/dist/sounds/sound_02.wav +0 -0
- package/dist/sounds/sound_03.wav +0 -0
- package/dist/sounds/sound_04.wav +0 -0
- package/dist/sounds/sound_05.wav +0 -0
- package/dist/sounds/sound_06.wav +0 -0
- package/dist/sounds/sound_07.wav +0 -0
- package/dist/sounds/sound_08.wav +0 -0
- package/dist/sounds/sound_09.wav +0 -0
- package/dist/sounds/sound_10.wav +0 -0
- package/dist/sounds/sound_11.wav +0 -0
- package/dist/sounds/sound_12.wav +0 -0
- package/dist/sounds/sound_13.wav +0 -0
- package/dist/sounds/sound_14.wav +0 -0
- package/dist/sounds/sound_15.wav +0 -0
- package/dist/types/interfaces.d.ts +5 -0
- package/dist/vendor/p5.min.js +1 -0
- package/dist/view/Debugger.d.ts +12 -0
- package/dist/view/Debugger.test.d.ts +1 -0
- package/dist/view/GameView.d.ts +101 -0
- package/dist/view/GameView.test.d.ts +1 -0
- package/dist/view/SessionModal.d.ts +12 -0
- package/dist/view/SessionModal.test.d.ts +4 -0
- package/dist/view/components/layout/ButtonLayout.d.ts +25 -0
- package/dist/view/components/layout/ButtonLayout.test.d.ts +1 -0
- package/dist/view/components/layout/ContainerLayout.d.ts +23 -0
- package/dist/view/components/layout/ContainerLayout.test.d.ts +1 -0
- package/dist/view/components/layout/FrameLayout.d.ts +11 -0
- package/dist/view/components/layout/FrameLayout.test.d.ts +1 -0
- package/dist/view/components/ui/BigButton.d.ts +13 -0
- package/dist/view/components/ui/BigButton.test.d.ts +1 -0
- package/dist/view/components/ui/Button.d.ts +12 -0
- package/dist/view/components/ui/Button.test.d.ts +1 -0
- package/dist/view/components/ui/Canvas.d.ts +22 -0
- package/dist/view/components/ui/Canvas.test.d.ts +1 -0
- package/dist/view/components/ui/SmallButton.d.ts +13 -0
- package/dist/view/components/ui/SmallButton.test.d.ts +1 -0
- package/dist/view/theme/applyColors.d.ts +10 -0
- package/dist/view/theme/applyColors.test.d.ts +1 -0
- package/dist/view/theme/dimensions.d.ts +13 -0
- package/dist/view/theme/dimensions.test.d.ts +1 -0
- package/docs/GAME_DEVELOPER_GUIDE.adoc +167 -0
- package/docs/brick-engine-guide.adoc +87 -0
- package/docs/diagrams/lifecycle.mmd +19 -0
- package/docs/documentation_style_guide.adoc +210 -0
- package/docs/getting-started.adoc +147 -0
- package/docs/images/lifecycle.svg +1 -0
- package/docs/jsdoc_standard.adoc +109 -0
- package/docs/publishing.adoc +58 -0
- package/docs/reference/enums/Color.adoc +35 -0
- package/docs/reference/enums/ControlEventType.adoc +28 -0
- package/docs/reference/enums/ControlKey.adoc +34 -0
- package/docs/reference/enums/FontAlignment.adoc +43 -0
- package/docs/reference/enums/FontSize.adoc +31 -0
- package/docs/reference/enums/Sound.adoc +42 -0
- package/docs/reference/enums/StateProperty.adoc +33 -0
- package/docs/reference/helpers/CellHelper.adoc +37 -0
- package/docs/reference/helpers/ControlInputHandlerHelper.adoc +57 -0
- package/docs/reference/helpers/CoordinateHelper.adoc +118 -0
- package/docs/reference/helpers/RelativeValuesHelper.adoc +53 -0
- package/docs/reference/interfaces/Debuggable.adoc +29 -0
- package/docs/reference/interfaces/GameModules.adoc +35 -0
- package/docs/reference/interfaces/Initializable.adoc +24 -0
- package/docs/reference/interfaces/RendererInitializable.adoc +33 -0
- package/docs/reference/interfaces/StateSyncable.adoc +41 -0
- package/docs/reference/interfaces/modules/Control.adoc +98 -0
- package/docs/reference/interfaces/modules/Grid.adoc +411 -0
- package/docs/reference/interfaces/modules/Renderer.adoc +34 -0
- package/docs/reference/interfaces/modules/RendererComposite.adoc +57 -0
- package/docs/reference/interfaces/modules/Score.adoc +107 -0
- package/docs/reference/interfaces/modules/Session.adoc +66 -0
- package/docs/reference/interfaces/modules/State.adoc +290 -0
- package/docs/reference/interfaces/modules/Text.adoc +110 -0
- package/docs/reference/interfaces/modules/Time.adoc +119 -0
- package/docs/reference/modules/Debugger.adoc +71 -0
- package/docs/reference/modules/DisplayRenderer.adoc +55 -0
- package/docs/reference/modules/Game.adoc +256 -0
- package/docs/reference/modules/GameControl.adoc +139 -0
- package/docs/reference/modules/GameGrid.adoc +794 -0
- package/docs/reference/modules/GameHudGrid.adoc +38 -0
- package/docs/reference/modules/GameMenu.adoc +39 -0
- package/docs/reference/modules/GameRenderer.adoc +79 -0
- package/docs/reference/modules/GameScore.adoc +138 -0
- package/docs/reference/modules/GameSession.adoc +43 -0
- package/docs/reference/modules/GameSound.adoc +111 -0
- package/docs/reference/modules/GameState.adoc +318 -0
- package/docs/reference/modules/GameText.adoc +139 -0
- package/docs/reference/modules/GameTime.adoc +141 -0
- package/docs/reference/modules/HudRenderer.adoc +56 -0
- package/docs/reference/modules/InitialStateSnapshot.adoc +47 -0
- package/docs/reference/modules/SessionModal.adoc +34 -0
- package/docs/reference/types/Axis.adoc +28 -0
- package/docs/reference/types/Cell.adoc +29 -0
- package/docs/reference/types/ControlCallback.adoc +23 -0
- package/docs/reference/types/Coordinate.adoc +29 -0
- package/docs/reference/types/GameEntry.adoc +29 -0
- package/docs/reference/types/GameEvent.adoc +29 -0
- package/docs/reference/types/Piece.adoc +32 -0
- package/docs/reference/types/RendererMetrics.adoc +29 -0
- package/docs/reference/types/Vector.adoc +28 -0
- package/docs/testing_best_practices.adoc +190 -0
- package/eslint.config.mjs +29 -0
- package/package.json +54 -0
- package/public/CNAME +1 -0
- package/public/docs/GAME_DEVELOPER_GUIDE.html +727 -0
- package/public/docs/brick-engine-guide.html +610 -0
- package/public/docs/diagrams/lifecycle.mmd +19 -0
- package/public/docs/documentation_style_guide.html +994 -0
- package/public/docs/getting-started.html +648 -0
- package/public/docs/images/lifecycle.svg +1 -0
- package/public/docs/index.html +593 -0
- package/public/docs/jsdoc_standard.html +656 -0
- package/public/docs/publishing.html +573 -0
- package/public/docs/reference/enums/Color.html +533 -0
- package/public/docs/reference/enums/ControlEventType.html +505 -0
- package/public/docs/reference/enums/ControlKey.html +529 -0
- package/public/docs/reference/enums/FontAlignment.html +545 -0
- package/public/docs/reference/enums/FontSize.html +517 -0
- package/public/docs/reference/enums/Sound.html +558 -0
- package/public/docs/reference/enums/StateProperty.html +525 -0
- package/public/docs/reference/helpers/CellHelper.html +520 -0
- package/public/docs/reference/helpers/ControlInputHandlerHelper.html +569 -0
- package/public/docs/reference/helpers/CoordinateHelper.html +703 -0
- package/public/docs/reference/helpers/RelativeValuesHelper.html +560 -0
- package/public/docs/reference/interfaces/Debuggable.html +501 -0
- package/public/docs/reference/interfaces/GameModules.html +544 -0
- package/public/docs/reference/interfaces/Initializable.html +495 -0
- package/public/docs/reference/interfaces/RendererInitializable.html +517 -0
- package/public/docs/reference/interfaces/StateSyncable.html +542 -0
- package/public/docs/reference/interfaces/modules/Control.html +648 -0
- package/public/docs/reference/interfaces/modules/Grid.html +1256 -0
- package/public/docs/reference/interfaces/modules/Renderer.html +522 -0
- package/public/docs/reference/interfaces/modules/RendererComposite.html +577 -0
- package/public/docs/reference/interfaces/modules/Score.html +669 -0
- package/public/docs/reference/interfaces/modules/Session.html +585 -0
- package/public/docs/reference/interfaces/modules/State.html +897 -0
- package/public/docs/reference/interfaces/modules/Text.html +668 -0
- package/public/docs/reference/interfaces/modules/Time.html +684 -0
- package/public/docs/reference/modules/Debugger.html +579 -0
- package/public/docs/reference/modules/DisplayRenderer.html +557 -0
- package/public/docs/reference/modules/Game.html +909 -0
- package/public/docs/reference/modules/GameControl.html +716 -0
- package/public/docs/reference/modules/GameGrid.html +1910 -0
- package/public/docs/reference/modules/GameHudGrid.html +508 -0
- package/public/docs/reference/modules/GameMenu.html +538 -0
- package/public/docs/reference/modules/GameRenderer.html +589 -0
- package/public/docs/reference/modules/GameScore.html +664 -0
- package/public/docs/reference/modules/GameSession.html +533 -0
- package/public/docs/reference/modules/GameSound.html +636 -0
- package/public/docs/reference/modules/GameState.html +922 -0
- package/public/docs/reference/modules/GameText.html +701 -0
- package/public/docs/reference/modules/GameTime.html +696 -0
- package/public/docs/reference/modules/HudRenderer.html +568 -0
- package/public/docs/reference/modules/InitialStateSnapshot.html +557 -0
- package/public/docs/reference/modules/SessionModal.html +520 -0
- package/public/docs/reference/types/Axis.html +505 -0
- package/public/docs/reference/types/Cell.html +514 -0
- package/public/docs/reference/types/ControlCallback.html +488 -0
- package/public/docs/reference/types/Coordinate.html +510 -0
- package/public/docs/reference/types/GameEntry.html +514 -0
- package/public/docs/reference/types/GameEvent.html +514 -0
- package/public/docs/reference/types/Piece.html +506 -0
- package/public/docs/reference/types/RendererMetrics.html +514 -0
- package/public/docs/reference/types/Vector.html +509 -0
- package/public/docs/testing_best_practices.html +770 -0
- package/public/favicon.ico +0 -0
- package/public/fonts/digital-7.monoitalic.ttf +0 -0
- package/public/images/cell.svg +32 -0
- package/public/images/close.png +0 -0
- package/public/images/games.png +0 -0
- package/public/images/github.png +0 -0
- package/public/images/letter-a.png +0 -0
- package/public/images/letter-d.png +0 -0
- package/public/images/letter-j.png +0 -0
- package/public/images/letter-s.png +0 -0
- package/public/images/letter-w.png +0 -0
- package/public/images/meta-image.png +0 -0
- package/public/images/number-1.png +0 -0
- package/public/images/number-2.png +0 -0
- package/public/images/number-3.png +0 -0
- package/public/images/number-4.png +0 -0
- package/public/images/number-5.png +0 -0
- package/public/images/number-6.png +0 -0
- package/public/images/splash.gif +0 -0
- package/public/index.html +15 -0
- package/public/sounds/sound_00.wav +0 -0
- package/public/sounds/sound_01.wav +0 -0
- package/public/sounds/sound_02.wav +0 -0
- package/public/sounds/sound_03.wav +0 -0
- package/public/sounds/sound_04.wav +0 -0
- package/public/sounds/sound_05.wav +0 -0
- package/public/sounds/sound_06.wav +0 -0
- package/public/sounds/sound_07.wav +0 -0
- package/public/sounds/sound_08.wav +0 -0
- package/public/sounds/sound_09.wav +0 -0
- package/public/sounds/sound_10.wav +0 -0
- package/public/sounds/sound_11.wav +0 -0
- package/public/sounds/sound_12.wav +0 -0
- package/public/sounds/sound_13.wav +0 -0
- package/public/sounds/sound_14.wav +0 -0
- package/public/sounds/sound_15.wav +0 -0
- package/public/style/body.css +86 -0
- package/public/style/buttons.css +233 -0
- package/public/style/debugger.css +117 -0
- package/public/style/sessionModal.css +155 -0
- package/public/style/sourceCodeAndCommands.css +74 -0
- package/public/style/splash.css +13 -0
- package/public/style/theme.css +137 -0
- package/scripts/generate-diagrams.sh +20 -0
- package/scripts/generate-docs.js +111 -0
- package/src/client-game.d.ts +1 -0
- package/src/config/configs.test.ts +20 -0
- package/src/config/configs.ts +197 -0
- package/src/config/env.test.ts +59 -0
- package/src/config/env.ts +7 -0
- package/src/config/styles.ts +5 -0
- package/src/core/Game.test.ts +167 -0
- package/src/core/Game.ts +307 -0
- package/src/core/InitialStateSnapshot.test.ts +51 -0
- package/src/core/InitialStateSnapshot.ts +46 -0
- package/src/core/helpers/CellHelper.test.ts +33 -0
- package/src/core/helpers/CellHelper.ts +21 -0
- package/src/core/helpers/ControlInputHandlerHelper.test.ts +116 -0
- package/src/core/helpers/ControlInputHandlerHelper.ts +68 -0
- package/src/core/helpers/CoordinateHelper.test.ts +113 -0
- package/src/core/helpers/CoordinateHelper.ts +82 -0
- package/src/core/helpers/InterfaceIdentifierHelper.test.ts +122 -0
- package/src/core/helpers/InterfaceIdentifierHelper.ts +43 -0
- package/src/core/helpers/RelativeValuesHelper.test.ts +47 -0
- package/src/core/helpers/RelativeValuesHelper.ts +29 -0
- package/src/core/module/control/GameControl.test.ts +82 -0
- package/src/core/module/control/GameControl.ts +142 -0
- package/src/core/module/control/GameControlKeyBinding.test.ts +59 -0
- package/src/core/module/control/GameControlKeyBinding.ts +92 -0
- package/src/core/module/grid/GameGrid.test.ts +83 -0
- package/src/core/module/grid/GameGrid.ts +610 -0
- package/src/core/module/grid/GameHudGrid.test.ts +22 -0
- package/src/core/module/grid/GameHudGrid.ts +40 -0
- package/src/core/module/grid/engines/GridAnalysisEngine.test.ts +157 -0
- package/src/core/module/grid/engines/GridAnalysisEngine.ts +124 -0
- package/src/core/module/grid/engines/GridLineEngine.test.ts +132 -0
- package/src/core/module/grid/engines/GridLineEngine.ts +165 -0
- package/src/core/module/grid/engines/GridMovementEngine.test.ts +125 -0
- package/src/core/module/grid/engines/GridMovementEngine.ts +113 -0
- package/src/core/module/grid/engines/GridRegionEngine.test.ts +136 -0
- package/src/core/module/grid/engines/GridRegionEngine.ts +52 -0
- package/src/core/module/grid/engines/GridTransformEngine.test.ts +98 -0
- package/src/core/module/grid/engines/GridTransformEngine.ts +70 -0
- package/src/core/module/renderer/DisplayRenderer.test.ts +86 -0
- package/src/core/module/renderer/DisplayRenderer.ts +152 -0
- package/src/core/module/renderer/GameRenderer.test.ts +103 -0
- package/src/core/module/renderer/GameRenderer.ts +144 -0
- package/src/core/module/renderer/HudRenderer.test.ts +108 -0
- package/src/core/module/renderer/HudRenderer.ts +203 -0
- package/src/core/module/score/GameScore.test.ts +71 -0
- package/src/core/module/score/GameScore.ts +188 -0
- package/src/core/module/session/GameSession.test.ts +176 -0
- package/src/core/module/session/GameSession.ts +103 -0
- package/src/core/module/sound/GameSound.test.ts +117 -0
- package/src/core/module/sound/GameSound.ts +229 -0
- package/src/core/module/state/GameState.test.ts +101 -0
- package/src/core/module/state/GameState.ts +339 -0
- package/src/core/module/text/GameText.test.ts +87 -0
- package/src/core/module/text/GameText.ts +150 -0
- package/src/core/module/time/GameTime.test.ts +86 -0
- package/src/core/module/time/GameTime.ts +144 -0
- package/src/core/types/Interfaces.ts +59 -0
- package/src/core/types/Types.ts +124 -0
- package/src/core/types/enums.ts +113 -0
- package/src/core/types/modules.ts +841 -0
- package/src/index.test.ts +15 -0
- package/src/index.ts +9 -0
- package/src/main.test.ts +137 -0
- package/src/main.ts +77 -0
- package/src/menu/GameMenu.test.ts +157 -0
- package/src/menu/GameMenu.ts +124 -0
- package/src/menu/GameMenuSingleton.test.ts +26 -0
- package/src/menu/GameMenuSingleton.ts +13 -0
- package/src/menu/GameRepository.test.ts +46 -0
- package/src/menu/GameRepository.ts +47 -0
- package/src/menu/manager/GameManager.test.ts +68 -0
- package/src/menu/manager/GameManager.ts +50 -0
- package/src/types/global.d.ts +8 -0
- package/src/types/interfaces.ts +5 -0
- package/src/view/Debugger.test.ts +152 -0
- package/src/view/Debugger.ts +124 -0
- package/src/view/GameView.test.ts +95 -0
- package/src/view/GameView.ts +244 -0
- package/src/view/SessionModal.test.ts +141 -0
- package/src/view/SessionModal.ts +73 -0
- package/src/view/components/layout/ButtonLayout.test.ts +28 -0
- package/src/view/components/layout/ButtonLayout.ts +63 -0
- package/src/view/components/layout/ContainerLayout.test.ts +48 -0
- package/src/view/components/layout/ContainerLayout.ts +50 -0
- package/src/view/components/layout/FrameLayout.test.ts +24 -0
- package/src/view/components/layout/FrameLayout.ts +25 -0
- package/src/view/components/ui/BigButton.test.ts +28 -0
- package/src/view/components/ui/BigButton.ts +31 -0
- package/src/view/components/ui/Button.test.ts +30 -0
- package/src/view/components/ui/Button.ts +30 -0
- package/src/view/components/ui/Canvas.test.ts +32 -0
- package/src/view/components/ui/Canvas.ts +34 -0
- package/src/view/components/ui/SmallButton.test.ts +48 -0
- package/src/view/components/ui/SmallButton.ts +32 -0
- package/src/view/theme/applyColors.test.ts +47 -0
- package/src/view/theme/applyColors.ts +38 -0
- package/src/view/theme/dimensions.test.ts +34 -0
- package/src/view/theme/dimensions.ts +53 -0
- package/tsconfig.json +16 -0
- package/vitest.config.ts +14 -0
- package/webpack.config.js +133 -0
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
= Documentation Style Guide & Lessons Learned
|
|
2
|
+
:description: Project standards for creating and maintaining high-quality documentation.
|
|
3
|
+
:keywords: documentation, style-guide, standards, asciidoc
|
|
4
|
+
:toc: left
|
|
5
|
+
:toclevels: 3
|
|
6
|
+
:sectnums:
|
|
7
|
+
:sectlinks:
|
|
8
|
+
:icons: font
|
|
9
|
+
:source-highlighter: highlight.js
|
|
10
|
+
:reproducible:
|
|
11
|
+
:experimental:
|
|
12
|
+
:idprefix:
|
|
13
|
+
:idseparator: -
|
|
14
|
+
|
|
15
|
+
This document serves as the **authoritative reference** for creating and maintaining documentation in the Brick Engine project. It consolidates lessons learned during development and defines the standards for future contributions.
|
|
16
|
+
|
|
17
|
+
== Architectural Patterns
|
|
18
|
+
|
|
19
|
+
These patterns must be reflected in both the code and the documentation.
|
|
20
|
+
|
|
21
|
+
=== 1. Centralized Persistence
|
|
22
|
+
* **Principle**: `GameState` is the **single source of truth** for all persistent data (e.g., `muted`, `highScore`, `colorEnabled`).
|
|
23
|
+
* **Rule**: Other modules (e.g., `GameSound`, `GameRenderer`) must **NOT** implement their own `localStorage` logic.
|
|
24
|
+
* **Pattern**:
|
|
25
|
+
. **Interface**: Modules requiring state must implement `StateSyncable`.
|
|
26
|
+
. **Initialization**: `Game.ts` iterates over modules and calls `syncState(state)` on those that implement the interface.
|
|
27
|
+
. **Decoupling**: `GameState` must **NOT** have dependencies on other game modules.
|
|
28
|
+
. **Persistence Key**: The `Game` class must provide a unique key to `GameState` to prefix all `localStorage` entries.
|
|
29
|
+
. **Updates**: Modules subscribe to `GameState` changes via `state.subscribe()`.
|
|
30
|
+
|
|
31
|
+
=== 2. Event-Driven State
|
|
32
|
+
* **Principle**: Reactivity over polling.
|
|
33
|
+
* **Mechanism**:
|
|
34
|
+
* State properties are encapsulated with **getters/setters**.
|
|
35
|
+
* Setters automatically trigger `_notify(property, value)`.
|
|
36
|
+
* Subscribers receive the new value immediately.
|
|
37
|
+
|
|
38
|
+
=== 3. Strict Module Interfaces
|
|
39
|
+
* **Principle**: Coupling through interfaces, not implementation.
|
|
40
|
+
* **Guideline**: Define module shapes in `src/core/types/modules.ts` (e.g., `Sound`, `Grid`, `Time`).
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
=== Entry Point Responsibility
|
|
44
|
+
|
|
45
|
+
The `README.adoc` is the **main entry point** of the application and contains the "Getting Started" guide.
|
|
46
|
+
|
|
47
|
+
**Rule**: Whenever adding new abstract methods to the `Game` class or making breaking changes to the initialization flow, you **MUST** verify and update the code snippet in `README.adoc` to ensure it remains a valid boilerplate for developers.
|
|
48
|
+
|
|
49
|
+
=== Reference Directory Structure
|
|
50
|
+
|
|
51
|
+
To maintain scannability, documentation is organized into specialized subdirectories:
|
|
52
|
+
- `modules/`: Core engine services (Grid, State, etc.).
|
|
53
|
+
- `interfaces/`: System contracts and module shapes.
|
|
54
|
+
- `enums/`: Fixed set of values (Color, Sound, etc.).
|
|
55
|
+
- `types/`: Data interfaces and composite shapes (Cell, Coordinate, etc.).
|
|
56
|
+
- `helpers/`: Static utility classes.
|
|
57
|
+
|
|
58
|
+
=== HTML-Friendly Formatting Standards
|
|
59
|
+
|
|
60
|
+
Documentation should be optimized for both internal reading and HTML conversion.
|
|
61
|
+
|
|
62
|
+
1. **Mandatory Metadata**: All top-level documentation files must include `:description:` and `:keywords:` attributes.
|
|
63
|
+
2. **Structural Tables**: High-level summaries (such as the list of modules in README) must use tables instead of bullet points.
|
|
64
|
+
* Use `[cols="1,3", options="header"]` for a professional layout.
|
|
65
|
+
3. **Cross-Linking**: Every occurrence of a system entity MUST be cross-linked using the `xref:` macro.
|
|
66
|
+
4. **Header Attributes**: Use the standard header set to ensure a consistent side-bar TOC and numbered sections:
|
|
67
|
+
+
|
|
68
|
+
[source,asciidoc]
|
|
69
|
+
----
|
|
70
|
+
:toc: left
|
|
71
|
+
:toclevels: 3
|
|
72
|
+
:sectnums:
|
|
73
|
+
:sectlinks:
|
|
74
|
+
:idprefix:
|
|
75
|
+
:idseparator: -
|
|
76
|
+
----
|
|
77
|
+
|
|
78
|
+
* Use `===` for all functional topics within a module's API reference.
|
|
79
|
+
* **Topic Summaries**: Each topic section should begin with a brief description of its general utility before listing its methods.
|
|
80
|
+
* **Method Headers**: Use `====` for method headers when they are nested under functional topics.
|
|
81
|
+
* **Separators**: Place a horizontal rule (`'''`) before every method/topic header except the first one in a section.
|
|
82
|
+
* **Organization Strategy**:
|
|
83
|
+
** **Simple Modules**: Maintain a flat list of methods using `===` headers.
|
|
84
|
+
** **Complex Modules**: Group methods into logical topics (e.g., "Movement", "Transformations"). This improves scannability when a module exceeds ~10 methods.
|
|
85
|
+
. **Parameters**:
|
|
86
|
+
* Use a table for arguments.
|
|
87
|
+
* **OMIT this section completely** if there are no parameters.
|
|
88
|
+
. **Returns**:
|
|
89
|
+
* Describe the return value.
|
|
90
|
+
* **OMIT this section completely** if the return type is `void`.
|
|
91
|
+
. **Behavior**: Use full sentences and paragraphs.
|
|
92
|
+
. **Examples**: Provide realistic usage scenarios.
|
|
93
|
+
|
|
94
|
+
=== Single-Item Structure (Types, Enums, Interfaces)
|
|
95
|
+
|
|
96
|
+
For entities that define data shapes or fixed values, use the following structure:
|
|
97
|
+
|
|
98
|
+
[source,asciidoc]
|
|
99
|
+
----
|
|
100
|
+
= EntityName Reference
|
|
101
|
+
|
|
102
|
+
<Brief description of the entity's purpose and usage.>
|
|
103
|
+
|
|
104
|
+
== Attributes / Properties / Values
|
|
105
|
+
|
|
106
|
+
[cols="1,1,3"]
|
|
107
|
+
|===
|
|
108
|
+
|Name |Type |Description
|
|
109
|
+
|`prop1` |`Type` |Description of property 1.
|
|
110
|
+
|`prop2` |`Type` |Description of property 2.
|
|
111
|
+
|===
|
|
112
|
+
|
|
113
|
+
== General Usage
|
|
114
|
+
|
|
115
|
+
<Detailed explanation of how this entity is used within the engine's ecosystem.>
|
|
116
|
+
----
|
|
117
|
+
|
|
118
|
+
== Formatting Guidelines
|
|
119
|
+
|
|
120
|
+
=== AsciiDoc Features
|
|
121
|
+
We use **AsciiDoc** (`.adoc`) for all documentation to leverage advanced features.
|
|
122
|
+
|
|
123
|
+
* **Headers**: Use `=` for document titles, `==` for sections.
|
|
124
|
+
* **Code Blocks**: Use `[source,typescript]` for syntax highlighting.
|
|
125
|
+
* **Admonitions**: Use `NOTE:`, `TIP:`, `WARNING:` for emphasis.
|
|
126
|
+
* **Diagrams**: Use Mermaid via `mermaid-cli` for generation (embedded as generic images).
|
|
127
|
+
|
|
128
|
+
=== JSDoc (Source Code)
|
|
129
|
+
Refer to `docs/jsdoc_standard.adoc` for inline code documentation rules.
|
|
130
|
+
* **Enforce**: `@param` and `@returns` for every method.
|
|
131
|
+
* **Strict Typing**: No `any`.
|
|
132
|
+
|
|
133
|
+
== Lessons Learned
|
|
134
|
+
|
|
135
|
+
=== Audio Latency
|
|
136
|
+
* **Issue**: `AudioContext` autoplay policy and startup latency.
|
|
137
|
+
* **Solution**:
|
|
138
|
+
. Use `latencyHint: 'interactive'`.
|
|
139
|
+
. Preload all sounds into `AudioBuffer`s during `setup()`.
|
|
140
|
+
. Resume context on first user interaction if suspended.
|
|
141
|
+
|
|
142
|
+
=== Enumerations
|
|
143
|
+
* **Issue**: String literals ('pressed', 'held') caused typos and refactoring pain.
|
|
144
|
+
* **Solution**: Use TypeScript `enum` (e.g., `ControlEventType`) for all fixed sets of values.
|
|
145
|
+
|
|
146
|
+
=== Coordinate Systems
|
|
147
|
+
* **Standard**:
|
|
148
|
+
* **Grid**: Integers `{x, y}` representing column/row index.
|
|
149
|
+
* **Display**: Normalized floats `0.0` to `1.0` (percentage of screen).
|
|
150
|
+
* Use `CoordinateHelper` methods to convert between Grid, Display, and Pixel values.
|
|
151
|
+
|
|
152
|
+
=== Decoupled State Sync
|
|
153
|
+
* **Issue**: `GameState.syncModules` creates a circular dependency or high coupling by making the state module know about every other module.
|
|
154
|
+
* **Solution**: Use the `StateSyncable` interface. The `Game` class (owner) handles the linking, allowing `GameState` to remain an independent "data store" module.
|
|
155
|
+
|
|
156
|
+
=== Persistence Namespacing
|
|
157
|
+
* **Issue**: If multiple games built with the engine are hosted on the same domain, they share the same `localStorage`, leading to property collisions (e.g., both games trying to store `highScore`).
|
|
158
|
+
* **Solution**: Require an abstract `getPersistenceKey()` method in the `Game` class and use its return value as a prefix in `GameState` (e.g., `localStorage.setItem(`${prefix}.${key}`, value)`).
|
|
159
|
+
|
|
160
|
+
=== Documentation Granularity
|
|
161
|
+
* **Issue**: Grouping multiple types or enums in a single file makes the documentation harder to navigate via sidebars or search, and leads to extremely long pages.
|
|
162
|
+
* **Solution**: "Explode" documentation into individual files (One File Per Item). This improves scannability and allows for precise cross-referencing.
|
|
163
|
+
|
|
164
|
+
=== Cross-Linking Context
|
|
165
|
+
* **Recommendation**: When referencing an entity in a table (e.g., a return type or parameter type), always use an `xref:` link to its dedicated documentation page.
|
|
166
|
+
* **Pattern**: Use relative paths (e.g., `xref:../enums/Color.adoc[Color]`) to link between subdirectories.
|
|
167
|
+
|
|
168
|
+
=== Topic-Based Scannability
|
|
169
|
+
* **Issue**: Modules with many methods (e.g., `GameGrid`) become "walls of text" when documented as a single flat list, making it hard for developers to find specific functionality.
|
|
170
|
+
* **Solution**: Group methods by functional topics (e.g., "Line Management", "Grid Analysis"). Each topic acts as a sub-module view, providing context on why those methods exist together.
|
|
171
|
+
* **Rule**: When a module exceeds 10 methods, transitioning to a topic-based structure is **mandatory**.
|
|
172
|
+
|
|
173
|
+
=== Redundant Separators
|
|
174
|
+
* **Issue**: Automated or careless application of the "expanded method" style often leads to placing a horizontal rule (`'''`) at the very beginning of the `== Methods` section.
|
|
175
|
+
* **Solution**: Always verify that the first method header appears immediately after the section header. This maintains a clean vertical rhythm and avoids unnecessary whitespace or lines at the top of the API list.
|
|
176
|
+
|
|
177
|
+
=== Module Interface Organization
|
|
178
|
+
* **Issue**: Mixing generic engine contracts (e.g., `Initializable`) with specific module definitions (e.g., `Grid`, `State`) in a flat directory structure created clutter and obscured the architectural distinction between "core traits" and "major subsystems."
|
|
179
|
+
* **Solution**: Moved module-specific interfaces to a dedicated `modules/` subdirectory.
|
|
180
|
+
* **Impact**: When cross-referencing files in nested directories, developers must pay extra attention to relative paths (e.g., using `xref:../../types/` instead of `xref:../types/`).
|
|
181
|
+
|
|
182
|
+
== Cross-Referencing Standards
|
|
183
|
+
|
|
184
|
+
To ensure a navigable and cohesive documentation set, strict cross-referencing is mandatory for all internal entities.
|
|
185
|
+
|
|
186
|
+
=== Syntax
|
|
187
|
+
Use the AsciiDoc `xref` macro with relative paths:
|
|
188
|
+
`xref:path/to/File.adoc[LinkText]`
|
|
189
|
+
|
|
190
|
+
=== Rules
|
|
191
|
+
1. **Mandatory Linking**: Every occurrence of a type, interface, enum, or module in a method signature, property type, or description MUST be linked.
|
|
192
|
+
2. **Relative Paths**: references must use relative paths from the current file's location.
|
|
193
|
+
* Sibling file: `xref:Sibling.adoc[Sibling]`
|
|
194
|
+
* Parent directory: `xref:../types/Cell.adoc[Cell]`
|
|
195
|
+
3. **Parameter Tables**: Types listed in input/output tables must be linked, not just the text in the method signature.
|
|
196
|
+
4. **Consistency**: exact file names should be used for the link target, and the link text should match the entity name.
|
|
197
|
+
|
|
198
|
+
=== Examples
|
|
199
|
+
|
|
200
|
+
**Good:**
|
|
201
|
+
[source,asciidoc]
|
|
202
|
+
----
|
|
203
|
+
|`color` |`xref:../enums/Color.adoc[Color]` |The theme color.
|
|
204
|
+
----
|
|
205
|
+
|
|
206
|
+
**Bad:**
|
|
207
|
+
[source,asciidoc]
|
|
208
|
+
----
|
|
209
|
+
|`color` |`Color` |The theme color.
|
|
210
|
+
----
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
= Getting Started Guide
|
|
2
|
+
:description: Detailed instructions for setting up and building games with the Brick Engine.
|
|
3
|
+
:toc: left
|
|
4
|
+
:toclevels: 3
|
|
5
|
+
:sectnums:
|
|
6
|
+
:sectlinks:
|
|
7
|
+
:icons: font
|
|
8
|
+
:source-highlighter: highlight.js
|
|
9
|
+
|
|
10
|
+
This guide provides everything you need to know to start building retro grid-based games with the **Brick Engine**.
|
|
11
|
+
|
|
12
|
+
== Installation
|
|
13
|
+
|
|
14
|
+
The fastest way to build a game is using the **Brick Engine CLI**, which scaffolds a complete project with build tools and quality checks.
|
|
15
|
+
|
|
16
|
+
=== Quick Start (CLI)
|
|
17
|
+
|
|
18
|
+
Use `npx` to create a new project without installing anything globally:
|
|
19
|
+
|
|
20
|
+
[source,bash]
|
|
21
|
+
----
|
|
22
|
+
npx brick-engine-cli init my-brick-game
|
|
23
|
+
----
|
|
24
|
+
|
|
25
|
+
This command will:
|
|
26
|
+
* Create a project directory with a ready-to-use structure.
|
|
27
|
+
* Generate `src/index.ts` with a boilerplate `Game` implementation, ready for coding.
|
|
28
|
+
* Configure **Webpack** for development and production builds.
|
|
29
|
+
* (Optional) Set up **ESLint** and **Prettier** for code quality.
|
|
30
|
+
|
|
31
|
+
=== Available Scripts
|
|
32
|
+
|
|
33
|
+
Once your project is created, use the following commands:
|
|
34
|
+
|
|
35
|
+
[cols="1,3", options="header"]
|
|
36
|
+
|===
|
|
37
|
+
| Command | Description
|
|
38
|
+
|
|
39
|
+
| `npm start`
|
|
40
|
+
| Starts the dev server with hot reload at `localhost:8080`.
|
|
41
|
+
|
|
42
|
+
| `npm run build:standalone`
|
|
43
|
+
| Generates a production-ready `/dist` folder for independent hosting.
|
|
44
|
+
|
|
45
|
+
| `npm run build:bundle`
|
|
46
|
+
| Generates a bundle optimized for link:https://brickengine.com.br[brickengine.com.br].
|
|
47
|
+
|
|
48
|
+
| `npm run lint` / `npm run format`
|
|
49
|
+
| Checks and fixes code style (if enabled during init).
|
|
50
|
+
|===
|
|
51
|
+
|
|
52
|
+
=== Manual Installation
|
|
53
|
+
|
|
54
|
+
If you prefer to integrate the engine into an existing project, install it via npm:
|
|
55
|
+
|
|
56
|
+
[source,bash]
|
|
57
|
+
----
|
|
58
|
+
npm install brick-engine-js p5
|
|
59
|
+
npm install --save-dev @types/p5
|
|
60
|
+
----
|
|
61
|
+
|
|
62
|
+
== Creating a Game
|
|
63
|
+
|
|
64
|
+
To create a game, you must extend the abstract `Game` class. If you used the CLI, this logic is already scaffolded in `src/index.ts`. Here is a reference implementation:
|
|
65
|
+
|
|
66
|
+
[source,typescript]
|
|
67
|
+
----
|
|
68
|
+
import { Game, FontSize, ControlKey, ControlEventType, Sound, FontAlign, FontVerticalAlign } from 'brick-engine-js';
|
|
69
|
+
|
|
70
|
+
export default class MyGame extends Game {
|
|
71
|
+
/**
|
|
72
|
+
* Called once after the engine and its modules are fully initialized.
|
|
73
|
+
* Ideal for setting initial state, text sizes, and subscribing to controls.
|
|
74
|
+
*/
|
|
75
|
+
setupGame(): void {
|
|
76
|
+
// Example: Subscriber to ACTION button
|
|
77
|
+
this.modules.control.subscribe(ControlKey.ACTION, ControlEventType.PRESSED, () => {
|
|
78
|
+
console.log('Action pressed!');
|
|
79
|
+
this.modules.sound.play(Sound.ACTION_1);
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Called on every logic "tick". The frequency is defined by the game's tickInterval.
|
|
85
|
+
* This is where movement, collision, and state updates should happen.
|
|
86
|
+
* Logic here ONLY runs when the game is in the PLAYING state.
|
|
87
|
+
*/
|
|
88
|
+
update(deltaTime: number): void {
|
|
89
|
+
// Move players, check collisions, etc.
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Called every rendering frame (60fps).
|
|
94
|
+
* Used for visual-only effects that don't impact game state (e.g. animations).
|
|
95
|
+
* Runs during PLAYING and PAUSED states.
|
|
96
|
+
*/
|
|
97
|
+
render(): void {
|
|
98
|
+
const { text } = this.modules;
|
|
99
|
+
|
|
100
|
+
text.setTextSize(FontSize.MEDIUM);
|
|
101
|
+
text.setTextAlign(FontAlign.CENTER, FontVerticalAlign.CENTER);
|
|
102
|
+
text.textOnDisplay('MY GAME', { x: 0.5, y: 0.4 });
|
|
103
|
+
text.textOnDisplay('Playing', { x: 0.5, y: 0.6 });
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* returns a unique key for LocalStorage.
|
|
108
|
+
* Prevents data collisions between different games on the same domain.
|
|
109
|
+
*/
|
|
110
|
+
getPersistenceKey(): string {
|
|
111
|
+
return 'my-awesome-game-v1';
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* Rendered every frame when the device is ON but the game hasn't started.
|
|
116
|
+
* Usually displays the title and "Press Start" instructions.
|
|
117
|
+
*/
|
|
118
|
+
drawTitleScreen(): void {
|
|
119
|
+
const { text } = this.modules;
|
|
120
|
+
|
|
121
|
+
text.setTextSize(FontSize.MEDIUM);
|
|
122
|
+
text.setTextAlign(FontAlign.CENTER, FontVerticalAlign.CENTER);
|
|
123
|
+
text.textOnDisplay('MY GAME', { x: 0.5, y: 0.4 });
|
|
124
|
+
text.textOnDisplay('PRESS START', { x: 0.5, y: 0.6 });
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* Rendered every frame when the game state reaches GAME OVER.
|
|
129
|
+
* Replaces standard `render()` calls to show scores or restart messages.
|
|
130
|
+
* Usually displays the game over message and "Press START to restart" instructions, and the final score.
|
|
131
|
+
*/
|
|
132
|
+
drawGameOverScreen(): void {
|
|
133
|
+
const { text, score } = this.modules;
|
|
134
|
+
|
|
135
|
+
text.setTextSize(FontSize.MEDIUM);
|
|
136
|
+
text.setTextAlign(FontAlign.CENTER, FontVerticalAlign.CENTER);
|
|
137
|
+
text.textOnDisplay('GAME OVER', { x: 0.5, y: 0.4 });
|
|
138
|
+
text.textOnDisplay(`SCORE: ${score.getScore()}`, { x: 0.5, y: 0.6 });
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
----
|
|
142
|
+
|
|
143
|
+
== Next Steps
|
|
144
|
+
|
|
145
|
+
Once you've set up your project and created your game class:
|
|
146
|
+
* Explore the modules reference to learn about all the engine's capabilities.
|
|
147
|
+
* Learn how to share your completed game in the **xref:publishing.adoc[Publishing Guide]**.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg id="my-svg" width="100%" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" class="flowchart" style="max-width: 550.789px; background-color: white;" viewBox="0 0 550.7890625 1810.515625" role="graphics-document document" aria-roledescription="flowchart-v2"><style>#my-svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#my-svg .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#my-svg .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#my-svg .error-icon{fill:#552222;}#my-svg .error-text{fill:#552222;stroke:#552222;}#my-svg .edge-thickness-normal{stroke-width:1px;}#my-svg .edge-thickness-thick{stroke-width:3.5px;}#my-svg .edge-pattern-solid{stroke-dasharray:0;}#my-svg .edge-thickness-invisible{stroke-width:0;fill:none;}#my-svg .edge-pattern-dashed{stroke-dasharray:3;}#my-svg .edge-pattern-dotted{stroke-dasharray:2;}#my-svg .marker{fill:#333333;stroke:#333333;}#my-svg .marker.cross{stroke:#333333;}#my-svg svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#my-svg p{margin:0;}#my-svg .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#my-svg .cluster-label text{fill:#333;}#my-svg .cluster-label span{color:#333;}#my-svg .cluster-label span p{background-color:transparent;}#my-svg .label text,#my-svg span{fill:#333;color:#333;}#my-svg .node rect,#my-svg .node circle,#my-svg .node ellipse,#my-svg .node polygon,#my-svg .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#my-svg .rough-node .label text,#my-svg .node .label text,#my-svg .image-shape .label,#my-svg .icon-shape .label{text-anchor:middle;}#my-svg .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#my-svg .rough-node .label,#my-svg .node .label,#my-svg .image-shape .label,#my-svg .icon-shape .label{text-align:center;}#my-svg .node.clickable{cursor:pointer;}#my-svg .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#my-svg .arrowheadPath{fill:#333333;}#my-svg .edgePath .path{stroke:#333333;stroke-width:2.0px;}#my-svg .flowchart-link{stroke:#333333;fill:none;}#my-svg .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#my-svg .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#my-svg .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#my-svg .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#my-svg .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#my-svg .cluster text{fill:#333;}#my-svg .cluster span{color:#333;}#my-svg div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#my-svg .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#my-svg rect.text{fill:none;stroke-width:0;}#my-svg .icon-shape,#my-svg .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#my-svg .icon-shape p,#my-svg .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#my-svg .icon-shape rect,#my-svg .image-shape rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#my-svg .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#my-svg .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#my-svg :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}</style><g><marker id="my-svg_flowchart-v2-pointEnd" class="marker flowchart-v2" viewBox="0 0 10 10" refX="5" refY="5" markerUnits="userSpaceOnUse" markerWidth="8" markerHeight="8" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-pointStart" class="marker flowchart-v2" viewBox="0 0 10 10" refX="4.5" refY="5" markerUnits="userSpaceOnUse" markerWidth="8" markerHeight="8" orient="auto"><path d="M 0 5 L 10 10 L 10 0 z" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-circleEnd" class="marker flowchart-v2" viewBox="0 0 10 10" refX="11" refY="5" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-circleStart" class="marker flowchart-v2" viewBox="0 0 10 10" refX="-1" refY="5" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-crossEnd" class="marker cross flowchart-v2" viewBox="0 0 11 11" refX="12" refY="5.2" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><path d="M 1,1 l 9,9 M 10,1 l -9,9" class="arrowMarkerPath" style="stroke-width: 2; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-crossStart" class="marker cross flowchart-v2" viewBox="0 0 11 11" refX="-1" refY="5.2" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><path d="M 1,1 l 9,9 M 10,1 l -9,9" class="arrowMarkerPath" style="stroke-width: 2; stroke-dasharray: 1, 0;"/></marker><g class="root"><g class="clusters"><g class="cluster" id="subGraph0" data-look="classic"><rect style="" x="8" y="201" width="534.7890625" height="1601.515625"/><g class="cluster-label" transform="translate(207.19140625, 201)"><foreignObject width="136.40625" height="24"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel"><p>Each Frame (Draw)</p></span></div></foreignObject></g></g></g><g class="edgePaths"><path d="M291.289,47.5L291.206,51.583C291.122,55.667,290.956,63.833,290.872,71.417C290.789,79,290.789,86,290.789,89.5L290.789,93" id="L_Start_Setup_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_Start_Setup_0" data-points="W3sieCI6MjkxLjI4OTA2MjUsInkiOjQ3LjV9LHsieCI6MjkwLjc4OTA2MjUsInkiOjcyfSx7IngiOjI5MC43ODkwNjI1LCJ5Ijo5N31d" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M290.789,151L290.789,155.167C290.789,159.333,290.789,167.667,290.789,176C290.789,184.333,290.789,192.667,290.789,200.333C290.789,208,290.789,215,290.789,218.5L290.789,222" id="L_Setup_DrawLoop_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_Setup_DrawLoop_0" data-points="W3sieCI6MjkwLjc4OTA2MjUsInkiOjE1MX0seyJ4IjoyOTAuNzg5MDYyNSwieSI6MTc2fSx7IngiOjI5MC43ODkwNjI1LCJ5IjoyMDF9LHsieCI6MjkwLjc4OTA2MjUsInkiOjIyNn1d" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M253.499,318.069L239.364,328.451C225.23,338.833,196.961,359.596,182.826,373.478C168.691,387.359,168.691,394.359,168.691,397.859L168.691,401.359" id="L_DrawLoop_TimeUpdate_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_DrawLoop_TimeUpdate_0" data-points="W3sieCI6MjUzLjQ5ODc3Mzk3ODYwMzcsInkiOjMxOC4wNjkwODY0Nzg2MDM3fSx7IngiOjE2OC42OTE0MDYyNSwieSI6MzgwLjM1OTM3NX0seyJ4IjoxNjguNjkxNDA2MjUsInkiOjQwNS4zNTkzNzV9XQ==" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M168.691,459.359L168.691,463.526C168.691,467.693,168.691,476.026,168.691,483.693C168.691,491.359,168.691,498.359,168.691,501.859L168.691,505.359" id="L_TimeUpdate_CheckTick_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_TimeUpdate_CheckTick_0" data-points="W3sieCI6MTY4LjY5MTQwNjI1LCJ5Ijo0NTkuMzU5Mzc1fSx7IngiOjE2OC42OTE0MDYyNSwieSI6NDg0LjM1OTM3NX0seyJ4IjoxNjguNjkxNDA2MjUsInkiOjUwOS4zNTkzNzV9XQ==" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M200.264,618.771L209.535,630.2C218.806,641.629,237.348,664.486,246.619,681.415C255.891,698.344,255.891,709.344,255.891,714.844L255.891,720.344" id="L_CheckTick_ProcessTick_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_CheckTick_ProcessTick_0" data-points="W3sieCI6MjAwLjI2Mzc0ODMyOTA2MTQzLCJ5Ijo2MTguNzcxNDA3OTIwOTM4Nn0seyJ4IjoyNTUuODkwNjI1LCJ5Ijo2ODcuMzQzNzV9LHsieCI6MjU1Ljg5MDYyNSwieSI6NzI0LjM0Mzc1fV0=" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M137.119,618.771L127.848,630.2C118.577,641.629,100.034,664.486,90.763,688.582C81.492,712.677,81.492,738.01,81.492,763.344C81.492,788.677,81.492,814.01,89.357,832.449C97.221,850.888,112.95,862.433,120.815,868.205L128.68,873.977" id="L_CheckTick_RenderGrid_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_CheckTick_RenderGrid_0" data-points="W3sieCI6MTM3LjExOTA2NDE3MDkzODU3LCJ5Ijo2MTguNzcxNDA3OTIwOTM4Nn0seyJ4Ijo4MS40OTIxODc1LCJ5Ijo2ODcuMzQzNzV9LHsieCI6ODEuNDkyMTg3NSwieSI6NzYzLjM0Mzc1fSx7IngiOjgxLjQ5MjE4NzUsInkiOjgzOS4zNDM3NX0seyJ4IjoxMzEuOTA0MjM1ODM5ODQzNzUsInkiOjg3Ni4zNDM3NX1d" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M255.891,802.344L255.891,808.51C255.891,814.677,255.891,827.01,248.026,838.949C240.161,850.888,224.432,862.433,216.568,868.205L208.703,873.977" id="L_ProcessTick_RenderGrid_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_ProcessTick_RenderGrid_0" data-points="W3sieCI6MjU1Ljg5MDYyNSwieSI6ODAyLjM0Mzc1fSx7IngiOjI1NS44OTA2MjUsInkiOjgzOS4zNDM3NX0seyJ4IjoyMDUuNDc4NTc2NjYwMTU2MjUsInkiOjg3Ni4zNDM3NX1d" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M168.691,930.344L168.691,934.51C168.691,938.677,168.691,947.01,168.691,954.677C168.691,962.344,168.691,969.344,168.691,972.844L168.691,976.344" id="L_RenderGrid_CheckFrame_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_RenderGrid_CheckFrame_0" data-points="W3sieCI6MTY4LjY5MTQwNjI1LCJ5Ijo5MzAuMzQzNzV9LHsieCI6MTY4LjY5MTQwNjI1LCJ5Ijo5NTUuMzQzNzV9LHsieCI6MTY4LjY5MTQwNjI1LCJ5Ijo5ODAuMzQzNzV9XQ==" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M203.517,1110.69L212.246,1122.661C220.975,1134.632,238.433,1158.574,247.162,1176.045C255.891,1193.516,255.891,1204.516,255.891,1210.016L255.891,1215.516" id="L_CheckFrame_ProcessFrame_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_CheckFrame_ProcessFrame_0" data-points="W3sieCI6MjAzLjUxNzA2NDcyNzI5Mzc2LCJ5IjoxMTEwLjY4OTk2NjUyMjcwNjN9LHsieCI6MjU1Ljg5MDYyNSwieSI6MTE4Mi41MTU2MjV9LHsieCI6MjU1Ljg5MDYyNSwieSI6MTIxOS41MTU2MjV9XQ==" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M133.866,1110.69L125.137,1122.661C116.408,1134.632,98.95,1158.574,90.221,1183.211C81.492,1207.849,81.492,1233.182,81.492,1256.516C81.492,1279.849,81.492,1301.182,91.973,1325.534C102.455,1349.886,123.417,1377.256,133.898,1390.941L144.379,1404.626" id="L_CheckFrame_CheckPerf_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_CheckFrame_CheckPerf_0" data-points="W3sieCI6MTMzLjg2NTc0Nzc3MjcwNjI0LCJ5IjoxMTEwLjY4OTk2NjUyMjcwNjN9LHsieCI6ODEuNDkyMTg3NSwieSI6MTE4Mi41MTU2MjV9LHsieCI6ODEuNDkyMTg3NSwieSI6MTI1OC41MTU2MjV9LHsieCI6ODEuNDkyMTg3NSwieSI6MTMyMi41MTU2MjV9LHsieCI6MTQ2LjgxMTYzOTQ0MzczMDY4LCJ5IjoxNDA3LjgwMTY0MTgwNjI2OTN9XQ==" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M255.891,1297.516L255.891,1301.682C255.891,1305.849,255.891,1314.182,253.261,1327.189C250.631,1340.195,245.371,1357.875,242.741,1366.714L240.111,1375.554" id="L_ProcessFrame_CheckPerf_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_ProcessFrame_CheckPerf_0" data-points="W3sieCI6MjU1Ljg5MDYyNSwieSI6MTI5Ny41MTU2MjV9LHsieCI6MjU1Ljg5MDYyNSwieSI6MTMyMi41MTU2MjV9LHsieCI6MjM4Ljk3MDA1NjQzMzU3MDQ1LCJ5IjoxMzc5LjM4ODAyNTE4MzU3MDN9XQ==" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M207.098,1625.516L207.098,1631.682C207.098,1637.849,207.098,1650.182,218.352,1662.208C229.607,1674.233,252.116,1685.951,263.37,1691.81L274.625,1697.669" id="L_CheckPerf_RenderPerf_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_CheckPerf_RenderPerf_0" data-points="W3sieCI6MjA3LjA5NzY1NjI1LCJ5IjoxNjI1LjUxNTYyNX0seyJ4IjoyMDcuMDk3NjU2MjUsInkiOjE2NjIuNTE1NjI1fSx7IngiOjI3OC4xNzI4MDAxNjQ0NzM3LCJ5IjoxNjk5LjUxNTYyNX1d" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M285.758,1426.176L308.28,1408.899C330.802,1391.622,375.846,1357.069,398.368,1329.126C420.891,1301.182,420.891,1279.849,420.891,1256.516C420.891,1233.182,420.891,1207.849,420.891,1175.251C420.891,1142.654,420.891,1102.792,420.891,1064.93C420.891,1027.068,420.891,991.206,420.891,964.608C420.891,938.01,420.891,920.677,420.891,901.344C420.891,882.01,420.891,860.677,420.891,837.344C420.891,814.01,420.891,788.677,420.891,763.344C420.891,738.01,420.891,712.677,420.891,682.095C420.891,651.513,420.891,615.682,420.891,581.852C420.891,548.021,420.891,516.19,420.891,491.608C420.891,467.026,420.891,449.693,420.891,432.359C420.891,415.026,420.891,397.693,406.137,378.856C391.384,360.02,361.877,339.681,347.124,329.511L332.37,319.342" id="L_CheckPerf_DrawLoop_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_CheckPerf_DrawLoop_0" data-points="W3sieCI6Mjg1Ljc1NzcyOTY2MTU3MDA3LCJ5IjoxNDI2LjE3NTY5ODQxMTU3fSx7IngiOjQyMC44OTA2MjUsInkiOjEzMjIuNTE1NjI1fSx7IngiOjQyMC44OTA2MjUsInkiOjEyNTguNTE1NjI1fSx7IngiOjQyMC44OTA2MjUsInkiOjExODIuNTE1NjI1fSx7IngiOjQyMC44OTA2MjUsInkiOjEwNjIuOTI5Njg3NX0seyJ4Ijo0MjAuODkwNjI1LCJ5Ijo5NTUuMzQzNzV9LHsieCI6NDIwLjg5MDYyNSwieSI6OTAzLjM0Mzc1fSx7IngiOjQyMC44OTA2MjUsInkiOjgzOS4zNDM3NX0seyJ4Ijo0MjAuODkwNjI1LCJ5Ijo3NjMuMzQzNzV9LHsieCI6NDIwLjg5MDYyNSwieSI6Njg3LjM0Mzc1fSx7IngiOjQyMC44OTA2MjUsInkiOjU3OS44NTE1NjI1fSx7IngiOjQyMC44OTA2MjUsInkiOjQ4NC4zNTkzNzV9LHsieCI6NDIwLjg5MDYyNSwieSI6NDMyLjM1OTM3NX0seyJ4Ijo0MjAuODkwNjI1LCJ5IjozODAuMzU5Mzc1fSx7IngiOjMyOS4wNzY4MDcyNzI0MTIyLCJ5IjozMTcuMDcxNjMwMjI3NTg3OH1d" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M402.968,1699.516L410.855,1693.349C418.742,1687.182,434.516,1674.849,442.402,1639.349C450.289,1603.849,450.289,1545.182,450.289,1488.516C450.289,1431.849,450.289,1377.182,450.289,1339.182C450.289,1301.182,450.289,1279.849,450.289,1256.516C450.289,1233.182,450.289,1207.849,450.289,1175.251C450.289,1142.654,450.289,1102.792,450.289,1064.93C450.289,1027.068,450.289,991.206,450.289,964.608C450.289,938.01,450.289,920.677,450.289,901.344C450.289,882.01,450.289,860.677,450.289,837.344C450.289,814.01,450.289,788.677,450.289,763.344C450.289,738.01,450.289,712.677,450.289,682.095C450.289,651.513,450.289,615.682,450.289,581.852C450.289,548.021,450.289,516.19,450.289,491.608C450.289,467.026,450.289,449.693,450.289,432.359C450.289,415.026,450.289,397.693,431.187,378.286C412.085,358.879,373.881,337.399,354.779,326.658L335.677,315.918" id="L_RenderPerf_DrawLoop_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_RenderPerf_DrawLoop_0" data-points="W3sieCI6NDAyLjk2ODM5MDIxMzgxNTgsInkiOjE2OTkuNTE1NjI1fSx7IngiOjQ1MC4yODkwNjI1LCJ5IjoxNjYyLjUxNTYyNX0seyJ4Ijo0NTAuMjg5MDYyNSwieSI6MTQ4Ni41MTU2MjV9LHsieCI6NDUwLjI4OTA2MjUsInkiOjEzMjIuNTE1NjI1fSx7IngiOjQ1MC4yODkwNjI1LCJ5IjoxMjU4LjUxNTYyNX0seyJ4Ijo0NTAuMjg5MDYyNSwieSI6MTE4Mi41MTU2MjV9LHsieCI6NDUwLjI4OTA2MjUsInkiOjEwNjIuOTI5Njg3NX0seyJ4Ijo0NTAuMjg5MDYyNSwieSI6OTU1LjM0Mzc1fSx7IngiOjQ1MC4yODkwNjI1LCJ5Ijo5MDMuMzQzNzV9LHsieCI6NDUwLjI4OTA2MjUsInkiOjgzOS4zNDM3NX0seyJ4Ijo0NTAuMjg5MDYyNSwieSI6NzYzLjM0Mzc1fSx7IngiOjQ1MC4yODkwNjI1LCJ5Ijo2ODcuMzQzNzV9LHsieCI6NDUwLjI4OTA2MjUsInkiOjU3OS44NTE1NjI1fSx7IngiOjQ1MC4yODkwNjI1LCJ5Ijo0ODQuMzU5Mzc1fSx7IngiOjQ1MC4yODkwNjI1LCJ5Ijo0MzIuMzU5Mzc1fSx7IngiOjQ1MC4yODkwNjI1LCJ5IjozODAuMzU5Mzc1fSx7IngiOjMzMi4xOTA1NTE3NjE2Mzk3NywieSI6MzEzLjk1Nzg4NTczODM2MDIzfV0=" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/></g><g class="edgeLabels"><g class="edgeLabel"><g class="label" data-id="L_Start_Setup_0" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="L_Setup_DrawLoop_0" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="L_DrawLoop_TimeUpdate_0" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="L_TimeUpdate_CheckTick_0" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(255.890625, 687.34375)"><g class="label" data-id="L_CheckTick_ProcessTick_0" transform="translate(-11.328125, -12)"><foreignObject width="22.65625" height="24"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"><p>Yes</p></span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(81.4921875, 763.34375)"><g class="label" data-id="L_CheckTick_RenderGrid_0" transform="translate(-9.3984375, -12)"><foreignObject width="18.796875" height="24"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"><p>No</p></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="L_ProcessTick_RenderGrid_0" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="L_RenderGrid_CheckFrame_0" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(255.890625, 1182.515625)"><g class="label" data-id="L_CheckFrame_ProcessFrame_0" transform="translate(-11.328125, -12)"><foreignObject width="22.65625" height="24"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"><p>Yes</p></span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(81.4921875, 1258.515625)"><g class="label" data-id="L_CheckFrame_CheckPerf_0" transform="translate(-9.3984375, -12)"><foreignObject width="18.796875" height="24"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"><p>No</p></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="L_ProcessFrame_CheckPerf_0" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(207.09765625, 1662.515625)"><g class="label" data-id="L_CheckPerf_RenderPerf_0" transform="translate(-11.328125, -12)"><foreignObject width="22.65625" height="24"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"><p>Yes</p></span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(420.890625, 839.34375)"><g class="label" data-id="L_CheckPerf_DrawLoop_0" transform="translate(-9.3984375, -12)"><foreignObject width="18.796875" height="24"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"><p>No</p></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="L_RenderPerf_DrawLoop_0" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div></foreignObject></g></g></g><g class="nodes"><g class="node default" id="flowchart-Start-0" transform="translate(290.7890625, 27.5)"><g class="basic label-container outer-path"><path d="M-10.3828125 -19.5 C-5.01640033196475 -19.5, 0.35001183607050024 -19.5, 10.3828125 -19.5 C10.3828125 -19.5, 10.3828125 -19.5, 10.382812499999998 -19.5 C10.65768686959971 -19.49118531397744, 10.93256123919942 -19.482370627954882, 11.6321817896239 -19.45993515863156 C11.886851544643731 -19.435367473649986, 12.141521299663562 -19.410799788668417, 12.876417152847864 -19.3399052695533 C13.173537293566056 -19.291869189403087, 13.470657434284249 -19.243833109252876, 14.110405759676757 -19.140403561325776 C14.480942899862375 -19.05583087705922, 14.851480040047996 -18.971258192792664, 15.32907688623539 -18.862249829261074 C15.76930488241364 -18.731592470799278, 16.20953287859189 -18.600935112337478, 16.527422751460602 -18.50658706670804 C16.951399784878532 -18.350559599209507, 17.375376818296463 -18.194532131710975, 17.700519095147794 -18.074876768247425 C17.95113363489105 -17.963937145719267, 18.201748174634307 -17.852997523191114, 18.84354541279238 -17.568892924097174 C19.216765313380037 -17.37418434101935, 19.589985213967694 -17.179475757941525, 19.951804764076783 -16.990714730406097 C20.357104198460483 -16.745019831478842, 20.762403632844187 -16.49932493255159, 21.020743073605697 -16.342718045390892 C21.412594158802644 -16.069379691317586, 21.804445243999588 -15.796041337244281, 22.045967844578712 -15.627565626425154 C22.29551940212305 -15.42855490012939, 22.54507095966738 -15.229544173833627, 23.02326620850187 -14.848196188198123 C23.37594671318806 -14.527901085256934, 23.72862721787425 -14.207605982315743, 23.948622236767985 -14.007812326905688 C24.122545172254412 -13.82822261667739, 24.296468107740836 -13.648632906449093, 24.818233442968648 -13.10986736009568 C25.087825189191747 -12.793189554777102, 25.357416935414843 -12.476511749458524, 25.628526408126582 -12.158051136245305 C25.905948833776396 -11.78633035957746, 26.183371259426206 -11.414609582909616, 26.376171464640635 -11.156274872382312 C26.55178944514468 -10.886478494297306, 26.727407425648725 -10.616682116212301, 27.058096378604247 -10.108655082055241 C27.271074741527343 -9.730490432287457, 27.484053104450442 -9.35232578251967, 27.6714989742735 -9.019496659696287 C27.847664853827684 -8.65368444145604, 28.023830733381867 -8.287872223215793, 28.21385864880834 -7.893275190886684 C28.318577827469714 -7.634616794985508, 28.423297006131087 -7.3759583990843325, 28.682946729970325 -6.734618561215508 C28.763939380808733 -6.490681601316681, 28.84493203164714 -6.2467446414178545, 29.07683563421488 -5.548287939305138 C29.167925438454432 -5.200923037168841, 29.259015242693984 -4.853558135032545, 29.39390678754556 -4.339158212148133 C29.474062005983413 -3.9275781062811728, 29.55421722442127 -3.515998000414212, 29.632857276581777 -3.1121979531509023 C29.689639591719466 -2.6718055298793835, 29.746421906857154 -2.2314131066078646, 29.792705202509367 -1.872449005199798 C29.816519369899655 -1.5015241256461207, 29.840333537289943 -1.1305992460924434, 29.872793715913414 -0.6250057626472757 C29.872793715913414 -0.1498664917066015, 29.872793715913414 0.3252727792340727, 29.872793715913414 0.625005762647271 C29.846252656098354 1.0384041928247127, 29.819711596283295 1.4518026230021546, 29.792705202509367 1.8724490051997846 C29.746784244430135 2.2286028879434716, 29.700863286350902 2.584756770687158, 29.632857276581777 3.1121979531508885 C29.567282222228798 3.4489119979607876, 29.50170716787582 3.785626042770687, 29.39390678754556 4.339158212148129 C29.30427921980602 4.680946972772571, 29.214651652066483 5.022735733397014, 29.076835634214884 5.548287939305125 C28.936791137080597 5.970079651613149, 28.796746639946313 6.391871363921173, 28.68294672997033 6.734618561215495 C28.582621246196165 6.982424445798957, 28.482295762422 7.230230330382419, 28.213858648808344 7.893275190886679 C28.0061704040801 8.324544274881431, 27.798482159351856 8.755813358876182, 27.671498974273504 9.019496659696284 C27.526053067550208 9.277750595078603, 27.38060716082691 9.536004530460922, 27.05809637860425 10.108655082055236 C26.85319272051684 10.423442125213827, 26.64828906242943 10.738229168372417, 26.37617146464064 11.156274872382301 C26.136465524163498 11.477458994961253, 25.896759583686354 11.798643117540207, 25.628526408126582 12.158051136245302 C25.339658550264435 12.497371759136936, 25.050790692402284 12.836692382028568, 24.81823344296866 13.10986736009567 C24.49331661672279 13.445370659362071, 24.168399790476926 13.780873958628474, 23.94862223676799 14.007812326905684 C23.690706363786674 14.242044698667264, 23.43279049080536 14.476277070428845, 23.023266208501887 14.848196188198111 C22.76403745125829 15.054924223732936, 22.504808694014695 15.261652259267763, 22.045967844578715 15.627565626425152 C21.83073169506744 15.77770504690148, 21.615495545556158 15.927844467377804, 21.020743073605708 16.34271804539089 C20.673099337559698 16.55346172116334, 20.325455601513685 16.764205396935793, 19.951804764076787 16.990714730406093 C19.651988373916094 17.147128749111364, 19.352171983755397 17.303542767816634, 18.843545412792388 17.56889292409717 C18.55123265410885 17.698291111216474, 18.25891989542531 17.827689298335777, 17.700519095147804 18.07487676824742 C17.409882465292583 18.181833734649697, 17.119245835437365 18.288790701051973, 16.527422751460616 18.506587066708033 C16.1766317210593 18.61070000319145, 15.825840690657985 18.714812939674868, 15.329076886235413 18.86224982926107 C14.904876237756827 18.959070859108376, 14.480675589278242 19.055891888955685, 14.110405759676766 19.140403561325773 C13.668297670065488 19.211880168654684, 13.226189580454209 19.283356775983595, 12.876417152847878 19.3399052695533 C12.529402658999462 19.373381340428868, 12.182388165151044 19.406857411304436, 11.6321817896239 19.45993515863156 C11.194111294345568 19.473983226762645, 10.756040799067236 19.488031294893727, 10.382812500000004 19.5 C10.382812500000004 19.5, 10.382812500000002 19.5, 10.3828125 19.5 C5.3352229406716445 19.5, 0.287633381343289 19.5, -10.382812499999996 19.5 C-10.74020342560144 19.4885391686352, -11.097594351202881 19.477078337270395, -11.632181789623893 19.45993515863156 C-11.928555515194375 19.43134434176733, -12.224929240764858 19.402753524903098, -12.876417152847871 19.3399052695533 C-13.157462359024478 19.294468060156788, -13.438507565201085 19.24903085076028, -14.110405759676759 19.140403561325773 C-14.467564867860775 19.058884325563767, -14.82472397604479 18.977365089801758, -15.329076886235388 18.862249829261074 C-15.724919544865648 18.744765806000128, -16.120762203495907 18.627281782739185, -16.52742275146059 18.506587066708043 C-16.89738897000752 18.37043607835254, -17.267355188554447 18.234285089997037, -17.700519095147797 18.074876768247425 C-18.067600417226345 17.91238075604378, -18.43468173930489 17.749884743840138, -18.84354541279238 17.568892924097174 C-19.28284292337376 17.339711694210354, -19.722140433955136 17.110530464323535, -19.95180476407678 16.990714730406097 C-20.354727063568706 16.746460864619834, -20.757649363060633 16.502206998833568, -21.020743073605686 16.3427180453909 C-21.297944290737327 16.149354476167154, -21.575145507868967 15.95599090694341, -22.045967844578712 15.627565626425156 C-22.382057527326857 15.35954304815558, -22.718147210075003 15.091520469886003, -23.02326620850187 14.848196188198125 C-23.237765421409577 14.65339367837352, -23.45226463431728 14.458591168548917, -23.948622236767974 14.007812326905697 C-24.281681544177694 13.663901247327484, -24.614740851587413 13.319990167749271, -24.818233442968655 13.109867360095677 C-25.04648034375376 12.841755562816912, -25.27472724453887 12.573643765538147, -25.62852640812658 12.158051136245307 C-25.798807946116398 11.929889388306194, -25.969089484106213 11.701727640367082, -26.376171464640635 11.156274872382316 C-26.570459389311246 10.857796446475488, -26.764747313981857 10.559318020568663, -27.058096378604244 10.108655082055249 C-27.210735887144676 9.837628178215438, -27.363375395685104 9.566601274375627, -27.6714989742735 9.019496659696289 C-27.793608312823633 8.765934005475646, -27.91571765137376 8.512371351255005, -28.21385864880834 7.893275190886686 C-28.320446647590934 7.630000773154912, -28.42703464637353 7.366726355423138, -28.682946729970325 6.73461856121551 C-28.825329491544128 6.305784368967506, -28.967712253117927 5.876950176719502, -29.07683563421488 5.5482879393051325 C-29.150664994490267 5.266744590727936, -29.22449435476565 4.9852012421507395, -29.393906787545557 4.339158212148136 C-29.477004226853424 3.9124704239522625, -29.56010166616129 3.4857826357563892, -29.632857276581777 3.112197953150904 C-29.67030689317028 2.821746122153732, -29.70775650975878 2.53129429115656, -29.792705202509364 1.872449005199809 C-29.82200441419848 1.4160901332438156, -29.851303625887596 0.9597312612878219, -29.872793715913414 0.6250057626472781 C-29.872793715913414 0.22213739775031566, -29.872793715913414 -0.18073096714664683, -29.872793715913414 -0.6250057626472687 C-29.845834080535127 -1.0449238450901053, -29.818874445156837 -1.4648419275329418, -29.792705202509367 -1.8724490051997822 C-29.75993149127678 -2.1266354376184053, -29.727157780044198 -2.3808218700370287, -29.632857276581777 -3.112197953150895 C-29.57173373982865 -3.42605439591412, -29.51061020307553 -3.739910838677345, -29.39390678754556 -4.339158212148126 C-29.328435733395228 -4.588827716957703, -29.2629646792449 -4.83849722176728, -29.076835634214884 -5.548287939305123 C-28.992522045073162 -5.802227036253873, -28.90820845593144 -6.056166133202622, -28.682946729970332 -6.734618561215485 C-28.522107476011314 -7.131894628109688, -28.3612682220523 -7.52917069500389, -28.213858648808344 -7.893275190886676 C-28.04926950118337 -8.23504807757354, -27.884680353558394 -8.576820964260403, -27.671498974273504 -9.019496659696282 C-27.432219583328497 -9.44436144798485, -27.19294019238349 -9.869226236273418, -27.058096378604247 -10.108655082055243 C-26.78770403283417 -10.52405033566935, -26.517311687064097 -10.939445589283457, -26.37617146464064 -11.156274872382308 C-26.20555035680669 -11.38489161297711, -26.03492924897274 -11.61350835357191, -25.628526408126586 -12.158051136245302 C-25.31170138465389 -12.530211836670874, -24.99487636118119 -12.902372537096447, -24.818233442968662 -13.10986736009567 C-24.59850804968528 -13.336751868451044, -24.3787826564019 -13.563636376806418, -23.948622236767996 -14.007812326905677 C-23.621779330881576 -14.304642406242317, -23.294936424995157 -14.601472485578958, -23.023266208501887 -14.848196188198107 C-22.783624110714754 -15.0393043840393, -22.543982012927625 -15.230412579880493, -22.04596784457872 -15.627565626425149 C-21.70569060351638 -15.864928299425884, -21.36541336245404 -16.10229097242662, -21.02074307360571 -16.342718045390885 C-20.6966806879229 -16.539166567993767, -20.37261830224009 -16.735615090596653, -19.95180476407679 -16.99071473040609 C-19.563815130818455 -17.193128673557744, -19.17582549756012 -17.3955426167094, -18.843545412792388 -17.56889292409717 C-18.4136179174569 -17.75920907293617, -17.98369042212141 -17.94952522177517, -17.700519095147804 -18.07487676824742 C-17.330303184314023 -18.211119645672618, -16.96008727348024 -18.347362523097814, -16.52742275146062 -18.506587066708033 C-16.26869229948392 -18.58337690675086, -16.00996184750722 -18.66016674679369, -15.329076886235413 -18.862249829261067 C-14.953311455224144 -18.94801583679079, -14.577546024212875 -19.033781844320515, -14.110405759676768 -19.140403561325773 C-13.654130435788012 -19.214170617224124, -13.197855111899258 -19.287937673122475, -12.87641715284788 -19.3399052695533 C-12.621189714384213 -19.364526753585984, -12.365962275920547 -19.38914823761867, -11.632181789623903 -19.45993515863156 C-11.233440387157353 -19.472722019305603, -10.834698984690803 -19.48550887997965, -10.382812500000005 -19.5 C-10.382812500000004 -19.5, -10.382812500000004 -19.5, -10.3828125 -19.5" stroke="none" stroke-width="0" fill="#ECECFF" style=""/><path d="M-10.3828125 -19.5 C-5.491468619642545 -19.5, -0.6001247392850892 -19.5, 10.3828125 -19.5 M-10.3828125 -19.5 C-5.308714376620443 -19.5, -0.23461625324088686 -19.5, 10.3828125 -19.5 M10.3828125 -19.5 C10.3828125 -19.5, 10.382812499999998 -19.5, 10.382812499999998 -19.5 M10.3828125 -19.5 C10.3828125 -19.5, 10.382812499999998 -19.5, 10.382812499999998 -19.5 M10.382812499999998 -19.5 C10.829992954788175 -19.485659793198895, 11.277173409576353 -19.47131958639779, 11.6321817896239 -19.45993515863156 M10.382812499999998 -19.5 C10.641343942103974 -19.49170939985265, 10.899875384207949 -19.4834187997053, 11.6321817896239 -19.45993515863156 M11.6321817896239 -19.45993515863156 C11.903596727011962 -19.433752086045953, 12.175011664400026 -19.407569013460346, 12.876417152847864 -19.3399052695533 M11.6321817896239 -19.45993515863156 C12.026937906887754 -19.421853510762805, 12.42169402415161 -19.383771862894054, 12.876417152847864 -19.3399052695533 M12.876417152847864 -19.3399052695533 C13.346068900758084 -19.263975617154877, 13.815720648668304 -19.188045964756455, 14.110405759676757 -19.140403561325776 M12.876417152847864 -19.3399052695533 C13.151625331023636 -19.295411745577137, 13.426833509199408 -19.250918221600976, 14.110405759676757 -19.140403561325776 M14.110405759676757 -19.140403561325776 C14.447719254213919 -19.063413957373932, 14.78503274875108 -18.986424353422088, 15.32907688623539 -18.862249829261074 M14.110405759676757 -19.140403561325776 C14.584489535625785 -19.032197033151167, 15.058573311574813 -18.923990504976558, 15.32907688623539 -18.862249829261074 M15.32907688623539 -18.862249829261074 C15.649301651013372 -18.76720879996906, 15.969526415791357 -18.672167770677046, 16.527422751460602 -18.50658706670804 M15.32907688623539 -18.862249829261074 C15.780056158877782 -18.72840154837932, 16.231035431520173 -18.594553267497567, 16.527422751460602 -18.50658706670804 M16.527422751460602 -18.50658706670804 C16.904128912967582 -18.367955717039887, 17.280835074474567 -18.22932436737173, 17.700519095147794 -18.074876768247425 M16.527422751460602 -18.50658706670804 C16.89042040635432 -18.37300057419361, 17.253418061248038 -18.239414081679186, 17.700519095147794 -18.074876768247425 M17.700519095147794 -18.074876768247425 C17.934949993902496 -17.97110116351425, 18.169380892657195 -17.867325558781072, 18.84354541279238 -17.568892924097174 M17.700519095147794 -18.074876768247425 C18.003257571202095 -17.940863425316003, 18.305996047256393 -17.80685008238458, 18.84354541279238 -17.568892924097174 M18.84354541279238 -17.568892924097174 C19.21619299556501 -17.374482918856863, 19.588840578337642 -17.18007291361655, 19.951804764076783 -16.990714730406097 M18.84354541279238 -17.568892924097174 C19.171275346492372 -17.39791642760693, 19.499005280192367 -17.226939931116686, 19.951804764076783 -16.990714730406097 M19.951804764076783 -16.990714730406097 C20.218605462781355 -16.828978578956445, 20.485406161485926 -16.667242427506793, 21.020743073605697 -16.342718045390892 M19.951804764076783 -16.990714730406097 C20.2601294914405 -16.803806468760992, 20.56845421880422 -16.616898207115888, 21.020743073605697 -16.342718045390892 M21.020743073605697 -16.342718045390892 C21.234093299383144 -16.193894163670965, 21.447443525160587 -16.04507028195104, 22.045967844578712 -15.627565626425154 M21.020743073605697 -16.342718045390892 C21.389859413287237 -16.085238465617863, 21.758975752968773 -15.827758885844835, 22.045967844578712 -15.627565626425154 M22.045967844578712 -15.627565626425154 C22.28350431505229 -15.438136612333423, 22.52104078552587 -15.248707598241694, 23.02326620850187 -14.848196188198123 M22.045967844578712 -15.627565626425154 C22.2677804652583 -15.450675964114915, 22.489593085937887 -15.273786301804677, 23.02326620850187 -14.848196188198123 M23.02326620850187 -14.848196188198123 C23.369398444244304 -14.53384804985395, 23.715530679986742 -14.219499911509777, 23.948622236767985 -14.007812326905688 M23.02326620850187 -14.848196188198123 C23.227728608564085 -14.662508846240279, 23.4321910086263 -14.476821504282432, 23.948622236767985 -14.007812326905688 M23.948622236767985 -14.007812326905688 C24.270897755890406 -13.675036394099592, 24.593173275012827 -13.342260461293497, 24.818233442968648 -13.10986736009568 M23.948622236767985 -14.007812326905688 C24.19499723999409 -13.753409908310783, 24.441372243220197 -13.499007489715877, 24.818233442968648 -13.10986736009568 M24.818233442968648 -13.10986736009568 C25.033168404312356 -12.857392524355594, 25.248103365656068 -12.60491768861551, 25.628526408126582 -12.158051136245305 M24.818233442968648 -13.10986736009568 C25.030397570550992 -12.860647303356602, 25.242561698133336 -12.611427246617525, 25.628526408126582 -12.158051136245305 M25.628526408126582 -12.158051136245305 C25.883335215127715 -11.816630548423648, 26.138144022128852 -11.475209960601992, 26.376171464640635 -11.156274872382312 M25.628526408126582 -12.158051136245305 C25.821368485478416 -11.899660320868508, 26.01421056283025 -11.64126950549171, 26.376171464640635 -11.156274872382312 M26.376171464640635 -11.156274872382312 C26.611627453736872 -10.794551244344557, 26.847083442833107 -10.4328276163068, 27.058096378604247 -10.108655082055241 M26.376171464640635 -11.156274872382312 C26.557916325854777 -10.877065960228764, 26.73966118706892 -10.597857048075216, 27.058096378604247 -10.108655082055241 M27.058096378604247 -10.108655082055241 C27.28505204355339 -9.705672317184908, 27.512007708502534 -9.302689552314572, 27.6714989742735 -9.019496659696287 M27.058096378604247 -10.108655082055241 C27.27783315334769 -9.718490187737029, 27.497569928091128 -9.328325293418818, 27.6714989742735 -9.019496659696287 M27.6714989742735 -9.019496659696287 C27.887464499785175 -8.57103962504931, 28.103430025296845 -8.122582590402335, 28.21385864880834 -7.893275190886684 M27.6714989742735 -9.019496659696287 C27.80978400534806 -8.732344833844293, 27.94806903642262 -8.445193007992298, 28.21385864880834 -7.893275190886684 M28.21385864880834 -7.893275190886684 C28.38714244310893 -7.465260868749973, 28.560426237409526 -7.037246546613262, 28.682946729970325 -6.734618561215508 M28.21385864880834 -7.893275190886684 C28.333995145375525 -7.596535721684593, 28.454131641942705 -7.299796252482501, 28.682946729970325 -6.734618561215508 M28.682946729970325 -6.734618561215508 C28.805933645837204 -6.36420156592842, 28.928920561704082 -5.993784570641331, 29.07683563421488 -5.548287939305138 M28.682946729970325 -6.734618561215508 C28.773908733449314 -6.460655499563884, 28.864870736928303 -6.186692437912258, 29.07683563421488 -5.548287939305138 M29.07683563421488 -5.548287939305138 C29.16889407478984 -5.197229207012285, 29.260952515364803 -4.8461704747194325, 29.39390678754556 -4.339158212148133 M29.07683563421488 -5.548287939305138 C29.197038073727505 -5.089903941376669, 29.317240513240133 -4.6315199434482, 29.39390678754556 -4.339158212148133 M29.39390678754556 -4.339158212148133 C29.47257877814785 -3.9351941677364874, 29.551250768750137 -3.5312301233248418, 29.632857276581777 -3.1121979531509023 M29.39390678754556 -4.339158212148133 C29.462673312860673 -3.986056638465298, 29.53143983817579 -3.6329550647824624, 29.632857276581777 -3.1121979531509023 M29.632857276581777 -3.1121979531509023 C29.674684590254092 -2.787793568045747, 29.71651190392641 -2.463389182940592, 29.792705202509367 -1.872449005199798 M29.632857276581777 -3.1121979531509023 C29.676687063902488 -2.7722627778619526, 29.720516851223195 -2.432327602573003, 29.792705202509367 -1.872449005199798 M29.792705202509367 -1.872449005199798 C29.816412866914064 -1.5031829956143496, 29.840120531318764 -1.1339169860289013, 29.872793715913414 -0.6250057626472757 M29.792705202509367 -1.872449005199798 C29.810960653232645 -1.5881056246501344, 29.829216103955922 -1.3037622441004708, 29.872793715913414 -0.6250057626472757 M29.872793715913414 -0.6250057626472757 C29.872793715913414 -0.12832576830844655, 29.872793715913414 0.3683542260303826, 29.872793715913414 0.625005762647271 M29.872793715913414 -0.6250057626472757 C29.872793715913414 -0.1615573846785, 29.872793715913414 0.3018909932902757, 29.872793715913414 0.625005762647271 M29.872793715913414 0.625005762647271 C29.851250617606414 0.9605569080547509, 29.829707519299415 1.296108053462231, 29.792705202509367 1.8724490051997846 M29.872793715913414 0.625005762647271 C29.841880373701255 1.1065060204023738, 29.810967031489096 1.5880062781574766, 29.792705202509367 1.8724490051997846 M29.792705202509367 1.8724490051997846 C29.75585865942334 2.1582235172020887, 29.719012116337314 2.4439980292043924, 29.632857276581777 3.1121979531508885 M29.792705202509367 1.8724490051997846 C29.754648355315663 2.1676103968596543, 29.716591508121958 2.4627717885195235, 29.632857276581777 3.1121979531508885 M29.632857276581777 3.1121979531508885 C29.553940396525814 3.5174194531497536, 29.475023516469854 3.922640953148618, 29.39390678754556 4.339158212148129 M29.632857276581777 3.1121979531508885 C29.565590906570907 3.457596546404377, 29.498324536560034 3.802995139657865, 29.39390678754556 4.339158212148129 M29.39390678754556 4.339158212148129 C29.31610331188321 4.635856585088323, 29.23829983622086 4.9325549580285175, 29.076835634214884 5.548287939305125 M29.39390678754556 4.339158212148129 C29.288365637199238 4.741632360242561, 29.18282448685292 5.144106508336994, 29.076835634214884 5.548287939305125 M29.076835634214884 5.548287939305125 C28.946393031603144 5.941160275165372, 28.815950428991407 6.334032611025618, 28.68294672997033 6.734618561215495 M29.076835634214884 5.548287939305125 C28.990564723695343 5.808122176387054, 28.9042938131758 6.067956413468984, 28.68294672997033 6.734618561215495 M28.68294672997033 6.734618561215495 C28.51651476110635 7.14570874205274, 28.35008279224237 7.5567989228899854, 28.213858648808344 7.893275190886679 M28.68294672997033 6.734618561215495 C28.513614655380152 7.152872059266183, 28.344282580789972 7.571125557316871, 28.213858648808344 7.893275190886679 M28.213858648808344 7.893275190886679 C28.044290922242922 8.245386203267906, 27.8747231956775 8.597497215649131, 27.671498974273504 9.019496659696284 M28.213858648808344 7.893275190886679 C28.00529049591273 8.326371423017997, 27.796722343017112 8.759467655149317, 27.671498974273504 9.019496659696284 M27.671498974273504 9.019496659696284 C27.536574176777805 9.259069300267166, 27.40164937928211 9.498641940838047, 27.05809637860425 10.108655082055236 M27.671498974273504 9.019496659696284 C27.443127584147717 9.42499318797547, 27.214756194021927 9.830489716254657, 27.05809637860425 10.108655082055236 M27.05809637860425 10.108655082055236 C26.86370652575711 10.407290097012758, 26.66931667290997 10.705925111970283, 26.37617146464064 11.156274872382301 M27.05809637860425 10.108655082055236 C26.807200854644478 10.494097981739003, 26.556305330684705 10.879540881422772, 26.37617146464064 11.156274872382301 M26.37617146464064 11.156274872382301 C26.1439549052664 11.46742390658002, 25.911738345892157 11.778572940777739, 25.628526408126582 12.158051136245302 M26.37617146464064 11.156274872382301 C26.196686946420282 11.396767775421596, 26.01720242819992 11.63726067846089, 25.628526408126582 12.158051136245302 M25.628526408126582 12.158051136245302 C25.356426618755908 12.477675031756723, 25.084326829385233 12.797298927268145, 24.81823344296866 13.10986736009567 M25.628526408126582 12.158051136245302 C25.394890669314034 12.432492969304672, 25.16125493050148 12.70693480236404, 24.81823344296866 13.10986736009567 M24.81823344296866 13.10986736009567 C24.557402588225244 13.379196632229675, 24.296571733481834 13.648525904363682, 23.94862223676799 14.007812326905684 M24.81823344296866 13.10986736009567 C24.617582622336524 13.317055806137093, 24.41693180170439 13.524244252178516, 23.94862223676799 14.007812326905684 M23.94862223676799 14.007812326905684 C23.586787213051792 14.336421321814626, 23.224952189335593 14.66503031672357, 23.023266208501887 14.848196188198111 M23.94862223676799 14.007812326905684 C23.657482153336876 14.272218047533334, 23.366342069905762 14.536623768160984, 23.023266208501887 14.848196188198111 M23.023266208501887 14.848196188198111 C22.775356639021293 15.045897472708177, 22.527447069540703 15.243598757218244, 22.045967844578715 15.627565626425152 M23.023266208501887 14.848196188198111 C22.666802906191766 15.132466185903576, 22.310339603881644 15.416736183609043, 22.045967844578715 15.627565626425152 M22.045967844578715 15.627565626425152 C21.832964584798994 15.776147479684983, 21.619961325019272 15.924729332944814, 21.020743073605708 16.34271804539089 M22.045967844578715 15.627565626425152 C21.768563941629008 15.821070580501456, 21.4911600386793 16.01457553457776, 21.020743073605708 16.34271804539089 M21.020743073605708 16.34271804539089 C20.798396151881434 16.477506055995693, 20.576049230157157 16.612294066600498, 19.951804764076787 16.990714730406093 M21.020743073605708 16.34271804539089 C20.59766648601891 16.599189559060008, 20.17458989843211 16.855661072729124, 19.951804764076787 16.990714730406093 M19.951804764076787 16.990714730406093 C19.670442746319623 17.137501114849034, 19.389080728562455 17.284287499291974, 18.843545412792388 17.56889292409717 M19.951804764076787 16.990714730406093 C19.607406801430916 17.170386926921022, 19.26300883878504 17.35005912343595, 18.843545412792388 17.56889292409717 M18.843545412792388 17.56889292409717 C18.396575175166753 17.76675338939303, 17.949604937541114 17.96461385468889, 17.700519095147804 18.07487676824742 M18.843545412792388 17.56889292409717 C18.574464568954134 17.688007031664732, 18.305383725115885 17.807121139232297, 17.700519095147804 18.07487676824742 M17.700519095147804 18.07487676824742 C17.437889992454313 18.17152670575544, 17.175260889760818 18.268176643263455, 16.527422751460616 18.506587066708033 M17.700519095147804 18.07487676824742 C17.465199105204253 18.16147669982079, 17.2298791152607 18.248076631394156, 16.527422751460616 18.506587066708033 M16.527422751460616 18.506587066708033 C16.157740306822443 18.616306875773894, 15.788057862184269 18.726026684839756, 15.329076886235413 18.86224982926107 M16.527422751460616 18.506587066708033 C16.281338893579473 18.579623464006627, 16.03525503569833 18.652659861305224, 15.329076886235413 18.86224982926107 M15.329076886235413 18.86224982926107 C14.985320066597952 18.940710080120432, 14.64156324696049 19.019170330979794, 14.110405759676766 19.140403561325773 M15.329076886235413 18.86224982926107 C14.945137868248604 18.949881404680323, 14.561198850261796 19.03751298009957, 14.110405759676766 19.140403561325773 M14.110405759676766 19.140403561325773 C13.735839166386755 19.20096058332159, 13.361272573096745 19.2615176053174, 12.876417152847878 19.3399052695533 M14.110405759676766 19.140403561325773 C13.69143142240083 19.208140082982034, 13.272457085124895 19.275876604638295, 12.876417152847878 19.3399052695533 M12.876417152847878 19.3399052695533 C12.594431486278875 19.36710808766983, 12.312445819709872 19.39431090578636, 11.6321817896239 19.45993515863156 M12.876417152847878 19.3399052695533 C12.42689633516331 19.38327000220745, 11.97737551747874 19.4266347348616, 11.6321817896239 19.45993515863156 M11.6321817896239 19.45993515863156 C11.366853031474328 19.468443735474317, 11.101524273324756 19.476952312317078, 10.382812500000004 19.5 M11.6321817896239 19.45993515863156 C11.34965879916487 19.46899512103794, 11.067135808705839 19.47805508344432, 10.382812500000004 19.5 M10.382812500000004 19.5 C10.382812500000002 19.5, 10.382812500000002 19.5, 10.3828125 19.5 M10.382812500000004 19.5 C10.382812500000002 19.5, 10.382812500000002 19.5, 10.3828125 19.5 M10.3828125 19.5 C5.726644575220298 19.5, 1.0704766504405967 19.5, -10.382812499999996 19.5 M10.3828125 19.5 C2.331270346523226 19.5, -5.720271806953548 19.5, -10.382812499999996 19.5 M-10.382812499999996 19.5 C-10.836776229589438 19.48544226677886, -11.29073995917888 19.470884533557726, -11.632181789623893 19.45993515863156 M-10.382812499999996 19.5 C-10.799211574807995 19.486646892142538, -11.215610649615993 19.473293784285076, -11.632181789623893 19.45993515863156 M-11.632181789623893 19.45993515863156 C-12.055127104419407 19.419134132779398, -12.478072419214921 19.378333106927236, -12.876417152847871 19.3399052695533 M-11.632181789623893 19.45993515863156 C-11.98353687674734 19.426040355943076, -12.334891963870787 19.392145553254593, -12.876417152847871 19.3399052695533 M-12.876417152847871 19.3399052695533 C-13.189963684101208 19.289213497969925, -13.503510215354545 19.23852172638655, -14.110405759676759 19.140403561325773 M-12.876417152847871 19.3399052695533 C-13.33266312393686 19.26614295918798, -13.788909095025847 19.192380648822663, -14.110405759676759 19.140403561325773 M-14.110405759676759 19.140403561325773 C-14.411331076238325 19.071719321541806, -14.712256392799889 19.00303508175784, -15.329076886235388 18.862249829261074 M-14.110405759676759 19.140403561325773 C-14.559056270344799 19.038002009983984, -15.007706781012837 18.935600458642195, -15.329076886235388 18.862249829261074 M-15.329076886235388 18.862249829261074 C-15.650987552776341 18.76670843317529, -15.972898219317294 18.671167037089507, -16.52742275146059 18.506587066708043 M-15.329076886235388 18.862249829261074 C-15.766930116539516 18.732297288845317, -16.204783346843648 18.60234474842956, -16.52742275146059 18.506587066708043 M-16.52742275146059 18.506587066708043 C-16.89784599723836 18.370267888106877, -17.268269243016125 18.23394870950571, -17.700519095147797 18.074876768247425 M-16.52742275146059 18.506587066708043 C-16.889011814305125 18.3735189490886, -17.250600877149655 18.240450831469158, -17.700519095147797 18.074876768247425 M-17.700519095147797 18.074876768247425 C-17.967086112631627 17.956875457036954, -18.233653130115453 17.838874145826487, -18.84354541279238 17.568892924097174 M-17.700519095147797 18.074876768247425 C-17.981672808472815 17.950418359487017, -18.262826521797837 17.825959950726613, -18.84354541279238 17.568892924097174 M-18.84354541279238 17.568892924097174 C-19.268789261584175 17.34704348056418, -19.694033110375965 17.125194037031186, -19.95180476407678 16.990714730406097 M-18.84354541279238 17.568892924097174 C-19.25222126254381 17.35568699505123, -19.660897112295242 17.14248106600528, -19.95180476407678 16.990714730406097 M-19.95180476407678 16.990714730406097 C-20.358093798978437 16.74441992982932, -20.764382833880095 16.498125129252543, -21.020743073605686 16.3427180453909 M-19.95180476407678 16.990714730406097 C-20.34504770120031 16.7523285509698, -20.738290638323846 16.513942371533506, -21.020743073605686 16.3427180453909 M-21.020743073605686 16.3427180453909 C-21.3816974635784 16.09093188840964, -21.74265185355112 15.839145731428376, -22.045967844578712 15.627565626425156 M-21.020743073605686 16.3427180453909 C-21.333323097859704 16.12467575184246, -21.645903122113722 15.906633458294023, -22.045967844578712 15.627565626425156 M-22.045967844578712 15.627565626425156 C-22.401090041014147 15.344365124966428, -22.756212237449578 15.0611646235077, -23.02326620850187 14.848196188198125 M-22.045967844578712 15.627565626425156 C-22.388299649408264 15.354565121905503, -22.730631454237813 15.081564617385853, -23.02326620850187 14.848196188198125 M-23.02326620850187 14.848196188198125 C-23.209029838660314 14.679490574324545, -23.394793468818758 14.510784960450964, -23.948622236767974 14.007812326905697 M-23.02326620850187 14.848196188198125 C-23.31678711779408 14.581628264516624, -23.610308027086297 14.315060340835124, -23.948622236767974 14.007812326905697 M-23.948622236767974 14.007812326905697 C-24.156447623046986 13.79321555279108, -24.364273009325995 13.578618778676466, -24.818233442968655 13.109867360095677 M-23.948622236767974 14.007812326905697 C-24.146962394070773 13.803009830460802, -24.34530255137357 13.598207334015907, -24.818233442968655 13.109867360095677 M-24.818233442968655 13.109867360095677 C-25.02734179295374 12.864236793601007, -25.23645014293883 12.618606227106335, -25.62852640812658 12.158051136245307 M-24.818233442968655 13.109867360095677 C-25.043109267217208 12.845715421136438, -25.26798509146576 12.581563482177199, -25.62852640812658 12.158051136245307 M-25.62852640812658 12.158051136245307 C-25.839708801563678 11.875085968151424, -26.050891195000773 11.592120800057543, -26.376171464640635 11.156274872382316 M-25.62852640812658 12.158051136245307 C-25.878820264612454 11.822680170793648, -26.12911412109833 11.487309205341989, -26.376171464640635 11.156274872382316 M-26.376171464640635 11.156274872382316 C-26.522881073925582 10.930889515474437, -26.66959068321053 10.705504158566557, -27.058096378604244 10.108655082055249 M-26.376171464640635 11.156274872382316 C-26.53284023859097 10.915589564138235, -26.689509012541304 10.674904255894157, -27.058096378604244 10.108655082055249 M-27.058096378604244 10.108655082055249 C-27.24079364613002 9.784257583458817, -27.42349091365579 9.459860084862388, -27.6714989742735 9.019496659696289 M-27.058096378604244 10.108655082055249 C-27.26518793170934 9.740943059223454, -27.47227948481444 9.373231036391662, -27.6714989742735 9.019496659696289 M-27.6714989742735 9.019496659696289 C-27.88789124414936 8.570153481246217, -28.104283514025212 8.120810302796146, -28.21385864880834 7.893275190886686 M-27.6714989742735 9.019496659696289 C-27.831811432140015 8.68660441079937, -27.99212389000653 8.353712161902454, -28.21385864880834 7.893275190886686 M-28.21385864880834 7.893275190886686 C-28.39632706255205 7.442574681152935, -28.578795476295763 6.991874171419186, -28.682946729970325 6.73461856121551 M-28.21385864880834 7.893275190886686 C-28.322307373177495 7.625404744981425, -28.430756097546652 7.357534299076164, -28.682946729970325 6.73461856121551 M-28.682946729970325 6.73461856121551 C-28.77149867200243 6.467914220650753, -28.860050614034535 6.2012098800859965, -29.07683563421488 5.5482879393051325 M-28.682946729970325 6.73461856121551 C-28.787110455896336 6.420894014962277, -28.891274181822347 6.107169468709044, -29.07683563421488 5.5482879393051325 M-29.07683563421488 5.5482879393051325 C-29.1688788096171 5.197287419731907, -29.26092198501932 4.846286900158682, -29.393906787545557 4.339158212148136 M-29.07683563421488 5.5482879393051325 C-29.190676339387107 5.114163991609712, -29.304517044559333 4.680040043914292, -29.393906787545557 4.339158212148136 M-29.393906787545557 4.339158212148136 C-29.443036462576146 4.086887714426569, -29.49216613760673 3.8346172167050026, -29.632857276581777 3.112197953150904 M-29.393906787545557 4.339158212148136 C-29.455522796212374 4.022773030192075, -29.517138804879192 3.7063878482360155, -29.632857276581777 3.112197953150904 M-29.632857276581777 3.112197953150904 C-29.672902922161757 2.8016118339397416, -29.712948567741737 2.4910257147285786, -29.792705202509364 1.872449005199809 M-29.632857276581777 3.112197953150904 C-29.679399250160476 2.7512275968267343, -29.725941223739177 2.3902572405025646, -29.792705202509364 1.872449005199809 M-29.792705202509364 1.872449005199809 C-29.816125254497468 1.5076627911593974, -29.83954530648557 1.1428765771189857, -29.872793715913414 0.6250057626472781 M-29.792705202509364 1.872449005199809 C-29.81593820071282 1.5105763048423582, -29.83917119891628 1.1487036044849073, -29.872793715913414 0.6250057626472781 M-29.872793715913414 0.6250057626472781 C-29.872793715913414 0.23888350488091709, -29.872793715913414 -0.14723875288544397, -29.872793715913414 -0.6250057626472687 M-29.872793715913414 0.6250057626472781 C-29.872793715913414 0.2486066638915278, -29.872793715913414 -0.12779243486422254, -29.872793715913414 -0.6250057626472687 M-29.872793715913414 -0.6250057626472687 C-29.856346563311984 -0.8811834403171823, -29.839899410710554 -1.137361117987096, -29.792705202509367 -1.8724490051997822 M-29.872793715913414 -0.6250057626472687 C-29.85507568626485 -0.9009783761597807, -29.837357656616284 -1.1769509896722927, -29.792705202509367 -1.8724490051997822 M-29.792705202509367 -1.8724490051997822 C-29.740866124208566 -2.2745026597169447, -29.68902704590776 -2.676556314234107, -29.632857276581777 -3.112197953150895 M-29.792705202509367 -1.8724490051997822 C-29.736229274817507 -2.3104651479445013, -29.679753347125647 -2.7484812906892206, -29.632857276581777 -3.112197953150895 M-29.632857276581777 -3.112197953150895 C-29.568267185429686 -3.4438544200962853, -29.503677094277595 -3.775510887041675, -29.39390678754556 -4.339158212148126 M-29.632857276581777 -3.112197953150895 C-29.57467100477778 -3.410972161191521, -29.516484732973783 -3.7097463692321475, -29.39390678754556 -4.339158212148126 M-29.39390678754556 -4.339158212148126 C-29.301915607134145 -4.689960452286649, -29.209924426722726 -5.040762692425171, -29.076835634214884 -5.548287939305123 M-29.39390678754556 -4.339158212148126 C-29.300308684163298 -4.6960883460193, -29.20671058078104 -5.053018479890474, -29.076835634214884 -5.548287939305123 M-29.076835634214884 -5.548287939305123 C-28.967246096290488 -5.878354166811749, -28.85765655836609 -6.208420394318376, -28.682946729970332 -6.734618561215485 M-29.076835634214884 -5.548287939305123 C-28.93685427251301 -5.9698894977499934, -28.796872910811132 -6.391491056194864, -28.682946729970332 -6.734618561215485 M-28.682946729970332 -6.734618561215485 C-28.498591571255155 -7.189979367506491, -28.31423641253998 -7.645340173797498, -28.213858648808344 -7.893275190886676 M-28.682946729970332 -6.734618561215485 C-28.507651010980002 -7.167602376233768, -28.33235529198967 -7.600586191252051, -28.213858648808344 -7.893275190886676 M-28.213858648808344 -7.893275190886676 C-28.041205059973674 -8.251794062296874, -27.868551471139 -8.610312933707073, -27.671498974273504 -9.019496659696282 M-28.213858648808344 -7.893275190886676 C-28.094392548518762 -8.141349104303048, -27.974926448229184 -8.389423017719418, -27.671498974273504 -9.019496659696282 M-27.671498974273504 -9.019496659696282 C-27.45339589594949 -9.4067607605921, -27.235292817625478 -9.79402486148792, -27.058096378604247 -10.108655082055243 M-27.671498974273504 -9.019496659696282 C-27.470749438276272 -9.37594778895419, -27.269999902279043 -9.732398918212095, -27.058096378604247 -10.108655082055243 M-27.058096378604247 -10.108655082055243 C-26.904417556717693 -10.34474702101481, -26.75073873483114 -10.580838959974376, -26.37617146464064 -11.156274872382308 M-27.058096378604247 -10.108655082055243 C-26.856610269233506 -10.418191852644703, -26.65512415986277 -10.727728623234166, -26.37617146464064 -11.156274872382308 M-26.37617146464064 -11.156274872382308 C-26.21715437757468 -11.369343282296043, -26.05813729050872 -11.582411692209778, -25.628526408126586 -12.158051136245302 M-26.37617146464064 -11.156274872382308 C-26.22593441891327 -11.357578826780559, -26.075697373185893 -11.55888278117881, -25.628526408126586 -12.158051136245302 M-25.628526408126586 -12.158051136245302 C-25.395176222035772 -12.432157542829309, -25.16182603594496 -12.706263949413316, -24.818233442968662 -13.10986736009567 M-25.628526408126586 -12.158051136245302 C-25.345120739127125 -12.490955561291468, -25.06171507012767 -12.823859986337636, -24.818233442968662 -13.10986736009567 M-24.818233442968662 -13.10986736009567 C-24.636440895576957 -13.297583090723322, -24.454648348185252 -13.485298821350973, -23.948622236767996 -14.007812326905677 M-24.818233442968662 -13.10986736009567 C-24.595846737270783 -13.339499892016827, -24.3734600315729 -13.569132423937983, -23.948622236767996 -14.007812326905677 M-23.948622236767996 -14.007812326905677 C-23.579934757289703 -14.34264454083171, -23.21124727781141 -14.677476754757741, -23.023266208501887 -14.848196188198107 M-23.948622236767996 -14.007812326905677 C-23.69356737658883 -14.239446402538594, -23.438512516409666 -14.47108047817151, -23.023266208501887 -14.848196188198107 M-23.023266208501887 -14.848196188198107 C-22.753379223115704 -15.063423877049281, -22.483492237729525 -15.278651565900457, -22.04596784457872 -15.627565626425149 M-23.023266208501887 -14.848196188198107 C-22.67967691836618 -15.12219950378633, -22.336087628230473 -15.396202819374553, -22.04596784457872 -15.627565626425149 M-22.04596784457872 -15.627565626425149 C-21.70244171985505 -15.867194580026121, -21.35891559513138 -16.106823533627093, -21.02074307360571 -16.342718045390885 M-22.04596784457872 -15.627565626425149 C-21.679968171791135 -15.882871154291292, -21.31396849900355 -16.138176682157436, -21.02074307360571 -16.342718045390885 M-21.02074307360571 -16.342718045390885 C-20.748428397109084 -16.507796802581808, -20.476113720612457 -16.672875559772734, -19.95180476407679 -16.99071473040609 M-21.02074307360571 -16.342718045390885 C-20.68338078582277 -16.547229046805768, -20.346018498039825 -16.75174004822065, -19.95180476407679 -16.99071473040609 M-19.95180476407679 -16.99071473040609 C-19.537283400269928 -17.206970260390527, -19.122762036463065 -17.42322579037496, -18.843545412792388 -17.56889292409717 M-19.95180476407679 -16.99071473040609 C-19.525435072827197 -17.21315152522818, -19.099065381577606 -17.43558832005027, -18.843545412792388 -17.56889292409717 M-18.843545412792388 -17.56889292409717 C-18.4852783787768 -17.727487112441906, -18.12701134476122 -17.886081300786643, -17.700519095147804 -18.07487676824742 M-18.843545412792388 -17.56889292409717 C-18.43995216117107 -17.747551684421488, -18.036358909549755 -17.92621044474581, -17.700519095147804 -18.07487676824742 M-17.700519095147804 -18.07487676824742 C-17.315837554639998 -18.216443131111472, -16.931156014132192 -18.358009493975526, -16.52742275146062 -18.506587066708033 M-17.700519095147804 -18.07487676824742 C-17.40876812100775 -18.1822438236474, -17.117017146867695 -18.289610879047384, -16.52742275146062 -18.506587066708033 M-16.52742275146062 -18.506587066708033 C-16.207097259252357 -18.601657991372626, -15.886771767044094 -18.696728916037216, -15.329076886235413 -18.862249829261067 M-16.52742275146062 -18.506587066708033 C-16.2185047457261 -18.598272309266335, -15.909586739991582 -18.68995755182464, -15.329076886235413 -18.862249829261067 M-15.329076886235413 -18.862249829261067 C-14.8839101220006 -18.963856238213044, -14.438743357765787 -19.065462647165017, -14.110405759676768 -19.140403561325773 M-15.329076886235413 -18.862249829261067 C-15.074504868941412 -18.92035423097076, -14.819932851647414 -18.97845863268045, -14.110405759676768 -19.140403561325773 M-14.110405759676768 -19.140403561325773 C-13.66938028279678 -19.211705140224076, -13.228354805916792 -19.28300671912238, -12.87641715284788 -19.3399052695533 M-14.110405759676768 -19.140403561325773 C-13.759056892900318 -19.197206921355033, -13.407708026123869 -19.254010281384293, -12.87641715284788 -19.3399052695533 M-12.87641715284788 -19.3399052695533 C-12.581810771444273 -19.368325592851292, -12.287204390040666 -19.396745916149285, -11.632181789623903 -19.45993515863156 M-12.87641715284788 -19.3399052695533 C-12.49591839371777 -19.376611527229873, -12.115419634587658 -19.413317784906443, -11.632181789623903 -19.45993515863156 M-11.632181789623903 -19.45993515863156 C-11.356300774934324 -19.468782125802836, -11.080419760244745 -19.47762909297411, -10.382812500000005 -19.5 M-11.632181789623903 -19.45993515863156 C-11.319686864673157 -19.469956262640256, -11.007191939722412 -19.479977366648956, -10.382812500000005 -19.5 M-10.382812500000005 -19.5 C-10.382812500000004 -19.5, -10.382812500000002 -19.5, -10.3828125 -19.5 M-10.382812500000005 -19.5 C-10.382812500000004 -19.5, -10.382812500000002 -19.5, -10.3828125 -19.5" stroke="#9370DB" stroke-width="1.3" fill="none" stroke-dasharray="0 0" style=""/></g><g class="label" style="" transform="translate(-17.5078125, -12)"><rect/><foreignObject width="35.015625" height="24"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel"><p>Start</p></span></div></foreignObject></g></g><g class="node default" id="flowchart-Setup-1" transform="translate(290.7890625, 124)"><rect class="basic label-container" style="" x="-81.3828125" y="-27" width="162.765625" height="54"/><g class="label" style="" transform="translate(-51.3828125, -12)"><rect/><foreignObject width="102.765625" height="24"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel"><p>Setup Modules</p></span></div></foreignObject></g></g><g class="node default" id="flowchart-DrawLoop-3" transform="translate(290.7890625, 290.6796875)"><polygon points="64.6796875,0 129.359375,-64.6796875 64.6796875,-129.359375 0,-64.6796875" class="label-container" transform="translate(-64.1796875, 64.6796875)"/><g class="label" style="" transform="translate(-37.6796875, -12)"><rect/><foreignObject width="75.359375" height="24"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel"><p>Draw Loop</p></span></div></foreignObject></g></g><g class="node default" id="flowchart-TimeUpdate-5" transform="translate(168.69140625, 432.359375)"><rect class="basic label-container" style="" x="-75.8515625" y="-27" width="151.703125" height="54"/><g class="label" style="" transform="translate(-45.8515625, -12)"><rect/><foreignObject width="91.703125" height="24"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel"><p>Time Update</p></span></div></foreignObject></g></g><g class="node default" id="flowchart-CheckTick-7" transform="translate(168.69140625, 579.8515625)"><polygon points="70.4921875,0 140.984375,-70.4921875 70.4921875,-140.984375 0,-70.4921875" class="label-container" transform="translate(-69.9921875, 70.4921875)"/><g class="label" style="" transform="translate(-43.4921875, -12)"><rect/><foreignObject width="86.984375" height="24"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel"><p>Should Tick?</p></span></div></foreignObject></g></g><g class="node default" id="flowchart-ProcessTick-9" transform="translate(255.890625, 763.34375)"><rect class="basic label-container" style="" x="-130" y="-39" width="260" height="78"/><g class="label" style="" transform="translate(-100, -24)"><rect/><foreignObject width="200" height="48"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;"><span class="nodeLabel"><p>Process Logic (Tick) [processTick()]</p></span></div></foreignObject></g></g><g class="node default" id="flowchart-RenderGrid-11" transform="translate(168.69140625, 903.34375)"><rect class="basic label-container" style="" x="-72.6640625" y="-27" width="145.328125" height="54"/><g class="label" style="" transform="translate(-42.6640625, -12)"><rect/><foreignObject width="85.328125" height="24"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel"><p>Render Grid</p></span></div></foreignObject></g></g><g class="node default" id="flowchart-CheckFrame-15" transform="translate(168.69140625, 1062.9296875)"><polygon points="82.5859375,0 165.171875,-82.5859375 82.5859375,-165.171875 0,-82.5859375" class="label-container" transform="translate(-82.0859375, 82.5859375)"/><g class="label" style="" transform="translate(-55.5859375, -12)"><rect/><foreignObject width="111.171875" height="24"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel"><p>Frame Interval?</p></span></div></foreignObject></g></g><g class="node default" id="flowchart-ProcessFrame-17" transform="translate(255.890625, 1258.515625)"><rect class="basic label-container" style="" x="-130" y="-39" width="260" height="78"/><g class="label" style="" transform="translate(-100, -24)"><rect/><foreignObject width="200" height="48"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;"><span class="nodeLabel"><p>Process Visuals (Frame) [processFrame()]</p></span></div></foreignObject></g></g><g class="node default" id="flowchart-CheckPerf-19" transform="translate(207.09765625, 1486.515625)"><polygon points="139,0 278,-139 139,-278 0,-139" class="label-container" transform="translate(-138.5, 139)"/><g class="label" style="" transform="translate(-100, -24)"><rect/><foreignObject width="200" height="48"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;"><span class="nodeLabel"><p>Performance Monitor Enabled?</p></span></div></foreignObject></g></g><g class="node default" id="flowchart-RenderPerf-23" transform="translate(353.08984375, 1738.515625)"><rect class="basic label-container" style="" x="-130" y="-39" width="260" height="78"/><g class="label" style="" transform="translate(-100, -24)"><rect/><foreignObject width="200" height="48"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;"><span class="nodeLabel"><p>Render Performance Monitor</p></span></div></foreignObject></g></g></g></g></g></svg>
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
= Documentation Standard (JSDoc)
|
|
2
|
+
:toc: macro
|
|
3
|
+
:toc-title: Table of Contents
|
|
4
|
+
:icons: font
|
|
5
|
+
:source-highlighter: highlight.js
|
|
6
|
+
|
|
7
|
+
toc::[]
|
|
8
|
+
|
|
9
|
+
This document establishes the standards for documenting code in this project using JSDoc.
|
|
10
|
+
The goal is to provide a clear, technical, and detailed reference for all developers.
|
|
11
|
+
|
|
12
|
+
== General Principles
|
|
13
|
+
|
|
14
|
+
. **Language**: All documentation must be written in **English**.
|
|
15
|
+
. **Tone**: Technical, concise, and descriptive. Avoid first-person ("I", "we").
|
|
16
|
+
. **Completeness**: All exported functions, classes, methods, and interfaces must be documented.
|
|
17
|
+
|
|
18
|
+
== Typing Requirement
|
|
19
|
+
|
|
20
|
+
IMPORTANT: Strict typing is **mandatory** for all methods and functions documented.
|
|
21
|
+
|
|
22
|
+
* **Inputs**: All parameters must have their types explicitly declared in JSDoc (`@param {Type} name`).
|
|
23
|
+
* **Outputs**: All methods/functions must explicitly declare their return type (`@returns {Type}` or `@returns {void}`).
|
|
24
|
+
|
|
25
|
+
== Classes
|
|
26
|
+
|
|
27
|
+
Classes must have a description explaining their responsibility.
|
|
28
|
+
|
|
29
|
+
WARNING: All class public properties must be documented, explaining what they store.
|
|
30
|
+
|
|
31
|
+
=== Example
|
|
32
|
+
|
|
33
|
+
[source,typescript]
|
|
34
|
+
----
|
|
35
|
+
/**
|
|
36
|
+
* Manages the game view layer and user interactions.
|
|
37
|
+
*
|
|
38
|
+
* Orchestrates the rendering of components and binds DOM events to game logic.
|
|
39
|
+
*/
|
|
40
|
+
export default class GameView {
|
|
41
|
+
private p: P5;
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* The parent HTML element where the game is mounted.
|
|
45
|
+
*/
|
|
46
|
+
public parent: HTMLElement;
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Creates an instance of GameView.
|
|
50
|
+
*
|
|
51
|
+
* @param {P5} p - The P5 instance.
|
|
52
|
+
* @param {HTMLElement} parent - The container element.
|
|
53
|
+
*/
|
|
54
|
+
constructor(p: P5, parent: HTMLElement) {
|
|
55
|
+
this.p = p;
|
|
56
|
+
this.parent = parent;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
----
|
|
60
|
+
|
|
61
|
+
== Functions and Methods
|
|
62
|
+
|
|
63
|
+
Every function must explain **what** it does, **how** it behaves (if complex), and describing all parameters and return values.
|
|
64
|
+
|
|
65
|
+
=== Structure
|
|
66
|
+
|
|
67
|
+
. **Short Description**: One-line summary.
|
|
68
|
+
. **Detailed Description**: (Optional) More context, side-effects, or algorithm details.
|
|
69
|
+
. **@param**: One for each argument, with type and description.
|
|
70
|
+
. **@returns**: The return type and description of what is returned.
|
|
71
|
+
|
|
72
|
+
=== Example
|
|
73
|
+
|
|
74
|
+
[source,typescript]
|
|
75
|
+
----
|
|
76
|
+
/**
|
|
77
|
+
* Calculates the optimal dimensions for the game container.
|
|
78
|
+
*
|
|
79
|
+
* It ensures the container maintains the aspect ratio defined by constants
|
|
80
|
+
* while fitting within the parent element's bounds.
|
|
81
|
+
*
|
|
82
|
+
* @param {number} availableWidth - The maximum available width in pixels.
|
|
83
|
+
* @param {number} availableHeight - The maximum available height in pixels.
|
|
84
|
+
* @returns {Dimensions} An object containing the calculated width and height.
|
|
85
|
+
*/
|
|
86
|
+
function calculateDimensions(availableWidth: number, availableHeight: number): Dimensions {
|
|
87
|
+
// ...
|
|
88
|
+
}
|
|
89
|
+
----
|
|
90
|
+
|
|
91
|
+
== Interfaces and Types
|
|
92
|
+
|
|
93
|
+
Interfaces must describe what object shape they represent and document each property.
|
|
94
|
+
|
|
95
|
+
=== Example
|
|
96
|
+
|
|
97
|
+
[source,typescript]
|
|
98
|
+
----
|
|
99
|
+
/**
|
|
100
|
+
* Represents the layout response containing container references.
|
|
101
|
+
*/
|
|
102
|
+
interface ButtonLayoutResponse {
|
|
103
|
+
/** The container for small system buttons (e.g., Reset, Power). */
|
|
104
|
+
smallButtonContainer: P5.Element;
|
|
105
|
+
|
|
106
|
+
/** The container for directional buttons. */
|
|
107
|
+
mediumButtonContainer: P5.Element;
|
|
108
|
+
}
|
|
109
|
+
----
|