brick-engine-js 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (477) hide show
  1. package/.env.local.example +2 -0
  2. package/.github/workflows/publish.yml +73 -0
  3. package/.prettierignore +2 -0
  4. package/.prettierrc.json +8 -0
  5. package/README.adoc +84 -0
  6. package/dist/8e23286c2fdf41fd795f.svg +32 -0
  7. package/dist/CNAME +1 -0
  8. package/dist/app.js +2 -0
  9. package/dist/app.js.map +1 -0
  10. package/dist/brick-engine.js +2 -0
  11. package/dist/brick-engine.js.map +1 -0
  12. package/dist/config/configs.d.ts +180 -0
  13. package/dist/config/configs.test.d.ts +1 -0
  14. package/dist/config/env.d.ts +2 -0
  15. package/dist/config/env.test.d.ts +1 -0
  16. package/dist/config/styles.d.ts +0 -0
  17. package/dist/core/Game.d.ts +107 -0
  18. package/dist/core/Game.test.d.ts +1 -0
  19. package/dist/core/InitialStateSnapshot.d.ts +19 -0
  20. package/dist/core/InitialStateSnapshot.test.d.ts +1 -0
  21. package/dist/core/helpers/CellHelper.d.ts +13 -0
  22. package/dist/core/helpers/CellHelper.test.d.ts +1 -0
  23. package/dist/core/helpers/ControlInputHandlerHelper.d.ts +32 -0
  24. package/dist/core/helpers/ControlInputHandlerHelper.test.d.ts +1 -0
  25. package/dist/core/helpers/CoordinateHelper.d.ts +54 -0
  26. package/dist/core/helpers/CoordinateHelper.test.d.ts +1 -0
  27. package/dist/core/helpers/InterfaceIdentifierHelper.d.ts +7 -0
  28. package/dist/core/helpers/InterfaceIdentifierHelper.test.d.ts +1 -0
  29. package/dist/core/helpers/RelativeValuesHelper.d.ts +23 -0
  30. package/dist/core/helpers/RelativeValuesHelper.test.d.ts +1 -0
  31. package/dist/core/module/control/GameControl.d.ts +62 -0
  32. package/dist/core/module/control/GameControl.test.d.ts +1 -0
  33. package/dist/core/module/control/GameControlKeyBinding.d.ts +36 -0
  34. package/dist/core/module/control/GameControlKeyBinding.test.d.ts +1 -0
  35. package/dist/core/module/grid/GameGrid.d.ts +399 -0
  36. package/dist/core/module/grid/GameGrid.test.d.ts +1 -0
  37. package/dist/core/module/grid/GameHudGrid.d.ts +24 -0
  38. package/dist/core/module/grid/GameHudGrid.test.d.ts +1 -0
  39. package/dist/core/module/grid/engines/GridAnalysisEngine.d.ts +29 -0
  40. package/dist/core/module/grid/engines/GridAnalysisEngine.test.d.ts +1 -0
  41. package/dist/core/module/grid/engines/GridLineEngine.d.ts +56 -0
  42. package/dist/core/module/grid/engines/GridLineEngine.test.d.ts +1 -0
  43. package/dist/core/module/grid/engines/GridMovementEngine.d.ts +29 -0
  44. package/dist/core/module/grid/engines/GridMovementEngine.test.d.ts +1 -0
  45. package/dist/core/module/grid/engines/GridRegionEngine.d.ts +26 -0
  46. package/dist/core/module/grid/engines/GridRegionEngine.test.d.ts +1 -0
  47. package/dist/core/module/grid/engines/GridTransformEngine.d.ts +24 -0
  48. package/dist/core/module/grid/engines/GridTransformEngine.test.d.ts +1 -0
  49. package/dist/core/module/renderer/DisplayRenderer.d.ts +51 -0
  50. package/dist/core/module/renderer/DisplayRenderer.test.d.ts +1 -0
  51. package/dist/core/module/renderer/GameRenderer.d.ts +59 -0
  52. package/dist/core/module/renderer/GameRenderer.test.d.ts +1 -0
  53. package/dist/core/module/renderer/HudRenderer.d.ts +56 -0
  54. package/dist/core/module/renderer/HudRenderer.test.d.ts +1 -0
  55. package/dist/core/module/score/GameScore.d.ts +117 -0
  56. package/dist/core/module/score/GameScore.test.d.ts +1 -0
  57. package/dist/core/module/session/GameSession.d.ts +20 -0
  58. package/dist/core/module/session/GameSession.test.d.ts +1 -0
  59. package/dist/core/module/sound/GameSound.d.ts +85 -0
  60. package/dist/core/module/sound/GameSound.test.d.ts +1 -0
  61. package/dist/core/module/state/GameState.d.ts +172 -0
  62. package/dist/core/module/state/GameState.test.d.ts +1 -0
  63. package/dist/core/module/text/GameText.d.ts +87 -0
  64. package/dist/core/module/text/GameText.test.d.ts +1 -0
  65. package/dist/core/module/time/GameTime.d.ts +76 -0
  66. package/dist/core/module/time/GameTime.test.d.ts +1 -0
  67. package/dist/core/types/Interfaces.d.ts +53 -0
  68. package/dist/core/types/Types.d.ts +114 -0
  69. package/dist/core/types/enums.d.ts +106 -0
  70. package/dist/core/types/modules.d.ts +723 -0
  71. package/dist/css/app.743066d8e4172b0e73f9.css +824 -0
  72. package/dist/css/app.743066d8e4172b0e73f9.css.map +1 -0
  73. package/dist/docs/GAME_DEVELOPER_GUIDE.html +727 -0
  74. package/dist/docs/brick-engine-guide.html +610 -0
  75. package/dist/docs/diagrams/lifecycle.mmd +19 -0
  76. package/dist/docs/documentation_style_guide.html +994 -0
  77. package/dist/docs/getting-started.html +648 -0
  78. package/dist/docs/images/lifecycle.svg +1 -0
  79. package/dist/docs/index.html +593 -0
  80. package/dist/docs/jsdoc_standard.html +656 -0
  81. package/dist/docs/publishing.html +573 -0
  82. package/dist/docs/reference/enums/Color.html +533 -0
  83. package/dist/docs/reference/enums/ControlEventType.html +505 -0
  84. package/dist/docs/reference/enums/ControlKey.html +529 -0
  85. package/dist/docs/reference/enums/FontAlignment.html +545 -0
  86. package/dist/docs/reference/enums/FontSize.html +517 -0
  87. package/dist/docs/reference/enums/Sound.html +558 -0
  88. package/dist/docs/reference/enums/StateProperty.html +525 -0
  89. package/dist/docs/reference/helpers/CellHelper.html +520 -0
  90. package/dist/docs/reference/helpers/ControlInputHandlerHelper.html +569 -0
  91. package/dist/docs/reference/helpers/CoordinateHelper.html +703 -0
  92. package/dist/docs/reference/helpers/RelativeValuesHelper.html +560 -0
  93. package/dist/docs/reference/interfaces/Debuggable.html +501 -0
  94. package/dist/docs/reference/interfaces/GameModules.html +544 -0
  95. package/dist/docs/reference/interfaces/Initializable.html +495 -0
  96. package/dist/docs/reference/interfaces/RendererInitializable.html +517 -0
  97. package/dist/docs/reference/interfaces/StateSyncable.html +542 -0
  98. package/dist/docs/reference/interfaces/modules/Control.html +648 -0
  99. package/dist/docs/reference/interfaces/modules/Grid.html +1256 -0
  100. package/dist/docs/reference/interfaces/modules/Renderer.html +522 -0
  101. package/dist/docs/reference/interfaces/modules/RendererComposite.html +577 -0
  102. package/dist/docs/reference/interfaces/modules/Score.html +669 -0
  103. package/dist/docs/reference/interfaces/modules/Session.html +585 -0
  104. package/dist/docs/reference/interfaces/modules/State.html +897 -0
  105. package/dist/docs/reference/interfaces/modules/Text.html +668 -0
  106. package/dist/docs/reference/interfaces/modules/Time.html +684 -0
  107. package/dist/docs/reference/modules/Debugger.html +579 -0
  108. package/dist/docs/reference/modules/DisplayRenderer.html +557 -0
  109. package/dist/docs/reference/modules/Game.html +909 -0
  110. package/dist/docs/reference/modules/GameControl.html +716 -0
  111. package/dist/docs/reference/modules/GameGrid.html +1910 -0
  112. package/dist/docs/reference/modules/GameHudGrid.html +508 -0
  113. package/dist/docs/reference/modules/GameMenu.html +538 -0
  114. package/dist/docs/reference/modules/GameRenderer.html +589 -0
  115. package/dist/docs/reference/modules/GameScore.html +664 -0
  116. package/dist/docs/reference/modules/GameSession.html +533 -0
  117. package/dist/docs/reference/modules/GameSound.html +636 -0
  118. package/dist/docs/reference/modules/GameState.html +922 -0
  119. package/dist/docs/reference/modules/GameText.html +701 -0
  120. package/dist/docs/reference/modules/GameTime.html +696 -0
  121. package/dist/docs/reference/modules/HudRenderer.html +568 -0
  122. package/dist/docs/reference/modules/InitialStateSnapshot.html +557 -0
  123. package/dist/docs/reference/modules/SessionModal.html +520 -0
  124. package/dist/docs/reference/types/Axis.html +505 -0
  125. package/dist/docs/reference/types/Cell.html +514 -0
  126. package/dist/docs/reference/types/ControlCallback.html +488 -0
  127. package/dist/docs/reference/types/Coordinate.html +510 -0
  128. package/dist/docs/reference/types/GameEntry.html +514 -0
  129. package/dist/docs/reference/types/GameEvent.html +514 -0
  130. package/dist/docs/reference/types/Piece.html +506 -0
  131. package/dist/docs/reference/types/RendererMetrics.html +514 -0
  132. package/dist/docs/reference/types/Vector.html +509 -0
  133. package/dist/docs/testing_best_practices.html +770 -0
  134. package/dist/favicon.ico +0 -0
  135. package/dist/fonts/digital-7.monoitalic.ttf +0 -0
  136. package/dist/images/cell.svg +32 -0
  137. package/dist/images/close.png +0 -0
  138. package/dist/images/games.png +0 -0
  139. package/dist/images/github.png +0 -0
  140. package/dist/images/letter-a.png +0 -0
  141. package/dist/images/letter-d.png +0 -0
  142. package/dist/images/letter-j.png +0 -0
  143. package/dist/images/letter-s.png +0 -0
  144. package/dist/images/letter-w.png +0 -0
  145. package/dist/images/meta-image.png +0 -0
  146. package/dist/images/number-1.png +0 -0
  147. package/dist/images/number-2.png +0 -0
  148. package/dist/images/number-3.png +0 -0
  149. package/dist/images/number-4.png +0 -0
  150. package/dist/images/number-5.png +0 -0
  151. package/dist/images/number-6.png +0 -0
  152. package/dist/images/splash.gif +0 -0
  153. package/dist/index.d.ts +8 -0
  154. package/dist/index.html +1 -0
  155. package/dist/index.test.d.ts +1 -0
  156. package/dist/main.d.ts +3 -0
  157. package/dist/main.test.d.ts +1 -0
  158. package/dist/menu/GameMenu.d.ts +15 -0
  159. package/dist/menu/GameMenu.test.d.ts +1 -0
  160. package/dist/menu/GameMenuSingleton.d.ts +6 -0
  161. package/dist/menu/GameMenuSingleton.test.d.ts +1 -0
  162. package/dist/menu/GameRepository.d.ts +7 -0
  163. package/dist/menu/GameRepository.test.d.ts +1 -0
  164. package/dist/menu/manager/GameManager.d.ts +6 -0
  165. package/dist/menu/manager/GameManager.test.d.ts +1 -0
  166. package/dist/sounds/sound_00.wav +0 -0
  167. package/dist/sounds/sound_01.wav +0 -0
  168. package/dist/sounds/sound_02.wav +0 -0
  169. package/dist/sounds/sound_03.wav +0 -0
  170. package/dist/sounds/sound_04.wav +0 -0
  171. package/dist/sounds/sound_05.wav +0 -0
  172. package/dist/sounds/sound_06.wav +0 -0
  173. package/dist/sounds/sound_07.wav +0 -0
  174. package/dist/sounds/sound_08.wav +0 -0
  175. package/dist/sounds/sound_09.wav +0 -0
  176. package/dist/sounds/sound_10.wav +0 -0
  177. package/dist/sounds/sound_11.wav +0 -0
  178. package/dist/sounds/sound_12.wav +0 -0
  179. package/dist/sounds/sound_13.wav +0 -0
  180. package/dist/sounds/sound_14.wav +0 -0
  181. package/dist/sounds/sound_15.wav +0 -0
  182. package/dist/types/interfaces.d.ts +5 -0
  183. package/dist/vendor/p5.min.js +1 -0
  184. package/dist/view/Debugger.d.ts +12 -0
  185. package/dist/view/Debugger.test.d.ts +1 -0
  186. package/dist/view/GameView.d.ts +101 -0
  187. package/dist/view/GameView.test.d.ts +1 -0
  188. package/dist/view/SessionModal.d.ts +12 -0
  189. package/dist/view/SessionModal.test.d.ts +4 -0
  190. package/dist/view/components/layout/ButtonLayout.d.ts +25 -0
  191. package/dist/view/components/layout/ButtonLayout.test.d.ts +1 -0
  192. package/dist/view/components/layout/ContainerLayout.d.ts +23 -0
  193. package/dist/view/components/layout/ContainerLayout.test.d.ts +1 -0
  194. package/dist/view/components/layout/FrameLayout.d.ts +11 -0
  195. package/dist/view/components/layout/FrameLayout.test.d.ts +1 -0
  196. package/dist/view/components/ui/BigButton.d.ts +13 -0
  197. package/dist/view/components/ui/BigButton.test.d.ts +1 -0
  198. package/dist/view/components/ui/Button.d.ts +12 -0
  199. package/dist/view/components/ui/Button.test.d.ts +1 -0
  200. package/dist/view/components/ui/Canvas.d.ts +22 -0
  201. package/dist/view/components/ui/Canvas.test.d.ts +1 -0
  202. package/dist/view/components/ui/SmallButton.d.ts +13 -0
  203. package/dist/view/components/ui/SmallButton.test.d.ts +1 -0
  204. package/dist/view/theme/applyColors.d.ts +10 -0
  205. package/dist/view/theme/applyColors.test.d.ts +1 -0
  206. package/dist/view/theme/dimensions.d.ts +13 -0
  207. package/dist/view/theme/dimensions.test.d.ts +1 -0
  208. package/docs/GAME_DEVELOPER_GUIDE.adoc +167 -0
  209. package/docs/brick-engine-guide.adoc +87 -0
  210. package/docs/diagrams/lifecycle.mmd +19 -0
  211. package/docs/documentation_style_guide.adoc +210 -0
  212. package/docs/getting-started.adoc +147 -0
  213. package/docs/images/lifecycle.svg +1 -0
  214. package/docs/jsdoc_standard.adoc +109 -0
  215. package/docs/publishing.adoc +58 -0
  216. package/docs/reference/enums/Color.adoc +35 -0
  217. package/docs/reference/enums/ControlEventType.adoc +28 -0
  218. package/docs/reference/enums/ControlKey.adoc +34 -0
  219. package/docs/reference/enums/FontAlignment.adoc +43 -0
  220. package/docs/reference/enums/FontSize.adoc +31 -0
  221. package/docs/reference/enums/Sound.adoc +42 -0
  222. package/docs/reference/enums/StateProperty.adoc +33 -0
  223. package/docs/reference/helpers/CellHelper.adoc +37 -0
  224. package/docs/reference/helpers/ControlInputHandlerHelper.adoc +57 -0
  225. package/docs/reference/helpers/CoordinateHelper.adoc +118 -0
  226. package/docs/reference/helpers/RelativeValuesHelper.adoc +53 -0
  227. package/docs/reference/interfaces/Debuggable.adoc +29 -0
  228. package/docs/reference/interfaces/GameModules.adoc +35 -0
  229. package/docs/reference/interfaces/Initializable.adoc +24 -0
  230. package/docs/reference/interfaces/RendererInitializable.adoc +33 -0
  231. package/docs/reference/interfaces/StateSyncable.adoc +41 -0
  232. package/docs/reference/interfaces/modules/Control.adoc +98 -0
  233. package/docs/reference/interfaces/modules/Grid.adoc +411 -0
  234. package/docs/reference/interfaces/modules/Renderer.adoc +34 -0
  235. package/docs/reference/interfaces/modules/RendererComposite.adoc +57 -0
  236. package/docs/reference/interfaces/modules/Score.adoc +107 -0
  237. package/docs/reference/interfaces/modules/Session.adoc +66 -0
  238. package/docs/reference/interfaces/modules/State.adoc +290 -0
  239. package/docs/reference/interfaces/modules/Text.adoc +110 -0
  240. package/docs/reference/interfaces/modules/Time.adoc +119 -0
  241. package/docs/reference/modules/Debugger.adoc +71 -0
  242. package/docs/reference/modules/DisplayRenderer.adoc +55 -0
  243. package/docs/reference/modules/Game.adoc +256 -0
  244. package/docs/reference/modules/GameControl.adoc +139 -0
  245. package/docs/reference/modules/GameGrid.adoc +794 -0
  246. package/docs/reference/modules/GameHudGrid.adoc +38 -0
  247. package/docs/reference/modules/GameMenu.adoc +39 -0
  248. package/docs/reference/modules/GameRenderer.adoc +79 -0
  249. package/docs/reference/modules/GameScore.adoc +138 -0
  250. package/docs/reference/modules/GameSession.adoc +43 -0
  251. package/docs/reference/modules/GameSound.adoc +111 -0
  252. package/docs/reference/modules/GameState.adoc +318 -0
  253. package/docs/reference/modules/GameText.adoc +139 -0
  254. package/docs/reference/modules/GameTime.adoc +141 -0
  255. package/docs/reference/modules/HudRenderer.adoc +56 -0
  256. package/docs/reference/modules/InitialStateSnapshot.adoc +47 -0
  257. package/docs/reference/modules/SessionModal.adoc +34 -0
  258. package/docs/reference/types/Axis.adoc +28 -0
  259. package/docs/reference/types/Cell.adoc +29 -0
  260. package/docs/reference/types/ControlCallback.adoc +23 -0
  261. package/docs/reference/types/Coordinate.adoc +29 -0
  262. package/docs/reference/types/GameEntry.adoc +29 -0
  263. package/docs/reference/types/GameEvent.adoc +29 -0
  264. package/docs/reference/types/Piece.adoc +32 -0
  265. package/docs/reference/types/RendererMetrics.adoc +29 -0
  266. package/docs/reference/types/Vector.adoc +28 -0
  267. package/docs/testing_best_practices.adoc +190 -0
  268. package/eslint.config.mjs +29 -0
  269. package/package.json +54 -0
  270. package/public/CNAME +1 -0
  271. package/public/docs/GAME_DEVELOPER_GUIDE.html +727 -0
  272. package/public/docs/brick-engine-guide.html +610 -0
  273. package/public/docs/diagrams/lifecycle.mmd +19 -0
  274. package/public/docs/documentation_style_guide.html +994 -0
  275. package/public/docs/getting-started.html +648 -0
  276. package/public/docs/images/lifecycle.svg +1 -0
  277. package/public/docs/index.html +593 -0
  278. package/public/docs/jsdoc_standard.html +656 -0
  279. package/public/docs/publishing.html +573 -0
  280. package/public/docs/reference/enums/Color.html +533 -0
  281. package/public/docs/reference/enums/ControlEventType.html +505 -0
  282. package/public/docs/reference/enums/ControlKey.html +529 -0
  283. package/public/docs/reference/enums/FontAlignment.html +545 -0
  284. package/public/docs/reference/enums/FontSize.html +517 -0
  285. package/public/docs/reference/enums/Sound.html +558 -0
  286. package/public/docs/reference/enums/StateProperty.html +525 -0
  287. package/public/docs/reference/helpers/CellHelper.html +520 -0
  288. package/public/docs/reference/helpers/ControlInputHandlerHelper.html +569 -0
  289. package/public/docs/reference/helpers/CoordinateHelper.html +703 -0
  290. package/public/docs/reference/helpers/RelativeValuesHelper.html +560 -0
  291. package/public/docs/reference/interfaces/Debuggable.html +501 -0
  292. package/public/docs/reference/interfaces/GameModules.html +544 -0
  293. package/public/docs/reference/interfaces/Initializable.html +495 -0
  294. package/public/docs/reference/interfaces/RendererInitializable.html +517 -0
  295. package/public/docs/reference/interfaces/StateSyncable.html +542 -0
  296. package/public/docs/reference/interfaces/modules/Control.html +648 -0
  297. package/public/docs/reference/interfaces/modules/Grid.html +1256 -0
  298. package/public/docs/reference/interfaces/modules/Renderer.html +522 -0
  299. package/public/docs/reference/interfaces/modules/RendererComposite.html +577 -0
  300. package/public/docs/reference/interfaces/modules/Score.html +669 -0
  301. package/public/docs/reference/interfaces/modules/Session.html +585 -0
  302. package/public/docs/reference/interfaces/modules/State.html +897 -0
  303. package/public/docs/reference/interfaces/modules/Text.html +668 -0
  304. package/public/docs/reference/interfaces/modules/Time.html +684 -0
  305. package/public/docs/reference/modules/Debugger.html +579 -0
  306. package/public/docs/reference/modules/DisplayRenderer.html +557 -0
  307. package/public/docs/reference/modules/Game.html +909 -0
  308. package/public/docs/reference/modules/GameControl.html +716 -0
  309. package/public/docs/reference/modules/GameGrid.html +1910 -0
  310. package/public/docs/reference/modules/GameHudGrid.html +508 -0
  311. package/public/docs/reference/modules/GameMenu.html +538 -0
  312. package/public/docs/reference/modules/GameRenderer.html +589 -0
  313. package/public/docs/reference/modules/GameScore.html +664 -0
  314. package/public/docs/reference/modules/GameSession.html +533 -0
  315. package/public/docs/reference/modules/GameSound.html +636 -0
  316. package/public/docs/reference/modules/GameState.html +922 -0
  317. package/public/docs/reference/modules/GameText.html +701 -0
  318. package/public/docs/reference/modules/GameTime.html +696 -0
  319. package/public/docs/reference/modules/HudRenderer.html +568 -0
  320. package/public/docs/reference/modules/InitialStateSnapshot.html +557 -0
  321. package/public/docs/reference/modules/SessionModal.html +520 -0
  322. package/public/docs/reference/types/Axis.html +505 -0
  323. package/public/docs/reference/types/Cell.html +514 -0
  324. package/public/docs/reference/types/ControlCallback.html +488 -0
  325. package/public/docs/reference/types/Coordinate.html +510 -0
  326. package/public/docs/reference/types/GameEntry.html +514 -0
  327. package/public/docs/reference/types/GameEvent.html +514 -0
  328. package/public/docs/reference/types/Piece.html +506 -0
  329. package/public/docs/reference/types/RendererMetrics.html +514 -0
  330. package/public/docs/reference/types/Vector.html +509 -0
  331. package/public/docs/testing_best_practices.html +770 -0
  332. package/public/favicon.ico +0 -0
  333. package/public/fonts/digital-7.monoitalic.ttf +0 -0
  334. package/public/images/cell.svg +32 -0
  335. package/public/images/close.png +0 -0
  336. package/public/images/games.png +0 -0
  337. package/public/images/github.png +0 -0
  338. package/public/images/letter-a.png +0 -0
  339. package/public/images/letter-d.png +0 -0
  340. package/public/images/letter-j.png +0 -0
  341. package/public/images/letter-s.png +0 -0
  342. package/public/images/letter-w.png +0 -0
  343. package/public/images/meta-image.png +0 -0
  344. package/public/images/number-1.png +0 -0
  345. package/public/images/number-2.png +0 -0
  346. package/public/images/number-3.png +0 -0
  347. package/public/images/number-4.png +0 -0
  348. package/public/images/number-5.png +0 -0
  349. package/public/images/number-6.png +0 -0
  350. package/public/images/splash.gif +0 -0
  351. package/public/index.html +15 -0
  352. package/public/sounds/sound_00.wav +0 -0
  353. package/public/sounds/sound_01.wav +0 -0
  354. package/public/sounds/sound_02.wav +0 -0
  355. package/public/sounds/sound_03.wav +0 -0
  356. package/public/sounds/sound_04.wav +0 -0
  357. package/public/sounds/sound_05.wav +0 -0
  358. package/public/sounds/sound_06.wav +0 -0
  359. package/public/sounds/sound_07.wav +0 -0
  360. package/public/sounds/sound_08.wav +0 -0
  361. package/public/sounds/sound_09.wav +0 -0
  362. package/public/sounds/sound_10.wav +0 -0
  363. package/public/sounds/sound_11.wav +0 -0
  364. package/public/sounds/sound_12.wav +0 -0
  365. package/public/sounds/sound_13.wav +0 -0
  366. package/public/sounds/sound_14.wav +0 -0
  367. package/public/sounds/sound_15.wav +0 -0
  368. package/public/style/body.css +86 -0
  369. package/public/style/buttons.css +233 -0
  370. package/public/style/debugger.css +117 -0
  371. package/public/style/sessionModal.css +155 -0
  372. package/public/style/sourceCodeAndCommands.css +74 -0
  373. package/public/style/splash.css +13 -0
  374. package/public/style/theme.css +137 -0
  375. package/scripts/generate-diagrams.sh +20 -0
  376. package/scripts/generate-docs.js +111 -0
  377. package/src/client-game.d.ts +1 -0
  378. package/src/config/configs.test.ts +20 -0
  379. package/src/config/configs.ts +197 -0
  380. package/src/config/env.test.ts +59 -0
  381. package/src/config/env.ts +7 -0
  382. package/src/config/styles.ts +5 -0
  383. package/src/core/Game.test.ts +167 -0
  384. package/src/core/Game.ts +307 -0
  385. package/src/core/InitialStateSnapshot.test.ts +51 -0
  386. package/src/core/InitialStateSnapshot.ts +46 -0
  387. package/src/core/helpers/CellHelper.test.ts +33 -0
  388. package/src/core/helpers/CellHelper.ts +21 -0
  389. package/src/core/helpers/ControlInputHandlerHelper.test.ts +116 -0
  390. package/src/core/helpers/ControlInputHandlerHelper.ts +68 -0
  391. package/src/core/helpers/CoordinateHelper.test.ts +113 -0
  392. package/src/core/helpers/CoordinateHelper.ts +82 -0
  393. package/src/core/helpers/InterfaceIdentifierHelper.test.ts +122 -0
  394. package/src/core/helpers/InterfaceIdentifierHelper.ts +43 -0
  395. package/src/core/helpers/RelativeValuesHelper.test.ts +47 -0
  396. package/src/core/helpers/RelativeValuesHelper.ts +29 -0
  397. package/src/core/module/control/GameControl.test.ts +82 -0
  398. package/src/core/module/control/GameControl.ts +142 -0
  399. package/src/core/module/control/GameControlKeyBinding.test.ts +59 -0
  400. package/src/core/module/control/GameControlKeyBinding.ts +92 -0
  401. package/src/core/module/grid/GameGrid.test.ts +83 -0
  402. package/src/core/module/grid/GameGrid.ts +610 -0
  403. package/src/core/module/grid/GameHudGrid.test.ts +22 -0
  404. package/src/core/module/grid/GameHudGrid.ts +40 -0
  405. package/src/core/module/grid/engines/GridAnalysisEngine.test.ts +157 -0
  406. package/src/core/module/grid/engines/GridAnalysisEngine.ts +124 -0
  407. package/src/core/module/grid/engines/GridLineEngine.test.ts +132 -0
  408. package/src/core/module/grid/engines/GridLineEngine.ts +165 -0
  409. package/src/core/module/grid/engines/GridMovementEngine.test.ts +125 -0
  410. package/src/core/module/grid/engines/GridMovementEngine.ts +113 -0
  411. package/src/core/module/grid/engines/GridRegionEngine.test.ts +136 -0
  412. package/src/core/module/grid/engines/GridRegionEngine.ts +52 -0
  413. package/src/core/module/grid/engines/GridTransformEngine.test.ts +98 -0
  414. package/src/core/module/grid/engines/GridTransformEngine.ts +70 -0
  415. package/src/core/module/renderer/DisplayRenderer.test.ts +86 -0
  416. package/src/core/module/renderer/DisplayRenderer.ts +152 -0
  417. package/src/core/module/renderer/GameRenderer.test.ts +103 -0
  418. package/src/core/module/renderer/GameRenderer.ts +144 -0
  419. package/src/core/module/renderer/HudRenderer.test.ts +108 -0
  420. package/src/core/module/renderer/HudRenderer.ts +203 -0
  421. package/src/core/module/score/GameScore.test.ts +71 -0
  422. package/src/core/module/score/GameScore.ts +188 -0
  423. package/src/core/module/session/GameSession.test.ts +176 -0
  424. package/src/core/module/session/GameSession.ts +103 -0
  425. package/src/core/module/sound/GameSound.test.ts +117 -0
  426. package/src/core/module/sound/GameSound.ts +229 -0
  427. package/src/core/module/state/GameState.test.ts +101 -0
  428. package/src/core/module/state/GameState.ts +339 -0
  429. package/src/core/module/text/GameText.test.ts +87 -0
  430. package/src/core/module/text/GameText.ts +150 -0
  431. package/src/core/module/time/GameTime.test.ts +86 -0
  432. package/src/core/module/time/GameTime.ts +144 -0
  433. package/src/core/types/Interfaces.ts +59 -0
  434. package/src/core/types/Types.ts +124 -0
  435. package/src/core/types/enums.ts +113 -0
  436. package/src/core/types/modules.ts +841 -0
  437. package/src/index.test.ts +15 -0
  438. package/src/index.ts +9 -0
  439. package/src/main.test.ts +137 -0
  440. package/src/main.ts +77 -0
  441. package/src/menu/GameMenu.test.ts +157 -0
  442. package/src/menu/GameMenu.ts +124 -0
  443. package/src/menu/GameMenuSingleton.test.ts +26 -0
  444. package/src/menu/GameMenuSingleton.ts +13 -0
  445. package/src/menu/GameRepository.test.ts +46 -0
  446. package/src/menu/GameRepository.ts +47 -0
  447. package/src/menu/manager/GameManager.test.ts +68 -0
  448. package/src/menu/manager/GameManager.ts +50 -0
  449. package/src/types/global.d.ts +8 -0
  450. package/src/types/interfaces.ts +5 -0
  451. package/src/view/Debugger.test.ts +152 -0
  452. package/src/view/Debugger.ts +124 -0
  453. package/src/view/GameView.test.ts +95 -0
  454. package/src/view/GameView.ts +244 -0
  455. package/src/view/SessionModal.test.ts +141 -0
  456. package/src/view/SessionModal.ts +73 -0
  457. package/src/view/components/layout/ButtonLayout.test.ts +28 -0
  458. package/src/view/components/layout/ButtonLayout.ts +63 -0
  459. package/src/view/components/layout/ContainerLayout.test.ts +48 -0
  460. package/src/view/components/layout/ContainerLayout.ts +50 -0
  461. package/src/view/components/layout/FrameLayout.test.ts +24 -0
  462. package/src/view/components/layout/FrameLayout.ts +25 -0
  463. package/src/view/components/ui/BigButton.test.ts +28 -0
  464. package/src/view/components/ui/BigButton.ts +31 -0
  465. package/src/view/components/ui/Button.test.ts +30 -0
  466. package/src/view/components/ui/Button.ts +30 -0
  467. package/src/view/components/ui/Canvas.test.ts +32 -0
  468. package/src/view/components/ui/Canvas.ts +34 -0
  469. package/src/view/components/ui/SmallButton.test.ts +48 -0
  470. package/src/view/components/ui/SmallButton.ts +32 -0
  471. package/src/view/theme/applyColors.test.ts +47 -0
  472. package/src/view/theme/applyColors.ts +38 -0
  473. package/src/view/theme/dimensions.test.ts +34 -0
  474. package/src/view/theme/dimensions.ts +53 -0
  475. package/tsconfig.json +16 -0
  476. package/vitest.config.ts +14 -0
  477. package/webpack.config.js +133 -0
