react-native-games 0.7.0 → 1.0.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.
- package/README.md +507 -84
- package/lib/module/games/balloon-blaster/BalloonBlaster.js +13 -21
- package/lib/module/games/balloon-blaster/BalloonBlaster.js.map +1 -1
- package/lib/module/games/balloon-blaster/BalloonBlasterStore.js +1 -1
- package/lib/module/games/balloon-blaster/components/GameArea.js +1 -1
- package/lib/module/games/balloon-blaster/components/GameArea.js.map +1 -1
- package/lib/module/games/balloon-blaster/components/GameBackground.js +24 -17
- package/lib/module/games/balloon-blaster/components/GameBackground.js.map +1 -1
- package/lib/module/games/balloon-blaster/components/ScoreBoard.js +47 -47
- package/lib/module/games/balloon-blaster/components/ScoreBoard.js.map +1 -1
- package/lib/module/games/candy-crush/CandyCrush.js +131 -0
- package/lib/module/games/candy-crush/CandyCrush.js.map +1 -0
- package/lib/module/games/candy-crush/CandyCrushConstants.js +125 -0
- package/lib/module/games/candy-crush/CandyCrushConstants.js.map +1 -0
- package/lib/module/games/candy-crush/CandyCrushService.js +370 -0
- package/lib/module/games/candy-crush/CandyCrushService.js.map +1 -0
- package/lib/module/games/candy-crush/CandyCrushStore.js +303 -0
- package/lib/module/games/candy-crush/CandyCrushStore.js.map +1 -0
- package/lib/module/games/candy-crush/components/CandyItem.js +191 -0
- package/lib/module/games/candy-crush/components/CandyItem.js.map +1 -0
- package/lib/module/games/candy-crush/components/GameBackground.js +85 -0
- package/lib/module/games/candy-crush/components/GameBackground.js.map +1 -0
- package/lib/module/games/candy-crush/components/GameGrid.js +314 -0
- package/lib/module/games/candy-crush/components/GameGrid.js.map +1 -0
- package/lib/module/games/candy-crush/components/ScoreBoard.js +79 -0
- package/lib/module/games/candy-crush/components/ScoreBoard.js.map +1 -0
- package/lib/module/games/candy-crush/components/index.js +7 -0
- package/lib/module/games/candy-crush/components/index.js.map +1 -0
- package/lib/module/games/candy-crush/index.js +6 -0
- package/lib/module/games/candy-crush/index.js.map +1 -0
- package/lib/module/games/colors-sort/ColorsSort.js +143 -0
- package/lib/module/games/colors-sort/ColorsSort.js.map +1 -0
- package/lib/module/games/colors-sort/ColorsSortConstants.js +72 -0
- package/lib/module/games/colors-sort/ColorsSortConstants.js.map +1 -0
- package/lib/module/games/colors-sort/ColorsSortService.js +255 -0
- package/lib/module/games/colors-sort/ColorsSortService.js.map +1 -0
- package/lib/module/games/colors-sort/ColorsSortStore.js +257 -0
- package/lib/module/games/colors-sort/ColorsSortStore.js.map +1 -0
- package/lib/module/games/colors-sort/components/ColorContainer.js +140 -0
- package/lib/module/games/colors-sort/components/ColorContainer.js.map +1 -0
- package/lib/module/games/colors-sort/components/GameBackground.js +135 -0
- package/lib/module/games/colors-sort/components/GameBackground.js.map +1 -0
- package/lib/module/games/colors-sort/components/ScoreBoard.js +70 -0
- package/lib/module/games/colors-sort/components/ScoreBoard.js.map +1 -0
- package/lib/module/games/colors-sort/components/index.js +6 -0
- package/lib/module/games/colors-sort/components/index.js.map +1 -0
- package/lib/module/games/dino-jump/DinoJump.js +209 -0
- package/lib/module/games/dino-jump/DinoJump.js.map +1 -0
- package/lib/module/games/dino-jump/DinoJumpConstants.js +189 -0
- package/lib/module/games/dino-jump/DinoJumpConstants.js.map +1 -0
- package/lib/module/games/dino-jump/DinoJumpService.js +270 -0
- package/lib/module/games/dino-jump/DinoJumpService.js.map +1 -0
- package/lib/module/games/dino-jump/DinoJumpStore.js +381 -0
- package/lib/module/games/dino-jump/DinoJumpStore.js.map +1 -0
- package/lib/module/games/dino-jump/components/DinoSprite.js +418 -0
- package/lib/module/games/dino-jump/components/DinoSprite.js.map +1 -0
- package/lib/module/games/dino-jump/components/GameArea.js +68 -0
- package/lib/module/games/dino-jump/components/GameArea.js.map +1 -0
- package/lib/module/games/dino-jump/components/GameBackground.js +444 -0
- package/lib/module/games/dino-jump/components/GameBackground.js.map +1 -0
- package/lib/module/games/dino-jump/components/ObstacleSprite.js +306 -0
- package/lib/module/games/dino-jump/components/ObstacleSprite.js.map +1 -0
- package/lib/module/games/dino-jump/components/ScoreBoard.js +105 -0
- package/lib/module/games/dino-jump/components/ScoreBoard.js.map +1 -0
- package/lib/module/games/dino-jump/components/StarSprite.js +45 -0
- package/lib/module/games/dino-jump/components/StarSprite.js.map +1 -0
- package/lib/module/games/dino-jump/components/index.js +9 -0
- package/lib/module/games/dino-jump/components/index.js.map +1 -0
- package/lib/module/games/flappy-bird/FlappyBird.js +126 -0
- package/lib/module/games/flappy-bird/FlappyBird.js.map +1 -0
- package/lib/module/games/flappy-bird/FlappyBirdConstants.js +90 -0
- package/lib/module/games/flappy-bird/FlappyBirdConstants.js.map +1 -0
- package/lib/module/games/flappy-bird/FlappyBirdStore.js +300 -0
- package/lib/module/games/flappy-bird/FlappyBirdStore.js.map +1 -0
- package/lib/module/games/flappy-bird/components/Bird.js +87 -0
- package/lib/module/games/flappy-bird/components/Bird.js.map +1 -0
- package/lib/module/games/flappy-bird/components/GameArea.js +87 -0
- package/lib/module/games/flappy-bird/components/GameArea.js.map +1 -0
- package/lib/module/games/flappy-bird/components/GameBackground.js +79 -0
- package/lib/module/games/flappy-bird/components/GameBackground.js.map +1 -0
- package/lib/module/games/flappy-bird/components/Pipes.js +172 -0
- package/lib/module/games/flappy-bird/components/Pipes.js.map +1 -0
- package/lib/module/games/flappy-bird/components/ScoreBoard.js +73 -0
- package/lib/module/games/flappy-bird/components/ScoreBoard.js.map +1 -0
- package/lib/module/games/flappy-bird/components/index.js +8 -0
- package/lib/module/games/flappy-bird/components/index.js.map +1 -0
- package/lib/module/games/fruit-merger/FruitMerger.js +120 -0
- package/lib/module/games/fruit-merger/FruitMerger.js.map +1 -0
- package/lib/module/games/fruit-merger/FruitMergerConstants.js +119 -0
- package/lib/module/games/fruit-merger/FruitMergerConstants.js.map +1 -0
- package/lib/module/games/fruit-merger/FruitMergerService.js +13 -0
- package/lib/module/games/fruit-merger/FruitMergerService.js.map +1 -0
- package/lib/module/games/fruit-merger/FruitMergerStore.js +315 -0
- package/lib/module/games/fruit-merger/FruitMergerStore.js.map +1 -0
- package/lib/module/games/fruit-merger/components/FruitItem.js +102 -0
- package/lib/module/games/fruit-merger/components/FruitItem.js.map +1 -0
- package/lib/module/games/fruit-merger/components/GameArea.js +103 -0
- package/lib/module/games/fruit-merger/components/GameArea.js.map +1 -0
- package/lib/module/games/fruit-merger/components/GameBackground.js +498 -0
- package/lib/module/games/fruit-merger/components/GameBackground.js.map +1 -0
- package/lib/module/games/fruit-merger/components/ScoreBoard.js +58 -0
- package/lib/module/games/fruit-merger/components/ScoreBoard.js.map +1 -0
- package/lib/module/games/fruit-merger/components/index.js +7 -0
- package/lib/module/games/fruit-merger/components/index.js.map +1 -0
- package/lib/module/games/fruit-ninja/FruitNinja.js +14 -22
- package/lib/module/games/fruit-ninja/FruitNinja.js.map +1 -1
- package/lib/module/games/fruit-ninja/FruitNinjaStore.js +1 -1
- package/lib/module/games/fruit-ninja/components/GameArea.js +1 -1
- package/lib/module/games/fruit-ninja/components/GameArea.js.map +1 -1
- package/lib/module/games/fruit-ninja/components/GameBackground.js +70 -45
- package/lib/module/games/fruit-ninja/components/GameBackground.js.map +1 -1
- package/lib/module/games/fruit-ninja/components/ScoreBoard.js +47 -46
- package/lib/module/games/fruit-ninja/components/ScoreBoard.js.map +1 -1
- package/lib/module/games/game-2048/Game2048.js +149 -0
- package/lib/module/games/game-2048/Game2048.js.map +1 -0
- package/lib/module/games/game-2048/Game2048Constants.js +263 -0
- package/lib/module/games/game-2048/Game2048Constants.js.map +1 -0
- package/lib/module/games/game-2048/Game2048Service.js +457 -0
- package/lib/module/games/game-2048/Game2048Service.js.map +1 -0
- package/lib/module/games/game-2048/Game2048Store.js +236 -0
- package/lib/module/games/game-2048/Game2048Store.js.map +1 -0
- package/lib/module/games/game-2048/components/GameBackground.js +247 -0
- package/lib/module/games/game-2048/components/GameBackground.js.map +1 -0
- package/lib/module/games/game-2048/components/GameGrid.js +139 -0
- package/lib/module/games/game-2048/components/GameGrid.js.map +1 -0
- package/lib/module/games/game-2048/components/GameTile.js +72 -0
- package/lib/module/games/game-2048/components/GameTile.js.map +1 -0
- package/lib/module/games/game-2048/components/ScoreBoard.js +52 -0
- package/lib/module/games/game-2048/components/ScoreBoard.js.map +1 -0
- package/lib/module/games/game-2048/components/index.js +7 -0
- package/lib/module/games/game-2048/components/index.js.map +1 -0
- package/lib/module/games/maze-runner/MazeRunner.js +51 -41
- package/lib/module/games/maze-runner/MazeRunner.js.map +1 -1
- package/lib/module/games/maze-runner/MazeRunnerService.js +19 -17
- package/lib/module/games/maze-runner/MazeRunnerService.js.map +1 -1
- package/lib/module/games/maze-runner/components/ScoreBoard.js +32 -42
- package/lib/module/games/maze-runner/components/ScoreBoard.js.map +1 -1
- package/lib/module/games/popit-fidget/PopitFidget.js +57 -66
- package/lib/module/games/popit-fidget/PopitFidget.js.map +1 -1
- package/lib/module/games/popit-fidget/PopitFidgetStore.js +6 -44
- package/lib/module/games/popit-fidget/PopitFidgetStore.js.map +1 -1
- package/lib/module/games/popit-fidget/components/ScoreBoard.js +31 -45
- package/lib/module/games/popit-fidget/components/ScoreBoard.js.map +1 -1
- package/lib/module/games/sliding-numbers/SlidingNumbers.js +159 -0
- package/lib/module/games/sliding-numbers/SlidingNumbers.js.map +1 -0
- package/lib/module/games/sliding-numbers/SlidingNumbersConstants.js +207 -0
- package/lib/module/games/sliding-numbers/SlidingNumbersConstants.js.map +1 -0
- package/lib/module/games/sliding-numbers/SlidingNumbersService.js +248 -0
- package/lib/module/games/sliding-numbers/SlidingNumbersService.js.map +1 -0
- package/lib/module/games/sliding-numbers/SlidingNumbersStore.js +274 -0
- package/lib/module/games/sliding-numbers/SlidingNumbersStore.js.map +1 -0
- package/lib/module/games/sliding-numbers/components/GameBackground.js +259 -0
- package/lib/module/games/sliding-numbers/components/GameBackground.js.map +1 -0
- package/lib/module/games/sliding-numbers/components/NumbersGrid.js +174 -0
- package/lib/module/games/sliding-numbers/components/NumbersGrid.js.map +1 -0
- package/lib/module/games/sliding-numbers/components/NumbersTile.js +116 -0
- package/lib/module/games/sliding-numbers/components/NumbersTile.js.map +1 -0
- package/lib/module/games/sliding-numbers/components/ScoreBoard.js +64 -0
- package/lib/module/games/sliding-numbers/components/ScoreBoard.js.map +1 -0
- package/lib/module/games/sliding-numbers/components/index.js +7 -0
- package/lib/module/games/sliding-numbers/components/index.js.map +1 -0
- package/lib/module/games/snake/Snake.js +189 -0
- package/lib/module/games/snake/Snake.js.map +1 -0
- package/lib/module/games/snake/SnakeConstants.js +138 -0
- package/lib/module/games/snake/SnakeConstants.js.map +1 -0
- package/lib/module/games/snake/SnakeService.js +148 -0
- package/lib/module/games/snake/SnakeService.js.map +1 -0
- package/lib/module/games/snake/SnakeStore.js +182 -0
- package/lib/module/games/snake/SnakeStore.js.map +1 -0
- package/lib/module/games/snake/components/GameBackground.js +221 -0
- package/lib/module/games/snake/components/GameBackground.js.map +1 -0
- package/lib/module/games/snake/components/GameGrid.js +153 -0
- package/lib/module/games/snake/components/GameGrid.js.map +1 -0
- package/lib/module/games/snake/components/ScoreBoard.js +51 -0
- package/lib/module/games/snake/components/ScoreBoard.js.map +1 -0
- package/lib/module/games/snake/components/index.js +6 -0
- package/lib/module/games/snake/components/index.js.map +1 -0
- package/lib/module/games/snake/index.js +6 -0
- package/lib/module/games/snake/index.js.map +1 -0
- package/lib/module/games/space-fighter/SpaceFighter.js +22 -26
- package/lib/module/games/space-fighter/SpaceFighter.js.map +1 -1
- package/lib/module/games/space-fighter/SpaceFighterService.js +7 -6
- package/lib/module/games/space-fighter/SpaceFighterService.js.map +1 -1
- package/lib/module/games/space-fighter/SpaceFighterStore.js +25 -11
- package/lib/module/games/space-fighter/SpaceFighterStore.js.map +1 -1
- package/lib/module/games/space-fighter/components/GameArea.js +1 -7
- package/lib/module/games/space-fighter/components/GameArea.js.map +1 -1
- package/lib/module/games/space-fighter/components/ScoreBoard.js +47 -48
- package/lib/module/games/space-fighter/components/ScoreBoard.js.map +1 -1
- package/lib/module/games/whack-a-mole/WhackAMole.js +17 -10
- package/lib/module/games/whack-a-mole/WhackAMole.js.map +1 -1
- package/lib/module/games/whack-a-mole/WhackAMoleStore.js +1 -1
- package/lib/module/games/whack-a-mole/components/GameBackground.js +37 -30
- package/lib/module/games/whack-a-mole/components/GameBackground.js.map +1 -1
- package/lib/module/games/whack-a-mole/components/ScoreBoard.js +32 -38
- package/lib/module/games/whack-a-mole/components/ScoreBoard.js.map +1 -1
- package/lib/module/helpers/AnimationFrame.js.map +1 -0
- package/lib/module/helpers/AnimationTracker.js.map +1 -0
- package/lib/module/helpers/ErrorHandler.js.map +1 -0
- package/lib/module/helpers/GameControlButton.js.map +1 -0
- package/lib/module/{shared/helpers → helpers}/GameOverModal.js +6 -3
- package/lib/module/helpers/GameOverModal.js.map +1 -0
- package/lib/module/{shared/helpers → helpers}/GameSettingsModal.js +5 -5
- package/lib/module/helpers/GameSettingsModal.js.map +1 -0
- package/lib/module/{shared/helpers → helpers}/ParticleBlast.js +3 -2
- package/lib/module/helpers/ParticleBlast.js.map +1 -0
- package/lib/module/helpers/ScoreBoardContainer.js +34 -0
- package/lib/module/helpers/ScoreBoardContainer.js.map +1 -0
- package/lib/module/{shared/helpers → helpers}/index.js +1 -1
- package/lib/module/helpers/index.js.map +1 -0
- package/lib/module/index.js +9 -0
- package/lib/module/index.js.map +1 -1
- package/lib/module/services/GamesConstants.js +100 -5
- package/lib/module/services/GamesConstants.js.map +1 -1
- package/lib/module/services/GamesService.js +108 -42
- package/lib/module/services/GamesService.js.map +1 -1
- package/lib/module/services/SoundsService.js +132 -1
- package/lib/module/services/SoundsService.js.map +1 -1
- package/lib/module/services/UtilsService.js +32 -0
- package/lib/module/services/UtilsService.js.map +1 -0
- package/lib/typescript/src/games/balloon-blaster/BalloonBlaster.d.ts +1 -1
- package/lib/typescript/src/games/balloon-blaster/BalloonBlaster.d.ts.map +1 -1
- package/lib/typescript/src/games/balloon-blaster/components/GameBackground.d.ts +1 -0
- package/lib/typescript/src/games/balloon-blaster/components/GameBackground.d.ts.map +1 -1
- package/lib/typescript/src/games/balloon-blaster/components/ScoreBoard.d.ts +5 -1
- package/lib/typescript/src/games/balloon-blaster/components/ScoreBoard.d.ts.map +1 -1
- package/lib/typescript/src/games/candy-crush/CandyCrush.d.ts +4 -0
- package/lib/typescript/src/games/candy-crush/CandyCrush.d.ts.map +1 -0
- package/lib/typescript/src/games/candy-crush/CandyCrushConstants.d.ts +104 -0
- package/lib/typescript/src/games/candy-crush/CandyCrushConstants.d.ts.map +1 -0
- package/lib/typescript/src/games/candy-crush/CandyCrushService.d.ts +40 -0
- package/lib/typescript/src/games/candy-crush/CandyCrushService.d.ts.map +1 -0
- package/lib/typescript/src/games/candy-crush/CandyCrushStore.d.ts +48 -0
- package/lib/typescript/src/games/candy-crush/CandyCrushStore.d.ts.map +1 -0
- package/lib/typescript/src/games/candy-crush/components/CandyItem.d.ts +13 -0
- package/lib/typescript/src/games/candy-crush/components/CandyItem.d.ts.map +1 -0
- package/lib/typescript/src/games/candy-crush/components/GameBackground.d.ts +5 -0
- package/lib/typescript/src/games/candy-crush/components/GameBackground.d.ts.map +1 -0
- package/lib/typescript/src/games/candy-crush/components/GameGrid.d.ts +3 -0
- package/lib/typescript/src/games/candy-crush/components/GameGrid.d.ts.map +1 -0
- package/lib/typescript/src/games/candy-crush/components/ScoreBoard.d.ts +6 -0
- package/lib/typescript/src/games/candy-crush/components/ScoreBoard.d.ts.map +1 -0
- package/lib/typescript/src/games/candy-crush/components/index.d.ts +5 -0
- package/lib/typescript/src/games/candy-crush/components/index.d.ts.map +1 -0
- package/lib/typescript/src/games/candy-crush/index.d.ts +4 -0
- package/lib/typescript/src/games/candy-crush/index.d.ts.map +1 -0
- package/lib/typescript/src/games/colors-sort/ColorsSort.d.ts +4 -0
- package/lib/typescript/src/games/colors-sort/ColorsSort.d.ts.map +1 -0
- package/lib/typescript/src/games/colors-sort/ColorsSortConstants.d.ts +54 -0
- package/lib/typescript/src/games/colors-sort/ColorsSortConstants.d.ts.map +1 -0
- package/lib/typescript/src/games/colors-sort/ColorsSortService.d.ts +66 -0
- package/lib/typescript/src/games/colors-sort/ColorsSortService.d.ts.map +1 -0
- package/lib/typescript/src/games/colors-sort/ColorsSortStore.d.ts +48 -0
- package/lib/typescript/src/games/colors-sort/ColorsSortStore.d.ts.map +1 -0
- package/lib/typescript/src/games/colors-sort/components/ColorContainer.d.ts +11 -0
- package/lib/typescript/src/games/colors-sort/components/ColorContainer.d.ts.map +1 -0
- package/lib/typescript/src/games/colors-sort/components/GameBackground.d.ts +7 -0
- package/lib/typescript/src/games/colors-sort/components/GameBackground.d.ts.map +1 -0
- package/lib/typescript/src/games/colors-sort/components/ScoreBoard.d.ts +7 -0
- package/lib/typescript/src/games/colors-sort/components/ScoreBoard.d.ts.map +1 -0
- package/lib/typescript/src/games/colors-sort/components/index.d.ts +4 -0
- package/lib/typescript/src/games/colors-sort/components/index.d.ts.map +1 -0
- package/lib/typescript/src/games/dino-jump/DinoJump.d.ts +4 -0
- package/lib/typescript/src/games/dino-jump/DinoJump.d.ts.map +1 -0
- package/lib/typescript/src/games/dino-jump/DinoJumpConstants.d.ts +97 -0
- package/lib/typescript/src/games/dino-jump/DinoJumpConstants.d.ts.map +1 -0
- package/lib/typescript/src/games/dino-jump/DinoJumpService.d.ts +40 -0
- package/lib/typescript/src/games/dino-jump/DinoJumpService.d.ts.map +1 -0
- package/lib/typescript/src/games/dino-jump/DinoJumpStore.d.ts +103 -0
- package/lib/typescript/src/games/dino-jump/DinoJumpStore.d.ts.map +1 -0
- package/lib/typescript/src/games/dino-jump/components/DinoSprite.d.ts +3 -0
- package/lib/typescript/src/games/dino-jump/components/DinoSprite.d.ts.map +1 -0
- package/lib/typescript/src/games/dino-jump/components/GameArea.d.ts +8 -0
- package/lib/typescript/src/games/dino-jump/components/GameArea.d.ts.map +1 -0
- package/lib/typescript/src/games/dino-jump/components/GameBackground.d.ts +8 -0
- package/lib/typescript/src/games/dino-jump/components/GameBackground.d.ts.map +1 -0
- package/lib/typescript/src/games/dino-jump/components/ObstacleSprite.d.ts +3 -0
- package/lib/typescript/src/games/dino-jump/components/ObstacleSprite.d.ts.map +1 -0
- package/lib/typescript/src/games/dino-jump/components/ScoreBoard.d.ts +7 -0
- package/lib/typescript/src/games/dino-jump/components/ScoreBoard.d.ts.map +1 -0
- package/lib/typescript/src/games/dino-jump/components/StarSprite.d.ts +3 -0
- package/lib/typescript/src/games/dino-jump/components/StarSprite.d.ts.map +1 -0
- package/lib/typescript/src/games/dino-jump/components/index.d.ts +7 -0
- package/lib/typescript/src/games/dino-jump/components/index.d.ts.map +1 -0
- package/lib/typescript/src/games/flappy-bird/FlappyBird.d.ts +4 -0
- package/lib/typescript/src/games/flappy-bird/FlappyBird.d.ts.map +1 -0
- package/lib/typescript/src/games/flappy-bird/FlappyBirdConstants.d.ts +83 -0
- package/lib/typescript/src/games/flappy-bird/FlappyBirdConstants.d.ts.map +1 -0
- package/lib/typescript/src/games/flappy-bird/FlappyBirdStore.d.ts +53 -0
- package/lib/typescript/src/games/flappy-bird/FlappyBirdStore.d.ts.map +1 -0
- package/lib/typescript/src/games/flappy-bird/components/Bird.d.ts +8 -0
- package/lib/typescript/src/games/flappy-bird/components/Bird.d.ts.map +1 -0
- package/lib/typescript/src/games/flappy-bird/components/GameArea.d.ts +8 -0
- package/lib/typescript/src/games/flappy-bird/components/GameArea.d.ts.map +1 -0
- package/lib/typescript/src/games/flappy-bird/components/GameBackground.d.ts +8 -0
- package/lib/typescript/src/games/flappy-bird/components/GameBackground.d.ts.map +1 -0
- package/lib/typescript/src/games/flappy-bird/components/Pipes.d.ts +9 -0
- package/lib/typescript/src/games/flappy-bird/components/Pipes.d.ts.map +1 -0
- package/lib/typescript/src/games/flappy-bird/components/ScoreBoard.d.ts +7 -0
- package/lib/typescript/src/games/flappy-bird/components/ScoreBoard.d.ts.map +1 -0
- package/lib/typescript/src/games/flappy-bird/components/index.d.ts +6 -0
- package/lib/typescript/src/games/flappy-bird/components/index.d.ts.map +1 -0
- package/lib/typescript/src/games/fruit-merger/FruitMerger.d.ts +4 -0
- package/lib/typescript/src/games/fruit-merger/FruitMerger.d.ts.map +1 -0
- package/lib/typescript/src/games/fruit-merger/FruitMergerConstants.d.ts +115 -0
- package/lib/typescript/src/games/fruit-merger/FruitMergerConstants.d.ts.map +1 -0
- package/lib/typescript/src/games/fruit-merger/FruitMergerService.d.ts +5 -0
- package/lib/typescript/src/games/fruit-merger/FruitMergerService.d.ts.map +1 -0
- package/lib/typescript/src/games/fruit-merger/FruitMergerStore.d.ts +43 -0
- package/lib/typescript/src/games/fruit-merger/FruitMergerStore.d.ts.map +1 -0
- package/lib/typescript/src/games/fruit-merger/components/FruitItem.d.ts +10 -0
- package/lib/typescript/src/games/fruit-merger/components/FruitItem.d.ts.map +1 -0
- package/lib/typescript/src/games/fruit-merger/components/GameArea.d.ts +8 -0
- package/lib/typescript/src/games/fruit-merger/components/GameArea.d.ts.map +1 -0
- package/lib/typescript/src/games/fruit-merger/components/GameBackground.d.ts +8 -0
- package/lib/typescript/src/games/fruit-merger/components/GameBackground.d.ts.map +1 -0
- package/lib/typescript/src/games/fruit-merger/components/ScoreBoard.d.ts +7 -0
- package/lib/typescript/src/games/fruit-merger/components/ScoreBoard.d.ts.map +1 -0
- package/lib/typescript/src/games/fruit-merger/components/index.d.ts +5 -0
- package/lib/typescript/src/games/fruit-merger/components/index.d.ts.map +1 -0
- package/lib/typescript/src/games/fruit-ninja/FruitNinja.d.ts +1 -1
- package/lib/typescript/src/games/fruit-ninja/FruitNinja.d.ts.map +1 -1
- package/lib/typescript/src/games/fruit-ninja/components/GameBackground.d.ts +1 -0
- package/lib/typescript/src/games/fruit-ninja/components/GameBackground.d.ts.map +1 -1
- package/lib/typescript/src/games/fruit-ninja/components/ScoreBoard.d.ts +5 -1
- package/lib/typescript/src/games/fruit-ninja/components/ScoreBoard.d.ts.map +1 -1
- package/lib/typescript/src/games/game-2048/Game2048.d.ts +4 -0
- package/lib/typescript/src/games/game-2048/Game2048.d.ts.map +1 -0
- package/lib/typescript/src/games/game-2048/Game2048Constants.d.ts +163 -0
- package/lib/typescript/src/games/game-2048/Game2048Constants.d.ts.map +1 -0
- package/lib/typescript/src/games/game-2048/Game2048Service.d.ts +113 -0
- package/lib/typescript/src/games/game-2048/Game2048Service.d.ts.map +1 -0
- package/lib/typescript/src/games/game-2048/Game2048Store.d.ts +48 -0
- package/lib/typescript/src/games/game-2048/Game2048Store.d.ts.map +1 -0
- package/lib/typescript/src/games/game-2048/components/GameBackground.d.ts +7 -0
- package/lib/typescript/src/games/game-2048/components/GameBackground.d.ts.map +1 -0
- package/lib/typescript/src/games/game-2048/components/GameGrid.d.ts +7 -0
- package/lib/typescript/src/games/game-2048/components/GameGrid.d.ts.map +1 -0
- package/lib/typescript/src/games/game-2048/components/GameTile.d.ts +13 -0
- package/lib/typescript/src/games/game-2048/components/GameTile.d.ts.map +1 -0
- package/lib/typescript/src/games/game-2048/components/ScoreBoard.d.ts +7 -0
- package/lib/typescript/src/games/game-2048/components/ScoreBoard.d.ts.map +1 -0
- package/lib/typescript/src/games/game-2048/components/index.d.ts +5 -0
- package/lib/typescript/src/games/game-2048/components/index.d.ts.map +1 -0
- package/lib/typescript/src/games/maze-runner/MazeRunner.d.ts +1 -1
- package/lib/typescript/src/games/maze-runner/MazeRunner.d.ts.map +1 -1
- package/lib/typescript/src/games/maze-runner/MazeRunnerService.d.ts +1 -0
- package/lib/typescript/src/games/maze-runner/MazeRunnerService.d.ts.map +1 -1
- package/lib/typescript/src/games/maze-runner/components/ScoreBoard.d.ts +1 -0
- package/lib/typescript/src/games/maze-runner/components/ScoreBoard.d.ts.map +1 -1
- package/lib/typescript/src/games/popit-fidget/PopitFidget.d.ts +1 -1
- package/lib/typescript/src/games/popit-fidget/PopitFidget.d.ts.map +1 -1
- package/lib/typescript/src/games/popit-fidget/PopitFidgetStore.d.ts +2 -5
- package/lib/typescript/src/games/popit-fidget/PopitFidgetStore.d.ts.map +1 -1
- package/lib/typescript/src/games/popit-fidget/components/ScoreBoard.d.ts +2 -2
- package/lib/typescript/src/games/popit-fidget/components/ScoreBoard.d.ts.map +1 -1
- package/lib/typescript/src/games/sliding-numbers/SlidingNumbers.d.ts +4 -0
- package/lib/typescript/src/games/sliding-numbers/SlidingNumbers.d.ts.map +1 -0
- package/lib/typescript/src/games/sliding-numbers/SlidingNumbersConstants.d.ts +108 -0
- package/lib/typescript/src/games/sliding-numbers/SlidingNumbersConstants.d.ts.map +1 -0
- package/lib/typescript/src/games/sliding-numbers/SlidingNumbersService.d.ts +34 -0
- package/lib/typescript/src/games/sliding-numbers/SlidingNumbersService.d.ts.map +1 -0
- package/lib/typescript/src/games/sliding-numbers/SlidingNumbersStore.d.ts +56 -0
- package/lib/typescript/src/games/sliding-numbers/SlidingNumbersStore.d.ts.map +1 -0
- package/lib/typescript/src/games/sliding-numbers/components/GameBackground.d.ts +7 -0
- package/lib/typescript/src/games/sliding-numbers/components/GameBackground.d.ts.map +1 -0
- package/lib/typescript/src/games/sliding-numbers/components/NumbersGrid.d.ts +7 -0
- package/lib/typescript/src/games/sliding-numbers/components/NumbersGrid.d.ts.map +1 -0
- package/lib/typescript/src/games/sliding-numbers/components/NumbersTile.d.ts +11 -0
- package/lib/typescript/src/games/sliding-numbers/components/NumbersTile.d.ts.map +1 -0
- package/lib/typescript/src/games/sliding-numbers/components/ScoreBoard.d.ts +7 -0
- package/lib/typescript/src/games/sliding-numbers/components/ScoreBoard.d.ts.map +1 -0
- package/lib/typescript/src/games/sliding-numbers/components/index.d.ts +5 -0
- package/lib/typescript/src/games/sliding-numbers/components/index.d.ts.map +1 -0
- package/lib/typescript/src/games/snake/Snake.d.ts +4 -0
- package/lib/typescript/src/games/snake/Snake.d.ts.map +1 -0
- package/lib/typescript/src/games/snake/SnakeConstants.d.ts +93 -0
- package/lib/typescript/src/games/snake/SnakeConstants.d.ts.map +1 -0
- package/lib/typescript/src/games/snake/SnakeService.d.ts +30 -0
- package/lib/typescript/src/games/snake/SnakeService.d.ts.map +1 -0
- package/lib/typescript/src/games/snake/SnakeStore.d.ts +43 -0
- package/lib/typescript/src/games/snake/SnakeStore.d.ts.map +1 -0
- package/lib/typescript/src/games/snake/components/GameBackground.d.ts +5 -0
- package/lib/typescript/src/games/snake/components/GameBackground.d.ts.map +1 -0
- package/lib/typescript/src/games/snake/components/GameGrid.d.ts +3 -0
- package/lib/typescript/src/games/snake/components/GameGrid.d.ts.map +1 -0
- package/lib/typescript/src/games/snake/components/ScoreBoard.d.ts +7 -0
- package/lib/typescript/src/games/snake/components/ScoreBoard.d.ts.map +1 -0
- package/lib/typescript/src/games/snake/components/index.d.ts +4 -0
- package/lib/typescript/src/games/snake/components/index.d.ts.map +1 -0
- package/lib/typescript/src/games/snake/index.d.ts +4 -0
- package/lib/typescript/src/games/snake/index.d.ts.map +1 -0
- package/lib/typescript/src/games/space-fighter/SpaceFighter.d.ts +1 -1
- package/lib/typescript/src/games/space-fighter/SpaceFighter.d.ts.map +1 -1
- package/lib/typescript/src/games/space-fighter/SpaceFighterService.d.ts.map +1 -1
- package/lib/typescript/src/games/space-fighter/SpaceFighterStore.d.ts +2 -0
- package/lib/typescript/src/games/space-fighter/SpaceFighterStore.d.ts.map +1 -1
- package/lib/typescript/src/games/space-fighter/components/GameArea.d.ts.map +1 -1
- package/lib/typescript/src/games/space-fighter/components/ScoreBoard.d.ts +5 -1
- package/lib/typescript/src/games/space-fighter/components/ScoreBoard.d.ts.map +1 -1
- package/lib/typescript/src/games/whack-a-mole/WhackAMole.d.ts +1 -1
- package/lib/typescript/src/games/whack-a-mole/WhackAMole.d.ts.map +1 -1
- package/lib/typescript/src/games/whack-a-mole/components/GameBackground.d.ts +1 -0
- package/lib/typescript/src/games/whack-a-mole/components/GameBackground.d.ts.map +1 -1
- package/lib/typescript/src/games/whack-a-mole/components/ScoreBoard.d.ts +1 -0
- package/lib/typescript/src/games/whack-a-mole/components/ScoreBoard.d.ts.map +1 -1
- package/lib/typescript/src/helpers/AnimationFrame.d.ts.map +1 -0
- package/lib/typescript/src/helpers/AnimationTracker.d.ts.map +1 -0
- package/lib/typescript/src/helpers/ErrorHandler.d.ts.map +1 -0
- package/lib/typescript/src/helpers/GameControlButton.d.ts.map +1 -0
- package/lib/typescript/src/{shared/helpers → helpers}/GameOverModal.d.ts +2 -0
- package/lib/typescript/src/helpers/GameOverModal.d.ts.map +1 -0
- package/lib/typescript/src/{shared/helpers → helpers}/GameSettingsModal.d.ts +1 -1
- package/lib/typescript/src/helpers/GameSettingsModal.d.ts.map +1 -0
- package/lib/typescript/src/helpers/ParticleBlast.d.ts.map +1 -0
- package/lib/typescript/src/helpers/ScoreBoardContainer.d.ts +9 -0
- package/lib/typescript/src/helpers/ScoreBoardContainer.d.ts.map +1 -0
- package/lib/typescript/src/{shared/helpers → helpers}/index.d.ts +2 -1
- package/lib/typescript/src/helpers/index.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +9 -0
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/services/GamesConstants.d.ts +162 -0
- package/lib/typescript/src/services/GamesConstants.d.ts.map +1 -1
- package/lib/typescript/src/services/GamesService.d.ts +3 -25
- package/lib/typescript/src/services/GamesService.d.ts.map +1 -1
- package/lib/typescript/src/services/SoundsService.d.ts +103 -0
- package/lib/typescript/src/services/SoundsService.d.ts.map +1 -1
- package/lib/typescript/src/services/UtilsService.d.ts +38 -0
- package/lib/typescript/src/services/UtilsService.d.ts.map +1 -0
- package/package.json +1 -1
- package/lib/module/shared/helpers/AnimationFrame.js.map +0 -1
- package/lib/module/shared/helpers/AnimationTracker.js.map +0 -1
- package/lib/module/shared/helpers/ErrorHandler.js.map +0 -1
- package/lib/module/shared/helpers/GameControlButton.js.map +0 -1
- package/lib/module/shared/helpers/GameOverModal.js.map +0 -1
- package/lib/module/shared/helpers/GameSettingsModal.js.map +0 -1
- package/lib/module/shared/helpers/ParticleBlast.js.map +0 -1
- package/lib/module/shared/helpers/ResponsiveScoreBoard.js +0 -81
- package/lib/module/shared/helpers/ResponsiveScoreBoard.js.map +0 -1
- package/lib/module/shared/helpers/index.js.map +0 -1
- package/lib/typescript/src/shared/helpers/AnimationFrame.d.ts.map +0 -1
- package/lib/typescript/src/shared/helpers/AnimationTracker.d.ts.map +0 -1
- package/lib/typescript/src/shared/helpers/ErrorHandler.d.ts.map +0 -1
- package/lib/typescript/src/shared/helpers/GameControlButton.d.ts.map +0 -1
- package/lib/typescript/src/shared/helpers/GameOverModal.d.ts.map +0 -1
- package/lib/typescript/src/shared/helpers/GameSettingsModal.d.ts.map +0 -1
- package/lib/typescript/src/shared/helpers/ParticleBlast.d.ts.map +0 -1
- package/lib/typescript/src/shared/helpers/ResponsiveScoreBoard.d.ts +0 -42
- package/lib/typescript/src/shared/helpers/ResponsiveScoreBoard.d.ts.map +0 -1
- package/lib/typescript/src/shared/helpers/index.d.ts.map +0 -1
- /package/lib/module/{shared/helpers → helpers}/AnimationFrame.js +0 -0
- /package/lib/module/{shared/helpers → helpers}/AnimationTracker.js +0 -0
- /package/lib/module/{shared/helpers → helpers}/ErrorHandler.js +0 -0
- /package/lib/module/{shared/helpers → helpers}/GameControlButton.js +0 -0
- /package/lib/typescript/src/{shared/helpers → helpers}/AnimationFrame.d.ts +0 -0
- /package/lib/typescript/src/{shared/helpers → helpers}/AnimationTracker.d.ts +0 -0
- /package/lib/typescript/src/{shared/helpers → helpers}/ErrorHandler.d.ts +0 -0
- /package/lib/typescript/src/{shared/helpers → helpers}/GameControlButton.d.ts +0 -0
- /package/lib/typescript/src/{shared/helpers → helpers}/ParticleBlast.d.ts +0 -0
|
@@ -0,0 +1,303 @@
|
|
|
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/UtilsService.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
|
+
|
|
89
|
+
// Reset the game instead of showing game over modal
|
|
90
|
+
state.initializeGame(state.difficulty);
|
|
91
|
+
},
|
|
92
|
+
resetGame: () => {
|
|
93
|
+
const state = get();
|
|
94
|
+
state.initializeGame(state.difficulty);
|
|
95
|
+
state.startGame();
|
|
96
|
+
},
|
|
97
|
+
initializeGame: (difficulty = 'easy') => {
|
|
98
|
+
const state = get();
|
|
99
|
+
if (state.gameTimer) {
|
|
100
|
+
clearInterval(state.gameTimer);
|
|
101
|
+
}
|
|
102
|
+
set(state => {
|
|
103
|
+
const config = DIFFICULTY_CONFIG[difficulty];
|
|
104
|
+
gameService.resetIdCounter();
|
|
105
|
+
state.grid = gameService.initializeGrid(config.candyTypes);
|
|
106
|
+
state.score = 0;
|
|
107
|
+
state.timeRemaining = config.gameDuration;
|
|
108
|
+
state.gameDuration = config.gameDuration;
|
|
109
|
+
state.isPlaying = false;
|
|
110
|
+
state.isGameOver = false;
|
|
111
|
+
state.selectedCandy = null;
|
|
112
|
+
state.isProcessing = false;
|
|
113
|
+
state.difficulty = difficulty;
|
|
114
|
+
state.candyTypes = config.candyTypes;
|
|
115
|
+
state.comboCount = 0;
|
|
116
|
+
state.gameTimer = null;
|
|
117
|
+
state.matchedCandyIds = new Set();
|
|
118
|
+
state.fallingCandyIds = new Set();
|
|
119
|
+
});
|
|
120
|
+
},
|
|
121
|
+
selectCandy: candy => {
|
|
122
|
+
const state = get();
|
|
123
|
+
if (state.isProcessing || !state.isPlaying || state.isGameOver) {
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
set(draft => {
|
|
127
|
+
if (!draft.selectedCandy) {
|
|
128
|
+
// First candy selected
|
|
129
|
+
draft.selectedCandy = candy;
|
|
130
|
+
playSound(CANDY_CRUSH_SOUNDS.SWAP, draft.enableSounds);
|
|
131
|
+
playHaptic(HapticType.LIGHT, draft.enableHaptics);
|
|
132
|
+
} else if (draft.selectedCandy.id === candy.id) {
|
|
133
|
+
// Deselect same candy
|
|
134
|
+
draft.selectedCandy = null;
|
|
135
|
+
} else if (gameService.canSwap(draft.selectedCandy, candy)) {
|
|
136
|
+
// Valid swap - process it
|
|
137
|
+
const candy1 = draft.selectedCandy;
|
|
138
|
+
const candy2 = candy;
|
|
139
|
+
|
|
140
|
+
// Swap candies
|
|
141
|
+
gameService.swapCandies(draft.grid, candy1, candy2);
|
|
142
|
+
|
|
143
|
+
// Only update affected rows to minimize re-renders
|
|
144
|
+
const affectedRows = new Set([candy1.row, candy2.row]);
|
|
145
|
+
affectedRows.forEach(rowIndex => {
|
|
146
|
+
if (draft.grid[rowIndex]) {
|
|
147
|
+
draft.grid[rowIndex] = [...draft.grid[rowIndex]];
|
|
148
|
+
}
|
|
149
|
+
});
|
|
150
|
+
|
|
151
|
+
// Check for matches
|
|
152
|
+
const matchResult = gameService.findMatches(draft.grid);
|
|
153
|
+
if (matchResult.hasMatches) {
|
|
154
|
+
// Valid move
|
|
155
|
+
draft.selectedCandy = null;
|
|
156
|
+
draft.isProcessing = true;
|
|
157
|
+
playSound(CANDY_CRUSH_SOUNDS.SWAP, draft.enableSounds);
|
|
158
|
+
playHaptic(HapticType.MEDIUM, draft.enableHaptics);
|
|
159
|
+
|
|
160
|
+
// Process matches after animation
|
|
161
|
+
setTimeout(() => {
|
|
162
|
+
get().processMatches();
|
|
163
|
+
}, CANDY_CRUSH_GAME_CONFIG.SWAP_DURATION);
|
|
164
|
+
} else {
|
|
165
|
+
// Invalid move - swap back
|
|
166
|
+
gameService.swapCandies(draft.grid, candy1, candy2);
|
|
167
|
+
draft.selectedCandy = null;
|
|
168
|
+
|
|
169
|
+
// Only update affected rows to minimize re-renders
|
|
170
|
+
const affectedRows = new Set([candy1.row, candy2.row]);
|
|
171
|
+
affectedRows.forEach(rowIndex => {
|
|
172
|
+
if (draft.grid[rowIndex]) {
|
|
173
|
+
draft.grid[rowIndex] = [...draft.grid[rowIndex]];
|
|
174
|
+
}
|
|
175
|
+
});
|
|
176
|
+
playSound(CANDY_CRUSH_SOUNDS.SWAP, draft.enableSounds);
|
|
177
|
+
playHaptic(HapticType.LIGHT, draft.enableHaptics);
|
|
178
|
+
}
|
|
179
|
+
} else {
|
|
180
|
+
// Not adjacent - select new candy
|
|
181
|
+
draft.selectedCandy = candy;
|
|
182
|
+
playSound(CANDY_CRUSH_SOUNDS.SWAP, draft.enableSounds);
|
|
183
|
+
playHaptic(HapticType.LIGHT, draft.enableHaptics);
|
|
184
|
+
}
|
|
185
|
+
});
|
|
186
|
+
},
|
|
187
|
+
processMatches: async () => {
|
|
188
|
+
let hasMatches = true;
|
|
189
|
+
let comboCount = 0;
|
|
190
|
+
while (hasMatches) {
|
|
191
|
+
// Get fresh state at the start of each iteration
|
|
192
|
+
const state = get();
|
|
193
|
+
|
|
194
|
+
// Find matches
|
|
195
|
+
const matchResult = gameService.findMatches(state.grid);
|
|
196
|
+
if (!matchResult.hasMatches) {
|
|
197
|
+
hasMatches = false;
|
|
198
|
+
break;
|
|
199
|
+
}
|
|
200
|
+
comboCount++;
|
|
201
|
+
|
|
202
|
+
// Calculate score with combo multiplier
|
|
203
|
+
const baseScore = matchResult.score;
|
|
204
|
+
const comboMultiplier = comboCount > 1 ? Math.pow(CANDY_CRUSH_GAME_CONFIG.COMBO_MULTIPLIER, comboCount - 1) : 1;
|
|
205
|
+
const finalScore = Math.floor(baseScore * comboMultiplier);
|
|
206
|
+
|
|
207
|
+
// Update score
|
|
208
|
+
set(draft => {
|
|
209
|
+
draft.score += finalScore;
|
|
210
|
+
draft.comboCount = comboCount;
|
|
211
|
+
});
|
|
212
|
+
|
|
213
|
+
// Play sound
|
|
214
|
+
if (comboCount > 1) {
|
|
215
|
+
playSound(CANDY_CRUSH_SOUNDS.COMBO, state.enableSounds);
|
|
216
|
+
playHaptic(HapticType.HEAVY, state.enableHaptics);
|
|
217
|
+
} else {
|
|
218
|
+
playSound(CANDY_CRUSH_SOUNDS.MATCH, state.enableSounds);
|
|
219
|
+
playHaptic(HapticType.MEDIUM, state.enableHaptics);
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
// Mark candies as matched for animation using Set (no grid mutation needed)
|
|
223
|
+
set(draft => {
|
|
224
|
+
draft.matchedCandyIds = new Set(matchResult.matches.map(c => c.id));
|
|
225
|
+
// No grid update needed - animation state is separate
|
|
226
|
+
});
|
|
227
|
+
|
|
228
|
+
// Wait for animation
|
|
229
|
+
await new Promise(resolve => setTimeout(resolve, CANDY_CRUSH_GAME_CONFIG.ANIMATION_DURATION));
|
|
230
|
+
|
|
231
|
+
// Remove matches, apply gravity, and fill empty spaces (all in one set call)
|
|
232
|
+
set(draft => {
|
|
233
|
+
// Clear matched IDs
|
|
234
|
+
draft.matchedCandyIds = new Set();
|
|
235
|
+
|
|
236
|
+
// Track which rows will be affected by matches
|
|
237
|
+
const affectedRows = new Set();
|
|
238
|
+
matchResult.matches.forEach(candy => affectedRows.add(candy.row));
|
|
239
|
+
|
|
240
|
+
// Store original candy IDs per row to detect changes
|
|
241
|
+
const originalRowIds = draft.grid.map(row => row.map(c => c?.id).join(','));
|
|
242
|
+
|
|
243
|
+
// Remove matches
|
|
244
|
+
gameService.removeMatches(draft.grid, matchResult.matches);
|
|
245
|
+
|
|
246
|
+
// Apply gravity (affects all rows below matches)
|
|
247
|
+
gameService.applyGravity(draft.grid);
|
|
248
|
+
|
|
249
|
+
// Fill empty spaces (affects top rows)
|
|
250
|
+
gameService.fillEmptySpaces(draft.grid, state.candyTypes);
|
|
251
|
+
|
|
252
|
+
// Mark falling candies
|
|
253
|
+
const fallingIds = new Set();
|
|
254
|
+
draft.grid.forEach(row => {
|
|
255
|
+
row.forEach(candy => {
|
|
256
|
+
if (candy && candy.isFalling) {
|
|
257
|
+
fallingIds.add(candy.id);
|
|
258
|
+
}
|
|
259
|
+
});
|
|
260
|
+
});
|
|
261
|
+
draft.fallingCandyIds = fallingIds;
|
|
262
|
+
|
|
263
|
+
// Only update rows that actually changed
|
|
264
|
+
draft.grid.forEach((row, rowIndex) => {
|
|
265
|
+
const newRowIds = row.map(c => c?.id).join(',');
|
|
266
|
+
if (originalRowIds[rowIndex] !== newRowIds) {
|
|
267
|
+
draft.grid[rowIndex] = [...row];
|
|
268
|
+
}
|
|
269
|
+
});
|
|
270
|
+
});
|
|
271
|
+
|
|
272
|
+
// Wait for fall animation
|
|
273
|
+
await new Promise(resolve => setTimeout(resolve, CANDY_CRUSH_GAME_CONFIG.FALL_DURATION));
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
// Reset processing state and clear animation states
|
|
277
|
+
set(draft => {
|
|
278
|
+
draft.isProcessing = false;
|
|
279
|
+
draft.comboCount = 0;
|
|
280
|
+
draft.matchedCandyIds = new Set();
|
|
281
|
+
draft.fallingCandyIds = new Set();
|
|
282
|
+
});
|
|
283
|
+
},
|
|
284
|
+
updateSettings: (enableSounds, enableHaptics) => {
|
|
285
|
+
set(state => {
|
|
286
|
+
state.enableSounds = enableSounds;
|
|
287
|
+
state.enableHaptics = enableHaptics;
|
|
288
|
+
});
|
|
289
|
+
}
|
|
290
|
+
}))));
|
|
291
|
+
|
|
292
|
+
// Selector hooks for optimal re-renders
|
|
293
|
+
export const useGrid = () => useCandyCrushStore(state => state.grid);
|
|
294
|
+
export const useScore = () => useCandyCrushStore(state => state.score);
|
|
295
|
+
export const useTimeRemaining = () => useCandyCrushStore(state => state.timeRemaining);
|
|
296
|
+
export const useGameDuration = () => useCandyCrushStore(state => state.gameDuration);
|
|
297
|
+
export const useIsPlaying = () => useCandyCrushStore(state => state.isPlaying);
|
|
298
|
+
export const useIsGameOver = () => useCandyCrushStore(state => state.isGameOver);
|
|
299
|
+
export const useSelectedCandy = () => useCandyCrushStore(state => state.selectedCandy);
|
|
300
|
+
export const useComboCount = () => useCandyCrushStore(state => state.comboCount);
|
|
301
|
+
export const useMatchedCandyIds = () => useCandyCrushStore(state => state.matchedCandyIds);
|
|
302
|
+
export const useFallingCandyIds = () => useCandyCrushStore(state => state.fallingCandyIds);
|
|
303
|
+
//# sourceMappingURL=CandyCrushStore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["create","subscribeWithSelector","CandyCrushService","CANDY_CRUSH_GAME_CONFIG","DIFFICULTY_CONFIG","CANDY_CRUSH_SOUNDS","immerMiddleware","playSound","playHaptic","HapticType","gameService","useCandyCrushStore","set","get","grid","createGrid","score","timeRemaining","gameDuration","isPlaying","isGameOver","selectedCandy","isProcessing","difficulty","candyTypes","enableSounds","enableHaptics","comboCount","gameTimer","matchedCandyIds","Set","fallingCandyIds","startGame","state","clearInterval","SWAP","MEDIUM","timer","setInterval","currentState","draft","SPECIAL","HEAVY","LOSE","stopGame","initializeGame","resetGame","config","resetIdCounter","initializeGrid","selectCandy","candy","LIGHT","id","canSwap","candy1","candy2","swapCandies","affectedRows","row","forEach","rowIndex","matchResult","findMatches","hasMatches","setTimeout","processMatches","SWAP_DURATION","baseScore","comboMultiplier","Math","pow","COMBO_MULTIPLIER","finalScore","floor","COMBO","MATCH","matches","map","c","Promise","resolve","ANIMATION_DURATION","add","originalRowIds","join","removeMatches","applyGravity","fillEmptySpaces","fallingIds","isFalling","newRowIds","FALL_DURATION","updateSettings","useGrid","useScore","useTimeRemaining","useGameDuration","useIsPlaying","useIsGameOver","useSelectedCandy","useComboCount","useMatchedCandyIds","useFallingCandyIds"],"sourceRoot":"../../../../src","sources":["games/candy-crush/CandyCrushStore.ts"],"mappings":";;AAAA,SAASA,MAAM,QAAQ,SAAS;AAChC,SAASC,qBAAqB,QAAQ,oBAAoB;AAE1D,SAASC,iBAAiB,QAAQ,wBAAqB;AACvD,SAASC,uBAAuB,EAAEC,iBAAiB,EAAEC,kBAAkB,QAAQ,0BAAuB;AACtG,SAASC,eAAe,QAAQ,gCAA6B;AAC7D,SAASC,SAAS,QAAQ,iCAA8B;AACxD,SAASC,UAAU,EAAEC,UAAU,QAAQ,kCAA+B;AA+BtE,MAAMC,WAAW,GAAG,IAAIR,iBAAiB,CAAC,CAAC;AAE3C,OAAO,MAAMS,kBAAkB,GAAGX,MAAM,CAAkB,CAAC,CACzDC,qBAAqB,CACnBK,eAAe,CAAC,CAACM,GAAQ,EAAEC,GAAQ,MAAM;EACvC;EACAC,IAAI,EAAEJ,WAAW,CAACK,UAAU,CAAC,CAAC;EAC9BC,KAAK,EAAE,CAAC;EACRC,aAAa,EAAE,GAAG;EAClBC,YAAY,EAAE,GAAG;EACjBC,SAAS,EAAE,KAAK;EAChBC,UAAU,EAAE,KAAK;EACjBC,aAAa,EAAE,IAAI;EACnBC,YAAY,EAAE,KAAK;EACnBC,UAAU,EAAE,MAAM;EAClBC,UAAU,EAAE,CAAC;EACbC,YAAY,EAAE,IAAI;EAClBC,aAAa,EAAE,IAAI;EACnBC,UAAU,EAAE,CAAC;EACbC,SAAS,EAAE,IAAI;EACfC,eAAe,EAAE,IAAIC,GAAG,CAAC,CAAC;EAC1BC,eAAe,EAAE,IAAID,GAAG,CAAC,CAAC;EAE1BE,SAAS,EAAEA,CAAA,KAAM;IACf,MAAMC,KAAK,GAAGpB,GAAG,CAAC,CAAC;;IAEnB;IACA,IAAIoB,KAAK,CAACL,SAAS,EAAE;MACnBM,aAAa,CAACD,KAAK,CAACL,SAAS,CAAC;IAChC;;IAEA;IACArB,SAAS,CAACF,kBAAkB,CAAC8B,IAAI,EAAEF,KAAK,CAACR,YAAY,CAAC;IACtDjB,UAAU,CAACC,UAAU,CAAC2B,MAAM,EAAEH,KAAK,CAACP,aAAa,CAAC;;IAElD;IACA,MAAMW,KAAK,GAAGC,WAAW,CAAC,MAAM;MAC9B,MAAMC,YAAY,GAAG1B,GAAG,CAAC,CAAC;MAC1B,IAAI0B,YAAY,CAACtB,aAAa,GAAG,CAAC,IAAIsB,YAAY,CAACpB,SAAS,EAAE;QAC5DP,GAAG,CAAE4B,KAAsB,IAAK;UAC9BA,KAAK,CAACvB,aAAa,EAAE;;UAErB;UACA,IAAIuB,KAAK,CAACvB,aAAa,KAAK,EAAE,EAAE;YAC9BV,SAAS,CAACF,kBAAkB,CAACoC,OAAO,EAAED,KAAK,CAACf,YAAY,CAAC;YACzDjB,UAAU,CAACC,UAAU,CAAC2B,MAAM,EAAEI,KAAK,CAACd,aAAa,CAAC;UACpD;;UAEA;UACA,IAAIc,KAAK,CAACvB,aAAa,KAAK,EAAE,EAAE;YAC9BV,SAAS,CAACF,kBAAkB,CAACoC,OAAO,EAAED,KAAK,CAACf,YAAY,CAAC;YACzDjB,UAAU,CAACC,UAAU,CAACiC,KAAK,EAAEF,KAAK,CAACd,aAAa,CAAC;UACnD;;UAEA;UACA,IAAIc,KAAK,CAACvB,aAAa,IAAI,CAAC,EAAE;YAC5BuB,KAAK,CAACpB,UAAU,GAAG,IAAI;YACvBoB,KAAK,CAACrB,SAAS,GAAG,KAAK;YACvB,IAAIqB,KAAK,CAACZ,SAAS,EAAE;cACnBM,aAAa,CAACM,KAAK,CAACZ,SAAS,CAAC;cAC9BY,KAAK,CAACZ,SAAS,GAAG,IAAI;YACxB;YACArB,SAAS,CAACF,kBAAkB,CAACsC,IAAI,EAAEH,KAAK,CAACf,YAAY,CAAC;YACtDjB,UAAU,CAACC,UAAU,CAACiC,KAAK,EAAEF,KAAK,CAACd,aAAa,CAAC;UACnD;QACF,CAAC,CAAC;MACJ;IACF,CAAC,EAAE,IAAI,CAAC;IAERd,GAAG,CAAEqB,KAAsB,IAAK;MAC9BA,KAAK,CAACd,SAAS,GAAG,IAAI;MACtBc,KAAK,CAACL,SAAS,GAAGS,KAAK;IACzB,CAAC,CAAC;EACJ,CAAC;EAEDO,QAAQ,EAAEA,CAAA,KAAM;IACd,MAAMX,KAAK,GAAGpB,GAAG,CAAC,CAAC;IACnB,IAAIoB,KAAK,CAACL,SAAS,EAAE;MACnBM,aAAa,CAACD,KAAK,CAACL,SAAS,CAAC;IAChC;;IAEA;IACArB,SAAS,CAACF,kBAAkB,CAACsC,IAAI,EAAEV,KAAK,CAACR,YAAY,CAAC;IACtDjB,UAAU,CAACC,UAAU,CAAC2B,MAAM,EAAEH,KAAK,CAACP,aAAa,CAAC;;IAElD;IACAO,KAAK,CAACY,cAAc,CAACZ,KAAK,CAACV,UAAU,CAAC;EACxC,CAAC;EAEDuB,SAAS,EAAEA,CAAA,KAAM;IACf,MAAMb,KAAK,GAAGpB,GAAG,CAAC,CAAC;IACnBoB,KAAK,CAACY,cAAc,CAACZ,KAAK,CAACV,UAAU,CAAC;IACtCU,KAAK,CAACD,SAAS,CAAC,CAAC;EACnB,CAAC;EAEDa,cAAc,EAAEA,CAACtB,UAAsC,GAAG,MAAM,KAAK;IACnE,MAAMU,KAAK,GAAGpB,GAAG,CAAC,CAAC;IACnB,IAAIoB,KAAK,CAACL,SAAS,EAAE;MACnBM,aAAa,CAACD,KAAK,CAACL,SAAS,CAAC;IAChC;IAEAhB,GAAG,CAAEqB,KAAsB,IAAK;MAC9B,MAAMc,MAAM,GAAG3C,iBAAiB,CAACmB,UAAU,CAAmC;MAE9Eb,WAAW,CAACsC,cAAc,CAAC,CAAC;MAC5Bf,KAAK,CAACnB,IAAI,GAAGJ,WAAW,CAACuC,cAAc,CAACF,MAAM,CAACvB,UAAU,CAAC;MAC1DS,KAAK,CAACjB,KAAK,GAAG,CAAC;MACfiB,KAAK,CAAChB,aAAa,GAAG8B,MAAM,CAAC7B,YAAY;MACzCe,KAAK,CAACf,YAAY,GAAG6B,MAAM,CAAC7B,YAAY;MACxCe,KAAK,CAACd,SAAS,GAAG,KAAK;MACvBc,KAAK,CAACb,UAAU,GAAG,KAAK;MACxBa,KAAK,CAACZ,aAAa,GAAG,IAAI;MAC1BY,KAAK,CAACX,YAAY,GAAG,KAAK;MAC1BW,KAAK,CAACV,UAAU,GAAGA,UAAU;MAC7BU,KAAK,CAACT,UAAU,GAAGuB,MAAM,CAACvB,UAAU;MACpCS,KAAK,CAACN,UAAU,GAAG,CAAC;MACpBM,KAAK,CAACL,SAAS,GAAG,IAAI;MACtBK,KAAK,CAACJ,eAAe,GAAG,IAAIC,GAAG,CAAC,CAAC;MACjCG,KAAK,CAACF,eAAe,GAAG,IAAID,GAAG,CAAC,CAAC;IACnC,CAAC,CAAC;EACJ,CAAC;EAEDoB,WAAW,EAAGC,KAAY,IAAK;IAC7B,MAAMlB,KAAK,GAAGpB,GAAG,CAAC,CAAC;IAEnB,IAAIoB,KAAK,CAACX,YAAY,IAAI,CAACW,KAAK,CAACd,SAAS,IAAIc,KAAK,CAACb,UAAU,EAAE;MAC9D;IACF;IAEAR,GAAG,CAAE4B,KAAsB,IAAK;MAC9B,IAAI,CAACA,KAAK,CAACnB,aAAa,EAAE;QACxB;QACAmB,KAAK,CAACnB,aAAa,GAAG8B,KAAK;QAC3B5C,SAAS,CAACF,kBAAkB,CAAC8B,IAAI,EAAEK,KAAK,CAACf,YAAY,CAAC;QACtDjB,UAAU,CAACC,UAAU,CAAC2C,KAAK,EAAEZ,KAAK,CAACd,aAAa,CAAC;MACnD,CAAC,MAAM,IAAIc,KAAK,CAACnB,aAAa,CAACgC,EAAE,KAAKF,KAAK,CAACE,EAAE,EAAE;QAC9C;QACAb,KAAK,CAACnB,aAAa,GAAG,IAAI;MAC5B,CAAC,MAAM,IAAIX,WAAW,CAAC4C,OAAO,CAACd,KAAK,CAACnB,aAAa,EAAE8B,KAAK,CAAC,EAAE;QAC1D;QACA,MAAMI,MAAM,GAAGf,KAAK,CAACnB,aAAa;QAClC,MAAMmC,MAAM,GAAGL,KAAK;;QAEpB;QACAzC,WAAW,CAAC+C,WAAW,CAACjB,KAAK,CAAC1B,IAAI,EAAEyC,MAAM,EAAEC,MAAM,CAAC;;QAEnD;QACA,MAAME,YAAY,GAAG,IAAI5B,GAAG,CAAC,CAACyB,MAAM,CAACI,GAAG,EAAEH,MAAM,CAACG,GAAG,CAAC,CAAC;QACtDD,YAAY,CAACE,OAAO,CAACC,QAAQ,IAAI;UAC/B,IAAIrB,KAAK,CAAC1B,IAAI,CAAC+C,QAAQ,CAAC,EAAE;YACxBrB,KAAK,CAAC1B,IAAI,CAAC+C,QAAQ,CAAC,GAAG,CAAC,GAAGrB,KAAK,CAAC1B,IAAI,CAAC+C,QAAQ,CAAC,CAAC;UAClD;QACF,CAAC,CAAC;;QAEF;QACA,MAAMC,WAAW,GAAGpD,WAAW,CAACqD,WAAW,CAACvB,KAAK,CAAC1B,IAAI,CAAC;QAEvD,IAAIgD,WAAW,CAACE,UAAU,EAAE;UAC1B;UACAxB,KAAK,CAACnB,aAAa,GAAG,IAAI;UAC1BmB,KAAK,CAAClB,YAAY,GAAG,IAAI;UAEzBf,SAAS,CAACF,kBAAkB,CAAC8B,IAAI,EAAEK,KAAK,CAACf,YAAY,CAAC;UACtDjB,UAAU,CAACC,UAAU,CAAC2B,MAAM,EAAEI,KAAK,CAACd,aAAa,CAAC;;UAElD;UACAuC,UAAU,CAAC,MAAM;YACfpD,GAAG,CAAC,CAAC,CAACqD,cAAc,CAAC,CAAC;UACxB,CAAC,EAAE/D,uBAAuB,CAACgE,aAAa,CAAC;QAC3C,CAAC,MAAM;UACL;UACAzD,WAAW,CAAC+C,WAAW,CAACjB,KAAK,CAAC1B,IAAI,EAAEyC,MAAM,EAAEC,MAAM,CAAC;UACnDhB,KAAK,CAACnB,aAAa,GAAG,IAAI;;UAE1B;UACA,MAAMqC,YAAY,GAAG,IAAI5B,GAAG,CAAC,CAACyB,MAAM,CAACI,GAAG,EAAEH,MAAM,CAACG,GAAG,CAAC,CAAC;UACtDD,YAAY,CAACE,OAAO,CAACC,QAAQ,IAAI;YAC/B,IAAIrB,KAAK,CAAC1B,IAAI,CAAC+C,QAAQ,CAAC,EAAE;cACxBrB,KAAK,CAAC1B,IAAI,CAAC+C,QAAQ,CAAC,GAAG,CAAC,GAAGrB,KAAK,CAAC1B,IAAI,CAAC+C,QAAQ,CAAC,CAAC;YAClD;UACF,CAAC,CAAC;UAEFtD,SAAS,CAACF,kBAAkB,CAAC8B,IAAI,EAAEK,KAAK,CAACf,YAAY,CAAC;UACtDjB,UAAU,CAACC,UAAU,CAAC2C,KAAK,EAAEZ,KAAK,CAACd,aAAa,CAAC;QACnD;MACF,CAAC,MAAM;QACL;QACAc,KAAK,CAACnB,aAAa,GAAG8B,KAAK;QAC3B5C,SAAS,CAACF,kBAAkB,CAAC8B,IAAI,EAAEK,KAAK,CAACf,YAAY,CAAC;QACtDjB,UAAU,CAACC,UAAU,CAAC2C,KAAK,EAAEZ,KAAK,CAACd,aAAa,CAAC;MACnD;IACF,CAAC,CAAC;EACJ,CAAC;EAEDwC,cAAc,EAAE,MAAAA,CAAA,KAAY;IAC1B,IAAIF,UAAU,GAAG,IAAI;IACrB,IAAIrC,UAAU,GAAG,CAAC;IAElB,OAAOqC,UAAU,EAAE;MACjB;MACA,MAAM/B,KAAK,GAAGpB,GAAG,CAAC,CAAC;;MAEnB;MACA,MAAMiD,WAAW,GAAGpD,WAAW,CAACqD,WAAW,CAAC9B,KAAK,CAACnB,IAAI,CAAC;MAEvD,IAAI,CAACgD,WAAW,CAACE,UAAU,EAAE;QAC3BA,UAAU,GAAG,KAAK;QAClB;MACF;MAEArC,UAAU,EAAE;;MAEZ;MACA,MAAMyC,SAAS,GAAGN,WAAW,CAAC9C,KAAK;MACnC,MAAMqD,eAAe,GAAG1C,UAAU,GAAG,CAAC,GAAG2C,IAAI,CAACC,GAAG,CAACpE,uBAAuB,CAACqE,gBAAgB,EAAE7C,UAAU,GAAG,CAAC,CAAC,GAAG,CAAC;MAC/G,MAAM8C,UAAU,GAAGH,IAAI,CAACI,KAAK,CAACN,SAAS,GAAGC,eAAe,CAAC;;MAE1D;MACAzD,GAAG,CAAE4B,KAAsB,IAAK;QAC9BA,KAAK,CAACxB,KAAK,IAAIyD,UAAU;QACzBjC,KAAK,CAACb,UAAU,GAAGA,UAAU;MAC/B,CAAC,CAAC;;MAEF;MACA,IAAIA,UAAU,GAAG,CAAC,EAAE;QAClBpB,SAAS,CAACF,kBAAkB,CAACsE,KAAK,EAAE1C,KAAK,CAACR,YAAY,CAAC;QACvDjB,UAAU,CAACC,UAAU,CAACiC,KAAK,EAAET,KAAK,CAACP,aAAa,CAAC;MACnD,CAAC,MAAM;QACLnB,SAAS,CAACF,kBAAkB,CAACuE,KAAK,EAAE3C,KAAK,CAACR,YAAY,CAAC;QACvDjB,UAAU,CAACC,UAAU,CAAC2B,MAAM,EAAEH,KAAK,CAACP,aAAa,CAAC;MACpD;;MAEA;MACAd,GAAG,CAAE4B,KAAsB,IAAK;QAC9BA,KAAK,CAACX,eAAe,GAAG,IAAIC,GAAG,CAACgC,WAAW,CAACe,OAAO,CAACC,GAAG,CAACC,CAAC,IAAIA,CAAC,CAAC1B,EAAE,CAAC,CAAC;QACnE;MACF,CAAC,CAAC;;MAEF;MACA,MAAM,IAAI2B,OAAO,CAACC,OAAO,IAAIhB,UAAU,CAACgB,OAAO,EAAE9E,uBAAuB,CAAC+E,kBAAkB,CAAC,CAAC;;MAE7F;MACAtE,GAAG,CAAE4B,KAAsB,IAAK;QAC9B;QACAA,KAAK,CAACX,eAAe,GAAG,IAAIC,GAAG,CAAC,CAAC;;QAEjC;QACA,MAAM4B,YAAY,GAAG,IAAI5B,GAAG,CAAS,CAAC;QACtCgC,WAAW,CAACe,OAAO,CAACjB,OAAO,CAACT,KAAK,IAAIO,YAAY,CAACyB,GAAG,CAAChC,KAAK,CAACQ,GAAG,CAAC,CAAC;;QAEjE;QACA,MAAMyB,cAAc,GAAG5C,KAAK,CAAC1B,IAAI,CAACgE,GAAG,CAACnB,GAAG,IACvCA,GAAG,CAACmB,GAAG,CAACC,CAAC,IAAIA,CAAC,EAAE1B,EAAE,CAAC,CAACgC,IAAI,CAAC,GAAG,CAC9B,CAAC;;QAED;QACA3E,WAAW,CAAC4E,aAAa,CAAC9C,KAAK,CAAC1B,IAAI,EAAEgD,WAAW,CAACe,OAAO,CAAC;;QAE1D;QACAnE,WAAW,CAAC6E,YAAY,CAAC/C,KAAK,CAAC1B,IAAI,CAAC;;QAEpC;QACAJ,WAAW,CAAC8E,eAAe,CAAChD,KAAK,CAAC1B,IAAI,EAAEmB,KAAK,CAACT,UAAU,CAAC;;QAEzD;QACA,MAAMiE,UAAU,GAAG,IAAI3D,GAAG,CAAS,CAAC;QACpCU,KAAK,CAAC1B,IAAI,CAAC8C,OAAO,CAAED,GAAG,IAAK;UAC1BA,GAAG,CAACC,OAAO,CAACT,KAAK,IAAI;YACnB,IAAIA,KAAK,IAAIA,KAAK,CAACuC,SAAS,EAAE;cAC5BD,UAAU,CAACN,GAAG,CAAChC,KAAK,CAACE,EAAE,CAAC;YAC1B;UACF,CAAC,CAAC;QACJ,CAAC,CAAC;QACFb,KAAK,CAACT,eAAe,GAAG0D,UAAU;;QAElC;QACAjD,KAAK,CAAC1B,IAAI,CAAC8C,OAAO,CAAC,CAACD,GAAG,EAAEE,QAAQ,KAAK;UACpC,MAAM8B,SAAS,GAAGhC,GAAG,CAACmB,GAAG,CAACC,CAAC,IAAIA,CAAC,EAAE1B,EAAE,CAAC,CAACgC,IAAI,CAAC,GAAG,CAAC;UAC/C,IAAID,cAAc,CAACvB,QAAQ,CAAC,KAAK8B,SAAS,EAAE;YAC1CnD,KAAK,CAAC1B,IAAI,CAAC+C,QAAQ,CAAC,GAAG,CAAC,GAAGF,GAAG,CAAC;UACjC;QACF,CAAC,CAAC;MACJ,CAAC,CAAC;;MAEF;MACA,MAAM,IAAIqB,OAAO,CAACC,OAAO,IAAIhB,UAAU,CAACgB,OAAO,EAAE9E,uBAAuB,CAACyF,aAAa,CAAC,CAAC;IAC1F;;IAEA;IACAhF,GAAG,CAAE4B,KAAsB,IAAK;MAC9BA,KAAK,CAAClB,YAAY,GAAG,KAAK;MAC1BkB,KAAK,CAACb,UAAU,GAAG,CAAC;MACpBa,KAAK,CAACX,eAAe,GAAG,IAAIC,GAAG,CAAC,CAAC;MACjCU,KAAK,CAACT,eAAe,GAAG,IAAID,GAAG,CAAC,CAAC;IACnC,CAAC,CAAC;EACJ,CAAC;EAED+D,cAAc,EAAEA,CAACpE,YAAqB,EAAEC,aAAsB,KAAK;IACjEd,GAAG,CAAEqB,KAAsB,IAAK;MAC9BA,KAAK,CAACR,YAAY,GAAGA,YAAY;MACjCQ,KAAK,CAACP,aAAa,GAAGA,aAAa;IACrC,CAAC,CAAC;EACJ;AACF,CAAC,CAAC,CACJ,CACF,CAAC;;AAED;AACA,OAAO,MAAMoE,OAAO,GAAGA,CAAA,KAAMnF,kBAAkB,CAACsB,KAAK,IAAIA,KAAK,CAACnB,IAAI,CAAC;AACpE,OAAO,MAAMiF,QAAQ,GAAGA,CAAA,KAAMpF,kBAAkB,CAACsB,KAAK,IAAIA,KAAK,CAACjB,KAAK,CAAC;AACtE,OAAO,MAAMgF,gBAAgB,GAAGA,CAAA,KAAMrF,kBAAkB,CAACsB,KAAK,IAAIA,KAAK,CAAChB,aAAa,CAAC;AACtF,OAAO,MAAMgF,eAAe,GAAGA,CAAA,KAAMtF,kBAAkB,CAACsB,KAAK,IAAIA,KAAK,CAACf,YAAY,CAAC;AACpF,OAAO,MAAMgF,YAAY,GAAGA,CAAA,KAAMvF,kBAAkB,CAACsB,KAAK,IAAIA,KAAK,CAACd,SAAS,CAAC;AAC9E,OAAO,MAAMgF,aAAa,GAAGA,CAAA,KAAMxF,kBAAkB,CAACsB,KAAK,IAAIA,KAAK,CAACb,UAAU,CAAC;AAChF,OAAO,MAAMgF,gBAAgB,GAAGA,CAAA,KAAMzF,kBAAkB,CAACsB,KAAK,IAAIA,KAAK,CAACZ,aAAa,CAAC;AACtF,OAAO,MAAMgF,aAAa,GAAGA,CAAA,KAAM1F,kBAAkB,CAACsB,KAAK,IAAIA,KAAK,CAACN,UAAU,CAAC;AAChF,OAAO,MAAM2E,kBAAkB,GAAGA,CAAA,KAAM3F,kBAAkB,CAACsB,KAAK,IAAIA,KAAK,CAACJ,eAAe,CAAC;AAC1F,OAAO,MAAM0E,kBAAkB,GAAGA,CAAA,KAAM5F,kBAAkB,CAACsB,KAAK,IAAIA,KAAK,CAACF,eAAe,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import React, { useEffect, useRef } from 'react';
|
|
4
|
+
import { StyleSheet } from 'react-native';
|
|
5
|
+
import { Gesture, GestureDetector } from 'react-native-gesture-handler';
|
|
6
|
+
import Animated, { useSharedValue, useAnimatedStyle, withSpring, withTiming, runOnJS } from 'react-native-reanimated';
|
|
7
|
+
import { Canvas, RoundedRect, Group, Shadow } from '@shopify/react-native-skia';
|
|
8
|
+
import { CandyCrushService } from "../CandyCrushService.js";
|
|
9
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
10
|
+
const gameService = new CandyCrushService();
|
|
11
|
+
const CandyItemComponent = ({
|
|
12
|
+
candy,
|
|
13
|
+
size,
|
|
14
|
+
isSelected,
|
|
15
|
+
isMatched,
|
|
16
|
+
isFalling,
|
|
17
|
+
onSwipe
|
|
18
|
+
}) => {
|
|
19
|
+
// Reanimated shared values for smooth animations
|
|
20
|
+
const translateX = useSharedValue(0);
|
|
21
|
+
const translateY = useSharedValue(0);
|
|
22
|
+
const scale = useSharedValue(1);
|
|
23
|
+
const opacity = useSharedValue(1);
|
|
24
|
+
const zIndex = useSharedValue(0);
|
|
25
|
+
|
|
26
|
+
// Track previous states to avoid unnecessary animations
|
|
27
|
+
const prevMatchedRef = useRef(isMatched);
|
|
28
|
+
const prevFallingRef = useRef(isFalling);
|
|
29
|
+
const prevRowRef = useRef(candy.row);
|
|
30
|
+
|
|
31
|
+
// Match animation - only trigger when state changes from false to true
|
|
32
|
+
useEffect(() => {
|
|
33
|
+
if (isMatched && !prevMatchedRef.current) {
|
|
34
|
+
scale.value = withTiming(0, {
|
|
35
|
+
duration: 300
|
|
36
|
+
});
|
|
37
|
+
opacity.value = withTiming(0, {
|
|
38
|
+
duration: 300
|
|
39
|
+
});
|
|
40
|
+
} else if (!isMatched && prevMatchedRef.current) {
|
|
41
|
+
// Reset when candy is replaced
|
|
42
|
+
scale.value = 1;
|
|
43
|
+
opacity.value = 1;
|
|
44
|
+
}
|
|
45
|
+
prevMatchedRef.current = isMatched;
|
|
46
|
+
}, [isMatched]);
|
|
47
|
+
|
|
48
|
+
// Fall animation - only trigger when falling state changes or row changes
|
|
49
|
+
useEffect(() => {
|
|
50
|
+
const rowChanged = candy.row !== prevRowRef.current;
|
|
51
|
+
if (isFalling && !prevFallingRef.current) {
|
|
52
|
+
scale.value = withSpring(1, {
|
|
53
|
+
damping: 8,
|
|
54
|
+
stiffness: 40
|
|
55
|
+
});
|
|
56
|
+
} else if (rowChanged && isFalling) {
|
|
57
|
+
// Animate position change during fall
|
|
58
|
+
scale.value = withSpring(1, {
|
|
59
|
+
damping: 8,
|
|
60
|
+
stiffness: 40
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
prevFallingRef.current = isFalling;
|
|
64
|
+
prevRowRef.current = candy.row;
|
|
65
|
+
}, [isFalling, candy.row]);
|
|
66
|
+
|
|
67
|
+
// Swipe gesture
|
|
68
|
+
const panGesture = Gesture.Pan().onStart(() => {
|
|
69
|
+
// Elevate candy when starting to swipe
|
|
70
|
+
zIndex.value = 1000;
|
|
71
|
+
scale.value = withSpring(1.1);
|
|
72
|
+
}).onUpdate(event => {
|
|
73
|
+
translateX.value = event.translationX;
|
|
74
|
+
translateY.value = event.translationY;
|
|
75
|
+
}).onEnd(event => {
|
|
76
|
+
const threshold = size * 0.3; // 30% of candy size
|
|
77
|
+
const absX = Math.abs(event.translationX);
|
|
78
|
+
const absY = Math.abs(event.translationY);
|
|
79
|
+
|
|
80
|
+
// Determine swipe direction
|
|
81
|
+
if (absX > threshold || absY > threshold) {
|
|
82
|
+
if (absX > absY) {
|
|
83
|
+
// Horizontal swipe
|
|
84
|
+
if (event.translationX > 0) {
|
|
85
|
+
runOnJS(onSwipe)('right');
|
|
86
|
+
} else {
|
|
87
|
+
runOnJS(onSwipe)('left');
|
|
88
|
+
}
|
|
89
|
+
} else {
|
|
90
|
+
// Vertical swipe
|
|
91
|
+
if (event.translationY > 0) {
|
|
92
|
+
runOnJS(onSwipe)('down');
|
|
93
|
+
} else {
|
|
94
|
+
runOnJS(onSwipe)('up');
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
// Reset position and elevation with spring animation
|
|
100
|
+
translateX.value = withSpring(0);
|
|
101
|
+
translateY.value = withSpring(0);
|
|
102
|
+
scale.value = withSpring(1);
|
|
103
|
+
zIndex.value = withTiming(0, {
|
|
104
|
+
duration: 300
|
|
105
|
+
});
|
|
106
|
+
});
|
|
107
|
+
const candyColor = gameService.getCandyColor(candy.type);
|
|
108
|
+
const borderRadius = 8; // Square with slight rounding
|
|
109
|
+
|
|
110
|
+
// Animated style for swipe and other animations
|
|
111
|
+
const animatedStyle = useAnimatedStyle(() => ({
|
|
112
|
+
transform: [{
|
|
113
|
+
translateX: translateX.value
|
|
114
|
+
}, {
|
|
115
|
+
translateY: translateY.value
|
|
116
|
+
}, {
|
|
117
|
+
scale: scale.value
|
|
118
|
+
}],
|
|
119
|
+
opacity: opacity.value,
|
|
120
|
+
zIndex: zIndex.value
|
|
121
|
+
}));
|
|
122
|
+
return /*#__PURE__*/_jsx(GestureDetector, {
|
|
123
|
+
gesture: panGesture,
|
|
124
|
+
children: /*#__PURE__*/_jsx(Animated.View, {
|
|
125
|
+
style: [styles.container, {
|
|
126
|
+
width: size,
|
|
127
|
+
height: size
|
|
128
|
+
}, animatedStyle],
|
|
129
|
+
children: /*#__PURE__*/_jsx(Canvas, {
|
|
130
|
+
style: {
|
|
131
|
+
width: size,
|
|
132
|
+
height: size
|
|
133
|
+
},
|
|
134
|
+
children: /*#__PURE__*/_jsxs(Group, {
|
|
135
|
+
children: [/*#__PURE__*/_jsx(RoundedRect, {
|
|
136
|
+
x: 2,
|
|
137
|
+
y: 2,
|
|
138
|
+
width: size - 4,
|
|
139
|
+
height: size - 4,
|
|
140
|
+
r: borderRadius,
|
|
141
|
+
color: candyColor
|
|
142
|
+
}), /*#__PURE__*/_jsx(RoundedRect, {
|
|
143
|
+
x: size * 0.15,
|
|
144
|
+
y: size * 0.15,
|
|
145
|
+
width: size * 0.35,
|
|
146
|
+
height: size * 0.35,
|
|
147
|
+
r: 6,
|
|
148
|
+
color: "rgba(255, 255, 255, 0.5)"
|
|
149
|
+
}), /*#__PURE__*/_jsx(RoundedRect, {
|
|
150
|
+
x: 6,
|
|
151
|
+
y: 6,
|
|
152
|
+
width: size - 12,
|
|
153
|
+
height: size - 12,
|
|
154
|
+
r: borderRadius - 2,
|
|
155
|
+
color: "rgba(255, 255, 255, 0.2)"
|
|
156
|
+
}), isSelected && /*#__PURE__*/_jsx(RoundedRect, {
|
|
157
|
+
x: 1,
|
|
158
|
+
y: 1,
|
|
159
|
+
width: size - 2,
|
|
160
|
+
height: size - 2,
|
|
161
|
+
r: borderRadius + 1,
|
|
162
|
+
color: "transparent",
|
|
163
|
+
style: "stroke",
|
|
164
|
+
strokeWidth: 3,
|
|
165
|
+
children: /*#__PURE__*/_jsx(Shadow, {
|
|
166
|
+
dx: 0,
|
|
167
|
+
dy: 0,
|
|
168
|
+
blur: 6,
|
|
169
|
+
color: "rgba(255, 255, 255, 1)"
|
|
170
|
+
})
|
|
171
|
+
})]
|
|
172
|
+
})
|
|
173
|
+
})
|
|
174
|
+
})
|
|
175
|
+
});
|
|
176
|
+
};
|
|
177
|
+
|
|
178
|
+
// Memoize with custom comparison for better performance
|
|
179
|
+
// Animation states (isMatched, isFalling) come from props, not candy object
|
|
180
|
+
// This prevents grid mutations from causing unnecessary re-renders
|
|
181
|
+
export const CandyItem = /*#__PURE__*/React.memo(CandyItemComponent, (prevProps, nextProps) => {
|
|
182
|
+
return prevProps.candy.id === nextProps.candy.id && prevProps.candy.type === nextProps.candy.type && prevProps.candy.row === nextProps.candy.row && prevProps.candy.col === nextProps.candy.col && prevProps.isMatched === nextProps.isMatched && prevProps.isFalling === nextProps.isFalling && prevProps.isSelected === nextProps.isSelected && prevProps.size === nextProps.size;
|
|
183
|
+
});
|
|
184
|
+
CandyItem.displayName = 'CandyItem';
|
|
185
|
+
const styles = StyleSheet.create({
|
|
186
|
+
container: {
|
|
187
|
+
justifyContent: 'center',
|
|
188
|
+
alignItems: 'center'
|
|
189
|
+
}
|
|
190
|
+
});
|
|
191
|
+
//# sourceMappingURL=CandyItem.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","useEffect","useRef","StyleSheet","Gesture","GestureDetector","Animated","useSharedValue","useAnimatedStyle","withSpring","withTiming","runOnJS","Canvas","RoundedRect","Group","Shadow","CandyCrushService","jsx","_jsx","jsxs","_jsxs","gameService","CandyItemComponent","candy","size","isSelected","isMatched","isFalling","onSwipe","translateX","translateY","scale","opacity","zIndex","prevMatchedRef","prevFallingRef","prevRowRef","row","current","value","duration","rowChanged","damping","stiffness","panGesture","Pan","onStart","onUpdate","event","translationX","translationY","onEnd","threshold","absX","Math","abs","absY","candyColor","getCandyColor","type","borderRadius","animatedStyle","transform","gesture","children","View","style","styles","container","width","height","x","y","r","color","strokeWidth","dx","dy","blur","CandyItem","memo","prevProps","nextProps","id","col","displayName","create","justifyContent","alignItems"],"sourceRoot":"../../../../../src","sources":["games/candy-crush/components/CandyItem.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import React from 'react';
|
|
4
|
+
import { Canvas, Rect, LinearGradient, vec, Circle, Path, Skia } from '@shopify/react-native-skia';
|
|
5
|
+
import { Dimensions } from 'react-native';
|
|
6
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
7
|
+
const {
|
|
8
|
+
width,
|
|
9
|
+
height
|
|
10
|
+
} = Dimensions.get('window');
|
|
11
|
+
|
|
12
|
+
// Memoize star paths outside component for better performance
|
|
13
|
+
const createStarPaths = () => {
|
|
14
|
+
return [...Array(15)].map((_, i) => {
|
|
15
|
+
const x = width * (i * 7 + 3) % width;
|
|
16
|
+
const y = height * (i * 11 + 5) % height;
|
|
17
|
+
const size = 3 + i % 3;
|
|
18
|
+
const starPath = Skia.Path.Make();
|
|
19
|
+
starPath.moveTo(x, y - size);
|
|
20
|
+
starPath.lineTo(x + size * 0.3, y + size * 0.3);
|
|
21
|
+
starPath.lineTo(x + size, y + size * 0.3);
|
|
22
|
+
starPath.lineTo(x + size * 0.5, y + size * 0.8);
|
|
23
|
+
starPath.lineTo(x + size * 0.7, y + size * 1.5);
|
|
24
|
+
starPath.lineTo(x, y + size);
|
|
25
|
+
starPath.lineTo(x - size * 0.7, y + size * 1.5);
|
|
26
|
+
starPath.lineTo(x - size * 0.5, y + size * 0.8);
|
|
27
|
+
starPath.lineTo(x - size, y + size * 0.3);
|
|
28
|
+
starPath.lineTo(x - size * 0.3, y + size * 0.3);
|
|
29
|
+
starPath.close();
|
|
30
|
+
return {
|
|
31
|
+
path: starPath,
|
|
32
|
+
opacity: 0.1 + i % 3 * 0.05
|
|
33
|
+
};
|
|
34
|
+
});
|
|
35
|
+
};
|
|
36
|
+
const starPaths = createStarPaths();
|
|
37
|
+
export const GameBackground = /*#__PURE__*/React.memo(({
|
|
38
|
+
children
|
|
39
|
+
}) => {
|
|
40
|
+
return /*#__PURE__*/_jsxs(_Fragment, {
|
|
41
|
+
children: [/*#__PURE__*/_jsxs(Canvas, {
|
|
42
|
+
style: {
|
|
43
|
+
position: 'absolute',
|
|
44
|
+
width,
|
|
45
|
+
height
|
|
46
|
+
},
|
|
47
|
+
children: [/*#__PURE__*/_jsx(Rect, {
|
|
48
|
+
x: 0,
|
|
49
|
+
y: 0,
|
|
50
|
+
width: width,
|
|
51
|
+
height: height,
|
|
52
|
+
children: /*#__PURE__*/_jsx(LinearGradient, {
|
|
53
|
+
start: vec(0, 0),
|
|
54
|
+
end: vec(0, height),
|
|
55
|
+
colors: ['#667eea', '#764ba2', '#f093fb']
|
|
56
|
+
})
|
|
57
|
+
}), /*#__PURE__*/_jsx(Circle, {
|
|
58
|
+
cx: width * 0.1,
|
|
59
|
+
cy: height * 0.15,
|
|
60
|
+
r: 60,
|
|
61
|
+
color: "rgba(255, 255, 255, 0.05)"
|
|
62
|
+
}), /*#__PURE__*/_jsx(Circle, {
|
|
63
|
+
cx: width * 0.85,
|
|
64
|
+
cy: height * 0.25,
|
|
65
|
+
r: 80,
|
|
66
|
+
color: "rgba(255, 255, 255, 0.05)"
|
|
67
|
+
}), /*#__PURE__*/_jsx(Circle, {
|
|
68
|
+
cx: width * 0.2,
|
|
69
|
+
cy: height * 0.7,
|
|
70
|
+
r: 50,
|
|
71
|
+
color: "rgba(255, 255, 255, 0.05)"
|
|
72
|
+
}), /*#__PURE__*/_jsx(Circle, {
|
|
73
|
+
cx: width * 0.9,
|
|
74
|
+
cy: height * 0.8,
|
|
75
|
+
r: 70,
|
|
76
|
+
color: "rgba(255, 255, 255, 0.05)"
|
|
77
|
+
}), starPaths.map((star, i) => /*#__PURE__*/_jsx(Path, {
|
|
78
|
+
path: star.path,
|
|
79
|
+
color: `rgba(255, 255, 255, ${star.opacity})`
|
|
80
|
+
}, i))]
|
|
81
|
+
}), children]
|
|
82
|
+
});
|
|
83
|
+
});
|
|
84
|
+
GameBackground.displayName = 'GameBackground';
|
|
85
|
+
//# sourceMappingURL=GameBackground.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","Canvas","Rect","LinearGradient","vec","Circle","Path","Skia","Dimensions","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","width","height","get","createStarPaths","Array","map","_","i","x","y","size","starPath","Make","moveTo","lineTo","close","path","opacity","starPaths","GameBackground","memo","children","style","position","start","end","colors","cx","cy","r","color","star","displayName"],"sourceRoot":"../../../../../src","sources":["games/candy-crush/components/GameBackground.tsx"],"mappings":"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","ignoreList":[]}
|