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,399 @@
1
+ import { Color } from '../../types/enums';
2
+ import { Cell, Coordinate, Vector, Piece, Axis } from '../../types/Types';
3
+ import { Debuggable } from '../../types/Interfaces';
4
+ import { Grid } from '../../types/modules';
5
+ import { Serializable } from '../../types/Interfaces';
6
+ /**
7
+ * Manages the game's logical grid state and operations.
8
+ *
9
+ * Provides a robust API for cell manipulation, row/column management,
10
+ * collision detection, and mass grid modifications.
11
+ */
12
+ export default class GameGrid implements Grid, Debuggable, Serializable {
13
+ /**
14
+ * The internal 2D array representing the game grid [y][x].
15
+ */
16
+ protected _grid: Cell[][];
17
+ private _movementEngine;
18
+ private _transformEngine;
19
+ private _analysisEngine;
20
+ private _lineEngine;
21
+ private _regionEngine;
22
+ serialId: string;
23
+ constructor();
24
+ /**
25
+ * Gets the current grid state as a 2D array of cells.
26
+ *
27
+ * @returns {Cell[][]} The underlying grid data.
28
+ */
29
+ getGrid(): Cell[][];
30
+ /**
31
+ * Gets the number of columns in the grid.
32
+ *
33
+ * @returns {number} The grid width.
34
+ */
35
+ get width(): number;
36
+ /**
37
+ * Gets the number of rows in the grid.
38
+ *
39
+ * @returns {number} The grid height.
40
+ */
41
+ get height(): number;
42
+ /**
43
+ * Initializes the grid by resetting its content to an empty state.
44
+ *
45
+ * @returns {void}
46
+ */
47
+ setup(): void;
48
+ /**
49
+ * Resets the entire grid state based on the dimensions defined in the configuration.
50
+ *
51
+ * Populates the grid with empty cells using {@link CellHelper.emptyCell}.
52
+ *
53
+ * @returns {void}
54
+ */
55
+ resetGrid(): void;
56
+ /**
57
+ * Iterates over every cell in the grid and executes a callback.
58
+ *
59
+ * @param {function(Cell): void} callback - The function to execute for each cell.
60
+ * @returns {void}
61
+ */
62
+ forEach(callback: (cell: Cell) => void): void;
63
+ /**
64
+ * Verifies if a given coordinate is within the grid boundaries.
65
+ *
66
+ * @param {Coordinate} coordinate - The coordinate to validate.
67
+ * @returns {boolean} True if the coordinate is valid, false otherwise.
68
+ */
69
+ isValidCoordinate(coordinate: Coordinate): boolean;
70
+ /**
71
+ * Retrieves a cell at a specific coordinate.
72
+ *
73
+ * @param {Coordinate} coordinate - The coordinate of the cell.
74
+ * @returns {Cell | null} The cell object, or null if out of bounds.
75
+ */
76
+ getCell(coordinate: Coordinate): Cell | null;
77
+ /**
78
+ * Updates the status value of a cell at a specific coordinate.
79
+ *
80
+ * @param {Coordinate} coordinate - The target coordinate.
81
+ * @param {number} value - The new value (e.g., 0 for inactive, >0 for active).
82
+ * @returns {void}
83
+ */
84
+ setCellValue(coordinate: Coordinate, value: number): void;
85
+ /**
86
+ * Updates the color of a cell at a specific coordinate.
87
+ *
88
+ * @param {Coordinate} coordinate - The target coordinate.
89
+ * @param {Color} color - The new color enum value.
90
+ * @returns {void}
91
+ */
92
+ setCellColor(coordinate: Coordinate, color: Color): void;
93
+ /**
94
+ * Checks if a cell at a specific coordinate is active (value > 0).
95
+ *
96
+ * @param {Coordinate} coordinate - The coordinate to check.
97
+ * @returns {boolean} True if active, false otherwise.
98
+ */
99
+ isCellActive(coordinate: Coordinate): boolean;
100
+ /**
101
+ * Checks if a cell at a specific coordinate is inactive (value === 0).
102
+ *
103
+ * @param {Coordinate} coordinate - The coordinate to check.
104
+ * @returns {boolean} True if inactive, false otherwise.
105
+ */
106
+ isCellInactive(coordinate: Coordinate): boolean;
107
+ /**
108
+ * Checks if every cell in a specific row is active.
109
+ *
110
+ * @param {number} y - The row index.
111
+ * @returns {boolean} True if the row is completely full.
112
+ */
113
+ isRowFull(y: number): boolean;
114
+ /**
115
+ * Checks if every cell in a specific row is inactive.
116
+ *
117
+ * @param {number} y - The row index.
118
+ * @returns {boolean} True if the row is completely empty.
119
+ */
120
+ isRowEmpty(y: number): boolean;
121
+ /**
122
+ * Resets all cells in a specific row to their default empty state.
123
+ *
124
+ * @param {number} y - The row index to clear.
125
+ * @returns {void}
126
+ */
127
+ clearRow(y: number): void;
128
+ /**
129
+ * Shifts all rows above a certain index down by one position.
130
+ *
131
+ * Clears the top-most row after shifting.
132
+ *
133
+ * @param {number} fromY - The starting row index for the shift down.
134
+ * @returns {void}
135
+ */
136
+ shiftRowsDown(fromY: number): void;
137
+ /**
138
+ * Shifts all rows below a certain index up by one position.
139
+ *
140
+ * Clears the bottom-most row after shifting.
141
+ *
142
+ * @param {number} fromY - The starting row index for the shift up.
143
+ * @returns {void}
144
+ */
145
+ shiftRowsUp(fromY: number): void;
146
+ /**
147
+ * Scans the grid for full rows, clears them, and shifts remaining rows down.
148
+ *
149
+ * Re-checks the same index after a shift to handle consecutive full rows.
150
+ *
151
+ * @returns {number} The total number of rows cleared during the operation.
152
+ */
153
+ clearFullRows(): number;
154
+ /**
155
+ * Checks if every cell in a specific column is active.
156
+ *
157
+ * @param {number} x - The column index.
158
+ * @returns {boolean} True if the column is completely full.
159
+ */
160
+ isColumnFull(x: number): boolean;
161
+ /**
162
+ * Checks if every cell in a specific column is inactive.
163
+ *
164
+ * @param {number} x - The column index.
165
+ * @returns {boolean} True if the column is completely empty.
166
+ */
167
+ isColumnEmpty(x: number): boolean;
168
+ /**
169
+ * Resets all cells in a specific column to their default empty state.
170
+ *
171
+ * @param {number} x - The column index to clear.
172
+ * @returns {void}
173
+ */
174
+ clearColumn(x: number): void;
175
+ /**
176
+ * Shifts all columns to the left of a certain index one position to the right.
177
+ *
178
+ * Clears the left-most column (index 0) after shifting.
179
+ *
180
+ * @param {number} fromX - The starting column index for the shift right.
181
+ * @returns {void}
182
+ */
183
+ shiftColumnsRight(fromX: number): void;
184
+ /**
185
+ * Shifts all columns to the right of a certain index one position to the left.
186
+ *
187
+ * Clears the right-most column after shifting.
188
+ *
189
+ * @param {number} fromX - The starting column index for the shift left.
190
+ * @returns {void}
191
+ */
192
+ shiftColumnsLeft(fromX: number): void;
193
+ /**
194
+ * Scans the grid for full columns, clears them, and shifts remaining columns right.
195
+ *
196
+ * @returns {number} The total number of columns cleared during the operation.
197
+ */
198
+ clearFullColumns(): number;
199
+ /**
200
+ * Checks if any of the provided coordinates are already occupied (active) or out of bounds.
201
+ *
202
+ * @param {Coordinate[]} coordinates - An array of coordinates to check.
203
+ * @returns {boolean} True if the area is occupied or invalid, false if completely clear.
204
+ */
205
+ isAreaOccupied(coordinates: Coordinate[]): boolean;
206
+ /**
207
+ * Fills a rectangular region defined by two corners with a specific value and color.
208
+ *
209
+ * Automatically handles bounds and coordinate order.
210
+ *
211
+ * @param {Coordinate} start - One corner of the rectangle.
212
+ * @param {Coordinate} end - The opposite corner of the rectangle.
213
+ * @param {number} value - The cell status value to apply.
214
+ * @param {Color} color - The color to apply.
215
+ * @returns {void}
216
+ */
217
+ fillArea(start: Coordinate, end: Coordinate, value: number, color: Color): void;
218
+ /**
219
+ * Updates multiple coordinates simultaneously with their specific values and colors.
220
+ *
221
+ * Effectively "stamps" a piece's shape onto the static grid.
222
+ *
223
+ * @param {Piece} piece - The collection of cells to stamp.
224
+ * @returns {void}
225
+ */
226
+ stampPiece(piece: Piece): void;
227
+ /**
228
+ * Updates a single coordinate with a specific value and color from a Cell.
229
+ *
230
+ * @param {Cell} cell - The cell containing coordinate, value and color.
231
+ * @returns {void}
232
+ */
233
+ stampCell(cell: Cell): void;
234
+ /**
235
+ * Attempts to shift a collection of cells (a piece) in a given direction.
236
+ *
237
+ * Validates that all new positions are within grid boundaries and are not
238
+ * occupied by other active cells (excluding the cells that are part of the original piece).
239
+ *
240
+ * @param {Piece} piece - The current piece (collection of cells).
241
+ * @param {Vector} direction - The movement vector (e.g., {x: -1, y: 0} for left).
242
+ * @returns {Piece | null} The new piece with updated coordinates if the move is valid, or null if blocked.
243
+ */
244
+ movePiece(piece: Piece, direction: Vector): Piece | null;
245
+ /**
246
+ * Alias for {@link movePiece} shifting one unit to the left.
247
+ * @param {Piece} piece - The current piece.
248
+ * @returns {Piece | null}
249
+ */
250
+ movePieceLeft(piece: Piece): Piece | null;
251
+ /**
252
+ * Alias for {@link movePiece} shifting one unit to the right.
253
+ * @param {Piece} piece - The current piece.
254
+ * @returns {Piece | null}
255
+ */
256
+ movePieceRight(piece: Piece): Piece | null;
257
+ /**
258
+ * Alias for {@link movePiece} shifting one unit up.
259
+ * @param {Piece} piece - The current piece.
260
+ * @returns {Piece | null}
261
+ */
262
+ movePieceUp(piece: Piece): Piece | null;
263
+ /**
264
+ * Alias for {@link movePiece} shifting one unit down.
265
+ * @param {Piece} piece - The current piece.
266
+ * @returns {Piece | null}
267
+ */
268
+ movePieceDown(piece: Piece): Piece | null;
269
+ /**
270
+ * Attempts to shift a single cell in a given direction.
271
+ *
272
+ * Validates that the new position is within grid boundaries and is not occupied.
273
+ *
274
+ * @param {Cell} cell - The current cell.
275
+ * @param {Vector} direction - The movement vector.
276
+ * @returns {Cell | null} The new cell with updated coordinate if the move is valid, or null if blocked.
277
+ */
278
+ moveCell(cell: Cell, direction: Vector): Cell | null;
279
+ /**
280
+ * Alias for {@link moveCell} shifting one unit to the left.
281
+ * @param {Cell} cell - The current cell.
282
+ * @returns {Cell | null}
283
+ */
284
+ moveCellLeft(cell: Cell): Cell | null;
285
+ /**
286
+ * Alias for {@link moveCell} shifting one unit to the right.
287
+ * @param {Cell} cell - The current cell.
288
+ * @returns {Cell | null}
289
+ */
290
+ moveCellRight(cell: Cell): Cell | null;
291
+ /**
292
+ * Alias for {@link moveCell} shifting one unit up.
293
+ * @param {Cell} cell - The current cell.
294
+ * @returns {Cell | null}
295
+ */
296
+ moveCellUp(cell: Cell): Cell | null;
297
+ /**
298
+ * Alias for {@link moveCell} shifting one unit down.
299
+ * @param {Cell} cell - The current cell.
300
+ * @returns {Cell | null}
301
+ */
302
+ moveCellDown(cell: Cell): Cell | null;
303
+ /**
304
+ * Attempts to rotate a piece 90 degrees around a specific origin.
305
+ *
306
+ * @param {Piece} piece - The current piece.
307
+ * @param {Coordinate} origin - The center of rotation.
308
+ * @param {boolean} [clockwise=true] - Direction of rotation.
309
+ * @returns {Piece | null} The new piece if rotation is valid, or null if blocked.
310
+ */
311
+ rotatePiece(piece: Piece, origin: Coordinate, clockwise?: boolean): Piece | null;
312
+ /**
313
+ * Identifies all rows that are completely filled with active cells.
314
+ *
315
+ * @returns {number[]} Array of row indices (y).
316
+ */
317
+ getFullRows(): number[];
318
+ /**
319
+ * Identifies all columns that are completely filled with active cells.
320
+ *
321
+ * @returns {number[]} Array of column indices (x).
322
+ */
323
+ getFullColumns(): number[];
324
+ /**
325
+ * Calculates the final resting position of a piece if it were dropped continuously.
326
+ *
327
+ * @param {Piece} piece - The piece to project.
328
+ * @returns {Piece} The piece at its final vertical resting position.
329
+ */
330
+ getDropPath(piece: Piece): Piece;
331
+ /**
332
+ * Calculates the final resting position of a piece if it were moved continuously upwards.
333
+ *
334
+ * @param {Piece} piece - The piece to project.
335
+ * @returns {Piece} The piece at its highest vertical resting position.
336
+ */
337
+ getRisePath(piece: Piece): Piece;
338
+ /**
339
+ * Calculates the final resting position of a piece if it were moved continuously to the left.
340
+ *
341
+ * @param {Piece} piece - The piece to project.
342
+ * @returns {Piece} The piece at its leftmost resting position.
343
+ */
344
+ getReachPathLeft(piece: Piece): Piece;
345
+ /**
346
+ * Calculates the final resting position of a piece if it were moved continuously to the right.
347
+ *
348
+ * @param {Piece} piece - The piece to project.
349
+ * @returns {Piece} The piece at its rightmost resting position.
350
+ */
351
+ getReachPathRight(piece: Piece): Piece;
352
+ /**
353
+ * Returns the active cells adjacent to a specific coordinate.
354
+ *
355
+ * @param {Coordinate} coord - The center coordinate.
356
+ * @param {boolean} [includeDiagonal=false] - Whether to include 8 neighbors or just 4.
357
+ * @returns {Cell[]} List of neighboring cells.
358
+ */
359
+ getNeighbors(coord: Coordinate, includeDiagonal?: boolean): Cell[];
360
+ /**
361
+ * Finds all connected active cells of the same value starting from a specific coordinate.
362
+ * Uses a Breadth-First Search (BFS) algorithm.
363
+ *
364
+ * @param {Coordinate} coord - Starting coordinate.
365
+ * @returns {Piece} Collection of connected cells.
366
+ */
367
+ findConnectedCells(coord: Coordinate): Piece;
368
+ /**
369
+ * Mirrors a piece across a specific axis relative to its bounding box.
370
+ *
371
+ * @param {Piece} piece - The piece to mirror.
372
+ * @param {Axis} axis - The axis to flip across ('x' for horizontal flip, 'y' for vertical).
373
+ * @returns {Piece} The mirrored piece.
374
+ */
375
+ mirrorPiece(piece: Piece, axis: Axis): Piece;
376
+ /**
377
+ * Swaps the values and colors of two cells.
378
+ *
379
+ * @param {Coordinate} a - First coordinate.
380
+ * @param {Coordinate} b - Second coordinate.
381
+ * @returns {void}
382
+ */
383
+ swapCells(a: Coordinate, b: Coordinate): void;
384
+ /**
385
+ * Private helper to get piece bounds, delegated to transform engine.
386
+ */
387
+ protected getPieceBounds(piece: Piece): {
388
+ min: Coordinate;
389
+ max: Coordinate;
390
+ };
391
+ /**
392
+ * Returns metadata for the real-time debugger.
393
+ *
394
+ * @returns {Record<string, string | number | boolean>} Technical debugging data.
395
+ */
396
+ getDebugData(): Record<string, string | number | boolean>;
397
+ serialize(): string;
398
+ deserialize(data: string): void;
399
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,24 @@
1
+ import { Serializable } from '../../types/Interfaces';
2
+ import GameGrid from './GameGrid';
3
+ /**
4
+ * A specialized grid implementation for the Heads-Up Display (HUD).
5
+ * Typically used for previewing the "next piece" in Tetris-like games.
6
+ * It has fixed dimensions (usually 4x4).
7
+ */
8
+ export default class GameHudGrid extends GameGrid implements Serializable {
9
+ serialId: string;
10
+ /**
11
+ * The fixed width of the HUD grid.
12
+ *
13
+ * @returns {number} Always returns 4.
14
+ */
15
+ get width(): number;
16
+ /**
17
+ * The fixed height of the HUD grid.
18
+ *
19
+ * @returns {number} Always returns 4.
20
+ */
21
+ get height(): number;
22
+ serialize(): string;
23
+ deserialize(data: string): void;
24
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,29 @@
1
+ import { Cell, Coordinate, Piece } from '../../../types/Types';
2
+ import { Grid } from '../../../types/modules';
3
+ /**
4
+ * Handles analysis and search operations on the grid.
5
+ */
6
+ export default class GridAnalysisEngine {
7
+ private grid;
8
+ constructor(grid: Grid);
9
+ /**
10
+ * Identifies all rows that are completely filled with active cells.
11
+ */
12
+ getFullRows(): number[];
13
+ /**
14
+ * Identifies all columns that are completely filled with active cells.
15
+ */
16
+ getFullColumns(): number[];
17
+ /**
18
+ * Returns the active cells adjacent to a specific coordinate.
19
+ */
20
+ getNeighbors(coord: Coordinate, includeDiagonal?: boolean): Cell[];
21
+ /**
22
+ * Finds all connected active cells of the same value starting from a specific coordinate.
23
+ */
24
+ findConnectedCells(coord: Coordinate): Piece;
25
+ /**
26
+ * Swaps the values and colors of two cells.
27
+ */
28
+ swapCells(a: Coordinate, b: Coordinate): void;
29
+ }
@@ -0,0 +1,56 @@
1
+ import { Grid } from '../../../types/modules';
2
+ /**
3
+ * Handles line-based operations (rows and columns) on the grid.
4
+ */
5
+ export default class GridLineEngine {
6
+ private grid;
7
+ constructor(grid: Grid);
8
+ /**
9
+ * Checks if every cell in a specific row is active.
10
+ */
11
+ isRowFull(y: number): boolean;
12
+ /**
13
+ * Checks if every cell in a specific row is inactive.
14
+ */
15
+ isRowEmpty(y: number): boolean;
16
+ /**
17
+ * Resets all cells in a specific row to their default empty state.
18
+ */
19
+ clearRow(y: number): void;
20
+ /**
21
+ * Shifts all rows above a certain index down by one position.
22
+ */
23
+ shiftRowsDown(fromY: number): void;
24
+ /**
25
+ * Shifts all rows below a certain index up by one position.
26
+ */
27
+ shiftRowsUp(fromY: number): void;
28
+ /**
29
+ * Scans for full rows, clears them, and shifts remaining rows down.
30
+ */
31
+ clearFullRows(): number;
32
+ /**
33
+ * Checks if every cell in a specific column is active.
34
+ */
35
+ isColumnFull(x: number): boolean;
36
+ /**
37
+ * Checks if every cell in a specific column is inactive.
38
+ */
39
+ isColumnEmpty(x: number): boolean;
40
+ /**
41
+ * Resets all cells in a specific column to their default empty state.
42
+ */
43
+ clearColumn(x: number): void;
44
+ /**
45
+ * Shifts all columns to the left of a certain index one position to the right.
46
+ */
47
+ shiftColumnsRight(fromX: number): void;
48
+ /**
49
+ * Shifts all columns to the right of a certain index one position to the left.
50
+ */
51
+ shiftColumnsLeft(fromX: number): void;
52
+ /**
53
+ * Scans for full columns, clears them, and shifts remaining columns right.
54
+ */
55
+ clearFullColumns(): number;
56
+ }
@@ -0,0 +1,29 @@
1
+ import { Cell, Vector, Piece } from '../../../types/Types';
2
+ import { Grid } from '../../../types/modules';
3
+ /**
4
+ * Handles movement and projection logic for the game grid.
5
+ */
6
+ export default class GridMovementEngine {
7
+ private grid;
8
+ constructor(grid: Grid);
9
+ /**
10
+ * Attempts to shift a collection of cells (a piece) in a given direction.
11
+ */
12
+ movePiece(piece: Piece, direction: Vector): Piece | null;
13
+ movePieceLeft(piece: Piece): Piece | null;
14
+ movePieceRight(piece: Piece): Piece | null;
15
+ movePieceUp(piece: Piece): Piece | null;
16
+ movePieceDown(piece: Piece): Piece | null;
17
+ /**
18
+ * Attempts to shift a single cell in a given direction.
19
+ */
20
+ moveCell(cell: Cell, direction: Vector): Cell | null;
21
+ moveCellLeft(cell: Cell): Cell | null;
22
+ moveCellRight(cell: Cell): Cell | null;
23
+ moveCellUp(cell: Cell): Cell | null;
24
+ moveCellDown(cell: Cell): Cell | null;
25
+ getDropPath(piece: Piece): Piece;
26
+ getRisePath(piece: Piece): Piece;
27
+ getReachPathLeft(piece: Piece): Piece;
28
+ getReachPathRight(piece: Piece): Piece;
29
+ }
@@ -0,0 +1,26 @@
1
+ import { Color } from '../../../types/enums';
2
+ import { Cell, Coordinate, Piece } from '../../../types/Types';
3
+ import { Grid } from '../../../types/modules';
4
+ /**
5
+ * Handles region-based operations (areas, stamps, and occupancy) on the grid.
6
+ */
7
+ export default class GridRegionEngine {
8
+ private grid;
9
+ constructor(grid: Grid);
10
+ /**
11
+ * Checks if any of the provided coordinates are already occupied or out of bounds.
12
+ */
13
+ isAreaOccupied(coordinates: Coordinate[]): boolean;
14
+ /**
15
+ * Fills a rectangular region defined by two corners with a specific value and color.
16
+ */
17
+ fillArea(start: Coordinate, end: Coordinate, value: number, color: Color): void;
18
+ /**
19
+ * Updates multiple coordinates simultaneously with their specific values and colors.
20
+ */
21
+ stampPiece(piece: Piece): void;
22
+ /**
23
+ * Updates a single coordinate with a specific value and color from a Cell.
24
+ */
25
+ stampCell(cell: Cell): void;
26
+ }
@@ -0,0 +1,24 @@
1
+ import { Coordinate, Axis, Piece } from '../../../types/Types';
2
+ import { Grid } from '../../../types/modules';
3
+ /**
4
+ * Handles geometric transformations for pieces on the grid.
5
+ */
6
+ export default class GridTransformEngine {
7
+ private grid;
8
+ constructor(grid: Grid);
9
+ /**
10
+ * Attempts to rotate a piece 90 degrees around a specific origin.
11
+ */
12
+ rotatePiece(piece: Piece, origin: Coordinate, clockwise?: boolean): Piece | null;
13
+ /**
14
+ * Mirrors a piece across a specific axis relative to its bounding box.
15
+ */
16
+ mirrorPiece(piece: Piece, axis: Axis): Piece;
17
+ /**
18
+ * Calculates the bounding box of a piece.
19
+ */
20
+ getPieceBounds(piece: Piece): {
21
+ min: Coordinate;
22
+ max: Coordinate;
23
+ };
24
+ }
@@ -0,0 +1,51 @@
1
+ import p5 from 'p5';
2
+ import { Cell, GameModules, RendererMetrics } from '../../types/Types';
3
+ import { Renderer, State } from '../../types/modules';
4
+ /**
5
+ * Responsible for rendering the main game field (the grid where the game is played).
6
+ * Handles cell rendering, background drawing, and optimizes static elements using an off-screen buffer.
7
+ */
8
+ export default class DisplayRenderer implements Renderer {
9
+ private _p;
10
+ private _rendererMetrics;
11
+ private _cellPreCalculatedGeometry;
12
+ private _staticGraphics;
13
+ /**
14
+ * Creates an instance of the DisplayRenderer.
15
+ *
16
+ * @param {p5} p - The p5 instance.
17
+ */
18
+ constructor(p: p5);
19
+ /**
20
+ * Initializes the renderer with the calculated metrics.
21
+ * Pre-calculates cell geometry for faster rendering.
22
+ *
23
+ * @param {RendererMetrics} rendererMetrics - The shared renderer metrics.
24
+ */
25
+ setup(rendererMetrics: RendererMetrics): void;
26
+ /**
27
+ * Renders the game grid.
28
+ * Draws the static background first, then iterates over the grid to draw cells.
29
+ *
30
+ * @param {Cell[][]} grid - The current grid state.
31
+ */
32
+ render(grid: Cell[][], modules: GameModules): void;
33
+ /**
34
+ * Renders static elements (background and borders) to an off-screen buffer.
35
+ * This improves performance by avoiding re-drawing static shapes every frame.
36
+ */
37
+ private _renderStaticElements;
38
+ /**
39
+ * Renders a single brick at grid coordinates.
40
+ * Uses translation matrices to keep drawing logic clean.
41
+ *
42
+ * @param {Cell} cell - The cell data to render.
43
+ */
44
+ protected renderCell({ coordinate, color, value }: Cell, state: State): void;
45
+ /**
46
+ * Iterates through the grid and renders each cell.
47
+ *
48
+ * @param {Cell[][]} grid - The grid to render.
49
+ */
50
+ protected renderGrid(grid: Cell[][], state: State): void;
51
+ }