react-native-games 0.6.0 → 0.8.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 (344) hide show
  1. package/README.md +148 -23
  2. package/lib/module/games/balloon-blaster/BalloonBlaster.js +5 -8
  3. package/lib/module/games/balloon-blaster/BalloonBlaster.js.map +1 -1
  4. package/lib/module/games/candy-crush/CandyCrush.js +121 -0
  5. package/lib/module/games/candy-crush/CandyCrush.js.map +1 -0
  6. package/lib/module/games/candy-crush/CandyCrushConstants.js +125 -0
  7. package/lib/module/games/candy-crush/CandyCrushConstants.js.map +1 -0
  8. package/lib/module/games/candy-crush/CandyCrushService.js +370 -0
  9. package/lib/module/games/candy-crush/CandyCrushService.js.map +1 -0
  10. package/lib/module/games/candy-crush/CandyCrushStore.js +305 -0
  11. package/lib/module/games/candy-crush/CandyCrushStore.js.map +1 -0
  12. package/lib/module/games/candy-crush/components/CandyItem.js +191 -0
  13. package/lib/module/games/candy-crush/components/CandyItem.js.map +1 -0
  14. package/lib/module/games/candy-crush/components/GameBackground.js +85 -0
  15. package/lib/module/games/candy-crush/components/GameBackground.js.map +1 -0
  16. package/lib/module/games/candy-crush/components/GameGrid.js +314 -0
  17. package/lib/module/games/candy-crush/components/GameGrid.js.map +1 -0
  18. package/lib/module/games/candy-crush/components/ScoreBoard.js +112 -0
  19. package/lib/module/games/candy-crush/components/ScoreBoard.js.map +1 -0
  20. package/lib/module/games/candy-crush/components/index.js +7 -0
  21. package/lib/module/games/candy-crush/components/index.js.map +1 -0
  22. package/lib/module/games/candy-crush/index.js +6 -0
  23. package/lib/module/games/candy-crush/index.js.map +1 -0
  24. package/lib/module/games/color-sort/ColorSort.js +130 -0
  25. package/lib/module/games/color-sort/ColorSort.js.map +1 -0
  26. package/lib/module/games/color-sort/ColorSortConstants.js +68 -0
  27. package/lib/module/games/color-sort/ColorSortConstants.js.map +1 -0
  28. package/lib/module/games/color-sort/ColorSortService.js +255 -0
  29. package/lib/module/games/color-sort/ColorSortService.js.map +1 -0
  30. package/lib/module/games/color-sort/ColorSortStore.js +258 -0
  31. package/lib/module/games/color-sort/ColorSortStore.js.map +1 -0
  32. package/lib/module/games/color-sort/components/ColorContainer.js +140 -0
  33. package/lib/module/games/color-sort/components/ColorContainer.js.map +1 -0
  34. package/lib/module/games/color-sort/components/GameBackground.js +135 -0
  35. package/lib/module/games/color-sort/components/GameBackground.js.map +1 -0
  36. package/lib/module/games/color-sort/components/ScoreBoard.js +78 -0
  37. package/lib/module/games/color-sort/components/ScoreBoard.js.map +1 -0
  38. package/lib/module/games/color-sort/components/index.js +6 -0
  39. package/lib/module/games/color-sort/components/index.js.map +1 -0
  40. package/lib/module/games/dino-jump/DinoJump.js +209 -0
  41. package/lib/module/games/dino-jump/DinoJump.js.map +1 -0
  42. package/lib/module/games/dino-jump/DinoJumpConstants.js +179 -0
  43. package/lib/module/games/dino-jump/DinoJumpConstants.js.map +1 -0
  44. package/lib/module/games/dino-jump/DinoJumpService.js +268 -0
  45. package/lib/module/games/dino-jump/DinoJumpService.js.map +1 -0
  46. package/lib/module/games/dino-jump/DinoJumpStore.js +387 -0
  47. package/lib/module/games/dino-jump/DinoJumpStore.js.map +1 -0
  48. package/lib/module/games/dino-jump/components/DinoSprite.js +409 -0
  49. package/lib/module/games/dino-jump/components/DinoSprite.js.map +1 -0
  50. package/lib/module/games/dino-jump/components/GameArea.js +68 -0
  51. package/lib/module/games/dino-jump/components/GameArea.js.map +1 -0
  52. package/lib/module/games/dino-jump/components/GameBackground.js +421 -0
  53. package/lib/module/games/dino-jump/components/GameBackground.js.map +1 -0
  54. package/lib/module/games/dino-jump/components/ObstacleSprite.js +306 -0
  55. package/lib/module/games/dino-jump/components/ObstacleSprite.js.map +1 -0
  56. package/lib/module/games/dino-jump/components/ScoreBoard.js +107 -0
  57. package/lib/module/games/dino-jump/components/ScoreBoard.js.map +1 -0
  58. package/lib/module/games/dino-jump/components/StarSprite.js +45 -0
  59. package/lib/module/games/dino-jump/components/StarSprite.js.map +1 -0
  60. package/lib/module/games/dino-jump/components/index.js +9 -0
  61. package/lib/module/games/dino-jump/components/index.js.map +1 -0
  62. package/lib/module/games/flappy-bird/FlappyBird.js +131 -0
  63. package/lib/module/games/flappy-bird/FlappyBird.js.map +1 -0
  64. package/lib/module/games/flappy-bird/FlappyBirdConstants.js +90 -0
  65. package/lib/module/games/flappy-bird/FlappyBirdConstants.js.map +1 -0
  66. package/lib/module/games/flappy-bird/FlappyBirdStore.js +276 -0
  67. package/lib/module/games/flappy-bird/FlappyBirdStore.js.map +1 -0
  68. package/lib/module/games/flappy-bird/components/Bird.js +87 -0
  69. package/lib/module/games/flappy-bird/components/Bird.js.map +1 -0
  70. package/lib/module/games/flappy-bird/components/GameArea.js +86 -0
  71. package/lib/module/games/flappy-bird/components/GameArea.js.map +1 -0
  72. package/lib/module/games/flappy-bird/components/GameBackground.js +112 -0
  73. package/lib/module/games/flappy-bird/components/GameBackground.js.map +1 -0
  74. package/lib/module/games/flappy-bird/components/Pipes.js +175 -0
  75. package/lib/module/games/flappy-bird/components/Pipes.js.map +1 -0
  76. package/lib/module/games/flappy-bird/components/ScoreBoard.js +72 -0
  77. package/lib/module/games/flappy-bird/components/ScoreBoard.js.map +1 -0
  78. package/lib/module/games/flappy-bird/components/index.js +8 -0
  79. package/lib/module/games/flappy-bird/components/index.js.map +1 -0
  80. package/lib/module/games/fruit-merger/FruitMerger.js +112 -0
  81. package/lib/module/games/fruit-merger/FruitMerger.js.map +1 -0
  82. package/lib/module/games/fruit-merger/FruitMergerConstants.js +119 -0
  83. package/lib/module/games/fruit-merger/FruitMergerConstants.js.map +1 -0
  84. package/lib/module/games/fruit-merger/FruitMergerService.js +13 -0
  85. package/lib/module/games/fruit-merger/FruitMergerService.js.map +1 -0
  86. package/lib/module/games/fruit-merger/FruitMergerStore.js +318 -0
  87. package/lib/module/games/fruit-merger/FruitMergerStore.js.map +1 -0
  88. package/lib/module/games/fruit-merger/components/FruitItem.js +102 -0
  89. package/lib/module/games/fruit-merger/components/FruitItem.js.map +1 -0
  90. package/lib/module/games/fruit-merger/components/GameArea.js +123 -0
  91. package/lib/module/games/fruit-merger/components/GameArea.js.map +1 -0
  92. package/lib/module/games/fruit-merger/components/GameBackground.js +477 -0
  93. package/lib/module/games/fruit-merger/components/GameBackground.js.map +1 -0
  94. package/lib/module/games/fruit-merger/components/ScoreBoard.js +66 -0
  95. package/lib/module/games/fruit-merger/components/ScoreBoard.js.map +1 -0
  96. package/lib/module/games/fruit-merger/components/index.js +7 -0
  97. package/lib/module/games/fruit-merger/components/index.js.map +1 -0
  98. package/lib/module/games/fruit-ninja/FruitNinja.js +6 -9
  99. package/lib/module/games/fruit-ninja/FruitNinja.js.map +1 -1
  100. package/lib/module/games/game-2048/Game2048.js +120 -0
  101. package/lib/module/games/game-2048/Game2048.js.map +1 -0
  102. package/lib/module/games/game-2048/Game2048Constants.js +263 -0
  103. package/lib/module/games/game-2048/Game2048Constants.js.map +1 -0
  104. package/lib/module/games/game-2048/Game2048Service.js +457 -0
  105. package/lib/module/games/game-2048/Game2048Service.js.map +1 -0
  106. package/lib/module/games/game-2048/Game2048Store.js +238 -0
  107. package/lib/module/games/game-2048/Game2048Store.js.map +1 -0
  108. package/lib/module/games/game-2048/components/GameBackground.js +247 -0
  109. package/lib/module/games/game-2048/components/GameBackground.js.map +1 -0
  110. package/lib/module/games/game-2048/components/GameGrid.js +139 -0
  111. package/lib/module/games/game-2048/components/GameGrid.js.map +1 -0
  112. package/lib/module/games/game-2048/components/GameTile.js +72 -0
  113. package/lib/module/games/game-2048/components/GameTile.js.map +1 -0
  114. package/lib/module/games/game-2048/components/ScoreBoard.js +70 -0
  115. package/lib/module/games/game-2048/components/ScoreBoard.js.map +1 -0
  116. package/lib/module/games/game-2048/components/index.js +7 -0
  117. package/lib/module/games/game-2048/components/index.js.map +1 -0
  118. package/lib/module/games/maze-runner/MazeRunner.js +33 -31
  119. package/lib/module/games/maze-runner/MazeRunner.js.map +1 -1
  120. package/lib/module/games/popit-fidget/PopitFidget.js +34 -32
  121. package/lib/module/games/popit-fidget/PopitFidget.js.map +1 -1
  122. package/lib/module/games/sliding-numbers/SlidingNumbers.js +161 -0
  123. package/lib/module/games/sliding-numbers/SlidingNumbers.js.map +1 -0
  124. package/lib/module/games/sliding-numbers/SlidingNumbersConstants.js +207 -0
  125. package/lib/module/games/sliding-numbers/SlidingNumbersConstants.js.map +1 -0
  126. package/lib/module/games/sliding-numbers/SlidingNumbersService.js +248 -0
  127. package/lib/module/games/sliding-numbers/SlidingNumbersService.js.map +1 -0
  128. package/lib/module/games/sliding-numbers/SlidingNumbersStore.js +275 -0
  129. package/lib/module/games/sliding-numbers/SlidingNumbersStore.js.map +1 -0
  130. package/lib/module/games/sliding-numbers/components/GameBackground.js +259 -0
  131. package/lib/module/games/sliding-numbers/components/GameBackground.js.map +1 -0
  132. package/lib/module/games/sliding-numbers/components/NumbersGrid.js +174 -0
  133. package/lib/module/games/sliding-numbers/components/NumbersGrid.js.map +1 -0
  134. package/lib/module/games/sliding-numbers/components/NumbersTile.js +116 -0
  135. package/lib/module/games/sliding-numbers/components/NumbersTile.js.map +1 -0
  136. package/lib/module/games/sliding-numbers/components/ScoreBoard.js +66 -0
  137. package/lib/module/games/sliding-numbers/components/ScoreBoard.js.map +1 -0
  138. package/lib/module/games/sliding-numbers/components/index.js +7 -0
  139. package/lib/module/games/sliding-numbers/components/index.js.map +1 -0
  140. package/lib/module/games/snake/Snake.js +192 -0
  141. package/lib/module/games/snake/Snake.js.map +1 -0
  142. package/lib/module/games/snake/SnakeConstants.js +138 -0
  143. package/lib/module/games/snake/SnakeConstants.js.map +1 -0
  144. package/lib/module/games/snake/SnakeService.js +148 -0
  145. package/lib/module/games/snake/SnakeService.js.map +1 -0
  146. package/lib/module/games/snake/SnakeStore.js +184 -0
  147. package/lib/module/games/snake/SnakeStore.js.map +1 -0
  148. package/lib/module/games/snake/components/GameBackground.js +221 -0
  149. package/lib/module/games/snake/components/GameBackground.js.map +1 -0
  150. package/lib/module/games/snake/components/GameGrid.js +153 -0
  151. package/lib/module/games/snake/components/GameGrid.js.map +1 -0
  152. package/lib/module/games/snake/components/ScoreBoard.js +57 -0
  153. package/lib/module/games/snake/components/ScoreBoard.js.map +1 -0
  154. package/lib/module/games/snake/components/index.js +6 -0
  155. package/lib/module/games/snake/components/index.js.map +1 -0
  156. package/lib/module/games/snake/index.js +6 -0
  157. package/lib/module/games/snake/index.js.map +1 -0
  158. package/lib/module/games/space-fighter/SpaceFighter.js +7 -10
  159. package/lib/module/games/space-fighter/SpaceFighter.js.map +1 -1
  160. package/lib/module/games/whack-a-mole/WhackAMole.js +6 -6
  161. package/lib/module/games/whack-a-mole/WhackAMole.js.map +1 -1
  162. package/lib/module/games/whack-a-mole/components/GameBackground.js +7 -8
  163. package/lib/module/games/whack-a-mole/components/GameBackground.js.map +1 -1
  164. package/lib/module/index.js +8 -0
  165. package/lib/module/index.js.map +1 -1
  166. package/lib/module/services/GamesConstants.js +58 -2
  167. package/lib/module/services/GamesConstants.js.map +1 -1
  168. package/lib/module/services/GamesService.js +40 -0
  169. package/lib/module/services/GamesService.js.map +1 -1
  170. package/lib/module/services/SoundsService.js +132 -1
  171. package/lib/module/services/SoundsService.js.map +1 -1
  172. package/lib/module/shared/helpers/GameOverModal.js +6 -3
  173. package/lib/module/shared/helpers/GameOverModal.js.map +1 -1
  174. package/lib/module/shared/helpers/GameSettingsModal.js +3 -3
  175. package/lib/module/shared/helpers/GameSettingsModal.js.map +1 -1
  176. package/lib/module/shared/helpers/ParticleBlast.js +3 -2
  177. package/lib/module/shared/helpers/ParticleBlast.js.map +1 -1
  178. package/lib/typescript/src/games/balloon-blaster/BalloonBlaster.d.ts.map +1 -1
  179. package/lib/typescript/src/games/candy-crush/CandyCrush.d.ts +4 -0
  180. package/lib/typescript/src/games/candy-crush/CandyCrush.d.ts.map +1 -0
  181. package/lib/typescript/src/games/candy-crush/CandyCrushConstants.d.ts +104 -0
  182. package/lib/typescript/src/games/candy-crush/CandyCrushConstants.d.ts.map +1 -0
  183. package/lib/typescript/src/games/candy-crush/CandyCrushService.d.ts +40 -0
  184. package/lib/typescript/src/games/candy-crush/CandyCrushService.d.ts.map +1 -0
  185. package/lib/typescript/src/games/candy-crush/CandyCrushStore.d.ts +48 -0
  186. package/lib/typescript/src/games/candy-crush/CandyCrushStore.d.ts.map +1 -0
  187. package/lib/typescript/src/games/candy-crush/components/CandyItem.d.ts +13 -0
  188. package/lib/typescript/src/games/candy-crush/components/CandyItem.d.ts.map +1 -0
  189. package/lib/typescript/src/games/candy-crush/components/GameBackground.d.ts +5 -0
  190. package/lib/typescript/src/games/candy-crush/components/GameBackground.d.ts.map +1 -0
  191. package/lib/typescript/src/games/candy-crush/components/GameGrid.d.ts +3 -0
  192. package/lib/typescript/src/games/candy-crush/components/GameGrid.d.ts.map +1 -0
  193. package/lib/typescript/src/games/candy-crush/components/ScoreBoard.d.ts +3 -0
  194. package/lib/typescript/src/games/candy-crush/components/ScoreBoard.d.ts.map +1 -0
  195. package/lib/typescript/src/games/candy-crush/components/index.d.ts +5 -0
  196. package/lib/typescript/src/games/candy-crush/components/index.d.ts.map +1 -0
  197. package/lib/typescript/src/games/candy-crush/index.d.ts +4 -0
  198. package/lib/typescript/src/games/candy-crush/index.d.ts.map +1 -0
  199. package/lib/typescript/src/games/color-sort/ColorSort.d.ts +4 -0
  200. package/lib/typescript/src/games/color-sort/ColorSort.d.ts.map +1 -0
  201. package/lib/typescript/src/games/color-sort/ColorSortConstants.d.ts +52 -0
  202. package/lib/typescript/src/games/color-sort/ColorSortConstants.d.ts.map +1 -0
  203. package/lib/typescript/src/games/color-sort/ColorSortService.d.ts +66 -0
  204. package/lib/typescript/src/games/color-sort/ColorSortService.d.ts.map +1 -0
  205. package/lib/typescript/src/games/color-sort/ColorSortStore.d.ts +48 -0
  206. package/lib/typescript/src/games/color-sort/ColorSortStore.d.ts.map +1 -0
  207. package/lib/typescript/src/games/color-sort/components/ColorContainer.d.ts +11 -0
  208. package/lib/typescript/src/games/color-sort/components/ColorContainer.d.ts.map +1 -0
  209. package/lib/typescript/src/games/color-sort/components/GameBackground.d.ts +7 -0
  210. package/lib/typescript/src/games/color-sort/components/GameBackground.d.ts.map +1 -0
  211. package/lib/typescript/src/games/color-sort/components/ScoreBoard.d.ts +3 -0
  212. package/lib/typescript/src/games/color-sort/components/ScoreBoard.d.ts.map +1 -0
  213. package/lib/typescript/src/games/color-sort/components/index.d.ts +4 -0
  214. package/lib/typescript/src/games/color-sort/components/index.d.ts.map +1 -0
  215. package/lib/typescript/src/games/dino-jump/DinoJump.d.ts +4 -0
  216. package/lib/typescript/src/games/dino-jump/DinoJump.d.ts.map +1 -0
  217. package/lib/typescript/src/games/dino-jump/DinoJumpConstants.d.ts +95 -0
  218. package/lib/typescript/src/games/dino-jump/DinoJumpConstants.d.ts.map +1 -0
  219. package/lib/typescript/src/games/dino-jump/DinoJumpService.d.ts +40 -0
  220. package/lib/typescript/src/games/dino-jump/DinoJumpService.d.ts.map +1 -0
  221. package/lib/typescript/src/games/dino-jump/DinoJumpStore.d.ts +103 -0
  222. package/lib/typescript/src/games/dino-jump/DinoJumpStore.d.ts.map +1 -0
  223. package/lib/typescript/src/games/dino-jump/components/DinoSprite.d.ts +3 -0
  224. package/lib/typescript/src/games/dino-jump/components/DinoSprite.d.ts.map +1 -0
  225. package/lib/typescript/src/games/dino-jump/components/GameArea.d.ts +8 -0
  226. package/lib/typescript/src/games/dino-jump/components/GameArea.d.ts.map +1 -0
  227. package/lib/typescript/src/games/dino-jump/components/GameBackground.d.ts +7 -0
  228. package/lib/typescript/src/games/dino-jump/components/GameBackground.d.ts.map +1 -0
  229. package/lib/typescript/src/games/dino-jump/components/ObstacleSprite.d.ts +3 -0
  230. package/lib/typescript/src/games/dino-jump/components/ObstacleSprite.d.ts.map +1 -0
  231. package/lib/typescript/src/games/dino-jump/components/ScoreBoard.d.ts +3 -0
  232. package/lib/typescript/src/games/dino-jump/components/ScoreBoard.d.ts.map +1 -0
  233. package/lib/typescript/src/games/dino-jump/components/StarSprite.d.ts +3 -0
  234. package/lib/typescript/src/games/dino-jump/components/StarSprite.d.ts.map +1 -0
  235. package/lib/typescript/src/games/dino-jump/components/index.d.ts +7 -0
  236. package/lib/typescript/src/games/dino-jump/components/index.d.ts.map +1 -0
  237. package/lib/typescript/src/games/flappy-bird/FlappyBird.d.ts +4 -0
  238. package/lib/typescript/src/games/flappy-bird/FlappyBird.d.ts.map +1 -0
  239. package/lib/typescript/src/games/flappy-bird/FlappyBirdConstants.d.ts +83 -0
  240. package/lib/typescript/src/games/flappy-bird/FlappyBirdConstants.d.ts.map +1 -0
  241. package/lib/typescript/src/games/flappy-bird/FlappyBirdStore.d.ts +53 -0
  242. package/lib/typescript/src/games/flappy-bird/FlappyBirdStore.d.ts.map +1 -0
  243. package/lib/typescript/src/games/flappy-bird/components/Bird.d.ts +8 -0
  244. package/lib/typescript/src/games/flappy-bird/components/Bird.d.ts.map +1 -0
  245. package/lib/typescript/src/games/flappy-bird/components/GameArea.d.ts +8 -0
  246. package/lib/typescript/src/games/flappy-bird/components/GameArea.d.ts.map +1 -0
  247. package/lib/typescript/src/games/flappy-bird/components/GameBackground.d.ts +7 -0
  248. package/lib/typescript/src/games/flappy-bird/components/GameBackground.d.ts.map +1 -0
  249. package/lib/typescript/src/games/flappy-bird/components/Pipes.d.ts +8 -0
  250. package/lib/typescript/src/games/flappy-bird/components/Pipes.d.ts.map +1 -0
  251. package/lib/typescript/src/games/flappy-bird/components/ScoreBoard.d.ts +3 -0
  252. package/lib/typescript/src/games/flappy-bird/components/ScoreBoard.d.ts.map +1 -0
  253. package/lib/typescript/src/games/flappy-bird/components/index.d.ts +6 -0
  254. package/lib/typescript/src/games/flappy-bird/components/index.d.ts.map +1 -0
  255. package/lib/typescript/src/games/fruit-merger/FruitMerger.d.ts +4 -0
  256. package/lib/typescript/src/games/fruit-merger/FruitMerger.d.ts.map +1 -0
  257. package/lib/typescript/src/games/fruit-merger/FruitMergerConstants.d.ts +115 -0
  258. package/lib/typescript/src/games/fruit-merger/FruitMergerConstants.d.ts.map +1 -0
  259. package/lib/typescript/src/games/fruit-merger/FruitMergerService.d.ts +5 -0
  260. package/lib/typescript/src/games/fruit-merger/FruitMergerService.d.ts.map +1 -0
  261. package/lib/typescript/src/games/fruit-merger/FruitMergerStore.d.ts +43 -0
  262. package/lib/typescript/src/games/fruit-merger/FruitMergerStore.d.ts.map +1 -0
  263. package/lib/typescript/src/games/fruit-merger/components/FruitItem.d.ts +10 -0
  264. package/lib/typescript/src/games/fruit-merger/components/FruitItem.d.ts.map +1 -0
  265. package/lib/typescript/src/games/fruit-merger/components/GameArea.d.ts +8 -0
  266. package/lib/typescript/src/games/fruit-merger/components/GameArea.d.ts.map +1 -0
  267. package/lib/typescript/src/games/fruit-merger/components/GameBackground.d.ts +7 -0
  268. package/lib/typescript/src/games/fruit-merger/components/GameBackground.d.ts.map +1 -0
  269. package/lib/typescript/src/games/fruit-merger/components/ScoreBoard.d.ts +3 -0
  270. package/lib/typescript/src/games/fruit-merger/components/ScoreBoard.d.ts.map +1 -0
  271. package/lib/typescript/src/games/fruit-merger/components/index.d.ts +5 -0
  272. package/lib/typescript/src/games/fruit-merger/components/index.d.ts.map +1 -0
  273. package/lib/typescript/src/games/fruit-ninja/FruitNinja.d.ts.map +1 -1
  274. package/lib/typescript/src/games/game-2048/Game2048.d.ts +4 -0
  275. package/lib/typescript/src/games/game-2048/Game2048.d.ts.map +1 -0
  276. package/lib/typescript/src/games/game-2048/Game2048Constants.d.ts +163 -0
  277. package/lib/typescript/src/games/game-2048/Game2048Constants.d.ts.map +1 -0
  278. package/lib/typescript/src/games/game-2048/Game2048Service.d.ts +113 -0
  279. package/lib/typescript/src/games/game-2048/Game2048Service.d.ts.map +1 -0
  280. package/lib/typescript/src/games/game-2048/Game2048Store.d.ts +48 -0
  281. package/lib/typescript/src/games/game-2048/Game2048Store.d.ts.map +1 -0
  282. package/lib/typescript/src/games/game-2048/components/GameBackground.d.ts +7 -0
  283. package/lib/typescript/src/games/game-2048/components/GameBackground.d.ts.map +1 -0
  284. package/lib/typescript/src/games/game-2048/components/GameGrid.d.ts +7 -0
  285. package/lib/typescript/src/games/game-2048/components/GameGrid.d.ts.map +1 -0
  286. package/lib/typescript/src/games/game-2048/components/GameTile.d.ts +13 -0
  287. package/lib/typescript/src/games/game-2048/components/GameTile.d.ts.map +1 -0
  288. package/lib/typescript/src/games/game-2048/components/ScoreBoard.d.ts +3 -0
  289. package/lib/typescript/src/games/game-2048/components/ScoreBoard.d.ts.map +1 -0
  290. package/lib/typescript/src/games/game-2048/components/index.d.ts +5 -0
  291. package/lib/typescript/src/games/game-2048/components/index.d.ts.map +1 -0
  292. package/lib/typescript/src/games/maze-runner/MazeRunner.d.ts.map +1 -1
  293. package/lib/typescript/src/games/popit-fidget/PopitFidget.d.ts.map +1 -1
  294. package/lib/typescript/src/games/sliding-numbers/SlidingNumbers.d.ts +4 -0
  295. package/lib/typescript/src/games/sliding-numbers/SlidingNumbers.d.ts.map +1 -0
  296. package/lib/typescript/src/games/sliding-numbers/SlidingNumbersConstants.d.ts +108 -0
  297. package/lib/typescript/src/games/sliding-numbers/SlidingNumbersConstants.d.ts.map +1 -0
  298. package/lib/typescript/src/games/sliding-numbers/SlidingNumbersService.d.ts +34 -0
  299. package/lib/typescript/src/games/sliding-numbers/SlidingNumbersService.d.ts.map +1 -0
  300. package/lib/typescript/src/games/sliding-numbers/SlidingNumbersStore.d.ts +56 -0
  301. package/lib/typescript/src/games/sliding-numbers/SlidingNumbersStore.d.ts.map +1 -0
  302. package/lib/typescript/src/games/sliding-numbers/components/GameBackground.d.ts +7 -0
  303. package/lib/typescript/src/games/sliding-numbers/components/GameBackground.d.ts.map +1 -0
  304. package/lib/typescript/src/games/sliding-numbers/components/NumbersGrid.d.ts +7 -0
  305. package/lib/typescript/src/games/sliding-numbers/components/NumbersGrid.d.ts.map +1 -0
  306. package/lib/typescript/src/games/sliding-numbers/components/NumbersTile.d.ts +11 -0
  307. package/lib/typescript/src/games/sliding-numbers/components/NumbersTile.d.ts.map +1 -0
  308. package/lib/typescript/src/games/sliding-numbers/components/ScoreBoard.d.ts +3 -0
  309. package/lib/typescript/src/games/sliding-numbers/components/ScoreBoard.d.ts.map +1 -0
  310. package/lib/typescript/src/games/sliding-numbers/components/index.d.ts +5 -0
  311. package/lib/typescript/src/games/sliding-numbers/components/index.d.ts.map +1 -0
  312. package/lib/typescript/src/games/snake/Snake.d.ts +4 -0
  313. package/lib/typescript/src/games/snake/Snake.d.ts.map +1 -0
  314. package/lib/typescript/src/games/snake/SnakeConstants.d.ts +93 -0
  315. package/lib/typescript/src/games/snake/SnakeConstants.d.ts.map +1 -0
  316. package/lib/typescript/src/games/snake/SnakeService.d.ts +30 -0
  317. package/lib/typescript/src/games/snake/SnakeService.d.ts.map +1 -0
  318. package/lib/typescript/src/games/snake/SnakeStore.d.ts +43 -0
  319. package/lib/typescript/src/games/snake/SnakeStore.d.ts.map +1 -0
  320. package/lib/typescript/src/games/snake/components/GameBackground.d.ts +5 -0
  321. package/lib/typescript/src/games/snake/components/GameBackground.d.ts.map +1 -0
  322. package/lib/typescript/src/games/snake/components/GameGrid.d.ts +3 -0
  323. package/lib/typescript/src/games/snake/components/GameGrid.d.ts.map +1 -0
  324. package/lib/typescript/src/games/snake/components/ScoreBoard.d.ts +3 -0
  325. package/lib/typescript/src/games/snake/components/ScoreBoard.d.ts.map +1 -0
  326. package/lib/typescript/src/games/snake/components/index.d.ts +4 -0
  327. package/lib/typescript/src/games/snake/components/index.d.ts.map +1 -0
  328. package/lib/typescript/src/games/snake/index.d.ts +4 -0
  329. package/lib/typescript/src/games/snake/index.d.ts.map +1 -0
  330. package/lib/typescript/src/games/space-fighter/SpaceFighter.d.ts.map +1 -1
  331. package/lib/typescript/src/games/whack-a-mole/WhackAMole.d.ts.map +1 -1
  332. package/lib/typescript/src/games/whack-a-mole/components/GameBackground.d.ts.map +1 -1
  333. package/lib/typescript/src/index.d.ts +8 -0
  334. package/lib/typescript/src/index.d.ts.map +1 -1
  335. package/lib/typescript/src/services/GamesConstants.d.ts +156 -0
  336. package/lib/typescript/src/services/GamesConstants.d.ts.map +1 -1
  337. package/lib/typescript/src/services/GamesService.d.ts +10 -2
  338. package/lib/typescript/src/services/GamesService.d.ts.map +1 -1
  339. package/lib/typescript/src/services/SoundsService.d.ts +103 -0
  340. package/lib/typescript/src/services/SoundsService.d.ts.map +1 -1
  341. package/lib/typescript/src/shared/helpers/GameOverModal.d.ts +2 -0
  342. package/lib/typescript/src/shared/helpers/GameOverModal.d.ts.map +1 -1
  343. package/lib/typescript/src/shared/helpers/ParticleBlast.d.ts.map +1 -1
  344. package/package.json +1 -1
