brick-engine-js 1.0.8 → 1.0.10
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/dist/app.js +1 -4952
- package/dist/brick-engine.js +1 -4970
- package/dist/css/{app.bundle.css → app.0ce9b8479d1758fc15ba.css} +0 -2
- package/dist/css/{brick-engine.bundle.css → brick-engine.0ce9b8479d1758fc15ba.css} +0 -2
- package/dist/docs/GAME_DEVELOPER_GUIDE.html +1 -1
- package/dist/docs/brick-engine-guide.html +1 -1
- package/dist/docs/getting-started.html +1 -1
- package/dist/docs/jsdoc_standard.html +1 -1
- package/dist/docs/publishing.html +1 -1
- package/dist/docs/reference/interfaces/modules/Session.html +1 -1
- package/dist/docs/reference/modules/GameMenu.html +1 -1
- package/dist/docs/reference/modules/GameSession.html +1 -1
- package/dist/docs/reference/modules/InitialStateSnapshot.html +1 -1
- package/dist/docs/reference/modules/SessionModal.html +1 -1
- package/dist/docs/testing_best_practices.html +1 -1
- package/dist/index.html +1 -15
- package/dist/vendor/p5.min.js +1 -1
- package/package.json +2 -4
- package/dist/app.js.map +0 -1
- package/dist/brick-engine.js.map +0 -1
- package/dist/css/app.bundle.css.map +0 -1
- package/dist/css/brick-engine.bundle.css.map +0 -1
- package/docs/GAME_DEVELOPER_GUIDE.adoc +0 -167
- package/docs/brick-engine-guide.adoc +0 -87
- package/docs/diagrams/lifecycle.mmd +0 -19
- package/docs/documentation_style_guide.adoc +0 -210
- package/docs/getting-started.adoc +0 -147
- package/docs/images/lifecycle.svg +0 -1
- package/docs/jsdoc_standard.adoc +0 -109
- package/docs/publishing.adoc +0 -58
- package/docs/reference/enums/Color.adoc +0 -35
- package/docs/reference/enums/ControlEventType.adoc +0 -28
- package/docs/reference/enums/ControlKey.adoc +0 -34
- package/docs/reference/enums/FontAlignment.adoc +0 -43
- package/docs/reference/enums/FontSize.adoc +0 -31
- package/docs/reference/enums/Sound.adoc +0 -42
- package/docs/reference/enums/StateProperty.adoc +0 -33
- package/docs/reference/helpers/CellHelper.adoc +0 -37
- package/docs/reference/helpers/ControlInputHandlerHelper.adoc +0 -57
- package/docs/reference/helpers/CoordinateHelper.adoc +0 -118
- package/docs/reference/helpers/RelativeValuesHelper.adoc +0 -53
- package/docs/reference/interfaces/Debuggable.adoc +0 -29
- package/docs/reference/interfaces/GameModules.adoc +0 -35
- package/docs/reference/interfaces/Initializable.adoc +0 -24
- package/docs/reference/interfaces/RendererInitializable.adoc +0 -33
- package/docs/reference/interfaces/StateSyncable.adoc +0 -41
- package/docs/reference/interfaces/modules/Control.adoc +0 -98
- package/docs/reference/interfaces/modules/Grid.adoc +0 -411
- package/docs/reference/interfaces/modules/Renderer.adoc +0 -34
- package/docs/reference/interfaces/modules/RendererComposite.adoc +0 -57
- package/docs/reference/interfaces/modules/Score.adoc +0 -107
- package/docs/reference/interfaces/modules/Session.adoc +0 -66
- package/docs/reference/interfaces/modules/State.adoc +0 -290
- package/docs/reference/interfaces/modules/Text.adoc +0 -110
- package/docs/reference/interfaces/modules/Time.adoc +0 -119
- package/docs/reference/modules/Debugger.adoc +0 -71
- package/docs/reference/modules/DisplayRenderer.adoc +0 -55
- package/docs/reference/modules/Game.adoc +0 -256
- package/docs/reference/modules/GameControl.adoc +0 -139
- package/docs/reference/modules/GameGrid.adoc +0 -794
- package/docs/reference/modules/GameHudGrid.adoc +0 -38
- package/docs/reference/modules/GameMenu.adoc +0 -39
- package/docs/reference/modules/GameRenderer.adoc +0 -79
- package/docs/reference/modules/GameScore.adoc +0 -138
- package/docs/reference/modules/GameSession.adoc +0 -43
- package/docs/reference/modules/GameSound.adoc +0 -111
- package/docs/reference/modules/GameState.adoc +0 -318
- package/docs/reference/modules/GameText.adoc +0 -139
- package/docs/reference/modules/GameTime.adoc +0 -141
- package/docs/reference/modules/HudRenderer.adoc +0 -56
- package/docs/reference/modules/InitialStateSnapshot.adoc +0 -47
- package/docs/reference/modules/SessionModal.adoc +0 -34
- package/docs/reference/types/Axis.adoc +0 -28
- package/docs/reference/types/Cell.adoc +0 -29
- package/docs/reference/types/ControlCallback.adoc +0 -23
- package/docs/reference/types/Coordinate.adoc +0 -29
- package/docs/reference/types/GameEntry.adoc +0 -29
- package/docs/reference/types/GameEvent.adoc +0 -29
- package/docs/reference/types/Piece.adoc +0 -32
- package/docs/reference/types/RendererMetrics.adoc +0 -29
- package/docs/reference/types/Vector.adoc +0 -28
- package/docs/testing_best_practices.adoc +0 -190
- package/public/CNAME +0 -1
- package/public/docs/GAME_DEVELOPER_GUIDE.html +0 -727
- package/public/docs/brick-engine-guide.html +0 -610
- package/public/docs/diagrams/lifecycle.mmd +0 -19
- package/public/docs/documentation_style_guide.html +0 -994
- package/public/docs/getting-started.html +0 -648
- package/public/docs/images/lifecycle.svg +0 -1
- package/public/docs/index.html +0 -593
- package/public/docs/jsdoc_standard.html +0 -656
- package/public/docs/publishing.html +0 -573
- package/public/docs/reference/enums/Color.html +0 -533
- package/public/docs/reference/enums/ControlEventType.html +0 -505
- package/public/docs/reference/enums/ControlKey.html +0 -529
- package/public/docs/reference/enums/FontAlignment.html +0 -545
- package/public/docs/reference/enums/FontSize.html +0 -517
- package/public/docs/reference/enums/Sound.html +0 -558
- package/public/docs/reference/enums/StateProperty.html +0 -525
- package/public/docs/reference/helpers/CellHelper.html +0 -520
- package/public/docs/reference/helpers/ControlInputHandlerHelper.html +0 -569
- package/public/docs/reference/helpers/CoordinateHelper.html +0 -703
- package/public/docs/reference/helpers/RelativeValuesHelper.html +0 -560
- package/public/docs/reference/interfaces/Debuggable.html +0 -501
- package/public/docs/reference/interfaces/GameModules.html +0 -544
- package/public/docs/reference/interfaces/Initializable.html +0 -495
- package/public/docs/reference/interfaces/RendererInitializable.html +0 -517
- package/public/docs/reference/interfaces/StateSyncable.html +0 -542
- package/public/docs/reference/interfaces/modules/Control.html +0 -648
- package/public/docs/reference/interfaces/modules/Grid.html +0 -1256
- package/public/docs/reference/interfaces/modules/Renderer.html +0 -522
- package/public/docs/reference/interfaces/modules/RendererComposite.html +0 -577
- package/public/docs/reference/interfaces/modules/Score.html +0 -669
- package/public/docs/reference/interfaces/modules/Session.html +0 -585
- package/public/docs/reference/interfaces/modules/State.html +0 -897
- package/public/docs/reference/interfaces/modules/Text.html +0 -668
- package/public/docs/reference/interfaces/modules/Time.html +0 -684
- package/public/docs/reference/modules/Debugger.html +0 -579
- package/public/docs/reference/modules/DisplayRenderer.html +0 -557
- package/public/docs/reference/modules/Game.html +0 -909
- package/public/docs/reference/modules/GameControl.html +0 -716
- package/public/docs/reference/modules/GameGrid.html +0 -1910
- package/public/docs/reference/modules/GameHudGrid.html +0 -508
- package/public/docs/reference/modules/GameMenu.html +0 -538
- package/public/docs/reference/modules/GameRenderer.html +0 -589
- package/public/docs/reference/modules/GameScore.html +0 -664
- package/public/docs/reference/modules/GameSession.html +0 -533
- package/public/docs/reference/modules/GameSound.html +0 -636
- package/public/docs/reference/modules/GameState.html +0 -922
- package/public/docs/reference/modules/GameText.html +0 -701
- package/public/docs/reference/modules/GameTime.html +0 -696
- package/public/docs/reference/modules/HudRenderer.html +0 -568
- package/public/docs/reference/modules/InitialStateSnapshot.html +0 -557
- package/public/docs/reference/modules/SessionModal.html +0 -520
- package/public/docs/reference/types/Axis.html +0 -505
- package/public/docs/reference/types/Cell.html +0 -514
- package/public/docs/reference/types/ControlCallback.html +0 -488
- package/public/docs/reference/types/Coordinate.html +0 -510
- package/public/docs/reference/types/GameEntry.html +0 -514
- package/public/docs/reference/types/GameEvent.html +0 -514
- package/public/docs/reference/types/Piece.html +0 -506
- package/public/docs/reference/types/RendererMetrics.html +0 -514
- package/public/docs/reference/types/Vector.html +0 -509
- package/public/docs/testing_best_practices.html +0 -770
- package/public/favicon.ico +0 -0
- package/public/fonts/digital-7.monoitalic.ttf +0 -0
- package/public/images/cell.svg +0 -32
- 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 +0 -15
- 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 +0 -86
- package/public/style/buttons.css +0 -233
- package/public/style/debugger.css +0 -117
- package/public/style/sessionModal.css +0 -155
- package/public/style/sourceCodeAndCommands.css +0 -74
- package/public/style/splash.css +0 -13
- package/public/style/theme.css +0 -137
- /package/dist/{bootstrap.d.ts → types/bootstrap.d.ts} +0 -0
- /package/dist/{bootstrap.test.d.ts → types/bootstrap.test.d.ts} +0 -0
- /package/dist/{config → types/config}/configs.d.ts +0 -0
- /package/dist/{config → types/config}/configs.test.d.ts +0 -0
- /package/dist/{core → types/core}/Game.d.ts +0 -0
- /package/dist/{core → types/core}/Game.test.d.ts +0 -0
- /package/dist/{core → types/core}/InitialStateSnapshot.d.ts +0 -0
- /package/dist/{core → types/core}/InitialStateSnapshot.test.d.ts +0 -0
- /package/dist/{core → types/core}/helpers/CellHelper.d.ts +0 -0
- /package/dist/{core → types/core}/helpers/CellHelper.test.d.ts +0 -0
- /package/dist/{core → types/core}/helpers/ControlInputHandlerHelper.d.ts +0 -0
- /package/dist/{core → types/core}/helpers/ControlInputHandlerHelper.test.d.ts +0 -0
- /package/dist/{core → types/core}/helpers/CoordinateHelper.d.ts +0 -0
- /package/dist/{core → types/core}/helpers/CoordinateHelper.test.d.ts +0 -0
- /package/dist/{core → types/core}/helpers/InterfaceIdentifierHelper.d.ts +0 -0
- /package/dist/{core → types/core}/helpers/InterfaceIdentifierHelper.test.d.ts +0 -0
- /package/dist/{core → types/core}/helpers/RelativeValuesHelper.d.ts +0 -0
- /package/dist/{core → types/core}/helpers/RelativeValuesHelper.test.d.ts +0 -0
- /package/dist/{core → types/core}/module/control/GameControl.d.ts +0 -0
- /package/dist/{core → types/core}/module/control/GameControl.test.d.ts +0 -0
- /package/dist/{core → types/core}/module/control/GameControlKeyBinding.d.ts +0 -0
- /package/dist/{core → types/core}/module/control/GameControlKeyBinding.test.d.ts +0 -0
- /package/dist/{core → types/core}/module/grid/GameGrid.d.ts +0 -0
- /package/dist/{core → types/core}/module/grid/GameGrid.test.d.ts +0 -0
- /package/dist/{core → types/core}/module/grid/GameHudGrid.d.ts +0 -0
- /package/dist/{core → types/core}/module/grid/GameHudGrid.test.d.ts +0 -0
- /package/dist/{core → types/core}/module/grid/engines/GridAnalysisEngine.d.ts +0 -0
- /package/dist/{core → types/core}/module/grid/engines/GridAnalysisEngine.test.d.ts +0 -0
- /package/dist/{core → types/core}/module/grid/engines/GridLineEngine.d.ts +0 -0
- /package/dist/{core → types/core}/module/grid/engines/GridLineEngine.test.d.ts +0 -0
- /package/dist/{core → types/core}/module/grid/engines/GridMovementEngine.d.ts +0 -0
- /package/dist/{core → types/core}/module/grid/engines/GridMovementEngine.test.d.ts +0 -0
- /package/dist/{core → types/core}/module/grid/engines/GridRegionEngine.d.ts +0 -0
- /package/dist/{core → types/core}/module/grid/engines/GridRegionEngine.test.d.ts +0 -0
- /package/dist/{core → types/core}/module/grid/engines/GridTransformEngine.d.ts +0 -0
- /package/dist/{core → types/core}/module/grid/engines/GridTransformEngine.test.d.ts +0 -0
- /package/dist/{core → types/core}/module/renderer/DisplayRenderer.d.ts +0 -0
- /package/dist/{core → types/core}/module/renderer/DisplayRenderer.test.d.ts +0 -0
- /package/dist/{core → types/core}/module/renderer/GameRenderer.d.ts +0 -0
- /package/dist/{core → types/core}/module/renderer/GameRenderer.test.d.ts +0 -0
- /package/dist/{core → types/core}/module/renderer/HudRenderer.d.ts +0 -0
- /package/dist/{core → types/core}/module/renderer/HudRenderer.test.d.ts +0 -0
- /package/dist/{core → types/core}/module/score/GameScore.d.ts +0 -0
- /package/dist/{core → types/core}/module/score/GameScore.test.d.ts +0 -0
- /package/dist/{core → types/core}/module/session/GameSession.d.ts +0 -0
- /package/dist/{core → types/core}/module/session/GameSession.test.d.ts +0 -0
- /package/dist/{core → types/core}/module/sound/GameSound.d.ts +0 -0
- /package/dist/{core → types/core}/module/sound/GameSound.test.d.ts +0 -0
- /package/dist/{core → types/core}/module/state/GameState.d.ts +0 -0
- /package/dist/{core → types/core}/module/state/GameState.test.d.ts +0 -0
- /package/dist/{core → types/core}/module/text/GameText.d.ts +0 -0
- /package/dist/{core → types/core}/module/text/GameText.test.d.ts +0 -0
- /package/dist/{core → types/core}/module/time/GameTime.d.ts +0 -0
- /package/dist/{core → types/core}/module/time/GameTime.test.d.ts +0 -0
- /package/dist/{core → types/core}/types/Interfaces.d.ts +0 -0
- /package/dist/{core → types/core}/types/Types.d.ts +0 -0
- /package/dist/{core → types/core}/types/enums.d.ts +0 -0
- /package/dist/{core → types/core}/types/modules.d.ts +0 -0
- /package/dist/{index.d.ts → types/index.d.ts} +0 -0
- /package/dist/{main.d.ts → types/main.d.ts} +0 -0
- /package/dist/{menu → types/menu}/GameMenu.d.ts +0 -0
- /package/dist/{menu → types/menu}/GameMenu.test.d.ts +0 -0
- /package/dist/{menu → types/menu}/GameMenuSingleton.d.ts +0 -0
- /package/dist/{menu → types/menu}/GameMenuSingleton.test.d.ts +0 -0
- /package/dist/{menu → types/menu}/GameRepository.d.ts +0 -0
- /package/dist/{menu → types/menu}/GameRepository.test.d.ts +0 -0
- /package/dist/{menu → types/menu}/manager/GameManager.d.ts +0 -0
- /package/dist/{menu → types/menu}/manager/GameManager.test.d.ts +0 -0
- /package/dist/types/{interfaces.d.ts → types/interfaces.d.ts} +0 -0
- /package/dist/{view → types/view}/Debugger.d.ts +0 -0
- /package/dist/{view → types/view}/Debugger.test.d.ts +0 -0
- /package/dist/{view → types/view}/GameView.d.ts +0 -0
- /package/dist/{view → types/view}/GameView.test.d.ts +0 -0
- /package/dist/{view → types/view}/SessionModal.d.ts +0 -0
- /package/dist/{view → types/view}/SessionModal.test.d.ts +0 -0
- /package/dist/{view → types/view}/components/layout/ButtonLayout.d.ts +0 -0
- /package/dist/{view → types/view}/components/layout/ButtonLayout.test.d.ts +0 -0
- /package/dist/{view → types/view}/components/layout/ContainerLayout.d.ts +0 -0
- /package/dist/{view → types/view}/components/layout/ContainerLayout.test.d.ts +0 -0
- /package/dist/{view → types/view}/components/layout/FrameLayout.d.ts +0 -0
- /package/dist/{view → types/view}/components/layout/FrameLayout.test.d.ts +0 -0
- /package/dist/{view → types/view}/components/ui/BigButton.d.ts +0 -0
- /package/dist/{view → types/view}/components/ui/BigButton.test.d.ts +0 -0
- /package/dist/{view → types/view}/components/ui/Button.d.ts +0 -0
- /package/dist/{view → types/view}/components/ui/Button.test.d.ts +0 -0
- /package/dist/{view → types/view}/components/ui/Canvas.d.ts +0 -0
- /package/dist/{view → types/view}/components/ui/Canvas.test.d.ts +0 -0
- /package/dist/{view → types/view}/components/ui/SmallButton.d.ts +0 -0
- /package/dist/{view → types/view}/components/ui/SmallButton.test.d.ts +0 -0
- /package/dist/{view → types/view}/theme/applyColors.d.ts +0 -0
- /package/dist/{view → types/view}/theme/applyColors.test.d.ts +0 -0
- /package/dist/{view → types/view}/theme/dimensions.d.ts +0 -0
- /package/dist/{view → types/view}/theme/dimensions.test.d.ts +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"css/app.bundle.css","mappings":"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","sources":["webpack://BrickEngine/./public/style/body.css","webpack://BrickEngine/./public/style/buttons.css","webpack://BrickEngine/./public/style/debugger.css","webpack://BrickEngine/./public/style/sessionModal.css","webpack://BrickEngine/./public/style/sourceCodeAndCommands.css","webpack://BrickEngine/./public/style/splash.css","webpack://BrickEngine/./public/style/theme.css"],"sourcesContent":["/* MAIN BODY */\n\n#brick-game {\n display: flex;\n justify-content: center;\n align-items: center;\n width: 100%;\n height: 100%;\n}\n\n#container {\n width: var(--width);\n height: var(--height);\n\n background-color: var(--main-color);\n\n border-radius: var(--border-radius);\n border: var(--border);\n\n box-sizing: border-box;\n margin: auto;\n position: relative;\n\n display: flex;\n flex-direction: column;\n\n box-shadow:\n calc(var(--width) * -0.03) calc(var(--width) * 0.03) var(--dispersion) black,\n calc(var(--width) * -0.02) calc(var(--width) * 0.02) var(--dispersion) var(--color-shadow-reflexion) inset,\n calc(var(--width) * 0.01) calc(var(--width) * -0.01) var(--dispersion) var(--color-shadow) inset;\n}\n\n#brick-game-canvas {\n border: var(--border);\n box-shadow:\n calc(var(--width) * -0.01) calc(var(--width) * 0.01) var(--dispersion) var(--color-shadow),\n calc(var(--width) * 0.01) calc(var(--width) * -0.01) var(--dispersion) var(--color-shadow-reflexion);\n}\n\n/* FRAME */\n\n#frame {\n border: var(--border);\n border-radius: var(--border-radius);\n\n position: relative;\n\n width: calc(var(--width) * 0.85);\n height: auto;\n aspect-ratio: 9/10;\n margin: 7.5%;\n margin-bottom: 3.75%;\n\n display: flex;\n justify-content: center;\n align-items: center;\n}\n\n#frame div {\n position: absolute;\n top: calc(var(--height) * -0.02);\n left: 27.5%;\n\n width: 45%;\n height: calc(var(--height) * 0.03);\n\n background-color: var(--main-color);\n\n display: flex;\n justify-content: center;\n\n padding-top: calc(var(--height) * 0.005);\n padding-bottom: 0;\n}\n\n#frame p {\n text-align: center;\n\n font-family: 'retro-gamming';\n font-weight: bold;\n font-size: calc(var(--height) * 0.03);\n\n text-shadow:\n calc(var(--width) * -0.003) calc(var(--width) * 0.003) 0 var(--color-shadow),\n calc(var(--width) * 0.002) calc(var(--width) * -0.002) 0 var(--color-shadow-reflexion);\n}\n","/* BUTTONS */\n\n.sm-btn,\n.btn,\n.lg-btn {\n z-index: 999;\n}\n\n.sm-btn {\n box-shadow:\n calc(var(--width) * -0.0075) calc(var(--width) * 0.0075) var(--dispersion) var(--color-shadow),\n calc(var(--width) * -0.01) calc(var(--width) * 0.01) var(--dispersion) var(--button-color-reflexion) inset;\n}\n\n.sm-btn:active {\n box-shadow:\n calc(var(--width) * -0.004) calc(var(--width) * 0.004) var(--dispersion) var(--color-shadow),\n calc(var(--width) * -0.003) calc(var(--width) * 0.003) var(--dispersion) var(--button-color-reflexion) inset;\n transform: translateX(calc(var(--width) * -0.0025)) translateY(calc(var(--width) * 0.0025));\n}\n\n.btn {\n box-shadow:\n calc(var(--width) * -0.015) calc(var(--width) * 0.015) var(--dispersion) var(--color-shadow),\n calc(var(--width) * -0.0175) calc(var(--width) * 0.0175) var(--dispersion) var(--button-color-reflexion) inset;\n}\n\n.btn:active {\n box-shadow:\n calc(var(--width) * -0.004) calc(var(--width) * 0.004) var(--dispersion) var(--color-shadow),\n calc(var(--width) * -0.003) calc(var(--width) * 0.003) var(--dispersion) var(--button-color-reflexion) inset;\n transform: translateX(calc(var(--width) * -0.005)) translateY(calc(var(--width) * 0.005));\n}\n\n.lg-btn {\n box-shadow:\n calc(var(--width) * -0.02) calc(var(--width) * 0.02) var(--dispersion) var(--color-shadow),\n calc(var(--width) * -0.0175) calc(var(--width) * 0.0175) var(--dispersion) var(--button-color-reflexion) inset;\n}\n\n.lg-btn:active {\n box-shadow:\n calc(var(--width) * -0.005) calc(var(--width) * 0.005) var(--dispersion) var(--color-shadow),\n calc(var(--width) * -0.004) calc(var(--width) * 0.004) var(--dispersion) var(--button-color-reflexion) inset;\n transform: translateX(calc(var(--width) * -0.0075)) translateY(calc(var(--width) * 0.0075));\n}\n\n.sm-btn-p,\n.btn-p,\n.lg-btn-p {\n font-family: 'retro-gamming';\n color: white;\n text-align: center;\n\n user-select: none;\n}\n\n.sm-btn-container,\n.btn-container,\n.lg-btn-container {\n display: flex;\n justify-content: center;\n align-items: center;\n}\n\n.sm-btn,\n.btn,\n.lg-btn {\n outline: none;\n\n border-radius: 50%;\n border: var(--button-border);\n\n transition-property: transform box-shadow;\n transition-duration: var(--button-animation-duration);\n\n background-color: var(--button-color);\n}\n\n.sm-btn-container {\n flex-direction: column;\n}\n\n.sm-btn {\n width: var(--sm-button-size);\n height: var(--sm-button-size);\n}\n\n.sm-btn-p {\n font-family: 'retro-gamming';\n color: white;\n text-align: center;\n\n user-select: none;\n\n font-size: calc(var(--width) * 0.03);\n\n /* width: calc(var(--width) * 0.08); */\n margin-top: calc(var(--width) * 0.01);\n\n line-height: calc(var(--width) * 0.03);\n height: calc(var(--width) * 0.06);\n\n text-shadow:\n calc(var(--width) * -0.003) calc(var(--width) * 0.003) 0 var(--color-shadow),\n calc(var(--width) * 0.002) calc(var(--width) * -0.002) 0 var(--color-shadow-reflexion);\n}\n\n.btn-container {\n flex-direction: column-reverse;\n}\n\n.btn {\n width: var(--button-size);\n height: var(--button-size);\n}\n\n.btn-p {\n font-weight: bold;\n font-size: calc(var(--width) * 0.04);\n margin-bottom: calc(var(--width) * 0.015);\n line-height: calc(var(--width) * 0.03);\n}\n\n.lg-btn-container {\n flex-direction: column;\n}\n\n.lg-btn {\n width: var(--lg-button-size);\n height: var(--lg-button-size);\n}\n\n.lg-btn-p {\n font-weight: bold;\n font-size: calc(var(--width) * 0.05);\n margin-bottom: calc(var(--width) * 0.015);\n line-height: calc(var(--width) * 0.03);\n}\n\n.btn,\n.lg-btn {\n font-family: 'retro-gamming';\n font-size: calc(var(--width) * 0.045);\n font-weight: bold;\n color: white;\n text-shadow:\n calc(var(--width) * -0.003) calc(var(--width) * 0.003) 0 var(--button-color-shadow),\n calc(var(--width) * 0.002) calc(var(--width) * -0.002) 0 var(--button-color-reflexion);\n}\n\n/* BUTTON CONTAINERS */\n\n#button-container,\n#small-button-container,\n#inner-button-container,\n#medium-button-container,\n#large-button-container {\n width: 100%;\n height: auto;\n}\n\n#button-container {\n display: flex;\n flex-grow: 1;\n flex-direction: column;\n}\n\n#small-button-container {\n display: flex;\n flex-grow: 0.1;\n justify-content: space-evenly;\n\n max-height: 150px;\n\n position: relative;\n}\n\n.sm-btn-container-top {\n position: relative;\n top: -20%;\n}\n\n.sm-btn-container-bottom {\n position: relative;\n bottom: -20%;\n}\n\n#inner-button-container {\n display: flex;\n flex-grow: 1;\n flex-direction: row;\n}\n\n#medium-button-container {\n display: flex;\n flex-shrink: 1;\n\n position: relative;\n}\n\n#large-button-container {\n display: flex;\n justify-content: center;\n align-items: center;\n\n flex-shrink: 1.5;\n}\n\n#direction-vertical-container,\n#direction-horizontal-container {\n width: 100%;\n height: 100%;\n\n display: flex;\n justify-content: center;\n align-items: center;\n gap: calc(var(--width) * 0.115);\n\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n}\n\n#direction-vertical-container {\n flex-direction: column;\n}\n\n#direction-horizontal-container {\n flex-direction: row;\n}\n","#debugger {\n font-family: 'retro-gamming', monospace;\n background-color: rgba(0, 0, 0, 0.9);\n color: #0f0; /* Green phosphor */\n border: 2px solid #0f0;\n box-shadow: 0 0 10px #0f0;\n padding: 10px;\n position: absolute;\n top: 10px;\n right: 10px;\n width: 300px;\n max-height: calc(100vh - 40px);\n overflow-y: auto;\n user-select: none;\n -webkit-user-select: none;\n z-index: 9999;\n font-size: 14px;\n /* text-shadow: 0 0 2px #0f0; */\n}\n\n/* Custom Scrollbar */\n#debugger::-webkit-scrollbar {\n width: 8px;\n}\n\n#debugger::-webkit-scrollbar-track {\n background: #001100;\n}\n\n#debugger::-webkit-scrollbar-thumb {\n background: #0f0;\n border-radius: 4px;\n}\n\n#debugger::-webkit-scrollbar-thumb:hover {\n background: #0a0;\n}\n\n/* Summary / Header */\n#debugger-summary {\n font-weight: bold;\n font-size: 16px;\n cursor: pointer;\n margin-bottom: 10px;\n /* text-transform: uppercase; */\n border-bottom: 1px dashed #0f0;\n padding-bottom: 5px;\n list-style: none;\n}\n\n/* Module Sections */\n.debugger-module {\n margin-bottom: 10px;\n border-left: 1px solid #004400;\n padding-left: 8px;\n}\n\n.debugger-module-summary {\n cursor: pointer;\n font-weight: bold;\n color: #cfc;\n margin-bottom: 4px;\n}\n\n.debugger-module-summary:hover {\n color: #fff;\n /* text-shadow: 0 0 4px #fff; */\n}\n\n/* Data Rows */\n.debugger-container {\n display: flex;\n justify-content: space-between;\n padding: 2px 0;\n border-bottom: 1px dotted #003300;\n}\n\n/* Closed State */\n#debugger:not([open]) {\n width: auto;\n height: auto;\n max-height: none;\n padding: 5px 10px;\n border: 1px solid #0f0;\n background-color: rgba(0, 0, 0, 0.5);\n box-shadow: none;\n}\n\n#debugger:not([open]) #debugger-summary {\n margin-bottom: 0;\n border-bottom: none;\n padding-bottom: 0;\n}\n\n.debugger-container:hover {\n background-color: rgba(0, 255, 0, 0.05);\n}\n\n.debugger-container.highlight {\n background-color: transparent;\n color: #fff;\n /* text-shadow: 0 0 5px #fff; */\n border-bottom: 1px solid #fff;\n}\n\n.debugger-container.highlight span {\n color: #fff;\n}\n\n.debugger-container p {\n margin: 0;\n opacity: 0.8;\n}\n\n.debugger-container span {\n font-weight: bold;\n}\n","#modal-background {\n position: absolute;\n inset: 0;\n background-color: rgba(0, 0, 0, 0.5);\n z-index: 999;\n display: flex;\n justify-content: center;\n align-items: center;\n}\n\n#modal-background.hidden {\n display: none;\n}\n\n#session-modal {\n width: 80%;\n max-width: 500px;\n height: 44%;\n max-height: 360px;\n min-width: 320px;\n min-height: 280px;\n position: relative;\n overflow: hidden;\n\n display: flex;\n flex-direction: column;\n align-items: center;\n box-sizing: border-box;\n padding: 1rem 0;\n\n background-color: var(--main-color);\n\n border-radius: var(--border-radius);\n border: var(--border);\n\n box-shadow:\n calc(var(--width) * -0.03) calc(var(--width) * 0.03) var(--dispersion) black,\n calc(var(--width) * -0.02) calc(var(--width) * 0.02) var(--dispersion) var(--color-shadow-reflexion) inset,\n calc(var(--width) * 0.01) calc(var(--width) * -0.01) var(--dispersion) var(--color-shadow) inset;\n}\n\n#session-modal-frame {\n border: var(--border);\n border-radius: var(--border-radius);\n\n position: relative;\n\n width: 90%;\n flex: 1;\n margin: 1rem 0;\n min-height: 0;\n\n display: flex;\n justify-content: center;\n align-items: center;\n}\n\n#session-modal-frame > p {\n position: absolute;\n top: 0;\n transform: translateY(-50%);\n\n text-align: center;\n\n font-family: 'retro-gamming';\n font-weight: bold;\n font-size: clamp(1rem, calc(var(--height) * 0.03), 1.4rem);\n\n background-color: var(--main-color);\n padding: 0 calc(var(--width) * 0.02);\n\n text-shadow:\n calc(var(--width) * -0.003) calc(var(--width) * 0.003) 0 var(--color-shadow),\n calc(var(--width) * 0.002) calc(var(--width) * -0.002) 0 var(--color-shadow-reflexion);\n}\n\n#session-modal-screen {\n width: 90%;\n height: 80%;\n\n border: var(--border);\n box-shadow:\n calc(var(--width) * -0.01) calc(var(--width) * 0.01) var(--dispersion) var(--color-shadow),\n calc(var(--width) * 0.01) calc(var(--width) * -0.01) var(--dispersion) var(--color-shadow-reflexion);\n\n background-image: url('../images/cell.svg');\n background-size: 3.7%;\n background-repeat: repeat;\n\n display: flex;\n justify-content: center;\n align-items: center;\n}\n\n#session-modal-screen > p {\n text-align: center;\n\n font-family: 'retro-gamming';\n font-size: 1.5rem;\n\n padding: 0 calc(var(--width) * 0.02);\n}\n\n#session-modal-screen > p > span {\n font-size: 1.8rem;\n padding: 0 calc(var(--width) * 0.02);\n}\n\n#session-modal-buttons {\n width: 100%;\n padding-bottom: 0.5rem;\n\n display: flex;\n justify-content: center;\n align-items: center;\n\n gap: clamp(1rem, 5vw, 2.5rem);\n}\n\n.session-modal-button:active {\n box-shadow:\n calc(var(--width) * -0.005) calc(var(--width) * 0.005) var(--dispersion) var(--color-shadow),\n calc(var(--width) * -0.004) calc(var(--width) * 0.004) var(--dispersion) var(--button-color-reflexion) inset;\n transform: translate(calc(var(--width) * -0.005), calc(var(--width) * 0.005));\n}\n\n.session-modal-button {\n width: 35%;\n max-width: 150px;\n padding: 0.8rem 0;\n\n border: var(--border);\n border-radius: var(--border-radius);\n\n background-color: var(--button-color);\n box-shadow:\n calc(var(--width) * -0.015) calc(var(--width) * 0.015) var(--dispersion) var(--color-shadow),\n calc(var(--width) * -0.0175) calc(var(--width) * 0.0175) var(--dispersion) var(--button-color-reflexion) inset;\n\n font-family: 'retro-gamming';\n color: white;\n text-align: center;\n\n user-select: none;\n\n font-size: 1rem;\n\n text-shadow:\n calc(var(--width) * -0.003) calc(var(--width) * 0.003) 0 var(--button-color-shadow),\n calc(var(--width) * 0.002) calc(var(--width) * -0.002) 0 var(--button-color-reflexion);\n\n transition:\n transform var(--button-animation-duration),\n box-shadow var(--button-animation-duration);\n}\n","#source-code {\n position: absolute;\n top: 2%;\n right: 2%;\n}\n\n#controls {\n position: absolute;\n top: 2%;\n left: 2%;\n}\n\n#source-code,\n#controls {\n background-color: var(--main-color);\n padding: 0.75rem;\n border-radius: 1.5rem;\n cursor: pointer;\n box-sizing: content-box;\n}\n\n#source-code > #source-code-button,\n#controls > #controls-button {\n display: flex;\n justify-content: center;\n align-items: center;\n}\n\n#source-code > #source-code-button > img,\n#controls > #controls-button > img {\n width: 2.5rem;\n filter: invert();\n}\n#source-code:hover,\n#controls:hover {\n background-color: var(--color-shadow-reflexion);\n}\n#source-code:active,\n#controls:active {\n filter: brightness(1.15);\n}\n\n#source-code::after,\n#controls::after {\n font-family: 'retro-gamming';\n padding: 0.5rem;\n width: 6rem;\n background-color: white;\n text-align: center;\n border-radius: 0.25rem;\n border: 1px black solid;\n box-shadow: 0.25rem 0.25rem black;\n opacity: 0;\n transition: 0.25s opacity;\n}\n\n#source-code:hover::after,\n#controls:hover::after {\n opacity: 1;\n}\n\n#source-code::after {\n content: 'source code';\n position: absolute;\n top: 75px;\n left: -65px;\n}\n\n#controls::after {\n content: 'Controls';\n position: absolute;\n top: 75px;\n left: 15px;\n}\n","#splash {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: black;\n opacity: 0.85;\n z-index: 1000;\n display: flex;\n justify-content: center;\n align-items: center;\n}\n","@font-face {\n font-family: retro-gamming;\n src: url(./../fonts/digital-7.monoitalic.ttf);\n}\n\n* {\n margin: 0;\n padding: 0;\n box-sizing: content-box;\n user-select: none;\n}\n\nbody {\n width: 100vw;\n height: 100vh;\n\n display: flex;\n justify-content: center;\n align-items: center;\n\n background: rgb(0, 158, 247);\n background: linear-gradient(300deg, rgb(48, 179, 255) 0%, rgba(0, 158, 247, 1) 100%);\n}\n\n#version {\n font-family: 'retro-gamming';\n font-size: 1rem;\n color: white;\n position: absolute;\n bottom: 1rem;\n right: 1rem;\n}\n\n@media only screen and (max-width: 600px) {\n #source-code,\n #controls {\n display: none;\n }\n\n body,\n #container {\n width: 100% !important;\n height: 100vh !important;\n /* height: 100dvh !important; */\n border-radius: 0px !important;\n }\n\n #frame > canvas {\n width: 85% !important;\n height: auto !important;\n aspect-ratio: 9/10 !important;\n }\n\n #frame {\n width: 85% !important;\n padding: 7.5%¨ !important;\n }\n\n #small-button-container {\n margin-top: 3.5%;\n }\n #direction-vertical-container,\n #direction-horizontal-container {\n gap: calc(var(--width) * 0.13);\n }\n\n #large-button-container {\n flex-shrink: 1.75;\n }\n\n .sm-btn {\n width: var(--sm-button-size-mobile) !important;\n height: var(--sm-button-size-mobile) !important;\n }\n\n .btn {\n width: var(--button-size-mobile) !important;\n height: var(--button-size-mobile) !important;\n margin: var(--button-size-mobile-spacing) !important;\n font-size: var(--button-size-mobile-font-size) !important;\n }\n\n .lg-btn {\n width: var(--lg-button-size-mobile) !important;\n height: var(--lg-button-size-mobile) !important;\n font-size: var(--lg-button-size-mobile-font-size) !important;\n }\n\n .sm-btn-p {\n font-size: var(--sm-button-size-mobile-font-size) !important;\n line-height: var(--sm-button-size-mobile-line-height) !important;\n }\n}\n\n@media only screen and (max-width: 990px) {\n #wasd {\n width: 10.5rem !important;\n }\n\n .key {\n width: 3rem !important;\n }\n\n .key-description {\n font-size: 1.5rem !important;\n }\n\n .command {\n gap: 0.5rem !important;\n }\n}\n\n@media only screen and (max-width: 815px) {\n #controls-tutorial {\n gap: 0rem;\n flex-direction: column !important;\n }\n}\n\n@media only screen and (max-width: 750px) {\n .key-description {\n font-size: 1.2rem !important;\n }\n}\n\n@media only screen and (max-width: 650px) {\n #wasd {\n width: 9rem !important;\n }\n\n .key {\n width: 2.5rem !important;\n }\n .key-description {\n font-size: 1rem !important;\n }\n}\n"],"names":[],"sourceRoot":""}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"css/brick-engine.bundle.css","mappings":"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","sources":["webpack://BrickEngine/./public/style/body.css","webpack://BrickEngine/./public/style/buttons.css","webpack://BrickEngine/./public/style/debugger.css","webpack://BrickEngine/./public/style/sessionModal.css","webpack://BrickEngine/./public/style/sourceCodeAndCommands.css","webpack://BrickEngine/./public/style/splash.css","webpack://BrickEngine/./public/style/theme.css"],"sourcesContent":["/* MAIN BODY */\n\n#brick-game {\n display: flex;\n justify-content: center;\n align-items: center;\n width: 100%;\n height: 100%;\n}\n\n#container {\n width: var(--width);\n height: var(--height);\n\n background-color: var(--main-color);\n\n border-radius: var(--border-radius);\n border: var(--border);\n\n box-sizing: border-box;\n margin: auto;\n position: relative;\n\n display: flex;\n flex-direction: column;\n\n box-shadow:\n calc(var(--width) * -0.03) calc(var(--width) * 0.03) var(--dispersion) black,\n calc(var(--width) * -0.02) calc(var(--width) * 0.02) var(--dispersion) var(--color-shadow-reflexion) inset,\n calc(var(--width) * 0.01) calc(var(--width) * -0.01) var(--dispersion) var(--color-shadow) inset;\n}\n\n#brick-game-canvas {\n border: var(--border);\n box-shadow:\n calc(var(--width) * -0.01) calc(var(--width) * 0.01) var(--dispersion) var(--color-shadow),\n calc(var(--width) * 0.01) calc(var(--width) * -0.01) var(--dispersion) var(--color-shadow-reflexion);\n}\n\n/* FRAME */\n\n#frame {\n border: var(--border);\n border-radius: var(--border-radius);\n\n position: relative;\n\n width: calc(var(--width) * 0.85);\n height: auto;\n aspect-ratio: 9/10;\n margin: 7.5%;\n margin-bottom: 3.75%;\n\n display: flex;\n justify-content: center;\n align-items: center;\n}\n\n#frame div {\n position: absolute;\n top: calc(var(--height) * -0.02);\n left: 27.5%;\n\n width: 45%;\n height: calc(var(--height) * 0.03);\n\n background-color: var(--main-color);\n\n display: flex;\n justify-content: center;\n\n padding-top: calc(var(--height) * 0.005);\n padding-bottom: 0;\n}\n\n#frame p {\n text-align: center;\n\n font-family: 'retro-gamming';\n font-weight: bold;\n font-size: calc(var(--height) * 0.03);\n\n text-shadow:\n calc(var(--width) * -0.003) calc(var(--width) * 0.003) 0 var(--color-shadow),\n calc(var(--width) * 0.002) calc(var(--width) * -0.002) 0 var(--color-shadow-reflexion);\n}\n","/* BUTTONS */\n\n.sm-btn,\n.btn,\n.lg-btn {\n z-index: 999;\n}\n\n.sm-btn {\n box-shadow:\n calc(var(--width) * -0.0075) calc(var(--width) * 0.0075) var(--dispersion) var(--color-shadow),\n calc(var(--width) * -0.01) calc(var(--width) * 0.01) var(--dispersion) var(--button-color-reflexion) inset;\n}\n\n.sm-btn:active {\n box-shadow:\n calc(var(--width) * -0.004) calc(var(--width) * 0.004) var(--dispersion) var(--color-shadow),\n calc(var(--width) * -0.003) calc(var(--width) * 0.003) var(--dispersion) var(--button-color-reflexion) inset;\n transform: translateX(calc(var(--width) * -0.0025)) translateY(calc(var(--width) * 0.0025));\n}\n\n.btn {\n box-shadow:\n calc(var(--width) * -0.015) calc(var(--width) * 0.015) var(--dispersion) var(--color-shadow),\n calc(var(--width) * -0.0175) calc(var(--width) * 0.0175) var(--dispersion) var(--button-color-reflexion) inset;\n}\n\n.btn:active {\n box-shadow:\n calc(var(--width) * -0.004) calc(var(--width) * 0.004) var(--dispersion) var(--color-shadow),\n calc(var(--width) * -0.003) calc(var(--width) * 0.003) var(--dispersion) var(--button-color-reflexion) inset;\n transform: translateX(calc(var(--width) * -0.005)) translateY(calc(var(--width) * 0.005));\n}\n\n.lg-btn {\n box-shadow:\n calc(var(--width) * -0.02) calc(var(--width) * 0.02) var(--dispersion) var(--color-shadow),\n calc(var(--width) * -0.0175) calc(var(--width) * 0.0175) var(--dispersion) var(--button-color-reflexion) inset;\n}\n\n.lg-btn:active {\n box-shadow:\n calc(var(--width) * -0.005) calc(var(--width) * 0.005) var(--dispersion) var(--color-shadow),\n calc(var(--width) * -0.004) calc(var(--width) * 0.004) var(--dispersion) var(--button-color-reflexion) inset;\n transform: translateX(calc(var(--width) * -0.0075)) translateY(calc(var(--width) * 0.0075));\n}\n\n.sm-btn-p,\n.btn-p,\n.lg-btn-p {\n font-family: 'retro-gamming';\n color: white;\n text-align: center;\n\n user-select: none;\n}\n\n.sm-btn-container,\n.btn-container,\n.lg-btn-container {\n display: flex;\n justify-content: center;\n align-items: center;\n}\n\n.sm-btn,\n.btn,\n.lg-btn {\n outline: none;\n\n border-radius: 50%;\n border: var(--button-border);\n\n transition-property: transform box-shadow;\n transition-duration: var(--button-animation-duration);\n\n background-color: var(--button-color);\n}\n\n.sm-btn-container {\n flex-direction: column;\n}\n\n.sm-btn {\n width: var(--sm-button-size);\n height: var(--sm-button-size);\n}\n\n.sm-btn-p {\n font-family: 'retro-gamming';\n color: white;\n text-align: center;\n\n user-select: none;\n\n font-size: calc(var(--width) * 0.03);\n\n /* width: calc(var(--width) * 0.08); */\n margin-top: calc(var(--width) * 0.01);\n\n line-height: calc(var(--width) * 0.03);\n height: calc(var(--width) * 0.06);\n\n text-shadow:\n calc(var(--width) * -0.003) calc(var(--width) * 0.003) 0 var(--color-shadow),\n calc(var(--width) * 0.002) calc(var(--width) * -0.002) 0 var(--color-shadow-reflexion);\n}\n\n.btn-container {\n flex-direction: column-reverse;\n}\n\n.btn {\n width: var(--button-size);\n height: var(--button-size);\n}\n\n.btn-p {\n font-weight: bold;\n font-size: calc(var(--width) * 0.04);\n margin-bottom: calc(var(--width) * 0.015);\n line-height: calc(var(--width) * 0.03);\n}\n\n.lg-btn-container {\n flex-direction: column;\n}\n\n.lg-btn {\n width: var(--lg-button-size);\n height: var(--lg-button-size);\n}\n\n.lg-btn-p {\n font-weight: bold;\n font-size: calc(var(--width) * 0.05);\n margin-bottom: calc(var(--width) * 0.015);\n line-height: calc(var(--width) * 0.03);\n}\n\n.btn,\n.lg-btn {\n font-family: 'retro-gamming';\n font-size: calc(var(--width) * 0.045);\n font-weight: bold;\n color: white;\n text-shadow:\n calc(var(--width) * -0.003) calc(var(--width) * 0.003) 0 var(--button-color-shadow),\n calc(var(--width) * 0.002) calc(var(--width) * -0.002) 0 var(--button-color-reflexion);\n}\n\n/* BUTTON CONTAINERS */\n\n#button-container,\n#small-button-container,\n#inner-button-container,\n#medium-button-container,\n#large-button-container {\n width: 100%;\n height: auto;\n}\n\n#button-container {\n display: flex;\n flex-grow: 1;\n flex-direction: column;\n}\n\n#small-button-container {\n display: flex;\n flex-grow: 0.1;\n justify-content: space-evenly;\n\n max-height: 150px;\n\n position: relative;\n}\n\n.sm-btn-container-top {\n position: relative;\n top: -20%;\n}\n\n.sm-btn-container-bottom {\n position: relative;\n bottom: -20%;\n}\n\n#inner-button-container {\n display: flex;\n flex-grow: 1;\n flex-direction: row;\n}\n\n#medium-button-container {\n display: flex;\n flex-shrink: 1;\n\n position: relative;\n}\n\n#large-button-container {\n display: flex;\n justify-content: center;\n align-items: center;\n\n flex-shrink: 1.5;\n}\n\n#direction-vertical-container,\n#direction-horizontal-container {\n width: 100%;\n height: 100%;\n\n display: flex;\n justify-content: center;\n align-items: center;\n gap: calc(var(--width) * 0.115);\n\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n}\n\n#direction-vertical-container {\n flex-direction: column;\n}\n\n#direction-horizontal-container {\n flex-direction: row;\n}\n","#debugger {\n font-family: 'retro-gamming', monospace;\n background-color: rgba(0, 0, 0, 0.9);\n color: #0f0; /* Green phosphor */\n border: 2px solid #0f0;\n box-shadow: 0 0 10px #0f0;\n padding: 10px;\n position: absolute;\n top: 10px;\n right: 10px;\n width: 300px;\n max-height: calc(100vh - 40px);\n overflow-y: auto;\n user-select: none;\n -webkit-user-select: none;\n z-index: 9999;\n font-size: 14px;\n /* text-shadow: 0 0 2px #0f0; */\n}\n\n/* Custom Scrollbar */\n#debugger::-webkit-scrollbar {\n width: 8px;\n}\n\n#debugger::-webkit-scrollbar-track {\n background: #001100;\n}\n\n#debugger::-webkit-scrollbar-thumb {\n background: #0f0;\n border-radius: 4px;\n}\n\n#debugger::-webkit-scrollbar-thumb:hover {\n background: #0a0;\n}\n\n/* Summary / Header */\n#debugger-summary {\n font-weight: bold;\n font-size: 16px;\n cursor: pointer;\n margin-bottom: 10px;\n /* text-transform: uppercase; */\n border-bottom: 1px dashed #0f0;\n padding-bottom: 5px;\n list-style: none;\n}\n\n/* Module Sections */\n.debugger-module {\n margin-bottom: 10px;\n border-left: 1px solid #004400;\n padding-left: 8px;\n}\n\n.debugger-module-summary {\n cursor: pointer;\n font-weight: bold;\n color: #cfc;\n margin-bottom: 4px;\n}\n\n.debugger-module-summary:hover {\n color: #fff;\n /* text-shadow: 0 0 4px #fff; */\n}\n\n/* Data Rows */\n.debugger-container {\n display: flex;\n justify-content: space-between;\n padding: 2px 0;\n border-bottom: 1px dotted #003300;\n}\n\n/* Closed State */\n#debugger:not([open]) {\n width: auto;\n height: auto;\n max-height: none;\n padding: 5px 10px;\n border: 1px solid #0f0;\n background-color: rgba(0, 0, 0, 0.5);\n box-shadow: none;\n}\n\n#debugger:not([open]) #debugger-summary {\n margin-bottom: 0;\n border-bottom: none;\n padding-bottom: 0;\n}\n\n.debugger-container:hover {\n background-color: rgba(0, 255, 0, 0.05);\n}\n\n.debugger-container.highlight {\n background-color: transparent;\n color: #fff;\n /* text-shadow: 0 0 5px #fff; */\n border-bottom: 1px solid #fff;\n}\n\n.debugger-container.highlight span {\n color: #fff;\n}\n\n.debugger-container p {\n margin: 0;\n opacity: 0.8;\n}\n\n.debugger-container span {\n font-weight: bold;\n}\n","#modal-background {\n position: absolute;\n inset: 0;\n background-color: rgba(0, 0, 0, 0.5);\n z-index: 999;\n display: flex;\n justify-content: center;\n align-items: center;\n}\n\n#modal-background.hidden {\n display: none;\n}\n\n#session-modal {\n width: 80%;\n max-width: 500px;\n height: 44%;\n max-height: 360px;\n min-width: 320px;\n min-height: 280px;\n position: relative;\n overflow: hidden;\n\n display: flex;\n flex-direction: column;\n align-items: center;\n box-sizing: border-box;\n padding: 1rem 0;\n\n background-color: var(--main-color);\n\n border-radius: var(--border-radius);\n border: var(--border);\n\n box-shadow:\n calc(var(--width) * -0.03) calc(var(--width) * 0.03) var(--dispersion) black,\n calc(var(--width) * -0.02) calc(var(--width) * 0.02) var(--dispersion) var(--color-shadow-reflexion) inset,\n calc(var(--width) * 0.01) calc(var(--width) * -0.01) var(--dispersion) var(--color-shadow) inset;\n}\n\n#session-modal-frame {\n border: var(--border);\n border-radius: var(--border-radius);\n\n position: relative;\n\n width: 90%;\n flex: 1;\n margin: 1rem 0;\n min-height: 0;\n\n display: flex;\n justify-content: center;\n align-items: center;\n}\n\n#session-modal-frame > p {\n position: absolute;\n top: 0;\n transform: translateY(-50%);\n\n text-align: center;\n\n font-family: 'retro-gamming';\n font-weight: bold;\n font-size: clamp(1rem, calc(var(--height) * 0.03), 1.4rem);\n\n background-color: var(--main-color);\n padding: 0 calc(var(--width) * 0.02);\n\n text-shadow:\n calc(var(--width) * -0.003) calc(var(--width) * 0.003) 0 var(--color-shadow),\n calc(var(--width) * 0.002) calc(var(--width) * -0.002) 0 var(--color-shadow-reflexion);\n}\n\n#session-modal-screen {\n width: 90%;\n height: 80%;\n\n border: var(--border);\n box-shadow:\n calc(var(--width) * -0.01) calc(var(--width) * 0.01) var(--dispersion) var(--color-shadow),\n calc(var(--width) * 0.01) calc(var(--width) * -0.01) var(--dispersion) var(--color-shadow-reflexion);\n\n background-image: url('../images/cell.svg');\n background-size: 3.7%;\n background-repeat: repeat;\n\n display: flex;\n justify-content: center;\n align-items: center;\n}\n\n#session-modal-screen > p {\n text-align: center;\n\n font-family: 'retro-gamming';\n font-size: 1.5rem;\n\n padding: 0 calc(var(--width) * 0.02);\n}\n\n#session-modal-screen > p > span {\n font-size: 1.8rem;\n padding: 0 calc(var(--width) * 0.02);\n}\n\n#session-modal-buttons {\n width: 100%;\n padding-bottom: 0.5rem;\n\n display: flex;\n justify-content: center;\n align-items: center;\n\n gap: clamp(1rem, 5vw, 2.5rem);\n}\n\n.session-modal-button:active {\n box-shadow:\n calc(var(--width) * -0.005) calc(var(--width) * 0.005) var(--dispersion) var(--color-shadow),\n calc(var(--width) * -0.004) calc(var(--width) * 0.004) var(--dispersion) var(--button-color-reflexion) inset;\n transform: translate(calc(var(--width) * -0.005), calc(var(--width) * 0.005));\n}\n\n.session-modal-button {\n width: 35%;\n max-width: 150px;\n padding: 0.8rem 0;\n\n border: var(--border);\n border-radius: var(--border-radius);\n\n background-color: var(--button-color);\n box-shadow:\n calc(var(--width) * -0.015) calc(var(--width) * 0.015) var(--dispersion) var(--color-shadow),\n calc(var(--width) * -0.0175) calc(var(--width) * 0.0175) var(--dispersion) var(--button-color-reflexion) inset;\n\n font-family: 'retro-gamming';\n color: white;\n text-align: center;\n\n user-select: none;\n\n font-size: 1rem;\n\n text-shadow:\n calc(var(--width) * -0.003) calc(var(--width) * 0.003) 0 var(--button-color-shadow),\n calc(var(--width) * 0.002) calc(var(--width) * -0.002) 0 var(--button-color-reflexion);\n\n transition:\n transform var(--button-animation-duration),\n box-shadow var(--button-animation-duration);\n}\n","#source-code {\n position: absolute;\n top: 2%;\n right: 2%;\n}\n\n#controls {\n position: absolute;\n top: 2%;\n left: 2%;\n}\n\n#source-code,\n#controls {\n background-color: var(--main-color);\n padding: 0.75rem;\n border-radius: 1.5rem;\n cursor: pointer;\n box-sizing: content-box;\n}\n\n#source-code > #source-code-button,\n#controls > #controls-button {\n display: flex;\n justify-content: center;\n align-items: center;\n}\n\n#source-code > #source-code-button > img,\n#controls > #controls-button > img {\n width: 2.5rem;\n filter: invert();\n}\n#source-code:hover,\n#controls:hover {\n background-color: var(--color-shadow-reflexion);\n}\n#source-code:active,\n#controls:active {\n filter: brightness(1.15);\n}\n\n#source-code::after,\n#controls::after {\n font-family: 'retro-gamming';\n padding: 0.5rem;\n width: 6rem;\n background-color: white;\n text-align: center;\n border-radius: 0.25rem;\n border: 1px black solid;\n box-shadow: 0.25rem 0.25rem black;\n opacity: 0;\n transition: 0.25s opacity;\n}\n\n#source-code:hover::after,\n#controls:hover::after {\n opacity: 1;\n}\n\n#source-code::after {\n content: 'source code';\n position: absolute;\n top: 75px;\n left: -65px;\n}\n\n#controls::after {\n content: 'Controls';\n position: absolute;\n top: 75px;\n left: 15px;\n}\n","#splash {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: black;\n opacity: 0.85;\n z-index: 1000;\n display: flex;\n justify-content: center;\n align-items: center;\n}\n","@font-face {\n font-family: retro-gamming;\n src: url(./../fonts/digital-7.monoitalic.ttf);\n}\n\n* {\n margin: 0;\n padding: 0;\n box-sizing: content-box;\n user-select: none;\n}\n\nbody {\n width: 100vw;\n height: 100vh;\n\n display: flex;\n justify-content: center;\n align-items: center;\n\n background: rgb(0, 158, 247);\n background: linear-gradient(300deg, rgb(48, 179, 255) 0%, rgba(0, 158, 247, 1) 100%);\n}\n\n#version {\n font-family: 'retro-gamming';\n font-size: 1rem;\n color: white;\n position: absolute;\n bottom: 1rem;\n right: 1rem;\n}\n\n@media only screen and (max-width: 600px) {\n #source-code,\n #controls {\n display: none;\n }\n\n body,\n #container {\n width: 100% !important;\n height: 100vh !important;\n /* height: 100dvh !important; */\n border-radius: 0px !important;\n }\n\n #frame > canvas {\n width: 85% !important;\n height: auto !important;\n aspect-ratio: 9/10 !important;\n }\n\n #frame {\n width: 85% !important;\n padding: 7.5%¨ !important;\n }\n\n #small-button-container {\n margin-top: 3.5%;\n }\n #direction-vertical-container,\n #direction-horizontal-container {\n gap: calc(var(--width) * 0.13);\n }\n\n #large-button-container {\n flex-shrink: 1.75;\n }\n\n .sm-btn {\n width: var(--sm-button-size-mobile) !important;\n height: var(--sm-button-size-mobile) !important;\n }\n\n .btn {\n width: var(--button-size-mobile) !important;\n height: var(--button-size-mobile) !important;\n margin: var(--button-size-mobile-spacing) !important;\n font-size: var(--button-size-mobile-font-size) !important;\n }\n\n .lg-btn {\n width: var(--lg-button-size-mobile) !important;\n height: var(--lg-button-size-mobile) !important;\n font-size: var(--lg-button-size-mobile-font-size) !important;\n }\n\n .sm-btn-p {\n font-size: var(--sm-button-size-mobile-font-size) !important;\n line-height: var(--sm-button-size-mobile-line-height) !important;\n }\n}\n\n@media only screen and (max-width: 990px) {\n #wasd {\n width: 10.5rem !important;\n }\n\n .key {\n width: 3rem !important;\n }\n\n .key-description {\n font-size: 1.5rem !important;\n }\n\n .command {\n gap: 0.5rem !important;\n }\n}\n\n@media only screen and (max-width: 815px) {\n #controls-tutorial {\n gap: 0rem;\n flex-direction: column !important;\n }\n}\n\n@media only screen and (max-width: 750px) {\n .key-description {\n font-size: 1.2rem !important;\n }\n}\n\n@media only screen and (max-width: 650px) {\n #wasd {\n width: 9rem !important;\n }\n\n .key {\n width: 2.5rem !important;\n }\n .key-description {\n font-size: 1rem !important;\n }\n}\n"],"names":[],"sourceRoot":""}
|
|
@@ -1,167 +0,0 @@
|
|
|
1
|
-
= Game Developer Guide
|
|
2
|
-
|
|
3
|
-
This guide explains how to develop and package games for the Brick Engine.
|
|
4
|
-
|
|
5
|
-
== Architecture
|
|
6
|
-
|
|
7
|
-
The Brick Engine runs as a host application. Your game is loaded as a separate script bundle. To ensure compatibility and avoid code duplication:
|
|
8
|
-
|
|
9
|
-
1. **Do not bundle the engine**: Your game should treat `brick-engine` as an external dependency.
|
|
10
|
-
2. **Expose your class**: Your game must assign its main class to `window.BrickEngineGame`.
|
|
11
|
-
|
|
12
|
-
== Project Setup
|
|
13
|
-
|
|
14
|
-
=== 1. Dependencies
|
|
15
|
-
|
|
16
|
-
You need `typescript` and `webpack` (or similar bundler). You also need the `brick-engine` types.
|
|
17
|
-
|
|
18
|
-
=== Starting from Scratch
|
|
19
|
-
|
|
20
|
-
If you are creating a new game project, follow these steps:
|
|
21
|
-
|
|
22
|
-
1. **Initialize Project**:
|
|
23
|
-
`npm init -y`
|
|
24
|
-
|
|
25
|
-
2. **Install Dependencies**:
|
|
26
|
-
`npm install --save-dev typescript webpack webpack-cli ts-loader unused-webpack-plugin` (adjust as needed)
|
|
27
|
-
|
|
28
|
-
3. **Configure TypeScript (`tsconfig.json`)**:
|
|
29
|
-
+
|
|
30
|
-
[source,json]
|
|
31
|
-
----
|
|
32
|
-
{
|
|
33
|
-
"compilerOptions": {
|
|
34
|
-
"outDir": "./dist/",
|
|
35
|
-
"noImplicitAny": true,
|
|
36
|
-
"module": "es6",
|
|
37
|
-
"target": "es5",
|
|
38
|
-
"allowJs": true,
|
|
39
|
-
"moduleResolution": "node",
|
|
40
|
-
"resolveJsonModule": true,
|
|
41
|
-
"types": ["node"]
|
|
42
|
-
},
|
|
43
|
-
"include": ["src/**/*"]
|
|
44
|
-
}
|
|
45
|
-
----
|
|
46
|
-
|
|
47
|
-
4. **Configure Webpack (`webpack.config.js`)**:
|
|
48
|
-
(See section 3 below)
|
|
49
|
-
|
|
50
|
-
5. **Add Scripts to `package.json`**:
|
|
51
|
-
+
|
|
52
|
-
[source,json]
|
|
53
|
-
----
|
|
54
|
-
"scripts": {
|
|
55
|
-
"build": "webpack --mode production",
|
|
56
|
-
"start": "webpack serve --mode development"
|
|
57
|
-
}
|
|
58
|
-
----
|
|
59
|
-
|
|
60
|
-
=== Local Development Setup (Linking)
|
|
61
|
-
|
|
62
|
-
Since the engine is not yet published to npm, you can link it locally:
|
|
63
|
-
|
|
64
|
-
1. **In `brick-engine` folder**:
|
|
65
|
-
* Run `npm install`
|
|
66
|
-
* Run `npm run build:types` (to generate `.d.ts` files)
|
|
67
|
-
* Run `npm link`
|
|
68
|
-
2. **In your game folder**:
|
|
69
|
-
* Run `npm link brick-engine`
|
|
70
|
-
|
|
71
|
-
This makes `import { Game } from 'brick-engine'` work in your editor!
|
|
72
|
-
|
|
73
|
-
=== 2. Entry Point (`src/index.ts`)
|
|
74
|
-
|
|
75
|
-
Instead of `new Game()`, you simply export your class to the global scope:
|
|
76
|
-
|
|
77
|
-
[source,typescript]
|
|
78
|
-
----
|
|
79
|
-
import { Game } from 'brick-engine'; // Resolves to global BrickEngine.Game
|
|
80
|
-
|
|
81
|
-
export default class MyGame extends Game {
|
|
82
|
-
setupGame() {
|
|
83
|
-
// ... your setup logic
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
update() {
|
|
87
|
-
// ... your update logic
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
render() {
|
|
91
|
-
// ... your render logic
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
// CRITICAL: Register your game
|
|
96
|
-
(window as any).BrickEngineGame = MyGame;
|
|
97
|
-
----
|
|
98
|
-
|
|
99
|
-
=== 3. Webpack Configuration
|
|
100
|
-
|
|
101
|
-
Configure Webpack to exclude `brick-engine` and `p5` from your bundle.
|
|
102
|
-
|
|
103
|
-
[source,javascript]
|
|
104
|
-
----
|
|
105
|
-
// webpack.config.js
|
|
106
|
-
const path = require('path');
|
|
107
|
-
|
|
108
|
-
module.exports = {
|
|
109
|
-
entry: './src/index.ts',
|
|
110
|
-
module: {
|
|
111
|
-
rules: [
|
|
112
|
-
{
|
|
113
|
-
test: /\.tsx?$/,
|
|
114
|
-
use: 'ts-loader',
|
|
115
|
-
exclude: /node_modules/,
|
|
116
|
-
},
|
|
117
|
-
],
|
|
118
|
-
},
|
|
119
|
-
resolve: {
|
|
120
|
-
extensions: ['.tsx', '.ts', '.js'],
|
|
121
|
-
},
|
|
122
|
-
externals: {
|
|
123
|
-
'brick-engine': 'BrickEngine', // Maps import 'brick-engine' to window.BrickEngine
|
|
124
|
-
'p5': 'p5' // p5 is also provided by the engine
|
|
125
|
-
},
|
|
126
|
-
output: {
|
|
127
|
-
filename: 'my-game.bundle.js',
|
|
128
|
-
path: path.resolve(__dirname, 'dist'),
|
|
129
|
-
library: {
|
|
130
|
-
type: 'var',
|
|
131
|
-
name: 'MyGameBundle' // Optional, but good practice
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
};
|
|
135
|
-
----
|
|
136
|
-
|
|
137
|
-
== Local Testing
|
|
138
|
-
|
|
139
|
-
You can test your game locally without uploading it:
|
|
140
|
-
|
|
141
|
-
1. **Build** your game (`npm run build`).
|
|
142
|
-
2. **Serve** the `dist` folder:
|
|
143
|
-
* Command: `npx http-server ./dist --cors` (or similar).
|
|
144
|
-
* Note the URL (e.g., `http://127.0.0.1:8081/my-game.bundle.js`).
|
|
145
|
-
3. **Register** in Engine:
|
|
146
|
-
* In `src/menu/GameRepository.ts`, add a temporary entry:
|
|
147
|
-
+
|
|
148
|
-
[source,typescript]
|
|
149
|
-
----
|
|
150
|
-
{
|
|
151
|
-
name: 'My Local Game',
|
|
152
|
-
url: 'http://127.0.0.1:8081/my-game.bundle.js'
|
|
153
|
-
}
|
|
154
|
-
----
|
|
155
|
-
|
|
156
|
-
== Publishing and Submission
|
|
157
|
-
|
|
158
|
-
Once your game is ready and hosted (e.g., on GitHub Pages):
|
|
159
|
-
|
|
160
|
-
1. **Test**: Ensure it loads correctly when you manually simulate a load (or use the provided template).
|
|
161
|
-
2. **Submit**: To have your game listed in the official Brick Engine menu, please send an email to **[EMAIL_ADDRESS]** with the following details:
|
|
162
|
-
* **Game Name**: The title of your game.
|
|
163
|
-
* **Bundle URL**: The direct link to your `.js` bundle.
|
|
164
|
-
* **Thumbnail/Icon**: (Optional) A small image for the menu.
|
|
165
|
-
* **Source Code**: (Optional) Link to your repository.
|
|
166
|
-
|
|
167
|
-
We will review your game and add it to the repository!
|
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
= Brick Engine CLI
|
|
2
|
-
:toc: left
|
|
3
|
-
:sectnums:
|
|
4
|
-
|
|
5
|
-
CLI to scaffold Brick Engine projects.
|
|
6
|
-
|
|
7
|
-
== Introduction
|
|
8
|
-
|
|
9
|
-
`brick-engine-cli` is a command-line tool designed to accelerate game development using the **Brick Engine**. It automates the creation of the project's initial structure, configures build tools and code quality settings, allowing you to start programming your game immediately.
|
|
10
|
-
|
|
11
|
-
== Installation and Usage
|
|
12
|
-
|
|
13
|
-
You can use this tool in two main ways:
|
|
14
|
-
|
|
15
|
-
=== 1. Use Without Installation (Recommended)
|
|
16
|
-
|
|
17
|
-
The fastest way to get started is using `npx`, which runs the latest version of the tool without requiring a global installation on your system:
|
|
18
|
-
|
|
19
|
-
[source,bash]
|
|
20
|
-
----
|
|
21
|
-
npx brick-engine-cli init <project-name>
|
|
22
|
-
----
|
|
23
|
-
|
|
24
|
-
=== 2. Global Installation
|
|
25
|
-
|
|
26
|
-
If you prefer to have the command permanently available in your terminal, you can install it globally via `npm`:
|
|
27
|
-
|
|
28
|
-
[source,bash]
|
|
29
|
-
----
|
|
30
|
-
npm install -g brick-engine-cli
|
|
31
|
-
----
|
|
32
|
-
|
|
33
|
-
After installation, you can use the command directly:
|
|
34
|
-
|
|
35
|
-
[source,bash]
|
|
36
|
-
----
|
|
37
|
-
brick-engine-cli init <project-name>
|
|
38
|
-
----
|
|
39
|
-
|
|
40
|
-
== Commands
|
|
41
|
-
|
|
42
|
-
=== `init <name>`
|
|
43
|
-
|
|
44
|
-
Initializes a new Brick Engine project in a directory with the provided name.
|
|
45
|
-
|
|
46
|
-
During the process, you will be asked about:
|
|
47
|
-
* Project description.
|
|
48
|
-
* Whether you want to use **ESLint** to ensure code quality.
|
|
49
|
-
* Whether you want to use **Prettier** for automatic formatting.
|
|
50
|
-
|
|
51
|
-
== Template Scripts
|
|
52
|
-
|
|
53
|
-
Generated projects come with the following scripts in `package.json`:
|
|
54
|
-
|
|
55
|
-
=== Development and Build
|
|
56
|
-
|
|
57
|
-
[cols="1,3"]
|
|
58
|
-
|===
|
|
59
|
-
| Command | Description
|
|
60
|
-
|
|
61
|
-
| `npm start`
|
|
62
|
-
| Starts the development server with hot reload and opens the browser in `standalone` mode.
|
|
63
|
-
|
|
64
|
-
| `npm run build:standalone`
|
|
65
|
-
| Generates the production version of the game in the `/dist` folder for independent web hosting.
|
|
66
|
-
|
|
67
|
-
| `npm run build:bundle`
|
|
68
|
-
| Generates an optimized bundle to be loaded at link:https://brickengine.com.br[brickengine.com.br], where you can play all previously published games directly in the browser.
|
|
69
|
-
|
|
70
|
-
| `npm run serve`
|
|
71
|
-
| Starts a local HTTP server to test the production version generated in `/dist`.
|
|
72
|
-
|===
|
|
73
|
-
|
|
74
|
-
=== Code Quality (Optional)
|
|
75
|
-
|
|
76
|
-
If you selected these options during `init`:
|
|
77
|
-
|
|
78
|
-
[cols="1,3"]
|
|
79
|
-
|===
|
|
80
|
-
| Command | Description
|
|
81
|
-
|
|
82
|
-
| `npm run format`
|
|
83
|
-
| Automatically formats the code using **Prettier**.
|
|
84
|
-
|
|
85
|
-
| `npm run lint`
|
|
86
|
-
| Runs **ESLint** to find issues in the code.
|
|
87
|
-
|===
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
graph TD
|
|
2
|
-
Start([Start]) --> Setup[Setup Modules]
|
|
3
|
-
Setup --> DrawLoop{Draw Loop}
|
|
4
|
-
|
|
5
|
-
subgraph "Each Frame (Draw)"
|
|
6
|
-
DrawLoop --> TimeUpdate[Time Update]
|
|
7
|
-
TimeUpdate --> CheckTick{"Should Tick?"}
|
|
8
|
-
CheckTick -- Yes --> ProcessTick["Process Logic (Tick) [processTick()]"]
|
|
9
|
-
CheckTick -- No --> RenderGrid
|
|
10
|
-
ProcessTick --> RenderGrid[Render Grid]
|
|
11
|
-
RenderGrid --> CheckFrame{"Frame Interval?"}
|
|
12
|
-
CheckFrame -- Yes --> ProcessFrame["Process Visuals (Frame) [processFrame()]"]
|
|
13
|
-
CheckFrame -- No --> CheckPerf
|
|
14
|
-
ProcessFrame --> CheckPerf{"Performance Monitor Enabled?"}
|
|
15
|
-
CheckPerf -- Yes --> RenderPerf[Render Performance Monitor]
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
CheckPerf -- No --> DrawLoop
|
|
19
|
-
RenderPerf --> DrawLoop
|
|
@@ -1,210 +0,0 @@
|
|
|
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
|
-
----
|