@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 +1 @@
|
|
|
1
|
-
"use strict";import
|
|
1
|
+
"use strict";import _0x92450c from"../../assets/models/explorer/source.json";export const HUMAN_PUNCH_TIME=.52;export const HUMAN_CONTACT_TIME=.16;export const HUMAN_GUARD_TIME=1.15;const smooth=t=>{const e=Math.max(0,Math.min(1,t));return e*e*(3-2*e)};function curve(t,e,o){if(t<=e[0])return o[0];for(let s=1;s<e.length;s++)if(t<=e[s]){const r=smooth((t-e[s-1])/(e[s]-e[s-1]));return o[s-1]+(o[s]-o[s-1])*r}return o.at(-1)}export function fightingPose(t,e){const o=[0,.075,.16,.185,.32,.44,.52],s=t?curve(e,o,[0,-.06,1,.96,.18,0,0]):0,r=t?curve(e,o,[0,-7,18,16,4,0,0])*("Right"===t?1:-1):0,n=t?0:.35*Math.sin(e/1.3*Math.PI*2),a={Hips:[0,0,0],Spine:[3+5*Math.max(0,s),0,0],Spine1:[4+2*Math.max(0,s)+n,.65*r,0],Spine2:[2+.5*n,.35*r,-Math.max(0,s)*("Right"===t?-1.5:1.5)],Neck:[-2,.3*-r,0],Head:[-4,.7*-r,0],LeftUpLeg:[9,0,3],RightUpLeg:[-5,0,-3],LeftLeg:[-14,0,0],RightLeg:[-9,0,0],LeftFoot:[5,0,0],RightFoot:[7,0,0]};for(const t of["Left","Right"]){for(const e of["Index","Middle","Ring","Pinky"])a[t+"Hand"+e+"1"]=[80,0,0],a[t+"Hand"+e+"2"]=[100,0,0],a[t+"Hand"+e+"3"]=[65,0,0];a[t+"HandThumb2"]=[45,0,0],a[t+"HandThumb3"]=[55,0,0]}const i=e=>{const o="Left"===e?1:-1,r=t===e?s:0;return{pos:[o*(.155-.075*r),.015-.05*Math.max(0,r),.235+.37*r],pole:[.7*o,-.65,.12],dir:[0,.15*(1-Math.max(0,r)),1],palm:[-o*(1-Math.max(0,r)),-Math.max(0,r),0]}};return{bones:a,root:{ground:!0},ik:{Left:i("Left"),Right:i("Right")},thumbs:{Left:1,Right:1}}}export function createCombatClips(t){const e=(e,o=!1)=>({id:o?"explorer_punch_start":"explorer_punch_"+e.toLowerCase(),name:o?"Fight entry punch":e+" straight punch",category:"Actions",duration:.52,loop:!1,sample:s=>{const r=fightingPose(e,s);return o&&s<.075?{...r,blend:{sample:t.sample(0),w:1-smooth(s/.075)}}:r}});return[e("Right",!0),e("Right"),e("Left"),{id:"explorer_guard",name:"Boxing guard",category:"Actions",duration:1.3,loop:!0,sample:t=>fightingPose(null,t)},{id:"explorer_guard_exit",name:"Lower guard",category:"Actions",duration:.18,loop:!1,sample:e=>({...fightingPose(null,0),blend:{sample:t.sample(0),w:smooth(e/.18)}})}]}export const HUMAN_HEIGHT=_0x92450c.height;export const HUMAN_CAMERA_HEIGHT=_0x92450c.cameraHeight;export const HUMAN_CLIPS=_0x92450c.clips;export const HUMAN_CLIP_TIME=Object.fromEntries(Object.entries(HUMAN_CLIPS).map(([t,e])=>[t,e.duration]));export const HUMAN_LOOPS=new Set(Object.keys(HUMAN_CLIPS).filter(t=>HUMAN_CLIPS[t].loop));export function locomotionAnimation(t,e=null){return t<.05?"idle":t>=("run"===e?3.2:3.8)?"run":"walk"}export function locomotionRate(t,e){const o=Math.max(.65,Math.min(1.6,t));return void 0!==e&&Math.abs(o-e)<.18?e:Math.max(.65,Math.min(1.6,Math.round(4*t)/4))}export const WORLD_EDGE=128;export const TERRAIN_PROFILES=16;export const MINIMAP_SIZE=124;export const MAX_HEALTH=5;export const GEM_GOAL=24;export const POINTS_GEM=200;export const POINTS_ROBOT_HIT=50;export const POINTS_ROBOT_DEFEAT=300;export const POINTS_HEALTH_BONUS=400;export const PLAYER_SPEED=6;export const PLAYER_RADIUS=.5;export const MOVEMENT_START=.08;export const MOVEMENT_STOP=.04;export const ATTACK_RANGE=1.9;export const ATTACK_COOLDOWN=.52;export const ATTACK_HIT_TIME=.16;export const ENEMY_COUNT=8;export const SKY=[.62,.77,.86];export const NATURE_LIGHT={direction:[-.55,.85,-.3],ambient:.5,shadows:!0,shadowExtent:30,color:[1.15,1.09,.94]};export const NIGHT_SKY=[.07,.13,.2];export const NIGHT_LIGHT={...NATURE_LIGHT,ambient:.52,color:[.8,.95,1.08]};export let sounds;let assetsLoading,cachedAssets=null;export const getCachedAssets=()=>cachedAssets;export function loadAssets(){return assetsLoading??=(async()=>{const[{audio:t,loadTexture:e},{loadHumanAssets:o}]=await Promise.all([import("@nayan-ui/engine"),import("./TreasureHuntModel")]);sounds??=t.load({gem:require("../../assets/sfx/coin.wav"),punch:require("../../assets/sfx/swoosh.wav"),impact:require("../../assets/sfx/clang.wav"),defeat:require("../../assets/sfx/boom.wav"),hurt:require("../../assets/sfx/hurt.wav"),win:require("../../assets/sfx/win.wav"),footstepWalk:require("../../assets/sfx/footstep_walk.wav"),footstepRun:require("../../assets/sfx/footstep_run.wav")}),sounds.ready.catch(()=>{});const[s,r,n,a,i,p,u]=await Promise.all([e(require("../../assets/textures/meadow.jpg")),e(require("../../assets/textures/limestone.jpg")),e(require("../../assets/textures/bark.jpg")),e(require("../../assets/textures/pine.png")),e(require("../../assets/textures/leaves.png")),e(require("../../assets/textures/river.jpg")),o()]);return cachedAssets={meadow:s,stone:r,bark:n,pine:a,leaves:i,water:p,human:u},cachedAssets})().catch(t=>{throw assetsLoading=void 0,t}),assetsLoading}export function*warmAssets(){yield loadAssets}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";import{lathe,loadModel,loadTexture,merge,quat,shapeGeometry,tube}from"@nayan-ui/engine";import
|
|
1
|
+
"use strict";import{lathe,loadModel,loadTexture,merge,quat,shapeGeometry,tube}from"@nayan-ui/engine";import _0x1aa8f1 from"../../assets/models/explorer/source.json";import{cacheGameAsset,createGameMesh as _0x5de41a}from"../shared/EngineMeshes.js";import{HUMAN_CLIPS,HUMAN_HEIGHT,HUMAN_LOOPS,locomotionRate}from"./TreasureHuntConstants.js";import{contactShadowGeometry,humanSupportHeight}from"./TreasureHuntMeshes.js";import{groundHeight,groundTilt,toWorld}from"./TreasureHuntRules.js";let humanAssetsLoading;export function loadHumanAssets(){return humanAssetsLoading??=(async()=>{const[e,t]=await Promise.all([loadModel(require("../../assets/models/explorer/explorer.glb"),{center:!1,fit:HUMAN_HEIGHT,shine:.055}),loadTexture(require("../../assets/textures/explorer-atlas.png"))]);if(!e.jointCount||Object.keys(HUMAN_CLIPS).some(t=>!e.animations.some(e=>e.name===t)))throw Error("The explorer is missing its native skeletal animation clips");return{model:e,atlas:t,soleIndices:new Uint32Array(_0x1aa8f1.soleVertices.flat()),supportIndices:new Uint32Array([..._0x1aa8f1.soleVertices.flat(),..._0x1aa8f1.bodyContactVertices]),leftCount:_0x1aa8f1.soleVertices[0].length}})().catch(e=>{throw humanAssetsLoading=void 0,e}),humanAssetsLoading}export function spawnHuman(e,t,o){const a=e.spawn({mesh:"none",position:t,pickable:!1});return{root:a,body:e.spawn({mesh:o.model,texture:o.atlas,parent:a,pickable:!1}),animation:null,rate:1,strikes:0,phase:0,indices:o.soleIndices,supportIndices:o.supportIndices,samples:new Float32Array(3*o.supportIndices.length),leftCount:o.leftCount,soles:[[0,0,0],[0,0,0]],shadows:[spawnContactShadow(e,a),spawnContactShadow(e,a)]}}export function placeHuman(e,t,o,a,s,r=0,n){const i="fall"===t.animation;if(!e.sampleSkinnedVertices(t.body,i?t.supportIndices:t.indices,t.samples,r))return;for(let e=0;e<2;e++){const o=0===e?0:t.leftCount,a=0===e?t.leftCount:t.indices.length;let s=1/0,r=0,n=0,i=0;for(let e=o;e<a;e++)s=Math.min(s,t.samples[3*e+1]);for(let e=o;e<a;e++)t.samples[3*e+1]<=s+.008&&(r+=t.samples[3*e],n+=t.samples[3*e+2],i++);t.soles[e][0]=r/i,t.soles[e][1]=s,t.soles[e][2]=n/i}const l=t.soles,p=l.map(e=>{const t=toWorld({rotation:s},e[0],e[2]);return groundHeight(o,a.x+t.x,a.z+t.z)});let h=humanSupportHeight(l,[p[0],p[1]],"run"===t.animation);if(i)for(let e=t.indices.length;e<t.supportIndices.length;e++){const r=3*e,n=toWorld({rotation:s},t.samples[r],t.samples[r+2]);h=Math.max(h,groundHeight(o,a.x+n.x,a.z+n.z)-t.samples[r+1])}(n??e).set(t.root,{position:[a.x,h,a.z],rotation:quat.y(s)}),l.forEach((r,i)=>{const l=toWorld({rotation:s},r[0],r[2]),m=Math.max(0,h+r[1]-p[i]);placeContactShadow(e,t.shadows[i],[r[0],p[i]-h+.006,r[2]],groundTilt(o,a.x+l.x,a.z+l.z,s),.11+.08*m,.19+.1*m,.09*Math.exp(6*-m),n)})}export function playHuman(e,t,o,a=1){const s=t.animation===o&&HUMAN_LOOPS.has(o),r=locomotionRate(a,s?t.rate:void 0);s&&t.rate===r||(s||(t.phase=0),t.animation=o,t.rate=r,e.playClip(t.body,o,{loop:HUMAN_CLIPS[o].loop,speed:r,fade:"hit"===o?.04:.08,...s?{}:{time:0}}))}export function resetHuman(e,t){t.animation="idle",t.rate=0,t.strikes=0,t.phase=0,e.playClip(t.body,"idle",{loop:!0,speed:0,time:0,fade:0})}export function advanceHuman(e,t){if(!e.animation)return;const o=HUMAN_CLIPS[e.animation],a=e.phase+t*e.rate/o.duration;e.phase=o.loop?a%1:Math.min(1,a)}const STEEL=[.48,.56,.59],ARMOR=[.31,.39,.42],DARK=[.065,.09,.105],CHROME=[.72,.76,.74],AMBER=[.9,.43,.11],part=(e,t,o,a,s)=>({geometry:shapeGeometry(e),position:t,scale:o,color:a,rotation:s}),box=(e,t,o)=>part("roundedBox",e,t,o),bolt=(e,t,o)=>part("sphere",[e,t,o],[.035,.035,.025],CHROME),make=(e,t=.45)=>_0x5de41a(merge(e),{center:!1,shine:t});let cached,disc;function prepareRobot(){return cacheGameAsset("treasure-hunt/TreasureHuntModel:prepareRobot",()=>prepareRobotUncached())}function prepareRobotUncached(){if(cached)return cached;const e=[{geometry:lathe([[.21,.88],[.29,.94],[.36,1.22],[.32,1.38],[.19,1.43]],{segments:12,color:ARMOR}),scale:[1,1,.62]},part("cylinder",[0,1.06,0],[.22,.7,.22],DARK),box([0,1.23,.21],[.46,.3,.065],STEEL),box([0,.97,.15],[.37,.16,.055],ARMOR),box([0,1.18,-.21],[.38,.4,.18],DARK),part("cylinder",[0,1.49,0],[.17,.15,.17],CHROME),part("torus",[0,1.27,.255],[.17,.17,.05],CHROME,quat.x(Math.PI/2)),part("sphere",[0,1.27,.28],[.105,.105,.035],[2,.52,.12])];for(const t of[-1,1]){e.push(part("sphere",[.37*t,1.36,0],[.21,.23,.24],DARK),part("cylinder",[.22*t,1.25,-.27],[.105,.44,.105],STEEL)),e.push({geometry:tube([[.26*t,.94,.12],[.31*t,1.03,.15],[.35*t,1.24,.1]],{radius:.018,sides:6,color:AMBER})});for(const o of[1.11,1.34])e.push(bolt(.195*t,o,.255));for(let o=0;o<4;o++)e.push(box([.15*t,1.13+.035*o,.249],[.095,.012,.018],DARK))}const t=[box([0,1.7,0],[.45,.31,.35],STEEL),box([0,1.52,.025],[.36,.1,.29],ARMOR),box([0,1.7,.178],[.34,.175,.028],DARK),box([0,1.845,0],[.28,.035,.2],ARMOR),box([0,1.58,.17],[.17,.025,.025],DARK)];for(const e of[-1,1])t.push(part("sphere",[.084*e,1.718,.202],[.072,.065,.036],[2,.17,.07]),part("torus",[.084*e,1.718,.195],[.095,.095,.035],CHROME,quat.x(Math.PI/2)),bolt(.18*e,1.79,.172),bolt(.18*e,1.6,.172)),t.push(part("cylinder",[.24*e,1.7,0],[.06,.14,.13],DARK));t.push({geometry:tube([[.18,1.82,-.03],[.21,1.99,-.05],[.18,2.05,-.05]],{radius:.012,sides:6,color:STEEL})},part("sphere",[.18,2.05,-.05],[.035,.035,.035],[1.7,.18,.1]));const o=[part("sphere",[0,0,0],[.2,.2,.21],CHROME),part("cylinder",[0,-.17,0],[.11,.31,.12],DARK),box([0,-.15,.045],[.18,.26,.16],ARMOR),part("cylinder",[0,-.29,0],[.14,.1,.15],CHROME)];for(const e of[-1,1])o.push(part("cylinder",[.06*e,-.16,-.05],[.025,.25,.025],CHROME),bolt(.055*e,-.09,.128));const a=[part("sphere",[0,0,0],[.13,.13,.14],DARK),box([0,-.16,.015],[.17,.28,.19],STEEL),box([0,-.2,.12],[.1,.12,.025],ARMOR),part("cylinder",[0,-.31,0],[.09,.06,.1],CHROME),box([0,-.36,.02],[.16,.1,.14],DARK)];for(const e of[-1,1])a.push(box([.063*e,-.42,.045],[.043,.12,.07],STEEL),box([.063*e,-.47,.08],[.044,.05,.1],CHROME),bolt(.053*e,-.1,.12));const s=[part("sphere",[0,0,0],[.19,.2,.19],DARK),part("cylinder",[0,-.18,0],[.115,.34,.12],CHROME),box([0,-.17,.045],[.19,.26,.16],ARMOR),box([0,-.13,.13],[.085,.11,.025],AMBER),part("sphere",[0,-.34,.01],[.19,.17,.2],DARK)],r=[part("sphere",[0,0,0],[.16,.16,.17],CHROME),box([0,-.16,.02],[.17,.29,.17],ARMOR),part("cylinder",[0,-.2,-.055],[.075,.33,.075],DARK),box([0,-.405,.075],[.23,.12,.35],DARK),box([0,-.365,.12],[.23,.07,.24],STEEL)];for(const e of[-1,1])r.push(part("cylinder",[.083*e,-.16,.015],[.026,.28,.026],CHROME),bolt(.075*e,-.04,.1),bolt(.08*e,-.36,.24));return cached={chassis:make(e),head:make(t,.6),arm:make(o),forearm:make(a,.6),thigh:make(s),shin:make(r,.6)},cached}export function spawnRobot(e,t,o,a){const s=prepareRobot(),r=e.spawn({mesh:"none",position:[t,o,a],pickable:!1}),n=(t,o,a)=>e.spawn({mesh:t,parent:o,position:a,pickable:!1}),i=n(s.chassis,r,[0,0,0]),l=n(s.head,r,[0,0,0]),p=n(s.arm,r,[-.41,1.38,0]),h=n(s.arm,r,[.41,1.38,0]),m=n(s.forearm,p,[0,-.31,0]),u=n(s.forearm,h,[0,-.31,0]),d=n(s.thigh,r,[-.2,.86,0]),R=n(s.thigh,r,[.2,.86,0]),f=n(s.shin,d,[0,-.34,0]),x=n(s.shin,R,[0,-.34,0]);return{root:r,warning:e.spawn({mesh:"torus",parent:r,position:[0,.04,0],scale:0,color:[2,.24,.12,1],pickable:!1}),chassis:i,head:l,armL:p,armR:h,elbowL:m,elbowR:u,legL:d,legR:R,kneeL:f,kneeR:x,motion:null,colorState:null,warningVisible:!1,pose:[NaN,NaN,NaN,NaN]}}function animateRobot(e,t,o){if(t.motion===o)return;t.motion=o;const a=[t.armL,t.armR,t.elbowL,t.elbowR,t.legL,t.legR,t.kneeL,t.kneeR];for(const t of a)e.stopAnimation(t);if("walk"===o)for(const[o,a,s,r,n]of[[t.legL,t.kneeL,t.armL,t.elbowL,1],[t.legR,t.kneeR,t.armR,t.elbowR,-1]]){const t=[0,.25,.5,.75,1];e.animate(o,t.map(e=>({at:e,rotation:quat.x(Math.sin(e*Math.PI*2)*n*.3)})),{duration:.85,repeat:"forever",easing:"linear"}),e.animate(a,t.map(e=>({at:e,rotation:quat.x(.46*Math.max(0,Math.sin(e*Math.PI*2)*n))})),{duration:.85,repeat:"forever",easing:"linear"}),e.animate(s,t.map(e=>({at:e,rotation:quat.x(-Math.sin(e*Math.PI*2)*n*.25)})),{duration:.85,repeat:"forever",easing:"linear"}),e.animate(r,{rotation:quat.x(-.16)},{duration:.12})}else for(const s of a)e.animate(s,{rotation:quat.x("attack"===o?s===t.armL||s===t.armR?-.9:s===t.elbowL||s===t.elbowR?-.8:0:"stagger"===o?.12:0)},{duration:.15,easing:"easeOut"})}export function placeRobot(e,t,o,a,s,r,n,i,l,p,h){const m=h??e,u=t.pose;(u[0]!==o||u[1]!==s||u[2]!==a||u[3]!==r)&&(m.set(t.root,{position:[o,s,a],rotation:quat.y(r)}),u[0]=o,u[1]=s,u[2]=a,u[3]=r);const d=i>0?2:n>0?1:0;if(t.colorState!==d){const e=2===d?[1.8,1.8,1.8,1]:1===d?[1.25,1.05,.9,1]:[1,1,1,1];m.set(t.chassis,{color:e}),m.set(t.head,{color:e}),t.colorState=d}t.warningVisible!==n>0&&(m.set(t.warning,{scale:n>0?[3.5,.04,3.5]:0}),t.warningVisible=n>0),animateRobot(e,t,i>0?"stagger":n>0?"attack":l?"walk":"idle")}const shadowMesh=()=>cacheGameAsset("treasure-hunt/TreasureHuntModel:shadowMesh",()=>disc??=_0x5de41a(contactShadowGeometry(),{center:!1})),SPREAD=[1.8,1.3,.85];export function spawnContactShadow(e,t){return disc=shadowMesh(),SPREAD.map(()=>e.spawn({mesh:disc,parent:t,scale:0,color:[0,0,0,0],pickable:!1}))}export function placeContactShadow(e,t,o,a,s,r,n,i){t.forEach((t,l)=>(i??e).set(t,{position:[o[0],o[1]+.001*l,o[2]],rotation:a,scale:[s*SPREAD[l],1,r*SPREAD[l]],color:[0,0,0,n]}))}export function*warmAssets(){yield loadHumanAssets,yield prepareRobot,yield shadowMesh}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";import{extrude,merge,Path,quat,shapeGeometry,tube}from"@nayan-ui/engine";import{getSceneInputInsets}from"../shared/EngineHud.js";import{cacheGameAsset,createGameMesh as _0x568687}from"../shared/EngineMeshes.js";import{toColor}from"../shared/EngineUtils.js";import{MINIMAP_SIZE,WORLD_EDGE}from"./TreasureHuntConstants.js";import{boulderGeometry,caveGeometry,diamondGeometry,foliageGeometry,grassGeometry,riverGeometry,terrainGeometrySteps}from"./TreasureHuntMeshes.js";import{placeContactShadow,spawnContactShadow}from"./TreasureHuntModel.js";import{BRIDGE_POST_HEIGHT,BRIDGE_POST_WIDTH,bridgeBarriers,groundHeight,groundTilt,isWalkable,landscapeFor,mapOverview,random,riverWidth,riverX,surfaceAt,toWorld}from"./TreasureHuntRules.js";let meshes;const part=(e,t,r,a)=>({geometry:shapeGeometry(e),position:t,scale:r,color:a});function prepareBridge(){return cacheGameAsset("treasure-hunt/TreasureHuntScene:prepareBridge",()=>prepareBridgeUncached())}function prepareBridgeUncached(){return meshes??={plank:_0x568687(merge([part("roundedBox",[0,-.08,0],[.43,.16,5.6],[1,1,1])]),{center:!1,shine:.12}),post:_0x568687(merge([part("roundedBox",[0,.5,0],[.16,BRIDGE_POST_HEIGHT,.16],[.31,.35,.33]),part("cube",[0,.04,0],[BRIDGE_POST_WIDTH,.08,BRIDGE_POST_WIDTH],[.16,.2,.2]),part("roundedBox",[0,1.08,0],[.2,.08,.2],[.54,.57,.51]),...[-1,1].flatMap(e=>[-1,1].map(t=>part("cylinder",[.09*e,.09,.09*t],[.035,.02,.035],[.64,.64,.56])))]),{center:!1,shine:.55})},meshes}export function spawnBridge(e,t,r,a,s){const o=prepareBridge(),n=toWorld(r,a.x,a.z),i=e.spawn({mesh:"none",parent:t,position:[n.x,a.y,n.z],rotation:quat.y(r.rotation),pickable:!1}),p=Math.ceil(2*a.halfLength/.43),l=2*a.halfLength/p;for(let t=0;t<p;t++)e.spawn({mesh:o.plank,texture:s.bark,parent:i,position:[-a.halfLength+(t+.5)*l,0,0],scale:[l/.43,1,2*a.halfWidth/5.6],color:[1.4,1.13,.81,1],pickable:!1});for(const t of[-1,1]){e.spawn({mesh:"cube",parent:i,position:[0,-.28,1.85*t],scale:[2*a.halfLength,.34,.22],color:[.23,.26,.24,1],pickable:!1});for(const r of[-1,1])e.spawn({mesh:"cube",parent:i,position:[r*(a.halfLength-.65),-.7,1.85*t],scale:[.85,1.3,.85],texture:s.stone,color:[.72,.75,.66,1],pickable:!1})}for(const t of bridgeBarriers(a))if("post"===t.kind)e.spawn({mesh:o.post,parent:i,position:[t.x,0,t.z],pickable:!1});else for(const r of[.48,.98])e.spawn({mesh:"cube",parent:i,position:[t.x,r,t.z],scale:[2*t.halfX,.07,2*t.halfZ],color:[.39,.43,.4,1],pickable:!1})}export{spawnRobot,placeRobot}from"./TreasureHuntModel.js";const WHITE=[1,1,1,1];let natureMeshes;const terrainMeshes=new Map,terrainPreparations=new Map;function terrainPreparation(e){let t=terrainPreparations.get(e);return!t&&(t={builder:terrainGeometrySteps(e),models:{}},terrainPreparations.set(e,t)),t}function advanceTerrain(e){if(e.geometry)return;const t=e.builder.next();t.done&&(e.geometry=t.value)}function terrainPart(e,t,r){return t.models[r]??=cacheGameAsset("treasure-terrain:"+e+":"+r,()=>{if("water"===r)return _0x568687(riverGeometry(landscapeFor(e)),{center:!1,shine:.85});for(;!t.geometry;)advanceTerrain(t);return _0x568687(t.geometry[r],{center:!1})})}function*warmTerrain(e){if(terrainMeshes.has(e))return;const t=terrainPreparation(e);for(;!t.geometry;)if(yield()=>advanceTerrain(t),terrainMeshes.has(e))return;for(const r of["meadow","stone","shore","water"])if(yield()=>{terrainPart(e,t,r)},terrainMeshes.has(e))return;terrainMeshes.set(e,t.models),terrainPreparations.delete(e)}function trunk(e,t){const r=[{geometry:tube([[0,-.45,0],[0,-.08,0],[.03,.35,.02],[.08,2,.08],[-.08,4.4,0],[.2,e?9.4:8.2,.1]],{radius:e=>.32*(1-.95*e),sides:9,smoothness:2})}];for(let a=0;a<12;a++){const s=2.4*a+t,o=4.8+a*(e?.33:.24),n=e?2.1*(1-a/16):1.6;r.push({geometry:tube([[0,o,0],[Math.cos(s)*n*.55,o+.15,Math.sin(s)*n*.55],[Math.cos(s)*n,o+(e?-.1:.9),Math.sin(s)*n]],{radius:e=>.065*(1-.98*e),sides:5,smoothness:1})})}return _0x568687(merge(r),{center:!1})}const natureCache=new Map;function natureMesh(e,t){let r=natureCache.get(e);return!r&&(r=cacheGameAsset("treasure-hunt/TreasureHuntScene:"+e,t),natureCache.set(e,r)),r}const gemMesh=()=>natureMesh("gem",()=>_0x568687(diamondGeometry(),{center:!1,shine:.98})),trunkMesh=(e,t)=>natureMesh("trunk:"+e+":"+t,()=>trunk(e,t)),foliageMesh=(e,t)=>natureMesh("foliage:"+e+":"+t,()=>_0x568687(foliageGeometry(e,t),{center:!1})),rockMesh=e=>natureMesh("rock:"+e,()=>_0x568687(boulderGeometry(e),{center:!1})),grassMesh=e=>natureMesh("grass:"+e,()=>_0x568687(grassGeometry(e),{center:!1})),caveMesh=()=>natureMesh("cave",()=>_0x568687(caveGeometry(),{center:!1}));export function prepareNature(){return natureMeshes??={gem:gemMesh(),trunks:[trunkMesh(!0,0),trunkMesh(!1,1)],pine:Array.from({length:4},(e,t)=>foliageMesh(!0,t)),birch:Array.from({length:4},(e,t)=>foliageMesh(!1,t)),rocks:Array.from({length:4},(e,t)=>rockMesh(t)),grass:Array.from({length:4},(e,t)=>grassMesh(t)),cave:caveMesh()},natureMeshes}export function*warmAssets(){yield prepareBridge,yield gemMesh,yield()=>trunkMesh(!0,0),yield()=>trunkMesh(!1,1);for(let e=0;e<4;e++)yield()=>foliageMesh(!0,e),yield()=>foliageMesh(!1,e),yield()=>rockMesh(e),yield()=>grassMesh(e);yield caveMesh}export function terrainModels(e){let t=terrainMeshes.get(e);if(!t){const r=terrainPreparation(e);t={meadow:terrainPart(e,r,"meadow"),stone:terrainPart(e,r,"stone"),shore:terrainPart(e,r,"shore"),water:terrainPart(e,r,"water")},terrainMeshes.set(e,t),terrainPreparations.delete(e)}return t}const grassPlacements=new WeakMap;function*scatterGrass(e){const t=random(6790115^e.seed),r=[],a=Math.cos(e.rotation),s=Math.sin(e.rotation);for(let o=0;o<1900;o++){o&&o%64==0&&(yield);const n=e.reachable[Math.floor(t()*e.reachable.length)],i=n.x+2*(t()-.5),p=n.z+2*(t()-.5),l={x:i*a-p*s,z:i*s+p*a};"grass"!==surfaceAt(e,i,p)||!isWalkable(e,i,p,.9)||Math.abs(l.x-riverX(e.landscape,l.z))<riverWidth(e.landscape,l.z)+1||e.landscape.caves.some(e=>Math.abs(l.x-e.x)<6&&Math.abs(l.z-e.z)<11)||r.push({position:[i,groundHeight(e,i,p)-.02,p],scale:.7+.7*t(),yaw:t()*Math.PI*2,style:o%4})}return r}function grassPreparation(e){let t=grassPlacements.get(e);return!t&&(t={builder:scatterGrass(e)},grassPlacements.set(e,t)),t}function advanceGrass(e){if(e.placements)return;const t=e.builder.next();t.done&&(e.placements=t.value)}export function*warmMapScenery(e){const t=grassPreparation(e);for(;!t.placements;)yield()=>advanceGrass(t);yield()=>{minimapTiles(e)},yield*warmTerrain(e.landscape.profile)}export function spawnNature(e,t,r){const a=prepareNature(),s=terrainModels(t.landscape.profile),o=e.spawn({mesh:"none",pickable:!1}),n=(t,r,a=1,s=WHITE,n,i=0)=>e.spawn({mesh:t,position:r,scale:a,color:s,texture:n,rotation:quat.y(i),parent:o,pickable:!1}),i=(r,a)=>{const s="number"==typeof a?a:a[0],n="number"==typeof a?a:a[2];placeContactShadow(e,spawnContactShadow(e,o),[r[0],groundHeight(t,r[0],r[2])+.006,r[2]],groundTilt(t,r[0],r[2]),.27*s,.27*n,.065)};n(s.meadow,[0,0,0],1,[.85,.96,.77,1],r.meadow,t.rotation),n(s.stone,[0,0,0],1,[.9,.94,.92,1],r.stone,t.rotation),n(s.shore,[0,0,0],1,[.96,.78,.53,1],r.stone,t.rotation);for(const a of t.landscape.bridges)spawnBridge(e,o,t,a,r);const p=n(s.water,[0,0,0],1,[1.3,1.3,1.3,.94],r.water,t.rotation);for(const e of t.props){const s=[e.x,groundHeight(t,e.x,e.z)-.07,e.z];"rock"===e.kind?n(a.rocks[e.style],s,e.scale,WHITE,r.stone,e.yaw):(n(a.trunks["pine"===e.kind?0:1],s,e.scale,"pine"===e.kind?[.7,.65,.52,1]:[1.35,1.35,1.24,1],r.bark,e.yaw),n(a[e.kind][e.style],s,e.scale,WHITE,"pine"===e.kind?r.pine:r.leaves,e.yaw),i(s,e.scale))}for(const e of t.decorations){const t=[e.x,e.y,e.z];if("rock"===e.kind){const s="horizon"===e.area?[.62,.69,.65,1]:"cave-roof"===e.area?[.85,.9,.84,1]:[.8,.88,.8,1];n(a.rocks[e.style],t,e.scale,s,r.stone,e.yaw)}else n(a.trunks[0],t,e.scale,[.7,.65,.52,1],r.bark,e.yaw),n(a.pine[e.style],t,e.scale,[.7,.8,.74,1],r.pine,e.yaw),i(t,e.scale)}const l=grassPreparation(t);for(;!l.placements;)advanceGrass(l);for(const e of l.placements)n(a.grass[e.style],e.position,e.scale,WHITE,void 0,e.yaw);for(const e of t.landscape.caves){const s=toWorld(t,e.x,e.z);n(a.cave,[s.x,e.y,s.z],1,WHITE,r.stone,t.rotation)}return{root:o,water:p,flow:0}}export function animateNature(e,t,r){t.flow=(t.flow+.08*r)%1,e.set(t.water,{textureRegion:[0,t.flow,1,1+t.flow]})}export function spawnGem(e,t,r,a){return e.spawn({mesh:prepareNature().gem,position:[t,r+.9,a],scale:.7,color:[.92,1.02,1.12,1],spin:[0,.85,0],bob:{amplitude:[0,.16,0],speed:2.5,phase:t+a},pickable:!1})}const MAP_COLORS={grass:"#649452",hill:"#b3b8ac",cave:"#777f77",river:"#38b8ee",shore:"#cdb785",bridge:"#f7d79a"},mapTiles=new WeakMap,miniMaps=new WeakMap,mapAt=e=>(e+WORLD_EDGE)/(2*WORLD_EDGE)*MINIMAP_SIZE;let mapDot,mapArrow;function minimapTiles(e){const t=mapTiles.get(e);if(t)return t;const r=mapOverview(e,MINIMAP_SIZE),a=[];let s=new Map;for(let e=0;e<MINIMAP_SIZE;e++){const t=new Map;let o=0;for(;o<MINIMAP_SIZE;){const n=r[e*MINIMAP_SIZE+o];let i=o+1;for(;i<MINIMAP_SIZE&&r[e*MINIMAP_SIZE+i]===n;)i++;if(n){const r=o+":"+i+":"+n,p=s.get(r);if(p)p.height++,t.set(r,p);else{const s={x:o,y:e,width:i-o,height:1,color:toColor(MAP_COLORS[n])};a.push(s),t.set(r,s)}}o=i}s=t}return mapTiles.set(e,a),a}export function drawMiniMap(e,t){if(!e.ready)return;let r=miniMaps.get(e);if(r?.map!==t.map){e.clearLayer("minimap");const a=e.layer("minimap");for(const r of minimapTiles(t.map))e.rectangle(a,r.x+r.width/2,-r.y-r.height/2,r.width,r.height,r.color);for(const r of t.map.landscape.bridges){const s=toWorld(t.map,r.x,r.z),o=e.rectangle(a,mapAt(s.x),-mapAt(s.z),r.halfLength/WORLD_EDGE*MINIMAP_SIZE,Math.max(3,r.halfWidth/WORLD_EDGE*MINIMAP_SIZE),toColor(MAP_COLORS.bridge),1);e.world.set(o,{rotation:quat.z(t.map.rotation)})}mapDot??=cacheGameAsset("treasure-map-dot",()=>_0x568687(extrude((new Path).addCircle(0,0,.5),{depth:0}),{center:!1})),mapArrow??=cacheGameAsset("treasure-map-arrow",()=>_0x568687(extrude(Path.fromSVG("M-3 0H3L0 5Z"),{depth:0}),{center:!1}));const s=e.world.spawn({mesh:"none",parent:a,pickable:!1});e.world.spawn({mesh:mapDot,parent:s,scale:10,color:[1,1,1,1],pickable:!1}),e.world.spawn({mesh:mapDot,parent:s,position:[0,0,1],scale:6,color:toColor("#173d28"),pickable:!1}),e.world.spawn({mesh:mapArrow,parent:s,position:[0,7,1],color:[1,1,1,1],pickable:!1}),e.text(a,"N",MINIMAP_SIZE-8,-8,10,[1,1,1,1]),r={map:t.map,root:a,player:s,width:NaN,offset:NaN,x:NaN,z:NaN,yaw:NaN,enemies:new Map,gems:new Map},miniMaps.set(e,r)}const{width:a,offset:s}=e.viewport,o=e.world.transforms;if((r.width!==a||r.offset!==s)&&(o.position(r.root,a-MINIMAP_SIZE-18,-(getSceneInputInsets(s).top+6),5),r.width=a,r.offset=s),r.x!==t.player.x||r.z!==t.player.z||r.yaw!==t.yaw){const e=t.yaw-Math.PI;o.transform(r.player,mapAt(t.player.x),-mapAt(t.player.z),4,0,0,Math.sin(e/2),Math.cos(e/2)),r.x=t.player.x,r.z=t.player.z,r.yaw=t.yaw}for(const a of t.enemies){let t=r.enemies.get(a.id);!t&&(t={entity:e.world.spawn({mesh:mapDot,parent:r.root,scale:6,color:toColor("#ff6355"),pickable:!1}),x:NaN,z:NaN,visible:!0},r.enemies.set(a.id,t));const s=a.health>0;(t.x!==a.x||t.z!==a.z||t.visible!==s)&&(o.position(t.entity,mapAt(a.x),-mapAt(a.z),2),o.scale(t.entity,s?6:0),t.x=a.x,t.z=a.z,t.visible=s)}for(const a of t.pickups){let t=r.gems.get(a.id);if(t)t.visible!==!a.taken&&(a.taken?o.scale(t.entity,0):o.scale(t.entity,5,5,1),t.visible=!a.taken);else{const s=e.rectangle(r.root,mapAt(a.x),-mapAt(a.z),5,5,toColor("#bdffff"),3);o.rotation(s,0,0,Math.sin(Math.PI/8),Math.cos(Math.PI/8)),a.taken?o.scale(s,0):o.scale(s,5,5,1),t={entity:s,x:a.x,z:a.z,visible:!a.taken},r.gems.set(a.id,t)}}o.flush()}
|
|
1
|
+
"use strict";import{extrude,merge,Path,quat,shapeGeometry,tube}from"@nayan-ui/engine";import{getSceneInputInsets}from"../shared/EngineHud.js";import{cacheGameAsset,createGameMesh as _0x2419e7}from"../shared/EngineMeshes.js";import{toColor}from"../shared/EngineUtils.js";import{MINIMAP_SIZE,WORLD_EDGE}from"./TreasureHuntConstants.js";import{boulderGeometry,caveGeometry,diamondGeometry,foliageGeometry,grassGeometry,riverGeometry,terrainGeometrySteps}from"./TreasureHuntMeshes.js";import{placeContactShadow,spawnContactShadow}from"./TreasureHuntModel.js";import{BRIDGE_POST_HEIGHT,BRIDGE_POST_WIDTH,bridgeBarriers,groundHeight,groundTilt,isWalkable,landscapeFor,mapOverview,random,riverWidth,riverX,surfaceAt,toWorld}from"./TreasureHuntRules.js";let meshes;const part=(e,t,r,a)=>({geometry:shapeGeometry(e),position:t,scale:r,color:a});function prepareBridge(){return cacheGameAsset("treasure-hunt/TreasureHuntScene:prepareBridge",()=>prepareBridgeUncached())}function prepareBridgeUncached(){return meshes??={plank:_0x2419e7(merge([part("roundedBox",[0,-.08,0],[.43,.16,5.6],[1,1,1])]),{center:!1,shine:.12}),post:_0x2419e7(merge([part("roundedBox",[0,.5,0],[.16,BRIDGE_POST_HEIGHT,.16],[.31,.35,.33]),part("cube",[0,.04,0],[BRIDGE_POST_WIDTH,.08,BRIDGE_POST_WIDTH],[.16,.2,.2]),part("roundedBox",[0,1.08,0],[.2,.08,.2],[.54,.57,.51]),...[-1,1].flatMap(e=>[-1,1].map(t=>part("cylinder",[.09*e,.09,.09*t],[.035,.02,.035],[.64,.64,.56])))]),{center:!1,shine:.55})},meshes}export function spawnBridge(e,t,r,a,s){const o=prepareBridge(),n=toWorld(r,a.x,a.z),i=e.spawn({mesh:"none",parent:t,position:[n.x,a.y,n.z],rotation:quat.y(r.rotation),pickable:!1}),p=Math.ceil(2*a.halfLength/.43),l=2*a.halfLength/p;for(let t=0;t<p;t++)e.spawn({mesh:o.plank,texture:s.bark,parent:i,position:[-a.halfLength+(t+.5)*l,0,0],scale:[l/.43,1,2*a.halfWidth/5.6],color:[1.4,1.13,.81,1],pickable:!1});for(const t of[-1,1]){e.spawn({mesh:"cube",parent:i,position:[0,-.28,1.85*t],scale:[2*a.halfLength,.34,.22],color:[.23,.26,.24,1],pickable:!1});for(const r of[-1,1])e.spawn({mesh:"cube",parent:i,position:[r*(a.halfLength-.65),-.7,1.85*t],scale:[.85,1.3,.85],texture:s.stone,color:[.72,.75,.66,1],pickable:!1})}for(const t of bridgeBarriers(a))if("post"===t.kind)e.spawn({mesh:o.post,parent:i,position:[t.x,0,t.z],pickable:!1});else for(const r of[.48,.98])e.spawn({mesh:"cube",parent:i,position:[t.x,r,t.z],scale:[2*t.halfX,.07,2*t.halfZ],color:[.39,.43,.4,1],pickable:!1})}export{spawnRobot,placeRobot}from"./TreasureHuntModel.js";const WHITE=[1,1,1,1];let natureMeshes;const terrainMeshes=new Map,terrainPreparations=new Map;function terrainPreparation(e){let t=terrainPreparations.get(e);return!t&&(t={builder:terrainGeometrySteps(e),models:{}},terrainPreparations.set(e,t)),t}function advanceTerrain(e){if(e.geometry)return;const t=e.builder.next();t.done&&(e.geometry=t.value)}function terrainPart(e,t,r){return t.models[r]??=cacheGameAsset("treasure-terrain:"+e+":"+r,()=>{if("water"===r)return _0x2419e7(riverGeometry(landscapeFor(e)),{center:!1,shine:.85});for(;!t.geometry;)advanceTerrain(t);return _0x2419e7(t.geometry[r],{center:!1})})}function*warmTerrain(e){if(terrainMeshes.has(e))return;const t=terrainPreparation(e);for(;!t.geometry;)if(yield()=>advanceTerrain(t),terrainMeshes.has(e))return;for(const r of["meadow","stone","shore","water"])if(yield()=>{terrainPart(e,t,r)},terrainMeshes.has(e))return;terrainMeshes.set(e,t.models),terrainPreparations.delete(e)}function trunk(e,t){const r=[{geometry:tube([[0,-.45,0],[0,-.08,0],[.03,.35,.02],[.08,2,.08],[-.08,4.4,0],[.2,e?9.4:8.2,.1]],{radius:e=>.32*(1-.95*e),sides:9,smoothness:2})}];for(let a=0;a<12;a++){const s=2.4*a+t,o=4.8+a*(e?.33:.24),n=e?2.1*(1-a/16):1.6;r.push({geometry:tube([[0,o,0],[Math.cos(s)*n*.55,o+.15,Math.sin(s)*n*.55],[Math.cos(s)*n,o+(e?-.1:.9),Math.sin(s)*n]],{radius:e=>.065*(1-.98*e),sides:5,smoothness:1})})}return _0x2419e7(merge(r),{center:!1})}const natureCache=new Map;function natureMesh(e,t){let r=natureCache.get(e);return!r&&(r=cacheGameAsset("treasure-hunt/TreasureHuntScene:"+e,t),natureCache.set(e,r)),r}const gemMesh=()=>natureMesh("gem",()=>_0x2419e7(diamondGeometry(),{center:!1,shine:.98})),trunkMesh=(e,t)=>natureMesh("trunk:"+e+":"+t,()=>trunk(e,t)),foliageMesh=(e,t)=>natureMesh("foliage:"+e+":"+t,()=>_0x2419e7(foliageGeometry(e,t),{center:!1})),rockMesh=e=>natureMesh("rock:"+e,()=>_0x2419e7(boulderGeometry(e),{center:!1})),grassMesh=e=>natureMesh("grass:"+e,()=>_0x2419e7(grassGeometry(e),{center:!1})),caveMesh=()=>natureMesh("cave",()=>_0x2419e7(caveGeometry(),{center:!1}));export function prepareNature(){return natureMeshes??={gem:gemMesh(),trunks:[trunkMesh(!0,0),trunkMesh(!1,1)],pine:Array.from({length:4},(e,t)=>foliageMesh(!0,t)),birch:Array.from({length:4},(e,t)=>foliageMesh(!1,t)),rocks:Array.from({length:4},(e,t)=>rockMesh(t)),grass:Array.from({length:4},(e,t)=>grassMesh(t)),cave:caveMesh()},natureMeshes}export function*warmAssets(){yield prepareBridge,yield gemMesh,yield()=>trunkMesh(!0,0),yield()=>trunkMesh(!1,1);for(let e=0;e<4;e++)yield()=>foliageMesh(!0,e),yield()=>foliageMesh(!1,e),yield()=>rockMesh(e),yield()=>grassMesh(e);yield caveMesh}export function terrainModels(e){let t=terrainMeshes.get(e);if(!t){const r=terrainPreparation(e);t={meadow:terrainPart(e,r,"meadow"),stone:terrainPart(e,r,"stone"),shore:terrainPart(e,r,"shore"),water:terrainPart(e,r,"water")},terrainMeshes.set(e,t),terrainPreparations.delete(e)}return t}const grassPlacements=new WeakMap;function*scatterGrass(e){const t=random(6790115^e.seed),r=[],a=Math.cos(e.rotation),s=Math.sin(e.rotation);for(let o=0;o<1900;o++){o&&o%64==0&&(yield);const n=e.reachable[Math.floor(t()*e.reachable.length)],i=n.x+2*(t()-.5),p=n.z+2*(t()-.5),l={x:i*a-p*s,z:i*s+p*a};"grass"!==surfaceAt(e,i,p)||!isWalkable(e,i,p,.9)||Math.abs(l.x-riverX(e.landscape,l.z))<riverWidth(e.landscape,l.z)+1||e.landscape.caves.some(e=>Math.abs(l.x-e.x)<6&&Math.abs(l.z-e.z)<11)||r.push({position:[i,groundHeight(e,i,p)-.02,p],scale:.7+.7*t(),yaw:t()*Math.PI*2,style:o%4})}return r}function grassPreparation(e){let t=grassPlacements.get(e);return!t&&(t={builder:scatterGrass(e)},grassPlacements.set(e,t)),t}function advanceGrass(e){if(e.placements)return;const t=e.builder.next();t.done&&(e.placements=t.value)}export function*warmMapScenery(e){const t=grassPreparation(e);for(;!t.placements;)yield()=>advanceGrass(t);yield()=>{minimapTiles(e)},yield*warmTerrain(e.landscape.profile)}export function spawnNature(e,t,r){const a=prepareNature(),s=terrainModels(t.landscape.profile),o=e.spawn({mesh:"none",pickable:!1}),n=(t,r,a=1,s=WHITE,n,i=0)=>e.spawn({mesh:t,position:r,scale:a,color:s,texture:n,rotation:quat.y(i),parent:o,pickable:!1}),i=(r,a)=>{const s="number"==typeof a?a:a[0],n="number"==typeof a?a:a[2];placeContactShadow(e,spawnContactShadow(e,o),[r[0],groundHeight(t,r[0],r[2])+.006,r[2]],groundTilt(t,r[0],r[2]),.27*s,.27*n,.065)};n(s.meadow,[0,0,0],1,[.85,.96,.77,1],r.meadow,t.rotation),n(s.stone,[0,0,0],1,[.9,.94,.92,1],r.stone,t.rotation),n(s.shore,[0,0,0],1,[.96,.78,.53,1],r.stone,t.rotation);for(const a of t.landscape.bridges)spawnBridge(e,o,t,a,r);const p=n(s.water,[0,0,0],1,[1.3,1.3,1.3,.94],r.water,t.rotation);for(const e of t.props){const s=[e.x,groundHeight(t,e.x,e.z)-.07,e.z];"rock"===e.kind?n(a.rocks[e.style],s,e.scale,WHITE,r.stone,e.yaw):(n(a.trunks["pine"===e.kind?0:1],s,e.scale,"pine"===e.kind?[.7,.65,.52,1]:[1.35,1.35,1.24,1],r.bark,e.yaw),n(a[e.kind][e.style],s,e.scale,WHITE,"pine"===e.kind?r.pine:r.leaves,e.yaw),i(s,e.scale))}for(const e of t.decorations){const t=[e.x,e.y,e.z];if("rock"===e.kind){const s="horizon"===e.area?[.62,.69,.65,1]:"cave-roof"===e.area?[.85,.9,.84,1]:[.8,.88,.8,1];n(a.rocks[e.style],t,e.scale,s,r.stone,e.yaw)}else n(a.trunks[0],t,e.scale,[.7,.65,.52,1],r.bark,e.yaw),n(a.pine[e.style],t,e.scale,[.7,.8,.74,1],r.pine,e.yaw),i(t,e.scale)}const l=grassPreparation(t);for(;!l.placements;)advanceGrass(l);for(const e of l.placements)n(a.grass[e.style],e.position,e.scale,WHITE,void 0,e.yaw);for(const e of t.landscape.caves){const s=toWorld(t,e.x,e.z);n(a.cave,[s.x,e.y,s.z],1,WHITE,r.stone,t.rotation)}return{root:o,water:p,flow:0}}export function animateNature(e,t,r){t.flow=(t.flow+.08*r)%1,e.set(t.water,{textureRegion:[0,t.flow,1,1+t.flow]})}export function spawnGem(e,t,r,a){return e.spawn({mesh:prepareNature().gem,position:[t,r+.9,a],scale:.7,color:[.92,1.02,1.12,1],spin:[0,.85,0],bob:{amplitude:[0,.16,0],speed:2.5,phase:t+a},pickable:!1})}const MAP_COLORS={grass:"#649452",hill:"#b3b8ac",cave:"#777f77",river:"#38b8ee",shore:"#cdb785",bridge:"#f7d79a"},mapTiles=new WeakMap,miniMaps=new WeakMap,mapAt=e=>(e+WORLD_EDGE)/(2*WORLD_EDGE)*MINIMAP_SIZE;let mapDot,mapArrow;function minimapTiles(e){const t=mapTiles.get(e);if(t)return t;const r=mapOverview(e,MINIMAP_SIZE),a=[];let s=new Map;for(let e=0;e<MINIMAP_SIZE;e++){const t=new Map;let o=0;for(;o<MINIMAP_SIZE;){const n=r[e*MINIMAP_SIZE+o];let i=o+1;for(;i<MINIMAP_SIZE&&r[e*MINIMAP_SIZE+i]===n;)i++;if(n){const r=o+":"+i+":"+n,p=s.get(r);if(p)p.height++,t.set(r,p);else{const s={x:o,y:e,width:i-o,height:1,color:toColor(MAP_COLORS[n])};a.push(s),t.set(r,s)}}o=i}s=t}return mapTiles.set(e,a),a}export function drawMiniMap(e,t){if(!e.ready)return;let r=miniMaps.get(e);if(r?.map!==t.map){e.clearLayer("minimap");const a=e.layer("minimap");for(const r of minimapTiles(t.map))e.rectangle(a,r.x+r.width/2,-r.y-r.height/2,r.width,r.height,r.color);for(const r of t.map.landscape.bridges){const s=toWorld(t.map,r.x,r.z),o=e.rectangle(a,mapAt(s.x),-mapAt(s.z),r.halfLength/WORLD_EDGE*MINIMAP_SIZE,Math.max(3,r.halfWidth/WORLD_EDGE*MINIMAP_SIZE),toColor(MAP_COLORS.bridge),1);e.world.set(o,{rotation:quat.z(t.map.rotation)})}mapDot??=cacheGameAsset("treasure-map-dot",()=>_0x2419e7(extrude((new Path).addCircle(0,0,.5),{depth:0}),{center:!1})),mapArrow??=cacheGameAsset("treasure-map-arrow",()=>_0x2419e7(extrude(Path.fromSVG("M-3 0H3L0 5Z"),{depth:0}),{center:!1}));const s=e.world.spawn({mesh:"none",parent:a,pickable:!1});e.world.spawn({mesh:mapDot,parent:s,scale:10,color:[1,1,1,1],pickable:!1}),e.world.spawn({mesh:mapDot,parent:s,position:[0,0,1],scale:6,color:toColor("#173d28"),pickable:!1}),e.world.spawn({mesh:mapArrow,parent:s,position:[0,7,1],color:[1,1,1,1],pickable:!1}),e.text(a,"N",MINIMAP_SIZE-8,-8,10,[1,1,1,1]),r={map:t.map,root:a,player:s,width:NaN,offset:NaN,x:NaN,z:NaN,yaw:NaN,enemies:new Map,gems:new Map},miniMaps.set(e,r)}const{width:a,offset:s}=e.viewport,o=e.world.transforms;if((r.width!==a||r.offset!==s)&&(o.position(r.root,a-MINIMAP_SIZE-18,-(getSceneInputInsets(s).top+6),5),r.width=a,r.offset=s),r.x!==t.player.x||r.z!==t.player.z||r.yaw!==t.yaw){const e=t.yaw-Math.PI;o.transform(r.player,mapAt(t.player.x),-mapAt(t.player.z),4,0,0,Math.sin(e/2),Math.cos(e/2)),r.x=t.player.x,r.z=t.player.z,r.yaw=t.yaw}for(const a of t.enemies){let t=r.enemies.get(a.id);!t&&(t={entity:e.world.spawn({mesh:mapDot,parent:r.root,scale:6,color:toColor("#ff6355"),pickable:!1}),x:NaN,z:NaN,visible:!0},r.enemies.set(a.id,t));const s=a.health>0;(t.x!==a.x||t.z!==a.z||t.visible!==s)&&(o.position(t.entity,mapAt(a.x),-mapAt(a.z),2),o.scale(t.entity,s?6:0),t.x=a.x,t.z=a.z,t.visible=s)}for(const a of t.pickups){let t=r.gems.get(a.id);if(t)t.visible!==!a.taken&&(a.taken?o.scale(t.entity,0):o.scale(t.entity,5,5,1),t.visible=!a.taken);else{const s=e.rectangle(r.root,mapAt(a.x),-mapAt(a.z),5,5,toColor("#bdffff"),3);o.rotation(s,0,0,Math.sin(Math.PI/8),Math.cos(Math.PI/8)),a.taken?o.scale(s,0):o.scale(s,5,5,1),t={entity:s,x:a.x,z:a.z,visible:!a.taken},r.gems.set(a.id,t)}}o.flush()}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";import{useMemo}from"react";import{HapticType}from"../../services/HapticsService.js";import{GAME_SOUNDS}from"../../services/SoundsService.js";import{GAME_IDS}from"../../services/UtilsService.js";import{engineGame,EngineGameScreen}from"../shared/EngineGameScreen.js";import{scoreColumn,timerColumn}from"../shared/EngineHud.js";import{backgroundFor,lightFor}from"../shared/EngineMeadow.js";import{useEngineGame}from"../shared/useEngineGame.js";import{useLiveState}from"../shared/useLiveState.js";import{getLayout,TIME_LIMIT}from"./WhackAMoleConstants.js";import{createGame,dispose,reset,setLayout,setTheme,start,tap,tick}from"./WhackAMoleGame.js";import{jsx as
|
|
1
|
+
"use strict";import{useMemo}from"react";import{HapticType}from"../../services/HapticsService.js";import{GAME_SOUNDS}from"../../services/SoundsService.js";import{GAME_IDS}from"../../services/UtilsService.js";import{engineGame,EngineGameScreen}from"../shared/EngineGameScreen.js";import{scoreColumn,timerColumn}from"../shared/EngineHud.js";import{backgroundFor,lightFor}from"../shared/EngineMeadow.js";import{useEngineGame}from"../shared/useEngineGame.js";import{useLiveState}from"../shared/useLiveState.js";import{getLayout,TIME_LIMIT}from"./WhackAMoleConstants.js";import{createGame,dispose,reset,setLayout,setTheme,start,tap,tick}from"./WhackAMoleGame.js";import{jsx as _0x298201}from"react/jsx-runtime";const SOUNDS=GAME_SOUNDS.WHACK_A_MOLE,FEEDBACK={spawn:{sound:SOUNDS.SPAWN,haptic:HapticType.LIGHT},hit:{sound:SOUNDS.HIT,haptic:HapticType.HEAVY},miss:{sound:SOUNDS.MISS,haptic:HapticType.LIGHT},empty:{sound:SOUNDS.EMPTY_TAP,haptic:HapticType.MEDIUM},warning:{sound:SOUNDS.TIME_WARNING,haptic:HapticType.WARNING}};export const WhackAMole=engineGame(GAME_IDS.WHACK_A_MOLE,e=>{const[t,s]=useLiveState(0),[o,r]=useLiveState(TIME_LIMIT),{theme:a,screen:i,gameOver:n}=useEngineGame(e,{gameId:GAME_IDS.WHACK_A_MOLE,create:createGame,start:start,reset:reset,dispose:dispose,tick:tick,setTheme:setTheme,resize:(e,t,s,o)=>setLayout(e,getLayout(t,s,o)),tap:tap,outcome:()=>"win",sounds:SOUNDS,onStart:e=>e(SOUNDS.START,HapticType.SUCCESS),onStop:e=>e(null,HapticType.MEDIUM),onOver:e=>e(SOUNDS.GAME_OVER,HapticType.ERROR),wire:(e,t)=>{e.onScore=s,e.onTime=r,e.onEvent=e=>t(FEEDBACK[e].sound,FEEDBACK[e].haptic)}}),m=useMemo(()=>lightFor(a),[a]),p=useMemo(()=>backgroundFor(a),[a]);return _0x298201(EngineGameScreen,{...i,light:m,background:p,columns:[scoreColumn(t),timerColumn(o,a,0)],subtext:"Whack moles to score!",gameOver:n({title:"TIME UP!",message:"Great whacking!",scoreLabel:"Final Score",score:t,buttonText:"Whack Again!"})})});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";import{effects,lathe,merge,quat,shapeGeometry,tube}from"@nayan-ui/engine";import{flowerMesh,noise,random,rockMesh,sceneryTint,spawnWorld,tuftMesh}from"../shared/EngineMeadow.js";import{cacheGameAsset,createGameMesh as
|
|
1
|
+
"use strict";import{effects,lathe,merge,quat,shapeGeometry,tube}from"@nayan-ui/engine";import{flowerMesh,noise,random,rockMesh,sceneryTint,spawnWorld,tuftMesh}from"../shared/EngineMeadow.js";import{cacheGameAsset,createGameMesh as _0x521357}from"../shared/EngineMeshes.js";import{toColor}from"../shared/EngineUtils.js";import{HOLE_RADIUS,meadowFor,MOLE_HEIGHT}from"./WhackAMoleConstants.js";const meshes=new Map,cached=(o,e)=>{let t=meshes.get(o);return!t&&(t=cacheGameAsset("whack-a-mole/WhackAMoleScene:"+o,e),meshes.set(o,t)),t},rgb=o=>{const[e,t,s]=toColor(o);return[e,t,s]},mix=(o,e,t)=>[o[0]+(e[0]-o[0])*t,o[1]+(e[1]-o[1])*t,o[2]+(e[2]-o[2])*t],shade=(o,e)=>[o[0]*e,o[1]*e,o[2]*e],smooth=(o,e,t)=>{const s=Math.min(1,Math.max(0,(t-o)/(e-o)));return s*s*(3-2*s)},sphere=()=>shapeGeometry("sphere"),tinted=(o,e)=>[o[0]*e[0],o[1]*e[1],o[2]*e[2],o[3]??1],moundMesh=()=>cached("wam-mound",()=>{const o=rgb("#7A4E2D"),e=rgb("#A27449"),t=rgb("#140B05"),s=HOLE_RADIUS;return _0x521357(lathe([[1.75*s,0],[1.45*s,.12*s],[1.12*s,.3*s],[.95*s,.32*s],[.8*s,.16*s],[.66*s,.03*s],[.001,.015*s]],{segments:40,displace:(o,e)=>e<.6?.012*Math.sin(o*Math.PI*2*9)*Math.sin(e*Math.PI):0,color:({position:n})=>{const i=Math.hypot(n[0],n[2])/s,a=.82+.36*noise(40*n[0]+5,40*n[2]),r=mix(shade(o,.65),e,smooth(.9,1.15,i)*(1-.6*smooth(1.3,1.75,i)));return shade(mix(t,r,smooth(.62,.92,i)),a)}}),{center:!1,shine:.05})}),moleMesh=()=>cached("wam-mole",()=>{const o=rgb("#7B5134"),e=rgb("#4E3220"),t=rgb("#E8B48A"),s=rgb("#FF6F91"),n=rgb("#F2A99B"),i=lathe([[.33,-.45],[.36,.05],[.35,.4],[.3,.66],[.2,.84],[.001,.93]],{segments:32,color:({position:s,normal:n})=>{const i=smooth(.35,.85,n[2])*(1-smooth(.35,.6,s[1])),a=mix(mix(e,o,smooth(-.3,.6,s[1])),t,.65*i);return shade(a,.85+.3*noise(30*s[0]+8*s[1],30*s[2]+70*s[1]))}}),a=o=>[o,{...o,position:[-o.position[0],o.position[1],o.position[2]]}],r=[];for(const o of[1,-1])for(const[e,t]of[[.02,.04],[-.02,0],[-.06,-.03]])r.push({geometry:tube([[.1*o,.62+e,.36],[.24*o,.63+1.6*e,.34+t],[.36*o,.62+2.4*e,.3+t]],{radius:.006,sides:4,smoothness:4,color:[.15,.1,.08]})});return _0x521357(merge([{geometry:i},{geometry:sphere(),position:[0,.6,.27],scale:[.25,.19,.22],color:[...t,1]},{geometry:sphere(),position:[0,.65,.38],scale:[.11,.085,.09],color:[...s,1]},{geometry:sphere(),position:[.02,.675,.42],scale:.025,color:[1,1,1,1]},...a({geometry:shapeGeometry("roundedBox"),position:[.025,.52,.355],scale:[.04,.06,.02],color:[1,1,.96,1]}),...a({geometry:sphere(),position:[.11,.77,.25],scale:.075,color:[.04,.03,.03,1]}),...a({geometry:sphere(),position:[.095,.79,.285],scale:.022,color:[1,1,1,1]}),...a({geometry:sphere(),position:[.23,.84,0],scale:[.11,.09,.05],color:[...e,1]}),...a({geometry:sphere(),position:[.2,.6,.2],scale:[.11,.08,.06],color:[...mix(t,s,.35),1]}),...a({geometry:sphere(),position:[.2,.2,.3],scale:[.17,.09,.15],color:[...n,1]}),...r]),{center:!1,shine:.22})}),moleScale=o=>MOLE_HEIGHT*o.spacing/.93;export const molePosition=(o,e,t)=>{const[s,,n]=o.holes[e];return[s,t?0:1.05*-moleScale(o),n]};export const moleTop=o=>.9*moleScale(o);export function buildScene(o,e,t){const s=sceneryTint(t),n=spawnWorld(o,e.view,t,{...meadowFor(e),foreground:!1}),i=random(11),a=e.spacing,r=-e.holes[e.holes.length-1][2],l=-e.holes[0][2],m=(o,t)=>e.holes.every(([e,,s])=>Math.hypot(o-e,t-s)>a*HOLE_RADIUS*2),p=(e,t,a,r,l,p)=>{for(let h=0,d=0;h<r&&d<8*r;d++){const r=-(l+i()*(p-l)),d=(2*i()-1)*(.62*-r+.4);m(d,r)&&(n.push(o.spawn({mesh:e,position:[d,0,r],scale:t,rotation:quat.y(6.3*i()),color:tinted(a,s),pickable:!1})),h++)}};p(tuftMesh(),.9,[1,1,1,1],70,r-a,l+1.4*a);const h=["#FF6B9D","#FFFFFF","#FFD54F","#B784FF","#6FA8FF"].map(o=>toColor(o));for(let o=0;o<5;o++)p(flowerMesh(),.8,h[o],5,r-.5*a,l+1.4*a);p(rockMesh(),[.07,.05,.06],[.85,.8,.75,1],14,r-.5*a,l+a);const d=e.holes.map(([e,,t])=>o.spawn({mesh:moundMesh(),position:[e,0,t],scale:a,rotation:quat.y(6.3*i()),color:tinted([1,1,1,1],s),pickable:!1})),u=e.holes.map((t,n)=>o.spawn({mesh:moleMesh(),position:molePosition(e,n,!1),scale:moleScale(e),color:tinted([1,1,1,1],s),pickable:!1}));return{scenery:n,mounds:d,moles:u}}export function removeScene(o,e){for(const t of[...e.scenery,...e.mounds,...e.moles])o.despawn(t)}export function popUp(o,e,t,s){const n=t.moles[s];o.stopAnimation(n),o.set(n,{position:molePosition(e,s,!1),scale:moleScale(e),rotation:quat.y(0)}),o.animate(n,{position:molePosition(e,s,!0)},{spring:{stiffness:200,damping:15}}),o.animate(n,[{rotation:quat.y(.35),at:.3},{rotation:quat.y(-.35),at:.8},{rotation:quat.y(0)}],{duration:1.6,delay:.25,easing:"easeInOut"})}export function duck(o,e,t,s){const n=t.moles[s];o.stopAnimation(n),o.animate(n,{position:molePosition(e,s,!1)},{duration:.22,easing:"easeIn"})}export function bonk(o,e,t,s){const n=t.moles[s],i=moleScale(e);o.stopAnimation(n),o.animate(n,[{scale:[1.25*i,.55*i,1.25*i],at:.25},{scale:[1.1*i,.7*i,1.1*i]}],{duration:.18}),o.animate(n,{position:molePosition(e,s,!1)},{duration:.28,delay:.14,easing:"easeIn"}),o.animate(n,{scale:i},{duration:.01,delay:.45});const[a,,r]=e.holes[s];effects.sparkle(o,{position:[a,.75*moleTop(e),r],count:14,size:.06*e.spacing,speed:2.2*e.spacing,direction:[0,1,0],spread:1.1,lifetime:.55,gravity:4*-e.spacing,colors:[toColor("#FFD700"),toColor("#FFF59D"),toColor("#FFA500")]})}export function thud(o,e,t){const[s,,n]=e.holes[t];effects.shatter(o,{position:[s,.05*e.spacing,n],count:8,mesh:"sphere",size:.05*e.spacing,speed:1.6*e.spacing,direction:[0,1,0],spread:1.2,lifetime:.45,gravity:6*-e.spacing,colors:[toColor("#7A4E2D"),toColor("#A27449")],flash:!1})}const STREAK=[2.2,1.85,.7,.95],FLASH=[2.4,2.1,1.2,.8],DUST=[.86,.74,.56,.6];function dust(o,e,t,s){const[n,,i]=e.holes[t],a=e.spacing;effects.dust(o,{position:[n,.05*a,i],count:Math.round(10*s),size:.22*a*s,speed:2.2*a*s,direction:[0,1,0],spread:1.45,lifetime:.5,color:DUST,endSize:2.2})}export function hitEffect(o,e,t){const[s,,n]=e.holes[t],i=e.spacing,a=[s,.8*moleTop(e),n+.2*i];effects.flash(o,{position:a,color:FLASH,size:.5*i,lifetime:.16,endSize:2.4});const r=Math.random()*Math.PI;for(let e=0;e<8;e++){const t=r+e/8*Math.PI*2,[s,n]=[Math.cos(t),Math.sin(t)],l=.32*i,m=i*(.75+e%2*.2),p=o.spawn({mesh:"cube",position:[a[0]+s*l,a[1]+n*l,a[2]],rotation:quat.z(t),scale:[.2*i,.05*i,.02*i],color:STREAK,pickable:!1});o.animate(p,{position:[a[0]+s*m,a[1]+n*m,a[2]],scale:[.04*i,.012*i,.02*i],color:[STREAK[0],STREAK[1],STREAK[2],0]},{duration:.26,easing:"easeOut"}).then(()=>{o.has(p)&&o.despawn(p)})}dust(o,e,t,1)}export function missEffect(o,e,t){dust(o,e,t,.6)}export function hideAll(o,e,t){t.moles.forEach((t,s)=>{o.stopAnimation(t),o.set(t,{position:molePosition(e,s,!1),scale:moleScale(e),rotation:quat.y(0)})})}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";import{c as _0x25d8c4}from"react/compiler-runtime";import _0x2de817 from"react";import{Modal,Platform,Pressable,ScrollView,StyleSheet,Text,TouchableOpacity,useWindowDimensions,View}from"react-native";import{BackdropCard as _0x50c65f}from"../games/shared/BackdropCard.js";import{getGameTitle}from"../services/GamesConstants.js";import{GAMES_METADATA}from"../services/GamesMetadata.js";import{isThemedGame}from"../services/ThemeService.js";import{isTablet}from"../services/UtilsService.js";import{createThemedStyles,useGameTheme}from"./GameTheme.js";import{jsx as _0x5ad628,jsxs as _0x2e99e4,Fragment as _0x17d98c}from"react/jsx-runtime";const CustomSwitch=_0x2de817.memo(e=>{const t=_0x25d8c4(26),{label:o,value:i,onValueChange:n}=e,l=useGameTheme();let r;t[0]!==l?(r=getStyles(l),t[0]=l,t[1]=r):r=t[1];const a=r;let s,d;t[2]!==i?(s={checked:i},t[2]=i,t[3]=s):s=t[3],t[4]!==n||t[5]!==i?(d=()=>n(!i),t[4]=n,t[5]=i,t[6]=d):d=t[6];const g=i?l.SWITCH_TRACK_ON:l.SWITCH_TRACK_OFF;let h,m;t[7]!==g?(h={backgroundColor:g},t[7]=g,t[8]=h):h=t[8],t[9]!==a.switchTrack||t[10]!==h?(m=[a.switchTrack,h],t[9]=a.switchTrack,t[10]=h,t[11]=m):m=t[11];const p=i?25:3;let x,u,b,T;return t[12]!==p?(x={left:p},t[12]=p,t[13]=x):x=t[13],t[14]!==a.switchThumb||t[15]!==x?(u=_0x5ad628(View,{style:[a.switchThumb,x]}),t[14]=a.switchThumb,t[15]=x,t[16]=u):u=t[16],t[17]!==m||t[18]!==u?(b=_0x5ad628(View,{style:m,children:u}),t[17]=m,t[18]=u,t[19]=b):b=t[19],t[20]!==o||t[21]!==b||t[22]!==s||t[23]!==d||t[24]!==i?(T=_0x5ad628(Pressable,{accessibilityRole:"switch",accessibilityLabel:o,accessibilityState:s,"aria-checked":i,onPress:d,children:b}),t[20]=o,t[21]=b,t[22]=s,t[23]=d,t[24]=i,t[25]=T):T=t[25],T}),noopSettingsChange=e=>{},GameSettingsModalComponent=e=>{const t=_0x25d8c4(148),{gameId:o,settings:i,onSettingsChange:n}=e,l=void 0===n?noopSettingsChange:n,r=useGameTheme();let a;t[0]!==r?(a=getStyles(r),t[0]=r,t[1]=a):a=t[1];const s=a;let d;t[2]!==o?(d=getGameTitle(o),t[2]=o,t[3]=d):d=t[3];const g=d+" Settings",h=GAMES_METADATA[o],{isVisible:m,enableSounds:p,enableHaptics:x}=i,u=useWindowDimensions(),b="web"===Platform.OS,T=Math.max(0,Math.min(360,u.width-32)),w=Math.max(16,Math.min(i.anchor?.top??80,u.height-160)),C=Math.max(16,u.width-T-16),S=Math.min(C,Math.max(16,i.anchor?.right??16)),y=o;let f;t[4]!==y?(f=isThemedGame(y),t[4]=y,t[5]=f):f=t[5];const _=f,v="dark"===i.theme;let V;t[6]!==l||t[7]!==i?(V=e=>{l({...i,enableSounds:e})},t[6]=l,t[7]=i,t[8]=V):V=t[8];const R=V;let B;t[9]!==l||t[10]!==i?(B=e=>{l({...i,enableHaptics:e})},t[9]=l,t[10]=i,t[11]=B):B=t[11];const D=B;let k;t[12]!==l||t[13]!==i?(k=e=>{l({...i,theme:e?"dark":"light"})},t[12]=l,t[13]=i,t[14]=k):k=t[14];const E=k;let M;t[15]!==l||t[16]!==i?(M=()=>{l({...i,isVisible:!1})},t[15]=l,t[16]=i,t[17]=M):M=t[17];const L=M;let H,I,W;t[18]===Symbol.for("react.memo_cache_sentinel")?(H=b&&{backgroundColor:"transparent"},t[18]=H):H=t[18],t[19]!==s.overlay?(I=[s.overlay,H],t[19]=s.overlay,t[20]=I):I=t[20],t[21]!==L?(W=b&&_0x5ad628(Pressable,{accessibilityRole:"button",accessibilityLabel:"Dismiss game settings",style:StyleSheet.absoluteFill,onPress:L}),t[21]=L,t[22]=W):W=t[22];const A=b?g:void 0;let G,j,F;t[23]!==S||t[24]!==r||t[25]!==w||t[26]!==u.height||t[27]!==T?(G=b&&{position:"absolute",top:w,right:S,width:T,maxHeight:Math.max(0,u.height-w-16),backgroundColor:r.SURFACE,borderRadius:16,borderWidth:1,borderColor:r.SURFACE,padding:20,boxShadow:"0 12px 40px #0004"},t[23]=S,t[24]=r,t[25]=w,t[26]=u.height,t[27]=T,t[28]=G):G=t[28],t[29]!==s.container||t[30]!==G?(j=[s.container,G],t[29]=s.container,t[30]=G,t[31]=j):j=t[31],t[32]===Symbol.for("react.memo_cache_sentinel")?(F=!b&&_0x5ad628(_0x50c65f,{}),t[32]=F):F=t[32];const z=b&&s.popoverHeader;let P;t[33]!==s.header||t[34]!==z?(P=[s.header,z],t[33]=s.header,t[34]=z,t[35]=P):P=t[35];const O=b&&s.popoverHeaderTitle;let U;t[36]!==s.headerTitle||t[37]!==O?(U=[s.headerTitle,O],t[36]=s.headerTitle,t[37]=O,t[38]=U):U=t[38];const X=b?"Settings":g;let N;t[39]!==U||t[40]!==X?(N=_0x5ad628(Text,{accessibilityRole:"header",style:U,children:X}),t[39]=U,t[40]=X,t[41]=N):N=t[41];const K=b&&s.popoverCloseButton;let q;t[42]!==s.closeButton||t[43]!==K?(q=[s.closeButton,K],t[42]=s.closeButton,t[43]=K,t[44]=q):q=t[44];const Y=b&&s.popoverCloseButtonText;let J,Q,Z;t[45]!==s.closeButtonText||t[46]!==Y?(J=_0x5ad628(Text,{style:[s.closeButtonText,Y],children:"\u2715"}),t[45]=s.closeButtonText,t[46]=Y,t[47]=J):J=t[47],t[48]!==L||t[49]!==q||t[50]!==J?(Q=_0x5ad628(TouchableOpacity,{accessibilityRole:"button",accessibilityLabel:"Close settings",onPress:L,style:q,children:J}),t[48]=L,t[49]=q,t[50]=J,t[51]=Q):Q=t[51],t[52]!==P||t[53]!==N||t[54]!==Q?(Z=_0x2e99e4(View,{style:P,children:[N,Q]}),t[52]=P,t[53]=N,t[54]=Q,t[55]=Z):Z=t[55];const ee=b&&s.popoverScrollView;let te;t[56]!==s.scrollView||t[57]!==ee?(te=[s.scrollView,ee],t[56]=s.scrollView,t[57]=ee,t[58]=te):te=t[58];const oe=b&&s.popoverSection;let ie;t[59]!==s.section||t[60]!==oe?(ie=[s.section,oe],t[59]=s.section,t[60]=oe,t[61]=ie):ie=t[61];const ne=b&&s.popoverText;let le;t[62]!==s.toggleTitle||t[63]!==ne?(le=_0x5ad628(Text,{style:[s.toggleTitle,ne],children:"Sound Effects"}),t[62]=s.toggleTitle,t[63]=ne,t[64]=le):le=t[64];const re=b&&s.popoverText;let ae,se,ce,de,ge;t[65]!==s.toggleSubtitle||t[66]!==re?(ae=_0x5ad628(Text,{style:[s.toggleSubtitle,re],children:"Play sounds during gameplay"}),t[65]=s.toggleSubtitle,t[66]=re,t[67]=ae):ae=t[67],t[68]!==le||t[69]!==ae?(se=_0x2e99e4(View,{children:[le,ae]}),t[68]=le,t[69]=ae,t[70]=se):se=t[70],t[71]!==s.toggleLeft||t[72]!==se?(ce=_0x5ad628(View,{style:s.toggleLeft,children:se}),t[71]=s.toggleLeft,t[72]=se,t[73]=ce):ce=t[73],t[74]!==p||t[75]!==R?(de=_0x5ad628(CustomSwitch,{label:"Sound Effects",value:p,onValueChange:R}),t[74]=p,t[75]=R,t[76]=de):de=t[76],t[77]!==s.toggleContainer||t[78]!==ce||t[79]!==de?(ge=_0x2e99e4(View,{style:s.toggleContainer,children:[ce,de]}),t[77]=s.toggleContainer,t[78]=ce,t[79]=de,t[80]=ge):ge=t[80];const he=b&&s.popoverDivider;let me;t[81]!==s.divider||t[82]!==he?(me=_0x5ad628(View,{style:[s.divider,he]}),t[81]=s.divider,t[82]=he,t[83]=me):me=t[83];const pe=b&&s.popoverText;let xe;t[84]!==s.toggleTitle||t[85]!==pe?(xe=_0x5ad628(Text,{style:[s.toggleTitle,pe],children:"Haptic Feedback"}),t[84]=s.toggleTitle,t[85]=pe,t[86]=xe):xe=t[86];const ue=b&&s.popoverText;let be,Te,we,Ce,Se,ye,fe,_e,ve,Ve,Re,Be;return t[87]!==s.toggleSubtitle||t[88]!==ue?(be=_0x5ad628(Text,{style:[s.toggleSubtitle,ue],children:"Vibration on interactions"}),t[87]=s.toggleSubtitle,t[88]=ue,t[89]=be):be=t[89],t[90]!==xe||t[91]!==be?(Te=_0x2e99e4(View,{children:[xe,be]}),t[90]=xe,t[91]=be,t[92]=Te):Te=t[92],t[93]!==s.toggleLeft||t[94]!==Te?(we=_0x5ad628(View,{style:s.toggleLeft,children:Te}),t[93]=s.toggleLeft,t[94]=Te,t[95]=we):we=t[95],t[96]!==x||t[97]!==D?(Ce=_0x5ad628(CustomSwitch,{label:"Haptic Feedback",value:x,onValueChange:D}),t[96]=x,t[97]=D,t[98]=Ce):Ce=t[98],t[99]!==s.toggleContainer||t[100]!==we||t[101]!==Ce?(Se=_0x2e99e4(View,{style:s.toggleContainer,children:[we,Ce]}),t[99]=s.toggleContainer,t[100]=we,t[101]=Ce,t[102]=Se):Se=t[102],t[103]!==v||t[104]!==E||t[105]!==s.divider||t[106]!==s.popoverDivider||t[107]!==s.popoverText||t[108]!==s.toggleContainer||t[109]!==s.toggleLeft||t[110]!==s.toggleSubtitle||t[111]!==s.toggleTitle||t[112]!==_?(ye=_&&_0x2e99e4(_0x17d98c,{children:[_0x5ad628(View,{style:[s.divider,b&&s.popoverDivider]}),_0x2e99e4(View,{style:s.toggleContainer,children:[_0x5ad628(View,{style:s.toggleLeft,children:_0x2e99e4(View,{children:[_0x5ad628(Text,{style:[s.toggleTitle,b&&s.popoverText],children:"Dark Mode"}),_0x5ad628(Text,{style:[s.toggleSubtitle,b&&s.popoverText],children:"Play with the dark theme"})]})}),_0x5ad628(CustomSwitch,{label:"Dark Mode",value:v,onValueChange:E})]})]}),t[103]=v,t[104]=E,t[105]=s.divider,t[106]=s.popoverDivider,t[107]=s.popoverText,t[108]=s.toggleContainer,t[109]=s.toggleLeft,t[110]=s.toggleSubtitle,t[111]=s.toggleTitle,t[112]=_,t[113]=ye):ye=t[113],t[114]!==ie||t[115]!==ge||t[116]!==me||t[117]!==Se||t[118]!==ye?(fe=_0x2e99e4(View,{style:ie,children:[ge,me,Se,ye]}),t[114]=ie,t[115]=ge,t[116]=me,t[117]=Se,t[118]=ye,t[119]=fe):fe=t[119],t[120]!==h||t[121]!==s.gameDescription||t[122]!==s.instructionBadge||t[123]!==s.instructionNumber||t[124]!==s.instructionRow||t[125]!==s.instructionText||t[126]!==s.section||t[127]!==s.sectionLabel||t[128]!==s.sectionLabelRow?(_e=!b&&h&&_0x2e99e4(View,{style:[s.section],children:[_0x5ad628(View,{style:s.sectionLabelRow,children:_0x5ad628(Text,{style:s.sectionLabel,children:"How to Play"})}),_0x5ad628(Text,{style:s.gameDescription,children:h.description}),h.instructions.map((e,t)=>_0x2e99e4(View,{style:s.instructionRow,children:[_0x5ad628(View,{style:s.instructionBadge,children:_0x5ad628(Text,{style:s.instructionNumber,children:t+1})}),_0x5ad628(Text,{style:s.instructionText,children:e})]},t))]}),t[120]=h,t[121]=s.gameDescription,t[122]=s.instructionBadge,t[123]=s.instructionNumber,t[124]=s.instructionRow,t[125]=s.instructionText,t[126]=s.section,t[127]=s.sectionLabel,t[128]=s.sectionLabelRow,t[129]=_e):_e=t[129],t[130]!==s.scrollContent||t[131]!==te||t[132]!==fe||t[133]!==_e?(ve=_0x2e99e4(ScrollView,{style:te,contentContainerStyle:s.scrollContent,showsVerticalScrollIndicator:!1,children:[fe,_e]}),t[130]=s.scrollContent,t[131]=te,t[132]=fe,t[133]=_e,t[134]=ve):ve=t[134],t[135]!==A||t[136]!==j||t[137]!==Z||t[138]!==ve?(Ve=_0x2e99e4(View,{testID:b?"game-settings-popover":void 0,role:b?"dialog":void 0,accessibilityLabel:A,style:j,children:[F,Z,ve]}),t[135]=A,t[136]=j,t[137]=Z,t[138]=ve,t[139]=Ve):Ve=t[139],t[140]!==I||t[141]!==W||t[142]!==Ve?(Re=_0x2e99e4(View,{style:I,children:[W,Ve]}),t[140]=I,t[141]=W,t[142]=Ve,t[143]=Re):Re=t[143],t[144]!==L||t[145]!==m||t[146]!==Re?(Be=_0x5ad628(Modal,{visible:m,transparent:!0,onRequestClose:L,children:Re}),t[144]=L,t[145]=m,t[146]=Re,t[147]=Be):Be=t[147],Be};export const GameSettingsModal=_0x2de817.memo(GameSettingsModalComponent);GameSettingsModal.displayName="GameSettingsModal";const getStyles=createThemedStyles(e=>({overlay:{flex:1,backgroundColor:e.OVERLAY,justifyContent:"center",alignItems:"center"},container:{width:"95%",maxWidth:isTablet?500:360,maxHeight:"70%",borderRadius:10,overflow:"hidden",backgroundColor:e.BACKGROUND},header:{flexDirection:"row",justifyContent:"space-between",alignItems:"center",padding:10,paddingHorizontal:16,backgroundColor:e.SURFACE,borderBottomWidth:1,borderBottomColor:e.DIVIDER},headerTitle:{fontSize:20,fontWeight:"semibold",color:e.TEXT},closeButton:{padding:8},closeButtonText:{fontSize:18,fontWeight:"semibold",color:e.TEXT},popoverHeader:{padding:0,paddingHorizontal:0,marginBottom:16,backgroundColor:"transparent",borderBottomWidth:0},popoverText:{fontFamily:"inherit",color:e.TEXT},popoverHeaderTitle:{fontFamily:"inherit",fontSize:16,fontWeight:"700"},popoverCloseButton:{width:40,height:40,padding:0,alignItems:"center",justifyContent:"center",borderRadius:20,borderWidth:1,borderColor:e.SURFACE,backgroundColor:e.SURFACE},popoverCloseButtonText:{fontSize:18,fontWeight:"400",lineHeight:18},popoverScrollView:{padding:0,paddingBottom:0},popoverSection:{padding:0,marginBottom:0,borderWidth:0,backgroundColor:"transparent"},popoverDivider:{backgroundColor:e.SURFACE},scrollView:{flexShrink:1,padding:10,paddingBottom:0},scrollContent:{paddingBottom:0},section:{borderRadius:12,padding:16,marginBottom:10,backgroundColor:e.SURFACE,borderWidth:e.BORDER_WIDTH,borderColor:e.BORDER},toggleContainer:{flexDirection:"row",justifyContent:"space-between",alignItems:"center"},toggleLeft:{flexDirection:"row",alignItems:"center",flex:1,gap:12,marginRight:12},toggleTitle:{fontSize:15,fontWeight:"600",color:e.TEXT},toggleSubtitle:{fontSize:13,marginTop:2,color:e.TEXT_MUTED},divider:{height:1,backgroundColor:e.DIVIDER,marginVertical:12},sectionLabelRow:{flexDirection:"row",alignItems:"center",gap:8,marginBottom:8},sectionLabel:{fontSize:15,fontWeight:"600",color:e.TEXT},gameDescription:{fontSize:13,color:e.TEXT,lineHeight:19,marginBottom:12},instructionRow:{flexDirection:"row",alignItems:"flex-start",marginBottom:8},instructionBadge:{width:22,height:22,borderRadius:11,backgroundColor:e.CHIP,alignItems:"center",justifyContent:"center",marginRight:10,marginTop:1},instructionNumber:{fontSize:12,fontWeight:"700",color:e.TEXT},instructionText:{fontSize:14,color:e.TEXT,flex:1,lineHeight:20},switchTrack:{width:52,height:30,borderRadius:15,justifyContent:"center"},switchThumb:{width:24,height:24,borderRadius:12,position:"absolute",backgroundColor:e.SWITCH_THUMB,shadowColor:"#000",shadowOffset:{width:0,height:2},shadowOpacity:.25,shadowRadius:4,elevation:4}}));
|
|
1
|
+
"use strict";import{c as _0x3720c3}from"react/compiler-runtime";import _0xe5ca0d from"react";import{Modal,Platform,Pressable,ScrollView,StyleSheet,Text,TouchableOpacity,useWindowDimensions,View}from"react-native";import{BackdropCard as _0xeb36a1}from"../games/shared/BackdropCard.js";import{getGameTitle}from"../services/GamesConstants.js";import{GAMES_METADATA}from"../services/GamesMetadata.js";import{isThemedGame}from"../services/ThemeService.js";import{isTablet}from"../services/UtilsService.js";import{createThemedStyles,useGameTheme}from"./GameTheme.js";import{jsx as _0x67aab5,jsxs as _0xaadac8,Fragment as _0xb74cfb}from"react/jsx-runtime";const CustomSwitch=_0xe5ca0d.memo(e=>{const t=_0x3720c3(26),{label:o,value:i,onValueChange:a}=e,n=useGameTheme();let l;t[0]!==n?(l=getStyles(n),t[0]=n,t[1]=l):l=t[1];const r=l;let s,d;t[2]!==i?(s={checked:i},t[2]=i,t[3]=s):s=t[3],t[4]!==a||t[5]!==i?(d=()=>a(!i),t[4]=a,t[5]=i,t[6]=d):d=t[6];const g=i?n.SWITCH_TRACK_ON:n.SWITCH_TRACK_OFF;let h,b;t[7]!==g?(h={backgroundColor:g},t[7]=g,t[8]=h):h=t[8],t[9]!==r.switchTrack||t[10]!==h?(b=[r.switchTrack,h],t[9]=r.switchTrack,t[10]=h,t[11]=b):b=t[11];const m=i?25:3;let p,x,u,T;return t[12]!==m?(p={left:m},t[12]=m,t[13]=p):p=t[13],t[14]!==r.switchThumb||t[15]!==p?(x=_0x67aab5(View,{style:[r.switchThumb,p]}),t[14]=r.switchThumb,t[15]=p,t[16]=x):x=t[16],t[17]!==b||t[18]!==x?(u=_0x67aab5(View,{style:b,children:x}),t[17]=b,t[18]=x,t[19]=u):u=t[19],t[20]!==o||t[21]!==u||t[22]!==s||t[23]!==d||t[24]!==i?(T=_0x67aab5(Pressable,{accessibilityRole:"switch",accessibilityLabel:o,accessibilityState:s,"aria-checked":i,onPress:d,children:u}),t[20]=o,t[21]=u,t[22]=s,t[23]=d,t[24]=i,t[25]=T):T=t[25],T}),noopSettingsChange=e=>{},GameSettingsModalComponent=e=>{const t=_0x3720c3(148),{gameId:o,settings:i,onSettingsChange:a}=e,n=void 0===a?noopSettingsChange:a,l=useGameTheme();let r;t[0]!==l?(r=getStyles(l),t[0]=l,t[1]=r):r=t[1];const s=r;let d;t[2]!==o?(d=getGameTitle(o),t[2]=o,t[3]=d):d=t[3];const g=d+" Settings",h=GAMES_METADATA[o],{isVisible:b,enableSounds:m,enableHaptics:p}=i,x=useWindowDimensions(),u="web"===Platform.OS,T=Math.max(0,Math.min(360,x.width-32)),w=Math.max(16,Math.min(i.anchor?.top??80,x.height-160)),C=Math.max(16,x.width-T-16),S=Math.min(C,Math.max(16,i.anchor?.right??16)),y=o;let f;t[4]!==y?(f=isThemedGame(y),t[4]=y,t[5]=f):f=t[5];const _=f,v="dark"===i.theme;let V;t[6]!==n||t[7]!==i?(V=e=>{n({...i,enableSounds:e})},t[6]=n,t[7]=i,t[8]=V):V=t[8];const R=V;let B;t[9]!==n||t[10]!==i?(B=e=>{n({...i,enableHaptics:e})},t[9]=n,t[10]=i,t[11]=B):B=t[11];const D=B;let k;t[12]!==n||t[13]!==i?(k=e=>{n({...i,theme:e?"dark":"light"})},t[12]=n,t[13]=i,t[14]=k):k=t[14];const E=k;let M;t[15]!==n||t[16]!==i?(M=()=>{n({...i,isVisible:!1})},t[15]=n,t[16]=i,t[17]=M):M=t[17];const L=M;let H,I,W;t[18]===Symbol.for("react.memo_cache_sentinel")?(H=u&&{backgroundColor:"transparent"},t[18]=H):H=t[18],t[19]!==s.overlay?(I=[s.overlay,H],t[19]=s.overlay,t[20]=I):I=t[20],t[21]!==L?(W=u&&_0x67aab5(Pressable,{accessibilityRole:"button",accessibilityLabel:"Dismiss game settings",style:StyleSheet.absoluteFill,onPress:L}),t[21]=L,t[22]=W):W=t[22];const A=u?g:void 0;let G,j,F;t[23]!==S||t[24]!==l||t[25]!==w||t[26]!==x.height||t[27]!==T?(G=u&&{position:"absolute",top:w,right:S,width:T,maxHeight:Math.max(0,x.height-w-16),backgroundColor:l.SURFACE,borderRadius:16,borderWidth:1,borderColor:l.SURFACE,padding:20,boxShadow:"0 12px 40px #0004"},t[23]=S,t[24]=l,t[25]=w,t[26]=x.height,t[27]=T,t[28]=G):G=t[28],t[29]!==s.container||t[30]!==G?(j=[s.container,G],t[29]=s.container,t[30]=G,t[31]=j):j=t[31],t[32]===Symbol.for("react.memo_cache_sentinel")?(F=!u&&_0x67aab5(_0xeb36a1,{}),t[32]=F):F=t[32];const z=u&&s.popoverHeader;let P;t[33]!==s.header||t[34]!==z?(P=[s.header,z],t[33]=s.header,t[34]=z,t[35]=P):P=t[35];const O=u&&s.popoverHeaderTitle;let U;t[36]!==s.headerTitle||t[37]!==O?(U=[s.headerTitle,O],t[36]=s.headerTitle,t[37]=O,t[38]=U):U=t[38];const X=u?"Settings":g;let N;t[39]!==U||t[40]!==X?(N=_0x67aab5(Text,{accessibilityRole:"header",style:U,children:X}),t[39]=U,t[40]=X,t[41]=N):N=t[41];const K=u&&s.popoverCloseButton;let q;t[42]!==s.closeButton||t[43]!==K?(q=[s.closeButton,K],t[42]=s.closeButton,t[43]=K,t[44]=q):q=t[44];const Y=u&&s.popoverCloseButtonText;let J,Q,Z;t[45]!==s.closeButtonText||t[46]!==Y?(J=_0x67aab5(Text,{style:[s.closeButtonText,Y],children:"\u2715"}),t[45]=s.closeButtonText,t[46]=Y,t[47]=J):J=t[47],t[48]!==L||t[49]!==q||t[50]!==J?(Q=_0x67aab5(TouchableOpacity,{accessibilityRole:"button",accessibilityLabel:"Close settings",onPress:L,style:q,children:J}),t[48]=L,t[49]=q,t[50]=J,t[51]=Q):Q=t[51],t[52]!==P||t[53]!==N||t[54]!==Q?(Z=_0xaadac8(View,{style:P,children:[N,Q]}),t[52]=P,t[53]=N,t[54]=Q,t[55]=Z):Z=t[55];const ee=u&&s.popoverScrollView;let te;t[56]!==s.scrollView||t[57]!==ee?(te=[s.scrollView,ee],t[56]=s.scrollView,t[57]=ee,t[58]=te):te=t[58];const oe=u&&s.popoverSection;let ie;t[59]!==s.section||t[60]!==oe?(ie=[s.section,oe],t[59]=s.section,t[60]=oe,t[61]=ie):ie=t[61];const ae=u&&s.popoverText;let ne;t[62]!==s.toggleTitle||t[63]!==ae?(ne=_0x67aab5(Text,{style:[s.toggleTitle,ae],children:"Sound Effects"}),t[62]=s.toggleTitle,t[63]=ae,t[64]=ne):ne=t[64];const le=u&&s.popoverText;let re,se,ce,de,ge;t[65]!==s.toggleSubtitle||t[66]!==le?(re=_0x67aab5(Text,{style:[s.toggleSubtitle,le],children:"Play sounds during gameplay"}),t[65]=s.toggleSubtitle,t[66]=le,t[67]=re):re=t[67],t[68]!==ne||t[69]!==re?(se=_0xaadac8(View,{children:[ne,re]}),t[68]=ne,t[69]=re,t[70]=se):se=t[70],t[71]!==s.toggleLeft||t[72]!==se?(ce=_0x67aab5(View,{style:s.toggleLeft,children:se}),t[71]=s.toggleLeft,t[72]=se,t[73]=ce):ce=t[73],t[74]!==m||t[75]!==R?(de=_0x67aab5(CustomSwitch,{label:"Sound Effects",value:m,onValueChange:R}),t[74]=m,t[75]=R,t[76]=de):de=t[76],t[77]!==s.toggleContainer||t[78]!==ce||t[79]!==de?(ge=_0xaadac8(View,{style:s.toggleContainer,children:[ce,de]}),t[77]=s.toggleContainer,t[78]=ce,t[79]=de,t[80]=ge):ge=t[80];const he=u&&s.popoverDivider;let be;t[81]!==s.divider||t[82]!==he?(be=_0x67aab5(View,{style:[s.divider,he]}),t[81]=s.divider,t[82]=he,t[83]=be):be=t[83];const me=u&&s.popoverText;let pe;t[84]!==s.toggleTitle||t[85]!==me?(pe=_0x67aab5(Text,{style:[s.toggleTitle,me],children:"Haptic Feedback"}),t[84]=s.toggleTitle,t[85]=me,t[86]=pe):pe=t[86];const xe=u&&s.popoverText;let ue,Te,we,Ce,Se,ye,fe,_e,ve,Ve,Re,Be;return t[87]!==s.toggleSubtitle||t[88]!==xe?(ue=_0x67aab5(Text,{style:[s.toggleSubtitle,xe],children:"Vibration on interactions"}),t[87]=s.toggleSubtitle,t[88]=xe,t[89]=ue):ue=t[89],t[90]!==pe||t[91]!==ue?(Te=_0xaadac8(View,{children:[pe,ue]}),t[90]=pe,t[91]=ue,t[92]=Te):Te=t[92],t[93]!==s.toggleLeft||t[94]!==Te?(we=_0x67aab5(View,{style:s.toggleLeft,children:Te}),t[93]=s.toggleLeft,t[94]=Te,t[95]=we):we=t[95],t[96]!==p||t[97]!==D?(Ce=_0x67aab5(CustomSwitch,{label:"Haptic Feedback",value:p,onValueChange:D}),t[96]=p,t[97]=D,t[98]=Ce):Ce=t[98],t[99]!==s.toggleContainer||t[100]!==we||t[101]!==Ce?(Se=_0xaadac8(View,{style:s.toggleContainer,children:[we,Ce]}),t[99]=s.toggleContainer,t[100]=we,t[101]=Ce,t[102]=Se):Se=t[102],t[103]!==v||t[104]!==E||t[105]!==s.divider||t[106]!==s.popoverDivider||t[107]!==s.popoverText||t[108]!==s.toggleContainer||t[109]!==s.toggleLeft||t[110]!==s.toggleSubtitle||t[111]!==s.toggleTitle||t[112]!==_?(ye=_&&_0xaadac8(_0xb74cfb,{children:[_0x67aab5(View,{style:[s.divider,u&&s.popoverDivider]}),_0xaadac8(View,{style:s.toggleContainer,children:[_0x67aab5(View,{style:s.toggleLeft,children:_0xaadac8(View,{children:[_0x67aab5(Text,{style:[s.toggleTitle,u&&s.popoverText],children:"Dark Mode"}),_0x67aab5(Text,{style:[s.toggleSubtitle,u&&s.popoverText],children:"Play with the dark theme"})]})}),_0x67aab5(CustomSwitch,{label:"Dark Mode",value:v,onValueChange:E})]})]}),t[103]=v,t[104]=E,t[105]=s.divider,t[106]=s.popoverDivider,t[107]=s.popoverText,t[108]=s.toggleContainer,t[109]=s.toggleLeft,t[110]=s.toggleSubtitle,t[111]=s.toggleTitle,t[112]=_,t[113]=ye):ye=t[113],t[114]!==ie||t[115]!==ge||t[116]!==be||t[117]!==Se||t[118]!==ye?(fe=_0xaadac8(View,{style:ie,children:[ge,be,Se,ye]}),t[114]=ie,t[115]=ge,t[116]=be,t[117]=Se,t[118]=ye,t[119]=fe):fe=t[119],t[120]!==h||t[121]!==s.gameDescription||t[122]!==s.instructionBadge||t[123]!==s.instructionNumber||t[124]!==s.instructionRow||t[125]!==s.instructionText||t[126]!==s.section||t[127]!==s.sectionLabel||t[128]!==s.sectionLabelRow?(_e=!u&&h&&_0xaadac8(View,{style:[s.section],children:[_0x67aab5(View,{style:s.sectionLabelRow,children:_0x67aab5(Text,{style:s.sectionLabel,children:"How to Play"})}),_0x67aab5(Text,{style:s.gameDescription,children:h.description}),h.instructions.map((e,t)=>_0xaadac8(View,{style:s.instructionRow,children:[_0x67aab5(View,{style:s.instructionBadge,children:_0x67aab5(Text,{style:s.instructionNumber,children:t+1})}),_0x67aab5(Text,{style:s.instructionText,children:e})]},t))]}),t[120]=h,t[121]=s.gameDescription,t[122]=s.instructionBadge,t[123]=s.instructionNumber,t[124]=s.instructionRow,t[125]=s.instructionText,t[126]=s.section,t[127]=s.sectionLabel,t[128]=s.sectionLabelRow,t[129]=_e):_e=t[129],t[130]!==s.scrollContent||t[131]!==te||t[132]!==fe||t[133]!==_e?(ve=_0xaadac8(ScrollView,{style:te,contentContainerStyle:s.scrollContent,showsVerticalScrollIndicator:!1,children:[fe,_e]}),t[130]=s.scrollContent,t[131]=te,t[132]=fe,t[133]=_e,t[134]=ve):ve=t[134],t[135]!==A||t[136]!==j||t[137]!==Z||t[138]!==ve?(Ve=_0xaadac8(View,{testID:u?"game-settings-popover":void 0,role:u?"dialog":void 0,accessibilityLabel:A,style:j,children:[F,Z,ve]}),t[135]=A,t[136]=j,t[137]=Z,t[138]=ve,t[139]=Ve):Ve=t[139],t[140]!==I||t[141]!==W||t[142]!==Ve?(Re=_0xaadac8(View,{style:I,children:[W,Ve]}),t[140]=I,t[141]=W,t[142]=Ve,t[143]=Re):Re=t[143],t[144]!==L||t[145]!==b||t[146]!==Re?(Be=_0x67aab5(Modal,{visible:b,transparent:!0,onRequestClose:L,children:Re}),t[144]=L,t[145]=b,t[146]=Re,t[147]=Be):Be=t[147],Be};export const GameSettingsModal=_0xe5ca0d.memo(GameSettingsModalComponent);GameSettingsModal.displayName="GameSettingsModal";const getStyles=createThemedStyles(e=>({overlay:{flex:1,backgroundColor:e.OVERLAY,justifyContent:"center",alignItems:"center"},container:{width:"95%",maxWidth:isTablet?500:360,maxHeight:"70%",borderRadius:10,overflow:"hidden",backgroundColor:e.BACKGROUND},header:{flexDirection:"row",justifyContent:"space-between",alignItems:"center",padding:10,paddingHorizontal:16,backgroundColor:e.SURFACE,borderBottomWidth:1,borderBottomColor:e.DIVIDER},headerTitle:{fontSize:20,fontWeight:"semibold",color:e.TEXT},closeButton:{padding:8},closeButtonText:{fontSize:18,fontWeight:"semibold",color:e.TEXT},popoverHeader:{padding:0,paddingHorizontal:0,marginBottom:16,backgroundColor:"transparent",borderBottomWidth:0},popoverText:{fontFamily:"inherit",color:e.TEXT},popoverHeaderTitle:{fontFamily:"inherit",fontSize:16,fontWeight:"700"},popoverCloseButton:{width:40,height:40,padding:0,alignItems:"center",justifyContent:"center",borderRadius:20,borderWidth:1,borderColor:e.SURFACE,backgroundColor:e.SURFACE},popoverCloseButtonText:{fontSize:18,fontWeight:"400",lineHeight:18},popoverScrollView:{padding:0,paddingBottom:0},popoverSection:{padding:0,marginBottom:0,borderWidth:0,backgroundColor:"transparent"},popoverDivider:{backgroundColor:e.SURFACE},scrollView:{flexShrink:1,padding:10,paddingBottom:0},scrollContent:{paddingBottom:0},section:{borderRadius:12,padding:16,marginBottom:10,backgroundColor:e.SURFACE,borderWidth:e.BORDER_WIDTH,borderColor:e.BORDER},toggleContainer:{flexDirection:"row",justifyContent:"space-between",alignItems:"center"},toggleLeft:{flexDirection:"row",alignItems:"center",flex:1,gap:12,marginRight:12},toggleTitle:{fontSize:15,fontWeight:"600",color:e.TEXT},toggleSubtitle:{fontSize:13,marginTop:2,color:e.TEXT_MUTED},divider:{height:1,backgroundColor:e.DIVIDER,marginVertical:12},sectionLabelRow:{flexDirection:"row",alignItems:"center",gap:8,marginBottom:8},sectionLabel:{fontSize:15,fontWeight:"600",color:e.TEXT},gameDescription:{fontSize:13,color:e.TEXT,lineHeight:19,marginBottom:12},instructionRow:{flexDirection:"row",alignItems:"flex-start",marginBottom:8},instructionBadge:{width:22,height:22,borderRadius:11,backgroundColor:e.CHIP,alignItems:"center",justifyContent:"center",marginRight:10,marginTop:1},instructionNumber:{fontSize:12,fontWeight:"700",color:e.TEXT},instructionText:{fontSize:14,color:e.TEXT,flex:1,lineHeight:20},switchTrack:{width:52,height:30,borderRadius:15,justifyContent:"center"},switchThumb:{width:24,height:24,borderRadius:12,position:"absolute",backgroundColor:e.SWITCH_THUMB,shadowColor:"#000",shadowOffset:{width:0,height:2},shadowOpacity:.25,shadowRadius:4,elevation:4}}));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";import{c as
|
|
1
|
+
"use strict";import{c as _0x174d35}from"react/compiler-runtime";import _0x468bc9,{createContext,useContext}from"react";import{StyleSheet}from"react-native";import{GAME_THEMES,resolveGameTheme}from"../services/ThemeService.js";import{jsx as _0x3e827d}from"react/jsx-runtime";const GameThemeContext=createContext(GAME_THEMES.classic);export const GameThemeProvider=e=>{const t=_0x174d35(5),{theme:r,children:o}=e;let m,s;return t[0]!==r?(m=resolveGameTheme(r),t[0]=r,t[1]=m):m=t[1],t[2]!==o||t[3]!==m?(s=_0x3e827d(GameThemeContext.Provider,{value:m,children:o}),t[2]=o,t[3]=m,t[4]=s):s=t[4],s};export const useGameTheme=()=>useContext(GameThemeContext);export const createThemedStyles=e=>{const t=new Map;return r=>{const o=t.get(r);if(o)return o;const m=StyleSheet.create(e(r));return t.set(r,m),m}};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nayan-ui/games",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.21.0",
|
|
4
4
|
"description": "53 ready-made 3D games for React Native apps and React websites, powered by the Nayan engine. One component per game.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"3d-games",
|
|
@@ -33,7 +33,6 @@
|
|
|
33
33
|
},
|
|
34
34
|
"source": "./src/index.tsx",
|
|
35
35
|
"files": [
|
|
36
|
-
"src",
|
|
37
36
|
"lib",
|
|
38
37
|
"!**/__tests__",
|
|
39
38
|
"!**/__fixtures__",
|
|
Binary file
|
|
Binary file
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "Wilds Explorer",
|
|
3
|
-
"seed": 1,
|
|
4
|
-
"gender": 1,
|
|
5
|
-
"age": 0.53,
|
|
6
|
-
"muscle": 0.65,
|
|
7
|
-
"weight": 0.48,
|
|
8
|
-
"height": 0.55,
|
|
9
|
-
"proportions": 0.7,
|
|
10
|
-
"african": 0.2,
|
|
11
|
-
"asian": 0.1,
|
|
12
|
-
"caucasian": 0.7,
|
|
13
|
-
"breastSize": 0.5,
|
|
14
|
-
"breastFirmness": 0.5,
|
|
15
|
-
"modifiers": {},
|
|
16
|
-
"skin": "auto",
|
|
17
|
-
"skinTint": "#ffffff",
|
|
18
|
-
"eyes": "brownlight",
|
|
19
|
-
"eyebrows": "eyebrow001",
|
|
20
|
-
"eyelashes": "eyelashes01",
|
|
21
|
-
"hair": "short02",
|
|
22
|
-
"hairTint": "#ffffff",
|
|
23
|
-
"hairColor": "#2a1e16",
|
|
24
|
-
"facialHair": "none",
|
|
25
|
-
"beardColor": "#241a13",
|
|
26
|
-
"tattoos": [],
|
|
27
|
-
"tattooInk": "#1c2128",
|
|
28
|
-
"earrings": "none",
|
|
29
|
-
"earringMetal": "gold",
|
|
30
|
-
"outfit": "male_casualsuit05",
|
|
31
|
-
"top": "none",
|
|
32
|
-
"bottom": "none",
|
|
33
|
-
"underwear": true,
|
|
34
|
-
"accessories": [],
|
|
35
|
-
"garmentStyles": {},
|
|
36
|
-
"shoes": "shoes01",
|
|
37
|
-
"hat": "none",
|
|
38
|
-
"outfitTint": "#ffffff",
|
|
39
|
-
"detail": "medium",
|
|
40
|
-
"rig": "game",
|
|
41
|
-
"faceBones": false,
|
|
42
|
-
"restPose": "A",
|
|
43
|
-
"animations": true,
|
|
44
|
-
"weapon": "none",
|
|
45
|
-
"vehicle": "none",
|
|
46
|
-
"expression": "neutral",
|
|
47
|
-
"faceShapes": false,
|
|
48
|
-
"speechShapes": false,
|
|
49
|
-
"teeth": "none",
|
|
50
|
-
"tongue": false
|
|
51
|
-
}
|
|
@@ -1,222 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "Treasure Hunt Explorer",
|
|
3
|
-
"model": "explorer.glb",
|
|
4
|
-
"atlas": "../../textures/explorer-atlas.png",
|
|
5
|
-
"atlasSize": 1024,
|
|
6
|
-
"atlasPackingSize": 2048,
|
|
7
|
-
"atlasEncoding": {
|
|
8
|
-
"format": "png",
|
|
9
|
-
"palette": true,
|
|
10
|
-
"quality": 90,
|
|
11
|
-
"colours": 256,
|
|
12
|
-
"dither": 0.5
|
|
13
|
-
},
|
|
14
|
-
"source": "https://github.com/olatunde85/3d-gen",
|
|
15
|
-
"sourceCommit": "0c3473d7d46a2badcdcd1dcfd4aeb0762eb04b20",
|
|
16
|
-
"assets": "https://ara3dgen.com/assets/",
|
|
17
|
-
"bodyAssets": "MakeHuman system assets",
|
|
18
|
-
"license": "CC0-1.0",
|
|
19
|
-
"motionCapture": "CMU Graphics Lab Motion Capture Database; see LICENSE.txt",
|
|
20
|
-
"modelSha256": "005ea2045b17e28dc36ab94347888c91d4a326983d7b4161e5104421c6883d40",
|
|
21
|
-
"compression": {
|
|
22
|
-
"extension": "EXT_meshopt_compression",
|
|
23
|
-
"originalBytes": 2198876,
|
|
24
|
-
"compressedBytes": 559820,
|
|
25
|
-
"floatBits": 16,
|
|
26
|
-
"normalBits": 16,
|
|
27
|
-
"rotationBits": 16,
|
|
28
|
-
"uvBits": 16,
|
|
29
|
-
"weightBits": 16,
|
|
30
|
-
"preservesVertexOrder": true,
|
|
31
|
-
"preservesTopology": true,
|
|
32
|
-
"preservesAnimationTiming": true
|
|
33
|
-
},
|
|
34
|
-
"height": 2.06,
|
|
35
|
-
"cameraHeight": 1.44,
|
|
36
|
-
"vertexCount": 17737,
|
|
37
|
-
"indexCount": 103968,
|
|
38
|
-
"jointCount": 66,
|
|
39
|
-
"runtime": "Native skeletal GLB with a shared texture atlas",
|
|
40
|
-
"soleVertices": [
|
|
41
|
-
[
|
|
42
|
-
10716, 10744, 10746, 10748, 10749, 10750, 10751, 10752, 10753, 10754, 10755, 10756, 10757, 10758, 10759, 10760, 10761, 10762, 10763, 10764,
|
|
43
|
-
10765, 10766, 10767, 10768, 10769, 10770, 10771, 10772, 10773, 10774, 10775, 10776, 10777, 10778, 10798, 10812, 10819, 10820, 10821, 10822,
|
|
44
|
-
10823, 10824, 10825, 10826, 10827, 10828, 10829, 10830, 10831, 10832, 10833, 10834, 10835, 10836, 10837, 10838, 10839, 10840, 10841, 10842,
|
|
45
|
-
10861, 10862, 10863, 10864, 10865, 10866, 10867, 10869, 10870, 10871, 10872, 10873, 10874, 10875, 10876, 10877, 10878, 10906, 10907, 10908,
|
|
46
|
-
10909, 10910, 10911, 10912, 10913, 10914, 10915, 10916, 10917, 10918, 10919, 10920, 10921, 10922, 10923, 10966, 10967, 10968, 10969, 10970,
|
|
47
|
-
10971, 10972, 10973, 10974, 10975, 10976, 10977, 10978, 10979, 10980, 10981, 10984, 10985, 10986, 10987, 10990, 10991, 10992, 10993, 10994,
|
|
48
|
-
10995, 10996, 10997, 10998, 10999, 11000, 11001, 11002, 11003, 11004, 11005, 11006, 11007, 11008, 11009, 11030, 11031, 11032, 11033, 11034,
|
|
49
|
-
11035, 11036, 11037, 11038, 11039, 11040, 11041, 11054, 11055, 11056, 11057, 11058, 11059, 11060, 11061, 11062, 11063, 11064, 11065, 11066,
|
|
50
|
-
11067, 11068, 11069, 11070, 11071, 11072, 11073, 11118, 11119, 11120, 11121, 11122, 11123, 11124, 11125, 11126, 11127, 11128, 11129, 11130,
|
|
51
|
-
11131, 11132, 11133, 11135, 11137, 11138, 11139, 11140, 11141, 11142, 11143, 11144, 11145, 11146, 11147, 11148, 11149, 11150, 11151, 11152,
|
|
52
|
-
11153, 11169, 11170, 11171, 11172, 11173, 11174, 11175, 11176, 11177, 11187, 11188, 11189, 11190, 11191, 11192, 11193, 11194, 11195, 11196,
|
|
53
|
-
11197, 11198, 11199, 11200, 11201, 11292, 11293, 11294, 11295, 11296, 11297, 11298, 11299, 11300, 11301, 11302, 11303, 11304, 11305, 11306,
|
|
54
|
-
11307, 11308, 11309, 11310, 11311, 11312, 11313, 11314, 11315, 11316, 11317, 11318, 11319, 11320, 11321, 11322, 11323, 11324, 11325, 11326,
|
|
55
|
-
11327, 11328, 11329, 11330, 11331, 11332, 11339, 11343, 11346, 11347, 11348, 11349, 11350, 11351, 11353, 11354, 11357, 11358, 11359, 11361,
|
|
56
|
-
11362, 11363, 11364, 11365, 11366, 11367, 11368, 11369, 11370, 11376, 11377, 11390, 11391, 11392, 11394, 11395, 11396, 11397, 11399, 11400,
|
|
57
|
-
11401, 11402, 11403, 11404, 11405, 11406, 11407, 11408, 11409, 11410, 11411, 11412, 11418, 11419, 11421, 11422, 11423, 11426, 11427, 11428,
|
|
58
|
-
11429, 11430, 11431, 11432, 11433, 11434, 11435, 11436, 11437, 11438, 11439, 11448, 11449, 11450, 11451, 11452, 11453, 11454, 11455, 11456,
|
|
59
|
-
11457, 11458, 11459, 11460, 11461, 11462, 11463, 11464, 11465, 11466, 11467, 11468, 11469, 11470, 11471, 11472, 11473, 11474, 11475, 11478,
|
|
60
|
-
11479, 11480, 11481, 11482, 11483, 11484, 11485, 11486, 11487, 11488, 11491, 11492, 11493, 11494, 11495, 11496
|
|
61
|
-
],
|
|
62
|
-
[
|
|
63
|
-
9918, 9945, 9948, 9949, 9951, 9952, 9953, 9954, 9955, 9956, 9957, 9958, 9959, 9960, 9961, 9962, 9963, 9964, 9965, 9966, 9967, 9968, 9969, 9970,
|
|
64
|
-
9971, 9972, 9973, 9974, 9975, 9976, 9977, 9978, 9979, 9980, 10000, 10014, 10021, 10022, 10023, 10024, 10025, 10026, 10027, 10028, 10029, 10030,
|
|
65
|
-
10031, 10032, 10033, 10034, 10035, 10036, 10037, 10038, 10039, 10040, 10041, 10042, 10043, 10044, 10063, 10064, 10065, 10066, 10067, 10068,
|
|
66
|
-
10070, 10071, 10072, 10073, 10074, 10075, 10076, 10077, 10078, 10079, 10080, 10108, 10109, 10110, 10111, 10112, 10113, 10114, 10115, 10116,
|
|
67
|
-
10117, 10118, 10119, 10120, 10121, 10122, 10123, 10124, 10125, 10168, 10169, 10170, 10171, 10172, 10173, 10174, 10175, 10176, 10177, 10178,
|
|
68
|
-
10179, 10180, 10181, 10182, 10183, 10186, 10187, 10188, 10189, 10192, 10193, 10194, 10195, 10196, 10197, 10198, 10199, 10200, 10201, 10202,
|
|
69
|
-
10203, 10204, 10205, 10206, 10207, 10208, 10209, 10210, 10211, 10232, 10233, 10234, 10235, 10236, 10237, 10238, 10239, 10240, 10241, 10242,
|
|
70
|
-
10243, 10256, 10257, 10258, 10259, 10260, 10261, 10262, 10263, 10264, 10265, 10266, 10267, 10268, 10269, 10270, 10271, 10272, 10273, 10274,
|
|
71
|
-
10275, 10320, 10321, 10322, 10323, 10324, 10325, 10326, 10327, 10328, 10329, 10330, 10331, 10332, 10333, 10334, 10335, 10338, 10339, 10340,
|
|
72
|
-
10341, 10342, 10343, 10344, 10345, 10346, 10347, 10348, 10349, 10350, 10351, 10352, 10353, 10354, 10355, 10371, 10372, 10373, 10374, 10375,
|
|
73
|
-
10376, 10377, 10378, 10379, 10389, 10390, 10391, 10392, 10393, 10394, 10395, 10396, 10397, 10398, 10399, 10400, 10401, 10402, 10403, 10494,
|
|
74
|
-
10495, 10496, 10497, 10498, 10499, 10500, 10501, 10502, 10503, 10504, 10505, 10506, 10507, 10508, 10509, 10510, 10511, 10512, 10513, 10514,
|
|
75
|
-
10515, 10516, 10517, 10518, 10519, 10520, 10521, 10522, 10523, 10524, 10525, 10526, 10527, 10528, 10529, 10530, 10531, 10532, 10533, 10534,
|
|
76
|
-
10541, 10543, 10548, 10549, 10550, 10551, 10552, 10553, 10556, 10557, 10558, 10560, 10561, 10563, 10564, 10565, 10566, 10567, 10568, 10569,
|
|
77
|
-
10570, 10571, 10572, 10578, 10579, 10592, 10594, 10595, 10596, 10597, 10598, 10599, 10601, 10602, 10603, 10604, 10605, 10606, 10607, 10608,
|
|
78
|
-
10609, 10610, 10611, 10612, 10613, 10615, 10621, 10622, 10623, 10624, 10625, 10628, 10629, 10630, 10631, 10632, 10633, 10634, 10635, 10636,
|
|
79
|
-
10637, 10638, 10639, 10640, 10641, 10650, 10651, 10652, 10653, 10654, 10655, 10656, 10657, 10658, 10659, 10660, 10661, 10662, 10663, 10664,
|
|
80
|
-
10665, 10666, 10667, 10668, 10669, 10670, 10671, 10672, 10673, 10674, 10675, 10676, 10677, 10680, 10681, 10682, 10683, 10684, 10685, 10686,
|
|
81
|
-
10687, 10688, 10689, 10690, 10693, 10694, 10695, 10696, 10697, 10698
|
|
82
|
-
]
|
|
83
|
-
],
|
|
84
|
-
"bodyContactVertices": [
|
|
85
|
-
357, 801, 852, 976, 993, 1043, 1595, 1619, 1624, 1640, 1659, 1661, 1662, 1665, 1666, 1669, 1680, 1702, 1703, 1715, 1717, 1736, 1747, 1749, 1759,
|
|
86
|
-
1760, 1768, 1769, 1779, 1783, 1790, 1791, 1807, 1808, 1809, 1811, 1812, 1813, 1833, 1834, 1839, 1844, 1845, 1846, 1849, 1873, 1878, 1879, 1893,
|
|
87
|
-
1894, 1895, 1896, 1901, 1922, 1923, 1925, 1934, 1938, 1958, 1961, 1963, 1964, 1966, 1967, 1968, 2002, 2003, 2017, 2039, 2040, 2055, 2060, 2068,
|
|
88
|
-
2069, 2083, 2084, 2090, 2093, 2100, 2111, 2112, 2121, 2146, 2149, 2153, 2159, 2172, 2173, 2174, 2178, 2179, 2180, 2183, 2184, 2194, 2195, 2196,
|
|
89
|
-
2197, 2201, 2206, 2208, 2211, 2214, 2215, 2218, 2221, 2227, 2234, 2258, 2260, 2261, 2262, 2265, 2266, 2268, 2279, 2316, 2340, 2353, 2356, 2359,
|
|
90
|
-
2367, 2368, 2381, 2391, 2393, 2398, 2412, 2413, 2445, 2446, 2448, 2449, 2450, 2452, 2457, 2458, 2459, 2467, 2478, 2480, 2483, 2484, 2492, 2493,
|
|
91
|
-
2494, 2495, 2496, 2497, 2498, 2506, 2507, 2511, 2512, 2513, 2514, 2522, 2524, 2526, 2532, 2533, 2558, 2561, 2562, 2563, 2564, 2566, 2569, 2571,
|
|
92
|
-
2572, 2575, 2579, 2602, 2603, 2617, 2631, 2641, 2653, 2656, 2665, 2668, 2682, 2689, 2699, 2702, 2709, 2711, 2748, 2750, 2751, 2752, 2758, 2774,
|
|
93
|
-
2775, 2776, 2780, 2787, 2794, 2795, 2796, 2797, 2799, 2808, 2809, 2816, 2818, 2824, 2827, 2828, 2831, 2839, 2851, 2858, 2859, 2860, 2862, 2863,
|
|
94
|
-
2865, 2866, 2869, 2872, 2884, 2895, 2898, 2900, 2901, 2907, 2908, 2910, 2918, 2919, 2922, 2926, 2953, 2960, 2968, 2969, 2970, 2972, 2996, 3007,
|
|
95
|
-
3063, 3064, 3067, 3068, 3075, 3080, 3086, 3087, 3091, 3094, 3095, 3096, 3098, 3102, 3106, 3118, 3119, 3122, 3144, 3145, 3147, 3171, 3195, 3202,
|
|
96
|
-
3208, 3218, 3275, 3293, 3294, 3367, 3368, 3372, 3373, 3376, 3380, 3381, 3384, 3386, 3387, 3399, 3411, 3415, 3416, 3419, 3435, 3436, 3439, 3445,
|
|
97
|
-
3566, 3576, 3626, 3639, 3741, 3750, 5017, 5815, 5820, 5835, 5851, 5853, 5854, 5855, 5858, 5859, 5872, 5893, 5894, 5907, 5909, 5928, 5937, 5943,
|
|
98
|
-
5951, 5954, 5961, 5962, 5973, 5977, 5982, 5983, 5999, 6000, 6001, 6003, 6005, 6006, 6026, 6027, 6029, 6036, 6038, 6039, 6043, 6065, 6070, 6071,
|
|
99
|
-
6085, 6086, 6087, 6088, 6094, 6114, 6115, 6117, 6126, 6128, 6150, 6151, 6156, 6157, 6158, 6160, 6161, 6193, 6194, 6209, 6229, 6232, 6247, 6254,
|
|
100
|
-
6261, 6262, 6276, 6277, 6283, 6286, 6290, 6303, 6306, 6313, 6338, 6343, 6347, 6349, 6364, 6365, 6366, 6370, 6371, 6372, 6375, 6376, 6386, 6387,
|
|
101
|
-
6388, 6389, 6394, 6397, 6399, 6404, 6405, 6407, 6410, 6413, 6419, 6426, 6450, 6451, 6452, 6454, 6455, 6458, 6460, 6473, 6508, 6532, 6546, 6550,
|
|
102
|
-
6551, 6559, 6562, 6571, 6582, 6586, 6592, 6605, 6606, 6638, 6639, 6640, 6642, 6643, 6644, 6649, 6650, 6651, 6661, 6670, 6672, 6675, 6676, 6684,
|
|
103
|
-
6685, 6686, 6687, 6688, 6689, 6690, 6697, 6700, 6703, 6704, 6705, 6706, 6714, 6716, 6718, 6724, 6725, 6750, 6751, 6754, 6756, 6757, 6758, 6759,
|
|
104
|
-
6764, 6765, 6769, 6773, 6793, 6794, 6809, 6823, 6835, 6846, 6850, 6857, 6858, 6874, 6883, 6891, 6892, 6901, 6903, 6940, 6942, 6944, 6945, 6950,
|
|
105
|
-
6966, 6967, 6968, 6972, 6979, 6986, 6987, 6988, 6989, 6991, 6999, 7002, 7009, 7010, 7016, 7019, 7020, 7023, 7031, 7043, 7050, 7051, 7052, 7055,
|
|
106
|
-
7056, 7057, 7058, 7061, 7064, 7076, 7088, 7090, 7092, 7093, 7099, 7100, 7102, 7109, 7110, 7114, 7120, 7144, 7152, 7160, 7161, 7162, 7163, 7188,
|
|
107
|
-
7199, 7254, 7256, 7257, 7260, 7267, 7272, 7279, 7280, 7283, 7286, 7287, 7288, 7291, 7294, 7298, 7310, 7311, 7312, 7337, 7338, 7339, 7361, 7387,
|
|
108
|
-
7395, 7400, 7410, 7467, 7485, 7486, 7559, 7560, 7564, 7565, 7568, 7572, 7573, 7576, 7578, 7579, 7593, 7603, 7607, 7608, 7611, 7627, 7628, 7631,
|
|
109
|
-
7637, 7756, 7766, 7816, 7829, 7935, 8173, 9955, 9976, 9977, 9994, 10019, 10023, 10041, 10061, 10076, 10139, 10166, 10177, 10181, 10187, 10188,
|
|
110
|
-
10327, 10334, 10396, 10400, 10417, 10439, 10442, 10448, 10461, 10754, 10774, 10776, 10794, 10818, 10821, 10840, 10858, 10875, 10939, 10965, 10975,
|
|
111
|
-
10979, 10985, 10987, 11125, 11131, 11196, 11198, 11215, 11237, 11240, 11246, 11259, 11517, 11632, 11634, 11639, 11642, 11644, 11645, 11648, 11650,
|
|
112
|
-
11709, 11787, 11793, 11797, 11799, 11802, 11804, 11819, 11822, 11857, 11860, 11862, 11869, 11882, 11917, 11920, 11921, 11923, 11924, 11938, 11964,
|
|
113
|
-
11965, 12001, 12013, 12058, 12061, 12062, 12064, 12078, 12095, 12096, 12097, 12099, 12100, 12102, 12105, 12112, 12117, 12120, 12131, 12145, 12152,
|
|
114
|
-
12157, 12201, 12202, 12203, 12205, 12206, 12209, 12210, 12216, 12221, 12237, 12263, 12294, 12306, 12320, 12327, 12330, 12349, 12364, 12367, 12368,
|
|
115
|
-
12377, 12378, 12381, 12384, 12386, 12396, 12397, 12400, 12401, 12404, 12464, 12489, 12490, 12578, 12583, 12585, 12589, 12593, 12598, 12599, 12615,
|
|
116
|
-
12622, 12647, 12659, 12660, 12697, 12703, 12715, 12717, 12720, 12724, 12727, 12730, 12742, 12753, 12773, 12800, 12806, 12828, 12915, 12916, 12941,
|
|
117
|
-
12963, 12970, 12994, 12996, 12997, 12999, 13013, 13015, 13017, 13027, 13036, 13039, 13046, 13048, 13049, 13050, 13069, 13072, 13077, 13082, 13092,
|
|
118
|
-
13093, 13106, 13107, 13109, 13110, 13111, 13122, 13153, 13158, 13208, 13209, 13211, 13212, 13213, 13216, 13217, 13222, 13229, 13245, 13271, 13301,
|
|
119
|
-
13312, 13327, 13335, 13340, 13357, 13370, 13375, 13378, 13384, 13385, 13389, 13392, 13394, 13405, 13406, 13409, 13410, 13414, 13471, 13496, 13497,
|
|
120
|
-
13583, 13585, 13589, 13593, 13599, 13600, 13617, 13622, 13647, 13658, 13659, 13698, 13703, 13720, 13723, 13751, 13771, 13797, 13826, 13912, 13914,
|
|
121
|
-
13937, 13965, 13987, 13990, 13991, 13993, 14009, 14011, 14030, 14033, 14042, 14043, 14044, 14063, 14066, 14076, 14087, 14088, 14123, 14148, 14422,
|
|
122
|
-
14423, 14525, 14528, 14745, 14747, 14750, 14751, 14755, 14770, 14772, 14784, 14814, 14817, 14818, 14832, 14833, 14835, 14837, 14863, 14869, 14870,
|
|
123
|
-
14874, 14892, 14897, 14919, 14920, 14925, 14926, 14930, 14937, 14940, 14942, 14943, 14944, 14949, 14952, 14953, 14977, 14979, 14981, 14991, 14996,
|
|
124
|
-
15002, 15005, 15079, 15229, 15245, 15250, 15254, 15276, 15284, 15287, 15295, 15312, 15313, 15475, 15481, 15482, 15483, 15484, 15505, 15513, 15514,
|
|
125
|
-
15515, 15546, 15597, 15623, 15664, 15702, 15743, 15799, 15802, 15863, 15918, 15978, 16027, 16228, 16545, 16696, 16785, 16787, 16803, 16897, 16970,
|
|
126
|
-
16977, 17044, 17211, 17471, 17677, 17684
|
|
127
|
-
],
|
|
128
|
-
"clips": {
|
|
129
|
-
"idle": {
|
|
130
|
-
"duration": 3.2,
|
|
131
|
-
"loop": true
|
|
132
|
-
},
|
|
133
|
-
"walk": {
|
|
134
|
-
"duration": 1.075,
|
|
135
|
-
"loop": true
|
|
136
|
-
},
|
|
137
|
-
"run": {
|
|
138
|
-
"duration": 0.7333,
|
|
139
|
-
"loop": true
|
|
140
|
-
},
|
|
141
|
-
"punchStart": {
|
|
142
|
-
"duration": 0.52,
|
|
143
|
-
"loop": false
|
|
144
|
-
},
|
|
145
|
-
"punchRight": {
|
|
146
|
-
"duration": 0.52,
|
|
147
|
-
"loop": false
|
|
148
|
-
},
|
|
149
|
-
"punchLeft": {
|
|
150
|
-
"duration": 0.52,
|
|
151
|
-
"loop": false
|
|
152
|
-
},
|
|
153
|
-
"combatIdle": {
|
|
154
|
-
"duration": 1.3,
|
|
155
|
-
"loop": true
|
|
156
|
-
},
|
|
157
|
-
"combatExit": {
|
|
158
|
-
"duration": 0.18,
|
|
159
|
-
"loop": false
|
|
160
|
-
},
|
|
161
|
-
"hit": {
|
|
162
|
-
"duration": 0.42,
|
|
163
|
-
"loop": false
|
|
164
|
-
},
|
|
165
|
-
"fall": {
|
|
166
|
-
"duration": 1.05,
|
|
167
|
-
"loop": false
|
|
168
|
-
},
|
|
169
|
-
"celebrate": {
|
|
170
|
-
"duration": 1.6,
|
|
171
|
-
"loop": true
|
|
172
|
-
}
|
|
173
|
-
},
|
|
174
|
-
"combat": {
|
|
175
|
-
"contactTime": 0.16,
|
|
176
|
-
"choreography": "Planted stance, independent arm IK, torso-driven straight punches and guard transitions"
|
|
177
|
-
},
|
|
178
|
-
"materialTiles": [
|
|
179
|
-
{
|
|
180
|
-
"texture": "skin_young_caucasian_male.jpg",
|
|
181
|
-
"x": 8,
|
|
182
|
-
"y": 8,
|
|
183
|
-
"size": 1008
|
|
184
|
-
},
|
|
185
|
-
{
|
|
186
|
-
"texture": "eyes_brownlight.png",
|
|
187
|
-
"x": 8,
|
|
188
|
-
"y": 1032,
|
|
189
|
-
"size": 496
|
|
190
|
-
},
|
|
191
|
-
{
|
|
192
|
-
"texture": "eyebrows_eyebrow001.png",
|
|
193
|
-
"x": 520,
|
|
194
|
-
"y": 1032,
|
|
195
|
-
"size": 496
|
|
196
|
-
},
|
|
197
|
-
{
|
|
198
|
-
"texture": "eyelashes_eyelashes01.png",
|
|
199
|
-
"x": 1032,
|
|
200
|
-
"y": 1032,
|
|
201
|
-
"size": 496
|
|
202
|
-
},
|
|
203
|
-
{
|
|
204
|
-
"texture": "outfit_shoes01.jpg",
|
|
205
|
-
"x": 1544,
|
|
206
|
-
"y": 1032,
|
|
207
|
-
"size": 496
|
|
208
|
-
},
|
|
209
|
-
{
|
|
210
|
-
"texture": "outfit_male_casualsuit05.jpg",
|
|
211
|
-
"x": 1032,
|
|
212
|
-
"y": 8,
|
|
213
|
-
"size": 1008
|
|
214
|
-
},
|
|
215
|
-
{
|
|
216
|
-
"texture": "hair_short02.png",
|
|
217
|
-
"x": 8,
|
|
218
|
-
"y": 1544,
|
|
219
|
-
"size": 496
|
|
220
|
-
}
|
|
221
|
-
]
|
|
222
|
-
}
|
|
Binary file
|