@@ -0,0 +1,12 @@
1
+ import p5 from 'p5';
2
+ import { Initializable } from '../core/types/Interfaces';
3
+ import { GameModules } from '../core/types/Types';
4
+ export default class NewDebugger implements Initializable {
5
+ private _p;
6
+ private _gameModules;
7
+ private _moduleElements;
8
+ constructor(gameModules: GameModules, p: p5);
9
+ setup(): void;
10
+ setGameModules(gameModules: GameModules): void;
11
+ update(): void;
12
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,101 @@
1
+ import p5 from 'p5';
2
+ import { Control } from '../core/types/modules';
3
+ import { GameModules } from '../core/types/Types';
4
+ /**
5
+ * Responsible for rendering the game body and handling control events.
6
+ *
7
+ * This class acts as the main view controller, orchestrating the layout,
8
+ * styles, and user interaction (clicks and holds) for the game.
9
+ *
10
+ * @class
11
+ */
12
+ export default class GameView {
13
+ private _onOffBtn;
14
+ private _startPauseBtn;
15
+ private _soundBtn;
16
+ private _resetBtn;
17
+ private _exitBtn;
18
+ private _enableColorBtn;
19
+ private _upBtn;
20
+ private _downBtn;
21
+ private _rightBtn;
22
+ private _leftBtn;
23
+ private _actionBtn;
24
+ private _parent;
25
+ private _p;
26
+ private _inputHandler;
27
+ private _cachedCanvas;
28
+ private _debugger;
29
+ private _sessionModal;
30
+ /**
31
+ * Creates an instance of GameView.
32
+ *
33
+ * @param p - The p5 instance used for rendering and event handling.
34
+ * @param parent - The DOM element where the game view will be attached.
35
+ */
36
+ constructor(p: p5, parent: HTMLElement);
37
+ /**
38
+ * Checks if the game body has been built.
39
+ * @returns True if the game body has been built, false otherwise.
40
+ */
41
+ isBodyBuilt(): boolean;
42
+ /**
43
+ * Builds the visual structure of the game.
44
+ *
45
+ * It initializes themes, layouts (frames, containers, buttons), and calculates responsive dimensions.
46
+ *
47
+ * @returns An object containing the canvas element and its explicit dimensions.
48
+ * - canvas: The p5 element for the canvas.
49
+ * - canvasWidth: The calculated width of the canvas.
50
+ * - canvasHeight: The calculated height of the canvas.
51
+ */
52
+ build(): {
53
+ canvas: p5.Element;
54
+ canvasWidth: number;
55
+ canvasHeight: number;
56
+ };
57
+ /**
58
+ * Sets up the session modal with the current game modules.
59
+ * @param gameModules - The game modules to be used in the session modal.
60
+ */
61
+ setupSessionModal(): void;
62
+ showSessionModal(onConfirm: () => void, onCancel: () => void): void;
63
+ /**
64
+ * Sets up the debugger with the current game modules.
65
+ * @param gameModules - The game modules to be debugged.
66
+ */
67
+ setupDebugger(gameModules: GameModules): void;
68
+ updateDebuggerGameModules(gameModules: GameModules): void;
69
+ /**
70
+ * Updates the debugger with the current game state.
71
+ */
72
+ updateDebugger(): void;
73
+ /**
74
+ * Binds game control events to the view buttons.
75
+ *
76
+ * Connects click and hold events from the UI buttons to the game logic controllers.
77
+ *
78
+ * @param control - The control module instance.
79
+ */
80
+ bindControls(control: Control): void;
81
+ /**
82
+ * Unbinds all events from the view buttons.
83
+ *
84
+ * Replaces all event listeners with empty functions to prevent interaction
85
+ * (e.g., when the game is paused or stopped).
86
+ */
87
+ unbindControls(): void;
88
+ /**
89
+ * Helper method to bind press and release events using ControlInputHandler.
90
+ *
91
+ * @param btn - The p5 button element to bind.
92
+ * @param key - The control key to notify.
93
+ */
94
+ private _bindButtonEvents;
95
+ /**
96
+ * Helper method to hide the splash screen after a delay.
97
+ *
98
+ * @param delay - The delay in milliseconds (defaults to `configs.viewLayout.splashHideDelayMs`).
99
+ */
100
+ private _hideSplash;
101
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,12 @@
1
+ import { Initializable } from '../core/types/Interfaces';
2
+ import p5 from 'p5';
3
+ export default class SessionModal implements Initializable {
4
+ private _p;
5
+ private _container;
6
+ private _confirmButton;
7
+ private _cancelButton;
8
+ constructor(p: p5);
9
+ setup(): void;
10
+ show(onConfirm: () => void, onCancel: () => void): void;
11
+ private _hide;
12
+ }
@@ -0,0 +1,4 @@
1
+ /**
2
+ * @vitest-environment jsdom
3
+ */
4
+ export {};
@@ -0,0 +1,25 @@
1
+ import p5 from 'p5';
2
+ interface ButtonLayoutResponse {
3
+ smallButtonContainer: p5.Element;
4
+ mediumButtonContainer: p5.Element;
5
+ largeButtonContainer: p5.Element;
6
+ directionVerticalContainer: p5.Element;
7
+ directionHorizontalContainer: p5.Element;
8
+ }
9
+ /**
10
+ * Creates and organizes the layout containers for game control buttons.
11
+ *
12
+ * It constructs a hierarchy of div elements to separate small system buttons,
13
+ * inner group buttons, and directional pads.
14
+ *
15
+ * @param {p5} p - The p5 instance.
16
+ * @param {p5.Element} container - The parent container element.
17
+ * @returns {ButtonLayoutResponse} Object containing the button containers.
18
+ * - smallButtonContainer: For system buttons (Reset, Sound, etc.), uses `configs.selectors.viewElementIds.smallButtonContainer`.
19
+ * - mediumButtonContainer: For direction controls, uses `configs.selectors.viewElementIds.mediumButtonContainer`.
20
+ * - largeButtonContainer: For the main action button, uses `configs.selectors.viewElementIds.largeButtonContainer`.
21
+ * - directionVerticalContainer: For Up/Down buttons.
22
+ * - directionHorizontalContainer: For Left/Right buttons.
23
+ */
24
+ export default function ButtonLayout(p: p5, container: p5.Element): ButtonLayoutResponse;
25
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,23 @@
1
+ import p5 from 'p5';
2
+ /**
3
+ * Response object containing container dimensions and element reference.
4
+ */
5
+ interface ContainerResponse {
6
+ width: number;
7
+ height: number;
8
+ container: p5.Element;
9
+ }
10
+ /**
11
+ * Creates the main game container and calculates its optimal dimensions.
12
+ *
13
+ * It ensures the game container fits within the parent element (usually the window or a specific div)
14
+ * while maintaining a fixed aspect ratio defined by `configs.viewLayout.bodyHeightWidthMultiplier`.
15
+ * On smaller screens (<= configs.viewLayout.mobileBreakpoint width), it attempts to fill the parent width.
16
+ * On larger screens, it calculates the maximum dimensions that fit without overflowing vertically.
17
+ *
18
+ * @param {p5} p - The p5 instance.
19
+ * @param {HTMLElement} parent - The DOM element where the container will be appended.
20
+ * @returns {ContainerResponse} Object containing the container element and its calculated width/height.
21
+ */
22
+ export default function ContainerLayout(p: p5, parent: HTMLElement): ContainerResponse;
23
+ export {};
@@ -0,0 +1,11 @@
1
+ import p5 from 'p5';
2
+ /**
3
+ * Creates the decorative frame for the game.
4
+ *
5
+ * Adds a visual frame around the game area and includes the branding text "Brick Game".
6
+ *
7
+ * @param p - The p5 instance.
8
+ * @param container - The parent container element.
9
+ * @returns The created frame element.
10
+ */
11
+ export default function FrameLayout(p: p5, container: p5.Element): p5.Element;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,13 @@
1
+ import p5 from 'p5';
2
+ /**
3
+ * Creates the large action button.
4
+ *
5
+ * This button is typically used for the primary game action (e.g., rotate, fire).
6
+ * It creates a specific container and applies large button styles.
7
+ *
8
+ * @param p - The p5 instance.
9
+ * @param container - The container element to attach the button to.
10
+ * @param label - The text label for the button (currently used for aria-label or internal logic as visual label is commented out).
11
+ * @returns The created button element.
12
+ */
13
+ export default function BigButton(p: p5, container: p5.Element, label: string): p5.Element;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,12 @@
1
+ import p5 from 'p5';
2
+ /**
3
+ * Creates a standard directional button.
4
+ *
5
+ * These buttons are used for the D-pad controls (Up, Down, Left, Right).
6
+ *
7
+ * @param p - The p5 instance.
8
+ * @param container - The container element to attach the button to.
9
+ * @param label - The text label for the button.
10
+ * @returns The created button element.
11
+ */
12
+ export default function Button(p: p5, container: p5.Element, label: string): p5.Element;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,22 @@
1
+ import p5 from 'p5';
2
+ /**
3
+ * Response object containing canvas dimensions and element reference.
4
+ */
5
+ interface CanvasResponse {
6
+ canvasWidth: number;
7
+ canvasHeight: number;
8
+ canvas: p5.Element;
9
+ }
10
+ /**
11
+ * Creates the main p5 canvas for rendering the game.
12
+ *
13
+ * It calculates the canvas size based on the provided container width, maintaining a specific aspect ratio
14
+ * defined by `configs.viewLayout.canvas.aspectRatio`.
15
+ *
16
+ * @param {p5} p - The p5 instance.
17
+ * @param {p5.Element} container - The frame container to attach the canvas to.
18
+ * @param {number} width - The width of the outer container, used to calculate canvas dimensions with `configs.viewLayout.canvas.widthRatio`.
19
+ * @returns {CanvasResponse} Object containing the canvas element and its calculated dimensions.
20
+ */
21
+ export default function Canvas(p: p5, container: p5.Element, width: number): CanvasResponse;
22
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,13 @@
1
+ import p5 from 'p5';
2
+ /**
3
+ * Creates a small system button (e.g., Reset, Sound).
4
+ *
5
+ * These buttons have a distinct style and include a visible paragraph label next to them.
6
+ *
7
+ * @param {p5} p - The p5 instance.
8
+ * @param {p5.Element} container - The container element to attach the button to.
9
+ * @param {string} label - The visible text label displayed near the button.
10
+ * @param {boolean} top - Determines position/styling nuance (e.g. if it belongs to the top row of small buttons).
11
+ * @returns {p5.Element} The created button element.
12
+ */
13
+ export default function SmallButton(p: p5, container: p5.Element, label: string, top: boolean): p5.Element;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Applies color themes to the application by setting CSS variables.
3
+ *
4
+ * It checks for `configs.inputQueryParams.mainColor` and `configs.inputQueryParams.buttonColor` query parameters in the URL.
5
+ * If present, these values are used; otherwise, default `configs.colors` are applied.
6
+ * It also calculates and sets shadow and reflection variations for these colors.
7
+ *
8
+ * @returns {void}
9
+ */
10
+ export default function applyColors(): void;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Calculates and sets various CSS variables for responsive sizing of the game UI.
3
+ *
4
+ * This function defines sizes for the main container, canvas, borders, buttons (including mobile variations),
5
+ * and fonts based on the provided dimensions.
6
+ *
7
+ * @param width - The width of the game container.
8
+ * @param height - The height of the game container.
9
+ * @param canvasWidth - The width of the game canvas.
10
+ * @param canvasHeight - The height of the game canvas.
11
+ * @returns
12
+ */
13
+ export default function dimensions(width: number, height: number, canvasWidth: number, canvasHeight: number): void;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,167 @@
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!
@@ -0,0 +1,87 @@
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
+ |===
@@ -0,0 +1,19 @@
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