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.
Files changed (280) hide show
  1. package/dist/app.js +1 -4952
  2. package/dist/brick-engine.js +1 -4970
  3. package/dist/css/{app.bundle.css → app.0ce9b8479d1758fc15ba.css} +0 -2
  4. package/dist/css/{brick-engine.bundle.css → brick-engine.0ce9b8479d1758fc15ba.css} +0 -2
  5. package/dist/docs/GAME_DEVELOPER_GUIDE.html +1 -1
  6. package/dist/docs/brick-engine-guide.html +1 -1
  7. package/dist/docs/getting-started.html +1 -1
  8. package/dist/docs/jsdoc_standard.html +1 -1
  9. package/dist/docs/publishing.html +1 -1
  10. package/dist/docs/reference/interfaces/modules/Session.html +1 -1
  11. package/dist/docs/reference/modules/GameMenu.html +1 -1
  12. package/dist/docs/reference/modules/GameSession.html +1 -1
  13. package/dist/docs/reference/modules/InitialStateSnapshot.html +1 -1
  14. package/dist/docs/reference/modules/SessionModal.html +1 -1
  15. package/dist/docs/testing_best_practices.html +1 -1
  16. package/dist/index.html +1 -15
  17. package/dist/vendor/p5.min.js +1 -1
  18. package/package.json +2 -4
  19. package/dist/app.js.map +0 -1
  20. package/dist/brick-engine.js.map +0 -1
  21. package/dist/css/app.bundle.css.map +0 -1
  22. package/dist/css/brick-engine.bundle.css.map +0 -1
  23. package/docs/GAME_DEVELOPER_GUIDE.adoc +0 -167
  24. package/docs/brick-engine-guide.adoc +0 -87
  25. package/docs/diagrams/lifecycle.mmd +0 -19
  26. package/docs/documentation_style_guide.adoc +0 -210
  27. package/docs/getting-started.adoc +0 -147
  28. package/docs/images/lifecycle.svg +0 -1
  29. package/docs/jsdoc_standard.adoc +0 -109
  30. package/docs/publishing.adoc +0 -58
  31. package/docs/reference/enums/Color.adoc +0 -35
  32. package/docs/reference/enums/ControlEventType.adoc +0 -28
  33. package/docs/reference/enums/ControlKey.adoc +0 -34
  34. package/docs/reference/enums/FontAlignment.adoc +0 -43
  35. package/docs/reference/enums/FontSize.adoc +0 -31
  36. package/docs/reference/enums/Sound.adoc +0 -42
  37. package/docs/reference/enums/StateProperty.adoc +0 -33
  38. package/docs/reference/helpers/CellHelper.adoc +0 -37
  39. package/docs/reference/helpers/ControlInputHandlerHelper.adoc +0 -57
  40. package/docs/reference/helpers/CoordinateHelper.adoc +0 -118
  41. package/docs/reference/helpers/RelativeValuesHelper.adoc +0 -53
  42. package/docs/reference/interfaces/Debuggable.adoc +0 -29
  43. package/docs/reference/interfaces/GameModules.adoc +0 -35
  44. package/docs/reference/interfaces/Initializable.adoc +0 -24
  45. package/docs/reference/interfaces/RendererInitializable.adoc +0 -33
  46. package/docs/reference/interfaces/StateSyncable.adoc +0 -41
  47. package/docs/reference/interfaces/modules/Control.adoc +0 -98
  48. package/docs/reference/interfaces/modules/Grid.adoc +0 -411
  49. package/docs/reference/interfaces/modules/Renderer.adoc +0 -34
  50. package/docs/reference/interfaces/modules/RendererComposite.adoc +0 -57
  51. package/docs/reference/interfaces/modules/Score.adoc +0 -107
  52. package/docs/reference/interfaces/modules/Session.adoc +0 -66
  53. package/docs/reference/interfaces/modules/State.adoc +0 -290
  54. package/docs/reference/interfaces/modules/Text.adoc +0 -110
  55. package/docs/reference/interfaces/modules/Time.adoc +0 -119
  56. package/docs/reference/modules/Debugger.adoc +0 -71
  57. package/docs/reference/modules/DisplayRenderer.adoc +0 -55
  58. package/docs/reference/modules/Game.adoc +0 -256
  59. package/docs/reference/modules/GameControl.adoc +0 -139
  60. package/docs/reference/modules/GameGrid.adoc +0 -794
  61. package/docs/reference/modules/GameHudGrid.adoc +0 -38
  62. package/docs/reference/modules/GameMenu.adoc +0 -39
  63. package/docs/reference/modules/GameRenderer.adoc +0 -79
  64. package/docs/reference/modules/GameScore.adoc +0 -138
  65. package/docs/reference/modules/GameSession.adoc +0 -43
  66. package/docs/reference/modules/GameSound.adoc +0 -111
  67. package/docs/reference/modules/GameState.adoc +0 -318
  68. package/docs/reference/modules/GameText.adoc +0 -139
  69. package/docs/reference/modules/GameTime.adoc +0 -141
  70. package/docs/reference/modules/HudRenderer.adoc +0 -56
  71. package/docs/reference/modules/InitialStateSnapshot.adoc +0 -47
  72. package/docs/reference/modules/SessionModal.adoc +0 -34
  73. package/docs/reference/types/Axis.adoc +0 -28
  74. package/docs/reference/types/Cell.adoc +0 -29
  75. package/docs/reference/types/ControlCallback.adoc +0 -23
  76. package/docs/reference/types/Coordinate.adoc +0 -29
  77. package/docs/reference/types/GameEntry.adoc +0 -29
  78. package/docs/reference/types/GameEvent.adoc +0 -29
  79. package/docs/reference/types/Piece.adoc +0 -32
  80. package/docs/reference/types/RendererMetrics.adoc +0 -29
  81. package/docs/reference/types/Vector.adoc +0 -28
  82. package/docs/testing_best_practices.adoc +0 -190
  83. package/public/CNAME +0 -1
  84. package/public/docs/GAME_DEVELOPER_GUIDE.html +0 -727
  85. package/public/docs/brick-engine-guide.html +0 -610
  86. package/public/docs/diagrams/lifecycle.mmd +0 -19
  87. package/public/docs/documentation_style_guide.html +0 -994
  88. package/public/docs/getting-started.html +0 -648
  89. package/public/docs/images/lifecycle.svg +0 -1
  90. package/public/docs/index.html +0 -593
  91. package/public/docs/jsdoc_standard.html +0 -656
  92. package/public/docs/publishing.html +0 -573
  93. package/public/docs/reference/enums/Color.html +0 -533
  94. package/public/docs/reference/enums/ControlEventType.html +0 -505
  95. package/public/docs/reference/enums/ControlKey.html +0 -529
  96. package/public/docs/reference/enums/FontAlignment.html +0 -545
  97. package/public/docs/reference/enums/FontSize.html +0 -517
  98. package/public/docs/reference/enums/Sound.html +0 -558
  99. package/public/docs/reference/enums/StateProperty.html +0 -525
  100. package/public/docs/reference/helpers/CellHelper.html +0 -520
  101. package/public/docs/reference/helpers/ControlInputHandlerHelper.html +0 -569
  102. package/public/docs/reference/helpers/CoordinateHelper.html +0 -703
  103. package/public/docs/reference/helpers/RelativeValuesHelper.html +0 -560
  104. package/public/docs/reference/interfaces/Debuggable.html +0 -501
  105. package/public/docs/reference/interfaces/GameModules.html +0 -544
  106. package/public/docs/reference/interfaces/Initializable.html +0 -495
  107. package/public/docs/reference/interfaces/RendererInitializable.html +0 -517
  108. package/public/docs/reference/interfaces/StateSyncable.html +0 -542
  109. package/public/docs/reference/interfaces/modules/Control.html +0 -648
  110. package/public/docs/reference/interfaces/modules/Grid.html +0 -1256
  111. package/public/docs/reference/interfaces/modules/Renderer.html +0 -522
  112. package/public/docs/reference/interfaces/modules/RendererComposite.html +0 -577
  113. package/public/docs/reference/interfaces/modules/Score.html +0 -669
  114. package/public/docs/reference/interfaces/modules/Session.html +0 -585
  115. package/public/docs/reference/interfaces/modules/State.html +0 -897
  116. package/public/docs/reference/interfaces/modules/Text.html +0 -668
  117. package/public/docs/reference/interfaces/modules/Time.html +0 -684
  118. package/public/docs/reference/modules/Debugger.html +0 -579
  119. package/public/docs/reference/modules/DisplayRenderer.html +0 -557
  120. package/public/docs/reference/modules/Game.html +0 -909
  121. package/public/docs/reference/modules/GameControl.html +0 -716
  122. package/public/docs/reference/modules/GameGrid.html +0 -1910
  123. package/public/docs/reference/modules/GameHudGrid.html +0 -508
  124. package/public/docs/reference/modules/GameMenu.html +0 -538
  125. package/public/docs/reference/modules/GameRenderer.html +0 -589
  126. package/public/docs/reference/modules/GameScore.html +0 -664
  127. package/public/docs/reference/modules/GameSession.html +0 -533
  128. package/public/docs/reference/modules/GameSound.html +0 -636
  129. package/public/docs/reference/modules/GameState.html +0 -922
  130. package/public/docs/reference/modules/GameText.html +0 -701
  131. package/public/docs/reference/modules/GameTime.html +0 -696
  132. package/public/docs/reference/modules/HudRenderer.html +0 -568
  133. package/public/docs/reference/modules/InitialStateSnapshot.html +0 -557
  134. package/public/docs/reference/modules/SessionModal.html +0 -520
  135. package/public/docs/reference/types/Axis.html +0 -505
  136. package/public/docs/reference/types/Cell.html +0 -514
  137. package/public/docs/reference/types/ControlCallback.html +0 -488
  138. package/public/docs/reference/types/Coordinate.html +0 -510
  139. package/public/docs/reference/types/GameEntry.html +0 -514
  140. package/public/docs/reference/types/GameEvent.html +0 -514
  141. package/public/docs/reference/types/Piece.html +0 -506
  142. package/public/docs/reference/types/RendererMetrics.html +0 -514
  143. package/public/docs/reference/types/Vector.html +0 -509
  144. package/public/docs/testing_best_practices.html +0 -770
  145. package/public/favicon.ico +0 -0
  146. package/public/fonts/digital-7.monoitalic.ttf +0 -0
  147. package/public/images/cell.svg +0 -32
  148. package/public/images/close.png +0 -0
  149. package/public/images/games.png +0 -0
  150. package/public/images/github.png +0 -0
  151. package/public/images/letter-a.png +0 -0
  152. package/public/images/letter-d.png +0 -0
  153. package/public/images/letter-j.png +0 -0
  154. package/public/images/letter-s.png +0 -0
  155. package/public/images/letter-w.png +0 -0
  156. package/public/images/meta-image.png +0 -0
  157. package/public/images/number-1.png +0 -0
  158. package/public/images/number-2.png +0 -0
  159. package/public/images/number-3.png +0 -0
  160. package/public/images/number-4.png +0 -0
  161. package/public/images/number-5.png +0 -0
  162. package/public/images/number-6.png +0 -0
  163. package/public/images/splash.gif +0 -0
  164. package/public/index.html +0 -15
  165. package/public/sounds/sound_00.wav +0 -0
  166. package/public/sounds/sound_01.wav +0 -0
  167. package/public/sounds/sound_02.wav +0 -0
  168. package/public/sounds/sound_03.wav +0 -0
  169. package/public/sounds/sound_04.wav +0 -0
  170. package/public/sounds/sound_05.wav +0 -0
  171. package/public/sounds/sound_06.wav +0 -0
  172. package/public/sounds/sound_07.wav +0 -0
  173. package/public/sounds/sound_08.wav +0 -0
  174. package/public/sounds/sound_09.wav +0 -0
  175. package/public/sounds/sound_10.wav +0 -0
  176. package/public/sounds/sound_11.wav +0 -0
  177. package/public/sounds/sound_12.wav +0 -0
  178. package/public/sounds/sound_13.wav +0 -0
  179. package/public/sounds/sound_14.wav +0 -0
  180. package/public/sounds/sound_15.wav +0 -0
  181. package/public/style/body.css +0 -86
  182. package/public/style/buttons.css +0 -233
  183. package/public/style/debugger.css +0 -117
  184. package/public/style/sessionModal.css +0 -155
  185. package/public/style/sourceCodeAndCommands.css +0 -74
  186. package/public/style/splash.css +0 -13
  187. package/public/style/theme.css +0 -137
  188. /package/dist/{bootstrap.d.ts → types/bootstrap.d.ts} +0 -0
  189. /package/dist/{bootstrap.test.d.ts → types/bootstrap.test.d.ts} +0 -0
  190. /package/dist/{config → types/config}/configs.d.ts +0 -0
  191. /package/dist/{config → types/config}/configs.test.d.ts +0 -0
  192. /package/dist/{core → types/core}/Game.d.ts +0 -0
  193. /package/dist/{core → types/core}/Game.test.d.ts +0 -0
  194. /package/dist/{core → types/core}/InitialStateSnapshot.d.ts +0 -0
  195. /package/dist/{core → types/core}/InitialStateSnapshot.test.d.ts +0 -0
  196. /package/dist/{core → types/core}/helpers/CellHelper.d.ts +0 -0
  197. /package/dist/{core → types/core}/helpers/CellHelper.test.d.ts +0 -0
  198. /package/dist/{core → types/core}/helpers/ControlInputHandlerHelper.d.ts +0 -0
  199. /package/dist/{core → types/core}/helpers/ControlInputHandlerHelper.test.d.ts +0 -0
  200. /package/dist/{core → types/core}/helpers/CoordinateHelper.d.ts +0 -0
  201. /package/dist/{core → types/core}/helpers/CoordinateHelper.test.d.ts +0 -0
  202. /package/dist/{core → types/core}/helpers/InterfaceIdentifierHelper.d.ts +0 -0
  203. /package/dist/{core → types/core}/helpers/InterfaceIdentifierHelper.test.d.ts +0 -0
  204. /package/dist/{core → types/core}/helpers/RelativeValuesHelper.d.ts +0 -0
  205. /package/dist/{core → types/core}/helpers/RelativeValuesHelper.test.d.ts +0 -0
  206. /package/dist/{core → types/core}/module/control/GameControl.d.ts +0 -0
  207. /package/dist/{core → types/core}/module/control/GameControl.test.d.ts +0 -0
  208. /package/dist/{core → types/core}/module/control/GameControlKeyBinding.d.ts +0 -0
  209. /package/dist/{core → types/core}/module/control/GameControlKeyBinding.test.d.ts +0 -0
  210. /package/dist/{core → types/core}/module/grid/GameGrid.d.ts +0 -0
  211. /package/dist/{core → types/core}/module/grid/GameGrid.test.d.ts +0 -0
  212. /package/dist/{core → types/core}/module/grid/GameHudGrid.d.ts +0 -0
  213. /package/dist/{core → types/core}/module/grid/GameHudGrid.test.d.ts +0 -0
  214. /package/dist/{core → types/core}/module/grid/engines/GridAnalysisEngine.d.ts +0 -0
  215. /package/dist/{core → types/core}/module/grid/engines/GridAnalysisEngine.test.d.ts +0 -0
  216. /package/dist/{core → types/core}/module/grid/engines/GridLineEngine.d.ts +0 -0
  217. /package/dist/{core → types/core}/module/grid/engines/GridLineEngine.test.d.ts +0 -0
  218. /package/dist/{core → types/core}/module/grid/engines/GridMovementEngine.d.ts +0 -0
  219. /package/dist/{core → types/core}/module/grid/engines/GridMovementEngine.test.d.ts +0 -0
  220. /package/dist/{core → types/core}/module/grid/engines/GridRegionEngine.d.ts +0 -0
  221. /package/dist/{core → types/core}/module/grid/engines/GridRegionEngine.test.d.ts +0 -0
  222. /package/dist/{core → types/core}/module/grid/engines/GridTransformEngine.d.ts +0 -0
  223. /package/dist/{core → types/core}/module/grid/engines/GridTransformEngine.test.d.ts +0 -0
  224. /package/dist/{core → types/core}/module/renderer/DisplayRenderer.d.ts +0 -0
  225. /package/dist/{core → types/core}/module/renderer/DisplayRenderer.test.d.ts +0 -0
  226. /package/dist/{core → types/core}/module/renderer/GameRenderer.d.ts +0 -0
  227. /package/dist/{core → types/core}/module/renderer/GameRenderer.test.d.ts +0 -0
  228. /package/dist/{core → types/core}/module/renderer/HudRenderer.d.ts +0 -0
  229. /package/dist/{core → types/core}/module/renderer/HudRenderer.test.d.ts +0 -0
  230. /package/dist/{core → types/core}/module/score/GameScore.d.ts +0 -0
  231. /package/dist/{core → types/core}/module/score/GameScore.test.d.ts +0 -0
  232. /package/dist/{core → types/core}/module/session/GameSession.d.ts +0 -0
  233. /package/dist/{core → types/core}/module/session/GameSession.test.d.ts +0 -0
  234. /package/dist/{core → types/core}/module/sound/GameSound.d.ts +0 -0
  235. /package/dist/{core → types/core}/module/sound/GameSound.test.d.ts +0 -0
  236. /package/dist/{core → types/core}/module/state/GameState.d.ts +0 -0
  237. /package/dist/{core → types/core}/module/state/GameState.test.d.ts +0 -0
  238. /package/dist/{core → types/core}/module/text/GameText.d.ts +0 -0
  239. /package/dist/{core → types/core}/module/text/GameText.test.d.ts +0 -0
  240. /package/dist/{core → types/core}/module/time/GameTime.d.ts +0 -0
  241. /package/dist/{core → types/core}/module/time/GameTime.test.d.ts +0 -0
  242. /package/dist/{core → types/core}/types/Interfaces.d.ts +0 -0
  243. /package/dist/{core → types/core}/types/Types.d.ts +0 -0
  244. /package/dist/{core → types/core}/types/enums.d.ts +0 -0
  245. /package/dist/{core → types/core}/types/modules.d.ts +0 -0
  246. /package/dist/{index.d.ts → types/index.d.ts} +0 -0
  247. /package/dist/{main.d.ts → types/main.d.ts} +0 -0
  248. /package/dist/{menu → types/menu}/GameMenu.d.ts +0 -0
  249. /package/dist/{menu → types/menu}/GameMenu.test.d.ts +0 -0
  250. /package/dist/{menu → types/menu}/GameMenuSingleton.d.ts +0 -0
  251. /package/dist/{menu → types/menu}/GameMenuSingleton.test.d.ts +0 -0
  252. /package/dist/{menu → types/menu}/GameRepository.d.ts +0 -0
  253. /package/dist/{menu → types/menu}/GameRepository.test.d.ts +0 -0
  254. /package/dist/{menu → types/menu}/manager/GameManager.d.ts +0 -0
  255. /package/dist/{menu → types/menu}/manager/GameManager.test.d.ts +0 -0
  256. /package/dist/types/{interfaces.d.ts → types/interfaces.d.ts} +0 -0
  257. /package/dist/{view → types/view}/Debugger.d.ts +0 -0
  258. /package/dist/{view → types/view}/Debugger.test.d.ts +0 -0
  259. /package/dist/{view → types/view}/GameView.d.ts +0 -0
  260. /package/dist/{view → types/view}/GameView.test.d.ts +0 -0
  261. /package/dist/{view → types/view}/SessionModal.d.ts +0 -0
  262. /package/dist/{view → types/view}/SessionModal.test.d.ts +0 -0
  263. /package/dist/{view → types/view}/components/layout/ButtonLayout.d.ts +0 -0
  264. /package/dist/{view → types/view}/components/layout/ButtonLayout.test.d.ts +0 -0
  265. /package/dist/{view → types/view}/components/layout/ContainerLayout.d.ts +0 -0
  266. /package/dist/{view → types/view}/components/layout/ContainerLayout.test.d.ts +0 -0
  267. /package/dist/{view → types/view}/components/layout/FrameLayout.d.ts +0 -0
  268. /package/dist/{view → types/view}/components/layout/FrameLayout.test.d.ts +0 -0
  269. /package/dist/{view → types/view}/components/ui/BigButton.d.ts +0 -0
  270. /package/dist/{view → types/view}/components/ui/BigButton.test.d.ts +0 -0
  271. /package/dist/{view → types/view}/components/ui/Button.d.ts +0 -0
  272. /package/dist/{view → types/view}/components/ui/Button.test.d.ts +0 -0
  273. /package/dist/{view → types/view}/components/ui/Canvas.d.ts +0 -0
  274. /package/dist/{view → types/view}/components/ui/Canvas.test.d.ts +0 -0
  275. /package/dist/{view → types/view}/components/ui/SmallButton.d.ts +0 -0
  276. /package/dist/{view → types/view}/components/ui/SmallButton.test.d.ts +0 -0
  277. /package/dist/{view → types/view}/theme/applyColors.d.ts +0 -0
  278. /package/dist/{view → types/view}/theme/applyColors.test.d.ts +0 -0
  279. /package/dist/{view → types/view}/theme/dimensions.d.ts +0 -0
  280. /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
- ----