@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,235 +0,0 @@
1
- // Everything Connect Em All draws. Orthographic camera, one world unit per point, looking down -z:
2
- // x right and y up from the view's centre. Depth (toward the camera): the game background, board, line
3
- // shadows, lines, dot glows, dots. The engine doesn't clip, so what the original board's overflow: hidden
4
- // cut off is kept inside instead: new dots drop in from just above their row, the trail stops at the edge.
5
- import {
6
- type Color,
7
- type Entity,
8
- extrude,
9
- loadTexture,
10
- type Model,
11
- type MutableQuat,
12
- Path,
13
- quat,
14
- shapeGeometry,
15
- type Texture,
16
- type TransformBatch,
17
- type Vec3,
18
- type World
19
- } from '@nayan-ui/engine';
20
- import { lighten } from '../../services/GamesConstants';
21
- import type { GameTheme } from '../../services/ThemeService';
22
- import { spawnBackdrop } from '../shared/EngineBackdrop';
23
- import type { PopBurstOptions } from '../shared/EngineBlasts';
24
- import { cacheGameAsset, createGameMesh as createShape } from '../shared/EngineMeshes';
25
- import { toColor } from '../shared/EngineUtils';
26
- import {
27
- BOARD_RADIUS,
28
- DOT_COLORS,
29
- DOT_SHINE,
30
- GLOW_ALPHA,
31
- GLOW_IN_TIME,
32
- GLOW_OUT_TIME,
33
- GLOW_SIZE,
34
- GRID_SIZE,
35
- type Layout
36
- } from './ConnectEmAllConstants';
37
-
38
- const Z_BOARD = 0;
39
- const Z_BACKDROP = -20;
40
- const HIDDEN = 0;
41
-
42
- /** A view point (from the top-left) at depth `z`, in world space. */
43
- export const toWorld = (l: Layout, x: number, y: number, z = 0): Vec3 => [x - l.width / 2, l.height / 2 - y, z];
44
-
45
- /** Centre of the dot at (row, col), in view points. `row` may be negative: above the board, falling in. */
46
- export const dotPoint = (l: Layout, row: number, col: number): [number, number] => [
47
- l.boardLeft + l.padding + col * l.spacing,
48
- l.boardTop + l.padding + row * l.spacing
49
- ];
50
-
51
- const dotZ = (l: Layout) => l.radius * 2;
52
- const lineZ = (l: Layout) => l.radius * 0.5;
53
- const shadowZ = (l: Layout) => l.radius * 0.4;
54
- export const dotPosition = (l: Layout, row: number, col: number): Vec3 => {
55
- const [x, y] = dotPoint(l, row, col);
56
- return toWorld(l, x, y, dotZ(l));
57
- };
58
-
59
- // ── Meshes (registered once per size: mesh ids are app-wide and limited) ──
60
-
61
- const meshes = new Map<string, Model>();
62
- const mesh = (key: string, build: () => Model) => {
63
- let m = meshes.get(key);
64
- if (!m) {
65
- m = cacheGameAsset('connect-em-all/ConnectEmAllScene:' + key, build);
66
- meshes.set(key, m);
67
- }
68
- return m;
69
- };
70
- /** A glossy unit sphere. */
71
- const dotMesh = () => mesh('dot', () => createShape(shapeGeometry('sphere'), { shine: DOT_SHINE }));
72
- /** A flat unit disc facing the camera. */
73
- const discMesh = () => mesh('disc', () => createShape(extrude(new Path().addCircle(0, 0, 0.5), { depth: 0 })));
74
- /** A flat rounded square; with `rim`, only its outline. */
75
- const panelMesh = (size: number, radius: number, rim = 0) =>
76
- mesh(`panel:${size}:${radius}:${rim}`, () => {
77
- const path = new Path().addRoundedRect(0, 0, size, size, radius);
78
- if (rim > 0) path.addRoundedRect(rim, rim, size - rim * 2, size - rim * 2, radius - rim);
79
- return createShape(extrude(path, { depth: 0, fillRule: 'evenodd' }));
80
- });
81
- // ── Board ─────────────────────────────────────────────────────────────
82
-
83
- export type Board = { backdrop: Entity; panel: Entity; rim: Entity };
84
-
85
- /** The game background, and behind the whole grid the board panel and its rim, as Block Blast's: in the theme's board colors. */
86
- export function buildBoard(world: World, l: Layout, theme: GameTheme): Board {
87
- loadGlowTexture();
88
- const centre = toWorld(l, l.boardLeft + l.boardSize / 2, l.boardTop + l.boardSize / 2);
89
- const panel = world.spawn({
90
- mesh: panelMesh(l.boardSize, BOARD_RADIUS),
91
- position: [centre[0], centre[1], Z_BOARD],
92
- color: toColor(theme.BOARD.SURFACE),
93
- pickable: false
94
- });
95
- const rim = world.spawn({
96
- mesh: panelMesh(l.boardSize, BOARD_RADIUS, 1),
97
- position: [centre[0], centre[1], Z_BOARD + 0.2],
98
- color: toColor(theme.BOARD.BORDER),
99
- pickable: false
100
- });
101
- return { backdrop: spawnBackdrop(world, l.width, l.height, Z_BACKDROP, theme), panel, rim };
102
- }
103
-
104
- export function removeBoard(world: World, b: Board) {
105
- world.despawn(b.panel);
106
- world.despawn(b.rim);
107
- world.despawn(b.backdrop);
108
- }
109
-
110
- // ── Dots ──────────────────────────────────────────────────────────────
111
-
112
- // Per color: the dot, its chain line (a little lighter) and its burst's highlight
113
- const DOTS = DOT_COLORS.map((c) => toColor(c));
114
- const LINES = DOT_COLORS.map((c) => toColor(lighten(c, 0.15)));
115
- export const dotColor = (colorIndex: number) => DOTS[colorIndex]!;
116
- export const lineColor = (colorIndex: number) => LINES[colorIndex]!;
117
-
118
- // The halo's texture: white, its opacity full under the dot and easing off smoothly to nothing at the
119
- // rim, so the halo reads as light spilling from the dot. Loaded once; drawn blended (alpha below 1).
120
- let glowTexture: Texture | null = null;
121
- let glowLoading: Promise<void> | null = null;
122
- export function loadGlowTexture() {
123
- glowLoading ??= loadTexture(require('../../assets/textures/soft_glow.png'))
124
- .then((t) => {
125
- glowTexture = t;
126
- })
127
- .catch(() => {
128
- glowLoading = null; // retried with the next board
129
- });
130
- }
131
-
132
- /** A dot and its glow: a soft halo behind it, shown while it's in the chain. */
133
- export function spawnDot(world: World, l: Layout, row: number, col: number, colorIndex: number): { entity: Entity; glow: Entity } {
134
- const color = dotColor(colorIndex);
135
- const entity = world.spawn({ mesh: dotMesh(), position: dotPosition(l, row, col), scale: l.radius * 2, color, pickable: false });
136
- const glow = world.spawn({
137
- mesh: discMesh(),
138
- texture: glowTexture,
139
- parent: entity,
140
- // Parent units: the dot is 1 across. Behind the sphere, so only the fading part shows around it.
141
- position: [0, 0, -0.55],
142
- scale: HIDDEN,
143
- color: [color[0], color[1], color[2], GLOW_ALPHA],
144
- pickable: false
145
- });
146
- return { entity, glow };
147
- }
148
-
149
- /** The halo blooms in (overshooting a touch) and stays steady while the dot is in the chain, or fades away. */
150
- export function showGlow(world: World, glow: Entity, on: boolean) {
151
- // Dots made before the texture arrived pick it up the first time they glow
152
- if (on && glowTexture) world.set(glow, { mesh: discMesh(), texture: glowTexture });
153
- world.stopAnimation(glow);
154
- world.animate(
155
- glow,
156
- { scale: on ? GLOW_SIZE : HIDDEN },
157
- on ? { duration: GLOW_IN_TIME, easing: 'back' } : { duration: GLOW_OUT_TIME, easing: 'easeIn' }
158
- );
159
- }
160
-
161
- /** Where a cleared dot's burst flies from (in front of it) and glows (behind it, over the chain lines). */
162
- export function dotBurst(l: Layout, row: number, col: number, colorIndex: number): PopBurstOptions {
163
- const at = dotPosition(l, row, col);
164
- return { position: [at[0], at[1], at[2] + l.radius], size: l.radius * 2, color: dotColor(colorIndex), glowZ: l.radius * 0.8 };
165
- }
166
-
167
- /** A dot's scale at rest (for popping it away). */
168
- export const dotScale = (l: Layout) => l.radius * 2;
169
-
170
- // ── Lines ─────────────────────────────────────────────────────────────
171
-
172
- /** A chain segment: its drop shadow and the line itself. */
173
- export type Segment = { shadow: Entity; line: Entity };
174
-
175
- export function spawnSegment(world: World): Segment {
176
- const bar = () => world.spawn({ mesh: 'cube', scale: HIDDEN, pickable: false });
177
- return { shadow: bar(), line: bar() };
178
- }
179
-
180
- const SHADOW: Color = [0, 0, 0, 0.3];
181
- const scratch: MutableQuat = [0, 0, 0, 1];
182
-
183
- /** Places a bar from a to b (view points), `width` thick. Its ends sit under the dots it joins. */
184
- function placeBar(updates: TransformBatch, l: Layout, bar: Entity, a: [number, number], b: [number, number], width: number, z: number, color: Color) {
185
- const dx = b[0] - a[0];
186
- const dy = a[1] - b[1]; // world y runs up
187
- const position = toWorld(l, (a[0] + b[0]) / 2, (a[1] + b[1]) / 2, z);
188
- const rotation = quat.z(Math.atan2(dy, dx), scratch);
189
- updates.transform(bar, position[0], position[1], position[2], rotation[0], rotation[1], rotation[2], rotation[3]);
190
- updates.scale(bar, Math.hypot(dx, dy), width, 0.5);
191
- updates.color(bar, color[0], color[1], color[2], color[3] ?? 1);
192
- }
193
-
194
- export const lineWidth = (l: Layout) => l.radius * 0.45;
195
-
196
- export function showSegment(world: World, l: Layout, s: Segment, a: [number, number], b: [number, number], color: Color) {
197
- const updates = world.transforms;
198
- const w = lineWidth(l);
199
- placeBar(updates, l, s.shadow, [a[0] + 1, a[1] + 2], [b[0] + 1, b[1] + 2], w + 2, shadowZ(l), SHADOW);
200
- placeBar(updates, l, s.line, a, b, w, lineZ(l), color);
201
- updates.flush();
202
- }
203
-
204
- export function hideSegment(world: World, s: Segment) {
205
- world.set(s.shadow, { scale: HIDDEN });
206
- world.set(s.line, { scale: HIDDEN });
207
- }
208
-
209
- /** The line from the chain's last dot to the finger, with a round end at the finger. */
210
- export type Trail = { line: Entity; cap: Entity };
211
-
212
- export function spawnTrail(world: World): Trail {
213
- return {
214
- line: world.spawn({ mesh: 'cube', scale: HIDDEN, pickable: false }),
215
- cap: world.spawn({ mesh: discMesh(), scale: HIDDEN, pickable: false })
216
- };
217
- }
218
-
219
- export function showTrail(world: World, l: Layout, t: Trail, from: [number, number], to: [number, number], color: Color) {
220
- const updates = world.transforms;
221
- const w = lineWidth(l);
222
- placeBar(updates, l, t.line, from, to, w, lineZ(l), color);
223
- const position = toWorld(l, to[0], to[1], lineZ(l));
224
- updates.position(t.cap, position[0], position[1], position[2]);
225
- updates.scale(t.cap, w);
226
- updates.color(t.cap, color[0], color[1], color[2], color[3] ?? 1);
227
- updates.flush();
228
- }
229
-
230
- export function hideTrail(world: World, t: Trail) {
231
- world.set(t.line, { scale: HIDDEN });
232
- world.set(t.cap, { scale: HIDDEN });
233
- }
234
-
235
- export const DOT_COUNT = GRID_SIZE * GRID_SIZE;
@@ -1,74 +0,0 @@
1
- // Crossy Road's code-built low-poly scene, shared game HUD and native hop animations.
2
- import { HapticType } from '../../services/HapticsService';
3
- import { GAME_SOUNDS } from '../../services/SoundsService';
4
- import { GAME_IDS } from '../../services/UtilsService';
5
- import { engineGame, EngineGameScreen } from '../shared/EngineGameScreen';
6
- import { scoreColumn, textColumn, timerColumn } from '../shared/EngineHud';
7
- import { useEngineGame } from '../shared/useEngineGame';
8
- import { useLiveState } from '../shared/useLiveState';
9
- import { DAY_LIGHT, GAME_DURATION, getLayout, LOW_TIME, NIGHT_LIGHT, SKY_DAY, SKY_NIGHT, TOTAL_ROADS } from './CrossyRoadConstants';
10
- import { createGame, dispose, drag, reset, setLayout, setNight, start, tick } from './CrossyRoadGame';
11
-
12
- const SOUNDS = GAME_SOUNDS.CROSSY_ROAD;
13
-
14
- export const CrossyRoad = engineGame(GAME_IDS.CROSSY_ROAD, (props) => {
15
- const [score, setScore] = useLiveState(0);
16
- const [crossings, setCrossings] = useLiveState(0);
17
- const [time, setTime] = useLiveState(GAME_DURATION);
18
- const { theme, status, screen, gameOver } = useEngineGame(props, {
19
- gameId: GAME_IDS.CROSSY_ROAD,
20
- create: (theme) => createGame(theme.isDark),
21
- start,
22
- reset,
23
- dispose,
24
- tick,
25
- setTheme: (g, theme) => setNight(g, theme.isDark),
26
- resize: (g, width, height, offset) => {
27
- const l = getLayout(width, height, offset);
28
- setLayout(g, l);
29
- return l.gridW;
30
- },
31
- drag,
32
- sounds: SOUNDS,
33
- resultsDelay: (status) => (status === 'win' ? 1050 : 450),
34
- onStart: (fx) => fx(SOUNDS.START, HapticType.SUCCESS),
35
- onStop: (fx) => fx(null, HapticType.MEDIUM),
36
- onOver: (fx, status) => {
37
- if (status === 'win') fx(SOUNDS.WIN, HapticType.SUCCESS);
38
- },
39
- wire: (g, fx) => {
40
- g.onScore = (value, roads) => {
41
- setScore(value);
42
- setCrossings(roads);
43
- };
44
- g.onTime = setTime;
45
- g.onEvent = (event) => {
46
- if (event === 'hop') fx(SOUNDS.HOP, HapticType.LIGHT);
47
- else if (event === 'cross') fx(SOUNDS.CROSS, HapticType.SUCCESS);
48
- else if (event === 'crash') fx(SOUNDS.CRASH, HapticType.ERROR);
49
- else fx(SOUNDS.TIME_UP, HapticType.ERROR);
50
- };
51
- }
52
- });
53
- const night = theme.isDark;
54
- return (
55
- <EngineGameScreen
56
- {...screen}
57
- light={night ? NIGHT_LIGHT : DAY_LIGHT}
58
- background={night ? SKY_NIGHT : SKY_DAY}
59
- fog={0.0015}
60
- columns={[scoreColumn(score), textColumn('CROSSINGS', `${crossings}/${TOTAL_ROADS}`), timerColumn(time, theme, LOW_TIME)]}
61
- subtext="Cross roads, dodge traffic!"
62
- gameOver={gameOver({
63
- title: status === 'win' ? 'YOU WIN!' : 'GAME OVER',
64
- message:
65
- status === 'win'
66
- ? `You crossed all ${crossings} roads with time to spare!`
67
- : `You crossed ${crossings} ${crossings === 1 ? 'road' : 'roads'}!`,
68
- scoreLabel: 'Score',
69
- score,
70
- buttonText: 'Play Again!'
71
- })}
72
- />
73
- );
74
- });
@@ -1,59 +0,0 @@
1
- // Crossy Road's camera: a perspective camera behind and above the start lane, looking up the board,
2
- // placed so the whole board (all 13 lanes) fills the band between the scoreboard and the controls and
3
- // its nine columns fit across. Worked out once per layout by projecting the board's corners, as the
4
- // renderer will (vertical field of view, the view's aspect, +y up the board, +z up off it).
5
- import type { Camera } from '@nayan-ui/engine';
6
- import { CAMERA_FOV, CAMERA_PITCH, type Layout, PERSON, TOTAL_LANES, WORLD_SCALE } from './CrossyRoadConstants';
7
-
8
- type V3 = [number, number, number];
9
- const dot = (a: V3, b: V3) => a[0] * b[0] + a[1] * b[1] + a[2] * b[2];
10
-
11
- /** The view point of a world point, for a camera at `eye` looking along +y tilted down by the pitch. */
12
- export function viewPoint(l: Layout, eye: V3, p: V3): [number, number] {
13
- const f: V3 = [0, Math.cos(CAMERA_PITCH), -Math.sin(CAMERA_PITCH)];
14
- const u: V3 = [0, Math.sin(CAMERA_PITCH), Math.cos(CAMERA_PITCH)];
15
- const v: V3 = [p[0] - eye[0], p[1] - eye[1], p[2] - eye[2]];
16
- const depth = dot(v, f);
17
- const t = Math.tan(CAMERA_FOV / 2);
18
- const aspect = l.width / l.height;
19
- return [(l.width / 2) * (1 + v[0] / (depth * t * aspect)), (l.height / 2) * (1 - dot(v, u) / (depth * t))];
20
- }
21
-
22
- /**
23
- * Places the camera to frame the board (world units, a tenth of view points). With the pitch fixed, a
24
- * board point a distance `a` ahead of the eye shows at view height n (-1 bottom .. 1 top) when
25
- * a = h * g(n), h the eye's height; so the near and far edges' wanted heights give h and the eye's place
26
- * exactly. The far constraint includes the pedestrian's head, so the scoreboard cannot hide them at
27
- * the goal. If the nine columns wouldn't fit across the nearest lane, the band is narrowed until they do.
28
- */
29
- export function frameCamera(camera: Camera, l: Layout) {
30
- const k = WORLD_SCALE;
31
- const half = (TOTAL_LANES * l.laneH * k) / 2;
32
- const goalY = half - (l.laneH * k) / 2;
33
- const headHeight = PERSON.HEIGHT * PERSON.SCALE * l.tile * k;
34
- const c = Math.cos(CAMERA_PITCH);
35
- const s = Math.sin(CAMERA_PITCH);
36
- const t = Math.tan(CAMERA_FOV / 2);
37
- const aspect = l.width / l.height;
38
- const g = (n: number) => (c + n * t * s) / (s - n * t * c);
39
- const ndc = (y: number) => 1 - (2 * y) / l.height;
40
- const mid = (l.top + l.bottom) / 2;
41
- let span = l.bottom - l.top;
42
- let eye: V3 = [0, 0, 0];
43
- for (let i = 0; i < 80; i++) {
44
- const nNear = ndc(mid + span / 2);
45
- const nFar = ndc(mid - span / 2);
46
- const h = (goalY + half + headHeight * g(nFar)) / (g(nFar) - g(nNear));
47
- const ey = -half - h * g(nNear);
48
- eye = [0, ey, h];
49
- // The nearest lane's half-width in view, at its depth
50
- const depth = (-half - ey) * c + h * s;
51
- if (depth * t * aspect >= (l.gridW / 2 + l.tile * 0.3) * k) break;
52
- span *= 0.97;
53
- }
54
- // Looking along the pitch from the eye: the target where the view's axis meets the board
55
- camera.eye = eye;
56
- camera.target = [0, eye[1] + eye[2] / Math.tan(CAMERA_PITCH), 0];
57
- camera.fov = CAMERA_FOV;
58
- delete camera.ortho;
59
- }
@@ -1,132 +0,0 @@
1
- import type { Light } from '@nayan-ui/engine';
2
- import { isTablet } from '../../services/UtilsService';
3
- // Crossy Road's rules, tuning, colors and layout. The board, traffic and scoring match the original version
4
- // (games/crossy-road): rules are in view points (one world unit per point), sized from the view's width
5
- // exactly as the original board sized itself from the window, so traffic moves as it did.
6
- import { getScoreBoardTop } from '../shared/EngineHud';
7
- import { gameWidthFor } from '../shared/EngineUtils';
8
-
9
- // ── Rules ─────────────────────────────────────────────────────────────
10
-
11
- export const COLS = 9;
12
- export const TOTAL_ROADS = 9;
13
- const ROADS_PER_REST = 3;
14
- export type LaneType = 'grass' | 'road';
15
-
16
- /** A grass start lane, nine roads with a grass rest lane after every three, a grass goal lane (bottom to top). */
17
- export const LANE_TYPES: LaneType[] = (() => {
18
- const pattern: LaneType[] = ['grass'];
19
- let roads = 0;
20
- let since = 0;
21
- while (roads < TOTAL_ROADS) {
22
- pattern.push('road');
23
- roads++;
24
- since++;
25
- if (since === ROADS_PER_REST && roads < TOTAL_ROADS) {
26
- pattern.push('grass');
27
- since = 0;
28
- }
29
- }
30
- pattern.push('grass');
31
- return pattern;
32
- })();
33
- export const TOTAL_LANES = LANE_TYPES.length;
34
- export const GOAL_ROW = TOTAL_LANES - 1;
35
-
36
- export const GAME_DURATION = 120; // seconds
37
- export const SCORE_PER_CROSS = 2000;
38
- export const LOW_TIME = 10;
39
-
40
- // Traffic, in points per 60 Hz frame (as the original game moved it)
41
- export const CAR_SPEED_MIN = isTablet ? 2.0 : 1.55;
42
- export const CAR_SPEED_MAX = isTablet ? 4.15 : 3.25;
43
- export const STEP_MS = 1000 / 60;
44
- export const MAX_PENDING_MS = 50;
45
- /** Traffic speeds up a little with every road crossed. */
46
- export const speedScale = (crossings: number) => Math.min(1 + crossings * 0.065, 1.9);
47
-
48
- // ── Touch and feel ────────────────────────────────────────────────────
49
-
50
- export const MOVE_TIME = 0.2; // seconds per grid move, with two alternating running footfalls
51
- export const SWIPE = 18; // points a finger travels for a swipe
52
- export const TAP_MAX = 0.25; // seconds a tap may take
53
-
54
- // ── Colors ────────────────────────────────────────────────────────────
55
-
56
- export const COLORS = {
57
- GRASS_LIGHT: '#95CF69',
58
- GRASS_DARK: '#83BF5C',
59
- GRASS_TUFT: '#4E9A2E',
60
- ROAD: '#4B5667',
61
- ROAD_EDGE: '#3C3C46',
62
- ROAD_LINE: '#C9C9CF',
63
- CAR_COLORS: ['#FF5C5C', '#FFD93D', '#6BCB77', '#A66CFF', '#FF9F45', '#4D96FF', '#37C7C2', '#F2EEE2', '#EF7CAB'],
64
- WHEEL: '#15151A',
65
- WINDOW: '#2A3442',
66
- PLAYER: '#3B82C4',
67
- TRUNK: '#7A4E2D',
68
- LEAVES: '#3FA34D',
69
- FLOWERS: ['#FFFFFF', '#FFD1EC', '#C7B3FF', '#FFF2B0'],
70
- CURB: '#C9C6BE',
71
- LINE: '#F2F2EE',
72
- BUSH: '#3E8E3A',
73
- ROCK: '#8E8C88'
74
- } as const;
75
- export const PERSON = { SCALE: 0.82, HEIGHT: 1.817, STRIDE: 0.5 } as const;
76
- export const PERSON_COLORS = {
77
- SKIN: '#DCA67D',
78
- JACKET: COLORS.PLAYER,
79
- PANTS: '#3B4558',
80
- HAIR: '#352B27',
81
- SHOE: '#39434C',
82
- SOLE: '#F0ECE1',
83
- BACKPACK: '#CE8248',
84
- STRAP: '#72513A'
85
- } as const;
86
- // ── The scene ─────────────────────────────────────────────────────────
87
-
88
- /**
89
- * The rules are in view points (a lane is about 40 of them), but the engine draws only what's within
90
- * 500 units of the camera and shadows a few dozen units round it, so the whole scene hangs off a root
91
- * scaled to a tenth: one world unit is ten points.
92
- */
93
- export const WORLD_SCALE = 0.1;
94
- /** A perspective camera behind and above the start lane, looking up the board at this angle below level. */
95
- export const CAMERA_PITCH = 0.92;
96
- export const CAMERA_FOV = 0.7;
97
- export const SKY_DAY = [0.62, 0.78, 0.95] as const;
98
- export const SKY_NIGHT = [0.227, 0.192, 0.376] as const;
99
- /** The sun high to the front left (z is up off the board), shadows falling up and right; the night's dim bluish moonlight. */
100
- export const DAY_LIGHT: Light = { direction: [-0.45, -0.55, 1], ambient: 0.5, shadowExtent: 40 };
101
- export const NIGHT_LIGHT: Light = { direction: [-0.3, -0.5, 1], ambient: 0.66, shadowExtent: 40, color: [0.84, 0.88, 1] };
102
-
103
- // ── Layout (view points) ──────────────────────────────────────────────
104
-
105
- const SCOREBOARD_HEIGHT = 82;
106
- const CONTROLS_HEIGHT = 110;
107
-
108
- export type Layout = {
109
- width: number;
110
- height: number;
111
- /** A column's width, a lane's depth, the player grid's width and its left edge (view x). */
112
- tile: number;
113
- laneH: number;
114
- gridW: number;
115
- gridLeft: number;
116
- /** The view's band between the scoreboard and the controls, where the board is framed (view y). */
117
- top: number;
118
- bottom: number;
119
- };
120
-
121
- /** Wider lanes fill more of the view while the camera keeps all nine columns reachable. */
122
- export function getLayout(width: number, height: number, offset: number): Layout {
123
- const playWidth = gameWidthFor(width);
124
- const tile = Math.floor(playWidth / COLS);
125
- const gridW = COLS * tile;
126
- const top = getScoreBoardTop(offset) + SCOREBOARD_HEIGHT;
127
- const bottom = Math.max(top + 200, height - CONTROLS_HEIGHT);
128
- return { width, height, tile, laneH: tile * 1.25, gridW, gridLeft: Math.round((width - gridW) / 2), top, bottom };
129
- }
130
-
131
- /** A column's centre (view x). */
132
- export const colX = (l: Layout, col: number) => l.gridLeft + col * l.tile + l.tile / 2;