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,1256 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
6
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
7
+ <meta name="generator" content="Asciidoctor 2.0.20">
8
+ <meta name="description" content="Interface defining the behaviors of a 2D grid of cells.">
9
+ <meta name="keywords" content="grid, cells, matrix, collision-detection">
10
+ <title>Grid Reference</title>
11
+ <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700">
12
+ <style>
13
+ /*! Asciidoctor default stylesheet | MIT License | https://asciidoctor.org */
14
+ /* Uncomment the following line when using as a custom stylesheet */
15
+ /* @import "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700"; */
16
+ html{font-family:sans-serif;-webkit-text-size-adjust:100%}
17
+ a{background:none}
18
+ a:focus{outline:thin dotted}
19
+ a:active,a:hover{outline:0}
20
+ h1{font-size:2em;margin:.67em 0}
21
+ b,strong{font-weight:bold}
22
+ abbr{font-size:.9em}
23
+ abbr[title]{cursor:help;border-bottom:1px dotted #dddddf;text-decoration:none}
24
+ dfn{font-style:italic}
25
+ hr{height:0}
26
+ mark{background:#ff0;color:#000}
27
+ code,kbd,pre,samp{font-family:monospace;font-size:1em}
28
+ pre{white-space:pre-wrap}
29
+ q{quotes:"\201C" "\201D" "\2018" "\2019"}
30
+ small{font-size:80%}
31
+ sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}
32
+ sup{top:-.5em}
33
+ sub{bottom:-.25em}
34
+ img{border:0}
35
+ svg:not(:root){overflow:hidden}
36
+ figure{margin:0}
37
+ audio,video{display:inline-block}
38
+ audio:not([controls]){display:none;height:0}
39
+ fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}
40
+ legend{border:0;padding:0}
41
+ button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}
42
+ button,input{line-height:normal}
43
+ button,select{text-transform:none}
44
+ button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}
45
+ button[disabled],html input[disabled]{cursor:default}
46
+ input[type=checkbox],input[type=radio]{padding:0}
47
+ button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}
48
+ textarea{overflow:auto;vertical-align:top}
49
+ table{border-collapse:collapse;border-spacing:0}
50
+ *,::before,::after{box-sizing:border-box}
51
+ html,body{font-size:100%}
52
+ body{background:#fff;color:rgba(0,0,0,.8);padding:0;margin:0;font-family:"Noto Serif","DejaVu Serif",serif;line-height:1;position:relative;cursor:auto;-moz-tab-size:4;-o-tab-size:4;tab-size:4;word-wrap:anywhere;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}
53
+ a:hover{cursor:pointer}
54
+ img,object,embed{max-width:100%;height:auto}
55
+ object,embed{height:100%}
56
+ img{-ms-interpolation-mode:bicubic}
57
+ .left{float:left!important}
58
+ .right{float:right!important}
59
+ .text-left{text-align:left!important}
60
+ .text-right{text-align:right!important}
61
+ .text-center{text-align:center!important}
62
+ .text-justify{text-align:justify!important}
63
+ .hide{display:none}
64
+ img,object,svg{display:inline-block;vertical-align:middle}
65
+ textarea{height:auto;min-height:50px}
66
+ select{width:100%}
67
+ .subheader,.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{line-height:1.45;color:#7a2518;font-weight:400;margin-top:0;margin-bottom:.25em}
68
+ div,dl,dt,dd,ul,ol,li,h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6,pre,form,p,blockquote,th,td{margin:0;padding:0}
69
+ a{color:#2156a5;text-decoration:underline;line-height:inherit}
70
+ a:hover,a:focus{color:#1d4b8f}
71
+ a img{border:0}
72
+ p{line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility}
73
+ p aside{font-size:.875em;line-height:1.35;font-style:italic}
74
+ h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{font-family:"Open Sans","DejaVu Sans",sans-serif;font-weight:300;font-style:normal;color:#ba3925;text-rendering:optimizeLegibility;margin-top:1em;margin-bottom:.5em;line-height:1.0125em}
75
+ h1 small,h2 small,h3 small,#toctitle small,.sidebarblock>.content>.title small,h4 small,h5 small,h6 small{font-size:60%;color:#e99b8f;line-height:0}
76
+ h1{font-size:2.125em}
77
+ h2{font-size:1.6875em}
78
+ h3,#toctitle,.sidebarblock>.content>.title{font-size:1.375em}
79
+ h4,h5{font-size:1.125em}
80
+ h6{font-size:1em}
81
+ hr{border:solid #dddddf;border-width:1px 0 0;clear:both;margin:1.25em 0 1.1875em}
82
+ em,i{font-style:italic;line-height:inherit}
83
+ strong,b{font-weight:bold;line-height:inherit}
84
+ small{font-size:60%;line-height:inherit}
85
+ code{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;color:rgba(0,0,0,.9)}
86
+ ul,ol,dl{line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit}
87
+ ul,ol{margin-left:1.5em}
88
+ ul li ul,ul li ol{margin-left:1.25em;margin-bottom:0}
89
+ ul.circle{list-style-type:circle}
90
+ ul.disc{list-style-type:disc}
91
+ ul.square{list-style-type:square}
92
+ ul.circle ul:not([class]),ul.disc ul:not([class]),ul.square ul:not([class]){list-style:inherit}
93
+ ol li ul,ol li ol{margin-left:1.25em;margin-bottom:0}
94
+ dl dt{margin-bottom:.3125em;font-weight:bold}
95
+ dl dd{margin-bottom:1.25em}
96
+ blockquote{margin:0 0 1.25em;padding:.5625em 1.25em 0 1.1875em;border-left:1px solid #ddd}
97
+ blockquote,blockquote p{line-height:1.6;color:rgba(0,0,0,.85)}
98
+ @media screen and (min-width:768px){h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2}
99
+ h1{font-size:2.75em}
100
+ h2{font-size:2.3125em}
101
+ h3,#toctitle,.sidebarblock>.content>.title{font-size:1.6875em}
102
+ h4{font-size:1.4375em}}
103
+ table{background:#fff;margin-bottom:1.25em;border:1px solid #dedede;word-wrap:normal}
104
+ table thead,table tfoot{background:#f7f8f7}
105
+ table thead tr th,table thead tr td,table tfoot tr th,table tfoot tr td{padding:.5em .625em .625em;font-size:inherit;color:rgba(0,0,0,.8);text-align:left}
106
+ table tr th,table tr td{padding:.5625em .625em;font-size:inherit;color:rgba(0,0,0,.8)}
107
+ table tr.even,table tr.alt{background:#f8f8f7}
108
+ table thead tr th,table tfoot tr th,table tbody tr td,table tr td,table tfoot tr td{line-height:1.6}
109
+ h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2;word-spacing:-.05em}
110
+ h1 strong,h2 strong,h3 strong,#toctitle strong,.sidebarblock>.content>.title strong,h4 strong,h5 strong,h6 strong{font-weight:400}
111
+ .center{margin-left:auto;margin-right:auto}
112
+ .stretch{width:100%}
113
+ .clearfix::before,.clearfix::after,.float-group::before,.float-group::after{content:" ";display:table}
114
+ .clearfix::after,.float-group::after{clear:both}
115
+ :not(pre).nobreak{word-wrap:normal}
116
+ :not(pre).nowrap{white-space:nowrap}
117
+ :not(pre).pre-wrap{white-space:pre-wrap}
118
+ :not(pre):not([class^=L])>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;padding:.1em .5ex;word-spacing:-.15em;background:#f7f7f8;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed}
119
+ pre{color:rgba(0,0,0,.9);font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;line-height:1.45;text-rendering:optimizeSpeed}
120
+ pre code,pre pre{color:inherit;font-size:inherit;line-height:inherit}
121
+ pre>code{display:block}
122
+ pre.nowrap,pre.nowrap pre{white-space:pre;word-wrap:normal}
123
+ em em{font-style:normal}
124
+ strong strong{font-weight:400}
125
+ .keyseq{color:rgba(51,51,51,.8)}
126
+ kbd{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;display:inline-block;color:rgba(0,0,0,.8);font-size:.65em;line-height:1.45;background:#f7f7f7;border:1px solid #ccc;border-radius:3px;box-shadow:0 1px 0 rgba(0,0,0,.2),inset 0 0 0 .1em #fff;margin:0 .15em;padding:.2em .5em;vertical-align:middle;position:relative;top:-.1em;white-space:nowrap}
127
+ .keyseq kbd:first-child{margin-left:0}
128
+ .keyseq kbd:last-child{margin-right:0}
129
+ .menuseq,.menuref{color:#000}
130
+ .menuseq b:not(.caret),.menuref{font-weight:inherit}
131
+ .menuseq{word-spacing:-.02em}
132
+ .menuseq b.caret{font-size:1.25em;line-height:.8}
133
+ .menuseq i.caret{font-weight:bold;text-align:center;width:.45em}
134
+ b.button::before,b.button::after{position:relative;top:-1px;font-weight:400}
135
+ b.button::before{content:"[";padding:0 3px 0 2px}
136
+ b.button::after{content:"]";padding:0 2px 0 3px}
137
+ p a>code:hover{color:rgba(0,0,0,.9)}
138
+ #header,#content,#footnotes,#footer{width:100%;margin:0 auto;max-width:62.5em;*zoom:1;position:relative;padding-left:.9375em;padding-right:.9375em}
139
+ #header::before,#header::after,#content::before,#content::after,#footnotes::before,#footnotes::after,#footer::before,#footer::after{content:" ";display:table}
140
+ #header::after,#content::after,#footnotes::after,#footer::after{clear:both}
141
+ #content{margin-top:1.25em}
142
+ #content::before{content:none}
143
+ #header>h1:first-child{color:rgba(0,0,0,.85);margin-top:2.25rem;margin-bottom:0}
144
+ #header>h1:first-child+#toc{margin-top:8px;border-top:1px solid #dddddf}
145
+ #header>h1:only-child,body.toc2 #header>h1:nth-last-child(2){border-bottom:1px solid #dddddf;padding-bottom:8px}
146
+ #header .details{border-bottom:1px solid #dddddf;line-height:1.45;padding-top:.25em;padding-bottom:.25em;padding-left:.25em;color:rgba(0,0,0,.6);display:flex;flex-flow:row wrap}
147
+ #header .details span:first-child{margin-left:-.125em}
148
+ #header .details span.email a{color:rgba(0,0,0,.85)}
149
+ #header .details br{display:none}
150
+ #header .details br+span::before{content:"\00a0\2013\00a0"}
151
+ #header .details br+span.author::before{content:"\00a0\22c5\00a0";color:rgba(0,0,0,.85)}
152
+ #header .details br+span#revremark::before{content:"\00a0|\00a0"}
153
+ #header #revnumber{text-transform:capitalize}
154
+ #header #revnumber::after{content:"\00a0"}
155
+ #content>h1:first-child:not([class]){color:rgba(0,0,0,.85);border-bottom:1px solid #dddddf;padding-bottom:8px;margin-top:0;padding-top:1rem;margin-bottom:1.25rem}
156
+ #toc{border-bottom:1px solid #e7e7e9;padding-bottom:.5em}
157
+ #toc>ul{margin-left:.125em}
158
+ #toc ul.sectlevel0>li>a{font-style:italic}
159
+ #toc ul.sectlevel0 ul.sectlevel1{margin:.5em 0}
160
+ #toc ul{font-family:"Open Sans","DejaVu Sans",sans-serif;list-style-type:none}
161
+ #toc li{line-height:1.3334;margin-top:.3334em}
162
+ #toc a{text-decoration:none}
163
+ #toc a:active{text-decoration:underline}
164
+ #toctitle{color:#7a2518;font-size:1.2em}
165
+ @media screen and (min-width:768px){#toctitle{font-size:1.375em}
166
+ body.toc2{padding-left:15em;padding-right:0}
167
+ #toc.toc2{margin-top:0!important;background:#f8f8f7;position:fixed;width:15em;left:0;top:0;border-right:1px solid #e7e7e9;border-top-width:0!important;border-bottom-width:0!important;z-index:1000;padding:1.25em 1em;height:100%;overflow:auto}
168
+ #toc.toc2 #toctitle{margin-top:0;margin-bottom:.8rem;font-size:1.2em}
169
+ #toc.toc2>ul{font-size:.9em;margin-bottom:0}
170
+ #toc.toc2 ul ul{margin-left:0;padding-left:1em}
171
+ #toc.toc2 ul.sectlevel0 ul.sectlevel1{padding-left:0;margin-top:.5em;margin-bottom:.5em}
172
+ body.toc2.toc-right{padding-left:0;padding-right:15em}
173
+ body.toc2.toc-right #toc.toc2{border-right-width:0;border-left:1px solid #e7e7e9;left:auto;right:0}}
174
+ @media screen and (min-width:1280px){body.toc2{padding-left:20em;padding-right:0}
175
+ #toc.toc2{width:20em}
176
+ #toc.toc2 #toctitle{font-size:1.375em}
177
+ #toc.toc2>ul{font-size:.95em}
178
+ #toc.toc2 ul ul{padding-left:1.25em}
179
+ body.toc2.toc-right{padding-left:0;padding-right:20em}}
180
+ #content #toc{border:1px solid #e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;border-radius:4px}
181
+ #content #toc>:first-child{margin-top:0}
182
+ #content #toc>:last-child{margin-bottom:0}
183
+ #footer{max-width:none;background:rgba(0,0,0,.8);padding:1.25em}
184
+ #footer-text{color:hsla(0,0%,100%,.8);line-height:1.44}
185
+ #content{margin-bottom:.625em}
186
+ .sect1{padding-bottom:.625em}
187
+ @media screen and (min-width:768px){#content{margin-bottom:1.25em}
188
+ .sect1{padding-bottom:1.25em}}
189
+ .sect1:last-child{padding-bottom:0}
190
+ .sect1+.sect1{border-top:1px solid #e7e7e9}
191
+ #content h1>a.anchor,h2>a.anchor,h3>a.anchor,#toctitle>a.anchor,.sidebarblock>.content>.title>a.anchor,h4>a.anchor,h5>a.anchor,h6>a.anchor{position:absolute;z-index:1001;width:1.5ex;margin-left:-1.5ex;display:block;text-decoration:none!important;visibility:hidden;text-align:center;font-weight:400}
192
+ #content h1>a.anchor::before,h2>a.anchor::before,h3>a.anchor::before,#toctitle>a.anchor::before,.sidebarblock>.content>.title>a.anchor::before,h4>a.anchor::before,h5>a.anchor::before,h6>a.anchor::before{content:"\00A7";font-size:.85em;display:block;padding-top:.1em}
193
+ #content h1:hover>a.anchor,#content h1>a.anchor:hover,h2:hover>a.anchor,h2>a.anchor:hover,h3:hover>a.anchor,#toctitle:hover>a.anchor,.sidebarblock>.content>.title:hover>a.anchor,h3>a.anchor:hover,#toctitle>a.anchor:hover,.sidebarblock>.content>.title>a.anchor:hover,h4:hover>a.anchor,h4>a.anchor:hover,h5:hover>a.anchor,h5>a.anchor:hover,h6:hover>a.anchor,h6>a.anchor:hover{visibility:visible}
194
+ #content h1>a.link,h2>a.link,h3>a.link,#toctitle>a.link,.sidebarblock>.content>.title>a.link,h4>a.link,h5>a.link,h6>a.link{color:#ba3925;text-decoration:none}
195
+ #content h1>a.link:hover,h2>a.link:hover,h3>a.link:hover,#toctitle>a.link:hover,.sidebarblock>.content>.title>a.link:hover,h4>a.link:hover,h5>a.link:hover,h6>a.link:hover{color:#a53221}
196
+ details,.audioblock,.imageblock,.literalblock,.listingblock,.stemblock,.videoblock{margin-bottom:1.25em}
197
+ details{margin-left:1.25rem}
198
+ details>summary{cursor:pointer;display:block;position:relative;line-height:1.6;margin-bottom:.625rem;outline:none;-webkit-tap-highlight-color:transparent}
199
+ details>summary::-webkit-details-marker{display:none}
200
+ details>summary::before{content:"";border:solid transparent;border-left:solid;border-width:.3em 0 .3em .5em;position:absolute;top:.5em;left:-1.25rem;transform:translateX(15%)}
201
+ details[open]>summary::before{border:solid transparent;border-top:solid;border-width:.5em .3em 0;transform:translateY(15%)}
202
+ details>summary::after{content:"";width:1.25rem;height:1em;position:absolute;top:.3em;left:-1.25rem}
203
+ .admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{text-rendering:optimizeLegibility;text-align:left;font-family:"Noto Serif","DejaVu Serif",serif;font-size:1rem;font-style:italic}
204
+ table.tableblock.fit-content>caption.title{white-space:nowrap;width:0}
205
+ .paragraph.lead>p,#preamble>.sectionbody>[class=paragraph]:first-of-type p{font-size:1.21875em;line-height:1.6;color:rgba(0,0,0,.85)}
206
+ .admonitionblock>table{border-collapse:separate;border:0;background:none;width:100%}
207
+ .admonitionblock>table td.icon{text-align:center;width:80px}
208
+ .admonitionblock>table td.icon img{max-width:none}
209
+ .admonitionblock>table td.icon .title{font-weight:bold;font-family:"Open Sans","DejaVu Sans",sans-serif;text-transform:uppercase}
210
+ .admonitionblock>table td.content{padding-left:1.125em;padding-right:1.25em;border-left:1px solid #dddddf;color:rgba(0,0,0,.6);word-wrap:anywhere}
211
+ .admonitionblock>table td.content>:last-child>:last-child{margin-bottom:0}
212
+ .exampleblock>.content{border:1px solid #e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;border-radius:4px}
213
+ .sidebarblock{border:1px solid #dbdbd6;margin-bottom:1.25em;padding:1.25em;background:#f3f3f2;border-radius:4px}
214
+ .sidebarblock>.content>.title{color:#7a2518;margin-top:0;text-align:center}
215
+ .exampleblock>.content>:first-child,.sidebarblock>.content>:first-child{margin-top:0}
216
+ .exampleblock>.content>:last-child,.exampleblock>.content>:last-child>:last-child,.exampleblock>.content .olist>ol>li:last-child>:last-child,.exampleblock>.content .ulist>ul>li:last-child>:last-child,.exampleblock>.content .qlist>ol>li:last-child>:last-child,.sidebarblock>.content>:last-child,.sidebarblock>.content>:last-child>:last-child,.sidebarblock>.content .olist>ol>li:last-child>:last-child,.sidebarblock>.content .ulist>ul>li:last-child>:last-child,.sidebarblock>.content .qlist>ol>li:last-child>:last-child{margin-bottom:0}
217
+ .literalblock pre,.listingblock>.content>pre{border-radius:4px;overflow-x:auto;padding:1em;font-size:.8125em}
218
+ @media screen and (min-width:768px){.literalblock pre,.listingblock>.content>pre{font-size:.90625em}}
219
+ @media screen and (min-width:1280px){.literalblock pre,.listingblock>.content>pre{font-size:1em}}
220
+ .literalblock pre,.listingblock>.content>pre:not(.highlight),.listingblock>.content>pre[class=highlight],.listingblock>.content>pre[class^="highlight "]{background:#f7f7f8}
221
+ .literalblock.output pre{color:#f7f7f8;background:rgba(0,0,0,.9)}
222
+ .listingblock>.content{position:relative}
223
+ .listingblock code[data-lang]::before{display:none;content:attr(data-lang);position:absolute;font-size:.75em;top:.425rem;right:.5rem;line-height:1;text-transform:uppercase;color:inherit;opacity:.5}
224
+ .listingblock:hover code[data-lang]::before{display:block}
225
+ .listingblock.terminal pre .command::before{content:attr(data-prompt);padding-right:.5em;color:inherit;opacity:.5}
226
+ .listingblock.terminal pre .command:not([data-prompt])::before{content:"$"}
227
+ .listingblock pre.highlightjs{padding:0}
228
+ .listingblock pre.highlightjs>code{padding:1em;border-radius:4px}
229
+ .listingblock pre.prettyprint{border-width:0}
230
+ .prettyprint{background:#f7f7f8}
231
+ pre.prettyprint .linenums{line-height:1.45;margin-left:2em}
232
+ pre.prettyprint li{background:none;list-style-type:inherit;padding-left:0}
233
+ pre.prettyprint li code[data-lang]::before{opacity:1}
234
+ pre.prettyprint li:not(:first-child) code[data-lang]::before{display:none}
235
+ table.linenotable{border-collapse:separate;border:0;margin-bottom:0;background:none}
236
+ table.linenotable td[class]{color:inherit;vertical-align:top;padding:0;line-height:inherit;white-space:normal}
237
+ table.linenotable td.code{padding-left:.75em}
238
+ table.linenotable td.linenos,pre.pygments .linenos{border-right:1px solid;opacity:.35;padding-right:.5em;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}
239
+ pre.pygments span.linenos{display:inline-block;margin-right:.75em}
240
+ .quoteblock{margin:0 1em 1.25em 1.5em;display:table}
241
+ .quoteblock:not(.excerpt)>.title{margin-left:-1.5em;margin-bottom:.75em}
242
+ .quoteblock blockquote,.quoteblock p{color:rgba(0,0,0,.85);font-size:1.15rem;line-height:1.75;word-spacing:.1em;letter-spacing:0;font-style:italic;text-align:justify}
243
+ .quoteblock blockquote{margin:0;padding:0;border:0}
244
+ .quoteblock blockquote::before{content:"\201c";float:left;font-size:2.75em;font-weight:bold;line-height:.6em;margin-left:-.6em;color:#7a2518;text-shadow:0 1px 2px rgba(0,0,0,.1)}
245
+ .quoteblock blockquote>.paragraph:last-child p{margin-bottom:0}
246
+ .quoteblock .attribution{margin-top:.75em;margin-right:.5ex;text-align:right}
247
+ .verseblock{margin:0 1em 1.25em}
248
+ .verseblock pre{font-family:"Open Sans","DejaVu Sans",sans-serif;font-size:1.15rem;color:rgba(0,0,0,.85);font-weight:300;text-rendering:optimizeLegibility}
249
+ .verseblock pre strong{font-weight:400}
250
+ .verseblock .attribution{margin-top:1.25rem;margin-left:.5ex}
251
+ .quoteblock .attribution,.verseblock .attribution{font-size:.9375em;line-height:1.45;font-style:italic}
252
+ .quoteblock .attribution br,.verseblock .attribution br{display:none}
253
+ .quoteblock .attribution cite,.verseblock .attribution cite{display:block;letter-spacing:-.025em;color:rgba(0,0,0,.6)}
254
+ .quoteblock.abstract blockquote::before,.quoteblock.excerpt blockquote::before,.quoteblock .quoteblock blockquote::before{display:none}
255
+ .quoteblock.abstract blockquote,.quoteblock.abstract p,.quoteblock.excerpt blockquote,.quoteblock.excerpt p,.quoteblock .quoteblock blockquote,.quoteblock .quoteblock p{line-height:1.6;word-spacing:0}
256
+ .quoteblock.abstract{margin:0 1em 1.25em;display:block}
257
+ .quoteblock.abstract>.title{margin:0 0 .375em;font-size:1.15em;text-align:center}
258
+ .quoteblock.excerpt>blockquote,.quoteblock .quoteblock{padding:0 0 .25em 1em;border-left:.25em solid #dddddf}
259
+ .quoteblock.excerpt,.quoteblock .quoteblock{margin-left:0}
260
+ .quoteblock.excerpt blockquote,.quoteblock.excerpt p,.quoteblock .quoteblock blockquote,.quoteblock .quoteblock p{color:inherit;font-size:1.0625rem}
261
+ .quoteblock.excerpt .attribution,.quoteblock .quoteblock .attribution{color:inherit;font-size:.85rem;text-align:left;margin-right:0}
262
+ p.tableblock:last-child{margin-bottom:0}
263
+ td.tableblock>.content{margin-bottom:1.25em;word-wrap:anywhere}
264
+ td.tableblock>.content>:last-child{margin-bottom:-1.25em}
265
+ table.tableblock,th.tableblock,td.tableblock{border:0 solid #dedede}
266
+ table.grid-all>*>tr>*{border-width:1px}
267
+ table.grid-cols>*>tr>*{border-width:0 1px}
268
+ table.grid-rows>*>tr>*{border-width:1px 0}
269
+ table.frame-all{border-width:1px}
270
+ table.frame-ends{border-width:1px 0}
271
+ table.frame-sides{border-width:0 1px}
272
+ table.frame-none>colgroup+*>:first-child>*,table.frame-sides>colgroup+*>:first-child>*{border-top-width:0}
273
+ table.frame-none>:last-child>:last-child>*,table.frame-sides>:last-child>:last-child>*{border-bottom-width:0}
274
+ table.frame-none>*>tr>:first-child,table.frame-ends>*>tr>:first-child{border-left-width:0}
275
+ table.frame-none>*>tr>:last-child,table.frame-ends>*>tr>:last-child{border-right-width:0}
276
+ table.stripes-all>*>tr,table.stripes-odd>*>tr:nth-of-type(odd),table.stripes-even>*>tr:nth-of-type(even),table.stripes-hover>*>tr:hover{background:#f8f8f7}
277
+ th.halign-left,td.halign-left{text-align:left}
278
+ th.halign-right,td.halign-right{text-align:right}
279
+ th.halign-center,td.halign-center{text-align:center}
280
+ th.valign-top,td.valign-top{vertical-align:top}
281
+ th.valign-bottom,td.valign-bottom{vertical-align:bottom}
282
+ th.valign-middle,td.valign-middle{vertical-align:middle}
283
+ table thead th,table tfoot th{font-weight:bold}
284
+ tbody tr th{background:#f7f8f7}
285
+ tbody tr th,tbody tr th p,tfoot tr th,tfoot tr th p{color:rgba(0,0,0,.8);font-weight:bold}
286
+ p.tableblock>code:only-child{background:none;padding:0}
287
+ p.tableblock{font-size:1em}
288
+ ol{margin-left:1.75em}
289
+ ul li ol{margin-left:1.5em}
290
+ dl dd{margin-left:1.125em}
291
+ dl dd:last-child,dl dd:last-child>:last-child{margin-bottom:0}
292
+ li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist .ulist{margin-bottom:.625em}
293
+ ul.checklist,ul.none,ol.none,ul.no-bullet,ol.no-bullet,ol.unnumbered,ul.unstyled,ol.unstyled{list-style-type:none}
294
+ ul.no-bullet,ol.no-bullet,ol.unnumbered{margin-left:.625em}
295
+ ul.unstyled,ol.unstyled{margin-left:0}
296
+ li>p:empty:only-child::before{content:"";display:inline-block}
297
+ ul.checklist>li>p:first-child{margin-left:-1em}
298
+ ul.checklist>li>p:first-child>.fa-square-o:first-child,ul.checklist>li>p:first-child>.fa-check-square-o:first-child{width:1.25em;font-size:.8em;position:relative;bottom:.125em}
299
+ ul.checklist>li>p:first-child>input[type=checkbox]:first-child{margin-right:.25em}
300
+ ul.inline{display:flex;flex-flow:row wrap;list-style:none;margin:0 0 .625em -1.25em}
301
+ ul.inline>li{margin-left:1.25em}
302
+ .unstyled dl dt{font-weight:400;font-style:normal}
303
+ ol.arabic{list-style-type:decimal}
304
+ ol.decimal{list-style-type:decimal-leading-zero}
305
+ ol.loweralpha{list-style-type:lower-alpha}
306
+ ol.upperalpha{list-style-type:upper-alpha}
307
+ ol.lowerroman{list-style-type:lower-roman}
308
+ ol.upperroman{list-style-type:upper-roman}
309
+ ol.lowergreek{list-style-type:lower-greek}
310
+ .hdlist>table,.colist>table{border:0;background:none}
311
+ .hdlist>table>tbody>tr,.colist>table>tbody>tr{background:none}
312
+ td.hdlist1,td.hdlist2{vertical-align:top;padding:0 .625em}
313
+ td.hdlist1{font-weight:bold;padding-bottom:1.25em}
314
+ td.hdlist2{word-wrap:anywhere}
315
+ .literalblock+.colist,.listingblock+.colist{margin-top:-.5em}
316
+ .colist td:not([class]):first-child{padding:.4em .75em 0;line-height:1;vertical-align:top}
317
+ .colist td:not([class]):first-child img{max-width:none}
318
+ .colist td:not([class]):last-child{padding:.25em 0}
319
+ .thumb,.th{line-height:0;display:inline-block;border:4px solid #fff;box-shadow:0 0 0 1px #ddd}
320
+ .imageblock.left{margin:.25em .625em 1.25em 0}
321
+ .imageblock.right{margin:.25em 0 1.25em .625em}
322
+ .imageblock>.title{margin-bottom:0}
323
+ .imageblock.thumb,.imageblock.th{border-width:6px}
324
+ .imageblock.thumb>.title,.imageblock.th>.title{padding:0 .125em}
325
+ .image.left,.image.right{margin-top:.25em;margin-bottom:.25em;display:inline-block;line-height:0}
326
+ .image.left{margin-right:.625em}
327
+ .image.right{margin-left:.625em}
328
+ a.image{text-decoration:none;display:inline-block}
329
+ a.image object{pointer-events:none}
330
+ sup.footnote,sup.footnoteref{font-size:.875em;position:static;vertical-align:super}
331
+ sup.footnote a,sup.footnoteref a{text-decoration:none}
332
+ sup.footnote a:active,sup.footnoteref a:active{text-decoration:underline}
333
+ #footnotes{padding-top:.75em;padding-bottom:.75em;margin-bottom:.625em}
334
+ #footnotes hr{width:20%;min-width:6.25em;margin:-.25em 0 .75em;border-width:1px 0 0}
335
+ #footnotes .footnote{padding:0 .375em 0 .225em;line-height:1.3334;font-size:.875em;margin-left:1.2em;margin-bottom:.2em}
336
+ #footnotes .footnote a:first-of-type{font-weight:bold;text-decoration:none;margin-left:-1.05em}
337
+ #footnotes .footnote:last-of-type{margin-bottom:0}
338
+ #content #footnotes{margin-top:-.625em;margin-bottom:0;padding:.75em 0}
339
+ div.unbreakable{page-break-inside:avoid}
340
+ .big{font-size:larger}
341
+ .small{font-size:smaller}
342
+ .underline{text-decoration:underline}
343
+ .overline{text-decoration:overline}
344
+ .line-through{text-decoration:line-through}
345
+ .aqua{color:#00bfbf}
346
+ .aqua-background{background:#00fafa}
347
+ .black{color:#000}
348
+ .black-background{background:#000}
349
+ .blue{color:#0000bf}
350
+ .blue-background{background:#0000fa}
351
+ .fuchsia{color:#bf00bf}
352
+ .fuchsia-background{background:#fa00fa}
353
+ .gray{color:#606060}
354
+ .gray-background{background:#7d7d7d}
355
+ .green{color:#006000}
356
+ .green-background{background:#007d00}
357
+ .lime{color:#00bf00}
358
+ .lime-background{background:#00fa00}
359
+ .maroon{color:#600000}
360
+ .maroon-background{background:#7d0000}
361
+ .navy{color:#000060}
362
+ .navy-background{background:#00007d}
363
+ .olive{color:#606000}
364
+ .olive-background{background:#7d7d00}
365
+ .purple{color:#600060}
366
+ .purple-background{background:#7d007d}
367
+ .red{color:#bf0000}
368
+ .red-background{background:#fa0000}
369
+ .silver{color:#909090}
370
+ .silver-background{background:#bcbcbc}
371
+ .teal{color:#006060}
372
+ .teal-background{background:#007d7d}
373
+ .white{color:#bfbfbf}
374
+ .white-background{background:#fafafa}
375
+ .yellow{color:#bfbf00}
376
+ .yellow-background{background:#fafa00}
377
+ span.icon>.fa{cursor:default}
378
+ a span.icon>.fa{cursor:inherit}
379
+ .admonitionblock td.icon [class^="fa icon-"]{font-size:2.5em;text-shadow:1px 1px 2px rgba(0,0,0,.5);cursor:default}
380
+ .admonitionblock td.icon .icon-note::before{content:"\f05a";color:#19407c}
381
+ .admonitionblock td.icon .icon-tip::before{content:"\f0eb";text-shadow:1px 1px 2px rgba(155,155,0,.8);color:#111}
382
+ .admonitionblock td.icon .icon-warning::before{content:"\f071";color:#bf6900}
383
+ .admonitionblock td.icon .icon-caution::before{content:"\f06d";color:#bf3400}
384
+ .admonitionblock td.icon .icon-important::before{content:"\f06a";color:#bf0000}
385
+ .conum[data-value]{display:inline-block;color:#fff!important;background:rgba(0,0,0,.8);border-radius:50%;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:"Open Sans","DejaVu Sans",sans-serif;font-style:normal;font-weight:bold}
386
+ .conum[data-value] *{color:#fff!important}
387
+ .conum[data-value]+b{display:none}
388
+ .conum[data-value]::after{content:attr(data-value)}
389
+ pre .conum[data-value]{position:relative;top:-.125em}
390
+ b.conum *{color:inherit!important}
391
+ .conum:not([data-value]):empty{display:none}
392
+ dt,th.tableblock,td.content,div.footnote{text-rendering:optimizeLegibility}
393
+ h1,h2,p,td.content,span.alt,summary{letter-spacing:-.01em}
394
+ p strong,td.content strong,div.footnote strong{letter-spacing:-.005em}
395
+ p,blockquote,dt,td.content,td.hdlist1,span.alt,summary{font-size:1.0625rem}
396
+ p{margin-bottom:1.25rem}
397
+ .sidebarblock p,.sidebarblock dt,.sidebarblock td.content,p.tableblock{font-size:1em}
398
+ .exampleblock>.content{background:#fffef7;border-color:#e0e0dc;box-shadow:0 1px 4px #e0e0dc}
399
+ .print-only{display:none!important}
400
+ @page{margin:1.25cm .75cm}
401
+ @media print{*{box-shadow:none!important;text-shadow:none!important}
402
+ html{font-size:80%}
403
+ a{color:inherit!important;text-decoration:underline!important}
404
+ a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none!important}
405
+ a[href^="http:"]:not(.bare)::after,a[href^="https:"]:not(.bare)::after{content:"(" attr(href) ")";display:inline-block;font-size:.875em;padding-left:.25em}
406
+ abbr[title]{border-bottom:1px dotted}
407
+ abbr[title]::after{content:" (" attr(title) ")"}
408
+ pre,blockquote,tr,img,object,svg{page-break-inside:avoid}
409
+ thead{display:table-header-group}
410
+ svg{max-width:100%}
411
+ p,blockquote,dt,td.content{font-size:1em;orphans:3;widows:3}
412
+ h2,h3,#toctitle,.sidebarblock>.content>.title{page-break-after:avoid}
413
+ #header,#content,#footnotes,#footer{max-width:none}
414
+ #toc,.sidebarblock,.exampleblock>.content{background:none!important}
415
+ #toc{border-bottom:1px solid #dddddf!important;padding-bottom:0!important}
416
+ body.book #header{text-align:center}
417
+ body.book #header>h1:first-child{border:0!important;margin:2.5em 0 1em}
418
+ body.book #header .details{border:0!important;display:block;padding:0!important}
419
+ body.book #header .details span:first-child{margin-left:0!important}
420
+ body.book #header .details br{display:block}
421
+ body.book #header .details br+span::before{content:none!important}
422
+ body.book #toc{border:0!important;text-align:left!important;padding:0!important;margin:0!important}
423
+ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-break-before:always}
424
+ .listingblock code[data-lang]::before{display:block}
425
+ #footer{padding:0 .9375em}
426
+ .hide-on-print{display:none!important}
427
+ .print-only{display:block!important}
428
+ .hide-for-print{display:none!important}
429
+ .show-for-print{display:inherit!important}}
430
+ @media amzn-kf8,print{#header>h1:first-child{margin-top:1.25rem}
431
+ .sect1{padding:0!important}
432
+ .sect1+.sect1{border:0}
433
+ #footer{background:none}
434
+ #footer-text{color:rgba(0,0,0,.6);font-size:.9em}}
435
+ @media amzn-kf8{#header,#content,#footnotes,#footer{padding:0}}
436
+ </style>
437
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
438
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.18.3/styles/github.min.css">
439
+ </head>
440
+ <body class="article toc2 toc-left">
441
+ <div id="header">
442
+ <h1>Grid Reference</h1>
443
+ <div id="toc" class="toc2">
444
+ <div id="toctitle">Table of Contents</div>
445
+ <ul class="sectlevel1">
446
+ <li><a href="#properties">1. Properties</a></li>
447
+ <li><a href="#methods">2. Methods</a>
448
+ <ul class="sectlevel2">
449
+ <li><a href="#getgrid-cell">2.1. <code>getGrid(): Cell[][]</code></a></li>
450
+ <li><a href="#resetgrid-void">2.2. <code>resetGrid(): void</code></a></li>
451
+ <li><a href="#foreachcallback-cell-cell-void-void">2.3. <code>forEach(callback: (cell: Cell) &#8658; void): void</code></a></li>
452
+ <li><a href="#isvalidcoordinatecoordinate-coordinate-boolean">2.4. <code>isValidCoordinate(coordinate: Coordinate): boolean</code></a></li>
453
+ <li><a href="#getcellcoordinate-coordinate-cell-null">2.5. <code>getCell(coordinate: Coordinate): Cell | null</code></a></li>
454
+ <li><a href="#setcellvaluecoordinate-coordinate-value-number-void">2.6. <code>setCellValue(coordinate: Coordinate, value: number): void</code></a></li>
455
+ <li><a href="#setcellcolorcoordinate-coordinate-color-color-void">2.7. <code>setCellColor(coordinate: Coordinate, color: Color): void</code></a></li>
456
+ <li><a href="#iscellactivecoordinate-coordinate-boolean">2.8. <code>isCellActive(coordinate: Coordinate): boolean</code></a></li>
457
+ <li><a href="#iscellinactivecoordinate-coordinate-boolean">2.9. <code>isCellInactive(coordinate: Coordinate): boolean</code></a></li>
458
+ <li><a href="#isrowfully-number-boolean">2.10. <code>isRowFull(y: number): boolean</code></a></li>
459
+ <li><a href="#isrowemptyy-number-boolean">2.11. <code>isRowEmpty(y: number): boolean</code></a></li>
460
+ <li><a href="#clearrowy-number-void">2.12. <code>clearRow(y: number): void</code></a></li>
461
+ <li><a href="#shiftrowsdownfromy-number-void">2.13. <code>shiftRowsDown(fromY: number): void</code></a></li>
462
+ <li><a href="#shiftrowsupfromy-number-void">2.14. <code>shiftRowsUp(fromY: number): void</code></a></li>
463
+ <li><a href="#clearfullrows-number">2.15. <code>clearFullRows(): number</code></a></li>
464
+ <li><a href="#iscolumnfullx-number-boolean">2.16. <code>isColumnFull(x: number): boolean</code></a></li>
465
+ <li><a href="#iscolumnemptyx-number-boolean">2.17. <code>isColumnEmpty(x: number): boolean</code></a></li>
466
+ <li><a href="#clearcolumnx-number-void">2.18. <code>clearColumn(x: number): void</code></a></li>
467
+ <li><a href="#shiftcolumnsrightfromx-number-void">2.19. <code>shiftColumnsRight(fromX: number): void</code></a></li>
468
+ <li><a href="#shiftcolumnsleftfromx-number-void">2.20. <code>shiftColumnsLeft(fromX: number): void</code></a></li>
469
+ <li><a href="#clearfullcolumns-number">2.21. <code>clearFullColumns(): number</code></a></li>
470
+ <li><a href="#isareaoccupiedcoordinates-coordinate-boolean">2.22. <code>isAreaOccupied(coordinates: Coordinate[]): boolean</code></a></li>
471
+ <li><a href="#fillareastart-coordinate-end-coordinate-value-number-color-color-void">2.23. <code>fillArea(start: Coordinate, end: Coordinate, value: number, color: Color): void</code></a></li>
472
+ <li><a href="#stamppiececoordinates-coordinate-value-number-color-color-void">2.24. <code>stampPiece(coordinates: Coordinate[], value: number, color: Color): void</code></a></li>
473
+ </ul>
474
+ </li>
475
+ <li><a href="#general-usage">3. General Usage</a></li>
476
+ </ul>
477
+ </div>
478
+ </div>
479
+ <div id="content">
480
+ <div id="preamble">
481
+ <div class="sectionbody">
482
+ <div class="paragraph">
483
+ <p>Interface defining the behaviors of a 2D grid of cells.</p>
484
+ </div>
485
+ </div>
486
+ </div>
487
+ <div class="sect1">
488
+ <h2 id="properties"><a class="link" href="#properties">1. Properties</a></h2>
489
+ <div class="sectionbody">
490
+ <table class="tableblock frame-all grid-all stretch">
491
+ <colgroup>
492
+ <col style="width: 20%;">
493
+ <col style="width: 20%;">
494
+ <col style="width: 60%;">
495
+ </colgroup>
496
+ <tbody>
497
+ <tr>
498
+ <td class="tableblock halign-left valign-top"><p class="tableblock">Name</p></td>
499
+ <td class="tableblock halign-left valign-top"><p class="tableblock">Type</p></td>
500
+ <td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td>
501
+ </tr>
502
+ <tr>
503
+ <td class="tableblock halign-left valign-top"><p class="tableblock"><code>width</code></p></td>
504
+ <td class="tableblock halign-left valign-top"><p class="tableblock"><code>number</code></p></td>
505
+ <td class="tableblock halign-left valign-top"><p class="tableblock">The number of columns in the grid.</p></td>
506
+ </tr>
507
+ <tr>
508
+ <td class="tableblock halign-left valign-top"><p class="tableblock"><code>height</code></p></td>
509
+ <td class="tableblock halign-left valign-top"><p class="tableblock"><code>number</code></p></td>
510
+ <td class="tableblock halign-left valign-top"><p class="tableblock">The number of rows in the grid.</p></td>
511
+ </tr>
512
+ </tbody>
513
+ </table>
514
+ </div>
515
+ </div>
516
+ <div class="sect1">
517
+ <h2 id="methods"><a class="link" href="#methods">2. Methods</a></h2>
518
+ <div class="sectionbody">
519
+ <div class="sect2">
520
+ <h3 id="getgrid-cell"><a class="link" href="#getgrid-cell">2.1. <code>getGrid(): <a href="../../types/Cell.html">Cell</a>[][]</code></a></h3>
521
+ <div class="paragraph">
522
+ <p>Returns the raw 2D array of <code><a href="../../types/Cell.html">Cell</a></code> objects representing the grid state.</p>
523
+ </div>
524
+ <div class="paragraph">
525
+ <p><strong>Returns</strong></p>
526
+ </div>
527
+ <div class="paragraph">
528
+ <p><code><a href="../../types/Cell.html">Cell</a>[][]</code> - The matrix representing the grid state.</p>
529
+ </div>
530
+ <hr>
531
+ </div>
532
+ <div class="sect2">
533
+ <h3 id="resetgrid-void"><a class="link" href="#resetgrid-void">2.2. <code>resetGrid(): void</code></a></h3>
534
+ <div class="paragraph">
535
+ <p>Clears all cell values and resets colors to <code><a href="../../enums/Color.html">DEFAULT</a></code>.</p>
536
+ </div>
537
+ <hr>
538
+ </div>
539
+ <div class="sect2">
540
+ <h3 id="foreachcallback-cell-cell-void-void"><a class="link" href="#foreachcallback-cell-cell-void-void">2.3. <code>forEach(callback: (cell: <a href="../../types/Cell.html">Cell</a>) &#8658; void): void</code></a></h3>
541
+ <div class="paragraph">
542
+ <p>Iterates over every cell in the grid, executing the provided callback.</p>
543
+ </div>
544
+ <div class="paragraph">
545
+ <p><strong>Parameters</strong></p>
546
+ </div>
547
+ <table class="tableblock frame-all grid-all stretch">
548
+ <colgroup>
549
+ <col style="width: 20%;">
550
+ <col style="width: 20%;">
551
+ <col style="width: 60%;">
552
+ </colgroup>
553
+ <tbody>
554
+ <tr>
555
+ <td class="tableblock halign-left valign-top"><p class="tableblock">Name</p></td>
556
+ <td class="tableblock halign-left valign-top"><p class="tableblock">Type</p></td>
557
+ <td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td>
558
+ </tr>
559
+ <tr>
560
+ <td class="tableblock halign-left valign-top"><p class="tableblock"><code>callback</code></p></td>
561
+ <td class="tableblock halign-left valign-top"><p class="tableblock"><code>(cell: <a href="../../types/Cell.html">Cell</a>) &#8658; void</code></p></td>
562
+ <td class="tableblock halign-left valign-top"><p class="tableblock">Function to execute for each cell.</p></td>
563
+ </tr>
564
+ </tbody>
565
+ </table>
566
+ <hr>
567
+ </div>
568
+ <div class="sect2">
569
+ <h3 id="isvalidcoordinatecoordinate-coordinate-boolean"><a class="link" href="#isvalidcoordinatecoordinate-coordinate-boolean">2.4. <code>isValidCoordinate(coordinate: <a href="../../types/Coordinate.html">Coordinate</a>): boolean</code></a></h3>
570
+ <div class="paragraph">
571
+ <p>Returns <code>true</code> if the given coordinate falls within the grid boundaries.</p>
572
+ </div>
573
+ <div class="paragraph">
574
+ <p><strong>Parameters</strong></p>
575
+ </div>
576
+ <table class="tableblock frame-all grid-all stretch">
577
+ <colgroup>
578
+ <col style="width: 20%;">
579
+ <col style="width: 20%;">
580
+ <col style="width: 60%;">
581
+ </colgroup>
582
+ <tbody>
583
+ <tr>
584
+ <td class="tableblock halign-left valign-top"><p class="tableblock">Name</p></td>
585
+ <td class="tableblock halign-left valign-top"><p class="tableblock">Type</p></td>
586
+ <td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td>
587
+ </tr>
588
+ <tr>
589
+ <td class="tableblock halign-left valign-top"><p class="tableblock"><code>coordinate</code></p></td>
590
+ <td class="tableblock halign-left valign-top"><p class="tableblock"><code><a href="../../types/Coordinate.html">Coordinate</a></code></p></td>
591
+ <td class="tableblock halign-left valign-top"><p class="tableblock">The <code>{x, y}</code> point to validate.</p></td>
592
+ </tr>
593
+ </tbody>
594
+ </table>
595
+ <div class="paragraph">
596
+ <p><strong>Returns</strong></p>
597
+ </div>
598
+ <div class="paragraph">
599
+ <p><code>boolean</code> - <code>true</code> if valid, <code>false</code> otherwise.</p>
600
+ </div>
601
+ <hr>
602
+ </div>
603
+ <div class="sect2">
604
+ <h3 id="getcellcoordinate-coordinate-cell-null"><a class="link" href="#getcellcoordinate-coordinate-cell-null">2.5. <code>getCell(coordinate: <a href="../../types/Coordinate.html">Coordinate</a>): <a href="../../types/Cell.html">Cell</a> | null</code></a></h3>
605
+ <div class="paragraph">
606
+ <p>Retrieves the <code><a href="../../types/Cell.html">Cell</a></code> object at the specified coordinate.</p>
607
+ </div>
608
+ <div class="paragraph">
609
+ <p><strong>Parameters</strong></p>
610
+ </div>
611
+ <table class="tableblock frame-all grid-all stretch">
612
+ <colgroup>
613
+ <col style="width: 20%;">
614
+ <col style="width: 20%;">
615
+ <col style="width: 60%;">
616
+ </colgroup>
617
+ <tbody>
618
+ <tr>
619
+ <td class="tableblock halign-left valign-top"><p class="tableblock">Name</p></td>
620
+ <td class="tableblock halign-left valign-top"><p class="tableblock">Type</p></td>
621
+ <td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td>
622
+ </tr>
623
+ <tr>
624
+ <td class="tableblock halign-left valign-top"><p class="tableblock"><code>coordinate</code></p></td>
625
+ <td class="tableblock halign-left valign-top"><p class="tableblock"><code><a href="../../types/Coordinate.html">Coordinate</a></code></p></td>
626
+ <td class="tableblock halign-left valign-top"><p class="tableblock">The <code>{x, y}</code> position to query.</p></td>
627
+ </tr>
628
+ </tbody>
629
+ </table>
630
+ <div class="paragraph">
631
+ <p><strong>Returns</strong></p>
632
+ </div>
633
+ <div class="paragraph">
634
+ <p><code><a href="../../types/Cell.html">Cell</a> | null</code> - The cell object, or <code>null</code> if the coordinate is out of bounds.</p>
635
+ </div>
636
+ <hr>
637
+ </div>
638
+ <div class="sect2">
639
+ <h3 id="setcellvaluecoordinate-coordinate-value-number-void"><a class="link" href="#setcellvaluecoordinate-coordinate-value-number-void">2.6. <code>setCellValue(coordinate: <a href="../../types/Coordinate.html">Coordinate</a>, value: number): void</code></a></h3>
640
+ <div class="paragraph">
641
+ <p>Updates the numeric value of the cell at the given coordinate.</p>
642
+ </div>
643
+ <div class="paragraph">
644
+ <p><strong>Parameters</strong></p>
645
+ </div>
646
+ <table class="tableblock frame-all grid-all stretch">
647
+ <colgroup>
648
+ <col style="width: 20%;">
649
+ <col style="width: 20%;">
650
+ <col style="width: 60%;">
651
+ </colgroup>
652
+ <tbody>
653
+ <tr>
654
+ <td class="tableblock halign-left valign-top"><p class="tableblock">Name</p></td>
655
+ <td class="tableblock halign-left valign-top"><p class="tableblock">Type</p></td>
656
+ <td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td>
657
+ </tr>
658
+ <tr>
659
+ <td class="tableblock halign-left valign-top"><p class="tableblock"><code>coordinate</code></p></td>
660
+ <td class="tableblock halign-left valign-top"><p class="tableblock"><code><a href="../../types/Coordinate.html">Coordinate</a></code></p></td>
661
+ <td class="tableblock halign-left valign-top"><p class="tableblock">Target position.</p></td>
662
+ </tr>
663
+ <tr>
664
+ <td class="tableblock halign-left valign-top"><p class="tableblock"><code>value</code></p></td>
665
+ <td class="tableblock halign-left valign-top"><p class="tableblock"><code>number</code></p></td>
666
+ <td class="tableblock halign-left valign-top"><p class="tableblock">New status value (0 for inactive, &gt;0 for active).</p></td>
667
+ </tr>
668
+ </tbody>
669
+ </table>
670
+ <hr>
671
+ </div>
672
+ <div class="sect2">
673
+ <h3 id="setcellcolorcoordinate-coordinate-color-color-void"><a class="link" href="#setcellcolorcoordinate-coordinate-color-color-void">2.7. <code>setCellColor(coordinate: <a href="../../types/Coordinate.html">Coordinate</a>, color: <a href="../../enums/Color.html">Color</a>): void</code></a></h3>
674
+ <div class="paragraph">
675
+ <p>Updates the visual color of the cell at the given coordinate.</p>
676
+ </div>
677
+ <div class="paragraph">
678
+ <p><strong>Parameters</strong></p>
679
+ </div>
680
+ <table class="tableblock frame-all grid-all stretch">
681
+ <colgroup>
682
+ <col style="width: 20%;">
683
+ <col style="width: 20%;">
684
+ <col style="width: 60%;">
685
+ </colgroup>
686
+ <tbody>
687
+ <tr>
688
+ <td class="tableblock halign-left valign-top"><p class="tableblock">Name</p></td>
689
+ <td class="tableblock halign-left valign-top"><p class="tableblock">Type</p></td>
690
+ <td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td>
691
+ </tr>
692
+ <tr>
693
+ <td class="tableblock halign-left valign-top"><p class="tableblock"><code>coordinate</code></p></td>
694
+ <td class="tableblock halign-left valign-top"><p class="tableblock"><code><a href="../../types/Coordinate.html">Coordinate</a></code></p></td>
695
+ <td class="tableblock halign-left valign-top"><p class="tableblock">Target position.</p></td>
696
+ </tr>
697
+ <tr>
698
+ <td class="tableblock halign-left valign-top"><p class="tableblock"><code>color</code></p></td>
699
+ <td class="tableblock halign-left valign-top"><p class="tableblock"><code><a href="../../enums/Color.html">Color</a></code></p></td>
700
+ <td class="tableblock halign-left valign-top"><p class="tableblock">Enum value representing the new color.</p></td>
701
+ </tr>
702
+ </tbody>
703
+ </table>
704
+ <hr>
705
+ </div>
706
+ <div class="sect2">
707
+ <h3 id="iscellactivecoordinate-coordinate-boolean"><a class="link" href="#iscellactivecoordinate-coordinate-boolean">2.8. <code>isCellActive(coordinate: <a href="../../types/Coordinate.html">Coordinate</a>): boolean</code></a></h3>
708
+ <div class="paragraph">
709
+ <p>Returns <code>true</code> if the cell&#8217;s value is greater than <code>0</code>.</p>
710
+ </div>
711
+ <div class="paragraph">
712
+ <p><strong>Parameters</strong></p>
713
+ </div>
714
+ <table class="tableblock frame-all grid-all stretch">
715
+ <colgroup>
716
+ <col style="width: 20%;">
717
+ <col style="width: 20%;">
718
+ <col style="width: 60%;">
719
+ </colgroup>
720
+ <tbody>
721
+ <tr>
722
+ <td class="tableblock halign-left valign-top"><p class="tableblock">Name</p></td>
723
+ <td class="tableblock halign-left valign-top"><p class="tableblock">Type</p></td>
724
+ <td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td>
725
+ </tr>
726
+ <tr>
727
+ <td class="tableblock halign-left valign-top"><p class="tableblock"><code>coordinate</code></p></td>
728
+ <td class="tableblock halign-left valign-top"><p class="tableblock"><code><a href="../../types/Coordinate.html">Coordinate</a></code></p></td>
729
+ <td class="tableblock halign-left valign-top"><p class="tableblock">Point to check.</p></td>
730
+ </tr>
731
+ </tbody>
732
+ </table>
733
+ <div class="paragraph">
734
+ <p><strong>Returns</strong></p>
735
+ </div>
736
+ <div class="paragraph">
737
+ <p><code>boolean</code> - <code>true</code> if the cell value is greater than 0.</p>
738
+ </div>
739
+ <hr>
740
+ </div>
741
+ <div class="sect2">
742
+ <h3 id="iscellinactivecoordinate-coordinate-boolean"><a class="link" href="#iscellinactivecoordinate-coordinate-boolean">2.9. <code>isCellInactive(coordinate: <a href="../../types/Coordinate.html">Coordinate</a>): boolean</code></a></h3>
743
+ <div class="paragraph">
744
+ <p>Returns <code>true</code> if the cell&#8217;s value is <code>0</code>.</p>
745
+ </div>
746
+ <div class="paragraph">
747
+ <p><strong>Parameters</strong></p>
748
+ </div>
749
+ <table class="tableblock frame-all grid-all stretch">
750
+ <colgroup>
751
+ <col style="width: 20%;">
752
+ <col style="width: 20%;">
753
+ <col style="width: 60%;">
754
+ </colgroup>
755
+ <tbody>
756
+ <tr>
757
+ <td class="tableblock halign-left valign-top"><p class="tableblock">Name</p></td>
758
+ <td class="tableblock halign-left valign-top"><p class="tableblock">Type</p></td>
759
+ <td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td>
760
+ </tr>
761
+ <tr>
762
+ <td class="tableblock halign-left valign-top"><p class="tableblock"><code>coordinate</code></p></td>
763
+ <td class="tableblock halign-left valign-top"><p class="tableblock"><code><a href="../../types/Coordinate.html">Coordinate</a></code></p></td>
764
+ <td class="tableblock halign-left valign-top"><p class="tableblock">Point to check.</p></td>
765
+ </tr>
766
+ </tbody>
767
+ </table>
768
+ <div class="paragraph">
769
+ <p><strong>Returns</strong></p>
770
+ </div>
771
+ <div class="paragraph">
772
+ <p><code>boolean</code> - <code>true</code> if the cell value is exactly 0.</p>
773
+ </div>
774
+ <hr>
775
+ </div>
776
+ <div class="sect2">
777
+ <h3 id="isrowfully-number-boolean"><a class="link" href="#isrowfully-number-boolean">2.10. <code>isRowFull(y: number): boolean</code></a></h3>
778
+ <div class="paragraph">
779
+ <p>Returns <code>true</code> if every cell in the specified row <code>y</code> is active.</p>
780
+ </div>
781
+ <div class="paragraph">
782
+ <p><strong>Parameters</strong></p>
783
+ </div>
784
+ <table class="tableblock frame-all grid-all stretch">
785
+ <colgroup>
786
+ <col style="width: 20%;">
787
+ <col style="width: 20%;">
788
+ <col style="width: 60%;">
789
+ </colgroup>
790
+ <tbody>
791
+ <tr>
792
+ <td class="tableblock halign-left valign-top"><p class="tableblock">Name</p></td>
793
+ <td class="tableblock halign-left valign-top"><p class="tableblock">Type</p></td>
794
+ <td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td>
795
+ </tr>
796
+ <tr>
797
+ <td class="tableblock halign-left valign-top"><p class="tableblock"><code>y</code></p></td>
798
+ <td class="tableblock halign-left valign-top"><p class="tableblock"><code>number</code></p></td>
799
+ <td class="tableblock halign-left valign-top"><p class="tableblock">Row index to check.</p></td>
800
+ </tr>
801
+ </tbody>
802
+ </table>
803
+ <div class="paragraph">
804
+ <p><strong>Returns</strong></p>
805
+ </div>
806
+ <div class="paragraph">
807
+ <p><code>boolean</code> - <code>true</code> if full.</p>
808
+ </div>
809
+ <hr>
810
+ </div>
811
+ <div class="sect2">
812
+ <h3 id="isrowemptyy-number-boolean"><a class="link" href="#isrowemptyy-number-boolean">2.11. <code>isRowEmpty(y: number): boolean</code></a></h3>
813
+ <div class="paragraph">
814
+ <p>Returns <code>true</code> if every cell in the specified row <code>y</code> is inactive.</p>
815
+ </div>
816
+ <div class="paragraph">
817
+ <p><strong>Parameters</strong></p>
818
+ </div>
819
+ <table class="tableblock frame-all grid-all stretch">
820
+ <colgroup>
821
+ <col style="width: 20%;">
822
+ <col style="width: 20%;">
823
+ <col style="width: 60%;">
824
+ </colgroup>
825
+ <tbody>
826
+ <tr>
827
+ <td class="tableblock halign-left valign-top"><p class="tableblock">Name</p></td>
828
+ <td class="tableblock halign-left valign-top"><p class="tableblock">Type</p></td>
829
+ <td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td>
830
+ </tr>
831
+ <tr>
832
+ <td class="tableblock halign-left valign-top"><p class="tableblock"><code>y</code></p></td>
833
+ <td class="tableblock halign-left valign-top"><p class="tableblock"><code>number</code></p></td>
834
+ <td class="tableblock halign-left valign-top"><p class="tableblock">Row index to check.</p></td>
835
+ </tr>
836
+ </tbody>
837
+ </table>
838
+ <div class="paragraph">
839
+ <p><strong>Returns</strong></p>
840
+ </div>
841
+ <div class="paragraph">
842
+ <p><code>boolean</code> - <code>true</code> if empty.</p>
843
+ </div>
844
+ <hr>
845
+ </div>
846
+ <div class="sect2">
847
+ <h3 id="clearrowy-number-void"><a class="link" href="#clearrowy-number-void">2.12. <code>clearRow(y: number): void</code></a></h3>
848
+ <div class="paragraph">
849
+ <p>Resets all cells in row <code>y</code> to their inactive state.</p>
850
+ </div>
851
+ <div class="paragraph">
852
+ <p><strong>Parameters</strong></p>
853
+ </div>
854
+ <table class="tableblock frame-all grid-all stretch">
855
+ <colgroup>
856
+ <col style="width: 20%;">
857
+ <col style="width: 20%;">
858
+ <col style="width: 60%;">
859
+ </colgroup>
860
+ <tbody>
861
+ <tr>
862
+ <td class="tableblock halign-left valign-top"><p class="tableblock">Name</p></td>
863
+ <td class="tableblock halign-left valign-top"><p class="tableblock">Type</p></td>
864
+ <td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td>
865
+ </tr>
866
+ <tr>
867
+ <td class="tableblock halign-left valign-top"><p class="tableblock"><code>y</code></p></td>
868
+ <td class="tableblock halign-left valign-top"><p class="tableblock"><code>number</code></p></td>
869
+ <td class="tableblock halign-left valign-top"><p class="tableblock">Row index to clear.</p></td>
870
+ </tr>
871
+ </tbody>
872
+ </table>
873
+ <hr>
874
+ </div>
875
+ <div class="sect2">
876
+ <h3 id="shiftrowsdownfromy-number-void"><a class="link" href="#shiftrowsdownfromy-number-void">2.13. <code>shiftRowsDown(fromY: number): void</code></a></h3>
877
+ <div class="paragraph">
878
+ <p>Moves all rows above (and including) <code>fromY</code> down by one position.</p>
879
+ </div>
880
+ <div class="paragraph">
881
+ <p><strong>Parameters</strong></p>
882
+ </div>
883
+ <table class="tableblock frame-all grid-all stretch">
884
+ <colgroup>
885
+ <col style="width: 20%;">
886
+ <col style="width: 20%;">
887
+ <col style="width: 60%;">
888
+ </colgroup>
889
+ <tbody>
890
+ <tr>
891
+ <td class="tableblock halign-left valign-top"><p class="tableblock">Name</p></td>
892
+ <td class="tableblock halign-left valign-top"><p class="tableblock">Type</p></td>
893
+ <td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td>
894
+ </tr>
895
+ <tr>
896
+ <td class="tableblock halign-left valign-top"><p class="tableblock"><code>fromY</code></p></td>
897
+ <td class="tableblock halign-left valign-top"><p class="tableblock"><code>number</code></p></td>
898
+ <td class="tableblock halign-left valign-top"><p class="tableblock">The row index to start shifting from.</p></td>
899
+ </tr>
900
+ </tbody>
901
+ </table>
902
+ <hr>
903
+ </div>
904
+ <div class="sect2">
905
+ <h3 id="shiftrowsupfromy-number-void"><a class="link" href="#shiftrowsupfromy-number-void">2.14. <code>shiftRowsUp(fromY: number): void</code></a></h3>
906
+ <div class="paragraph">
907
+ <p>Moves all rows below (and including) <code>fromY</code> up by one position.</p>
908
+ </div>
909
+ <div class="paragraph">
910
+ <p><strong>Parameters</strong></p>
911
+ </div>
912
+ <table class="tableblock frame-all grid-all stretch">
913
+ <colgroup>
914
+ <col style="width: 20%;">
915
+ <col style="width: 20%;">
916
+ <col style="width: 60%;">
917
+ </colgroup>
918
+ <tbody>
919
+ <tr>
920
+ <td class="tableblock halign-left valign-top"><p class="tableblock">Name</p></td>
921
+ <td class="tableblock halign-left valign-top"><p class="tableblock">Type</p></td>
922
+ <td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td>
923
+ </tr>
924
+ <tr>
925
+ <td class="tableblock halign-left valign-top"><p class="tableblock"><code>fromY</code></p></td>
926
+ <td class="tableblock halign-left valign-top"><p class="tableblock"><code>number</code></p></td>
927
+ <td class="tableblock halign-left valign-top"><p class="tableblock">The row index to start shifting from.</p></td>
928
+ </tr>
929
+ </tbody>
930
+ </table>
931
+ <hr>
932
+ </div>
933
+ <div class="sect2">
934
+ <h3 id="clearfullrows-number"><a class="link" href="#clearfullrows-number">2.15. <code>clearFullRows(): number</code></a></h3>
935
+ <div class="paragraph">
936
+ <p>Detects, clears, and shifts rows for all full rows in the grid.</p>
937
+ </div>
938
+ <div class="paragraph">
939
+ <p><strong>Returns</strong></p>
940
+ </div>
941
+ <div class="paragraph">
942
+ <p><code>number</code> - The total count of cleared rows.</p>
943
+ </div>
944
+ <hr>
945
+ </div>
946
+ <div class="sect2">
947
+ <h3 id="iscolumnfullx-number-boolean"><a class="link" href="#iscolumnfullx-number-boolean">2.16. <code>isColumnFull(x: number): boolean</code></a></h3>
948
+ <div class="paragraph">
949
+ <p>Returns <code>true</code> if every cell in column <code>x</code> is active.</p>
950
+ </div>
951
+ <div class="paragraph">
952
+ <p><strong>Parameters</strong></p>
953
+ </div>
954
+ <table class="tableblock frame-all grid-all stretch">
955
+ <colgroup>
956
+ <col style="width: 20%;">
957
+ <col style="width: 20%;">
958
+ <col style="width: 60%;">
959
+ </colgroup>
960
+ <tbody>
961
+ <tr>
962
+ <td class="tableblock halign-left valign-top"><p class="tableblock">Name</p></td>
963
+ <td class="tableblock halign-left valign-top"><p class="tableblock">Type</p></td>
964
+ <td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td>
965
+ </tr>
966
+ <tr>
967
+ <td class="tableblock halign-left valign-top"><p class="tableblock"><code>x</code></p></td>
968
+ <td class="tableblock halign-left valign-top"><p class="tableblock"><code>number</code></p></td>
969
+ <td class="tableblock halign-left valign-top"><p class="tableblock">Column index to check.</p></td>
970
+ </tr>
971
+ </tbody>
972
+ </table>
973
+ <div class="paragraph">
974
+ <p><strong>Returns</strong></p>
975
+ </div>
976
+ <div class="paragraph">
977
+ <p><code>boolean</code> - <code>true</code> if full.</p>
978
+ </div>
979
+ <hr>
980
+ </div>
981
+ <div class="sect2">
982
+ <h3 id="iscolumnemptyx-number-boolean"><a class="link" href="#iscolumnemptyx-number-boolean">2.17. <code>isColumnEmpty(x: number): boolean</code></a></h3>
983
+ <div class="paragraph">
984
+ <p>Returns <code>true</code> if every cell in column <code>x</code> is inactive.</p>
985
+ </div>
986
+ <div class="paragraph">
987
+ <p><strong>Parameters</strong></p>
988
+ </div>
989
+ <table class="tableblock frame-all grid-all stretch">
990
+ <colgroup>
991
+ <col style="width: 20%;">
992
+ <col style="width: 20%;">
993
+ <col style="width: 60%;">
994
+ </colgroup>
995
+ <tbody>
996
+ <tr>
997
+ <td class="tableblock halign-left valign-top"><p class="tableblock">Name</p></td>
998
+ <td class="tableblock halign-left valign-top"><p class="tableblock">Type</p></td>
999
+ <td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td>
1000
+ </tr>
1001
+ <tr>
1002
+ <td class="tableblock halign-left valign-top"><p class="tableblock"><code>x</code></p></td>
1003
+ <td class="tableblock halign-left valign-top"><p class="tableblock"><code>number</code></p></td>
1004
+ <td class="tableblock halign-left valign-top"><p class="tableblock">Column index to check.</p></td>
1005
+ </tr>
1006
+ </tbody>
1007
+ </table>
1008
+ <div class="paragraph">
1009
+ <p><strong>Returns</strong></p>
1010
+ </div>
1011
+ <div class="paragraph">
1012
+ <p><code>boolean</code> - <code>true</code> if empty.</p>
1013
+ </div>
1014
+ <hr>
1015
+ </div>
1016
+ <div class="sect2">
1017
+ <h3 id="clearcolumnx-number-void"><a class="link" href="#clearcolumnx-number-void">2.18. <code>clearColumn(x: number): void</code></a></h3>
1018
+ <div class="paragraph">
1019
+ <p>Resets all cells in column <code>x</code> to their inactive state.</p>
1020
+ </div>
1021
+ <div class="paragraph">
1022
+ <p><strong>Parameters</strong></p>
1023
+ </div>
1024
+ <table class="tableblock frame-all grid-all stretch">
1025
+ <colgroup>
1026
+ <col style="width: 20%;">
1027
+ <col style="width: 20%;">
1028
+ <col style="width: 60%;">
1029
+ </colgroup>
1030
+ <tbody>
1031
+ <tr>
1032
+ <td class="tableblock halign-left valign-top"><p class="tableblock">Name</p></td>
1033
+ <td class="tableblock halign-left valign-top"><p class="tableblock">Type</p></td>
1034
+ <td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td>
1035
+ </tr>
1036
+ <tr>
1037
+ <td class="tableblock halign-left valign-top"><p class="tableblock"><code>x</code></p></td>
1038
+ <td class="tableblock halign-left valign-top"><p class="tableblock"><code>number</code></p></td>
1039
+ <td class="tableblock halign-left valign-top"><p class="tableblock">Column index to clear.</p></td>
1040
+ </tr>
1041
+ </tbody>
1042
+ </table>
1043
+ <hr>
1044
+ </div>
1045
+ <div class="sect2">
1046
+ <h3 id="shiftcolumnsrightfromx-number-void"><a class="link" href="#shiftcolumnsrightfromx-number-void">2.19. <code>shiftColumnsRight(fromX: number): void</code></a></h3>
1047
+ <div class="paragraph">
1048
+ <p>Moves all columns to the left of <code>fromX</code> one position to the right.</p>
1049
+ </div>
1050
+ <div class="paragraph">
1051
+ <p><strong>Parameters</strong></p>
1052
+ </div>
1053
+ <table class="tableblock frame-all grid-all stretch">
1054
+ <colgroup>
1055
+ <col style="width: 20%;">
1056
+ <col style="width: 20%;">
1057
+ <col style="width: 60%;">
1058
+ </colgroup>
1059
+ <tbody>
1060
+ <tr>
1061
+ <td class="tableblock halign-left valign-top"><p class="tableblock">Name</p></td>
1062
+ <td class="tableblock halign-left valign-top"><p class="tableblock">Type</p></td>
1063
+ <td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td>
1064
+ </tr>
1065
+ <tr>
1066
+ <td class="tableblock halign-left valign-top"><p class="tableblock"><code>fromX</code></p></td>
1067
+ <td class="tableblock halign-left valign-top"><p class="tableblock"><code>number</code></p></td>
1068
+ <td class="tableblock halign-left valign-top"><p class="tableblock">The column index to start shifting from.</p></td>
1069
+ </tr>
1070
+ </tbody>
1071
+ </table>
1072
+ <hr>
1073
+ </div>
1074
+ <div class="sect2">
1075
+ <h3 id="shiftcolumnsleftfromx-number-void"><a class="link" href="#shiftcolumnsleftfromx-number-void">2.20. <code>shiftColumnsLeft(fromX: number): void</code></a></h3>
1076
+ <div class="paragraph">
1077
+ <p>Moves all columns to the right of <code>fromX</code> one position to the left.</p>
1078
+ </div>
1079
+ <div class="paragraph">
1080
+ <p><strong>Parameters</strong></p>
1081
+ </div>
1082
+ <table class="tableblock frame-all grid-all stretch">
1083
+ <colgroup>
1084
+ <col style="width: 20%;">
1085
+ <col style="width: 20%;">
1086
+ <col style="width: 60%;">
1087
+ </colgroup>
1088
+ <tbody>
1089
+ <tr>
1090
+ <td class="tableblock halign-left valign-top"><p class="tableblock">Name</p></td>
1091
+ <td class="tableblock halign-left valign-top"><p class="tableblock">Type</p></td>
1092
+ <td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td>
1093
+ </tr>
1094
+ <tr>
1095
+ <td class="tableblock halign-left valign-top"><p class="tableblock"><code>fromX</code></p></td>
1096
+ <td class="tableblock halign-left valign-top"><p class="tableblock"><code>number</code></p></td>
1097
+ <td class="tableblock halign-left valign-top"><p class="tableblock">The column index to start shifting from.</p></td>
1098
+ </tr>
1099
+ </tbody>
1100
+ </table>
1101
+ <hr>
1102
+ </div>
1103
+ <div class="sect2">
1104
+ <h3 id="clearfullcolumns-number"><a class="link" href="#clearfullcolumns-number">2.21. <code>clearFullColumns(): number</code></a></h3>
1105
+ <div class="paragraph">
1106
+ <p>Detects and clears all full columns.</p>
1107
+ </div>
1108
+ <div class="paragraph">
1109
+ <p><strong>Returns</strong></p>
1110
+ </div>
1111
+ <div class="paragraph">
1112
+ <p><code>number</code> - The total count of cleared columns.</p>
1113
+ </div>
1114
+ <hr>
1115
+ </div>
1116
+ <div class="sect2">
1117
+ <h3 id="isareaoccupiedcoordinates-coordinate-boolean"><a class="link" href="#isareaoccupiedcoordinates-coordinate-boolean">2.22. <code>isAreaOccupied(coordinates: <a href="../../types/Coordinate.html">Coordinate</a>[]): boolean</code></a></h3>
1118
+ <div class="paragraph">
1119
+ <p>Returns <code>true</code> if any of the provided coordinates are already active in the grid. Used for collision detection.</p>
1120
+ </div>
1121
+ <div class="paragraph">
1122
+ <p><strong>Parameters</strong></p>
1123
+ </div>
1124
+ <table class="tableblock frame-all grid-all stretch">
1125
+ <colgroup>
1126
+ <col style="width: 20%;">
1127
+ <col style="width: 20%;">
1128
+ <col style="width: 60%;">
1129
+ </colgroup>
1130
+ <tbody>
1131
+ <tr>
1132
+ <td class="tableblock halign-left valign-top"><p class="tableblock">Name</p></td>
1133
+ <td class="tableblock halign-left valign-top"><p class="tableblock">Type</p></td>
1134
+ <td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td>
1135
+ </tr>
1136
+ <tr>
1137
+ <td class="tableblock halign-left valign-top"><p class="tableblock"><code>coordinates</code></p></td>
1138
+ <td class="tableblock halign-left valign-top"><p class="tableblock"><code><a href="../../types/Coordinate.html">Coordinate</a>[]</code></p></td>
1139
+ <td class="tableblock halign-left valign-top"><p class="tableblock">Array of <code>{x, y}</code> points representing a shape or piece.</p></td>
1140
+ </tr>
1141
+ </tbody>
1142
+ </table>
1143
+ <div class="paragraph">
1144
+ <p><strong>Returns</strong></p>
1145
+ </div>
1146
+ <div class="paragraph">
1147
+ <p><code>boolean</code> - <code>true</code> if occupied.</p>
1148
+ </div>
1149
+ <hr>
1150
+ </div>
1151
+ <div class="sect2">
1152
+ <h3 id="fillareastart-coordinate-end-coordinate-value-number-color-color-void"><a class="link" href="#fillareastart-coordinate-end-coordinate-value-number-color-color-void">2.23. <code>fillArea(start: <a href="../../types/Coordinate.html">Coordinate</a>, end: <a href="../../types/Coordinate.html">Coordinate</a>, value: number, color: <a href="../../enums/Color.html">Color</a>): void</code></a></h3>
1153
+ <div class="paragraph">
1154
+ <p>Batch updates a rectangular area defined by <code>start</code> and <code>end</code> with the given value and color.</p>
1155
+ </div>
1156
+ <div class="paragraph">
1157
+ <p><strong>Parameters</strong></p>
1158
+ </div>
1159
+ <table class="tableblock frame-all grid-all stretch">
1160
+ <colgroup>
1161
+ <col style="width: 20%;">
1162
+ <col style="width: 20%;">
1163
+ <col style="width: 60%;">
1164
+ </colgroup>
1165
+ <tbody>
1166
+ <tr>
1167
+ <td class="tableblock halign-left valign-top"><p class="tableblock">Name</p></td>
1168
+ <td class="tableblock halign-left valign-top"><p class="tableblock">Type</p></td>
1169
+ <td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td>
1170
+ </tr>
1171
+ <tr>
1172
+ <td class="tableblock halign-left valign-top"><p class="tableblock"><code>start</code></p></td>
1173
+ <td class="tableblock halign-left valign-top"><p class="tableblock"><code><a href="../../types/Coordinate.html">Coordinate</a></code></p></td>
1174
+ <td class="tableblock halign-left valign-top"><p class="tableblock">Top-left corner of the rectangle.</p></td>
1175
+ </tr>
1176
+ <tr>
1177
+ <td class="tableblock halign-left valign-top"><p class="tableblock"><code>end</code></p></td>
1178
+ <td class="tableblock halign-left valign-top"><p class="tableblock"><code><a href="../../types/Coordinate.html">Coordinate</a></code></p></td>
1179
+ <td class="tableblock halign-left valign-top"><p class="tableblock">Bottom-right corner of the rectangle.</p></td>
1180
+ </tr>
1181
+ <tr>
1182
+ <td class="tableblock halign-left valign-top"><p class="tableblock"><code>value</code></p></td>
1183
+ <td class="tableblock halign-left valign-top"><p class="tableblock"><code>number</code></p></td>
1184
+ <td class="tableblock halign-left valign-top"><p class="tableblock">Value to apply to all cells in the area.</p></td>
1185
+ </tr>
1186
+ <tr>
1187
+ <td class="tableblock halign-left valign-top"><p class="tableblock"><code>color</code></p></td>
1188
+ <td class="tableblock halign-left valign-top"><p class="tableblock"><code><a href="../../enums/Color.html">Color</a></code></p></td>
1189
+ <td class="tableblock halign-left valign-top"><p class="tableblock">Color to apply to all cells in the area.</p></td>
1190
+ </tr>
1191
+ </tbody>
1192
+ </table>
1193
+ <hr>
1194
+ </div>
1195
+ <div class="sect2">
1196
+ <h3 id="stamppiececoordinates-coordinate-value-number-color-color-void"><a class="link" href="#stamppiececoordinates-coordinate-value-number-color-color-void">2.24. <code>stampPiece(coordinates: <a href="../../types/Coordinate.html">Coordinate</a>[], value: number, color: <a href="../../enums/Color.html">Color</a>): void</code></a></h3>
1197
+ <div class="paragraph">
1198
+ <p>Applies the specified value and color to multiple discrete coordinates simultaneously.</p>
1199
+ </div>
1200
+ <div class="paragraph">
1201
+ <p><strong>Parameters</strong></p>
1202
+ </div>
1203
+ <table class="tableblock frame-all grid-all stretch">
1204
+ <colgroup>
1205
+ <col style="width: 20%;">
1206
+ <col style="width: 20%;">
1207
+ <col style="width: 60%;">
1208
+ </colgroup>
1209
+ <tbody>
1210
+ <tr>
1211
+ <td class="tableblock halign-left valign-top"><p class="tableblock">Name</p></td>
1212
+ <td class="tableblock halign-left valign-top"><p class="tableblock">Type</p></td>
1213
+ <td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td>
1214
+ </tr>
1215
+ <tr>
1216
+ <td class="tableblock halign-left valign-top"><p class="tableblock"><code>coordinates</code></p></td>
1217
+ <td class="tableblock halign-left valign-top"><p class="tableblock"><code><a href="../../types/Coordinate.html">Coordinate</a>[]</code></p></td>
1218
+ <td class="tableblock halign-left valign-top"><p class="tableblock">Points to update.</p></td>
1219
+ </tr>
1220
+ <tr>
1221
+ <td class="tableblock halign-left valign-top"><p class="tableblock"><code>value</code></p></td>
1222
+ <td class="tableblock halign-left valign-top"><p class="tableblock"><code>number</code></p></td>
1223
+ <td class="tableblock halign-left valign-top"><p class="tableblock">New cell value.</p></td>
1224
+ </tr>
1225
+ <tr>
1226
+ <td class="tableblock halign-left valign-top"><p class="tableblock"><code>color</code></p></td>
1227
+ <td class="tableblock halign-left valign-top"><p class="tableblock"><code><a href="../../enums/Color.html">Color</a></code></p></td>
1228
+ <td class="tableblock halign-left valign-top"><p class="tableblock">New cell color.</p></td>
1229
+ </tr>
1230
+ </tbody>
1231
+ </table>
1232
+ </div>
1233
+ </div>
1234
+ </div>
1235
+ <div class="sect1">
1236
+ <h2 id="general-usage"><a class="link" href="#general-usage">3. General Usage</a></h2>
1237
+ <div class="sectionbody">
1238
+ <div class="paragraph">
1239
+ <p>The <code>Grid</code> interface is implemented by both the main <code><a href="../../modules/GameGrid.html">GameGrid</a></code> and the <code><a href="../../modules/GameHudGrid.html">GameHudGrid</a></code>.</p>
1240
+ </div>
1241
+ </div>
1242
+ </div>
1243
+ </div>
1244
+ <div id="footer">
1245
+ <div id="footer-text">
1246
+ </div>
1247
+ </div>
1248
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.18.3/highlight.min.js"></script>
1249
+ <script>
1250
+ if (!hljs.initHighlighting.called) {
1251
+ hljs.initHighlighting.called = true
1252
+ ;[].slice.call(document.querySelectorAll('pre.highlight > code[data-lang]')).forEach(function (el) { hljs.highlightBlock(el) })
1253
+ }
1254
+ </script>
1255
+ </body>
1256
+ </html>