@nayan-ui/games 1.20.0 → 1.21.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/module/games/arrows/Arrows.js +1 -1
- package/lib/module/games/arrows/ArrowsScene.js +1 -1
- package/lib/module/games/balloon-blaster/BalloonBlaster.js +1 -1
- package/lib/module/games/balloon-blaster/BalloonBlasterScene.js +1 -1
- package/lib/module/games/bike-racing/BikeMeshes.js +1 -1
- package/lib/module/games/bike-racing/BikeRacing.js +1 -1
- package/lib/module/games/bike-racing/BikeRacingConstants.js +1 -1
- package/lib/module/games/bike-racing/BikeRacingScene.js +1 -1
- package/lib/module/games/block-blast/BlockBlast.js +1 -1
- package/lib/module/games/block-blast/BlockBlastScene.js +1 -1
- package/lib/module/games/block-breaker/BlockBreaker.js +1 -1
- package/lib/module/games/block-breaker/BlockBreakerScene.js +1 -1
- package/lib/module/games/bluk/Bluk.js +1 -1
- package/lib/module/games/bluk/BlukScene.js +1 -1
- package/lib/module/games/bubble-shooter/BubbleShooter.js +1 -1
- package/lib/module/games/bubble-shooter/BubbleShooterScene.js +1 -1
- package/lib/module/games/candy-crush/CandyCrush.js +1 -1
- package/lib/module/games/candy-crush/CandyCrushScene.js +1 -1
- package/lib/module/games/car-racing/CarMeshes.js +1 -1
- package/lib/module/games/car-racing/CarRacing.js +1 -1
- package/lib/module/games/car-racing/CarRacingScene.js +1 -1
- package/lib/module/games/chameleon-run/ChameleonRun.js +1 -1
- package/lib/module/games/chameleon-run/ChameleonRunBackdrop.js +1 -1
- package/lib/module/games/chameleon-run/ChameleonRunMeshes.js +1 -1
- package/lib/module/games/checkers/Checkers.js +1 -1
- package/lib/module/games/checkers/CheckersScene.js +1 -1
- package/lib/module/games/color-switch/ColorSwitch.js +1 -1
- package/lib/module/games/color-switch/ColorSwitchScene.js +1 -1
- package/lib/module/games/colors-sort/ColorsSort.js +1 -1
- package/lib/module/games/colors-sort/ColorsSortScene.js +1 -1
- package/lib/module/games/connect-em-all/ConnectEmAll.js +1 -1
- package/lib/module/games/connect-em-all/ConnectEmAllScene.js +1 -1
- package/lib/module/games/crossy-road/CrossyRoad.js +1 -1
- package/lib/module/games/crossy-road/CrossyRoadMeshes.js +1 -1
- package/lib/module/games/crossy-road/CrossyRoadPerson.js +1 -1
- package/lib/module/games/dino-jump/DinoJump.js +1 -1
- package/lib/module/games/dino-jump/DinoJumpScene.js +1 -1
- package/lib/module/games/dots-and-boxes/DotsAndBoxes.js +1 -1
- package/lib/module/games/dots-and-boxes/DotsAndBoxesScene.js +1 -1
- package/lib/module/games/falling-sticks/FallingSticks.js +1 -1
- package/lib/module/games/falling-sticks/FallingSticksScene.js +1 -1
- package/lib/module/games/find-different-number/FindDifferentNumber.js +1 -1
- package/lib/module/games/find-different-number/FindDifferentNumberScene.js +1 -1
- package/lib/module/games/flappy-bird/FlappyBird.js +1 -1
- package/lib/module/games/flappy-bird/FlappyBirdScene.js +1 -1
- package/lib/module/games/fruit-merger/FruitMerger.js +1 -1
- package/lib/module/games/fruit-merger/FruitMergerScene.js +1 -1
- package/lib/module/games/fruit-ninja/FruitNinja.js +1 -1
- package/lib/module/games/fruit-ninja/FruitNinjaScene.js +1 -1
- package/lib/module/games/fruit-ninja/FruitNinjaWorld.js +1 -1
- package/lib/module/games/game-2048/Game2048.js +1 -1
- package/lib/module/games/game-2048/Game2048Scene.js +1 -1
- package/lib/module/games/knife-hit/KnifeHit.js +1 -1
- package/lib/module/games/knife-hit/KnifeHitScene.js +1 -1
- package/lib/module/games/ludo-king/LudoKing.js +1 -1
- package/lib/module/games/ludo-king/LudoKingScene.js +1 -1
- package/lib/module/games/maze-runner/MazeRunner.js +1 -1
- package/lib/module/games/maze-runner/MazeRunnerScene.js +1 -1
- package/lib/module/games/memory-match/MemoryMatch.js +1 -1
- package/lib/module/games/memory-match/MemoryMatchScene.js +1 -1
- package/lib/module/games/mine-sweeper/MineSweeper.js +1 -1
- package/lib/module/games/mine-sweeper/MineSweeperScene.js +1 -1
- package/lib/module/games/mob-control/MobControl.js +1 -1
- package/lib/module/games/mob-control/MobControlGame.js +1 -1
- package/lib/module/games/mob-control/MobControlMeshes.js +1 -1
- package/lib/module/games/mob-control/MobControlRenderer.js +1 -1
- package/lib/module/games/mob-control/MobControlRules.js +1 -1
- package/lib/module/games/mob-control/MobControlScene.js +1 -1
- package/lib/module/games/nuts-and-bolts/NutsAndBolts.js +1 -1
- package/lib/module/games/nuts-and-bolts/NutsAndBoltsScene.js +1 -1
- package/lib/module/games/pac-man/PacMan.js +1 -1
- package/lib/module/games/pac-man/PacManGame.js +1 -1
- package/lib/module/games/pac-man/PacManScene.js +1 -1
- package/lib/module/games/paper-io/PaperIo.js +1 -1
- package/lib/module/games/paper-io/PaperIoMeshes.js +1 -1
- package/lib/module/games/paper-io/PaperIoScene.js +1 -1
- package/lib/module/games/penguin-run/PenguinMeshes.js +1 -1
- package/lib/module/games/penguin-run/PenguinRun.js +1 -1
- package/lib/module/games/penguin-run/PenguinRunScene.js +1 -1
- package/lib/module/games/perfect-circle/PerfectCircle.js +1 -1
- package/lib/module/games/perfect-circle/PerfectCircleScene.js +1 -1
- package/lib/module/games/pipe-connect/PipeConnect.js +1 -1
- package/lib/module/games/pipe-connect/PipeConnectScene.js +1 -1
- package/lib/module/games/play-with-tua/PlayWithTua.js +1 -1
- package/lib/module/games/popit-fidget/PopitFidget.js +1 -1
- package/lib/module/games/popit-fidget/PopitFidgetScene.js +1 -1
- package/lib/module/games/reversi/Reversi.js +1 -1
- package/lib/module/games/reversi/ReversiScene.js +1 -1
- package/lib/module/games/search-grid/SearchGrid.js +1 -1
- package/lib/module/games/search-grid/SearchGridScene.js +1 -1
- package/lib/module/games/shared/BackdropCard.js +1 -1
- package/lib/module/games/shared/EngineBackdrop.js +1 -1
- package/lib/module/games/shared/EngineBlasts.js +1 -1
- package/lib/module/games/shared/EngineBlocks.js +1 -1
- package/lib/module/games/shared/EngineDice.js +1 -1
- package/lib/module/games/shared/EngineFruits.js +1 -1
- package/lib/module/games/shared/EngineGameLoader.js +1 -1
- package/lib/module/games/shared/EngineGameScreen.js +1 -1
- package/lib/module/games/shared/EngineGlyphs.js +1 -1
- package/lib/module/games/shared/EngineHud.js +1 -1
- package/lib/module/games/shared/EngineMeadow.js +1 -1
- package/lib/module/games/shared/EngineTouchSurface.js +1 -1
- package/lib/module/games/shared/GameActivity.js +1 -1
- package/lib/module/games/shared/GameLoading.js +1 -1
- package/lib/module/games/shared/GameLoadingTransition.js +1 -1
- package/lib/module/games/sliding-numbers/SlidingNumbers.js +1 -1
- package/lib/module/games/sliding-numbers/SlidingNumbersScene.js +1 -1
- package/lib/module/games/snake-3d/Snake3D.js +1 -1
- package/lib/module/games/snake-3d/Snake3DScene.js +1 -1
- package/lib/module/games/snakes-and-ladders/SnakesAndLadders.js +1 -1
- package/lib/module/games/snakes-and-ladders/SnakesAndLaddersScene.js +1 -1
- package/lib/module/games/space-fighter/SpaceFighter.js +1 -1
- package/lib/module/games/space-fighter/SpaceFighterScene.js +1 -1
- package/lib/module/games/spider-solitaire/SpiderSolitaire.js +1 -1
- package/lib/module/games/spider-solitaire/SpiderSolitaireScene.js +1 -1
- package/lib/module/games/stack-tower/StackTower.js +1 -1
- package/lib/module/games/stack-tower/StackTowerScene.js +1 -1
- package/lib/module/games/sudoku/Sudoku.js +1 -1
- package/lib/module/games/sudoku/SudokuScene.js +1 -1
- package/lib/module/games/tangram/Tangram.js +1 -1
- package/lib/module/games/tangram/TangramScene.js +1 -1
- package/lib/module/games/tank-1990/Tank1990.js +1 -1
- package/lib/module/games/tank-1990/Tank1990Scene.js +1 -1
- package/lib/module/games/tic-tac-toe/TicTacToe.js +1 -1
- package/lib/module/games/tic-tac-toe/TicTacToeScene.js +1 -1
- package/lib/module/games/tile-home/TileHome.js +1 -1
- package/lib/module/games/tile-home/TileHomeScene.js +1 -1
- package/lib/module/games/treasure-hunt/TreasureHunt.js +1 -1
- package/lib/module/games/treasure-hunt/TreasureHuntConstants.js +1 -1
- package/lib/module/games/treasure-hunt/TreasureHuntModel.js +1 -1
- package/lib/module/games/treasure-hunt/TreasureHuntScene.js +1 -1
- package/lib/module/games/whack-a-mole/WhackAMole.js +1 -1
- package/lib/module/games/whack-a-mole/WhackAMoleScene.js +1 -1
- package/lib/module/helpers/GameSettingsModal.js +1 -1
- package/lib/module/helpers/GameTheme.js +1 -1
- package/package.json +1 -2
- package/src/assets/fonts/Inter-SemiBold.ttf +0 -0
- package/src/assets/models/explorer/explorer.glb +0 -0
- package/src/assets/models/explorer/params.json +0 -51
- package/src/assets/models/explorer/source.json +0 -222
- package/src/assets/models/play-with-tua/play-with-tua.glb +0 -0
- package/src/assets/models/play-with-tua/sources.json +0 -141
- package/src/assets/sfx/balloon_pop.wav +0 -0
- package/src/assets/sfx/blocked.wav +0 -0
- package/src/assets/sfx/boing.wav +0 -0
- package/src/assets/sfx/bonus.wav +0 -0
- package/src/assets/sfx/boom.wav +0 -0
- package/src/assets/sfx/bump.wav +0 -0
- package/src/assets/sfx/cannon.wav +0 -0
- package/src/assets/sfx/capture.wav +0 -0
- package/src/assets/sfx/card_flip.wav +0 -0
- package/src/assets/sfx/card_place.wav +0 -0
- package/src/assets/sfx/catch.wav +0 -0
- package/src/assets/sfx/chime.wav +0 -0
- package/src/assets/sfx/chomp.wav +0 -0
- package/src/assets/sfx/chomp_alt.wav +0 -0
- package/src/assets/sfx/clack.wav +0 -0
- package/src/assets/sfx/clang.wav +0 -0
- package/src/assets/sfx/clash.wav +0 -0
- package/src/assets/sfx/click.wav +0 -0
- package/src/assets/sfx/coin.wav +0 -0
- package/src/assets/sfx/combo.wav +0 -0
- package/src/assets/sfx/crash.wav +0 -0
- package/src/assets/sfx/crunch.wav +0 -0
- package/src/assets/sfx/dance.wav +0 -0
- package/src/assets/sfx/deselect.wav +0 -0
- package/src/assets/sfx/dice_roll.wav +0 -0
- package/src/assets/sfx/die.wav +0 -0
- package/src/assets/sfx/draw.wav +0 -0
- package/src/assets/sfx/drop.wav +0 -0
- package/src/assets/sfx/eat.wav +0 -0
- package/src/assets/sfx/engine.wav +0 -0
- package/src/assets/sfx/error.wav +0 -0
- package/src/assets/sfx/flag.wav +0 -0
- package/src/assets/sfx/flap.wav +0 -0
- package/src/assets/sfx/flip_disc.wav +0 -0
- package/src/assets/sfx/footstep_run.wav +0 -0
- package/src/assets/sfx/footstep_walk.wav +0 -0
- package/src/assets/sfx/game_over.wav +0 -0
- package/src/assets/sfx/gate.wav +0 -0
- package/src/assets/sfx/hit.wav +0 -0
- package/src/assets/sfx/hop.wav +0 -0
- package/src/assets/sfx/hurt.wav +0 -0
- package/src/assets/sfx/invalid.wav +0 -0
- package/src/assets/sfx/jump.wav +0 -0
- package/src/assets/sfx/ladder.wav +0 -0
- package/src/assets/sfx/land.wav +0 -0
- package/src/assets/sfx/laugh.wav +0 -0
- package/src/assets/sfx/lose.wav +0 -0
- package/src/assets/sfx/merge.wav +0 -0
- package/src/assets/sfx/miss.wav +0 -0
- package/src/assets/sfx/nitro.wav +0 -0
- package/src/assets/sfx/pew.wav +0 -0
- package/src/assets/sfx/place.wav +0 -0
- package/src/assets/sfx/pling.wav +0 -0
- package/src/assets/sfx/point.wav +0 -0
- package/src/assets/sfx/pop.wav +0 -0
- package/src/assets/sfx/pop_soft.wav +0 -0
- package/src/assets/sfx/power_up.wav +0 -0
- package/src/assets/sfx/reveal.wav +0 -0
- package/src/assets/sfx/robot.wav +0 -0
- package/src/assets/sfx/rotate.wav +0 -0
- package/src/assets/sfx/run_steps.wav +0 -0
- package/src/assets/sfx/select.wav +0 -0
- package/src/assets/sfx/shuffle.wav +0 -0
- package/src/assets/sfx/six.wav +0 -0
- package/src/assets/sfx/slice.wav +0 -0
- package/src/assets/sfx/slide.wav +0 -0
- package/src/assets/sfx/snake.wav +0 -0
- package/src/assets/sfx/snap.wav +0 -0
- package/src/assets/sfx/splash.wav +0 -0
- package/src/assets/sfx/star.wav +0 -0
- package/src/assets/sfx/start.wav +0 -0
- package/src/assets/sfx/swoosh.wav +0 -0
- package/src/assets/sfx/tap.wav +0 -0
- package/src/assets/sfx/thud.wav +0 -0
- package/src/assets/sfx/thunk.wav +0 -0
- package/src/assets/sfx/tick.wav +0 -0
- package/src/assets/sfx/time_up.wav +0 -0
- package/src/assets/sfx/tock.wav +0 -0
- package/src/assets/sfx/walk_steps.wav +0 -0
- package/src/assets/sfx/warning.wav +0 -0
- package/src/assets/sfx/whack.wav +0 -0
- package/src/assets/sfx/whoosh.wav +0 -0
- package/src/assets/sfx/win.wav +0 -0
- package/src/assets/sfx/zap.wav +0 -0
- package/src/assets/textures/ad_bolt.png +0 -0
- package/src/assets/textures/ad_bubbles.png +0 -0
- package/src/assets/textures/ad_chevrons.png +0 -0
- package/src/assets/textures/asphalt.png +0 -0
- package/src/assets/textures/bark.jpg +0 -0
- package/src/assets/textures/explorer-atlas.png +0 -0
- package/src/assets/textures/facade.png +0 -0
- package/src/assets/textures/grass.png +0 -0
- package/src/assets/textures/leaves.png +0 -0
- package/src/assets/textures/limestone.jpg +0 -0
- package/src/assets/textures/meadow.jpg +0 -0
- package/src/assets/textures/nature-sources.json +0 -87
- package/src/assets/textures/pine.png +0 -0
- package/src/assets/textures/river.jpg +0 -0
- package/src/assets/textures/soft_glow.png +0 -0
- package/src/games/arrows/Arrows.tsx +0 -69
- package/src/games/arrows/ArrowsConstants.ts +0 -107
- package/src/games/arrows/ArrowsGame.ts +0 -735
- package/src/games/arrows/ArrowsScene.ts +0 -395
- package/src/games/balloon-blaster/BalloonBlaster.tsx +0 -75
- package/src/games/balloon-blaster/BalloonBlasterConstants.ts +0 -79
- package/src/games/balloon-blaster/BalloonBlasterGame.ts +0 -287
- package/src/games/balloon-blaster/BalloonBlasterPhysics.ts +0 -95
- package/src/games/balloon-blaster/BalloonBlasterScene.ts +0 -225
- package/src/games/bike-racing/BikeMeshes.ts +0 -273
- package/src/games/bike-racing/BikeRacing.tsx +0 -211
- package/src/games/bike-racing/BikeRacingConstants.ts +0 -103
- package/src/games/bike-racing/BikeRacingGame.ts +0 -557
- package/src/games/bike-racing/BikeRacingScene.ts +0 -119
- package/src/games/block-blast/BlockBlast.tsx +0 -73
- package/src/games/block-blast/BlockBlastConstants.ts +0 -179
- package/src/games/block-blast/BlockBlastGame.ts +0 -471
- package/src/games/block-blast/BlockBlastScene.ts +0 -156
- package/src/games/block-breaker/BlockBreaker.tsx +0 -79
- package/src/games/block-breaker/BlockBreakerConstants.ts +0 -139
- package/src/games/block-breaker/BlockBreakerGame.ts +0 -459
- package/src/games/block-breaker/BlockBreakerScene.ts +0 -257
- package/src/games/bluk/Bluk.tsx +0 -82
- package/src/games/bluk/BlukConstants.ts +0 -121
- package/src/games/bluk/BlukGame.ts +0 -323
- package/src/games/bluk/BlukRules.ts +0 -154
- package/src/games/bluk/BlukScene.ts +0 -514
- package/src/games/bubble-shooter/BubbleShooter.tsx +0 -76
- package/src/games/bubble-shooter/BubbleShooterConstants.ts +0 -103
- package/src/games/bubble-shooter/BubbleShooterGame.ts +0 -459
- package/src/games/bubble-shooter/BubbleShooterScene.ts +0 -158
- package/src/games/candy-crush/CandyCrush.tsx +0 -77
- package/src/games/candy-crush/CandyCrushConstants.ts +0 -94
- package/src/games/candy-crush/CandyCrushGame.ts +0 -477
- package/src/games/candy-crush/CandyCrushScene.ts +0 -209
- package/src/games/car-racing/CarMeshes.ts +0 -440
- package/src/games/car-racing/CarRacing.tsx +0 -211
- package/src/games/car-racing/CarRacingConstants.ts +0 -167
- package/src/games/car-racing/CarRacingFacade.ts +0 -40
- package/src/games/car-racing/CarRacingGame.ts +0 -539
- package/src/games/car-racing/CarRacingScene.ts +0 -1026
- package/src/games/car-racing/CarRacingScenery.ts +0 -265
- package/src/games/chameleon-run/ChameleonRun.tsx +0 -96
- package/src/games/chameleon-run/ChameleonRunBackdrop.ts +0 -186
- package/src/games/chameleon-run/ChameleonRunConstants.ts +0 -47
- package/src/games/chameleon-run/ChameleonRunGame.ts +0 -309
- package/src/games/chameleon-run/ChameleonRunMeshes.ts +0 -305
- package/src/games/chameleon-run/ChameleonRunRules.ts +0 -252
- package/src/games/chameleon-run/ChameleonRunScene.ts +0 -310
- package/src/games/checkers/Checkers.tsx +0 -83
- package/src/games/checkers/CheckersAI.ts +0 -255
- package/src/games/checkers/CheckersConstants.ts +0 -68
- package/src/games/checkers/CheckersGame.ts +0 -322
- package/src/games/checkers/CheckersRules.ts +0 -167
- package/src/games/checkers/CheckersScene.ts +0 -308
- package/src/games/color-switch/ColorSwitch.tsx +0 -75
- package/src/games/color-switch/ColorSwitchConstants.ts +0 -61
- package/src/games/color-switch/ColorSwitchGame.ts +0 -329
- package/src/games/color-switch/ColorSwitchScene.ts +0 -220
- package/src/games/colors-sort/ColorsSort.tsx +0 -82
- package/src/games/colors-sort/ColorsSortConstants.ts +0 -119
- package/src/games/colors-sort/ColorsSortGame.ts +0 -246
- package/src/games/colors-sort/ColorsSortScene.ts +0 -315
- package/src/games/connect-em-all/ConnectEmAll.tsx +0 -70
- package/src/games/connect-em-all/ConnectEmAllConstants.ts +0 -77
- package/src/games/connect-em-all/ConnectEmAllGame.ts +0 -401
- package/src/games/connect-em-all/ConnectEmAllScene.ts +0 -235
- package/src/games/crossy-road/CrossyRoad.tsx +0 -74
- package/src/games/crossy-road/CrossyRoadCamera.ts +0 -59
- package/src/games/crossy-road/CrossyRoadConstants.ts +0 -132
- package/src/games/crossy-road/CrossyRoadGame.ts +0 -293
- package/src/games/crossy-road/CrossyRoadMeshes.ts +0 -195
- package/src/games/crossy-road/CrossyRoadPerson.ts +0 -198
- package/src/games/crossy-road/CrossyRoadRules.ts +0 -99
- package/src/games/crossy-road/CrossyRoadScene.ts +0 -355
- package/src/games/dino-jump/DinoJump.tsx +0 -77
- package/src/games/dino-jump/DinoJumpConstants.ts +0 -80
- package/src/games/dino-jump/DinoJumpGame.ts +0 -344
- package/src/games/dino-jump/DinoJumpScene.ts +0 -686
- package/src/games/dots-and-boxes/DotsAndBoxes.tsx +0 -83
- package/src/games/dots-and-boxes/DotsAndBoxesConstants.ts +0 -77
- package/src/games/dots-and-boxes/DotsAndBoxesGame.ts +0 -271
- package/src/games/dots-and-boxes/DotsAndBoxesScene.ts +0 -249
- package/src/games/falling-sticks/FallingSticks.tsx +0 -72
- package/src/games/falling-sticks/FallingSticksConstants.ts +0 -62
- package/src/games/falling-sticks/FallingSticksGame.ts +0 -220
- package/src/games/falling-sticks/FallingSticksRules.ts +0 -145
- package/src/games/falling-sticks/FallingSticksScene.ts +0 -245
- package/src/games/find-different-number/FindDifferentNumber.tsx +0 -74
- package/src/games/find-different-number/FindDifferentNumberConstants.ts +0 -74
- package/src/games/find-different-number/FindDifferentNumberGame.ts +0 -174
- package/src/games/find-different-number/FindDifferentNumberRules.ts +0 -43
- package/src/games/find-different-number/FindDifferentNumberScene.ts +0 -193
- package/src/games/flappy-bird/FlappyBird.tsx +0 -73
- package/src/games/flappy-bird/FlappyBirdConstants.ts +0 -95
- package/src/games/flappy-bird/FlappyBirdGame.ts +0 -375
- package/src/games/flappy-bird/FlappyBirdScene.ts +0 -630
- package/src/games/fruit-merger/FruitMerger.tsx +0 -73
- package/src/games/fruit-merger/FruitMergerConstants.ts +0 -102
- package/src/games/fruit-merger/FruitMergerGame.ts +0 -285
- package/src/games/fruit-merger/FruitMergerRules.ts +0 -286
- package/src/games/fruit-merger/FruitMergerScene.ts +0 -498
- package/src/games/fruit-ninja/FruitNinja.tsx +0 -129
- package/src/games/fruit-ninja/FruitNinjaConstants.ts +0 -107
- package/src/games/fruit-ninja/FruitNinjaGame.ts +0 -391
- package/src/games/fruit-ninja/FruitNinjaScene.ts +0 -319
- package/src/games/fruit-ninja/FruitNinjaWorld.ts +0 -17
- package/src/games/game-2048/Game2048.tsx +0 -84
- package/src/games/game-2048/Game2048Constants.ts +0 -68
- package/src/games/game-2048/Game2048Game.ts +0 -181
- package/src/games/game-2048/Game2048Rules.ts +0 -101
- package/src/games/game-2048/Game2048Scene.ts +0 -206
- package/src/games/knife-hit/KnifeHit.tsx +0 -78
- package/src/games/knife-hit/KnifeHitConstants.ts +0 -89
- package/src/games/knife-hit/KnifeHitGame.ts +0 -264
- package/src/games/knife-hit/KnifeHitScene.ts +0 -360
- package/src/games/ludo-king/LudoKing.tsx +0 -86
- package/src/games/ludo-king/LudoKingConstants.ts +0 -212
- package/src/games/ludo-king/LudoKingGame.ts +0 -326
- package/src/games/ludo-king/LudoKingRules.ts +0 -143
- package/src/games/ludo-king/LudoKingScene.ts +0 -397
- package/src/games/maze-runner/MazeRunner.tsx +0 -88
- package/src/games/maze-runner/MazeRunnerConstants.ts +0 -65
- package/src/games/maze-runner/MazeRunnerGame.ts +0 -176
- package/src/games/maze-runner/MazeRunnerRules.ts +0 -161
- package/src/games/maze-runner/MazeRunnerScene.ts +0 -245
- package/src/games/memory-match/MemoryMatch.tsx +0 -77
- package/src/games/memory-match/MemoryMatchConstants.ts +0 -105
- package/src/games/memory-match/MemoryMatchGame.ts +0 -222
- package/src/games/memory-match/MemoryMatchRules.ts +0 -38
- package/src/games/memory-match/MemoryMatchScene.ts +0 -268
- package/src/games/mine-sweeper/MineSweeper.tsx +0 -77
- package/src/games/mine-sweeper/MineSweeperConstants.ts +0 -94
- package/src/games/mine-sweeper/MineSweeperGame.ts +0 -234
- package/src/games/mine-sweeper/MineSweeperRules.ts +0 -67
- package/src/games/mine-sweeper/MineSweeperScene.ts +0 -262
- package/src/games/mob-control/MobControl.tsx +0 -73
- package/src/games/mob-control/MobControlConstants.ts +0 -106
- package/src/games/mob-control/MobControlGame.ts +0 -176
- package/src/games/mob-control/MobControlMeshes.ts +0 -85
- package/src/games/mob-control/MobControlRenderer.ts +0 -108
- package/src/games/mob-control/MobControlRules.ts +0 -522
- package/src/games/mob-control/MobControlScene.ts +0 -399
- package/src/games/number-search/NumberSearch.tsx +0 -18
- package/src/games/number-search/NumberSearchNumbers.ts +0 -623
- package/src/games/nuts-and-bolts/NutsAndBolts.tsx +0 -85
- package/src/games/nuts-and-bolts/NutsAndBoltsConstants.ts +0 -75
- package/src/games/nuts-and-bolts/NutsAndBoltsGame.ts +0 -298
- package/src/games/nuts-and-bolts/NutsAndBoltsRules.ts +0 -474
- package/src/games/nuts-and-bolts/NutsAndBoltsScene.ts +0 -498
- package/src/games/pac-man/PacMan.tsx +0 -86
- package/src/games/pac-man/PacManConstants.ts +0 -169
- package/src/games/pac-man/PacManGame.ts +0 -406
- package/src/games/pac-man/PacManRules.ts +0 -255
- package/src/games/pac-man/PacManScene.ts +0 -387
- package/src/games/paper-io/PaperIo.tsx +0 -91
- package/src/games/paper-io/PaperIoConstants.ts +0 -86
- package/src/games/paper-io/PaperIoGame.ts +0 -193
- package/src/games/paper-io/PaperIoMeshes.ts +0 -233
- package/src/games/paper-io/PaperIoRules.ts +0 -315
- package/src/games/paper-io/PaperIoScene.ts +0 -310
- package/src/games/penguin-run/PenguinMeshes.ts +0 -269
- package/src/games/penguin-run/PenguinModel.ts +0 -712
- package/src/games/penguin-run/PenguinRun.tsx +0 -77
- package/src/games/penguin-run/PenguinRunConstants.ts +0 -69
- package/src/games/penguin-run/PenguinRunGame.ts +0 -406
- package/src/games/penguin-run/PenguinRunScene.ts +0 -949
- package/src/games/perfect-circle/PerfectCircle.tsx +0 -74
- package/src/games/perfect-circle/PerfectCircleConstants.ts +0 -52
- package/src/games/perfect-circle/PerfectCircleGame.ts +0 -153
- package/src/games/perfect-circle/PerfectCircleRules.ts +0 -111
- package/src/games/perfect-circle/PerfectCircleScene.ts +0 -176
- package/src/games/pipe-connect/PipeConnect.tsx +0 -69
- package/src/games/pipe-connect/PipeConnectConstants.ts +0 -101
- package/src/games/pipe-connect/PipeConnectGame.ts +0 -179
- package/src/games/pipe-connect/PipeConnectRules.ts +0 -326
- package/src/games/pipe-connect/PipeConnectScene.ts +0 -271
- package/src/games/play-with-tua/PlayWithTua.tsx +0 -123
- package/src/games/play-with-tua/PlayWithTuaConstants.ts +0 -70
- package/src/games/play-with-tua/PlayWithTuaGame.ts +0 -167
- package/src/games/play-with-tua/PlayWithTuaModel.ts +0 -42
- package/src/games/play-with-tua/PlayWithTuaScene.ts +0 -36
- package/src/games/popit-fidget/PopitFidget.tsx +0 -72
- package/src/games/popit-fidget/PopitFidgetConstants.ts +0 -71
- package/src/games/popit-fidget/PopitFidgetGame.ts +0 -148
- package/src/games/popit-fidget/PopitFidgetScene.ts +0 -242
- package/src/games/reversi/Reversi.tsx +0 -94
- package/src/games/reversi/ReversiConstants.ts +0 -67
- package/src/games/reversi/ReversiGame.ts +0 -266
- package/src/games/reversi/ReversiRules.ts +0 -176
- package/src/games/reversi/ReversiScene.ts +0 -240
- package/src/games/search-grid/SearchGrid.tsx +0 -92
- package/src/games/search-grid/SearchGridConstants.ts +0 -178
- package/src/games/search-grid/SearchGridGame.ts +0 -209
- package/src/games/search-grid/SearchGridScene.ts +0 -301
- package/src/games/shared/BackdropCard.tsx +0 -54
- package/src/games/shared/EngineBackdrop.ts +0 -300
- package/src/games/shared/EngineBlasts.ts +0 -136
- package/src/games/shared/EngineBlocks.ts +0 -91
- package/src/games/shared/EngineControlText.ts +0 -17
- package/src/games/shared/EngineDice.ts +0 -250
- package/src/games/shared/EngineFootprint.ts +0 -35
- package/src/games/shared/EngineFruits.ts +0 -1435
- package/src/games/shared/EngineGameLoader.tsx +0 -88
- package/src/games/shared/EngineGameScreen.tsx +0 -325
- package/src/games/shared/EngineGameWidth.ts +0 -3
- package/src/games/shared/EngineGameWidth.web.ts +0 -3
- package/src/games/shared/EngineGlyphs.ts +0 -178
- package/src/games/shared/EngineHud.ts +0 -815
- package/src/games/shared/EngineLoading.ts +0 -477
- package/src/games/shared/EngineMeadow.ts +0 -725
- package/src/games/shared/EngineMeshCache.ts +0 -15
- package/src/games/shared/EngineMeshes.ts +0 -10
- package/src/games/shared/EngineRacingChase.ts +0 -21
- package/src/games/shared/EngineRacingHandling.ts +0 -48
- package/src/games/shared/EngineReadyContext.ts +0 -4
- package/src/games/shared/EngineTilt.ts +0 -44
- package/src/games/shared/EngineTouchSurface.tsx +0 -103
- package/src/games/shared/EngineUtils.ts +0 -52
- package/src/games/shared/GameActivity.ts +0 -13
- package/src/games/shared/GameLoading.tsx +0 -202
- package/src/games/shared/GameLoadingTransition.tsx +0 -61
- package/src/games/shared/ProceduralCacheVersion.ts +0 -2
- package/src/games/shared/useEngineGame.ts +0 -240
- package/src/games/shared/useGameResource.ts +0 -21
- package/src/games/shared/useLiveState.ts +0 -58
- package/src/games/sliding-numbers/SlidingNumbers.tsx +0 -71
- package/src/games/sliding-numbers/SlidingNumbersConstants.ts +0 -65
- package/src/games/sliding-numbers/SlidingNumbersGame.ts +0 -192
- package/src/games/sliding-numbers/SlidingNumbersRules.ts +0 -79
- package/src/games/sliding-numbers/SlidingNumbersScene.ts +0 -193
- package/src/games/snake-3d/Snake3D.tsx +0 -76
- package/src/games/snake-3d/Snake3DConstants.ts +0 -61
- package/src/games/snake-3d/Snake3DGame.ts +0 -192
- package/src/games/snake-3d/Snake3DMotion.ts +0 -22
- package/src/games/snake-3d/Snake3DRules.ts +0 -116
- package/src/games/snake-3d/Snake3DScene.ts +0 -322
- package/src/games/snakes-and-ladders/SnakesAndLadders.tsx +0 -87
- package/src/games/snakes-and-ladders/SnakesAndLaddersConstants.ts +0 -136
- package/src/games/snakes-and-ladders/SnakesAndLaddersGame.ts +0 -310
- package/src/games/snakes-and-ladders/SnakesAndLaddersScene.ts +0 -515
- package/src/games/space-fighter/SpaceFighter.tsx +0 -74
- package/src/games/space-fighter/SpaceFighterConstants.ts +0 -86
- package/src/games/space-fighter/SpaceFighterGame.ts +0 -292
- package/src/games/space-fighter/SpaceFighterScene.ts +0 -550
- package/src/games/spider-solitaire/SpiderSolitaire.tsx +0 -80
- package/src/games/spider-solitaire/SpiderSolitaireConstants.ts +0 -107
- package/src/games/spider-solitaire/SpiderSolitaireGame.ts +0 -387
- package/src/games/spider-solitaire/SpiderSolitaireRules.ts +0 -123
- package/src/games/spider-solitaire/SpiderSolitaireScene.ts +0 -352
- package/src/games/stack-tower/StackTower.tsx +0 -76
- package/src/games/stack-tower/StackTowerConstants.ts +0 -74
- package/src/games/stack-tower/StackTowerGame.ts +0 -236
- package/src/games/stack-tower/StackTowerScene.ts +0 -186
- package/src/games/sudoku/Sudoku.tsx +0 -73
- package/src/games/sudoku/SudokuConstants.ts +0 -127
- package/src/games/sudoku/SudokuGame.ts +0 -250
- package/src/games/sudoku/SudokuRules.ts +0 -125
- package/src/games/sudoku/SudokuScene.ts +0 -304
- package/src/games/tangram/Tangram.tsx +0 -79
- package/src/games/tangram/TangramConstants.ts +0 -64
- package/src/games/tangram/TangramGame.ts +0 -356
- package/src/games/tangram/TangramRules.ts +0 -409
- package/src/games/tangram/TangramScene.ts +0 -203
- package/src/games/tank-1990/Tank1990.tsx +0 -78
- package/src/games/tank-1990/Tank1990Constants.ts +0 -81
- package/src/games/tank-1990/Tank1990Game.ts +0 -331
- package/src/games/tank-1990/Tank1990Rules.ts +0 -390
- package/src/games/tank-1990/Tank1990Scene.ts +0 -434
- package/src/games/tic-tac-toe/TicTacToe.tsx +0 -98
- package/src/games/tic-tac-toe/TicTacToeConstants.ts +0 -69
- package/src/games/tic-tac-toe/TicTacToeGame.ts +0 -200
- package/src/games/tic-tac-toe/TicTacToeRules.ts +0 -103
- package/src/games/tic-tac-toe/TicTacToeScene.ts +0 -245
- package/src/games/tile-home/TileHome.tsx +0 -92
- package/src/games/tile-home/TileHomeConstants.ts +0 -139
- package/src/games/tile-home/TileHomeGame.ts +0 -435
- package/src/games/tile-home/TileHomeScene.ts +0 -154
- package/src/games/treasure-hunt/TreasureHunt.tsx +0 -206
- package/src/games/treasure-hunt/TreasureHuntConstants.ts +0 -266
- package/src/games/treasure-hunt/TreasureHuntControls.ts +0 -280
- package/src/games/treasure-hunt/TreasureHuntGame.ts +0 -402
- package/src/games/treasure-hunt/TreasureHuntMeshes.ts +0 -422
- package/src/games/treasure-hunt/TreasureHuntModel.ts +0 -506
- package/src/games/treasure-hunt/TreasureHuntRules.ts +0 -1210
- package/src/games/treasure-hunt/TreasureHuntScene.ts +0 -586
- package/src/games/whack-a-mole/WhackAMole.tsx +0 -79
- package/src/games/whack-a-mole/WhackAMoleConstants.ts +0 -94
- package/src/games/whack-a-mole/WhackAMoleGame.ts +0 -233
- package/src/games/whack-a-mole/WhackAMoleScene.ts +0 -349
- package/src/games/word-search/WordSearch.tsx +0 -18
- package/src/games/word-search/WordSearchWords.ts +0 -1642
- package/src/helpers/GamePatternData.ts +0 -120
- package/src/helpers/GameSettingsModal.tsx +0 -384
- package/src/helpers/GameTheme.tsx +0 -37
- package/src/helpers/IconPaths.ts +0 -6
- package/src/helpers/index.ts +0 -2
- package/src/index.tsx +0 -60
- package/src/services/GameAssetLoader.ts +0 -111
- package/src/services/GameAssets.ts +0 -149
- package/src/services/GameLoaders.ts +0 -93
- package/src/services/GamesConstants.ts +0 -193
- package/src/services/GamesMetadata.ts +0 -711
- package/src/services/GamesService.ts +0 -116
- package/src/services/HapticsService.ts +0 -48
- package/src/services/ScoringService.ts +0 -19
- package/src/services/SfxSources.ts +0 -81
- package/src/services/SoundsService.ts +0 -582
- package/src/services/ThemeService.ts +0 -281
- package/src/services/UtilsService.ts +0 -134
- package/src/services/index.ts +0 -6
|
@@ -1,158 +0,0 @@
|
|
|
1
|
-
// Everything Bubble Shooter draws. Orthographic camera, one world unit per point, looking down -z: x
|
|
2
|
-
// right and y up from the view's centre. Positions come in board points (from the board's top-left). Depth (toward the camera): the game background,
|
|
3
|
-
// the board panel and its border, the aim dots, the bubbles. Bubbles are glossy spheres (the same mesh
|
|
4
|
-
// as Connect Em All's dots) and the aim dots flat discs; both are shared meshes, as mesh ids are
|
|
5
|
-
// app-wide and limited.
|
|
6
|
-
import { type Color, type Entity, extrude, type Model, Path, shapeGeometry, type Vec3, type World } from '@nayan-ui/engine';
|
|
7
|
-
import type { GameTheme } from '../../services/ThemeService';
|
|
8
|
-
import { setBackdropTheme, spawnBackdrop } from '../shared/EngineBackdrop';
|
|
9
|
-
import { popAndBurst } from '../shared/EngineBlasts';
|
|
10
|
-
import { cacheGameAsset, createGameMesh as createShape } from '../shared/EngineMeshes';
|
|
11
|
-
import { toColor } from '../shared/EngineUtils';
|
|
12
|
-
import {
|
|
13
|
-
AIM_ALPHA_FAR,
|
|
14
|
-
AIM_ALPHA_NEAR,
|
|
15
|
-
AIM_DOT_COUNT,
|
|
16
|
-
BUBBLE_COLORS,
|
|
17
|
-
BUBBLE_SHINE,
|
|
18
|
-
BURST_TIME,
|
|
19
|
-
CLASSIC_AIM,
|
|
20
|
-
CLASSIC_BOARD,
|
|
21
|
-
CLASSIC_BORDER,
|
|
22
|
-
CLASSIC_RADIUS,
|
|
23
|
-
type Layout,
|
|
24
|
-
THEMED_RADIUS,
|
|
25
|
-
TOP_BOUNDARY
|
|
26
|
-
} from './BubbleShooterConstants';
|
|
27
|
-
|
|
28
|
-
const Z_BACKDROP = -20;
|
|
29
|
-
const Z_BOARD = 0;
|
|
30
|
-
const Z_RIM = 0.2;
|
|
31
|
-
const Z_AIM = 0.5;
|
|
32
|
-
const HIDDEN = 0;
|
|
33
|
-
|
|
34
|
-
/** A board point at depth `z`, in world space. */
|
|
35
|
-
export const toWorld = (l: Layout, x: number, y: number, z = 0): Vec3 => [l.boardLeft + x - l.width / 2, l.height / 2 - (l.boardTop + y), z];
|
|
36
|
-
const bubbleZ = (l: Layout) => l.radius + 1;
|
|
37
|
-
export const bubblePosition = (l: Layout, x: number, y: number) => toWorld(l, x, y, bubbleZ(l));
|
|
38
|
-
/** A grid bubble's size (the sphere mesh is one across). */
|
|
39
|
-
export const bubbleSize = (l: Layout) => l.radius * 2;
|
|
40
|
-
|
|
41
|
-
// ── Meshes (registered once per size: mesh ids are app-wide and limited) ──
|
|
42
|
-
|
|
43
|
-
const meshes = new Map<string, Model>();
|
|
44
|
-
const mesh = (key: string, build: () => Model) => {
|
|
45
|
-
let m = meshes.get(key);
|
|
46
|
-
if (!m) {
|
|
47
|
-
m = cacheGameAsset('bubble-shooter/BubbleShooterScene:' + key, build);
|
|
48
|
-
meshes.set(key, m);
|
|
49
|
-
}
|
|
50
|
-
return m;
|
|
51
|
-
};
|
|
52
|
-
/** A glossy unit sphere: Connect Em All's dot mesh (same geometry and shine, so the same mesh id). */
|
|
53
|
-
const bubbleMesh = () => mesh('dot', () => createShape(shapeGeometry('sphere'), { shine: BUBBLE_SHINE }));
|
|
54
|
-
const discMesh = () => mesh('disc', () => createShape(extrude(new Path().addCircle(0, 0, 0.5), { depth: 0 })));
|
|
55
|
-
/** A flat rounded rectangle from its top-left; with `rim`, only its outline. */
|
|
56
|
-
const panelMesh = (w: number, h: number, r: number, rim = 0) =>
|
|
57
|
-
mesh(`panel:${w}:${h}:${r}:${rim}`, () => {
|
|
58
|
-
const path = new Path().addRoundedRect(0, 0, w, h, r);
|
|
59
|
-
if (rim > 0) path.addRoundedRect(rim, rim, w - rim * 2, h - rim * 2, r - rim);
|
|
60
|
-
return createShape(extrude(path, { depth: 0, fillRule: 'evenodd' }), { center: false });
|
|
61
|
-
});
|
|
62
|
-
|
|
63
|
-
// ── Colors ────────────────────────────────────────────────────────────
|
|
64
|
-
|
|
65
|
-
const BUBBLES = BUBBLE_COLORS.map((c) => toColor(c));
|
|
66
|
-
export const bubbleColor = (color: number) => BUBBLES[color % BUBBLES.length]!;
|
|
67
|
-
/** White aim dots on classic; light / dark draw them in the theme's text color. */
|
|
68
|
-
export const aimColor = (theme: GameTheme): Color => toColor(theme.mode === 'classic' ? CLASSIC_AIM : theme.TEXT);
|
|
69
|
-
|
|
70
|
-
// ── Board ─────────────────────────────────────────────────────────────
|
|
71
|
-
|
|
72
|
-
export type Scenery = { backdrop: Entity; parts: Entity[] };
|
|
73
|
-
|
|
74
|
-
function spawnBoard(world: World, l: Layout, theme: GameTheme): Entity[] {
|
|
75
|
-
const classic = theme.mode === 'classic';
|
|
76
|
-
const radius = classic ? CLASSIC_RADIUS : THEMED_RADIUS;
|
|
77
|
-
const at = (z: number) => toWorld(l, 0, 0, z);
|
|
78
|
-
return [
|
|
79
|
-
world.spawn({
|
|
80
|
-
mesh: panelMesh(l.boardWidth, l.boardHeight, radius),
|
|
81
|
-
position: at(Z_BOARD),
|
|
82
|
-
color: toColor(classic ? CLASSIC_BOARD : theme.BOARD.SURFACE),
|
|
83
|
-
pickable: false
|
|
84
|
-
}),
|
|
85
|
-
world.spawn({
|
|
86
|
-
mesh: panelMesh(l.boardWidth, l.boardHeight, radius, 1.5),
|
|
87
|
-
position: at(Z_RIM),
|
|
88
|
-
color: toColor(classic ? CLASSIC_BORDER : theme.BOARD.BORDER),
|
|
89
|
-
pickable: false
|
|
90
|
-
})
|
|
91
|
-
];
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
export function buildScenery(world: World, l: Layout, theme: GameTheme): Scenery {
|
|
95
|
-
return { backdrop: spawnBackdrop(world, l.width, l.height, Z_BACKDROP, theme), parts: spawnBoard(world, l, theme) };
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
export function removeScenery(world: World, s: Scenery) {
|
|
99
|
-
world.despawn(s.backdrop);
|
|
100
|
-
for (const e of s.parts) world.despawn(e);
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
export function setSceneryTheme(world: World, l: Layout, s: Scenery, theme: GameTheme) {
|
|
104
|
-
setBackdropTheme(world, s.backdrop, theme);
|
|
105
|
-
for (const e of s.parts) world.despawn(e);
|
|
106
|
-
s.parts = spawnBoard(world, l, theme);
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
// ── Bubbles ───────────────────────────────────────────────────────────
|
|
110
|
-
|
|
111
|
-
/** A bubble at (x, y), `scale` of its full size. */
|
|
112
|
-
export function spawnBubble(world: World, l: Layout, color: number, x: number, y: number, scale = 1): Entity {
|
|
113
|
-
return world.spawn({
|
|
114
|
-
mesh: bubbleMesh(),
|
|
115
|
-
position: bubblePosition(l, x, y),
|
|
116
|
-
scale: bubbleSize(l) * scale,
|
|
117
|
-
color: bubbleColor(color),
|
|
118
|
-
pickable: false
|
|
119
|
-
});
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
/** A popped bubble: it pops (swells, flashes, settles, shrinks away) and bursts in its color, then it's gone. */
|
|
123
|
-
export function popBubble(world: World, l: Layout, e: Entity, color: number, x: number, y: number) {
|
|
124
|
-
const at = bubblePosition(l, x, y);
|
|
125
|
-
popAndBurst(
|
|
126
|
-
world,
|
|
127
|
-
e,
|
|
128
|
-
{ scale: bubbleSize(l), color: bubbleColor(color), duration: BURST_TIME },
|
|
129
|
-
{ position: [at[0], at[1], at[2] + l.radius], size: bubbleSize(l), color: bubbleColor(color), glowZ: Z_RIM + 0.3 }
|
|
130
|
-
).then(() => world.despawn(e));
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
// ── Aim guide ─────────────────────────────────────────────────────────
|
|
134
|
-
|
|
135
|
-
/** The aim dots, hidden until placed. */
|
|
136
|
-
export function spawnAimDots(world: World): Entity[] {
|
|
137
|
-
return Array.from({ length: AIM_DOT_COUNT }, () => world.spawn({ mesh: discMesh(), scale: HIDDEN, pickable: false }));
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
/** Shows dots at `points` (x, y, radius triples, nearest first); the rest hide. */
|
|
141
|
-
export function placeAimDots(world: World, l: Layout, dots: Entity[], points: number[], color: Color) {
|
|
142
|
-
const span = Math.max(1, l.shooterY - TOP_BOUNDARY);
|
|
143
|
-
dots.forEach((dot, i) => {
|
|
144
|
-
if (i * 3 >= points.length) {
|
|
145
|
-
world.set(dot, { scale: HIDDEN });
|
|
146
|
-
return;
|
|
147
|
-
}
|
|
148
|
-
const x = points[i * 3]!;
|
|
149
|
-
const y = points[i * 3 + 1]!;
|
|
150
|
-
// Fades from near the shooter toward the ceiling, as the original guide's gradient did
|
|
151
|
-
const t = Math.max(0, Math.min(1, (l.shooterY - y) / span));
|
|
152
|
-
world.set(dot, {
|
|
153
|
-
position: toWorld(l, x, y, Z_AIM),
|
|
154
|
-
scale: points[i * 3 + 2]! * 2,
|
|
155
|
-
color: [color[0], color[1], color[2], AIM_ALPHA_NEAR + (AIM_ALPHA_FAR - AIM_ALPHA_NEAR) * t]
|
|
156
|
-
});
|
|
157
|
-
});
|
|
158
|
-
}
|
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
// Candy Crush's screen, on the Nayan engine: the board, candies and bursts are one 3D scene (an
|
|
2
|
-
// orthographic camera over a board of glossy candies), under Playtura's scoreboard, controls and
|
|
3
|
-
// modals. The rules are in CandyCrushGame.ts, what it draws in CandyCrushScene.ts.
|
|
4
|
-
//
|
|
5
|
-
// One world serves the whole visit: Start, Stop and Play Again deal a new board in place and a theme
|
|
6
|
-
// change repaints the board, so the GPU view is never rebuilt. Swaps, swells, falls and bursts animate
|
|
7
|
-
// in the engine's Rust core; JS only moves the dragged candy, resolves matches and steps the world.
|
|
8
|
-
import { HapticType } from '../../services/HapticsService';
|
|
9
|
-
import { GAME_SOUNDS } from '../../services/SoundsService';
|
|
10
|
-
import { GAME_IDS } from '../../services/UtilsService';
|
|
11
|
-
import { engineGame, EngineGameScreen } from '../shared/EngineGameScreen';
|
|
12
|
-
import { scoreColumn, timerColumn } from '../shared/EngineHud';
|
|
13
|
-
import { useEngineGame } from '../shared/useEngineGame';
|
|
14
|
-
import { useLiveState } from '../shared/useLiveState';
|
|
15
|
-
import { getLayout, LIGHT, TIME_LIMIT } from './CandyCrushConstants';
|
|
16
|
-
import { createGame, dispose, reset, setLayout, setTheme, start, tick, touchEnd, touchMove, touchStart } from './CandyCrushGame';
|
|
17
|
-
|
|
18
|
-
const SFX = GAME_SOUNDS.CANDY_CRUSH;
|
|
19
|
-
const scoreFormatter = (s: number) => `${s}`;
|
|
20
|
-
|
|
21
|
-
export const CandyCrush = engineGame(GAME_IDS.CANDY_CRUSH, (props) => {
|
|
22
|
-
const [score, setScore] = useLiveState(0);
|
|
23
|
-
const [timeLeft, setTimeLeft] = useLiveState(TIME_LIMIT);
|
|
24
|
-
|
|
25
|
-
const { theme, screen, gameOver } = useEngineGame(props, {
|
|
26
|
-
gameId: GAME_IDS.CANDY_CRUSH,
|
|
27
|
-
create: createGame,
|
|
28
|
-
start,
|
|
29
|
-
reset,
|
|
30
|
-
dispose,
|
|
31
|
-
tick,
|
|
32
|
-
setTheme,
|
|
33
|
-
resize: (g, width, height, offset) => {
|
|
34
|
-
const l = getLayout(width, height, offset);
|
|
35
|
-
setLayout(g, l);
|
|
36
|
-
return l.boardSize;
|
|
37
|
-
},
|
|
38
|
-
drag: (g, { phase, x, y, dx, dy, cancelled }) => {
|
|
39
|
-
if (phase === 'start') touchStart(g, x, y);
|
|
40
|
-
else if (phase === 'move') touchMove(g, dx, dy);
|
|
41
|
-
else touchEnd(g, dx, dy, cancelled);
|
|
42
|
-
},
|
|
43
|
-
// The run only ends when time is up, which counts as a win (any score)
|
|
44
|
-
outcome: () => 'win',
|
|
45
|
-
sounds: SFX,
|
|
46
|
-
onStart: (fx) => fx(SFX.START, HapticType.MEDIUM),
|
|
47
|
-
wire: (g, fx) => {
|
|
48
|
-
g.onScore = setScore;
|
|
49
|
-
g.onTime = setTimeLeft;
|
|
50
|
-
g.onSelect = () => fx(SFX.SELECT, HapticType.LIGHT);
|
|
51
|
-
g.onSwap = () => fx(SFX.SWAP, HapticType.MEDIUM);
|
|
52
|
-
g.onInvalid = () => fx(SFX.INVALID_SWAP, HapticType.WARNING);
|
|
53
|
-
g.onMatch = (combo) => fx(combo > 1 ? SFX.COMBO : SFX.MATCH, combo > 1 ? HapticType.HEAVY : HapticType.MEDIUM);
|
|
54
|
-
g.onBomb = () => fx(SFX.BOMB, HapticType.HEAVY);
|
|
55
|
-
g.onBlast = () => fx(SFX.BLAST, HapticType.HEAVY);
|
|
56
|
-
g.onWarning = (secondsLeft) => fx(SFX.WARNING, secondsLeft <= 10 ? HapticType.HEAVY : HapticType.MEDIUM);
|
|
57
|
-
g.onTimeUp = () => fx(SFX.TIME_UP, HapticType.HEAVY);
|
|
58
|
-
}
|
|
59
|
-
});
|
|
60
|
-
|
|
61
|
-
return (
|
|
62
|
-
<EngineGameScreen
|
|
63
|
-
{...screen}
|
|
64
|
-
light={LIGHT}
|
|
65
|
-
columns={[scoreColumn(score), timerColumn(timeLeft, theme, 0)]}
|
|
66
|
-
subtext="Match 3 or more"
|
|
67
|
-
gameOver={gameOver({
|
|
68
|
-
title: 'TIME UP!',
|
|
69
|
-
message: 'Great crushing!',
|
|
70
|
-
scoreLabel: 'Final Score',
|
|
71
|
-
score,
|
|
72
|
-
formatter: scoreFormatter,
|
|
73
|
-
buttonText: 'Crush Again!'
|
|
74
|
-
})}
|
|
75
|
-
/>
|
|
76
|
-
);
|
|
77
|
-
});
|
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
// Candy Crush's rules, timings, colors and layout. Rules, scoring and layout match the original version
|
|
2
|
-
// (games/candy-crush), so scores and feel carry over.
|
|
3
|
-
import { frontLight, gameWidthFor } from '../shared/EngineUtils';
|
|
4
|
-
|
|
5
|
-
// ── Rules ─────────────────────────────────────────────────────────────
|
|
6
|
-
|
|
7
|
-
export const GRID_SIZE = 7;
|
|
8
|
-
export const CANDY_TYPES = 4; // colors in play: the first four of CANDY_COLORS
|
|
9
|
-
export const MIN_MATCH = 3;
|
|
10
|
-
/** A run this long leaves a color bomb: swap it with any candy to clear every candy of that color (two bombs clear the board). */
|
|
11
|
-
export const BOMB_MATCH = 5;
|
|
12
|
-
/** A color bomb's type: it has no color, so it never matches. */
|
|
13
|
-
export const BOMB = -1;
|
|
14
|
-
export const BOMB_MULTIPLIER = 2; // a color bomb's candies score double
|
|
15
|
-
export const ZAP_TIME = 0.25; // a color bomb's zaps reach their candies before they crush
|
|
16
|
-
export const POINTS_PER_CANDY = 50;
|
|
17
|
-
export const COMBO_MULTIPLIER = 1.25; // each cascade after the first scores 1.25x the one before
|
|
18
|
-
export const TIME_LIMIT = 300; // seconds
|
|
19
|
-
export const WARNING_TIMES = [30, 10] as const; // "Hurry!" at these seconds left
|
|
20
|
-
|
|
21
|
-
// Vibrant saturated palette for glossy 3D candies
|
|
22
|
-
export const CANDY_COLORS = ['#EF2D36', '#2DC84E', '#3B9FFF', '#FFD020', '#B44CFF', '#FF8820'] as const;
|
|
23
|
-
|
|
24
|
-
// ── Feel (seconds) ────────────────────────────────────────────────────
|
|
25
|
-
|
|
26
|
-
export const SWAP_TIME = 0.2; // two candies glide past each other; matches are checked after it
|
|
27
|
-
export const MATCH_TIME = 0.42; // matched candies pop (swell, flash, settle, shrink away) and burst, as Block Blast's
|
|
28
|
-
export const CLEAR_RIPPLE = 0.025; // seconds per cell: clears ripple out from where the swap landed
|
|
29
|
-
export const FALL_TIME = 0.4; // survivors drop and new candies fall in, then the board is checked again
|
|
30
|
-
export const FALL_SPRING = { damping: 13, stiffness: 170, mass: 0.9 }; // a small bounce on landing
|
|
31
|
-
export const LIFT_SPRING = { damping: 14, stiffness: 300 };
|
|
32
|
-
export const RETURN_SPRING = { damping: 16, stiffness: 260 };
|
|
33
|
-
export const LIFT_SCALE = 1.1;
|
|
34
|
-
export const NUDGE_TIME = 0.09; // a rejected swap bumps the candies together...
|
|
35
|
-
export const NUDGE_SPRING = { damping: 9, stiffness: 320 }; // ...and they spring back
|
|
36
|
-
export const NUDGE_DISTANCE = 0.28; // cells
|
|
37
|
-
// Fresh board: candies rain in column by column, bottom rows first
|
|
38
|
-
export const INTRO_COL_STAGGER = 0.028;
|
|
39
|
-
export const INTRO_ROW_STAGGER = 0.022;
|
|
40
|
-
|
|
41
|
-
// ── Look ──────────────────────────────────────────────────────────────
|
|
42
|
-
|
|
43
|
-
// Lit from the top-left, like the original sprites' highlight; flat surfaces keep their exact color.
|
|
44
|
-
export const LIGHT = frontLight([-0.35, 0.6, 1], 0.5);
|
|
45
|
-
export const CANDY_SHINE = 0.55;
|
|
46
|
-
|
|
47
|
-
// Classic (no host theme) board colors
|
|
48
|
-
export const CLASSIC_BOARD = 'rgba(255, 255, 255, 0.13)';
|
|
49
|
-
export const CLASSIC_BORDER = 'rgba(255, 255, 255, 0.25)';
|
|
50
|
-
export const CLASSIC_CELL = 'rgba(255, 255, 255, 0.10)';
|
|
51
|
-
export const CLASSIC_RADIUS = 16;
|
|
52
|
-
export const THEMED_RADIUS = 8;
|
|
53
|
-
|
|
54
|
-
// ── Layout (points; same arithmetic as the original version) ──────────────
|
|
55
|
-
|
|
56
|
-
export const CELL_GAP = 3;
|
|
57
|
-
|
|
58
|
-
export type Layout = {
|
|
59
|
-
/** The GameView's size. */
|
|
60
|
-
width: number;
|
|
61
|
-
height: number;
|
|
62
|
-
boardLeft: number;
|
|
63
|
-
boardTop: number;
|
|
64
|
-
/** The board's side, padding included. */
|
|
65
|
-
boardSize: number;
|
|
66
|
-
cell: number;
|
|
67
|
-
/** From one cell's top-left to the next. */
|
|
68
|
-
step: number;
|
|
69
|
-
/** A drag this far starts a swap. */
|
|
70
|
-
swipeThreshold: number;
|
|
71
|
-
};
|
|
72
|
-
|
|
73
|
-
/** The board as wide as the game area (360 phones / 500 tablets), centred in the space below the header. */
|
|
74
|
-
export function getLayout(width: number, height: number, offset: number): Layout {
|
|
75
|
-
const gameWidth = gameWidthFor(width);
|
|
76
|
-
const cell = Math.floor((gameWidth - CELL_GAP * (GRID_SIZE + 1)) / GRID_SIZE);
|
|
77
|
-
const boardSize = GRID_SIZE * cell + (GRID_SIZE + 1) * CELL_GAP;
|
|
78
|
-
return {
|
|
79
|
-
width,
|
|
80
|
-
height,
|
|
81
|
-
boardLeft: (width - boardSize) / 2,
|
|
82
|
-
boardTop: offset + (height - offset - boardSize) / 2,
|
|
83
|
-
boardSize,
|
|
84
|
-
cell,
|
|
85
|
-
step: cell + CELL_GAP,
|
|
86
|
-
swipeThreshold: cell * 0.3
|
|
87
|
-
};
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
/** Centre of cell (row, col), in view points. `row` may be negative: above the board. */
|
|
91
|
-
export const cellCenter = (l: Layout, row: number, col: number): [number, number] => [
|
|
92
|
-
l.boardLeft + CELL_GAP + col * l.step + l.cell / 2,
|
|
93
|
-
l.boardTop + CELL_GAP + row * l.step + l.cell / 2
|
|
94
|
-
];
|