@nayan-ui/games 1.20.0 → 1.21.0

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 (552) hide show
  1. package/lib/module/games/arrows/Arrows.js +1 -1
  2. package/lib/module/games/arrows/ArrowsScene.js +1 -1
  3. package/lib/module/games/balloon-blaster/BalloonBlaster.js +1 -1
  4. package/lib/module/games/balloon-blaster/BalloonBlasterScene.js +1 -1
  5. package/lib/module/games/bike-racing/BikeMeshes.js +1 -1
  6. package/lib/module/games/bike-racing/BikeRacing.js +1 -1
  7. package/lib/module/games/bike-racing/BikeRacingConstants.js +1 -1
  8. package/lib/module/games/bike-racing/BikeRacingScene.js +1 -1
  9. package/lib/module/games/block-blast/BlockBlast.js +1 -1
  10. package/lib/module/games/block-blast/BlockBlastScene.js +1 -1
  11. package/lib/module/games/block-breaker/BlockBreaker.js +1 -1
  12. package/lib/module/games/block-breaker/BlockBreakerScene.js +1 -1
  13. package/lib/module/games/bluk/Bluk.js +1 -1
  14. package/lib/module/games/bluk/BlukScene.js +1 -1
  15. package/lib/module/games/bubble-shooter/BubbleShooter.js +1 -1
  16. package/lib/module/games/bubble-shooter/BubbleShooterScene.js +1 -1
  17. package/lib/module/games/candy-crush/CandyCrush.js +1 -1
  18. package/lib/module/games/candy-crush/CandyCrushScene.js +1 -1
  19. package/lib/module/games/car-racing/CarMeshes.js +1 -1
  20. package/lib/module/games/car-racing/CarRacing.js +1 -1
  21. package/lib/module/games/car-racing/CarRacingScene.js +1 -1
  22. package/lib/module/games/chameleon-run/ChameleonRun.js +1 -1
  23. package/lib/module/games/chameleon-run/ChameleonRunBackdrop.js +1 -1
  24. package/lib/module/games/chameleon-run/ChameleonRunMeshes.js +1 -1
  25. package/lib/module/games/checkers/Checkers.js +1 -1
  26. package/lib/module/games/checkers/CheckersScene.js +1 -1
  27. package/lib/module/games/color-switch/ColorSwitch.js +1 -1
  28. package/lib/module/games/color-switch/ColorSwitchScene.js +1 -1
  29. package/lib/module/games/colors-sort/ColorsSort.js +1 -1
  30. package/lib/module/games/colors-sort/ColorsSortScene.js +1 -1
  31. package/lib/module/games/connect-em-all/ConnectEmAll.js +1 -1
  32. package/lib/module/games/connect-em-all/ConnectEmAllScene.js +1 -1
  33. package/lib/module/games/crossy-road/CrossyRoad.js +1 -1
  34. package/lib/module/games/crossy-road/CrossyRoadMeshes.js +1 -1
  35. package/lib/module/games/crossy-road/CrossyRoadPerson.js +1 -1
  36. package/lib/module/games/dino-jump/DinoJump.js +1 -1
  37. package/lib/module/games/dino-jump/DinoJumpScene.js +1 -1
  38. package/lib/module/games/dots-and-boxes/DotsAndBoxes.js +1 -1
  39. package/lib/module/games/dots-and-boxes/DotsAndBoxesScene.js +1 -1
  40. package/lib/module/games/falling-sticks/FallingSticks.js +1 -1
  41. package/lib/module/games/falling-sticks/FallingSticksScene.js +1 -1
  42. package/lib/module/games/find-different-number/FindDifferentNumber.js +1 -1
  43. package/lib/module/games/find-different-number/FindDifferentNumberScene.js +1 -1
  44. package/lib/module/games/flappy-bird/FlappyBird.js +1 -1
  45. package/lib/module/games/flappy-bird/FlappyBirdScene.js +1 -1
  46. package/lib/module/games/fruit-merger/FruitMerger.js +1 -1
  47. package/lib/module/games/fruit-merger/FruitMergerScene.js +1 -1
  48. package/lib/module/games/fruit-ninja/FruitNinja.js +1 -1
  49. package/lib/module/games/fruit-ninja/FruitNinjaScene.js +1 -1
  50. package/lib/module/games/fruit-ninja/FruitNinjaWorld.js +1 -1
  51. package/lib/module/games/game-2048/Game2048.js +1 -1
  52. package/lib/module/games/game-2048/Game2048Scene.js +1 -1
  53. package/lib/module/games/knife-hit/KnifeHit.js +1 -1
  54. package/lib/module/games/knife-hit/KnifeHitScene.js +1 -1
  55. package/lib/module/games/ludo-king/LudoKing.js +1 -1
  56. package/lib/module/games/ludo-king/LudoKingScene.js +1 -1
  57. package/lib/module/games/maze-runner/MazeRunner.js +1 -1
  58. package/lib/module/games/maze-runner/MazeRunnerScene.js +1 -1
  59. package/lib/module/games/memory-match/MemoryMatch.js +1 -1
  60. package/lib/module/games/memory-match/MemoryMatchScene.js +1 -1
  61. package/lib/module/games/mine-sweeper/MineSweeper.js +1 -1
  62. package/lib/module/games/mine-sweeper/MineSweeperScene.js +1 -1
  63. package/lib/module/games/mob-control/MobControl.js +1 -1
  64. package/lib/module/games/mob-control/MobControlGame.js +1 -1
  65. package/lib/module/games/mob-control/MobControlMeshes.js +1 -1
  66. package/lib/module/games/mob-control/MobControlRenderer.js +1 -1
  67. package/lib/module/games/mob-control/MobControlRules.js +1 -1
  68. package/lib/module/games/mob-control/MobControlScene.js +1 -1
  69. package/lib/module/games/nuts-and-bolts/NutsAndBolts.js +1 -1
  70. package/lib/module/games/nuts-and-bolts/NutsAndBoltsScene.js +1 -1
  71. package/lib/module/games/pac-man/PacMan.js +1 -1
  72. package/lib/module/games/pac-man/PacManGame.js +1 -1
  73. package/lib/module/games/pac-man/PacManScene.js +1 -1
  74. package/lib/module/games/paper-io/PaperIo.js +1 -1
  75. package/lib/module/games/paper-io/PaperIoMeshes.js +1 -1
  76. package/lib/module/games/paper-io/PaperIoScene.js +1 -1
  77. package/lib/module/games/penguin-run/PenguinMeshes.js +1 -1
  78. package/lib/module/games/penguin-run/PenguinRun.js +1 -1
  79. package/lib/module/games/penguin-run/PenguinRunScene.js +1 -1
  80. package/lib/module/games/perfect-circle/PerfectCircle.js +1 -1
  81. package/lib/module/games/perfect-circle/PerfectCircleScene.js +1 -1
  82. package/lib/module/games/pipe-connect/PipeConnect.js +1 -1
  83. package/lib/module/games/pipe-connect/PipeConnectScene.js +1 -1
  84. package/lib/module/games/play-with-tua/PlayWithTua.js +1 -1
  85. package/lib/module/games/popit-fidget/PopitFidget.js +1 -1
  86. package/lib/module/games/popit-fidget/PopitFidgetScene.js +1 -1
  87. package/lib/module/games/reversi/Reversi.js +1 -1
  88. package/lib/module/games/reversi/ReversiScene.js +1 -1
  89. package/lib/module/games/search-grid/SearchGrid.js +1 -1
  90. package/lib/module/games/search-grid/SearchGridScene.js +1 -1
  91. package/lib/module/games/shared/BackdropCard.js +1 -1
  92. package/lib/module/games/shared/EngineBackdrop.js +1 -1
  93. package/lib/module/games/shared/EngineBlasts.js +1 -1
  94. package/lib/module/games/shared/EngineBlocks.js +1 -1
  95. package/lib/module/games/shared/EngineDice.js +1 -1
  96. package/lib/module/games/shared/EngineFruits.js +1 -1
  97. package/lib/module/games/shared/EngineGameLoader.js +1 -1
  98. package/lib/module/games/shared/EngineGameScreen.js +1 -1
  99. package/lib/module/games/shared/EngineGlyphs.js +1 -1
  100. package/lib/module/games/shared/EngineHud.js +1 -1
  101. package/lib/module/games/shared/EngineMeadow.js +1 -1
  102. package/lib/module/games/shared/EngineTouchSurface.js +1 -1
  103. package/lib/module/games/shared/GameActivity.js +1 -1
  104. package/lib/module/games/shared/GameLoading.js +1 -1
  105. package/lib/module/games/shared/GameLoadingTransition.js +1 -1
  106. package/lib/module/games/sliding-numbers/SlidingNumbers.js +1 -1
  107. package/lib/module/games/sliding-numbers/SlidingNumbersScene.js +1 -1
  108. package/lib/module/games/snake-3d/Snake3D.js +1 -1
  109. package/lib/module/games/snake-3d/Snake3DScene.js +1 -1
  110. package/lib/module/games/snakes-and-ladders/SnakesAndLadders.js +1 -1
  111. package/lib/module/games/snakes-and-ladders/SnakesAndLaddersScene.js +1 -1
  112. package/lib/module/games/space-fighter/SpaceFighter.js +1 -1
  113. package/lib/module/games/space-fighter/SpaceFighterScene.js +1 -1
  114. package/lib/module/games/spider-solitaire/SpiderSolitaire.js +1 -1
  115. package/lib/module/games/spider-solitaire/SpiderSolitaireScene.js +1 -1
  116. package/lib/module/games/stack-tower/StackTower.js +1 -1
  117. package/lib/module/games/stack-tower/StackTowerScene.js +1 -1
  118. package/lib/module/games/sudoku/Sudoku.js +1 -1
  119. package/lib/module/games/sudoku/SudokuScene.js +1 -1
  120. package/lib/module/games/tangram/Tangram.js +1 -1
  121. package/lib/module/games/tangram/TangramScene.js +1 -1
  122. package/lib/module/games/tank-1990/Tank1990.js +1 -1
  123. package/lib/module/games/tank-1990/Tank1990Scene.js +1 -1
  124. package/lib/module/games/tic-tac-toe/TicTacToe.js +1 -1
  125. package/lib/module/games/tic-tac-toe/TicTacToeScene.js +1 -1
  126. package/lib/module/games/tile-home/TileHome.js +1 -1
  127. package/lib/module/games/tile-home/TileHomeScene.js +1 -1
  128. package/lib/module/games/treasure-hunt/TreasureHunt.js +1 -1
  129. package/lib/module/games/treasure-hunt/TreasureHuntConstants.js +1 -1
  130. package/lib/module/games/treasure-hunt/TreasureHuntModel.js +1 -1
  131. package/lib/module/games/treasure-hunt/TreasureHuntScene.js +1 -1
  132. package/lib/module/games/whack-a-mole/WhackAMole.js +1 -1
  133. package/lib/module/games/whack-a-mole/WhackAMoleScene.js +1 -1
  134. package/lib/module/helpers/GameSettingsModal.js +1 -1
  135. package/lib/module/helpers/GameTheme.js +1 -1
  136. package/package.json +1 -2
  137. package/src/assets/fonts/Inter-SemiBold.ttf +0 -0
  138. package/src/assets/models/explorer/explorer.glb +0 -0
  139. package/src/assets/models/explorer/params.json +0 -51
  140. package/src/assets/models/explorer/source.json +0 -222
  141. package/src/assets/models/play-with-tua/play-with-tua.glb +0 -0
  142. package/src/assets/models/play-with-tua/sources.json +0 -141
  143. package/src/assets/sfx/balloon_pop.wav +0 -0
  144. package/src/assets/sfx/blocked.wav +0 -0
  145. package/src/assets/sfx/boing.wav +0 -0
  146. package/src/assets/sfx/bonus.wav +0 -0
  147. package/src/assets/sfx/boom.wav +0 -0
  148. package/src/assets/sfx/bump.wav +0 -0
  149. package/src/assets/sfx/cannon.wav +0 -0
  150. package/src/assets/sfx/capture.wav +0 -0
  151. package/src/assets/sfx/card_flip.wav +0 -0
  152. package/src/assets/sfx/card_place.wav +0 -0
  153. package/src/assets/sfx/catch.wav +0 -0
  154. package/src/assets/sfx/chime.wav +0 -0
  155. package/src/assets/sfx/chomp.wav +0 -0
  156. package/src/assets/sfx/chomp_alt.wav +0 -0
  157. package/src/assets/sfx/clack.wav +0 -0
  158. package/src/assets/sfx/clang.wav +0 -0
  159. package/src/assets/sfx/clash.wav +0 -0
  160. package/src/assets/sfx/click.wav +0 -0
  161. package/src/assets/sfx/coin.wav +0 -0
  162. package/src/assets/sfx/combo.wav +0 -0
  163. package/src/assets/sfx/crash.wav +0 -0
  164. package/src/assets/sfx/crunch.wav +0 -0
  165. package/src/assets/sfx/dance.wav +0 -0
  166. package/src/assets/sfx/deselect.wav +0 -0
  167. package/src/assets/sfx/dice_roll.wav +0 -0
  168. package/src/assets/sfx/die.wav +0 -0
  169. package/src/assets/sfx/draw.wav +0 -0
  170. package/src/assets/sfx/drop.wav +0 -0
  171. package/src/assets/sfx/eat.wav +0 -0
  172. package/src/assets/sfx/engine.wav +0 -0
  173. package/src/assets/sfx/error.wav +0 -0
  174. package/src/assets/sfx/flag.wav +0 -0
  175. package/src/assets/sfx/flap.wav +0 -0
  176. package/src/assets/sfx/flip_disc.wav +0 -0
  177. package/src/assets/sfx/footstep_run.wav +0 -0
  178. package/src/assets/sfx/footstep_walk.wav +0 -0
  179. package/src/assets/sfx/game_over.wav +0 -0
  180. package/src/assets/sfx/gate.wav +0 -0
  181. package/src/assets/sfx/hit.wav +0 -0
  182. package/src/assets/sfx/hop.wav +0 -0
  183. package/src/assets/sfx/hurt.wav +0 -0
  184. package/src/assets/sfx/invalid.wav +0 -0
  185. package/src/assets/sfx/jump.wav +0 -0
  186. package/src/assets/sfx/ladder.wav +0 -0
  187. package/src/assets/sfx/land.wav +0 -0
  188. package/src/assets/sfx/laugh.wav +0 -0
  189. package/src/assets/sfx/lose.wav +0 -0
  190. package/src/assets/sfx/merge.wav +0 -0
  191. package/src/assets/sfx/miss.wav +0 -0
  192. package/src/assets/sfx/nitro.wav +0 -0
  193. package/src/assets/sfx/pew.wav +0 -0
  194. package/src/assets/sfx/place.wav +0 -0
  195. package/src/assets/sfx/pling.wav +0 -0
  196. package/src/assets/sfx/point.wav +0 -0
  197. package/src/assets/sfx/pop.wav +0 -0
  198. package/src/assets/sfx/pop_soft.wav +0 -0
  199. package/src/assets/sfx/power_up.wav +0 -0
  200. package/src/assets/sfx/reveal.wav +0 -0
  201. package/src/assets/sfx/robot.wav +0 -0
  202. package/src/assets/sfx/rotate.wav +0 -0
  203. package/src/assets/sfx/run_steps.wav +0 -0
  204. package/src/assets/sfx/select.wav +0 -0
  205. package/src/assets/sfx/shuffle.wav +0 -0
  206. package/src/assets/sfx/six.wav +0 -0
  207. package/src/assets/sfx/slice.wav +0 -0
  208. package/src/assets/sfx/slide.wav +0 -0
  209. package/src/assets/sfx/snake.wav +0 -0
  210. package/src/assets/sfx/snap.wav +0 -0
  211. package/src/assets/sfx/splash.wav +0 -0
  212. package/src/assets/sfx/star.wav +0 -0
  213. package/src/assets/sfx/start.wav +0 -0
  214. package/src/assets/sfx/swoosh.wav +0 -0
  215. package/src/assets/sfx/tap.wav +0 -0
  216. package/src/assets/sfx/thud.wav +0 -0
  217. package/src/assets/sfx/thunk.wav +0 -0
  218. package/src/assets/sfx/tick.wav +0 -0
  219. package/src/assets/sfx/time_up.wav +0 -0
  220. package/src/assets/sfx/tock.wav +0 -0
  221. package/src/assets/sfx/walk_steps.wav +0 -0
  222. package/src/assets/sfx/warning.wav +0 -0
  223. package/src/assets/sfx/whack.wav +0 -0
  224. package/src/assets/sfx/whoosh.wav +0 -0
  225. package/src/assets/sfx/win.wav +0 -0
  226. package/src/assets/sfx/zap.wav +0 -0
  227. package/src/assets/textures/ad_bolt.png +0 -0
  228. package/src/assets/textures/ad_bubbles.png +0 -0
  229. package/src/assets/textures/ad_chevrons.png +0 -0
  230. package/src/assets/textures/asphalt.png +0 -0
  231. package/src/assets/textures/bark.jpg +0 -0
  232. package/src/assets/textures/explorer-atlas.png +0 -0
  233. package/src/assets/textures/facade.png +0 -0
  234. package/src/assets/textures/grass.png +0 -0
  235. package/src/assets/textures/leaves.png +0 -0
  236. package/src/assets/textures/limestone.jpg +0 -0
  237. package/src/assets/textures/meadow.jpg +0 -0
  238. package/src/assets/textures/nature-sources.json +0 -87
  239. package/src/assets/textures/pine.png +0 -0
  240. package/src/assets/textures/river.jpg +0 -0
  241. package/src/assets/textures/soft_glow.png +0 -0
  242. package/src/games/arrows/Arrows.tsx +0 -69
  243. package/src/games/arrows/ArrowsConstants.ts +0 -107
  244. package/src/games/arrows/ArrowsGame.ts +0 -735
  245. package/src/games/arrows/ArrowsScene.ts +0 -395
  246. package/src/games/balloon-blaster/BalloonBlaster.tsx +0 -75
  247. package/src/games/balloon-blaster/BalloonBlasterConstants.ts +0 -79
  248. package/src/games/balloon-blaster/BalloonBlasterGame.ts +0 -287
  249. package/src/games/balloon-blaster/BalloonBlasterPhysics.ts +0 -95
  250. package/src/games/balloon-blaster/BalloonBlasterScene.ts +0 -225
  251. package/src/games/bike-racing/BikeMeshes.ts +0 -273
  252. package/src/games/bike-racing/BikeRacing.tsx +0 -211
  253. package/src/games/bike-racing/BikeRacingConstants.ts +0 -103
  254. package/src/games/bike-racing/BikeRacingGame.ts +0 -557
  255. package/src/games/bike-racing/BikeRacingScene.ts +0 -119
  256. package/src/games/block-blast/BlockBlast.tsx +0 -73
  257. package/src/games/block-blast/BlockBlastConstants.ts +0 -179
  258. package/src/games/block-blast/BlockBlastGame.ts +0 -471
  259. package/src/games/block-blast/BlockBlastScene.ts +0 -156
  260. package/src/games/block-breaker/BlockBreaker.tsx +0 -79
  261. package/src/games/block-breaker/BlockBreakerConstants.ts +0 -139
  262. package/src/games/block-breaker/BlockBreakerGame.ts +0 -459
  263. package/src/games/block-breaker/BlockBreakerScene.ts +0 -257
  264. package/src/games/bluk/Bluk.tsx +0 -82
  265. package/src/games/bluk/BlukConstants.ts +0 -121
  266. package/src/games/bluk/BlukGame.ts +0 -323
  267. package/src/games/bluk/BlukRules.ts +0 -154
  268. package/src/games/bluk/BlukScene.ts +0 -514
  269. package/src/games/bubble-shooter/BubbleShooter.tsx +0 -76
  270. package/src/games/bubble-shooter/BubbleShooterConstants.ts +0 -103
  271. package/src/games/bubble-shooter/BubbleShooterGame.ts +0 -459
  272. package/src/games/bubble-shooter/BubbleShooterScene.ts +0 -158
  273. package/src/games/candy-crush/CandyCrush.tsx +0 -77
  274. package/src/games/candy-crush/CandyCrushConstants.ts +0 -94
  275. package/src/games/candy-crush/CandyCrushGame.ts +0 -477
  276. package/src/games/candy-crush/CandyCrushScene.ts +0 -209
  277. package/src/games/car-racing/CarMeshes.ts +0 -440
  278. package/src/games/car-racing/CarRacing.tsx +0 -211
  279. package/src/games/car-racing/CarRacingConstants.ts +0 -167
  280. package/src/games/car-racing/CarRacingFacade.ts +0 -40
  281. package/src/games/car-racing/CarRacingGame.ts +0 -539
  282. package/src/games/car-racing/CarRacingScene.ts +0 -1026
  283. package/src/games/car-racing/CarRacingScenery.ts +0 -265
  284. package/src/games/chameleon-run/ChameleonRun.tsx +0 -96
  285. package/src/games/chameleon-run/ChameleonRunBackdrop.ts +0 -186
  286. package/src/games/chameleon-run/ChameleonRunConstants.ts +0 -47
  287. package/src/games/chameleon-run/ChameleonRunGame.ts +0 -309
  288. package/src/games/chameleon-run/ChameleonRunMeshes.ts +0 -305
  289. package/src/games/chameleon-run/ChameleonRunRules.ts +0 -252
  290. package/src/games/chameleon-run/ChameleonRunScene.ts +0 -310
  291. package/src/games/checkers/Checkers.tsx +0 -83
  292. package/src/games/checkers/CheckersAI.ts +0 -255
  293. package/src/games/checkers/CheckersConstants.ts +0 -68
  294. package/src/games/checkers/CheckersGame.ts +0 -322
  295. package/src/games/checkers/CheckersRules.ts +0 -167
  296. package/src/games/checkers/CheckersScene.ts +0 -308
  297. package/src/games/color-switch/ColorSwitch.tsx +0 -75
  298. package/src/games/color-switch/ColorSwitchConstants.ts +0 -61
  299. package/src/games/color-switch/ColorSwitchGame.ts +0 -329
  300. package/src/games/color-switch/ColorSwitchScene.ts +0 -220
  301. package/src/games/colors-sort/ColorsSort.tsx +0 -82
  302. package/src/games/colors-sort/ColorsSortConstants.ts +0 -119
  303. package/src/games/colors-sort/ColorsSortGame.ts +0 -246
  304. package/src/games/colors-sort/ColorsSortScene.ts +0 -315
  305. package/src/games/connect-em-all/ConnectEmAll.tsx +0 -70
  306. package/src/games/connect-em-all/ConnectEmAllConstants.ts +0 -77
  307. package/src/games/connect-em-all/ConnectEmAllGame.ts +0 -401
  308. package/src/games/connect-em-all/ConnectEmAllScene.ts +0 -235
  309. package/src/games/crossy-road/CrossyRoad.tsx +0 -74
  310. package/src/games/crossy-road/CrossyRoadCamera.ts +0 -59
  311. package/src/games/crossy-road/CrossyRoadConstants.ts +0 -132
  312. package/src/games/crossy-road/CrossyRoadGame.ts +0 -293
  313. package/src/games/crossy-road/CrossyRoadMeshes.ts +0 -195
  314. package/src/games/crossy-road/CrossyRoadPerson.ts +0 -198
  315. package/src/games/crossy-road/CrossyRoadRules.ts +0 -99
  316. package/src/games/crossy-road/CrossyRoadScene.ts +0 -355
  317. package/src/games/dino-jump/DinoJump.tsx +0 -77
  318. package/src/games/dino-jump/DinoJumpConstants.ts +0 -80
  319. package/src/games/dino-jump/DinoJumpGame.ts +0 -344
  320. package/src/games/dino-jump/DinoJumpScene.ts +0 -686
  321. package/src/games/dots-and-boxes/DotsAndBoxes.tsx +0 -83
  322. package/src/games/dots-and-boxes/DotsAndBoxesConstants.ts +0 -77
  323. package/src/games/dots-and-boxes/DotsAndBoxesGame.ts +0 -271
  324. package/src/games/dots-and-boxes/DotsAndBoxesScene.ts +0 -249
  325. package/src/games/falling-sticks/FallingSticks.tsx +0 -72
  326. package/src/games/falling-sticks/FallingSticksConstants.ts +0 -62
  327. package/src/games/falling-sticks/FallingSticksGame.ts +0 -220
  328. package/src/games/falling-sticks/FallingSticksRules.ts +0 -145
  329. package/src/games/falling-sticks/FallingSticksScene.ts +0 -245
  330. package/src/games/find-different-number/FindDifferentNumber.tsx +0 -74
  331. package/src/games/find-different-number/FindDifferentNumberConstants.ts +0 -74
  332. package/src/games/find-different-number/FindDifferentNumberGame.ts +0 -174
  333. package/src/games/find-different-number/FindDifferentNumberRules.ts +0 -43
  334. package/src/games/find-different-number/FindDifferentNumberScene.ts +0 -193
  335. package/src/games/flappy-bird/FlappyBird.tsx +0 -73
  336. package/src/games/flappy-bird/FlappyBirdConstants.ts +0 -95
  337. package/src/games/flappy-bird/FlappyBirdGame.ts +0 -375
  338. package/src/games/flappy-bird/FlappyBirdScene.ts +0 -630
  339. package/src/games/fruit-merger/FruitMerger.tsx +0 -73
  340. package/src/games/fruit-merger/FruitMergerConstants.ts +0 -102
  341. package/src/games/fruit-merger/FruitMergerGame.ts +0 -285
  342. package/src/games/fruit-merger/FruitMergerRules.ts +0 -286
  343. package/src/games/fruit-merger/FruitMergerScene.ts +0 -498
  344. package/src/games/fruit-ninja/FruitNinja.tsx +0 -129
  345. package/src/games/fruit-ninja/FruitNinjaConstants.ts +0 -107
  346. package/src/games/fruit-ninja/FruitNinjaGame.ts +0 -391
  347. package/src/games/fruit-ninja/FruitNinjaScene.ts +0 -319
  348. package/src/games/fruit-ninja/FruitNinjaWorld.ts +0 -17
  349. package/src/games/game-2048/Game2048.tsx +0 -84
  350. package/src/games/game-2048/Game2048Constants.ts +0 -68
  351. package/src/games/game-2048/Game2048Game.ts +0 -181
  352. package/src/games/game-2048/Game2048Rules.ts +0 -101
  353. package/src/games/game-2048/Game2048Scene.ts +0 -206
  354. package/src/games/knife-hit/KnifeHit.tsx +0 -78
  355. package/src/games/knife-hit/KnifeHitConstants.ts +0 -89
  356. package/src/games/knife-hit/KnifeHitGame.ts +0 -264
  357. package/src/games/knife-hit/KnifeHitScene.ts +0 -360
  358. package/src/games/ludo-king/LudoKing.tsx +0 -86
  359. package/src/games/ludo-king/LudoKingConstants.ts +0 -212
  360. package/src/games/ludo-king/LudoKingGame.ts +0 -326
  361. package/src/games/ludo-king/LudoKingRules.ts +0 -143
  362. package/src/games/ludo-king/LudoKingScene.ts +0 -397
  363. package/src/games/maze-runner/MazeRunner.tsx +0 -88
  364. package/src/games/maze-runner/MazeRunnerConstants.ts +0 -65
  365. package/src/games/maze-runner/MazeRunnerGame.ts +0 -176
  366. package/src/games/maze-runner/MazeRunnerRules.ts +0 -161
  367. package/src/games/maze-runner/MazeRunnerScene.ts +0 -245
  368. package/src/games/memory-match/MemoryMatch.tsx +0 -77
  369. package/src/games/memory-match/MemoryMatchConstants.ts +0 -105
  370. package/src/games/memory-match/MemoryMatchGame.ts +0 -222
  371. package/src/games/memory-match/MemoryMatchRules.ts +0 -38
  372. package/src/games/memory-match/MemoryMatchScene.ts +0 -268
  373. package/src/games/mine-sweeper/MineSweeper.tsx +0 -77
  374. package/src/games/mine-sweeper/MineSweeperConstants.ts +0 -94
  375. package/src/games/mine-sweeper/MineSweeperGame.ts +0 -234
  376. package/src/games/mine-sweeper/MineSweeperRules.ts +0 -67
  377. package/src/games/mine-sweeper/MineSweeperScene.ts +0 -262
  378. package/src/games/mob-control/MobControl.tsx +0 -73
  379. package/src/games/mob-control/MobControlConstants.ts +0 -106
  380. package/src/games/mob-control/MobControlGame.ts +0 -176
  381. package/src/games/mob-control/MobControlMeshes.ts +0 -85
  382. package/src/games/mob-control/MobControlRenderer.ts +0 -108
  383. package/src/games/mob-control/MobControlRules.ts +0 -522
  384. package/src/games/mob-control/MobControlScene.ts +0 -399
  385. package/src/games/number-search/NumberSearch.tsx +0 -18
  386. package/src/games/number-search/NumberSearchNumbers.ts +0 -623
  387. package/src/games/nuts-and-bolts/NutsAndBolts.tsx +0 -85
  388. package/src/games/nuts-and-bolts/NutsAndBoltsConstants.ts +0 -75
  389. package/src/games/nuts-and-bolts/NutsAndBoltsGame.ts +0 -298
  390. package/src/games/nuts-and-bolts/NutsAndBoltsRules.ts +0 -474
  391. package/src/games/nuts-and-bolts/NutsAndBoltsScene.ts +0 -498
  392. package/src/games/pac-man/PacMan.tsx +0 -86
  393. package/src/games/pac-man/PacManConstants.ts +0 -169
  394. package/src/games/pac-man/PacManGame.ts +0 -406
  395. package/src/games/pac-man/PacManRules.ts +0 -255
  396. package/src/games/pac-man/PacManScene.ts +0 -387
  397. package/src/games/paper-io/PaperIo.tsx +0 -91
  398. package/src/games/paper-io/PaperIoConstants.ts +0 -86
  399. package/src/games/paper-io/PaperIoGame.ts +0 -193
  400. package/src/games/paper-io/PaperIoMeshes.ts +0 -233
  401. package/src/games/paper-io/PaperIoRules.ts +0 -315
  402. package/src/games/paper-io/PaperIoScene.ts +0 -310
  403. package/src/games/penguin-run/PenguinMeshes.ts +0 -269
  404. package/src/games/penguin-run/PenguinModel.ts +0 -712
  405. package/src/games/penguin-run/PenguinRun.tsx +0 -77
  406. package/src/games/penguin-run/PenguinRunConstants.ts +0 -69
  407. package/src/games/penguin-run/PenguinRunGame.ts +0 -406
  408. package/src/games/penguin-run/PenguinRunScene.ts +0 -949
  409. package/src/games/perfect-circle/PerfectCircle.tsx +0 -74
  410. package/src/games/perfect-circle/PerfectCircleConstants.ts +0 -52
  411. package/src/games/perfect-circle/PerfectCircleGame.ts +0 -153
  412. package/src/games/perfect-circle/PerfectCircleRules.ts +0 -111
  413. package/src/games/perfect-circle/PerfectCircleScene.ts +0 -176
  414. package/src/games/pipe-connect/PipeConnect.tsx +0 -69
  415. package/src/games/pipe-connect/PipeConnectConstants.ts +0 -101
  416. package/src/games/pipe-connect/PipeConnectGame.ts +0 -179
  417. package/src/games/pipe-connect/PipeConnectRules.ts +0 -326
  418. package/src/games/pipe-connect/PipeConnectScene.ts +0 -271
  419. package/src/games/play-with-tua/PlayWithTua.tsx +0 -123
  420. package/src/games/play-with-tua/PlayWithTuaConstants.ts +0 -70
  421. package/src/games/play-with-tua/PlayWithTuaGame.ts +0 -167
  422. package/src/games/play-with-tua/PlayWithTuaModel.ts +0 -42
  423. package/src/games/play-with-tua/PlayWithTuaScene.ts +0 -36
  424. package/src/games/popit-fidget/PopitFidget.tsx +0 -72
  425. package/src/games/popit-fidget/PopitFidgetConstants.ts +0 -71
  426. package/src/games/popit-fidget/PopitFidgetGame.ts +0 -148
  427. package/src/games/popit-fidget/PopitFidgetScene.ts +0 -242
  428. package/src/games/reversi/Reversi.tsx +0 -94
  429. package/src/games/reversi/ReversiConstants.ts +0 -67
  430. package/src/games/reversi/ReversiGame.ts +0 -266
  431. package/src/games/reversi/ReversiRules.ts +0 -176
  432. package/src/games/reversi/ReversiScene.ts +0 -240
  433. package/src/games/search-grid/SearchGrid.tsx +0 -92
  434. package/src/games/search-grid/SearchGridConstants.ts +0 -178
  435. package/src/games/search-grid/SearchGridGame.ts +0 -209
  436. package/src/games/search-grid/SearchGridScene.ts +0 -301
  437. package/src/games/shared/BackdropCard.tsx +0 -54
  438. package/src/games/shared/EngineBackdrop.ts +0 -300
  439. package/src/games/shared/EngineBlasts.ts +0 -136
  440. package/src/games/shared/EngineBlocks.ts +0 -91
  441. package/src/games/shared/EngineControlText.ts +0 -17
  442. package/src/games/shared/EngineDice.ts +0 -250
  443. package/src/games/shared/EngineFootprint.ts +0 -35
  444. package/src/games/shared/EngineFruits.ts +0 -1435
  445. package/src/games/shared/EngineGameLoader.tsx +0 -88
  446. package/src/games/shared/EngineGameScreen.tsx +0 -325
  447. package/src/games/shared/EngineGameWidth.ts +0 -3
  448. package/src/games/shared/EngineGameWidth.web.ts +0 -3
  449. package/src/games/shared/EngineGlyphs.ts +0 -178
  450. package/src/games/shared/EngineHud.ts +0 -815
  451. package/src/games/shared/EngineLoading.ts +0 -477
  452. package/src/games/shared/EngineMeadow.ts +0 -725
  453. package/src/games/shared/EngineMeshCache.ts +0 -15
  454. package/src/games/shared/EngineMeshes.ts +0 -10
  455. package/src/games/shared/EngineRacingChase.ts +0 -21
  456. package/src/games/shared/EngineRacingHandling.ts +0 -48
  457. package/src/games/shared/EngineReadyContext.ts +0 -4
  458. package/src/games/shared/EngineTilt.ts +0 -44
  459. package/src/games/shared/EngineTouchSurface.tsx +0 -103
  460. package/src/games/shared/EngineUtils.ts +0 -52
  461. package/src/games/shared/GameActivity.ts +0 -13
  462. package/src/games/shared/GameLoading.tsx +0 -202
  463. package/src/games/shared/GameLoadingTransition.tsx +0 -61
  464. package/src/games/shared/ProceduralCacheVersion.ts +0 -2
  465. package/src/games/shared/useEngineGame.ts +0 -240
  466. package/src/games/shared/useGameResource.ts +0 -21
  467. package/src/games/shared/useLiveState.ts +0 -58
  468. package/src/games/sliding-numbers/SlidingNumbers.tsx +0 -71
  469. package/src/games/sliding-numbers/SlidingNumbersConstants.ts +0 -65
  470. package/src/games/sliding-numbers/SlidingNumbersGame.ts +0 -192
  471. package/src/games/sliding-numbers/SlidingNumbersRules.ts +0 -79
  472. package/src/games/sliding-numbers/SlidingNumbersScene.ts +0 -193
  473. package/src/games/snake-3d/Snake3D.tsx +0 -76
  474. package/src/games/snake-3d/Snake3DConstants.ts +0 -61
  475. package/src/games/snake-3d/Snake3DGame.ts +0 -192
  476. package/src/games/snake-3d/Snake3DMotion.ts +0 -22
  477. package/src/games/snake-3d/Snake3DRules.ts +0 -116
  478. package/src/games/snake-3d/Snake3DScene.ts +0 -322
  479. package/src/games/snakes-and-ladders/SnakesAndLadders.tsx +0 -87
  480. package/src/games/snakes-and-ladders/SnakesAndLaddersConstants.ts +0 -136
  481. package/src/games/snakes-and-ladders/SnakesAndLaddersGame.ts +0 -310
  482. package/src/games/snakes-and-ladders/SnakesAndLaddersScene.ts +0 -515
  483. package/src/games/space-fighter/SpaceFighter.tsx +0 -74
  484. package/src/games/space-fighter/SpaceFighterConstants.ts +0 -86
  485. package/src/games/space-fighter/SpaceFighterGame.ts +0 -292
  486. package/src/games/space-fighter/SpaceFighterScene.ts +0 -550
  487. package/src/games/spider-solitaire/SpiderSolitaire.tsx +0 -80
  488. package/src/games/spider-solitaire/SpiderSolitaireConstants.ts +0 -107
  489. package/src/games/spider-solitaire/SpiderSolitaireGame.ts +0 -387
  490. package/src/games/spider-solitaire/SpiderSolitaireRules.ts +0 -123
  491. package/src/games/spider-solitaire/SpiderSolitaireScene.ts +0 -352
  492. package/src/games/stack-tower/StackTower.tsx +0 -76
  493. package/src/games/stack-tower/StackTowerConstants.ts +0 -74
  494. package/src/games/stack-tower/StackTowerGame.ts +0 -236
  495. package/src/games/stack-tower/StackTowerScene.ts +0 -186
  496. package/src/games/sudoku/Sudoku.tsx +0 -73
  497. package/src/games/sudoku/SudokuConstants.ts +0 -127
  498. package/src/games/sudoku/SudokuGame.ts +0 -250
  499. package/src/games/sudoku/SudokuRules.ts +0 -125
  500. package/src/games/sudoku/SudokuScene.ts +0 -304
  501. package/src/games/tangram/Tangram.tsx +0 -79
  502. package/src/games/tangram/TangramConstants.ts +0 -64
  503. package/src/games/tangram/TangramGame.ts +0 -356
  504. package/src/games/tangram/TangramRules.ts +0 -409
  505. package/src/games/tangram/TangramScene.ts +0 -203
  506. package/src/games/tank-1990/Tank1990.tsx +0 -78
  507. package/src/games/tank-1990/Tank1990Constants.ts +0 -81
  508. package/src/games/tank-1990/Tank1990Game.ts +0 -331
  509. package/src/games/tank-1990/Tank1990Rules.ts +0 -390
  510. package/src/games/tank-1990/Tank1990Scene.ts +0 -434
  511. package/src/games/tic-tac-toe/TicTacToe.tsx +0 -98
  512. package/src/games/tic-tac-toe/TicTacToeConstants.ts +0 -69
  513. package/src/games/tic-tac-toe/TicTacToeGame.ts +0 -200
  514. package/src/games/tic-tac-toe/TicTacToeRules.ts +0 -103
  515. package/src/games/tic-tac-toe/TicTacToeScene.ts +0 -245
  516. package/src/games/tile-home/TileHome.tsx +0 -92
  517. package/src/games/tile-home/TileHomeConstants.ts +0 -139
  518. package/src/games/tile-home/TileHomeGame.ts +0 -435
  519. package/src/games/tile-home/TileHomeScene.ts +0 -154
  520. package/src/games/treasure-hunt/TreasureHunt.tsx +0 -206
  521. package/src/games/treasure-hunt/TreasureHuntConstants.ts +0 -266
  522. package/src/games/treasure-hunt/TreasureHuntControls.ts +0 -280
  523. package/src/games/treasure-hunt/TreasureHuntGame.ts +0 -402
  524. package/src/games/treasure-hunt/TreasureHuntMeshes.ts +0 -422
  525. package/src/games/treasure-hunt/TreasureHuntModel.ts +0 -506
  526. package/src/games/treasure-hunt/TreasureHuntRules.ts +0 -1210
  527. package/src/games/treasure-hunt/TreasureHuntScene.ts +0 -586
  528. package/src/games/whack-a-mole/WhackAMole.tsx +0 -79
  529. package/src/games/whack-a-mole/WhackAMoleConstants.ts +0 -94
  530. package/src/games/whack-a-mole/WhackAMoleGame.ts +0 -233
  531. package/src/games/whack-a-mole/WhackAMoleScene.ts +0 -349
  532. package/src/games/word-search/WordSearch.tsx +0 -18
  533. package/src/games/word-search/WordSearchWords.ts +0 -1642
  534. package/src/helpers/GamePatternData.ts +0 -120
  535. package/src/helpers/GameSettingsModal.tsx +0 -384
  536. package/src/helpers/GameTheme.tsx +0 -37
  537. package/src/helpers/IconPaths.ts +0 -6
  538. package/src/helpers/index.ts +0 -2
  539. package/src/index.tsx +0 -60
  540. package/src/services/GameAssetLoader.ts +0 -111
  541. package/src/services/GameAssets.ts +0 -149
  542. package/src/services/GameLoaders.ts +0 -93
  543. package/src/services/GamesConstants.ts +0 -193
  544. package/src/services/GamesMetadata.ts +0 -711
  545. package/src/services/GamesService.ts +0 -116
  546. package/src/services/HapticsService.ts +0 -48
  547. package/src/services/ScoringService.ts +0 -19
  548. package/src/services/SfxSources.ts +0 -81
  549. package/src/services/SoundsService.ts +0 -582
  550. package/src/services/ThemeService.ts +0 -281
  551. package/src/services/UtilsService.ts +0 -134
  552. package/src/services/index.ts +0 -6
