react-native-games 1.1.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +58 -7
- package/lib/module/games/balloon-blaster/BalloonBlaster.js +1 -167
- package/lib/module/games/balloon-blaster/BalloonBlaster.js.map +1 -1
- package/lib/module/games/balloon-blaster/BalloonBlasterConstants.js +1 -182
- package/lib/module/games/balloon-blaster/BalloonBlasterConstants.js.map +1 -1
- package/lib/module/games/balloon-blaster/BalloonBlasterService.js +1 -318
- package/lib/module/games/balloon-blaster/BalloonBlasterStore.js +1 -183
- package/lib/module/games/balloon-blaster/components/BalloonComponent.js +1 -237
- package/lib/module/games/balloon-blaster/components/GameArea.js +1 -156
- package/lib/module/games/balloon-blaster/components/GameBackground.js +1 -476
- package/lib/module/games/balloon-blaster/components/ScoreBoard.js +1 -112
- package/lib/module/games/balloon-blaster/components/ScoreBoard.js.map +1 -1
- package/lib/module/games/balloon-blaster/components/index.js +1 -7
- package/lib/module/games/candy-crush/CandyCrush.js +1 -131
- package/lib/module/games/candy-crush/CandyCrush.js.map +1 -1
- package/lib/module/games/candy-crush/CandyCrushConstants.js +1 -125
- package/lib/module/games/candy-crush/CandyCrushConstants.js.map +1 -1
- package/lib/module/games/candy-crush/CandyCrushService.js +1 -370
- package/lib/module/games/candy-crush/CandyCrushStore.js +1 -303
- package/lib/module/games/candy-crush/components/CandyItem.js +1 -191
- package/lib/module/games/candy-crush/components/GameBackground.js +1 -85
- package/lib/module/games/candy-crush/components/GameGrid.js +1 -314
- package/lib/module/games/candy-crush/components/ScoreBoard.js +1 -79
- package/lib/module/games/candy-crush/components/index.js +1 -7
- package/lib/module/games/candy-crush/index.js +1 -6
- package/lib/module/games/colors-sort/ColorsSort.js +1 -143
- package/lib/module/games/colors-sort/ColorsSort.js.map +1 -1
- package/lib/module/games/colors-sort/ColorsSortConstants.js +1 -72
- package/lib/module/games/colors-sort/ColorsSortConstants.js.map +1 -1
- package/lib/module/games/colors-sort/ColorsSortService.js +1 -255
- package/lib/module/games/colors-sort/ColorsSortStore.js +1 -257
- package/lib/module/games/colors-sort/ColorsSortStore.js.map +1 -1
- package/lib/module/games/colors-sort/components/ColorContainer.js +1 -140
- package/lib/module/games/colors-sort/components/GameBackground.js +1 -135
- package/lib/module/games/colors-sort/components/ScoreBoard.js +1 -70
- package/lib/module/games/colors-sort/components/index.js +1 -6
- package/lib/module/games/dino-jump/DinoJump.js +1 -209
- package/lib/module/games/dino-jump/DinoJump.js.map +1 -1
- package/lib/module/games/dino-jump/DinoJumpConstants.js +1 -189
- package/lib/module/games/dino-jump/DinoJumpConstants.js.map +1 -1
- package/lib/module/games/dino-jump/DinoJumpService.js +1 -270
- package/lib/module/games/dino-jump/DinoJumpStore.js +1 -381
- package/lib/module/games/dino-jump/components/DinoSprite.js +1 -418
- package/lib/module/games/dino-jump/components/DinoSprite.js.map +1 -1
- package/lib/module/games/dino-jump/components/GameArea.js +1 -68
- package/lib/module/games/dino-jump/components/GameBackground.js +1 -444
- package/lib/module/games/dino-jump/components/ObstacleSprite.js +1 -306
- package/lib/module/games/dino-jump/components/ScoreBoard.js +1 -105
- package/lib/module/games/dino-jump/components/ScoreBoard.js.map +1 -1
- package/lib/module/games/dino-jump/components/StarSprite.js +1 -45
- package/lib/module/games/dino-jump/components/index.js +1 -9
- package/lib/module/games/flappy-bird/FlappyBird.js +1 -126
- package/lib/module/games/flappy-bird/FlappyBird.js.map +1 -1
- package/lib/module/games/flappy-bird/FlappyBirdConstants.js +1 -90
- package/lib/module/games/flappy-bird/FlappyBirdConstants.js.map +1 -1
- package/lib/module/games/flappy-bird/FlappyBirdStore.js +1 -300
- package/lib/module/games/flappy-bird/components/Bird.js +1 -87
- package/lib/module/games/flappy-bird/components/GameArea.js +1 -87
- package/lib/module/games/flappy-bird/components/GameBackground.js +1 -79
- package/lib/module/games/flappy-bird/components/Pipes.js +1 -172
- package/lib/module/games/flappy-bird/components/ScoreBoard.js +1 -73
- package/lib/module/games/flappy-bird/components/index.js +1 -8
- package/lib/module/games/fruit-merger/FruitMerger.js +1 -120
- package/lib/module/games/fruit-merger/FruitMerger.js.map +1 -1
- package/lib/module/games/fruit-merger/FruitMergerConstants.js +1 -119
- package/lib/module/games/fruit-merger/FruitMergerConstants.js.map +1 -1
- package/lib/module/games/fruit-merger/FruitMergerService.js +1 -13
- package/lib/module/games/fruit-merger/FruitMergerStore.js +1 -315
- package/lib/module/games/fruit-merger/components/FruitItem.js +1 -102
- package/lib/module/games/fruit-merger/components/GameArea.js +1 -103
- package/lib/module/games/fruit-merger/components/GameBackground.js +1 -498
- package/lib/module/games/fruit-merger/components/ScoreBoard.js +1 -58
- package/lib/module/games/fruit-merger/components/index.js +1 -7
- package/lib/module/games/fruit-ninja/FruitNinja.js +1 -134
- package/lib/module/games/fruit-ninja/FruitNinja.js.map +1 -1
- package/lib/module/games/fruit-ninja/FruitNinjaConstants.js +1 -148
- package/lib/module/games/fruit-ninja/FruitNinjaConstants.js.map +1 -1
- package/lib/module/games/fruit-ninja/FruitNinjaService.js +1 -311
- package/lib/module/games/fruit-ninja/FruitNinjaStore.js +1 -191
- package/lib/module/games/fruit-ninja/FruitNinjaStore.js.map +1 -1
- package/lib/module/games/fruit-ninja/components/FruitComponent.js +1 -99
- package/lib/module/games/fruit-ninja/components/GameArea.js +1 -215
- package/lib/module/games/fruit-ninja/components/GameBackground.js +1 -1267
- package/lib/module/games/fruit-ninja/components/ScoreBoard.js +1 -92
- package/lib/module/games/fruit-ninja/components/ScoreBoard.js.map +1 -1
- package/lib/module/games/fruit-ninja/components/index.js +1 -7
- package/lib/module/games/game-2048/Game2048.js +1 -149
- package/lib/module/games/game-2048/Game2048.js.map +1 -1
- package/lib/module/games/game-2048/Game2048Constants.js +1 -263
- package/lib/module/games/game-2048/Game2048Constants.js.map +1 -1
- package/lib/module/games/game-2048/Game2048Service.js +1 -457
- package/lib/module/games/game-2048/Game2048Store.js +1 -236
- package/lib/module/games/game-2048/components/GameBackground.js +1 -247
- package/lib/module/games/game-2048/components/GameGrid.js +1 -139
- package/lib/module/games/game-2048/components/GameTile.js +1 -72
- package/lib/module/games/game-2048/components/ScoreBoard.js +1 -52
- package/lib/module/games/game-2048/components/index.js +1 -7
- package/lib/module/games/maze-runner/MazeRunner.js +1 -267
- package/lib/module/games/maze-runner/MazeRunner.js.map +1 -1
- package/lib/module/games/maze-runner/MazeRunnerConstants.js +1 -100
- package/lib/module/games/maze-runner/MazeRunnerConstants.js.map +1 -1
- package/lib/module/games/maze-runner/MazeRunnerService.js +1 -586
- package/lib/module/games/maze-runner/components/EnhancedBallComponent.js +1 -150
- package/lib/module/games/maze-runner/components/EnhancedGameArea.js +1 -370
- package/lib/module/games/maze-runner/components/GameBackground.js +1 -175
- package/lib/module/games/maze-runner/components/ScoreBoard.js +1 -61
- package/lib/module/games/maze-runner/components/SkiaPipeComponent.js +1 -209
- package/lib/module/games/maze-runner/components/StaticGameBackground.js +1 -169
- package/lib/module/games/maze-runner/components/WallComponent.js +1 -91
- package/lib/module/games/maze-runner/components/index.js +1 -8
- package/lib/module/games/popit-fidget/PopitFidget.js +1 -285
- package/lib/module/games/popit-fidget/PopitFidget.js.map +1 -1
- package/lib/module/games/popit-fidget/PopitFidgetConstants.js +1 -113
- package/lib/module/games/popit-fidget/PopitFidgetConstants.js.map +1 -1
- package/lib/module/games/popit-fidget/PopitFidgetService.js +1 -132
- package/lib/module/games/popit-fidget/PopitFidgetStore.js +1 -125
- package/lib/module/games/popit-fidget/components/BubbleComponent.js +1 -198
- package/lib/module/games/popit-fidget/components/FidgetGrid.js +1 -165
- package/lib/module/games/popit-fidget/components/GameBackground.js +1 -177
- package/lib/module/games/popit-fidget/components/ScoreBoard.js +1 -61
- package/lib/module/games/popit-fidget/components/index.js +1 -7
- package/lib/module/games/sliding-numbers/SlidingNumbers.js +1 -159
- package/lib/module/games/sliding-numbers/SlidingNumbers.js.map +1 -1
- package/lib/module/games/sliding-numbers/SlidingNumbersConstants.js +1 -207
- package/lib/module/games/sliding-numbers/SlidingNumbersConstants.js.map +1 -1
- package/lib/module/games/sliding-numbers/SlidingNumbersService.js +1 -248
- package/lib/module/games/sliding-numbers/SlidingNumbersStore.js +1 -274
- package/lib/module/games/sliding-numbers/components/GameBackground.js +1 -259
- package/lib/module/games/sliding-numbers/components/NumbersGrid.js +1 -174
- package/lib/module/games/sliding-numbers/components/NumbersTile.js +1 -116
- package/lib/module/games/sliding-numbers/components/ScoreBoard.js +1 -64
- package/lib/module/games/sliding-numbers/components/index.js +1 -7
- package/lib/module/games/snake/Snake.js +1 -189
- package/lib/module/games/snake/Snake.js.map +1 -1
- package/lib/module/games/snake/SnakeConstants.js +1 -138
- package/lib/module/games/snake/SnakeConstants.js.map +1 -1
- package/lib/module/games/snake/SnakeService.js +1 -148
- package/lib/module/games/snake/SnakeStore.js +1 -182
- package/lib/module/games/snake/components/GameBackground.js +1 -221
- package/lib/module/games/snake/components/GameGrid.js +1 -153
- package/lib/module/games/snake/components/ScoreBoard.js +1 -51
- package/lib/module/games/snake/components/index.js +1 -6
- package/lib/module/games/snake/index.js +1 -6
- package/lib/module/games/space-fighter/SpaceFighter.js +1 -165
- package/lib/module/games/space-fighter/SpaceFighter.js.map +1 -1
- package/lib/module/games/space-fighter/SpaceFighterConstants.js +1 -108
- package/lib/module/games/space-fighter/SpaceFighterConstants.js.map +1 -1
- package/lib/module/games/space-fighter/SpaceFighterService.js +1 -326
- package/lib/module/games/space-fighter/SpaceFighterStore.js +1 -209
- package/lib/module/games/space-fighter/components/AsteroidComponent.js +1 -113
- package/lib/module/games/space-fighter/components/GameArea.js +1 -289
- package/lib/module/games/space-fighter/components/GameBackground.js +1 -239
- package/lib/module/games/space-fighter/components/ScoreBoard.js +1 -136
- package/lib/module/games/space-fighter/components/Spacecraft3D.js +1 -202
- package/lib/module/games/space-fighter/components/SpacecraftPath.js +1 -52
- package/lib/module/games/space-fighter/components/index.js +1 -9
- package/lib/module/games/whack-a-mole/WhackAMole.js +1 -270
- package/lib/module/games/whack-a-mole/WhackAMole.js.map +1 -1
- package/lib/module/games/whack-a-mole/WhackAMoleConstants.js +1 -115
- package/lib/module/games/whack-a-mole/WhackAMoleConstants.js.map +1 -1
- package/lib/module/games/whack-a-mole/WhackAMoleService.js +1 -120
- package/lib/module/games/whack-a-mole/WhackAMoleStore.js +1 -172
- package/lib/module/games/whack-a-mole/components/GameBackground.js +1 -477
- package/lib/module/games/whack-a-mole/components/GameGrid.js +1 -97
- package/lib/module/games/whack-a-mole/components/GameHole.js +1 -196
- package/lib/module/games/whack-a-mole/components/MoleCharacter.js +1 -241
- package/lib/module/games/whack-a-mole/components/ScoreBoard.js +1 -67
- package/lib/module/games/whack-a-mole/components/ScoreBoard.js.map +1 -1
- package/lib/module/games/whack-a-mole/components/index.js +1 -8
- package/lib/module/helpers/AnimationFrame.js +1 -120
- package/lib/module/helpers/AnimationTracker.js +1 -89
- package/lib/module/helpers/ErrorHandler.js +1 -269
- package/lib/module/helpers/GameControlButton.js +1 -219
- package/lib/module/helpers/GameOverModal.js +1 -144
- package/lib/module/helpers/GameOverModal.js.map +1 -1
- package/lib/module/helpers/GameSettingsModal.js +1 -287
- package/lib/module/helpers/ParticleBlast.js +1 -134
- package/lib/module/helpers/ScoreBoardContainer.js +1 -34
- package/lib/module/helpers/index.js +1 -12
- package/lib/module/index.js +1 -22
- package/lib/module/services/GamesConstants.js +1 -178
- package/lib/module/services/GamesService.js +1 -112
- package/lib/module/services/GamesService.js.map +1 -1
- package/lib/module/services/HapticsService.js +1 -77
- package/lib/module/services/SoundsService.js +1 -302
- package/lib/module/services/UtilsService.js +1 -32
- package/lib/typescript/src/games/balloon-blaster/BalloonBlaster.d.ts.map +1 -1
- package/lib/typescript/src/games/balloon-blaster/BalloonBlasterConstants.d.ts +1 -1
- package/lib/typescript/src/games/balloon-blaster/components/ScoreBoard.d.ts.map +1 -1
- package/lib/typescript/src/games/candy-crush/CandyCrushConstants.d.ts +7 -7
- package/lib/typescript/src/games/colors-sort/ColorsSort.d.ts.map +1 -1
- package/lib/typescript/src/games/colors-sort/ColorsSortStore.d.ts.map +1 -1
- package/lib/typescript/src/games/dino-jump/DinoJump.d.ts.map +1 -1
- package/lib/typescript/src/games/dino-jump/components/DinoSprite.d.ts.map +1 -1
- package/lib/typescript/src/games/flappy-bird/FlappyBird.d.ts.map +1 -1
- package/lib/typescript/src/games/flappy-bird/FlappyBirdConstants.d.ts.map +1 -1
- package/lib/typescript/src/games/fruit-merger/FruitMerger.d.ts.map +1 -1
- package/lib/typescript/src/games/fruit-merger/FruitMergerConstants.d.ts.map +1 -1
- package/lib/typescript/src/games/fruit-ninja/FruitNinja.d.ts.map +1 -1
- package/lib/typescript/src/games/fruit-ninja/components/ScoreBoard.d.ts.map +1 -1
- package/lib/typescript/src/games/game-2048/Game2048.d.ts.map +1 -1
- package/lib/typescript/src/games/maze-runner/MazeRunner.d.ts.map +1 -1
- package/lib/typescript/src/games/popit-fidget/PopitFidget.d.ts.map +1 -1
- package/lib/typescript/src/games/sliding-numbers/SlidingNumbers.d.ts.map +1 -1
- package/lib/typescript/src/games/space-fighter/SpaceFighter.d.ts.map +1 -1
- package/lib/typescript/src/games/whack-a-mole/WhackAMole.d.ts.map +1 -1
- package/lib/typescript/src/games/whack-a-mole/WhackAMoleConstants.d.ts +1 -1
- package/lib/typescript/src/games/whack-a-mole/components/ScoreBoard.d.ts.map +1 -1
- package/lib/typescript/src/helpers/GameOverModal.d.ts +3 -0
- package/lib/typescript/src/helpers/GameOverModal.d.ts.map +1 -1
- package/lib/typescript/src/services/GamesConstants.d.ts +7 -7
- package/package.json +2 -2
|
@@ -1,177 +1 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
import React from 'react';
|
|
4
|
-
import { StyleSheet, View } from 'react-native';
|
|
5
|
-
import { Canvas, LinearGradient, Rect, Circle, vec } from '@shopify/react-native-skia';
|
|
6
|
-
import { RAINBOW_COLORS } from "../PopitFidgetConstants.js";
|
|
7
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
8
|
-
const GameBackground = ({
|
|
9
|
-
width,
|
|
10
|
-
height
|
|
11
|
-
}) => {
|
|
12
|
-
// Generate static colorful floating bubble decorations with subtle positioning variations
|
|
13
|
-
const generateFloatingBubbles = React.useMemo(() => {
|
|
14
|
-
const bubbles = [];
|
|
15
|
-
const bubbleCount = 15; // Reduced count for better performance
|
|
16
|
-
|
|
17
|
-
for (let i = 0; i < bubbleCount; i++) {
|
|
18
|
-
const baseX = width / bubbleCount * i;
|
|
19
|
-
const baseY = height / bubbleCount * i;
|
|
20
|
-
|
|
21
|
-
// Add subtle random offset for natural look
|
|
22
|
-
const x = baseX + Math.sin(i * 0.5) * 30 + Math.random() * 60;
|
|
23
|
-
const y = baseY + Math.cos(i * 0.7) * 40 + Math.random() * 80;
|
|
24
|
-
const radius = 8 + Math.random() * 12;
|
|
25
|
-
const colorIndex = i % RAINBOW_COLORS.length; // Cycle through colors for consistency
|
|
26
|
-
const opacity = 0.2 + Math.sin(i) * 0.1; // Subtle opacity variation
|
|
27
|
-
|
|
28
|
-
bubbles.push(/*#__PURE__*/_jsx(Circle, {
|
|
29
|
-
cx: Math.max(radius, Math.min(width - radius, x)),
|
|
30
|
-
cy: Math.max(radius, Math.min(height - radius, y)),
|
|
31
|
-
r: radius,
|
|
32
|
-
color: `${RAINBOW_COLORS[colorIndex]}${Math.floor(opacity * 255).toString(16).padStart(2, '0')}`
|
|
33
|
-
}, `floating-bubble-${i}`));
|
|
34
|
-
}
|
|
35
|
-
return bubbles;
|
|
36
|
-
}, [width, height]);
|
|
37
|
-
return /*#__PURE__*/_jsx(View, {
|
|
38
|
-
style: StyleSheet.absoluteFillObject,
|
|
39
|
-
children: /*#__PURE__*/_jsxs(Canvas, {
|
|
40
|
-
style: {
|
|
41
|
-
width,
|
|
42
|
-
height
|
|
43
|
-
},
|
|
44
|
-
children: [/*#__PURE__*/_jsx(Rect, {
|
|
45
|
-
x: 0,
|
|
46
|
-
y: 0,
|
|
47
|
-
width: width,
|
|
48
|
-
height: height,
|
|
49
|
-
children: /*#__PURE__*/_jsx(LinearGradient, {
|
|
50
|
-
start: vec(0, 0),
|
|
51
|
-
end: vec(width, height),
|
|
52
|
-
colors: [`${RAINBOW_COLORS[0]}40`,
|
|
53
|
-
// Vibrant pink
|
|
54
|
-
`${RAINBOW_COLORS[2]}35`,
|
|
55
|
-
// Vibrant orange
|
|
56
|
-
`${RAINBOW_COLORS[4]}40`,
|
|
57
|
-
// Vibrant yellow
|
|
58
|
-
`${RAINBOW_COLORS[6]}35`,
|
|
59
|
-
// Vibrant lime
|
|
60
|
-
`${RAINBOW_COLORS[8]}40`,
|
|
61
|
-
// Vibrant green
|
|
62
|
-
`${RAINBOW_COLORS[10]}35`,
|
|
63
|
-
// Vibrant cyan
|
|
64
|
-
`${RAINBOW_COLORS[12]}40`,
|
|
65
|
-
// Vibrant blue
|
|
66
|
-
`${RAINBOW_COLORS[14]}35` // Vibrant purple
|
|
67
|
-
]
|
|
68
|
-
})
|
|
69
|
-
}), /*#__PURE__*/_jsx(Rect, {
|
|
70
|
-
x: 0,
|
|
71
|
-
y: 0,
|
|
72
|
-
width: width,
|
|
73
|
-
height: height,
|
|
74
|
-
children: /*#__PURE__*/_jsx(LinearGradient, {
|
|
75
|
-
start: vec(0, 0),
|
|
76
|
-
end: vec(width / 2, height / 2),
|
|
77
|
-
colors: [`${RAINBOW_COLORS[1]}25`,
|
|
78
|
-
// Bright red
|
|
79
|
-
'transparent', `${RAINBOW_COLORS[5]}25`,
|
|
80
|
-
// Bright deep purple
|
|
81
|
-
'transparent', `${RAINBOW_COLORS[9]}25`,
|
|
82
|
-
// Bright teal
|
|
83
|
-
'transparent', `${RAINBOW_COLORS[13]}25`,
|
|
84
|
-
// Bright indigo
|
|
85
|
-
'transparent']
|
|
86
|
-
})
|
|
87
|
-
}), /*#__PURE__*/_jsx(Rect, {
|
|
88
|
-
x: 0,
|
|
89
|
-
y: 0,
|
|
90
|
-
width: width,
|
|
91
|
-
height: height,
|
|
92
|
-
children: /*#__PURE__*/_jsx(LinearGradient, {
|
|
93
|
-
start: vec(width, 0),
|
|
94
|
-
end: vec(0, height),
|
|
95
|
-
colors: [`${RAINBOW_COLORS[3]}20`,
|
|
96
|
-
// Bright orange
|
|
97
|
-
'transparent', `${RAINBOW_COLORS[7]}20`,
|
|
98
|
-
// Bright light green
|
|
99
|
-
'transparent', `${RAINBOW_COLORS[11]}20`,
|
|
100
|
-
// Bright light blue
|
|
101
|
-
'transparent']
|
|
102
|
-
})
|
|
103
|
-
}), generateFloatingBubbles, /*#__PURE__*/_jsx(Circle, {
|
|
104
|
-
cx: width * 0.1,
|
|
105
|
-
cy: height * 0.15,
|
|
106
|
-
r: 40,
|
|
107
|
-
color: `${RAINBOW_COLORS[0]}30` // Vibrant pink
|
|
108
|
-
}), /*#__PURE__*/_jsx(Circle, {
|
|
109
|
-
cx: width * 0.9,
|
|
110
|
-
cy: height * 0.85,
|
|
111
|
-
r: 35,
|
|
112
|
-
color: `${RAINBOW_COLORS[3]}30` // Vibrant orange
|
|
113
|
-
}), /*#__PURE__*/_jsx(Circle, {
|
|
114
|
-
cx: width * 0.85,
|
|
115
|
-
cy: height * 0.2,
|
|
116
|
-
r: 30,
|
|
117
|
-
color: `${RAINBOW_COLORS[8]}30` // Vibrant green
|
|
118
|
-
}), /*#__PURE__*/_jsx(Circle, {
|
|
119
|
-
cx: width * 0.15,
|
|
120
|
-
cy: height * 0.8,
|
|
121
|
-
r: 45,
|
|
122
|
-
color: `${RAINBOW_COLORS[12]}30` // Vibrant blue
|
|
123
|
-
}), /*#__PURE__*/_jsx(Circle, {
|
|
124
|
-
cx: width * 0.5,
|
|
125
|
-
cy: height * 0.1,
|
|
126
|
-
r: 25,
|
|
127
|
-
color: `${RAINBOW_COLORS[14]}30` // Vibrant purple
|
|
128
|
-
}), /*#__PURE__*/_jsx(Circle, {
|
|
129
|
-
cx: width * 0.2,
|
|
130
|
-
cy: height * 0.5,
|
|
131
|
-
r: 32,
|
|
132
|
-
color: `${RAINBOW_COLORS[6]}30` // Vibrant lime
|
|
133
|
-
}), /*#__PURE__*/_jsx(Circle, {
|
|
134
|
-
cx: width * 0.8,
|
|
135
|
-
cy: height * 0.6,
|
|
136
|
-
r: 28,
|
|
137
|
-
color: `${RAINBOW_COLORS[10]}30` // Vibrant cyan
|
|
138
|
-
}), /*#__PURE__*/_jsx(Circle, {
|
|
139
|
-
cx: width * 0.6,
|
|
140
|
-
cy: height * 0.9,
|
|
141
|
-
r: 20,
|
|
142
|
-
color: `${RAINBOW_COLORS[1]}30` // Vibrant red
|
|
143
|
-
}), /*#__PURE__*/_jsx(Circle, {
|
|
144
|
-
cx: width * 0.3,
|
|
145
|
-
cy: height * 0.25,
|
|
146
|
-
r: 24,
|
|
147
|
-
color: `${RAINBOW_COLORS[4]}30` // Vibrant yellow
|
|
148
|
-
}), /*#__PURE__*/_jsx(Circle, {
|
|
149
|
-
cx: width * 0.7,
|
|
150
|
-
cy: height * 0.35,
|
|
151
|
-
r: 26,
|
|
152
|
-
color: `${RAINBOW_COLORS[9]}30` // Vibrant teal
|
|
153
|
-
}), Array.from({
|
|
154
|
-
length: Math.floor(width / 40)
|
|
155
|
-
}, (_, i) => /*#__PURE__*/_jsx(Rect, {
|
|
156
|
-
x: i * 40,
|
|
157
|
-
y: 0,
|
|
158
|
-
width: 1,
|
|
159
|
-
height: height,
|
|
160
|
-
color: "rgba(0, 0, 0, 0.02)"
|
|
161
|
-
}, `grid-v-${i}`)), Array.from({
|
|
162
|
-
length: Math.floor(height / 40)
|
|
163
|
-
}, (_, i) => /*#__PURE__*/_jsx(Rect, {
|
|
164
|
-
x: 0,
|
|
165
|
-
y: i * 40,
|
|
166
|
-
width: width,
|
|
167
|
-
height: 1,
|
|
168
|
-
color: "rgba(0, 0, 0, 0.02)"
|
|
169
|
-
}, `grid-h-${i}`))]
|
|
170
|
-
})
|
|
171
|
-
});
|
|
172
|
-
};
|
|
173
|
-
|
|
174
|
-
// Memoize GameBackground to prevent unnecessary re-renders
|
|
175
|
-
const MemoizedGameBackground = /*#__PURE__*/React.memo(GameBackground);
|
|
176
|
-
export default MemoizedGameBackground;
|
|
177
|
-
//# sourceMappingURL=GameBackground.js.map
|
|
1
|
+
"use strict";import React from 'react';import{StyleSheet,View}from 'react-native';import{Canvas,LinearGradient,Rect,Circle,vec}from '@shopify/react-native-skia';import{RAINBOW_COLORS}from "../PopitFidgetConstants.js";import{jsx as _jsx,jsxs as _jsxs}from "react/jsx-runtime";const GameBackground =({width,height})=>{const generateFloatingBubbles = React.useMemo(()=>{const bubbles = [];const bubbleCount = 15;for(let i = 0;i < bubbleCount;i++){const baseX = width / bubbleCount * i;const baseY = height / bubbleCount * i;const x = baseX + Math.sin(i * 0.5)* 30 + Math.random()* 60;const y = baseY + Math.cos(i * 0.7)* 40 + Math.random()* 80;const radius = 8 + Math.random()* 12;const colorIndex = i % RAINBOW_COLORS.length;const opacity = 0.2 + Math.sin(i)* 0.1;bubbles.push(_jsx(Circle,{cx:Math.max(radius,Math.min(width - radius,x)),cy:Math.max(radius,Math.min(height - radius,y)),r:radius,color:`${RAINBOW_COLORS[colorIndex]}${Math.floor(opacity * 255).toString(16).padStart(2,'0')}`},`floating-bubble-${i}`));}return bubbles;},[width,height]);return _jsx(View,{style:StyleSheet.absoluteFillObject,children:_jsxs(Canvas,{style:{width,height},children:[_jsx(Rect,{x:0,y:0,width:width,height:height,children:_jsx(LinearGradient,{start:vec(0,0),end:vec(width,height),colors:[`${RAINBOW_COLORS[0]}40`,`${RAINBOW_COLORS[2]}35`,`${RAINBOW_COLORS[4]}40`,`${RAINBOW_COLORS[6]}35`,`${RAINBOW_COLORS[8]}40`,`${RAINBOW_COLORS[10]}35`,`${RAINBOW_COLORS[12]}40`,`${RAINBOW_COLORS[14]}35` ]})}),_jsx(Rect,{x:0,y:0,width:width,height:height,children:_jsx(LinearGradient,{start:vec(0,0),end:vec(width / 2,height / 2),colors:[`${RAINBOW_COLORS[1]}25`,'transparent',`${RAINBOW_COLORS[5]}25`,'transparent',`${RAINBOW_COLORS[9]}25`,'transparent',`${RAINBOW_COLORS[13]}25`,'transparent']})}),_jsx(Rect,{x:0,y:0,width:width,height:height,children:_jsx(LinearGradient,{start:vec(width,0),end:vec(0,height),colors:[`${RAINBOW_COLORS[3]}20`,'transparent',`${RAINBOW_COLORS[7]}20`,'transparent',`${RAINBOW_COLORS[11]}20`,'transparent']})}),generateFloatingBubbles,_jsx(Circle,{cx:width * 0.1,cy:height * 0.15,r:40,color:`${RAINBOW_COLORS[0]}30`}),_jsx(Circle,{cx:width * 0.9,cy:height * 0.85,r:35,color:`${RAINBOW_COLORS[3]}30`}),_jsx(Circle,{cx:width * 0.85,cy:height * 0.2,r:30,color:`${RAINBOW_COLORS[8]}30`}),_jsx(Circle,{cx:width * 0.15,cy:height * 0.8,r:45,color:`${RAINBOW_COLORS[12]}30`}),_jsx(Circle,{cx:width * 0.5,cy:height * 0.1,r:25,color:`${RAINBOW_COLORS[14]}30`}),_jsx(Circle,{cx:width * 0.2,cy:height * 0.5,r:32,color:`${RAINBOW_COLORS[6]}30`}),_jsx(Circle,{cx:width * 0.8,cy:height * 0.6,r:28,color:`${RAINBOW_COLORS[10]}30`}),_jsx(Circle,{cx:width * 0.6,cy:height * 0.9,r:20,color:`${RAINBOW_COLORS[1]}30`}),_jsx(Circle,{cx:width * 0.3,cy:height * 0.25,r:24,color:`${RAINBOW_COLORS[4]}30`}),_jsx(Circle,{cx:width * 0.7,cy:height * 0.35,r:26,color:`${RAINBOW_COLORS[9]}30`}),Array.from({length:Math.floor(width / 40)},(_,i)=> _jsx(Rect,{x:i * 40,y:0,width:1,height:height,color:"rgba(0,0,0,0.02)"},`grid-v-${i}`)),Array.from({length:Math.floor(height / 40)},(_,i)=> _jsx(Rect,{x:0,y:i * 40,width:width,height:1,color:"rgba(0,0,0,0.02)"},`grid-h-${i}`))]})});};const MemoizedGameBackground = React.memo(GameBackground);export default MemoizedGameBackground;
|
|
@@ -1,61 +1 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
import React from 'react';
|
|
4
|
-
import { View, Text, StyleSheet } from 'react-native';
|
|
5
|
-
import { ScoreBoardContainer } from "../../../helpers/index.js";
|
|
6
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
7
|
-
const ScoreBoard = ({
|
|
8
|
-
timeElapsed,
|
|
9
|
-
offset = 0
|
|
10
|
-
}) => {
|
|
11
|
-
// Format time as MM:SS
|
|
12
|
-
const formatTime = seconds => {
|
|
13
|
-
const mins = Math.floor(seconds / 60);
|
|
14
|
-
const secs = seconds % 60;
|
|
15
|
-
return `${mins.toString().padStart(2, '0')}:${secs.toString().padStart(2, '0')}`;
|
|
16
|
-
};
|
|
17
|
-
return /*#__PURE__*/_jsx(ScoreBoardContainer, {
|
|
18
|
-
offset: offset,
|
|
19
|
-
backgroundColor: "rgba(108, 92, 231, 0.4)",
|
|
20
|
-
borderColor: "rgba(139, 92, 246, 0.3)",
|
|
21
|
-
children: /*#__PURE__*/_jsx(View, {
|
|
22
|
-
style: styles.scoreBoard,
|
|
23
|
-
children: /*#__PURE__*/_jsxs(View, {
|
|
24
|
-
style: styles.scoreSection,
|
|
25
|
-
children: [/*#__PURE__*/_jsx(Text, {
|
|
26
|
-
style: styles.scoreLabel,
|
|
27
|
-
children: "Time Elapsed"
|
|
28
|
-
}), /*#__PURE__*/_jsx(Text, {
|
|
29
|
-
style: styles.timeValue,
|
|
30
|
-
children: formatTime(timeElapsed)
|
|
31
|
-
})]
|
|
32
|
-
})
|
|
33
|
-
})
|
|
34
|
-
});
|
|
35
|
-
};
|
|
36
|
-
|
|
37
|
-
// Memoize ScoreBoard to prevent unnecessary re-renders
|
|
38
|
-
const MemoizedScoreBoard = /*#__PURE__*/React.memo(ScoreBoard);
|
|
39
|
-
const styles = StyleSheet.create({
|
|
40
|
-
scoreBoard: {
|
|
41
|
-
flexDirection: 'row',
|
|
42
|
-
justifyContent: 'center',
|
|
43
|
-
alignItems: 'center'
|
|
44
|
-
},
|
|
45
|
-
scoreSection: {
|
|
46
|
-
alignItems: 'center'
|
|
47
|
-
},
|
|
48
|
-
scoreLabel: {
|
|
49
|
-
fontSize: 18,
|
|
50
|
-
fontWeight: 'bold',
|
|
51
|
-
color: '#ffffff',
|
|
52
|
-
marginBottom: 4
|
|
53
|
-
},
|
|
54
|
-
timeValue: {
|
|
55
|
-
fontSize: 30,
|
|
56
|
-
fontWeight: 'bold',
|
|
57
|
-
color: '#1e1b4b' // Dark purple color for Pop It theme
|
|
58
|
-
}
|
|
59
|
-
});
|
|
60
|
-
export default MemoizedScoreBoard;
|
|
61
|
-
//# sourceMappingURL=ScoreBoard.js.map
|
|
1
|
+
"use strict";import React from 'react';import{View,Text,StyleSheet}from 'react-native';import{ScoreBoardContainer}from "../../../helpers/index.js";import{jsx as _jsx,jsxs as _jsxs}from "react/jsx-runtime";const ScoreBoard =({timeElapsed,offset = 0})=>{const formatTime = seconds =>{const mins = Math.floor(seconds / 60);const secs = seconds % 60;return `${mins.toString().padStart(2,'0')}:${secs.toString().padStart(2,'0')}`;};return _jsx(ScoreBoardContainer,{offset:offset,backgroundColor:"rgba(108,92,231,0.4)",borderColor:"rgba(139,92,246,0.3)",children:_jsx(View,{style:styles.scoreBoard,children:_jsxs(View,{style:styles.scoreSection,children:[_jsx(Text,{style:styles.scoreLabel,children:"Time Elapsed"}),_jsx(Text,{style:styles.timeValue,children:formatTime(timeElapsed)})]})})});};const MemoizedScoreBoard = React.memo(ScoreBoard);const styles = StyleSheet.create({scoreBoard:{flexDirection:'row',justifyContent:'center',alignItems:'center'},scoreSection:{alignItems:'center'},scoreLabel:{fontSize:16,fontWeight:'bold',color:'#ffffff',marginBottom:4},timeValue:{fontSize:25,fontWeight:'bold',color:'#1e1b4b'}});export default MemoizedScoreBoard;
|
|
@@ -1,7 +1 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
export { default as BubbleComponent } from "./BubbleComponent.js";
|
|
4
|
-
export { default as FidgetGrid } from "./FidgetGrid.js";
|
|
5
|
-
export { default as ScoreBoard } from "./ScoreBoard.js";
|
|
6
|
-
export { default as GameBackground } from "./GameBackground.js";
|
|
7
|
-
//# sourceMappingURL=index.js.map
|
|
1
|
+
"use strict";export{default as BubbleComponent}from "./BubbleComponent.js";export{default as FidgetGrid}from "./FidgetGrid.js";export{default as ScoreBoard}from "./ScoreBoard.js";export{default as GameBackground}from "./GameBackground.js";
|
|
@@ -1,159 +1 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
import React, { useEffect, useMemo, useCallback } from 'react';
|
|
4
|
-
import { View, StyleSheet } from 'react-native';
|
|
5
|
-
import { GestureHandlerRootView } from 'react-native-gesture-handler';
|
|
6
|
-
import { useSlidingNumbersStore } from "./SlidingNumbersStore.js";
|
|
7
|
-
import { SlidingNumbersService } from "./SlidingNumbersService.js";
|
|
8
|
-
import { GameBackground, NumbersGrid, ScoreBoard } from "./components/index.js";
|
|
9
|
-
import { GameControlButton, GameOverModal } from "../../helpers/index.js";
|
|
10
|
-
import { GameSettingsModal } from "../../helpers/index.js";
|
|
11
|
-
import { SLIDING_NUMBERS_COLORS } from "./SlidingNumbersConstants.js";
|
|
12
|
-
import { GAME_IDS, DEFAULT_GAME_SETTINGS } from "../../services/UtilsService.js";
|
|
13
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
14
|
-
export const SlidingNumbers = /*#__PURE__*/React.memo(({
|
|
15
|
-
settings = DEFAULT_GAME_SETTINGS,
|
|
16
|
-
onSettingsChange
|
|
17
|
-
}) => {
|
|
18
|
-
// Read UI-critical state independently to minimize re-renders
|
|
19
|
-
const isPlaying = useSlidingNumbersStore(state => state.isPlaying);
|
|
20
|
-
const isCompleted = useSlidingNumbersStore(state => state.isCompleted);
|
|
21
|
-
const score = useSlidingNumbersStore(state => state.score);
|
|
22
|
-
|
|
23
|
-
// Get store actions independently (these don't cause re-renders)
|
|
24
|
-
const initializePuzzle = useSlidingNumbersStore(state => state.initializePuzzle);
|
|
25
|
-
const shufflePuzzle = useSlidingNumbersStore(state => state.shufflePuzzle);
|
|
26
|
-
const startGame = useSlidingNumbersStore(state => state.startGame);
|
|
27
|
-
const stopGame = useSlidingNumbersStore(state => state.stopGame);
|
|
28
|
-
const resetGame = useSlidingNumbersStore(state => state.resetGame);
|
|
29
|
-
const decrementTime = useSlidingNumbersStore(state => state.decrementTime);
|
|
30
|
-
|
|
31
|
-
// Get difficulty from external settings
|
|
32
|
-
const difficulty = settings?.difficulty || 'easy';
|
|
33
|
-
|
|
34
|
-
// Memoized game service creation to prevent recreation
|
|
35
|
-
const gameService = useMemo(() => new SlidingNumbersService(), []);
|
|
36
|
-
|
|
37
|
-
// Memoized difficulty settings
|
|
38
|
-
const difficultySettings = useMemo(() => gameService.getDifficultySettings(difficulty), [gameService, difficulty]);
|
|
39
|
-
|
|
40
|
-
// Initialize puzzle when difficulty changes
|
|
41
|
-
useEffect(() => {
|
|
42
|
-
initializePuzzle(difficultySettings.gridSize);
|
|
43
|
-
}, [difficulty, difficultySettings.gridSize, initializePuzzle]);
|
|
44
|
-
|
|
45
|
-
// Game timer effect
|
|
46
|
-
useEffect(() => {
|
|
47
|
-
if (isPlaying) {
|
|
48
|
-
gameService.startTimer(() => {
|
|
49
|
-
decrementTime();
|
|
50
|
-
});
|
|
51
|
-
} else {
|
|
52
|
-
gameService.stopTimer();
|
|
53
|
-
}
|
|
54
|
-
return () => {
|
|
55
|
-
gameService.stopTimer();
|
|
56
|
-
};
|
|
57
|
-
}, [isPlaying, gameService, decrementTime]);
|
|
58
|
-
|
|
59
|
-
// Cleanup on unmount
|
|
60
|
-
useEffect(() => {
|
|
61
|
-
return () => {
|
|
62
|
-
gameService.cleanup();
|
|
63
|
-
};
|
|
64
|
-
}, [gameService]);
|
|
65
|
-
|
|
66
|
-
// Memoized game control handlers
|
|
67
|
-
const handleStartGame = useCallback(() => {
|
|
68
|
-
shufflePuzzle();
|
|
69
|
-
startGame();
|
|
70
|
-
}, [shufflePuzzle, startGame]);
|
|
71
|
-
const handleStopGame = useCallback(() => {
|
|
72
|
-
stopGame();
|
|
73
|
-
}, [stopGame]);
|
|
74
|
-
const handleResetGame = useCallback(() => {
|
|
75
|
-
resetGame();
|
|
76
|
-
// Re-initialize with current difficulty from settings
|
|
77
|
-
initializePuzzle(difficultySettings.gridSize);
|
|
78
|
-
}, [resetGame, initializePuzzle, difficultySettings.gridSize]);
|
|
79
|
-
|
|
80
|
-
// Memoize GameControlButton props to prevent re-renders (CRITICAL)
|
|
81
|
-
const gameControlButtonProps = useMemo(() => ({
|
|
82
|
-
isPlaying,
|
|
83
|
-
gameOver: isCompleted,
|
|
84
|
-
onStartGame: handleStartGame,
|
|
85
|
-
onStopGame: handleStopGame,
|
|
86
|
-
startButtonText: "START GAME",
|
|
87
|
-
stopButtonText: "STOP GAME",
|
|
88
|
-
startButtonSubtext: "Shuffle and begin solving!",
|
|
89
|
-
stopButtonSubtext: "End current game",
|
|
90
|
-
startButtonColor: SLIDING_NUMBERS_COLORS.START_BUTTON,
|
|
91
|
-
stopButtonColor: "#dc2626",
|
|
92
|
-
startButtonBorderColor: SLIDING_NUMBERS_COLORS.BUTTON_BORDER,
|
|
93
|
-
stopButtonBorderColor: "#f87171"
|
|
94
|
-
}), [isPlaying, isCompleted, handleStartGame, handleStopGame]);
|
|
95
|
-
|
|
96
|
-
// Memoize GameOverModal props
|
|
97
|
-
const gameOverModalProps = useMemo(() => ({
|
|
98
|
-
isVisible: isCompleted,
|
|
99
|
-
score,
|
|
100
|
-
onPlayAgain: handleResetGame,
|
|
101
|
-
buttonText: "Play Again!",
|
|
102
|
-
primaryColor: SLIDING_NUMBERS_COLORS.COMPLETION_OVERLAY,
|
|
103
|
-
borderColor: "rgba(245, 158, 11, 0.9)",
|
|
104
|
-
buttonColor: SLIDING_NUMBERS_COLORS.START_BUTTON,
|
|
105
|
-
buttonBorderColor: SLIDING_NUMBERS_COLORS.BUTTON_BORDER
|
|
106
|
-
}), [isCompleted, score, handleResetGame]);
|
|
107
|
-
|
|
108
|
-
// Memoize GameSettingsModal props
|
|
109
|
-
const gameSettingsModalProps = useMemo(() => ({
|
|
110
|
-
gameId: GAME_IDS.SLIDING_NUMBERS,
|
|
111
|
-
settings: settings || DEFAULT_GAME_SETTINGS,
|
|
112
|
-
onSettingsChange
|
|
113
|
-
}), [settings, onSettingsChange]);
|
|
114
|
-
|
|
115
|
-
// Get offset from settings
|
|
116
|
-
const offset = settings?.offset ?? 0;
|
|
117
|
-
|
|
118
|
-
// Memoized dynamic styles based on offset
|
|
119
|
-
const dynamicStyles = useMemo(() => ({
|
|
120
|
-
gameArea: {
|
|
121
|
-
...styles.gameArea,
|
|
122
|
-
marginTop: offset // Add margin to shift grid down while maintaining centering
|
|
123
|
-
}
|
|
124
|
-
}), [offset]);
|
|
125
|
-
return /*#__PURE__*/_jsx(View, {
|
|
126
|
-
style: styles.container,
|
|
127
|
-
children: /*#__PURE__*/_jsx(GestureHandlerRootView, {
|
|
128
|
-
children: /*#__PURE__*/_jsxs(GameBackground, {
|
|
129
|
-
children: [/*#__PURE__*/_jsx(View, {
|
|
130
|
-
style: dynamicStyles.gameArea,
|
|
131
|
-
children: /*#__PURE__*/_jsx(NumbersGrid, {
|
|
132
|
-
difficulty: difficulty
|
|
133
|
-
})
|
|
134
|
-
}), /*#__PURE__*/_jsx(ScoreBoard, {
|
|
135
|
-
offset: offset
|
|
136
|
-
}), /*#__PURE__*/_jsx(GameControlButton, {
|
|
137
|
-
...gameControlButtonProps
|
|
138
|
-
}), /*#__PURE__*/_jsx(GameOverModal, {
|
|
139
|
-
...gameOverModalProps
|
|
140
|
-
}), /*#__PURE__*/_jsx(GameSettingsModal, {
|
|
141
|
-
...gameSettingsModalProps
|
|
142
|
-
})]
|
|
143
|
-
})
|
|
144
|
-
})
|
|
145
|
-
});
|
|
146
|
-
});
|
|
147
|
-
const styles = StyleSheet.create({
|
|
148
|
-
container: {
|
|
149
|
-
flex: 1,
|
|
150
|
-
backgroundColor: SLIDING_NUMBERS_COLORS.BACKGROUND
|
|
151
|
-
},
|
|
152
|
-
gameArea: {
|
|
153
|
-
flex: 1,
|
|
154
|
-
justifyContent: 'center',
|
|
155
|
-
alignItems: 'center'
|
|
156
|
-
}
|
|
157
|
-
});
|
|
158
|
-
SlidingNumbers.displayName = 'SlidingNumbers';
|
|
159
|
-
//# sourceMappingURL=SlidingNumbers.js.map
|
|
1
|
+
"use strict";import React,{useEffect,useMemo,useCallback}from 'react';import{View,StyleSheet}from 'react-native';import{GestureHandlerRootView}from 'react-native-gesture-handler';import{useSlidingNumbersStore}from "./SlidingNumbersStore.js";import{SlidingNumbersService}from "./SlidingNumbersService.js";import{GameBackground,NumbersGrid,ScoreBoard}from "./components/index.js";import{GameControlButton,GameOverModal}from "../../helpers/index.js";import{GameSettingsModal}from "../../helpers/index.js";import{SLIDING_NUMBERS_COLORS}from "./SlidingNumbersConstants.js";import{GAME_IDS,DEFAULT_GAME_SETTINGS}from "../../services/UtilsService.js";import{jsx as _jsx,jsxs as _jsxs}from "react/jsx-runtime";export const SlidingNumbers = React.memo(({settings = DEFAULT_GAME_SETTINGS,onSettingsChange})=>{const isPlaying = useSlidingNumbersStore(state => state.isPlaying);const isCompleted = useSlidingNumbersStore(state => state.isCompleted);const score = useSlidingNumbersStore(state => state.score);const initializePuzzle = useSlidingNumbersStore(state => state.initializePuzzle);const shufflePuzzle = useSlidingNumbersStore(state => state.shufflePuzzle);const startGame = useSlidingNumbersStore(state => state.startGame);const stopGame = useSlidingNumbersStore(state => state.stopGame);const resetGame = useSlidingNumbersStore(state => state.resetGame);const decrementTime = useSlidingNumbersStore(state => state.decrementTime);const difficulty = settings?.difficulty || 'easy';const gameService = useMemo(()=> new SlidingNumbersService(),[]);const difficultySettings = useMemo(()=> gameService.getDifficultySettings(difficulty),[gameService,difficulty]);useEffect(()=>{initializePuzzle(difficultySettings.gridSize);},[difficulty,difficultySettings.gridSize,initializePuzzle]);useEffect(()=>{if(isPlaying){gameService.startTimer(()=>{decrementTime();});}else{gameService.stopTimer();}return()=>{gameService.stopTimer();};},[isPlaying,gameService,decrementTime]);useEffect(()=>{return()=>{gameService.cleanup();};},[gameService]);const handleStartGame = useCallback(()=>{shufflePuzzle();startGame();},[shufflePuzzle,startGame]);const handleStopGame = useCallback(()=>{stopGame();},[stopGame]);const handleResetGame = useCallback(()=>{resetGame();initializePuzzle(difficultySettings.gridSize);},[resetGame,initializePuzzle,difficultySettings.gridSize]);const gameControlButtonProps = useMemo(()=>({isPlaying,gameOver:isCompleted,onStartGame:handleStartGame,onStopGame:handleStopGame,startButtonText:"START GAME",stopButtonText:"STOP GAME",startButtonSubtext:"Shuffle and begin solving!",stopButtonSubtext:"End current game",startButtonColor:SLIDING_NUMBERS_COLORS.START_BUTTON,stopButtonColor:"#dc2626",startButtonBorderColor:SLIDING_NUMBERS_COLORS.BUTTON_BORDER,stopButtonBorderColor:"#f87171"}),[isPlaying,isCompleted,handleStartGame,handleStopGame]);const gameOverModalProps = useMemo(()=>({isVisible:isCompleted,score,onPlayAgain:handleResetGame,buttonText:"Play Again!",primaryColor:"rgba(245,158,11,0.5)",borderColor:"rgba(245,158,11,0.5)",buttonColor:"#ffffff",buttonBorderColor:"#ffffff",buttonTextColor:"#f59e0b"}),[isCompleted,score,handleResetGame]);const gameSettingsModalProps = useMemo(()=>({gameId:GAME_IDS.SLIDING_NUMBERS,settings:settings || DEFAULT_GAME_SETTINGS,onSettingsChange}),[settings,onSettingsChange]);const offset = settings?.offset ?? 0;const dynamicStyles = useMemo(()=>({gameArea:{...styles.gameArea,marginTop:offset}}),[offset]);return _jsx(View,{style:styles.container,children:_jsx(GestureHandlerRootView,{children:_jsxs(GameBackground,{children:[_jsx(View,{style:dynamicStyles.gameArea,children:_jsx(NumbersGrid,{difficulty:difficulty})}),_jsx(ScoreBoard,{offset:offset}),_jsx(GameControlButton,{...gameControlButtonProps}),_jsx(GameOverModal,{...gameOverModalProps}),_jsx(GameSettingsModal,{...gameSettingsModalProps})]})})});});const styles = StyleSheet.create({container:{flex:1,backgroundColor:SLIDING_NUMBERS_COLORS.BACKGROUND},gameArea:{flex:1,justifyContent:'center',alignItems:'center'}});SlidingNumbers.displayName = 'SlidingNumbers';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useEffect","useMemo","useCallback","View","StyleSheet","GestureHandlerRootView","useSlidingNumbersStore","SlidingNumbersService","GameBackground","NumbersGrid","ScoreBoard","GameControlButton","GameOverModal","GameSettingsModal","SLIDING_NUMBERS_COLORS","GAME_IDS","DEFAULT_GAME_SETTINGS","jsx","_jsx","jsxs","_jsxs","SlidingNumbers","memo","settings","onSettingsChange","isPlaying","state","isCompleted","score","initializePuzzle","shufflePuzzle","startGame","stopGame","resetGame","decrementTime","difficulty","gameService","difficultySettings","getDifficultySettings","gridSize","startTimer","stopTimer","cleanup","handleStartGame","handleStopGame","handleResetGame","gameControlButtonProps","gameOver","onStartGame","onStopGame","startButtonText","stopButtonText","startButtonSubtext","stopButtonSubtext","startButtonColor","START_BUTTON","stopButtonColor","startButtonBorderColor","BUTTON_BORDER","stopButtonBorderColor","gameOverModalProps","isVisible","onPlayAgain","buttonText","primaryColor","
|
|
1
|
+
{"version":3,"names":["React","useEffect","useMemo","useCallback","View","StyleSheet","GestureHandlerRootView","useSlidingNumbersStore","SlidingNumbersService","GameBackground","NumbersGrid","ScoreBoard","GameControlButton","GameOverModal","GameSettingsModal","SLIDING_NUMBERS_COLORS","GAME_IDS","DEFAULT_GAME_SETTINGS","jsx","_jsx","jsxs","_jsxs","SlidingNumbers","memo","settings","onSettingsChange","isPlaying","state","isCompleted","score","initializePuzzle","shufflePuzzle","startGame","stopGame","resetGame","decrementTime","difficulty","gameService","difficultySettings","getDifficultySettings","gridSize","startTimer","stopTimer","cleanup","handleStartGame","handleStopGame","handleResetGame","gameControlButtonProps","gameOver","onStartGame","onStopGame","startButtonText","stopButtonText","startButtonSubtext","stopButtonSubtext","startButtonColor","START_BUTTON","stopButtonColor","startButtonBorderColor","BUTTON_BORDER","stopButtonBorderColor","gameOverModalProps","isVisible","onPlayAgain","buttonText","primaryColor","borderColor","buttonColor","buttonBorderColor","buttonTextColor","gameSettingsModalProps","gameId","SLIDING_NUMBERS","offset","dynamicStyles","gameArea","styles","marginTop","style","container","children","create","flex","backgroundColor","BACKGROUND","justifyContent","alignItems","displayName"],"sourceRoot":"../../../../src","sources":["games/sliding-numbers/SlidingNumbers.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,207 +1 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
import { Dimensions } from 'react-native';
|
|
4
|
-
// Memoize screen dimensions for better performance
|
|
5
|
-
const {
|
|
6
|
-
width
|
|
7
|
-
} = Dimensions.get('window');
|
|
8
|
-
|
|
9
|
-
// Sliding Numbers Game Constants
|
|
10
|
-
export const SLIDING_NUMBERS_CONSTANTS = {
|
|
11
|
-
gridSize: {
|
|
12
|
-
easy: 3,
|
|
13
|
-
// 3x3 grid (numbers 1-8 + empty)
|
|
14
|
-
medium: 4,
|
|
15
|
-
// 4x4 grid (numbers 1-15 + empty)
|
|
16
|
-
hard: 5 // 5x5 grid (numbers 1-24 + empty)
|
|
17
|
-
},
|
|
18
|
-
maxNumbers: {
|
|
19
|
-
easy: 8,
|
|
20
|
-
// 1-8 numbers
|
|
21
|
-
medium: 15,
|
|
22
|
-
// 1-15 numbers
|
|
23
|
-
hard: 24 // 1-24 numbers
|
|
24
|
-
},
|
|
25
|
-
baseScore: {
|
|
26
|
-
easy: 1000,
|
|
27
|
-
medium: 2000,
|
|
28
|
-
hard: 3000
|
|
29
|
-
},
|
|
30
|
-
// Score decreases over time - faster completion = higher score
|
|
31
|
-
scoreMultiplier: {
|
|
32
|
-
easy: 5,
|
|
33
|
-
medium: 10,
|
|
34
|
-
hard: 15
|
|
35
|
-
}
|
|
36
|
-
};
|
|
37
|
-
export const SLIDING_NUMBERS_GAME_CONFIG = {
|
|
38
|
-
TILE_SIZE: Math.min(width * 0.16, 70),
|
|
39
|
-
// Responsive tile size that fits all difficulties
|
|
40
|
-
TILE_GAP: 4,
|
|
41
|
-
GRID_PADDING: 20,
|
|
42
|
-
GAME_DURATION: 600,
|
|
43
|
-
// 10 minutes
|
|
44
|
-
SHUFFLE_MOVES: 100,
|
|
45
|
-
// Number of moves to shuffle the puzzle
|
|
46
|
-
ANIMATION_DURATION: 200 // ms for tile sliding animation
|
|
47
|
-
};
|
|
48
|
-
export const SLIDING_NUMBERS_ANIMATION_CONFIG = {
|
|
49
|
-
TILE_SLIDE: {
|
|
50
|
-
damping: 25,
|
|
51
|
-
stiffness: 400,
|
|
52
|
-
mass: 1,
|
|
53
|
-
restDisplacementThreshold: 0.01,
|
|
54
|
-
restSpeedThreshold: 0.01
|
|
55
|
-
},
|
|
56
|
-
TILE_PRESS: {
|
|
57
|
-
damping: 15,
|
|
58
|
-
stiffness: 200
|
|
59
|
-
},
|
|
60
|
-
GESTURE: {
|
|
61
|
-
activeScale: 1.05,
|
|
62
|
-
snapThreshold: 0.3,
|
|
63
|
-
// 30% of tile size to trigger snap
|
|
64
|
-
velocityThreshold: 500 // minimum velocity for gesture recognition
|
|
65
|
-
},
|
|
66
|
-
COMPLETION_CELEBRATION: {
|
|
67
|
-
duration: 500
|
|
68
|
-
}
|
|
69
|
-
};
|
|
70
|
-
export const SLIDING_NUMBERS_COLORS = {
|
|
71
|
-
BACKGROUND: '#F5F5DC',
|
|
72
|
-
// Beige background like the physical puzzle
|
|
73
|
-
GRID_BACKGROUND: '#FFFFFF',
|
|
74
|
-
// White grid background
|
|
75
|
-
GRID_BORDER: '#E0E0E0',
|
|
76
|
-
// Light gray border
|
|
77
|
-
TILE_COLORS: ['#FFB3D9',
|
|
78
|
-
// Soft pink (like tiles 1, 14, 11 in image)
|
|
79
|
-
'#B3E5FC',
|
|
80
|
-
// Soft light blue (like tiles 2, 13, 15 in image)
|
|
81
|
-
'#C8E6C9',
|
|
82
|
-
// Soft light green (like tiles 6, 9 in image)
|
|
83
|
-
'#FFF9C4',
|
|
84
|
-
// Soft light yellow (like tile 3 in image)
|
|
85
|
-
'#E1BEE7',
|
|
86
|
-
// Soft lavender (like tiles 7, 10 in image)
|
|
87
|
-
'#FFCDD2',
|
|
88
|
-
// Soft coral pink
|
|
89
|
-
'#B2DFDB',
|
|
90
|
-
// Soft mint green
|
|
91
|
-
'#F8BBD9',
|
|
92
|
-
// Soft rose pink
|
|
93
|
-
'#A5D6A7',
|
|
94
|
-
// Soft green
|
|
95
|
-
'#FFECB3',
|
|
96
|
-
// Soft cream yellow
|
|
97
|
-
'#D1C4E9',
|
|
98
|
-
// Soft purple
|
|
99
|
-
'#B3E5FC',
|
|
100
|
-
// Soft sky blue
|
|
101
|
-
'#FFE0B2',
|
|
102
|
-
// Soft peach
|
|
103
|
-
'#C8E6C9',
|
|
104
|
-
// Soft mint
|
|
105
|
-
'#F8BBD9',
|
|
106
|
-
// Soft pink
|
|
107
|
-
'#E0F2F1',
|
|
108
|
-
// Very soft mint
|
|
109
|
-
'#FCE4EC',
|
|
110
|
-
// Very soft pink
|
|
111
|
-
'#E8F5E8',
|
|
112
|
-
// Very soft green
|
|
113
|
-
'#FFF3E0',
|
|
114
|
-
// Very soft orange
|
|
115
|
-
'#F3E5F5',
|
|
116
|
-
// Very soft purple
|
|
117
|
-
'#E1F5FE',
|
|
118
|
-
// Very soft blue
|
|
119
|
-
'#F9FBE7',
|
|
120
|
-
// Very soft lime
|
|
121
|
-
'#FFF8E1',
|
|
122
|
-
// Very soft yellow
|
|
123
|
-
'#EFEBE9' // Very soft brown
|
|
124
|
-
],
|
|
125
|
-
TILE_BORDER: '#D0D0D0',
|
|
126
|
-
TILE_SHADOW: 'rgba(0,0,0,0.1)',
|
|
127
|
-
NUMBER_TEXT: '#333333',
|
|
128
|
-
WORD_TEXT: '#666666',
|
|
129
|
-
EMPTY_TILE: '#F8F8F8',
|
|
130
|
-
SCORE_BOARD: '#f59e0b',
|
|
131
|
-
// Yellow to match scoreboard
|
|
132
|
-
SCORE_TEXT: '#FFFFFF',
|
|
133
|
-
TIMER_TEXT: '#f59e0b',
|
|
134
|
-
// Yellow for timer
|
|
135
|
-
UI: '#f59e0b',
|
|
136
|
-
// Yellow UI elements
|
|
137
|
-
BUTTON_ACTIVE: '#f59e0b',
|
|
138
|
-
// Yellow active button
|
|
139
|
-
BUTTON_INACTIVE: '#fbbf24',
|
|
140
|
-
// Lighter yellow for inactive
|
|
141
|
-
TEXT_PRIMARY: '#FFFFFF',
|
|
142
|
-
TEXT_SECONDARY: '#fef3c7',
|
|
143
|
-
// Light yellow text
|
|
144
|
-
WHITE: '#FFFFFF',
|
|
145
|
-
START_BUTTON: '#f59e0b',
|
|
146
|
-
// Yellow start button
|
|
147
|
-
COMPLETION_OVERLAY: 'rgba(245, 158, 11, 0.9)',
|
|
148
|
-
// Yellow overlay
|
|
149
|
-
BUTTON_BORDER: '#fbbf24' // Light yellow border
|
|
150
|
-
};
|
|
151
|
-
|
|
152
|
-
// Number word mappings for tiles
|
|
153
|
-
export const NUMBER_WORDS = {
|
|
154
|
-
1: 'one',
|
|
155
|
-
2: 'two',
|
|
156
|
-
3: 'three',
|
|
157
|
-
4: 'four',
|
|
158
|
-
5: 'five',
|
|
159
|
-
6: 'six',
|
|
160
|
-
7: 'seven',
|
|
161
|
-
8: 'eight',
|
|
162
|
-
9: 'nine',
|
|
163
|
-
10: 'ten',
|
|
164
|
-
11: 'eleven',
|
|
165
|
-
12: 'twelve',
|
|
166
|
-
13: 'thirteen',
|
|
167
|
-
14: 'fourteen',
|
|
168
|
-
15: 'fifteen',
|
|
169
|
-
16: 'sixteen',
|
|
170
|
-
17: 'seventeen',
|
|
171
|
-
18: 'eighteen',
|
|
172
|
-
19: 'nineteen',
|
|
173
|
-
20: 'twenty',
|
|
174
|
-
21: 'twenty-one',
|
|
175
|
-
22: 'twenty-two',
|
|
176
|
-
23: 'twenty-three',
|
|
177
|
-
24: 'twenty-four'
|
|
178
|
-
};
|
|
179
|
-
|
|
180
|
-
// Sliding Numbers Game Theme - Yellow theme matching the scoreboard
|
|
181
|
-
export const SLIDING_NUMBERS_THEME = {
|
|
182
|
-
backgroundColor: '#F5F5DC',
|
|
183
|
-
// Beige background like physical puzzle
|
|
184
|
-
headerBackgroundColor: 'rgba(245, 158, 11, 0.9)',
|
|
185
|
-
// Yellow header
|
|
186
|
-
headerTextColor: '#ffffff',
|
|
187
|
-
sectionBackgroundColor: 'rgba(245, 158, 11, 0.4)',
|
|
188
|
-
// Light yellow sections
|
|
189
|
-
sectionTitleColor: '#ffffff',
|
|
190
|
-
buttonSelectedColor: '#f59e0b',
|
|
191
|
-
// Yellow for selected
|
|
192
|
-
buttonUnselectedColor: 'rgba(255, 255, 255, 0.3)',
|
|
193
|
-
buttonSelectedTextColor: '#ffffff',
|
|
194
|
-
buttonUnselectedTextColor: '#1f2937',
|
|
195
|
-
switchTrackColorFalse: 'rgba(245, 158, 11, 0.5)',
|
|
196
|
-
switchTrackColorTrue: '#f59e0b',
|
|
197
|
-
switchThumbColor: '#ffffff',
|
|
198
|
-
infoTextColor: '#1f2937' // Dark text for readability
|
|
199
|
-
};
|
|
200
|
-
|
|
201
|
-
// Sliding Numbers Difficulty Descriptions
|
|
202
|
-
export const SLIDING_NUMBERS_DIFFICULTY_DESCRIPTIONS = {
|
|
203
|
-
easy: '3x3 grid with numbers 1-8, perfect for beginners',
|
|
204
|
-
medium: '4x4 grid with numbers 1-15, moderate challenge',
|
|
205
|
-
hard: '5x5 grid with numbers 1-24, expert level puzzle'
|
|
206
|
-
};
|
|
207
|
-
//# sourceMappingURL=SlidingNumbersConstants.js.map
|
|
1
|
+
"use strict";import{Dimensions}from 'react-native';const{width}= Dimensions.get('window');export const SLIDING_NUMBERS_CONSTANTS ={gridSize:{easy:3,medium:4,hard:5},maxNumbers:{easy:8,medium:15,hard:24},baseScore:{easy:1000,medium:2000,hard:3000},scoreMultiplier:{easy:5,medium:10,hard:15}};export const SLIDING_NUMBERS_GAME_CONFIG ={TILE_SIZE:Math.min(width * 0.16,70),TILE_GAP:4,GRID_PADDING:20,GAME_DURATION:600,SHUFFLE_MOVES:100,ANIMATION_DURATION:200};export const SLIDING_NUMBERS_ANIMATION_CONFIG ={TILE_SLIDE:{damping:25,stiffness:400,mass:1,restDisplacementThreshold:0.01,restSpeedThreshold:0.01},TILE_PRESS:{damping:15,stiffness:200},GESTURE:{activeScale:1.05,snapThreshold:0.3,velocityThreshold:500},COMPLETION_CELEBRATION:{duration:500}};export const SLIDING_NUMBERS_COLORS ={BACKGROUND:'#F5F5DC',GRID_BACKGROUND:'#FFFFFF',GRID_BORDER:'#E0E0E0',TILE_COLORS:['#FFB3D9','#B3E5FC','#C8E6C9','#FFF9C4','#E1BEE7','#FFCDD2','#B2DFDB','#F8BBD9','#A5D6A7','#FFECB3','#D1C4E9','#B3E5FC','#FFE0B2','#C8E6C9','#F8BBD9','#E0F2F1','#FCE4EC','#E8F5E8','#FFF3E0','#F3E5F5','#E1F5FE','#F9FBE7','#FFF8E1','#EFEBE9' ],TILE_BORDER:'#D0D0D0',TILE_SHADOW:'rgba(0,0,0,0.1)',NUMBER_TEXT:'#333333',WORD_TEXT:'#666666',EMPTY_TILE:'#F8F8F8',SCORE_BOARD:'#f59e0b',SCORE_TEXT:'#FFFFFF',TIMER_TEXT:'#f59e0b',UI:'#f59e0b',BUTTON_ACTIVE:'#f59e0b',BUTTON_INACTIVE:'#fbbf24',TEXT_PRIMARY:'#FFFFFF',TEXT_SECONDARY:'#fef3c7',WHITE:'#FFFFFF',START_BUTTON:'#f59e0b',COMPLETION_OVERLAY:'rgba(245,158,11,0.9)',BUTTON_BORDER:'#fbbf24'};export const NUMBER_WORDS ={1:'one',2:'two',3:'three',4:'four',5:'five',6:'six',7:'seven',8:'eight',9:'nine',10:'ten',11:'eleven',12:'twelve',13:'thirteen',14:'fourteen',15:'fifteen',16:'sixteen',17:'seventeen',18:'eighteen',19:'nineteen',20:'twenty',21:'twenty-one',22:'twenty-two',23:'twenty-three',24:'twenty-four'};export const SLIDING_NUMBERS_THEME ={backgroundColor:'rgba(0,0,0,0.7)',headerBackgroundColor:'#f59e0b',headerTextColor:'#ffffff',sectionBackgroundColor:'rgba(245,158,11,0.15)',sectionTitleColor:'#f59e0b',buttonSelectedColor:'#f59e0b',buttonUnselectedColor:'rgba(255,255,255,0.2)',buttonSelectedTextColor:'#ffffff',buttonUnselectedTextColor:'rgba(255,255,255,0.7)',switchTrackColorFalse:'rgba(245,158,11,0.3)',switchTrackColorTrue:'#f59e0b',switchThumbColor:'#ffffff',infoTextColor:'rgba(255,255,255,0.9)'};export const SLIDING_NUMBERS_DIFFICULTY_DESCRIPTIONS ={easy:'3x3 grid with numbers 1-8,perfect for beginners',medium:'4x4 grid with numbers 1-15,moderate challenge',hard:'5x5 grid with numbers 1-24,expert level puzzle'};
|