@@ -0,0 +1,370 @@
1
+ "use strict";
2
+
3
+ import { Animated } from 'react-native';
4
+ import { CANDY_CRUSH_GAME_CONFIG, CANDY_COLORS, CANDY_TYPES } from "./CandyCrushConstants.js";
5
+ export class CandyCrushService {
6
+ nextCandyId = 1;
7
+
8
+ // Create empty grid
9
+ createGrid() {
10
+ return Array(CANDY_CRUSH_GAME_CONFIG.GRID_SIZE).fill(null).map(() => Array(CANDY_CRUSH_GAME_CONFIG.GRID_SIZE).fill(null));
11
+ }
12
+
13
+ // Initialize grid with random candies (ensuring no initial matches)
14
+ initializeGrid(candyTypes) {
15
+ const grid = this.createGrid();
16
+ const size = CANDY_CRUSH_GAME_CONFIG.GRID_SIZE;
17
+ for (let row = 0; row < size; row++) {
18
+ for (let col = 0; col < size; col++) {
19
+ let candyType;
20
+ let attempts = 0;
21
+
22
+ // Generate candy type that doesn't create initial matches
23
+ do {
24
+ candyType = Math.floor(Math.random() * candyTypes);
25
+ attempts++;
26
+ } while (attempts < 10 && this.wouldCreateMatch(grid, row, col, candyType));
27
+ const candy = {
28
+ id: this.nextCandyId++,
29
+ row,
30
+ col,
31
+ type: candyType,
32
+ specialType: CANDY_TYPES.NORMAL,
33
+ animatedValue: new Animated.Value(1),
34
+ scaleValue: new Animated.Value(1),
35
+ isMatched: false,
36
+ isFalling: false
37
+ };
38
+ const gridRow = grid[row];
39
+ if (gridRow) {
40
+ gridRow[col] = candy;
41
+ }
42
+ }
43
+ }
44
+ return grid;
45
+ }
46
+
47
+ // Check if placing candy would create a match
48
+ wouldCreateMatch(grid, row, col, type) {
49
+ // Check horizontal
50
+ let horizontalCount = 1;
51
+
52
+ // Check left
53
+ for (let c = col - 1; c >= 0; c--) {
54
+ const gridRow = grid[row];
55
+ const candy = gridRow ? gridRow[c] : null;
56
+ if (candy && candy.type === type) {
57
+ horizontalCount++;
58
+ } else {
59
+ break;
60
+ }
61
+ }
62
+
63
+ // Check right
64
+ for (let c = col + 1; c < CANDY_CRUSH_GAME_CONFIG.GRID_SIZE; c++) {
65
+ const gridRow = grid[row];
66
+ const candy = gridRow ? gridRow[c] : null;
67
+ if (candy && candy.type === type) {
68
+ horizontalCount++;
69
+ } else {
70
+ break;
71
+ }
72
+ }
73
+ if (horizontalCount >= CANDY_CRUSH_GAME_CONFIG.MIN_MATCH) {
74
+ return true;
75
+ }
76
+
77
+ // Check vertical
78
+ let verticalCount = 1;
79
+
80
+ // Check up
81
+ for (let r = row - 1; r >= 0; r--) {
82
+ const gridRow = grid[r];
83
+ const candy = gridRow ? gridRow[col] : null;
84
+ if (candy && candy.type === type) {
85
+ verticalCount++;
86
+ } else {
87
+ break;
88
+ }
89
+ }
90
+
91
+ // Check down
92
+ for (let r = row + 1; r < CANDY_CRUSH_GAME_CONFIG.GRID_SIZE; r++) {
93
+ const gridRow = grid[r];
94
+ const candy = gridRow ? gridRow[col] : null;
95
+ if (candy && candy.type === type) {
96
+ verticalCount++;
97
+ } else {
98
+ break;
99
+ }
100
+ }
101
+ return verticalCount >= CANDY_CRUSH_GAME_CONFIG.MIN_MATCH;
102
+ }
103
+
104
+ // Check if two candies can be swapped
105
+ canSwap(candy1, candy2) {
106
+ const rowDiff = Math.abs(candy1.row - candy2.row);
107
+ const colDiff = Math.abs(candy1.col - candy2.col);
108
+
109
+ // Must be adjacent (horizontally or vertically)
110
+ return rowDiff === 1 && colDiff === 0 || rowDiff === 0 && colDiff === 1;
111
+ }
112
+
113
+ // Swap two candies
114
+ swapCandies(grid, candy1, candy2) {
115
+ const row1 = candy1.row;
116
+ const col1 = candy1.col;
117
+ const row2 = candy2.row;
118
+ const col2 = candy2.col;
119
+
120
+ // Get references from grid
121
+ const gridRow1 = grid[row1];
122
+ const gridRow2 = grid[row2];
123
+ if (gridRow1 && gridRow2) {
124
+ const temp1 = gridRow1[col1];
125
+ const temp2 = gridRow2[col2];
126
+
127
+ // Swap in grid
128
+ gridRow1[col1] = temp2 || null;
129
+ gridRow2[col2] = temp1 || null;
130
+
131
+ // Update positions (these are mutable in Immer draft)
132
+ if (temp1) {
133
+ temp1.row = row2;
134
+ temp1.col = col2;
135
+ }
136
+ if (temp2) {
137
+ temp2.row = row1;
138
+ temp2.col = col1;
139
+ }
140
+ }
141
+ }
142
+
143
+ // Find all matches in the grid
144
+ findMatches(grid) {
145
+ const matches = [];
146
+ const matchedSet = new Set();
147
+ const size = CANDY_CRUSH_GAME_CONFIG.GRID_SIZE;
148
+
149
+ // Check horizontal matches
150
+ for (let row = 0; row < size; row++) {
151
+ for (let col = 0; col < size - 2; col++) {
152
+ const gridRow = grid[row];
153
+ if (!gridRow) continue;
154
+ const candy1 = gridRow[col];
155
+ const candy2 = gridRow[col + 1];
156
+ const candy3 = gridRow[col + 2];
157
+ if (candy1 && candy2 && candy3 && candy1.type === candy2.type && candy2.type === candy3.type) {
158
+ let matchLength = 3;
159
+ const matchCandies = [candy1, candy2, candy3];
160
+
161
+ // Check for longer matches
162
+ for (let c = col + 3; c < size; c++) {
163
+ const nextCandy = gridRow[c];
164
+ if (nextCandy && nextCandy.type === candy1.type) {
165
+ matchLength++;
166
+ matchCandies.push(nextCandy);
167
+ } else {
168
+ break;
169
+ }
170
+ }
171
+
172
+ // Add to matches
173
+ matchCandies.forEach(candy => {
174
+ if (!matchedSet.has(candy.id)) {
175
+ matchedSet.add(candy.id);
176
+ matches.push(candy);
177
+ }
178
+ });
179
+ col += matchLength - 1;
180
+ }
181
+ }
182
+ }
183
+
184
+ // Check vertical matches
185
+ for (let col = 0; col < size; col++) {
186
+ for (let row = 0; row < size - 2; row++) {
187
+ const gridRow1 = grid[row];
188
+ const gridRow2 = grid[row + 1];
189
+ const gridRow3 = grid[row + 2];
190
+ if (!gridRow1 || !gridRow2 || !gridRow3) continue;
191
+ const candy1 = gridRow1[col];
192
+ const candy2 = gridRow2[col];
193
+ const candy3 = gridRow3[col];
194
+ if (candy1 && candy2 && candy3 && candy1.type === candy2.type && candy2.type === candy3.type) {
195
+ let matchLength = 3;
196
+ const matchCandies = [candy1, candy2, candy3];
197
+
198
+ // Check for longer matches
199
+ for (let r = row + 3; r < size; r++) {
200
+ const nextRow = grid[r];
201
+ const nextCandy = nextRow ? nextRow[col] : null;
202
+ if (nextCandy && nextCandy.type === candy1.type) {
203
+ matchLength++;
204
+ matchCandies.push(nextCandy);
205
+ } else {
206
+ break;
207
+ }
208
+ }
209
+
210
+ // Add to matches
211
+ matchCandies.forEach(candy => {
212
+ if (!matchedSet.has(candy.id)) {
213
+ matchedSet.add(candy.id);
214
+ matches.push(candy);
215
+ }
216
+ });
217
+ row += matchLength - 1;
218
+ }
219
+ }
220
+ }
221
+ const score = matches.length * CANDY_CRUSH_GAME_CONFIG.POINTS_PER_CANDY;
222
+ return {
223
+ matches,
224
+ score,
225
+ hasMatches: matches.length > 0
226
+ };
227
+ }
228
+
229
+ // Remove matched candies from grid
230
+ removeMatches(grid, matches) {
231
+ matches.forEach(candy => {
232
+ const gridRow = grid[candy.row];
233
+ if (gridRow) {
234
+ gridRow[candy.col] = null;
235
+ }
236
+ });
237
+ }
238
+
239
+ // Apply gravity - make candies fall down
240
+ applyGravity(grid) {
241
+ let hasMoved = false;
242
+ const size = CANDY_CRUSH_GAME_CONFIG.GRID_SIZE;
243
+
244
+ // Process from bottom to top
245
+ for (let col = 0; col < size; col++) {
246
+ for (let row = size - 1; row >= 0; row--) {
247
+ const gridRow = grid[row];
248
+ if (!gridRow) continue;
249
+ const candy = gridRow[col];
250
+ if (candy) {
251
+ // Find the lowest empty position below this candy
252
+ let newRow = row;
253
+ for (let r = row + 1; r < size; r++) {
254
+ const checkRow = grid[r];
255
+ if (checkRow && !checkRow[col]) {
256
+ newRow = r;
257
+ } else {
258
+ break;
259
+ }
260
+ }
261
+
262
+ // Move candy down if there's an empty space
263
+ if (newRow !== row) {
264
+ const targetRow = grid[newRow];
265
+ if (targetRow) {
266
+ targetRow[col] = candy;
267
+ gridRow[col] = null;
268
+ candy.row = newRow;
269
+ candy.isFalling = true;
270
+ hasMoved = true;
271
+ }
272
+ }
273
+ }
274
+ }
275
+ }
276
+ return hasMoved;
277
+ }
278
+
279
+ // Fill empty spaces with new candies
280
+ fillEmptySpaces(grid, candyTypes) {
281
+ const newCandies = [];
282
+ const size = CANDY_CRUSH_GAME_CONFIG.GRID_SIZE;
283
+ for (let col = 0; col < size; col++) {
284
+ // Count empty spaces in this column
285
+ let emptyCount = 0;
286
+ for (let row = 0; row < size; row++) {
287
+ const gridRow = grid[row];
288
+ if (gridRow && !gridRow[col]) {
289
+ emptyCount++;
290
+ }
291
+ }
292
+
293
+ // Fill from top
294
+ for (let i = 0; i < emptyCount; i++) {
295
+ const row = i;
296
+ const candy = {
297
+ id: this.nextCandyId++,
298
+ row,
299
+ col,
300
+ type: Math.floor(Math.random() * candyTypes),
301
+ specialType: CANDY_TYPES.NORMAL,
302
+ animatedValue: new Animated.Value(0),
303
+ scaleValue: new Animated.Value(1),
304
+ isMatched: false,
305
+ isFalling: true
306
+ };
307
+ const gridRow = grid[row];
308
+ if (gridRow) {
309
+ gridRow[col] = candy;
310
+ newCandies.push(candy);
311
+ }
312
+ }
313
+ }
314
+ return newCandies;
315
+ }
316
+
317
+ // Check if there are any possible moves
318
+ hasPossibleMoves(grid) {
319
+ const size = CANDY_CRUSH_GAME_CONFIG.GRID_SIZE;
320
+ for (let row = 0; row < size; row++) {
321
+ for (let col = 0; col < size; col++) {
322
+ const gridRow = grid[row];
323
+ if (!gridRow) continue;
324
+ const candy = gridRow[col];
325
+ if (!candy) continue;
326
+
327
+ // Try swapping with right neighbor
328
+ if (col < size - 1) {
329
+ const rightCandy = gridRow[col + 1];
330
+ if (rightCandy) {
331
+ this.swapCandies(grid, candy, rightCandy);
332
+ const result = this.findMatches(grid);
333
+ this.swapCandies(grid, candy, rightCandy); // Swap back
334
+
335
+ if (result.hasMatches) {
336
+ return true;
337
+ }
338
+ }
339
+ }
340
+
341
+ // Try swapping with bottom neighbor
342
+ if (row < size - 1) {
343
+ const bottomRow = grid[row + 1];
344
+ const bottomCandy = bottomRow ? bottomRow[col] : null;
345
+ if (bottomCandy) {
346
+ this.swapCandies(grid, candy, bottomCandy);
347
+ const result = this.findMatches(grid);
348
+ this.swapCandies(grid, candy, bottomCandy); // Swap back
349
+
350
+ if (result.hasMatches) {
351
+ return true;
352
+ }
353
+ }
354
+ }
355
+ }
356
+ }
357
+ return false;
358
+ }
359
+
360
+ // Get candy color
361
+ getCandyColor(type) {
362
+ return CANDY_COLORS[type % CANDY_COLORS.length] || CANDY_COLORS[0];
363
+ }
364
+
365
+ // Reset candy ID counter
366
+ resetIdCounter() {
367
+ this.nextCandyId = 1;
368
+ }
369
+ }
370
+ //# sourceMappingURL=CandyCrushService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["Animated","CANDY_CRUSH_GAME_CONFIG","CANDY_COLORS","CANDY_TYPES","CandyCrushService","nextCandyId","createGrid","Array","GRID_SIZE","fill","map","initializeGrid","candyTypes","grid","size","row","col","candyType","attempts","Math","floor","random","wouldCreateMatch","candy","id","type","specialType","NORMAL","animatedValue","Value","scaleValue","isMatched","isFalling","gridRow","horizontalCount","c","MIN_MATCH","verticalCount","r","canSwap","candy1","candy2","rowDiff","abs","colDiff","swapCandies","row1","col1","row2","col2","gridRow1","gridRow2","temp1","temp2","findMatches","matches","matchedSet","Set","candy3","matchLength","matchCandies","nextCandy","push","forEach","has","add","gridRow3","nextRow","score","length","POINTS_PER_CANDY","hasMatches","removeMatches","applyGravity","hasMoved","newRow","checkRow","targetRow","fillEmptySpaces","newCandies","emptyCount","i","hasPossibleMoves","rightCandy","result","bottomRow","bottomCandy","getCandyColor","resetIdCounter"],"sourceRoot":"../../../../src","sources":["games/candy-crush/CandyCrushService.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,305 @@
1
+ "use strict";
2
+
3
+ import { create } from 'zustand';
4
+ import { subscribeWithSelector } from 'zustand/middleware';
5
+ import { CandyCrushService } from "./CandyCrushService.js";
6
+ import { CANDY_CRUSH_GAME_CONFIG, DIFFICULTY_CONFIG, CANDY_CRUSH_SOUNDS } from "./CandyCrushConstants.js";
7
+ import { immerMiddleware } from "../../services/GamesService.js";
8
+ import { playSound } from "../../services/SoundsService.js";
9
+ import { playHaptic, HapticType } from "../../services/HapticsService.js";
10
+ const gameService = new CandyCrushService();
11
+ export const useCandyCrushStore = create()(subscribeWithSelector(immerMiddleware((set, get) => ({
12
+ // Initial state
13
+ grid: gameService.createGrid(),
14
+ score: 0,
15
+ timeRemaining: 180,
16
+ gameDuration: 180,
17
+ isPlaying: false,
18
+ isGameOver: false,
19
+ selectedCandy: null,
20
+ isProcessing: false,
21
+ difficulty: 'easy',
22
+ candyTypes: 4,
23
+ enableSounds: true,
24
+ enableHaptics: true,
25
+ comboCount: 0,
26
+ gameTimer: null,
27
+ matchedCandyIds: new Set(),
28
+ fallingCandyIds: new Set(),
29
+ startGame: () => {
30
+ const state = get();
31
+
32
+ // Clear any existing timer
33
+ if (state.gameTimer) {
34
+ clearInterval(state.gameTimer);
35
+ }
36
+
37
+ // Play start sound
38
+ playSound(CANDY_CRUSH_SOUNDS.SWAP, state.enableSounds);
39
+ playHaptic(HapticType.MEDIUM, state.enableHaptics);
40
+
41
+ // Start countdown timer
42
+ const timer = setInterval(() => {
43
+ const currentState = get();
44
+ if (currentState.timeRemaining > 0 && currentState.isPlaying) {
45
+ set(draft => {
46
+ draft.timeRemaining--;
47
+
48
+ // Warning sound at 30 seconds
49
+ if (draft.timeRemaining === 30) {
50
+ playSound(CANDY_CRUSH_SOUNDS.SPECIAL, draft.enableSounds);
51
+ playHaptic(HapticType.MEDIUM, draft.enableHaptics);
52
+ }
53
+
54
+ // Warning sound at 10 seconds
55
+ if (draft.timeRemaining === 10) {
56
+ playSound(CANDY_CRUSH_SOUNDS.SPECIAL, draft.enableSounds);
57
+ playHaptic(HapticType.HEAVY, draft.enableHaptics);
58
+ }
59
+
60
+ // Check if time is up
61
+ if (draft.timeRemaining <= 0) {
62
+ draft.isGameOver = true;
63
+ draft.isPlaying = false;
64
+ if (draft.gameTimer) {
65
+ clearInterval(draft.gameTimer);
66
+ draft.gameTimer = null;
67
+ }
68
+ playSound(CANDY_CRUSH_SOUNDS.LOSE, draft.enableSounds);
69
+ playHaptic(HapticType.HEAVY, draft.enableHaptics);
70
+ }
71
+ });
72
+ }
73
+ }, 1000);
74
+ set(state => {
75
+ state.isPlaying = true;
76
+ state.gameTimer = timer;
77
+ });
78
+ },
79
+ stopGame: () => {
80
+ const state = get();
81
+ if (state.gameTimer) {
82
+ clearInterval(state.gameTimer);
83
+ }
84
+
85
+ // Play stop sound
86
+ playSound(CANDY_CRUSH_SOUNDS.LOSE, state.enableSounds);
87
+ playHaptic(HapticType.MEDIUM, state.enableHaptics);
88
+ set(state => {
89
+ state.isPlaying = false;
90
+ state.isGameOver = true;
91
+ state.gameTimer = null;
92
+ });
93
+ },
94
+ resetGame: () => {
95
+ const state = get();
96
+ state.initializeGame(state.difficulty);
97
+ state.startGame();
98
+ },
99
+ initializeGame: (difficulty = 'easy') => {
100
+ const state = get();
101
+ if (state.gameTimer) {
102
+ clearInterval(state.gameTimer);
103
+ }
104
+ set(state => {
105
+ const config = DIFFICULTY_CONFIG[difficulty];
106
+ gameService.resetIdCounter();
107
+ state.grid = gameService.initializeGrid(config.candyTypes);
108
+ state.score = 0;
109
+ state.timeRemaining = config.gameDuration;
110
+ state.gameDuration = config.gameDuration;
111
+ state.isPlaying = false;
112
+ state.isGameOver = false;
113
+ state.selectedCandy = null;
114
+ state.isProcessing = false;
115
+ state.difficulty = difficulty;
116
+ state.candyTypes = config.candyTypes;
117
+ state.comboCount = 0;
118
+ state.gameTimer = null;
119
+ state.matchedCandyIds = new Set();
120
+ state.fallingCandyIds = new Set();
121
+ });
122
+ },
123
+ selectCandy: candy => {
124
+ const state = get();
125
+ if (state.isProcessing || !state.isPlaying || state.isGameOver) {
126
+ return;
127
+ }
128
+ set(draft => {
129
+ if (!draft.selectedCandy) {
130
+ // First candy selected
131
+ draft.selectedCandy = candy;
132
+ playSound(CANDY_CRUSH_SOUNDS.SWAP, draft.enableSounds);
133
+ playHaptic(HapticType.LIGHT, draft.enableHaptics);
134
+ } else if (draft.selectedCandy.id === candy.id) {
135
+ // Deselect same candy
136
+ draft.selectedCandy = null;
137
+ } else if (gameService.canSwap(draft.selectedCandy, candy)) {
138
+ // Valid swap - process it
139
+ const candy1 = draft.selectedCandy;
140
+ const candy2 = candy;
141
+
142
+ // Swap candies
143
+ gameService.swapCandies(draft.grid, candy1, candy2);
144
+
145
+ // Only update affected rows to minimize re-renders
146
+ const affectedRows = new Set([candy1.row, candy2.row]);
147
+ affectedRows.forEach(rowIndex => {
148
+ if (draft.grid[rowIndex]) {
149
+ draft.grid[rowIndex] = [...draft.grid[rowIndex]];
150
+ }
151
+ });
152
+
153
+ // Check for matches
154
+ const matchResult = gameService.findMatches(draft.grid);
155
+ if (matchResult.hasMatches) {
156
+ // Valid move
157
+ draft.selectedCandy = null;
158
+ draft.isProcessing = true;
159
+ playSound(CANDY_CRUSH_SOUNDS.SWAP, draft.enableSounds);
160
+ playHaptic(HapticType.MEDIUM, draft.enableHaptics);
161
+
162
+ // Process matches after animation
163
+ setTimeout(() => {
164
+ get().processMatches();
165
+ }, CANDY_CRUSH_GAME_CONFIG.SWAP_DURATION);
166
+ } else {
167
+ // Invalid move - swap back
168
+ gameService.swapCandies(draft.grid, candy1, candy2);
169
+ draft.selectedCandy = null;
170
+
171
+ // Only update affected rows to minimize re-renders
172
+ const affectedRows = new Set([candy1.row, candy2.row]);
173
+ affectedRows.forEach(rowIndex => {
174
+ if (draft.grid[rowIndex]) {
175
+ draft.grid[rowIndex] = [...draft.grid[rowIndex]];
176
+ }
177
+ });
178
+ playSound(CANDY_CRUSH_SOUNDS.SWAP, draft.enableSounds);
179
+ playHaptic(HapticType.LIGHT, draft.enableHaptics);
180
+ }
181
+ } else {
182
+ // Not adjacent - select new candy
183
+ draft.selectedCandy = candy;
184
+ playSound(CANDY_CRUSH_SOUNDS.SWAP, draft.enableSounds);
185
+ playHaptic(HapticType.LIGHT, draft.enableHaptics);
186
+ }
187
+ });
188
+ },
189
+ processMatches: async () => {
190
+ let hasMatches = true;
191
+ let comboCount = 0;
192
+ while (hasMatches) {
193
+ // Get fresh state at the start of each iteration
194
+ const state = get();
195
+
196
+ // Find matches
197
+ const matchResult = gameService.findMatches(state.grid);
198
+ if (!matchResult.hasMatches) {
199
+ hasMatches = false;
200
+ break;
201
+ }
202
+ comboCount++;
203
+
204
+ // Calculate score with combo multiplier
205
+ const baseScore = matchResult.score;
206
+ const comboMultiplier = comboCount > 1 ? Math.pow(CANDY_CRUSH_GAME_CONFIG.COMBO_MULTIPLIER, comboCount - 1) : 1;
207
+ const finalScore = Math.floor(baseScore * comboMultiplier);
208
+
209
+ // Update score
210
+ set(draft => {
211
+ draft.score += finalScore;
212
+ draft.comboCount = comboCount;
213
+ });
214
+
215
+ // Play sound
216
+ if (comboCount > 1) {
217
+ playSound(CANDY_CRUSH_SOUNDS.COMBO, state.enableSounds);
218
+ playHaptic(HapticType.HEAVY, state.enableHaptics);
219
+ } else {
220
+ playSound(CANDY_CRUSH_SOUNDS.MATCH, state.enableSounds);
221
+ playHaptic(HapticType.MEDIUM, state.enableHaptics);
222
+ }
223
+
224
+ // Mark candies as matched for animation using Set (no grid mutation needed)
225
+ set(draft => {
226
+ draft.matchedCandyIds = new Set(matchResult.matches.map(c => c.id));
227
+ // No grid update needed - animation state is separate
228
+ });
229
+
230
+ // Wait for animation
231
+ await new Promise(resolve => setTimeout(resolve, CANDY_CRUSH_GAME_CONFIG.ANIMATION_DURATION));
232
+
233
+ // Remove matches, apply gravity, and fill empty spaces (all in one set call)
234
+ set(draft => {
235
+ // Clear matched IDs
236
+ draft.matchedCandyIds = new Set();
237
+
238
+ // Track which rows will be affected by matches
239
+ const affectedRows = new Set();
240
+ matchResult.matches.forEach(candy => affectedRows.add(candy.row));
241
+
242
+ // Store original candy IDs per row to detect changes
243
+ const originalRowIds = draft.grid.map(row => row.map(c => c?.id).join(','));
244
+
245
+ // Remove matches
246
+ gameService.removeMatches(draft.grid, matchResult.matches);
247
+
248
+ // Apply gravity (affects all rows below matches)
249
+ gameService.applyGravity(draft.grid);
250
+
251
+ // Fill empty spaces (affects top rows)
252
+ gameService.fillEmptySpaces(draft.grid, state.candyTypes);
253
+
254
+ // Mark falling candies
255
+ const fallingIds = new Set();
256
+ draft.grid.forEach(row => {
257
+ row.forEach(candy => {
258
+ if (candy && candy.isFalling) {
259
+ fallingIds.add(candy.id);
260
+ }
261
+ });
262
+ });
263
+ draft.fallingCandyIds = fallingIds;
264
+
265
+ // Only update rows that actually changed
266
+ draft.grid.forEach((row, rowIndex) => {
267
+ const newRowIds = row.map(c => c?.id).join(',');
268
+ if (originalRowIds[rowIndex] !== newRowIds) {
269
+ draft.grid[rowIndex] = [...row];
270
+ }
271
+ });
272
+ });
273
+
274
+ // Wait for fall animation
275
+ await new Promise(resolve => setTimeout(resolve, CANDY_CRUSH_GAME_CONFIG.FALL_DURATION));
276
+ }
277
+
278
+ // Reset processing state and clear animation states
279
+ set(draft => {
280
+ draft.isProcessing = false;
281
+ draft.comboCount = 0;
282
+ draft.matchedCandyIds = new Set();
283
+ draft.fallingCandyIds = new Set();
284
+ });
285
+ },
286
+ updateSettings: (enableSounds, enableHaptics) => {
287
+ set(state => {
288
+ state.enableSounds = enableSounds;
289
+ state.enableHaptics = enableHaptics;
290
+ });
291
+ }
292
+ }))));
293
+
294
+ // Selector hooks for optimal re-renders
295
+ export const useGrid = () => useCandyCrushStore(state => state.grid);
296
+ export const useScore = () => useCandyCrushStore(state => state.score);
297
+ export const useTimeRemaining = () => useCandyCrushStore(state => state.timeRemaining);
298
+ export const useGameDuration = () => useCandyCrushStore(state => state.gameDuration);
299
+ export const useIsPlaying = () => useCandyCrushStore(state => state.isPlaying);
300
+ export const useIsGameOver = () => useCandyCrushStore(state => state.isGameOver);
301
+ export const useSelectedCandy = () => useCandyCrushStore(state => state.selectedCandy);
302
+ export const useComboCount = () => useCandyCrushStore(state => state.comboCount);
303
+ export const useMatchedCandyIds = () => useCandyCrushStore(state => state.matchedCandyIds);
304
+ export const useFallingCandyIds = () => useCandyCrushStore(state => state.fallingCandyIds);
305
+ //# sourceMappingURL=CandyCrushStore.js.map