@@ -1,111 +0,0 @@
1
- export type AssetTask = () => unknown;
2
- export interface AssetStage {
3
- label: string;
4
- tasks: () => Iterable<AssetTask>;
5
- }
6
- export interface LoadTiming {
7
- afterPaint(run: () => void): () => void;
8
- now?: () => number;
9
- }
10
- const FRAME_BUDGET_MS = 4;
11
- const MAX_JOBS_PER_FRAME = 64;
12
- const timing: LoadTiming = {
13
- afterPaint(run) {
14
- let timer: ReturnType<typeof setTimeout> | undefined;
15
- const frame = requestAnimationFrame(() => {
16
- timer = setTimeout(run, 0);
17
- });
18
- return () => {
19
- cancelAnimationFrame(frame);
20
- if (timer !== undefined) clearTimeout(timer);
21
- };
22
- }
23
- };
24
-
25
- /** Paint first, then batch small jobs within a frame budget, yielding between expensive builders. */
26
- export class GameAssetLoader {
27
- private stage = 0;
28
- private iterator?: Iterator<AssetTask>;
29
- private task?: AssetTask;
30
- private cancel?: () => void;
31
- private active = false;
32
- private busy = false;
33
- private disposed = false;
34
- private done = false;
35
- constructor(
36
- private stages: readonly AssetStage[],
37
- private changed: (label: string) => void,
38
- private finished: () => void,
39
- private failed: (error: unknown) => void,
40
- private clock: LoadTiming = timing
41
- ) {}
42
- start() {
43
- if (this.disposed || this.done) return;
44
- this.active = true;
45
- this.schedule();
46
- }
47
- pause() {
48
- this.active = false;
49
- this.cancel?.();
50
- this.cancel = undefined;
51
- }
52
- dispose() {
53
- this.pause();
54
- this.disposed = true;
55
- }
56
- private schedule() {
57
- if (!this.active || this.busy || this.cancel || this.disposed || this.done) return;
58
- this.cancel = this.clock.afterPaint(() => {
59
- this.cancel = undefined;
60
- void this.step();
61
- });
62
- }
63
- private async step() {
64
- if (!this.active || this.disposed) return;
65
- this.busy = true;
66
- const now = () => this.clock.now?.() ?? performance.now();
67
- const started = now();
68
- try {
69
- for (let jobs = 0; jobs < MAX_JOBS_PER_FRAME && this.active && !this.disposed; jobs++) {
70
- const stage = this.stages[this.stage];
71
- if (!stage) {
72
- this.done = true;
73
- this.active = false;
74
- this.finished();
75
- return;
76
- }
77
- if (!this.iterator) {
78
- this.changed(stage.label);
79
- this.iterator = stage.tasks()[Symbol.iterator]();
80
- }
81
- if (!this.task) {
82
- const next = this.iterator.next();
83
- if (next.done) {
84
- this.iterator = undefined;
85
- this.stage++;
86
- continue;
87
- }
88
- this.task = next.value;
89
- }
90
- if (!this.active || this.disposed) break;
91
- const result = this.task();
92
- if (result && typeof (result as PromiseLike<unknown>).then === 'function') await result;
93
- this.task = undefined;
94
- if (now() - started >= FRAME_BUDGET_MS) break;
95
- }
96
- } catch (error) {
97
- this.reject(error);
98
- } finally {
99
- this.busy = false;
100
- }
101
- this.schedule();
102
- }
103
- private reject(error: unknown) {
104
- this.busy = false;
105
- if (this.disposed) return;
106
- // A thrown generator is closed: retry the stage; completed model factories retain their caches.
107
- if (!this.task) this.iterator = undefined;
108
- this.pause();
109
- this.failed(error);
110
- }
111
- }
@@ -1,149 +0,0 @@
1
- import type { AssetStage, AssetTask } from './GameAssetLoader';
2
- import { resolveGameTheme } from './ThemeService';
3
- // Prepare only the selected game; the engine owns durable assets and in-session mesh reuse.
4
- import { GAME_IDS, type GameThemeMode } from './UtilsService';
5
-
6
- /** Give module evaluation its own frame before running any of its model builders. */
7
- function* deferred(load: () => Iterable<AssetTask>): Iterable<AssetTask> {
8
- let tasks: Iterable<AssetTask> = [];
9
- yield () => {
10
- tasks = load();
11
- };
12
- yield* tasks;
13
- }
14
-
15
- // Opt in only games with expensive imported/procedural models. Tile Home is included for its fruit
16
- // meshes; other board games use built-ins and create their small resources when opened.
17
- const HEAVY_GAME_ASSETS = {
18
- [GAME_IDS.PLAY_WITH_TUA]: function* () {
19
- yield* deferred(() => require('../games/play-with-tua/PlayWithTuaModel').warmAssets());
20
- },
21
- [GAME_IDS.TREASURE_HUNT]: function* () {
22
- yield* deferred(() => require('../games/treasure-hunt/TreasureHuntConstants').warmAssets());
23
- yield* deferred(() => require('../games/treasure-hunt/TreasureHuntScene').warmAssets());
24
- yield* deferred(() => require('../games/treasure-hunt/TreasureHuntModel').warmAssets());
25
- },
26
- [GAME_IDS.TILE_HOME]: function* () {
27
- const { TILE_TYPES } = require('../games/tile-home/TileHomeConstants') as typeof import('../games/tile-home/TileHomeConstants');
28
- yield* deferred(() =>
29
- require('../games/shared/EngineFruits').warmAssets(
30
- TILE_TYPES.map((t) => t.fruit),
31
- 0.25
32
- )
33
- );
34
- },
35
- [GAME_IDS.FRUIT_MERGER]: function* () {
36
- yield* deferred(() => require('../games/fruit-merger/FruitMergerScene').warmAssets());
37
- },
38
- [GAME_IDS.FRUIT_NINJA]: function* () {
39
- const { FRUIT_KINDS, FRUIT_DETAIL } =
40
- require('../games/fruit-ninja/FruitNinjaConstants') as typeof import('../games/fruit-ninja/FruitNinjaConstants');
41
- yield* deferred(() => require('../games/shared/EngineFruits').warmAssets(FRUIT_KINDS, FRUIT_DETAIL, true));
42
- yield* deferred(() => require('../games/fruit-ninja/FruitNinjaScene').warmAssets());
43
- },
44
- [GAME_IDS.CAR_RACING]: function* () {
45
- yield* deferred(() => require('../games/car-racing/CarRacingConstants').warmAssets());
46
- yield* deferred(() => require('../games/car-racing/CarRacingScene').warmAssets());
47
- },
48
- [GAME_IDS.BIKE_RACING]: function* () {
49
- yield* deferred(() => require('../games/car-racing/CarRacingConstants').warmAssets());
50
- yield* deferred(() => require('../games/bike-racing/BikeRacingConstants').warmAssets());
51
- yield* deferred(() => require('../games/bike-racing/BikeRacingScene').warmAssets());
52
- },
53
- [GAME_IDS.PENGUIN_RUN]: function* () {
54
- yield* deferred(() => require('../games/penguin-run/PenguinMeshes').warmAssets());
55
- yield* deferred(() => require('../games/penguin-run/PenguinRunScene').warmAssets());
56
- },
57
- [GAME_IDS.CHAMELEON_RUN]: function* () {
58
- yield* deferred(() => require('../games/chameleon-run/ChameleonRunMeshes').warmAssets());
59
- },
60
- [GAME_IDS.PAPER_IO]: function* () {
61
- yield* deferred(() => require('../games/paper-io/PaperIoMeshes').warmAssets());
62
- yield* deferred(() => require('../games/paper-io/PaperIoScene').warmAssets());
63
- },
64
- [GAME_IDS.CROSSY_ROAD]: function* () {
65
- yield* deferred(() => require('../games/crossy-road/CrossyRoadMeshes').warmAssets());
66
- yield* deferred(() => require('../games/crossy-road/CrossyRoadPerson').warmAssets());
67
- }
68
- } satisfies Partial<Record<GAME_IDS, () => Iterable<AssetTask>>>;
69
-
70
- const prepared = new Set<GAME_IDS>();
71
- const scenes = new Set<string>();
72
- let sharedReady = false;
73
- export const isHeavyGame = (id: GAME_IDS): boolean => Object.hasOwn(HEAVY_GAME_ASSETS, id);
74
- export const areGameAssetsReady = (id: GAME_IDS, mode?: GameThemeMode): boolean =>
75
- prepared.has(id) && scenes.has(`${id}:${mode ?? 'classic'}`) && id !== GAME_IDS.TREASURE_HUNT;
76
-
77
- /** Nothing here runs until the selected game's loader has painted. */
78
- export function gameAssetStages(id: GAME_IDS, mode?: GameThemeMode): AssetStage[] {
79
- const build = HEAVY_GAME_ASSETS[id as keyof typeof HEAVY_GAME_ASSETS];
80
- return [
81
- {
82
- label: 'Getting ready',
83
- *tasks() {
84
- yield () => {
85
- const engine = require('@nayan-ui/engine');
86
- if (!engine.isEngineAvailable) throw Error('The native game engine is unavailable in this app build');
87
- return engine.warmUpEngine();
88
- };
89
- if (!sharedReady) {
90
- yield () => require('../games/shared/EngineHud').loadHudFonts();
91
- yield* deferred(() => require('../games/shared/EngineHud').warmAssets());
92
- yield* deferred(() => require('../games/shared/EngineBlasts').warmAssets());
93
- yield () => {
94
- sharedReady = true;
95
- };
96
- }
97
- }
98
- },
99
- {
100
- label: 'Bringing your world to life',
101
- *tasks() {
102
- // Decode audio alongside the visual builders instead of starting one clip per frame at the end.
103
- require('./SoundsService').preloadGameSounds(id);
104
- if (!prepared.has(id)) {
105
- if (build) yield* build();
106
- yield () => {
107
- prepared.add(id);
108
- };
109
- }
110
- if (id === GAME_IDS.TREASURE_HUNT) {
111
- yield* deferred(() => require('../games/treasure-hunt/TreasureHuntRules').warmNextMap());
112
- yield () => {
113
- const map = require('../games/treasure-hunt/TreasureHuntRules').peekNextMap();
114
- if (map) require('../games/treasure-hunt/TreasureHuntScene').terrainModels(map.landscape.profile);
115
- };
116
- }
117
- }
118
- },
119
- {
120
- label: 'Adding the finishing touches',
121
- *tasks() {
122
- const key = `${id}:${mode ?? 'classic'}`;
123
- if (!scenes.has(key)) {
124
- const theme = resolveGameTheme(mode);
125
- if ([GAME_IDS.PAPER_IO, GAME_IDS.TILE_HOME, GAME_IDS.FRUIT_MERGER].includes(id))
126
- yield () => require('../games/shared/EngineBackdrop').backdropMesh(theme);
127
- if (id === GAME_IDS.FRUIT_NINJA) yield* deferred(() => require('../games/shared/EngineMeadow').warmAssets(theme, ['meadow']));
128
- if (id === GAME_IDS.CHAMELEON_RUN) yield* deferred(() => require('../games/chameleon-run/ChameleonRunBackdrop').warmAssets(theme));
129
- yield* require('./SoundsService').warmSoundAssets([id]);
130
- if (id === GAME_IDS.TREASURE_HUNT) yield () => require('../games/treasure-hunt/TreasureHuntConstants').sounds?.ready;
131
- yield () => {
132
- scenes.add(key);
133
- };
134
- }
135
- // ProceduralCache already writes each built asset asynchronously; persistence does not gate play.
136
- }
137
- }
138
- ];
139
- }
140
-
141
- /** Asset audit tooling; production opens only gameAssetStages(selectedId). */
142
- export function gameAssetGroups() {
143
- return Object.keys(HEAVY_GAME_ASSETS).map((id) => ({
144
- id,
145
- *tasks() {
146
- for (const stage of gameAssetStages(id as GAME_IDS)) yield* stage.tasks();
147
- }
148
- }));
149
- }
@@ -1,93 +0,0 @@
1
- import type React from 'react';
2
- import { GAME_IDS, type GameProps } from './UtilsService';
3
-
4
- // Every game paints its loading screen before evaluating its module and building its world.
5
- /* eslint-disable @typescript-eslint/no-var-requires */
6
- const GAME_LOADERS: Record<GAME_IDS, () => React.ComponentType<GameProps>> = {
7
- [GAME_IDS.PLAY_WITH_TUA]: () => require('../games/play-with-tua/PlayWithTua').PlayWithTua,
8
- [GAME_IDS.TREASURE_HUNT]: () => require('../games/treasure-hunt/TreasureHunt').TreasureHunt,
9
- [GAME_IDS.BLOCK_BLAST]: () => require('../games/block-blast/BlockBlast').BlockBlast,
10
- [GAME_IDS.CONNECT_EM_ALL]: () => require('../games/connect-em-all/ConnectEmAll').ConnectEmAll,
11
- [GAME_IDS.BUBBLE_SHOOTER]: () => require('../games/bubble-shooter/BubbleShooter').BubbleShooter,
12
- [GAME_IDS.BLOCK_BREAKER]: () => require('../games/block-breaker/BlockBreaker').BlockBreaker,
13
- [GAME_IDS.TILE_HOME]: () => require('../games/tile-home/TileHome').TileHome,
14
- [GAME_IDS.FRUIT_MERGER]: () => require('../games/fruit-merger/FruitMerger').FruitMerger,
15
- [GAME_IDS.FRUIT_NINJA]: () => require('../games/fruit-ninja/FruitNinja').FruitNinja,
16
- [GAME_IDS.ARROWS]: () => require('../games/arrows/Arrows').Arrows,
17
- [GAME_IDS.FLAPPY_BIRD]: () => require('../games/flappy-bird/FlappyBird').FlappyBird,
18
- [GAME_IDS.DINO_JUMP]: () => require('../games/dino-jump/DinoJump').DinoJump,
19
- [GAME_IDS.SNAKES_AND_LADDERS]: () => require('../games/snakes-and-ladders/SnakesAndLadders').SnakesAndLadders,
20
- [GAME_IDS.LUDO_KING]: () => require('../games/ludo-king/LudoKing').LudoKing,
21
- [GAME_IDS.DOTS_AND_BOXES]: () => require('../games/dots-and-boxes/DotsAndBoxes').DotsAndBoxes,
22
- [GAME_IDS.CANDY_CRUSH]: () => require('../games/candy-crush/CandyCrush').CandyCrush,
23
- [GAME_IDS.WHACK_A_MOLE]: () => require('../games/whack-a-mole/WhackAMole').WhackAMole,
24
- [GAME_IDS.PAC_MAN]: () => require('../games/pac-man/PacMan').PacMan,
25
- [GAME_IDS.COLORS_SORT]: () => require('../games/colors-sort/ColorsSort').ColorsSort,
26
- [GAME_IDS.POPIT_FIDGET]: () => require('../games/popit-fidget/PopitFidget').PopitFidget,
27
- [GAME_IDS.BALLOON_BLASTER]: () => require('../games/balloon-blaster/BalloonBlaster').BalloonBlaster,
28
- [GAME_IDS.SPACE_FIGHTER]: () => require('../games/space-fighter/SpaceFighter').SpaceFighter,
29
- [GAME_IDS.WORD_SEARCH]: () => require('../games/word-search/WordSearch').WordSearch,
30
- [GAME_IDS.NUMBER_SEARCH]: () => require('../games/number-search/NumberSearch').NumberSearch,
31
- [GAME_IDS.FIND_DIFFERENT_NUMBER]: () => require('../games/find-different-number/FindDifferentNumber').FindDifferentNumber,
32
- [GAME_IDS.TANK_1990]: () => require('../games/tank-1990/Tank1990').Tank1990,
33
- [GAME_IDS.NUTS_AND_BOLTS]: () => require('../games/nuts-and-bolts/NutsAndBolts').NutsAndBolts,
34
- [GAME_IDS.STACK_TOWER]: () => require('../games/stack-tower/StackTower').StackTower,
35
- [GAME_IDS.PIPE_CONNECT]: () => require('../games/pipe-connect/PipeConnect').PipeConnect,
36
- [GAME_IDS.MINE_SWEEPER]: () => require('../games/mine-sweeper/MineSweeper').MineSweeper,
37
- [GAME_IDS.KNIFE_HIT]: () => require('../games/knife-hit/KnifeHit').KnifeHit,
38
- [GAME_IDS.COLOR_SWITCH]: () => require('../games/color-switch/ColorSwitch').ColorSwitch,
39
- [GAME_IDS.SPIDER_SOLITAIRE]: () => require('../games/spider-solitaire/SpiderSolitaire').SpiderSolitaire,
40
- [GAME_IDS.MAZE_RUNNER]: () => require('../games/maze-runner/MazeRunner').MazeRunner,
41
- [GAME_IDS.TIC_TAC_TOE]: () => require('../games/tic-tac-toe/TicTacToe').TicTacToe,
42
- [GAME_IDS.CAR_RACING]: () => require('../games/car-racing/CarRacing').CarRacing,
43
- [GAME_IDS.BIKE_RACING]: () => require('../games/bike-racing/BikeRacing').BikeRacing,
44
- [GAME_IDS.SLIDING_NUMBERS]: () => require('../games/sliding-numbers/SlidingNumbers').SlidingNumbers,
45
- [GAME_IDS.GAME_2048]: () => require('../games/game-2048/Game2048').Game2048,
46
- [GAME_IDS.SUDOKU]: () => require('../games/sudoku/Sudoku').Sudoku,
47
- [GAME_IDS.SNAKE_3D]: () => require('../games/snake-3d/Snake3D').Snake3D,
48
- [GAME_IDS.PERFECT_CIRCLE]: () => require('../games/perfect-circle/PerfectCircle').PerfectCircle,
49
- [GAME_IDS.TANGRAM]: () => require('../games/tangram/Tangram').Tangram,
50
- [GAME_IDS.CHECKERS]: () => require('../games/checkers/Checkers').Checkers,
51
- [GAME_IDS.MEMORY_MATCH]: () => require('../games/memory-match/MemoryMatch').MemoryMatch,
52
- [GAME_IDS.FALLING_STICKS]: () => require('../games/falling-sticks/FallingSticks').FallingSticks,
53
- [GAME_IDS.REVERSI]: () => require('../games/reversi/Reversi').Reversi,
54
- [GAME_IDS.PENGUIN_RUN]: () => require('../games/penguin-run/PenguinRun').PenguinRun,
55
- [GAME_IDS.BLUK]: () => require('../games/bluk/Bluk').Bluk,
56
- [GAME_IDS.CHAMELEON_RUN]: () => require('../games/chameleon-run/ChameleonRun').ChameleonRun,
57
- [GAME_IDS.MOB_CONTROL]: () => require('../games/mob-control/MobControl').MobControl,
58
- [GAME_IDS.PAPER_IO]: () => require('../games/paper-io/PaperIo').PaperIo,
59
- [GAME_IDS.CROSSY_ROAD]: () => require('../games/crossy-road/CrossyRoad').CrossyRoad
60
- };
61
- const components = new Map<GAME_IDS, React.ComponentType<GameProps>>();
62
-
63
- /**
64
- * Get the React component for a game id, loading its module on first use.
65
- */
66
- export const loadGameComponent = (gameId: GAME_IDS | null | undefined): React.ComponentType<GameProps> | null => {
67
- if (!gameId) return null;
68
- const cached = components.get(gameId);
69
- if (cached) return cached;
70
- const load = GAME_LOADERS[gameId];
71
- if (!load) return null;
72
- const component = require('../games/shared/EngineGameLoader').withGameLoading(gameId, load);
73
- components.set(gameId, component);
74
- return component;
75
- };
76
-
77
- function warmEngine(): boolean {
78
- const { isEngineAvailable, warmUpEngine } = require('@nayan-ui/engine');
79
- if (isEngineAvailable) warmUpEngine();
80
- return isEngineAvailable;
81
- }
82
-
83
- /** Explicit engine-only warm-up for existing integrations; game assets load on their screen. */
84
- export const warmUpGames = (): (() => void) => {
85
- warmEngine();
86
- return () => {};
87
- };
88
- /** @deprecated Games no longer preload from the catalog. */
89
- export const prioritizeGameAssets = (_ids: readonly string[]) => {};
90
- /** @deprecated Game-screen loaders own their cancellation. */
91
- export const pauseGameAssetWarmup = () => {};
92
- export const getGameAssetWarmupStatus = () => ({ running: false, completed: 0, failed: 0, complete: false });
93
- /* eslint-enable @typescript-eslint/no-var-requires */
@@ -1,193 +0,0 @@
1
- import { GAME_IDS } from './UtilsService';
2
-
3
- // Global primary and background colors for all games
4
- export const PRIMARY_COLOR = '#ffffff';
5
- export const BACKGROUND_COLOR = '#3a3a5e';
6
-
7
- // Derived transparent colors from PRIMARY_COLOR
8
- export const COLORS = {
9
- // Component backgrounds and borders (white transparent)
10
- BG_35: 'rgba(255, 255, 255, 0.35)',
11
- BG_40: 'rgba(255, 255, 255, 0.40)',
12
- BG_50: 'rgba(255, 255, 255, 0.50)',
13
- // Overlay backgrounds (black transparent)
14
- OVERLAY: 'rgba(0, 0, 0, 0.8)',
15
- OVERLAY_LIGHT: 'rgba(0, 0, 0, 0.5)',
16
- // Text colors
17
- TEXT: '#ffffff',
18
- TEXT_MUTED: '#cccccc',
19
- // Accent color
20
- ACCENT: '#3b82f6',
21
- ACCENT_LIGHT: '#60a5fa',
22
- // Switch colors
23
- SWITCH_TRACK_OFF: '#555555',
24
- SWITCH_TRACK_ON: '#3b82f6',
25
- SWITCH_THUMB: '#ffffff',
26
- // Score display
27
- SCORE_GOLD: '#facc15'
28
- } as const;
29
-
30
- // Shared in-game chrome (scoreboard, control buttons, modals): frosted white. A light fill with a
31
- // brighter thin rim keeps panels crisp instead of milky. SOLID is the Game Over modal's Play Again.
32
- export const HUD = {
33
- SURFACE: 'rgba(255, 255, 255, 0.3)',
34
- BORDER: 'rgba(255, 255, 255, 0.6)',
35
- BORDER_WIDTH: 1.5,
36
- DIVIDER: 'rgba(255, 255, 255, 0.25)',
37
- TEXT: '#ffffff',
38
- TEXT_MUTED: 'rgba(255, 255, 255, 0.85)',
39
- TEXT_SHADOW: 'rgba(0, 0, 0, 0.35)',
40
- SOLID: '#ffffff',
41
- ON_SOLID: '#3a3a5e'
42
- } as const;
43
-
44
- // Game Names
45
- export const GAME_NAMES = {
46
- BALLOON_BLASTER: 'balloonBlaster',
47
- FRUIT_SLICER: 'fruitSlicer',
48
- MAZE_RUNNER: 'mazeRunner',
49
- CAT_POPPER: 'catPopper',
50
- SPACE_TRAVELLER: 'spaceTraveller'
51
- } as const;
52
-
53
- export type GameName = (typeof GAME_NAMES)[keyof typeof GAME_NAMES];
54
-
55
- // Game titles mapping - avoids circular dependency with GamesService
56
- export const getGameTitle = (gameId: string): string => {
57
- switch (gameId) {
58
- case GAME_IDS.PLAY_WITH_TUA:
59
- return 'Play With Tua';
60
- case GAME_IDS.TREASURE_HUNT:
61
- return 'Treasure Hunt';
62
- case GAME_IDS.BALLOON_BLASTER:
63
- return 'Balloon Blaster';
64
- case GAME_IDS.FRUIT_NINJA:
65
- return 'Fruit Ninja';
66
- case GAME_IDS.MAZE_RUNNER:
67
- return 'Maze Runner';
68
- case GAME_IDS.WHACK_A_MOLE:
69
- return 'Whack-a-Mole';
70
- case GAME_IDS.SPACE_FIGHTER:
71
- return 'Space Fighter';
72
- case GAME_IDS.POPIT_FIDGET:
73
- return 'Pop It Fidget';
74
- case GAME_IDS.SLIDING_NUMBERS:
75
- return 'Sliding Numbers';
76
- case GAME_IDS.GAME_2048:
77
- return '2048';
78
- case GAME_IDS.DINO_JUMP:
79
- return 'Dino Jump';
80
- case GAME_IDS.COLORS_SORT:
81
- return 'Colors Sort';
82
- case GAME_IDS.FRUIT_MERGER:
83
- return 'Fruit Merger';
84
- case GAME_IDS.FLAPPY_BIRD:
85
- return 'Flappy Bird';
86
- case GAME_IDS.CANDY_CRUSH:
87
- return 'Candy Crush';
88
- case GAME_IDS.SNAKE_3D:
89
- return 'Snake 3D';
90
- case GAME_IDS.CAR_RACING:
91
- return 'Car Racing';
92
- case GAME_IDS.BIKE_RACING:
93
- return 'Bike Racing';
94
- case GAME_IDS.BLOCK_BLAST:
95
- return 'Block Blast';
96
- case GAME_IDS.BUBBLE_SHOOTER:
97
- return 'Bubble Shooter';
98
- case GAME_IDS.PERFECT_CIRCLE:
99
- return 'Perfect Circle';
100
- case GAME_IDS.TIC_TAC_TOE:
101
- return 'Tic Tac Toe';
102
- case GAME_IDS.SPIDER_SOLITAIRE:
103
- return 'Spider Solitaire';
104
- case GAME_IDS.PAC_MAN:
105
- return 'Pac-Man';
106
- case GAME_IDS.TILE_HOME:
107
- return 'Tile Home';
108
- case GAME_IDS.WORD_SEARCH:
109
- return 'Word Search';
110
- case GAME_IDS.CONNECT_EM_ALL:
111
- return 'Connect Em All';
112
- case GAME_IDS.NUTS_AND_BOLTS:
113
- return 'Nuts and Bolts';
114
- case GAME_IDS.NUMBER_SEARCH:
115
- return 'Number Search';
116
- case GAME_IDS.DOTS_AND_BOXES:
117
- return 'Dots and Boxes';
118
- case GAME_IDS.LUDO_KING:
119
- return 'Ludo King';
120
- case GAME_IDS.TANK_1990:
121
- return 'Tank 1990';
122
- case GAME_IDS.BLOCK_BREAKER:
123
- return 'Block Breaker';
124
- case GAME_IDS.STACK_TOWER:
125
- return 'Stack Tower';
126
- case GAME_IDS.MINE_SWEEPER:
127
- return 'Mine Sweeper';
128
- case GAME_IDS.SUDOKU:
129
- return 'Sudoku';
130
- case GAME_IDS.KNIFE_HIT:
131
- return 'Knife Hit';
132
- case GAME_IDS.COLOR_SWITCH:
133
- return 'Color Switch';
134
- case GAME_IDS.PIPE_CONNECT:
135
- return 'Pipe Connect';
136
- case GAME_IDS.ARROWS:
137
- return 'Arrows';
138
- case GAME_IDS.FIND_DIFFERENT_NUMBER:
139
- return 'Find Different Number';
140
- case GAME_IDS.SNAKES_AND_LADDERS:
141
- return 'Snakes and Ladders';
142
- case GAME_IDS.BLUK:
143
- return 'Bluk';
144
- case GAME_IDS.CHAMELEON_RUN:
145
- return 'Chameleon Run';
146
- case GAME_IDS.MOB_CONTROL:
147
- return 'Mob Control';
148
- case GAME_IDS.PAPER_IO:
149
- return 'Paper IO';
150
- case GAME_IDS.CROSSY_ROAD:
151
- return 'Crossy Road';
152
- case GAME_IDS.TANGRAM:
153
- return 'Tangram';
154
- case GAME_IDS.CHECKERS:
155
- return 'Checkers';
156
- case GAME_IDS.MEMORY_MATCH:
157
- return 'Memory Match';
158
- case GAME_IDS.FALLING_STICKS:
159
- return 'Falling Sticks';
160
- case GAME_IDS.REVERSI:
161
- return 'Reversi';
162
- case GAME_IDS.PENGUIN_RUN:
163
- return 'Penguin Run';
164
- default:
165
- return 'Game Settings';
166
- }
167
- };
168
-
169
- // --- Color helpers for 3D faces ---
170
- export const hexToRgb = (hex: string): [number, number, number] => {
171
- const h = hex.replace('#', '');
172
- return [parseInt(h.substring(0, 2), 16), parseInt(h.substring(2, 4), 16), parseInt(h.substring(4, 6), 16)];
173
- };
174
-
175
- export const rgbToHex = (r: number, g: number, b: number) =>
176
- '#' +
177
- [r, g, b]
178
- .map((v) =>
179
- Math.max(0, Math.min(255, Math.round(v)))
180
- .toString(16)
181
- .padStart(2, '0')
182
- )
183
- .join('');
184
-
185
- export const lighten = (hex: string, amount: number) => {
186
- const [r, g, b] = hexToRgb(hex);
187
- return rgbToHex(r + (255 - r) * amount, g + (255 - g) * amount, b + (255 - b) * amount);
188
- };
189
-
190
- export const darken = (hex: string, amount: number) => {
191
- const [r, g, b] = hexToRgb(hex);
192
- return rgbToHex(r * (1 - amount), g * (1 - amount), b * (1 - amount));
193
- };