react-native-games 1.0.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.
Files changed (212) hide show
  1. package/README.md +80 -368
  2. package/lib/module/games/balloon-blaster/BalloonBlaster.js +1 -167
  3. package/lib/module/games/balloon-blaster/BalloonBlaster.js.map +1 -1
  4. package/lib/module/games/balloon-blaster/BalloonBlasterConstants.js +1 -182
  5. package/lib/module/games/balloon-blaster/BalloonBlasterConstants.js.map +1 -1
  6. package/lib/module/games/balloon-blaster/BalloonBlasterService.js +1 -318
  7. package/lib/module/games/balloon-blaster/BalloonBlasterStore.js +1 -183
  8. package/lib/module/games/balloon-blaster/components/BalloonComponent.js +1 -237
  9. package/lib/module/games/balloon-blaster/components/GameArea.js +1 -156
  10. package/lib/module/games/balloon-blaster/components/GameBackground.js +1 -476
  11. package/lib/module/games/balloon-blaster/components/ScoreBoard.js +1 -112
  12. package/lib/module/games/balloon-blaster/components/ScoreBoard.js.map +1 -1
  13. package/lib/module/games/balloon-blaster/components/index.js +1 -7
  14. package/lib/module/games/candy-crush/CandyCrush.js +1 -131
  15. package/lib/module/games/candy-crush/CandyCrush.js.map +1 -1
  16. package/lib/module/games/candy-crush/CandyCrushConstants.js +1 -125
  17. package/lib/module/games/candy-crush/CandyCrushConstants.js.map +1 -1
  18. package/lib/module/games/candy-crush/CandyCrushService.js +1 -370
  19. package/lib/module/games/candy-crush/CandyCrushStore.js +1 -303
  20. package/lib/module/games/candy-crush/components/CandyItem.js +1 -191
  21. package/lib/module/games/candy-crush/components/GameBackground.js +1 -85
  22. package/lib/module/games/candy-crush/components/GameGrid.js +1 -314
  23. package/lib/module/games/candy-crush/components/ScoreBoard.js +1 -79
  24. package/lib/module/games/candy-crush/components/index.js +1 -7
  25. package/lib/module/games/candy-crush/index.js +1 -6
  26. package/lib/module/games/colors-sort/ColorsSort.js +1 -143
  27. package/lib/module/games/colors-sort/ColorsSort.js.map +1 -1
  28. package/lib/module/games/colors-sort/ColorsSortConstants.js +1 -72
  29. package/lib/module/games/colors-sort/ColorsSortConstants.js.map +1 -1
  30. package/lib/module/games/colors-sort/ColorsSortService.js +1 -255
  31. package/lib/module/games/colors-sort/ColorsSortStore.js +1 -257
  32. package/lib/module/games/colors-sort/ColorsSortStore.js.map +1 -1
  33. package/lib/module/games/colors-sort/components/ColorContainer.js +1 -140
  34. package/lib/module/games/colors-sort/components/GameBackground.js +1 -135
  35. package/lib/module/games/colors-sort/components/ScoreBoard.js +1 -70
  36. package/lib/module/games/colors-sort/components/index.js +1 -6
  37. package/lib/module/games/dino-jump/DinoJump.js +1 -209
  38. package/lib/module/games/dino-jump/DinoJump.js.map +1 -1
  39. package/lib/module/games/dino-jump/DinoJumpConstants.js +1 -189
  40. package/lib/module/games/dino-jump/DinoJumpConstants.js.map +1 -1
  41. package/lib/module/games/dino-jump/DinoJumpService.js +1 -270
  42. package/lib/module/games/dino-jump/DinoJumpStore.js +1 -381
  43. package/lib/module/games/dino-jump/components/DinoSprite.js +1 -418
  44. package/lib/module/games/dino-jump/components/DinoSprite.js.map +1 -1
  45. package/lib/module/games/dino-jump/components/GameArea.js +1 -68
  46. package/lib/module/games/dino-jump/components/GameBackground.js +1 -444
  47. package/lib/module/games/dino-jump/components/ObstacleSprite.js +1 -306
  48. package/lib/module/games/dino-jump/components/ScoreBoard.js +1 -105
  49. package/lib/module/games/dino-jump/components/ScoreBoard.js.map +1 -1
  50. package/lib/module/games/dino-jump/components/StarSprite.js +1 -45
  51. package/lib/module/games/dino-jump/components/index.js +1 -9
  52. package/lib/module/games/flappy-bird/FlappyBird.js +1 -126
  53. package/lib/module/games/flappy-bird/FlappyBird.js.map +1 -1
  54. package/lib/module/games/flappy-bird/FlappyBirdConstants.js +1 -90
  55. package/lib/module/games/flappy-bird/FlappyBirdConstants.js.map +1 -1
  56. package/lib/module/games/flappy-bird/FlappyBirdStore.js +1 -300
  57. package/lib/module/games/flappy-bird/components/Bird.js +1 -87
  58. package/lib/module/games/flappy-bird/components/GameArea.js +1 -87
  59. package/lib/module/games/flappy-bird/components/GameBackground.js +1 -79
  60. package/lib/module/games/flappy-bird/components/Pipes.js +1 -172
  61. package/lib/module/games/flappy-bird/components/ScoreBoard.js +1 -73
  62. package/lib/module/games/flappy-bird/components/index.js +1 -8
  63. package/lib/module/games/fruit-merger/FruitMerger.js +1 -120
  64. package/lib/module/games/fruit-merger/FruitMerger.js.map +1 -1
  65. package/lib/module/games/fruit-merger/FruitMergerConstants.js +1 -119
  66. package/lib/module/games/fruit-merger/FruitMergerConstants.js.map +1 -1
  67. package/lib/module/games/fruit-merger/FruitMergerService.js +1 -13
  68. package/lib/module/games/fruit-merger/FruitMergerStore.js +1 -315
  69. package/lib/module/games/fruit-merger/components/FruitItem.js +1 -102
  70. package/lib/module/games/fruit-merger/components/GameArea.js +1 -103
  71. package/lib/module/games/fruit-merger/components/GameBackground.js +1 -498
  72. package/lib/module/games/fruit-merger/components/ScoreBoard.js +1 -58
  73. package/lib/module/games/fruit-merger/components/index.js +1 -7
  74. package/lib/module/games/fruit-ninja/FruitNinja.js +1 -134
  75. package/lib/module/games/fruit-ninja/FruitNinja.js.map +1 -1
  76. package/lib/module/games/fruit-ninja/FruitNinjaConstants.js +1 -148
  77. package/lib/module/games/fruit-ninja/FruitNinjaConstants.js.map +1 -1
  78. package/lib/module/games/fruit-ninja/FruitNinjaService.js +1 -311
  79. package/lib/module/games/fruit-ninja/FruitNinjaStore.js +1 -191
  80. package/lib/module/games/fruit-ninja/FruitNinjaStore.js.map +1 -1
  81. package/lib/module/games/fruit-ninja/components/FruitComponent.js +1 -99
  82. package/lib/module/games/fruit-ninja/components/GameArea.js +1 -215
  83. package/lib/module/games/fruit-ninja/components/GameBackground.js +1 -1267
  84. package/lib/module/games/fruit-ninja/components/ScoreBoard.js +1 -92
  85. package/lib/module/games/fruit-ninja/components/ScoreBoard.js.map +1 -1
  86. package/lib/module/games/fruit-ninja/components/index.js +1 -7
  87. package/lib/module/games/game-2048/Game2048.js +1 -149
  88. package/lib/module/games/game-2048/Game2048.js.map +1 -1
  89. package/lib/module/games/game-2048/Game2048Constants.js +1 -263
  90. package/lib/module/games/game-2048/Game2048Constants.js.map +1 -1
  91. package/lib/module/games/game-2048/Game2048Service.js +1 -457
  92. package/lib/module/games/game-2048/Game2048Store.js +1 -236
  93. package/lib/module/games/game-2048/components/GameBackground.js +1 -247
  94. package/lib/module/games/game-2048/components/GameGrid.js +1 -139
  95. package/lib/module/games/game-2048/components/GameTile.js +1 -72
  96. package/lib/module/games/game-2048/components/ScoreBoard.js +1 -52
  97. package/lib/module/games/game-2048/components/index.js +1 -7
  98. package/lib/module/games/maze-runner/MazeRunner.js +1 -267
  99. package/lib/module/games/maze-runner/MazeRunner.js.map +1 -1
  100. package/lib/module/games/maze-runner/MazeRunnerConstants.js +1 -100
  101. package/lib/module/games/maze-runner/MazeRunnerConstants.js.map +1 -1
  102. package/lib/module/games/maze-runner/MazeRunnerService.js +1 -586
  103. package/lib/module/games/maze-runner/components/EnhancedBallComponent.js +1 -150
  104. package/lib/module/games/maze-runner/components/EnhancedGameArea.js +1 -370
  105. package/lib/module/games/maze-runner/components/GameBackground.js +1 -175
  106. package/lib/module/games/maze-runner/components/ScoreBoard.js +1 -61
  107. package/lib/module/games/maze-runner/components/SkiaPipeComponent.js +1 -209
  108. package/lib/module/games/maze-runner/components/StaticGameBackground.js +1 -169
  109. package/lib/module/games/maze-runner/components/WallComponent.js +1 -91
  110. package/lib/module/games/maze-runner/components/index.js +1 -8
  111. package/lib/module/games/popit-fidget/PopitFidget.js +1 -285
  112. package/lib/module/games/popit-fidget/PopitFidget.js.map +1 -1
  113. package/lib/module/games/popit-fidget/PopitFidgetConstants.js +1 -113
  114. package/lib/module/games/popit-fidget/PopitFidgetConstants.js.map +1 -1
  115. package/lib/module/games/popit-fidget/PopitFidgetService.js +1 -132
  116. package/lib/module/games/popit-fidget/PopitFidgetStore.js +1 -125
  117. package/lib/module/games/popit-fidget/components/BubbleComponent.js +1 -198
  118. package/lib/module/games/popit-fidget/components/FidgetGrid.js +1 -165
  119. package/lib/module/games/popit-fidget/components/GameBackground.js +1 -177
  120. package/lib/module/games/popit-fidget/components/ScoreBoard.js +1 -61
  121. package/lib/module/games/popit-fidget/components/index.js +1 -7
  122. package/lib/module/games/sliding-numbers/SlidingNumbers.js +1 -159
  123. package/lib/module/games/sliding-numbers/SlidingNumbers.js.map +1 -1
  124. package/lib/module/games/sliding-numbers/SlidingNumbersConstants.js +1 -207
  125. package/lib/module/games/sliding-numbers/SlidingNumbersConstants.js.map +1 -1
  126. package/lib/module/games/sliding-numbers/SlidingNumbersService.js +1 -248
  127. package/lib/module/games/sliding-numbers/SlidingNumbersStore.js +1 -274
  128. package/lib/module/games/sliding-numbers/components/GameBackground.js +1 -259
  129. package/lib/module/games/sliding-numbers/components/NumbersGrid.js +1 -174
  130. package/lib/module/games/sliding-numbers/components/NumbersTile.js +1 -116
  131. package/lib/module/games/sliding-numbers/components/ScoreBoard.js +1 -64
  132. package/lib/module/games/sliding-numbers/components/index.js +1 -7
  133. package/lib/module/games/snake/Snake.js +1 -189
  134. package/lib/module/games/snake/Snake.js.map +1 -1
  135. package/lib/module/games/snake/SnakeConstants.js +1 -138
  136. package/lib/module/games/snake/SnakeConstants.js.map +1 -1
  137. package/lib/module/games/snake/SnakeService.js +1 -148
  138. package/lib/module/games/snake/SnakeStore.js +1 -182
  139. package/lib/module/games/snake/components/GameBackground.js +1 -221
  140. package/lib/module/games/snake/components/GameGrid.js +1 -153
  141. package/lib/module/games/snake/components/ScoreBoard.js +1 -51
  142. package/lib/module/games/snake/components/index.js +1 -6
  143. package/lib/module/games/snake/index.js +1 -6
  144. package/lib/module/games/space-fighter/SpaceFighter.js +1 -165
  145. package/lib/module/games/space-fighter/SpaceFighter.js.map +1 -1
  146. package/lib/module/games/space-fighter/SpaceFighterConstants.js +1 -108
  147. package/lib/module/games/space-fighter/SpaceFighterConstants.js.map +1 -1
  148. package/lib/module/games/space-fighter/SpaceFighterService.js +1 -326
  149. package/lib/module/games/space-fighter/SpaceFighterStore.js +1 -209
  150. package/lib/module/games/space-fighter/components/AsteroidComponent.js +1 -113
  151. package/lib/module/games/space-fighter/components/GameArea.js +1 -289
  152. package/lib/module/games/space-fighter/components/GameBackground.js +1 -239
  153. package/lib/module/games/space-fighter/components/ScoreBoard.js +1 -136
  154. package/lib/module/games/space-fighter/components/Spacecraft3D.js +1 -202
  155. package/lib/module/games/space-fighter/components/SpacecraftPath.js +1 -52
  156. package/lib/module/games/space-fighter/components/index.js +1 -9
  157. package/lib/module/games/whack-a-mole/WhackAMole.js +1 -270
  158. package/lib/module/games/whack-a-mole/WhackAMole.js.map +1 -1
  159. package/lib/module/games/whack-a-mole/WhackAMoleConstants.js +1 -115
  160. package/lib/module/games/whack-a-mole/WhackAMoleConstants.js.map +1 -1
  161. package/lib/module/games/whack-a-mole/WhackAMoleService.js +1 -120
  162. package/lib/module/games/whack-a-mole/WhackAMoleStore.js +1 -172
  163. package/lib/module/games/whack-a-mole/components/GameBackground.js +1 -477
  164. package/lib/module/games/whack-a-mole/components/GameGrid.js +1 -97
  165. package/lib/module/games/whack-a-mole/components/GameHole.js +1 -196
  166. package/lib/module/games/whack-a-mole/components/MoleCharacter.js +1 -241
  167. package/lib/module/games/whack-a-mole/components/ScoreBoard.js +1 -67
  168. package/lib/module/games/whack-a-mole/components/ScoreBoard.js.map +1 -1
  169. package/lib/module/games/whack-a-mole/components/index.js +1 -8
  170. package/lib/module/helpers/AnimationFrame.js +1 -120
  171. package/lib/module/helpers/AnimationTracker.js +1 -89
  172. package/lib/module/helpers/ErrorHandler.js +1 -269
  173. package/lib/module/helpers/GameControlButton.js +1 -219
  174. package/lib/module/helpers/GameOverModal.js +1 -144
  175. package/lib/module/helpers/GameOverModal.js.map +1 -1
  176. package/lib/module/helpers/GameSettingsModal.js +1 -287
  177. package/lib/module/helpers/ParticleBlast.js +1 -134
  178. package/lib/module/helpers/ScoreBoardContainer.js +1 -34
  179. package/lib/module/helpers/index.js +1 -12
  180. package/lib/module/index.js +1 -22
  181. package/lib/module/services/GamesConstants.js +1 -178
  182. package/lib/module/services/GamesService.js +1 -112
  183. package/lib/module/services/GamesService.js.map +1 -1
  184. package/lib/module/services/HapticsService.js +1 -77
  185. package/lib/module/services/SoundsService.js +1 -302
  186. package/lib/module/services/UtilsService.js +1 -32
  187. package/lib/typescript/src/games/balloon-blaster/BalloonBlaster.d.ts.map +1 -1
  188. package/lib/typescript/src/games/balloon-blaster/BalloonBlasterConstants.d.ts +1 -1
  189. package/lib/typescript/src/games/balloon-blaster/components/ScoreBoard.d.ts.map +1 -1
  190. package/lib/typescript/src/games/candy-crush/CandyCrushConstants.d.ts +7 -7
  191. package/lib/typescript/src/games/colors-sort/ColorsSort.d.ts.map +1 -1
  192. package/lib/typescript/src/games/colors-sort/ColorsSortStore.d.ts.map +1 -1
  193. package/lib/typescript/src/games/dino-jump/DinoJump.d.ts.map +1 -1
  194. package/lib/typescript/src/games/dino-jump/components/DinoSprite.d.ts.map +1 -1
  195. package/lib/typescript/src/games/flappy-bird/FlappyBird.d.ts.map +1 -1
  196. package/lib/typescript/src/games/flappy-bird/FlappyBirdConstants.d.ts.map +1 -1
  197. package/lib/typescript/src/games/fruit-merger/FruitMerger.d.ts.map +1 -1
  198. package/lib/typescript/src/games/fruit-merger/FruitMergerConstants.d.ts.map +1 -1
  199. package/lib/typescript/src/games/fruit-ninja/FruitNinja.d.ts.map +1 -1
  200. package/lib/typescript/src/games/fruit-ninja/components/ScoreBoard.d.ts.map +1 -1
  201. package/lib/typescript/src/games/game-2048/Game2048.d.ts.map +1 -1
  202. package/lib/typescript/src/games/maze-runner/MazeRunner.d.ts.map +1 -1
  203. package/lib/typescript/src/games/popit-fidget/PopitFidget.d.ts.map +1 -1
  204. package/lib/typescript/src/games/sliding-numbers/SlidingNumbers.d.ts.map +1 -1
  205. package/lib/typescript/src/games/space-fighter/SpaceFighter.d.ts.map +1 -1
  206. package/lib/typescript/src/games/whack-a-mole/WhackAMole.d.ts.map +1 -1
  207. package/lib/typescript/src/games/whack-a-mole/WhackAMoleConstants.d.ts +1 -1
  208. package/lib/typescript/src/games/whack-a-mole/components/ScoreBoard.d.ts.map +1 -1
  209. package/lib/typescript/src/helpers/GameOverModal.d.ts +3 -0
  210. package/lib/typescript/src/helpers/GameOverModal.d.ts.map +1 -1
  211. package/lib/typescript/src/services/GamesConstants.d.ts +7 -7
  212. package/package.json +2 -2
@@ -1,1267 +1 @@
1
- "use strict";
2
-
3
- import React from 'react';
4
- import { View, Dimensions } from 'react-native';
5
- import { Canvas, LinearGradient, Rect, Circle, Path, Skia, vec, Group, Shadow } from '@shopify/react-native-skia';
6
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
7
- const {
8
- width,
9
- height
10
- } = Dimensions.get('window');
11
- // Create grass path based on dynamic ground height
12
- const createGrassPath = grassStartY => {
13
- const path = Skia.Path.Make();
14
- const segmentWidth = width / 8;
15
- path.moveTo(0, grassStartY);
16
- for (let i = 0; i < 8; i++) {
17
- const x = i * segmentWidth;
18
- const y = grassStartY + Math.sin(i * 0.5) * 8;
19
- const controlX = x + segmentWidth / 2;
20
- const controlY = y + Math.cos(i * 0.3) * 6;
21
- path.quadTo(controlX, controlY, x + segmentWidth, y);
22
- }
23
- path.lineTo(width, height);
24
- path.lineTo(0, height);
25
- path.close();
26
- return path;
27
- };
28
-
29
- // Pre-compute static sun rays
30
- const createStaticSunRays = () => {
31
- return Array.from({
32
- length: 16
33
- }, (_, index) => {
34
- const angle = 360 / 16 * index;
35
- const radian = angle * Math.PI / 180;
36
- const isLongRay = index % 2 === 0;
37
- const rayLength = isLongRay ? 25 : 15;
38
- const rayWidth = isLongRay ? 4 : 2;
39
- const startDistance = 45;
40
- const startX = width * 0.8 + Math.cos(radian) * startDistance;
41
- const startY = height * 0.15 + Math.sin(radian) * startDistance;
42
- const endX = width * 0.8 + Math.cos(radian) * (startDistance + rayLength);
43
- const endY = height * 0.15 + Math.sin(radian) * (startDistance + rayLength);
44
- const rayPath = Skia.Path.Make();
45
- rayPath.moveTo(startX, startY);
46
- rayPath.lineTo(endX, endY);
47
- return {
48
- path: rayPath,
49
- width: rayWidth
50
- };
51
- });
52
- };
53
-
54
- // Create flower positions based on dynamic grass line
55
- const createFlowerPositions = grassStartY => {
56
- return Array.from({
57
- length: 12
58
- }, (_, i) => ({
59
- x: width / 12 * i + i % 3 * 15 + 20,
60
- y: grassStartY - 10 - i % 4 * 8
61
- }));
62
- };
63
-
64
- // Static computed values
65
- const staticSunRays = createStaticSunRays();
66
- export const GameBackground = ({
67
- children,
68
- offset = 0
69
- }) => {
70
- // Dynamic ground height based on offset
71
- const buttonAreaHeight = offset > 0 ? 150 : 250;
72
- const grassStartY = height - buttonAreaHeight;
73
-
74
- // Create dynamic paths based on ground height
75
- const grassPath = createGrassPath(grassStartY);
76
- const flowerPositions = createFlowerPositions(grassStartY);
77
-
78
- // Adjust sun and cloud positions based on offset
79
- const sunY = height * 0.15 + offset * 0.9;
80
- const cloud1Y = height * 0.24 + offset * 0.9;
81
- const cloud2Y = height * 0.27 + offset * 0.9;
82
- const cloud3Y = height * 0.19 + offset * 0.9;
83
- const cloud4Y = height * 0.15 + offset * 0.9;
84
- return /*#__PURE__*/_jsxs(View, {
85
- style: {
86
- flex: 1
87
- },
88
- children: [/*#__PURE__*/_jsxs(Canvas, {
89
- style: {
90
- position: 'absolute',
91
- top: 0,
92
- left: 0,
93
- right: 0,
94
- bottom: 0,
95
- width,
96
- height
97
- },
98
- children: [/*#__PURE__*/_jsx(Rect, {
99
- x: 0,
100
- y: 0,
101
- width: width,
102
- height: grassStartY,
103
- children: /*#__PURE__*/_jsx(LinearGradient, {
104
- start: vec(0, 0),
105
- end: vec(0, grassStartY),
106
- colors: ['#87CEEB', '#98D8E8', '#B0E0E6']
107
- })
108
- }), /*#__PURE__*/_jsx(Rect, {
109
- x: 0,
110
- y: grassStartY,
111
- width: width,
112
- height: buttonAreaHeight,
113
- children: /*#__PURE__*/_jsx(LinearGradient, {
114
- start: vec(0, grassStartY),
115
- end: vec(0, height),
116
- colors: ['#8B4513', '#A0522D', '#654321']
117
- })
118
- }), /*#__PURE__*/_jsxs(Group, {
119
- children: [/*#__PURE__*/_jsxs(Circle, {
120
- cx: width * 0.8,
121
- cy: sunY,
122
- r: 40,
123
- children: [/*#__PURE__*/_jsx(LinearGradient, {
124
- start: vec(-40, -40),
125
- end: vec(40, 40),
126
- colors: ['#FFFF99', '#FFD700', '#FFA500', '#FF8C00']
127
- }), /*#__PURE__*/_jsx(Shadow, {
128
- dx: 0,
129
- dy: 0,
130
- blur: 32,
131
- color: "#FFD700"
132
- })]
133
- }), /*#__PURE__*/_jsx(Circle, {
134
- cx: width * 0.8 - 8,
135
- cy: sunY - 8,
136
- r: 15,
137
- children: /*#__PURE__*/_jsx(LinearGradient, {
138
- start: vec(-15, -15),
139
- end: vec(15, 15),
140
- colors: ['#FFFFFF', '#FFFF99']
141
- })
142
- }), staticSunRays.map((_, index) => {
143
- // Recalculate ray positions based on offset
144
- const angle = 360 / 16 * index;
145
- const radian = angle * Math.PI / 180;
146
- const isLongRay = index % 2 === 0;
147
- const rayLength = isLongRay ? 25 : 15;
148
- const rayWidth = isLongRay ? 4 : 2;
149
- const startDistance = 45;
150
- const startX = width * 0.8 + Math.cos(radian) * startDistance;
151
- const startY = sunY + Math.sin(radian) * startDistance;
152
- const endX = width * 0.8 + Math.cos(radian) * (startDistance + rayLength);
153
- const endY = sunY + Math.sin(radian) * (startDistance + rayLength);
154
- const rayPath = Skia.Path.Make();
155
- rayPath.moveTo(startX, startY);
156
- rayPath.lineTo(endX, endY);
157
- return /*#__PURE__*/_jsx(Path, {
158
- path: rayPath,
159
- style: "stroke",
160
- strokeWidth: rayWidth,
161
- color: "#FFD700",
162
- opacity: 0.75
163
- }, index);
164
- }), /*#__PURE__*/_jsx(Circle, {
165
- cx: width * 0.8,
166
- cy: sunY,
167
- r: 60,
168
- opacity: 0.1,
169
- children: /*#__PURE__*/_jsx(LinearGradient, {
170
- start: vec(-60, -60),
171
- end: vec(60, 60),
172
- colors: ['#FFD700', 'transparent']
173
- })
174
- })]
175
- }), /*#__PURE__*/_jsxs(Group, {
176
- children: [/*#__PURE__*/_jsxs(Group, {
177
- children: [/*#__PURE__*/_jsx(Circle, {
178
- cx: width * 0.12,
179
- cy: cloud1Y,
180
- r: 16,
181
- color: "#F0F8FF",
182
- opacity: 0.35,
183
- children: /*#__PURE__*/_jsx(Shadow, {
184
- dx: 1,
185
- dy: 2,
186
- blur: 12,
187
- color: "rgba(0,0,0,0.05)"
188
- })
189
- }), /*#__PURE__*/_jsx(Circle, {
190
- cx: width * 0.18,
191
- cy: cloud1Y - (height * 0.24 - height * 0.21),
192
- r: 22,
193
- color: "#FFFFFF",
194
- opacity: 0.45,
195
- children: /*#__PURE__*/_jsx(Shadow, {
196
- dx: 1,
197
- dy: 2,
198
- blur: 12,
199
- color: "rgba(0,0,0,0.05)"
200
- })
201
- }), /*#__PURE__*/_jsx(Circle, {
202
- cx: width * 0.25,
203
- cy: cloud1Y - (height * 0.24 - height * 0.19),
204
- r: 26,
205
- color: "#F8F8FF",
206
- opacity: 0.55,
207
- children: /*#__PURE__*/_jsx(Shadow, {
208
- dx: 2,
209
- dy: 3,
210
- blur: 12,
211
- color: "rgba(0,0,0,0.06)"
212
- })
213
- }), /*#__PURE__*/_jsx(Circle, {
214
- cx: width * 0.32,
215
- cy: cloud1Y - (height * 0.24 - height * 0.21),
216
- r: 20,
217
- color: "#FFFFFF",
218
- opacity: 0.50,
219
- children: /*#__PURE__*/_jsx(Shadow, {
220
- dx: 1,
221
- dy: 2,
222
- blur: 12,
223
- color: "rgba(0,0,0,0.05)"
224
- })
225
- }), /*#__PURE__*/_jsx(Circle, {
226
- cx: width * 0.37,
227
- cy: cloud1Y,
228
- r: 14,
229
- color: "#F0F8FF",
230
- opacity: 0.40,
231
- children: /*#__PURE__*/_jsx(Shadow, {
232
- dx: 1,
233
- dy: 2,
234
- blur: 12,
235
- color: "rgba(0,0,0,0.04)"
236
- })
237
- }), /*#__PURE__*/_jsx(Circle, {
238
- cx: width * 0.15,
239
- cy: cloud1Y + (height * 0.26 - height * 0.24),
240
- r: 8,
241
- color: "#F8F8FF",
242
- opacity: 0.25
243
- }), /*#__PURE__*/_jsx(Circle, {
244
- cx: width * 0.35,
245
- cy: cloud1Y - (height * 0.24 - height * 0.18),
246
- r: 6,
247
- color: "#FFFFFF",
248
- opacity: 0.30
249
- }), /*#__PURE__*/_jsx(Circle, {
250
- cx: width * 0.40,
251
- cy: cloud1Y - (height * 0.24 - height * 0.22),
252
- r: 5,
253
- color: "#F0F8FF",
254
- opacity: 0.20
255
- }), /*#__PURE__*/_jsx(Circle, {
256
- cx: width * 0.22,
257
- cy: cloud1Y - (height * 0.24 - height * 0.18),
258
- r: 7,
259
- color: "#FFFFFF",
260
- opacity: 0.35
261
- }), /*#__PURE__*/_jsx(Circle, {
262
- cx: width * 0.28,
263
- cy: cloud1Y - (height * 0.24 - height * 0.20),
264
- r: 5,
265
- color: "#FFFFFF",
266
- opacity: 0.25
267
- })]
268
- }), /*#__PURE__*/_jsxs(Group, {
269
- children: [/*#__PURE__*/_jsx(Circle, {
270
- cx: width * 0.62,
271
- cy: cloud2Y,
272
- r: 15,
273
- color: "#F0F8FF",
274
- opacity: 0.40,
275
- children: /*#__PURE__*/_jsx(Shadow, {
276
- dx: 1,
277
- dy: 2,
278
- blur: 10,
279
- color: "rgba(0,0,0,0.04)"
280
- })
281
- }), /*#__PURE__*/_jsx(Circle, {
282
- cx: width * 0.69,
283
- cy: cloud2Y - (height * 0.27 - height * 0.24),
284
- r: 19,
285
- color: "#FFFFFF",
286
- opacity: 0.50,
287
- children: /*#__PURE__*/_jsx(Shadow, {
288
- dx: 1,
289
- dy: 2,
290
- blur: 10,
291
- color: "rgba(0,0,0,0.05)"
292
- })
293
- }), /*#__PURE__*/_jsx(Circle, {
294
- cx: width * 0.76,
295
- cy: cloud2Y - (height * 0.27 - height * 0.26),
296
- r: 13,
297
- color: "#F8F8FF",
298
- opacity: 0.45,
299
- children: /*#__PURE__*/_jsx(Shadow, {
300
- dx: 1,
301
- dy: 2,
302
- blur: 10,
303
- color: "rgba(0,0,0,0.04)"
304
- })
305
- }), /*#__PURE__*/_jsx(Circle, {
306
- cx: width * 0.81,
307
- cy: cloud2Y + (height * 0.28 - height * 0.27),
308
- r: 9,
309
- color: "#F0F8FF",
310
- opacity: 0.35,
311
- children: /*#__PURE__*/_jsx(Shadow, {
312
- dx: 1,
313
- dy: 1,
314
- blur: 8,
315
- color: "rgba(0,0,0,0.03)"
316
- })
317
- }), /*#__PURE__*/_jsx(Circle, {
318
- cx: width * 0.65,
319
- cy: cloud2Y + (height * 0.29 - height * 0.27),
320
- r: 6,
321
- color: "#F8F8FF",
322
- opacity: 0.20
323
- }), /*#__PURE__*/_jsx(Circle, {
324
- cx: width * 0.78,
325
- cy: cloud2Y - (height * 0.27 - height * 0.23),
326
- r: 4,
327
- color: "#FFFFFF",
328
- opacity: 0.25
329
- }), /*#__PURE__*/_jsx(Circle, {
330
- cx: width * 0.67,
331
- cy: cloud2Y - (height * 0.27 - height * 0.23),
332
- r: 5,
333
- color: "#FFFFFF",
334
- opacity: 0.30
335
- })]
336
- }), /*#__PURE__*/_jsxs(Group, {
337
- children: [/*#__PURE__*/_jsx(Circle, {
338
- cx: width * 0.84,
339
- cy: cloud3Y,
340
- r: 10,
341
- color: "#F0F8FF",
342
- opacity: 0.35,
343
- children: /*#__PURE__*/_jsx(Shadow, {
344
- dx: 0,
345
- dy: 1,
346
- blur: 6,
347
- color: "rgba(0,0,0,0.03)"
348
- })
349
- }), /*#__PURE__*/_jsx(Circle, {
350
- cx: width * 0.89,
351
- cy: cloud3Y - (height * 0.19 - height * 0.17),
352
- r: 12,
353
- color: "#FFFFFF",
354
- opacity: 0.40,
355
- children: /*#__PURE__*/_jsx(Shadow, {
356
- dx: 0,
357
- dy: 1,
358
- blur: 6,
359
- color: "rgba(0,0,0,0.03)"
360
- })
361
- }), /*#__PURE__*/_jsx(Circle, {
362
- cx: width * 0.93,
363
- cy: cloud3Y,
364
- r: 8,
365
- color: "#F8F8FF",
366
- opacity: 0.30,
367
- children: /*#__PURE__*/_jsx(Shadow, {
368
- dx: 0,
369
- dy: 1,
370
- blur: 6,
371
- color: "rgba(0,0,0,0.02)"
372
- })
373
- }), /*#__PURE__*/_jsx(Circle, {
374
- cx: width * 0.96,
375
- cy: cloud3Y - (height * 0.19 - height * 0.18),
376
- r: 4,
377
- color: "#F0F8FF",
378
- opacity: 0.15
379
- }), /*#__PURE__*/_jsx(Circle, {
380
- cx: width * 0.86,
381
- cy: cloud3Y + (height * 0.21 - height * 0.19),
382
- r: 3,
383
- color: "#FFFFFF",
384
- opacity: 0.20
385
- })]
386
- }), /*#__PURE__*/_jsxs(Group, {
387
- children: [/*#__PURE__*/_jsx(Circle, {
388
- cx: width * 0.45,
389
- cy: cloud4Y,
390
- r: 8,
391
- color: "#F8F8FF",
392
- opacity: 0.25,
393
- children: /*#__PURE__*/_jsx(Shadow, {
394
- dx: 0,
395
- dy: 1,
396
- blur: 4,
397
- color: "rgba(0,0,0,0.02)"
398
- })
399
- }), /*#__PURE__*/_jsx(Circle, {
400
- cx: width * 0.50,
401
- cy: height * 0.13,
402
- r: 10,
403
- color: "#FFFFFF",
404
- opacity: 0.30,
405
- children: /*#__PURE__*/_jsx(Shadow, {
406
- dx: 0,
407
- dy: 1,
408
- blur: 4,
409
- color: "rgba(0,0,0,0.02)"
410
- })
411
- }), /*#__PURE__*/_jsx(Circle, {
412
- cx: width * 0.54,
413
- cy: height * 0.15,
414
- r: 6,
415
- color: "#F0F8FF",
416
- opacity: 0.20,
417
- children: /*#__PURE__*/_jsx(Shadow, {
418
- dx: 0,
419
- dy: 1,
420
- blur: 4,
421
- color: "rgba(0,0,0,0.01)"
422
- })
423
- })]
424
- })]
425
- }), /*#__PURE__*/_jsxs(Path, {
426
- path: grassPath,
427
- children: [/*#__PURE__*/_jsx(LinearGradient, {
428
- start: vec(0, grassStartY - 20),
429
- end: vec(0, grassStartY + 20),
430
- colors: ['#32CD32', '#228B22', '#006400']
431
- }), /*#__PURE__*/_jsx(Shadow, {
432
- dx: 0,
433
- dy: -2,
434
- blur: 4,
435
- color: "rgba(0,0,0,0.2)"
436
- })]
437
- }), Array.from({
438
- length: 25
439
- }, (_, i) => {
440
- const x = width / 25 * i + i % 3 * 5; // Fixed pattern instead of random
441
- const grassHeight = 15 + i % 4 * 5; // Fixed heights
442
- const grassType = i % 3; // Fixed types
443
-
444
- const bladePath = Skia.Path.Make();
445
- bladePath.moveTo(x, grassStartY);
446
- if (grassType === 0) {
447
- bladePath.quadTo(x + 1, grassStartY - grassHeight * 0.6, x + 1, grassStartY - grassHeight);
448
- return /*#__PURE__*/_jsx(Path, {
449
- path: bladePath,
450
- style: "stroke",
451
- strokeWidth: 1.5,
452
- color: "#16a34a",
453
- opacity: 0.8
454
- }, `grass-${i}`);
455
- } else if (grassType === 1) {
456
- bladePath.quadTo(x + 2, grassStartY - grassHeight * 0.4, x + 3, grassStartY - grassHeight);
457
- return /*#__PURE__*/_jsx(Path, {
458
- path: bladePath,
459
- style: "stroke",
460
- strokeWidth: 2,
461
- color: "#15803d",
462
- opacity: 0.7
463
- }, `grass-${i}`);
464
- } else {
465
- const midHeight = grassHeight * 0.5;
466
- bladePath.quadTo(x + 1, grassStartY - midHeight, x + 2, grassStartY - grassHeight);
467
- return /*#__PURE__*/_jsx(Path, {
468
- path: bladePath,
469
- style: "stroke",
470
- strokeWidth: 2.5,
471
- color: "#166534",
472
- opacity: 0.6
473
- }, `grass-${i}`);
474
- }
475
- }), Array.from({
476
- length: 20
477
- }, (_, i) => {
478
- const x = width / 20 * i + i % 2 * 10; // Fixed positions
479
- const y = grassStartY - 5 + i % 3 * 5; // Fixed Y positions
480
- const grassClusterHeight = 10 + i % 3 * 2; // Fixed heights
481
-
482
- const clusterPath = Skia.Path.Make();
483
- clusterPath.moveTo(x, y);
484
- clusterPath.lineTo(x + 1, y - grassClusterHeight);
485
- clusterPath.moveTo(x + 2, y);
486
- clusterPath.lineTo(x + 3, y - grassClusterHeight * 0.8);
487
- clusterPath.moveTo(x + 4, y);
488
- clusterPath.lineTo(x + 5, y - grassClusterHeight * 0.6);
489
- return /*#__PURE__*/_jsx(Path, {
490
- path: clusterPath,
491
- style: "stroke",
492
- strokeWidth: 1,
493
- color: "#22c55e",
494
- opacity: 0.4
495
- }, `cluster-${i}`);
496
- }), Array.from({
497
- length: 8
498
- }, (_, i) => {
499
- const x = width / 8 * i + i % 3 * 20; // Fixed positions
500
- const y = grassStartY + 30 + i % 4 * 15; // Fixed Y positions
501
- const size = 2 + i % 3; // Fixed sizes
502
-
503
- return /*#__PURE__*/_jsx(Circle, {
504
- cx: x,
505
- cy: y,
506
- r: size,
507
- color: "#8B4513",
508
- opacity: 0.6
509
- }, i);
510
- }), /*#__PURE__*/_jsxs(Group, {
511
- children: [/*#__PURE__*/_jsxs(Group, {
512
- children: [/*#__PURE__*/_jsxs(Rect, {
513
- x: width * 0.05,
514
- y: grassStartY - 150,
515
- width: 20,
516
- height: 150,
517
- children: [/*#__PURE__*/_jsx(LinearGradient, {
518
- start: vec(0, 0),
519
- end: vec(20, 0),
520
- colors: ['#654321', '#8B4513', '#A0522D', '#8B4513']
521
- }), /*#__PURE__*/_jsx(Shadow, {
522
- dx: 3,
523
- dy: 0,
524
- blur: 6,
525
- color: "rgba(0,0,0,0.4)"
526
- })]
527
- }), /*#__PURE__*/_jsx(Rect, {
528
- x: width * 0.05 + 3,
529
- y: grassStartY - 120,
530
- width: 1,
531
- height: 90,
532
- color: "#5D4037",
533
- opacity: 0.8
534
- }), /*#__PURE__*/_jsx(Rect, {
535
- x: width * 0.05 + 7,
536
- y: grassStartY - 140,
537
- width: 1.5,
538
- height: 110,
539
- color: "#4A2C2A",
540
- opacity: 0.7
541
- }), /*#__PURE__*/_jsx(Rect, {
542
- x: width * 0.05 + 12,
543
- y: grassStartY - 100,
544
- width: 1,
545
- height: 70,
546
- color: "#5D4037",
547
- opacity: 0.6
548
- }), /*#__PURE__*/_jsx(Rect, {
549
- x: width * 0.05 + 16,
550
- y: grassStartY - 130,
551
- width: 1.5,
552
- height: 100,
553
- color: "#4A2C2A",
554
- opacity: 0.8
555
- }), /*#__PURE__*/_jsx(Rect, {
556
- x: width * 0.05 + 18,
557
- y: grassStartY - 130,
558
- width: 12,
559
- height: 4,
560
- color: "#8B4513",
561
- opacity: 0.9,
562
- children: /*#__PURE__*/_jsx(Shadow, {
563
- dx: 1,
564
- dy: 1,
565
- blur: 2,
566
- color: "rgba(0,0,0,0.3)"
567
- })
568
- }), /*#__PURE__*/_jsx(Rect, {
569
- x: width * 0.05 - 2,
570
- y: grassStartY - 100,
571
- width: 10,
572
- height: 3,
573
- color: "#A0522D",
574
- opacity: 0.8,
575
- children: /*#__PURE__*/_jsx(Shadow, {
576
- dx: -1,
577
- dy: 1,
578
- blur: 2,
579
- color: "rgba(0,0,0,0.3)"
580
- })
581
- }), /*#__PURE__*/_jsx(Rect, {
582
- x: width * 0.05 + 15,
583
- y: grassStartY - 160,
584
- width: 8,
585
- height: 3,
586
- color: "#8B4513",
587
- opacity: 0.7,
588
- children: /*#__PURE__*/_jsx(Shadow, {
589
- dx: 1,
590
- dy: 1,
591
- blur: 2,
592
- color: "rgba(0,0,0,0.2)"
593
- })
594
- }), /*#__PURE__*/_jsx(Circle, {
595
- cx: width * 0.05 + 10,
596
- cy: grassStartY - 150,
597
- r: 38,
598
- color: "#1B5E20",
599
- opacity: 0.9,
600
- children: /*#__PURE__*/_jsx(Shadow, {
601
- dx: 4,
602
- dy: 4,
603
- blur: 10,
604
- color: "rgba(0,0,0,0.3)"
605
- })
606
- }), /*#__PURE__*/_jsx(Circle, {
607
- cx: width * 0.05 + 18,
608
- cy: grassStartY - 180,
609
- r: 32,
610
- color: "#2E7D32",
611
- opacity: 0.8
612
- }), /*#__PURE__*/_jsx(Circle, {
613
- cx: width * 0.05 + 25,
614
- cy: grassStartY - 140,
615
- r: 28,
616
- color: "#388E3C",
617
- opacity: 0.7
618
- }), /*#__PURE__*/_jsx(Circle, {
619
- cx: width * 0.05 + 2,
620
- cy: grassStartY - 120,
621
- r: 30,
622
- color: "#2E7D32",
623
- opacity: 0.75
624
- }), /*#__PURE__*/_jsx(Circle, {
625
- cx: width * 0.05 - 5,
626
- cy: grassStartY - 160,
627
- r: 25,
628
- color: "#1B5E20",
629
- opacity: 0.8
630
- }), /*#__PURE__*/_jsx(Circle, {
631
- cx: width * 0.05 + 8,
632
- cy: grassStartY - 200,
633
- r: 26,
634
- color: "#4CAF50",
635
- opacity: 0.6
636
- }), /*#__PURE__*/_jsx(Circle, {
637
- cx: width * 0.05 + 20,
638
- cy: grassStartY - 200,
639
- r: 22,
640
- color: "#66BB6A",
641
- opacity: 0.5
642
- }), /*#__PURE__*/_jsx(Circle, {
643
- cx: width * 0.05 + 12,
644
- cy: grassStartY - 170,
645
- r: 20,
646
- color: "#388E3C",
647
- opacity: 0.9
648
- }), /*#__PURE__*/_jsx(Circle, {
649
- cx: width * 0.05 + 6,
650
- cy: grassStartY - 140,
651
- r: 18,
652
- color: "#2E7D32",
653
- opacity: 0.8
654
- }), /*#__PURE__*/_jsx(Circle, {
655
- cx: width * 0.05 + 15,
656
- cy: grassStartY - 220,
657
- r: 15,
658
- color: "#81C784",
659
- opacity: 0.6
660
- }), /*#__PURE__*/_jsx(Circle, {
661
- cx: width * 0.05 + 3,
662
- cy: grassStartY - 210,
663
- r: 12,
664
- color: "#A5D6A7",
665
- opacity: 0.5
666
- }), /*#__PURE__*/_jsx(Circle, {
667
- cx: width * 0.05 + 28,
668
- cy: grassStartY - 180,
669
- r: 14,
670
- color: "#81C784",
671
- opacity: 0.6
672
- }), /*#__PURE__*/_jsx(Circle, {
673
- cx: width * 0.05 - 8,
674
- cy: grassStartY - 180,
675
- r: 16,
676
- color: "#66BB6A",
677
- opacity: 0.7
678
- }), /*#__PURE__*/_jsx(Circle, {
679
- cx: width * 0.05 + 5,
680
- cy: grassStartY - 230,
681
- r: 10,
682
- color: "#C8E6C9",
683
- opacity: 0.7
684
- }), /*#__PURE__*/_jsx(Circle, {
685
- cx: width * 0.05 + 18,
686
- cy: grassStartY - 240,
687
- r: 8,
688
- color: "#E8F5E8",
689
- opacity: 0.6
690
- }), /*#__PURE__*/_jsx(Circle, {
691
- cx: width * 0.05 + 22,
692
- cy: grassStartY - 190,
693
- r: 6,
694
- color: "#C8E6C9",
695
- opacity: 0.8
696
- })]
697
- }), /*#__PURE__*/_jsxs(Group, {
698
- children: [/*#__PURE__*/_jsxs(Rect, {
699
- x: width * 0.88,
700
- y: grassStartY - 200,
701
- width: 18,
702
- height: 200,
703
- children: [/*#__PURE__*/_jsx(LinearGradient, {
704
- start: vec(0, 0),
705
- end: vec(18, 0),
706
- colors: ['#4A2C2A', '#654321', '#8B4513', '#654321']
707
- }), /*#__PURE__*/_jsx(Shadow, {
708
- dx: -3,
709
- dy: 0,
710
- blur: 6,
711
- color: "rgba(0,0,0,0.4)"
712
- })]
713
- }), /*#__PURE__*/_jsx(Rect, {
714
- x: width * 0.88 + 2,
715
- y: grassStartY - 170,
716
- width: 1,
717
- height: 150,
718
- color: "#3E2723",
719
- opacity: 0.9
720
- }), /*#__PURE__*/_jsx(Rect, {
721
- x: width * 0.88 + 6,
722
- y: grassStartY - 190,
723
- width: 1.5,
724
- height: 170,
725
- color: "#2E1A16",
726
- opacity: 0.8
727
- }), /*#__PURE__*/_jsx(Rect, {
728
- x: width * 0.88 + 11,
729
- y: grassStartY - 160,
730
- width: 1,
731
- height: 130,
732
- color: "#3E2723",
733
- opacity: 0.7
734
- }), /*#__PURE__*/_jsx(Rect, {
735
- x: width * 0.88 + 14,
736
- y: grassStartY - 180,
737
- width: 1.5,
738
- height: 160,
739
- color: "#2E1A16",
740
- opacity: 0.9
741
- }), /*#__PURE__*/_jsx(Circle, {
742
- cx: width * 0.88 + 9,
743
- cy: grassStartY - 120,
744
- r: 35,
745
- color: "#0D4F0C",
746
- opacity: 0.95,
747
- children: /*#__PURE__*/_jsx(Shadow, {
748
- dx: -4,
749
- dy: 4,
750
- blur: 10,
751
- color: "rgba(0,0,0,0.3)"
752
- })
753
- }), /*#__PURE__*/_jsx(Circle, {
754
- cx: width * 0.88 + 5,
755
- cy: grassStartY - 100,
756
- r: 30,
757
- color: "#1B5E20",
758
- opacity: 0.9
759
- }), /*#__PURE__*/_jsx(Circle, {
760
- cx: width * 0.88 + 13,
761
- cy: grassStartY - 110,
762
- r: 28,
763
- color: "#2E7D32",
764
- opacity: 0.8
765
- }), /*#__PURE__*/_jsx(Circle, {
766
- cx: width * 0.88 + 9,
767
- cy: grassStartY - 180,
768
- r: 32,
769
- color: "#1B5E20",
770
- opacity: 0.9
771
- }), /*#__PURE__*/_jsx(Circle, {
772
- cx: width * 0.88 + 6,
773
- cy: grassStartY - 170,
774
- r: 26,
775
- color: "#2E7D32",
776
- opacity: 0.85
777
- }), /*#__PURE__*/_jsx(Circle, {
778
- cx: width * 0.88 + 12,
779
- cy: grassStartY - 190,
780
- r: 24,
781
- color: "#388E3C",
782
- opacity: 0.8
783
- }), /*#__PURE__*/_jsx(Circle, {
784
- cx: width * 0.88 + 9,
785
- cy: grassStartY - 240,
786
- r: 28,
787
- color: "#2E7D32",
788
- opacity: 0.9
789
- }), /*#__PURE__*/_jsx(Circle, {
790
- cx: width * 0.88 + 7,
791
- cy: grassStartY - 230,
792
- r: 22,
793
- color: "#388E3C",
794
- opacity: 0.85
795
- }), /*#__PURE__*/_jsx(Circle, {
796
- cx: width * 0.88 + 11,
797
- cy: grassStartY - 250,
798
- r: 20,
799
- color: "#4CAF50",
800
- opacity: 0.8
801
- }), /*#__PURE__*/_jsx(Circle, {
802
- cx: width * 0.88 + 9,
803
- cy: grassStartY - 300,
804
- r: 22,
805
- color: "#388E3C",
806
- opacity: 0.9
807
- }), /*#__PURE__*/_jsx(Circle, {
808
- cx: width * 0.88 + 8,
809
- cy: grassStartY - 290,
810
- r: 18,
811
- color: "#4CAF50",
812
- opacity: 0.8
813
- }), /*#__PURE__*/_jsx(Circle, {
814
- cx: width * 0.88 + 10,
815
- cy: grassStartY - 310,
816
- r: 15,
817
- color: "#66BB6A",
818
- opacity: 0.7
819
- }), /*#__PURE__*/_jsx(Circle, {
820
- cx: width * 0.88 + 4,
821
- cy: grassStartY - 150,
822
- r: 8,
823
- color: "#0D4F0C",
824
- opacity: 0.8
825
- }), /*#__PURE__*/_jsx(Circle, {
826
- cx: width * 0.88 + 14,
827
- cy: grassStartY - 170,
828
- r: 6,
829
- color: "#1B5E20",
830
- opacity: 0.9
831
- }), /*#__PURE__*/_jsx(Circle, {
832
- cx: width * 0.88 + 3,
833
- cy: grassStartY - 220,
834
- r: 5,
835
- color: "#0D4F0C",
836
- opacity: 0.7
837
- }), /*#__PURE__*/_jsx(Circle, {
838
- cx: width * 0.88 + 15,
839
- cy: grassStartY - 240,
840
- r: 7,
841
- color: "#2E7D32",
842
- opacity: 0.8
843
- }), /*#__PURE__*/_jsx(Circle, {
844
- cx: width * 0.88 + 12,
845
- cy: grassStartY - 280,
846
- r: 8,
847
- color: "#81C784",
848
- opacity: 0.6
849
- }), /*#__PURE__*/_jsx(Circle, {
850
- cx: width * 0.88 + 11,
851
- cy: grassStartY - 320,
852
- r: 6,
853
- color: "#A5D6A7",
854
- opacity: 0.5
855
- }), /*#__PURE__*/_jsx(Circle, {
856
- cx: width * 0.88 + 13,
857
- cy: grassStartY - 190,
858
- r: 5,
859
- color: "#C8E6C9",
860
- opacity: 0.7
861
- })]
862
- })]
863
- }), /*#__PURE__*/_jsxs(Group, {
864
- children: [/*#__PURE__*/_jsxs(Group, {
865
- children: [/*#__PURE__*/_jsx(Circle, {
866
- cx: width * 0.15,
867
- cy: grassStartY - 60,
868
- r: 26,
869
- color: "#1B5E20",
870
- opacity: 0.95,
871
- children: /*#__PURE__*/_jsx(Shadow, {
872
- dx: 3,
873
- dy: 3,
874
- blur: 8,
875
- color: "rgba(0,0,0,0.3)"
876
- })
877
- }), /*#__PURE__*/_jsx(Circle, {
878
- cx: width * 0.18,
879
- cy: grassStartY - 90,
880
- r: 22,
881
- color: "#2E7D32",
882
- opacity: 0.9
883
- }), /*#__PURE__*/_jsx(Circle, {
884
- cx: width * 0.21,
885
- cy: grassStartY - 70,
886
- r: 18,
887
- color: "#388E3C",
888
- opacity: 0.8
889
- }), /*#__PURE__*/_jsx(Circle, {
890
- cx: width * 0.12,
891
- cy: grassStartY - 80,
892
- r: 20,
893
- color: "#2E7D32",
894
- opacity: 0.85
895
- }), /*#__PURE__*/_jsx(Circle, {
896
- cx: width * 0.09,
897
- cy: grassStartY - 50,
898
- r: 16,
899
- color: "#1B5E20",
900
- opacity: 0.9
901
- }), /*#__PURE__*/_jsx(Circle, {
902
- cx: width * 0.16,
903
- cy: grassStartY - 100,
904
- r: 19,
905
- color: "#4CAF50",
906
- opacity: 0.7
907
- }), /*#__PURE__*/_jsx(Circle, {
908
- cx: width * 0.19,
909
- cy: grassStartY - 95,
910
- r: 15,
911
- color: "#66BB6A",
912
- opacity: 0.6
913
- }), /*#__PURE__*/_jsx(Circle, {
914
- cx: width * 0.15,
915
- cy: grassStartY - 90,
916
- r: 14,
917
- color: "#388E3C",
918
- opacity: 0.9
919
- }), /*#__PURE__*/_jsx(Circle, {
920
- cx: width * 0.17,
921
- cy: grassStartY - 70,
922
- r: 12,
923
- color: "#2E7D32",
924
- opacity: 0.8
925
- }), /*#__PURE__*/_jsx(Circle, {
926
- cx: width * 0.13,
927
- cy: grassStartY - 95,
928
- r: 10,
929
- color: "#81C784",
930
- opacity: 0.7
931
- }), /*#__PURE__*/_jsx(Circle, {
932
- cx: width * 0.20,
933
- cy: grassStartY - 85,
934
- r: 8,
935
- color: "#A5D6A7",
936
- opacity: 0.6
937
- }), /*#__PURE__*/_jsx(Circle, {
938
- cx: width * 0.11,
939
- cy: grassStartY - 70,
940
- r: 9,
941
- color: "#66BB6A",
942
- opacity: 0.8
943
- }), /*#__PURE__*/_jsx(Circle, {
944
- cx: width * 0.22,
945
- cy: grassStartY - 80,
946
- r: 7,
947
- color: "#81C784",
948
- opacity: 0.7
949
- }), /*#__PURE__*/_jsx(Circle, {
950
- cx: width * 0.16,
951
- cy: grassStartY - 105,
952
- r: 6,
953
- color: "#C8E6C9",
954
- opacity: 0.8
955
- }), /*#__PURE__*/_jsx(Circle, {
956
- cx: width * 0.19,
957
- cy: grassStartY - 100,
958
- r: 4,
959
- color: "#E8F5E8",
960
- opacity: 0.7
961
- })]
962
- }), /*#__PURE__*/_jsxs(Group, {
963
- children: [/*#__PURE__*/_jsx(Circle, {
964
- cx: width * 0.35,
965
- cy: grassStartY - 40,
966
- r: 21,
967
- color: "#1B5E20",
968
- opacity: 0.9,
969
- children: /*#__PURE__*/_jsx(Shadow, {
970
- dx: 2,
971
- dy: 2,
972
- blur: 6,
973
- color: "rgba(0,0,0,0.25)"
974
- })
975
- }), /*#__PURE__*/_jsx(Circle, {
976
- cx: width * 0.37,
977
- cy: grassStartY - 60,
978
- r: 17,
979
- color: "#2E7D32",
980
- opacity: 0.85
981
- }), /*#__PURE__*/_jsx(Circle, {
982
- cx: width * 0.33,
983
- cy: grassStartY - 30,
984
- r: 15,
985
- color: "#388E3C",
986
- opacity: 0.8
987
- }), /*#__PURE__*/_jsx(Circle, {
988
- cx: width * 0.36,
989
- cy: grassStartY - 80,
990
- r: 13,
991
- color: "#4CAF50",
992
- opacity: 0.7
993
- }), /*#__PURE__*/_jsx(Circle, {
994
- cx: width * 0.32,
995
- cy: grassStartY - 60,
996
- r: 10,
997
- color: "#66BB6A",
998
- opacity: 0.8
999
- }), /*#__PURE__*/_jsx(Circle, {
1000
- cx: width * 0.38,
1001
- cy: grassStartY - 50,
1002
- r: 8,
1003
- color: "#81C784",
1004
- opacity: 0.7
1005
- }), /*#__PURE__*/_jsx(Circle, {
1006
- cx: width * 0.34,
1007
- cy: grassStartY - 90,
1008
- r: 5,
1009
- color: "#A5D6A7",
1010
- opacity: 0.8
1011
- })]
1012
- }), /*#__PURE__*/_jsxs(Group, {
1013
- children: [/*#__PURE__*/_jsx(Circle, {
1014
- cx: width * 0.52,
1015
- cy: grassStartY - 45,
1016
- r: 25,
1017
- color: "#1B5E20",
1018
- opacity: 0.95,
1019
- children: /*#__PURE__*/_jsx(Shadow, {
1020
- dx: 2,
1021
- dy: 3,
1022
- blur: 8,
1023
- color: "rgba(0,0,0,0.3)"
1024
- })
1025
- }), /*#__PURE__*/_jsx(Circle, {
1026
- cx: width * 0.55,
1027
- cy: grassStartY - 75,
1028
- r: 21,
1029
- color: "#2E7D32",
1030
- opacity: 0.9
1031
- }), /*#__PURE__*/_jsx(Circle, {
1032
- cx: width * 0.49,
1033
- cy: grassStartY - 35,
1034
- r: 19,
1035
- color: "#388E3C",
1036
- opacity: 0.85
1037
- }), /*#__PURE__*/_jsx(Circle, {
1038
- cx: width * 0.54,
1039
- cy: grassStartY - 100,
1040
- r: 16,
1041
- color: "#4CAF50",
1042
- opacity: 0.8
1043
- }), /*#__PURE__*/_jsx(Circle, {
1044
- cx: width * 0.50,
1045
- cy: grassStartY - 70,
1046
- r: 14,
1047
- color: "#66BB6A",
1048
- opacity: 0.75
1049
- }), /*#__PURE__*/_jsx(Circle, {
1050
- cx: width * 0.47,
1051
- cy: grassStartY - 90,
1052
- r: 11,
1053
- color: "#81C784",
1054
- opacity: 0.7
1055
- }), /*#__PURE__*/_jsx(Circle, {
1056
- cx: width * 0.56,
1057
- cy: grassStartY - 55,
1058
- r: 9,
1059
- color: "#A5D6A7",
1060
- opacity: 0.6
1061
- }), /*#__PURE__*/_jsx(Circle, {
1062
- cx: width * 0.51,
1063
- cy: grassStartY - 85,
1064
- r: 4,
1065
- color: "#FF69B4",
1066
- opacity: 0.9
1067
- }), /*#__PURE__*/_jsx(Circle, {
1068
- cx: width * 0.54,
1069
- cy: grassStartY - 75,
1070
- r: 3.5,
1071
- color: "#FF6B6B",
1072
- opacity: 0.85
1073
- }), /*#__PURE__*/_jsx(Circle, {
1074
- cx: width * 0.49,
1075
- cy: grassStartY - 55,
1076
- r: 3,
1077
- color: "#FF1744",
1078
- opacity: 0.8
1079
- }), /*#__PURE__*/_jsx(Circle, {
1080
- cx: width * 0.52,
1081
- cy: grassStartY - 105,
1082
- r: 6,
1083
- color: "#C8E6C9",
1084
- opacity: 0.8
1085
- })]
1086
- }), /*#__PURE__*/_jsxs(Group, {
1087
- children: [/*#__PURE__*/_jsx(Circle, {
1088
- cx: width * 0.72,
1089
- cy: grassStartY - 35,
1090
- r: 28,
1091
- color: "#0D4F0C",
1092
- opacity: 0.95,
1093
- children: /*#__PURE__*/_jsx(Shadow, {
1094
- dx: -2,
1095
- dy: 3,
1096
- blur: 8,
1097
- color: "rgba(0,0,0,0.3)"
1098
- })
1099
- }), /*#__PURE__*/_jsx(Circle, {
1100
- cx: width * 0.75,
1101
- cy: grassStartY - 70,
1102
- r: 24,
1103
- color: "#1B5E20",
1104
- opacity: 0.9
1105
- }), /*#__PURE__*/_jsx(Circle, {
1106
- cx: width * 0.69,
1107
- cy: grassStartY - 25,
1108
- r: 22,
1109
- color: "#2E7D32",
1110
- opacity: 0.85
1111
- }), /*#__PURE__*/_jsx(Circle, {
1112
- cx: width * 0.74,
1113
- cy: grassStartY - 85,
1114
- r: 19,
1115
- color: "#388E3C",
1116
- opacity: 0.8
1117
- }), /*#__PURE__*/_jsx(Circle, {
1118
- cx: width * 0.68,
1119
- cy: grassStartY - 55,
1120
- r: 17,
1121
- color: "#4CAF50",
1122
- opacity: 0.75
1123
- }), /*#__PURE__*/_jsx(Circle, {
1124
- cx: width * 0.77,
1125
- cy: grassStartY - 45,
1126
- r: 14,
1127
- color: "#66BB6A",
1128
- opacity: 0.7
1129
- }), /*#__PURE__*/_jsx(Circle, {
1130
- cx: width * 0.66,
1131
- cy: grassStartY - 75,
1132
- r: 12,
1133
- color: "#81C784",
1134
- opacity: 0.65
1135
- }), /*#__PURE__*/_jsx(Circle, {
1136
- cx: width * 0.71,
1137
- cy: grassStartY - 95,
1138
- r: 10,
1139
- color: "#A5D6A7",
1140
- opacity: 0.6
1141
- }), /*#__PURE__*/_jsx(Circle, {
1142
- cx: width * 0.73,
1143
- cy: grassStartY - 100,
1144
- r: 3,
1145
- color: "#9C27B0",
1146
- opacity: 0.9
1147
- }), /*#__PURE__*/_jsx(Circle, {
1148
- cx: width * 0.70,
1149
- cy: grassStartY - 90,
1150
- r: 2.5,
1151
- color: "#673AB7",
1152
- opacity: 0.85
1153
- }), /*#__PURE__*/_jsx(Circle, {
1154
- cx: width * 0.76,
1155
- cy: grassStartY - 55,
1156
- r: 3.5,
1157
- color: "#FF9800",
1158
- opacity: 0.8
1159
- }), /*#__PURE__*/_jsx(Circle, {
1160
- cx: width * 0.73,
1161
- cy: grassStartY - 110,
1162
- r: 7,
1163
- color: "#C8E6C9",
1164
- opacity: 0.8
1165
- }), /*#__PURE__*/_jsx(Circle, {
1166
- cx: width * 0.75,
1167
- cy: grassStartY - 90,
1168
- r: 5,
1169
- color: "#E8F5E8",
1170
- opacity: 0.7
1171
- })]
1172
- }), /*#__PURE__*/_jsxs(Group, {
1173
- children: [/*#__PURE__*/_jsx(Circle, {
1174
- cx: width * 0.25,
1175
- cy: grassStartY - 15,
1176
- r: 15,
1177
- color: "#1B5E20",
1178
- opacity: 0.8,
1179
- children: /*#__PURE__*/_jsx(Shadow, {
1180
- dx: 1,
1181
- dy: 2,
1182
- blur: 4,
1183
- color: "rgba(0,0,0,0.2)"
1184
- })
1185
- }), /*#__PURE__*/_jsx(Circle, {
1186
- cx: width * 0.27,
1187
- cy: grassStartY - 35,
1188
- r: 12,
1189
- color: "#2E7D32",
1190
- opacity: 0.75
1191
- }), /*#__PURE__*/_jsx(Circle, {
1192
- cx: width * 0.23,
1193
- cy: grassStartY - 5,
1194
- r: 10,
1195
- color: "#388E3C",
1196
- opacity: 0.7
1197
- }), /*#__PURE__*/_jsx(Circle, {
1198
- cx: width * 0.26,
1199
- cy: grassStartY - 45,
1200
- r: 7,
1201
- color: "#66BB6A",
1202
- opacity: 0.6
1203
- }), /*#__PURE__*/_jsx(Circle, {
1204
- cx: width * 0.65,
1205
- cy: grassStartY - 5,
1206
- r: 13,
1207
- color: "#2E7D32",
1208
- opacity: 0.8,
1209
- children: /*#__PURE__*/_jsx(Shadow, {
1210
- dx: -1,
1211
- dy: 2,
1212
- blur: 4,
1213
- color: "rgba(0,0,0,0.2)"
1214
- })
1215
- }), /*#__PURE__*/_jsx(Circle, {
1216
- cx: width * 0.67,
1217
- cy: grassStartY - 25,
1218
- r: 10,
1219
- color: "#388E3C",
1220
- opacity: 0.75
1221
- }), /*#__PURE__*/_jsx(Circle, {
1222
- cx: width * 0.63,
1223
- cy: grassStartY + 5,
1224
- r: 8,
1225
- color: "#4CAF50",
1226
- opacity: 0.7
1227
- }), /*#__PURE__*/_jsx(Circle, {
1228
- cx: width * 0.66,
1229
- cy: grassStartY - 35,
1230
- r: 5,
1231
- color: "#81C784",
1232
- opacity: 0.6
1233
- })]
1234
- })]
1235
- }), /*#__PURE__*/_jsx(Group, {
1236
- children: flowerPositions.map((pos, i) => {
1237
- const colors = ['#FF6B6B', '#FF69B4', '#9370DB', '#4169E1', '#FF8C00', '#32CD32'];
1238
- const color = colors[i % colors.length];
1239
- const size = 3 + i % 3; // Simplified size calculation
1240
-
1241
- return /*#__PURE__*/_jsxs(Group, {
1242
- children: [/*#__PURE__*/_jsx(Circle, {
1243
- cx: pos.x,
1244
- cy: pos.y,
1245
- r: size,
1246
- color: color,
1247
- opacity: 0.8,
1248
- children: /*#__PURE__*/_jsx(Shadow, {
1249
- dx: 0,
1250
- dy: 1,
1251
- blur: 1,
1252
- color: "rgba(0,0,0,0.2)"
1253
- })
1254
- }), /*#__PURE__*/_jsx(Circle, {
1255
- cx: pos.x,
1256
- cy: pos.y,
1257
- r: size * 0.4,
1258
- color: "#FFD700",
1259
- opacity: 0.9
1260
- })]
1261
- }, `flower-${i}`);
1262
- })
1263
- })]
1264
- }), children]
1265
- });
1266
- };
1267
- //# sourceMappingURL=GameBackground.js.map
1
+ "use strict";import React from 'react';import{View,Dimensions}from 'react-native';import{Canvas,LinearGradient,Rect,Circle,Path,Skia,vec,Group,Shadow}from '@shopify/react-native-skia';import{jsx as _jsx,jsxs as _jsxs}from "react/jsx-runtime";const{width,height}= Dimensions.get('window');const createGrassPath = grassStartY =>{const path = Skia.Path.Make();const segmentWidth = width / 8;path.moveTo(0,grassStartY);for(let i = 0;i < 8;i++){const x = i * segmentWidth;const y = grassStartY + Math.sin(i * 0.5)* 8;const controlX = x + segmentWidth / 2;const controlY = y + Math.cos(i * 0.3)* 6;path.quadTo(controlX,controlY,x + segmentWidth,y);}path.lineTo(width,height);path.lineTo(0,height);path.close();return path;};const createStaticSunRays =()=>{return Array.from({length:16},(_,index)=>{const angle = 360 / 16 * index;const radian = angle * Math.PI / 180;const isLongRay = index % 2 === 0;const rayLength = isLongRay ? 25:15;const rayWidth = isLongRay ? 4:2;const startDistance = 45;const startX = width * 0.8 + Math.cos(radian)* startDistance;const startY = height * 0.15 + Math.sin(radian)* startDistance;const endX = width * 0.8 + Math.cos(radian)*(startDistance + rayLength);const endY = height * 0.15 + Math.sin(radian)*(startDistance + rayLength);const rayPath = Skia.Path.Make();rayPath.moveTo(startX,startY);rayPath.lineTo(endX,endY);return{path:rayPath,width:rayWidth};});};const createFlowerPositions = grassStartY =>{return Array.from({length:12},(_,i)=>({x:width / 12 * i + i % 3 * 15 + 20,y:grassStartY - 10 - i % 4 * 8}));};const staticSunRays = createStaticSunRays();export const GameBackground =({children,offset = 0})=>{const buttonAreaHeight = offset > 0 ? 150:250;const grassStartY = height - buttonAreaHeight;const grassPath = createGrassPath(grassStartY);const flowerPositions = createFlowerPositions(grassStartY);const sunY = height * 0.15 + offset * 0.9;const cloud1Y = height * 0.24 + offset * 0.9;const cloud2Y = height * 0.27 + offset * 0.9;const cloud3Y = height * 0.19 + offset * 0.9;const cloud4Y = height * 0.15 + offset * 0.9;return _jsxs(View,{style:{flex:1},children:[_jsxs(Canvas,{style:{position:'absolute',top:0,left:0,right:0,bottom:0,width,height},children:[_jsx(Rect,{x:0,y:0,width:width,height:grassStartY,children:_jsx(LinearGradient,{start:vec(0,0),end:vec(0,grassStartY),colors:['#87CEEB','#98D8E8','#B0E0E6']})}),_jsx(Rect,{x:0,y:grassStartY,width:width,height:buttonAreaHeight,children:_jsx(LinearGradient,{start:vec(0,grassStartY),end:vec(0,height),colors:['#8B4513','#A0522D','#654321']})}),_jsxs(Group,{children:[_jsxs(Circle,{cx:width * 0.8,cy:sunY,r:40,children:[_jsx(LinearGradient,{start:vec(-40,-40),end:vec(40,40),colors:['#FFFF99','#FFD700','#FFA500','#FF8C00']}),_jsx(Shadow,{dx:0,dy:0,blur:32,color:"#FFD700"})]}),_jsx(Circle,{cx:width * 0.8 - 8,cy:sunY - 8,r:15,children:_jsx(LinearGradient,{start:vec(-15,-15),end:vec(15,15),colors:['#FFFFFF','#FFFF99']})}),staticSunRays.map((_,index)=>{const angle = 360 / 16 * index;const radian = angle * Math.PI / 180;const isLongRay = index % 2 === 0;const rayLength = isLongRay ? 25:15;const rayWidth = isLongRay ? 4:2;const startDistance = 45;const startX = width * 0.8 + Math.cos(radian)* startDistance;const startY = sunY + Math.sin(radian)* startDistance;const endX = width * 0.8 + Math.cos(radian)*(startDistance + rayLength);const endY = sunY + Math.sin(radian)*(startDistance + rayLength);const rayPath = Skia.Path.Make();rayPath.moveTo(startX,startY);rayPath.lineTo(endX,endY);return _jsx(Path,{path:rayPath,style:"stroke",strokeWidth:rayWidth,color:"#FFD700",opacity:0.75},index);}),_jsx(Circle,{cx:width * 0.8,cy:sunY,r:60,opacity:0.1,children:_jsx(LinearGradient,{start:vec(-60,-60),end:vec(60,60),colors:['#FFD700','transparent']})})]}),_jsxs(Group,{children:[_jsxs(Group,{children:[_jsx(Circle,{cx:width * 0.12,cy:cloud1Y,r:16,color:"#F0F8FF",opacity:0.35,children:_jsx(Shadow,{dx:1,dy:2,blur:12,color:"rgba(0,0,0,0.05)"})}),_jsx(Circle,{cx:width * 0.18,cy:cloud1Y -(height * 0.24 - height * 0.21),r:22,color:"#FFFFFF",opacity:0.45,children:_jsx(Shadow,{dx:1,dy:2,blur:12,color:"rgba(0,0,0,0.05)"})}),_jsx(Circle,{cx:width * 0.25,cy:cloud1Y -(height * 0.24 - height * 0.19),r:26,color:"#F8F8FF",opacity:0.55,children:_jsx(Shadow,{dx:2,dy:3,blur:12,color:"rgba(0,0,0,0.06)"})}),_jsx(Circle,{cx:width * 0.32,cy:cloud1Y -(height * 0.24 - height * 0.21),r:20,color:"#FFFFFF",opacity:0.50,children:_jsx(Shadow,{dx:1,dy:2,blur:12,color:"rgba(0,0,0,0.05)"})}),_jsx(Circle,{cx:width * 0.37,cy:cloud1Y,r:14,color:"#F0F8FF",opacity:0.40,children:_jsx(Shadow,{dx:1,dy:2,blur:12,color:"rgba(0,0,0,0.04)"})}),_jsx(Circle,{cx:width * 0.15,cy:cloud1Y +(height * 0.26 - height * 0.24),r:8,color:"#F8F8FF",opacity:0.25}),_jsx(Circle,{cx:width * 0.35,cy:cloud1Y -(height * 0.24 - height * 0.18),r:6,color:"#FFFFFF",opacity:0.30}),_jsx(Circle,{cx:width * 0.40,cy:cloud1Y -(height * 0.24 - height * 0.22),r:5,color:"#F0F8FF",opacity:0.20}),_jsx(Circle,{cx:width * 0.22,cy:cloud1Y -(height * 0.24 - height * 0.18),r:7,color:"#FFFFFF",opacity:0.35}),_jsx(Circle,{cx:width * 0.28,cy:cloud1Y -(height * 0.24 - height * 0.20),r:5,color:"#FFFFFF",opacity:0.25})]}),_jsxs(Group,{children:[_jsx(Circle,{cx:width * 0.62,cy:cloud2Y,r:15,color:"#F0F8FF",opacity:0.40,children:_jsx(Shadow,{dx:1,dy:2,blur:10,color:"rgba(0,0,0,0.04)"})}),_jsx(Circle,{cx:width * 0.69,cy:cloud2Y -(height * 0.27 - height * 0.24),r:19,color:"#FFFFFF",opacity:0.50,children:_jsx(Shadow,{dx:1,dy:2,blur:10,color:"rgba(0,0,0,0.05)"})}),_jsx(Circle,{cx:width * 0.76,cy:cloud2Y -(height * 0.27 - height * 0.26),r:13,color:"#F8F8FF",opacity:0.45,children:_jsx(Shadow,{dx:1,dy:2,blur:10,color:"rgba(0,0,0,0.04)"})}),_jsx(Circle,{cx:width * 0.81,cy:cloud2Y +(height * 0.28 - height * 0.27),r:9,color:"#F0F8FF",opacity:0.35,children:_jsx(Shadow,{dx:1,dy:1,blur:8,color:"rgba(0,0,0,0.03)"})}),_jsx(Circle,{cx:width * 0.65,cy:cloud2Y +(height * 0.29 - height * 0.27),r:6,color:"#F8F8FF",opacity:0.20}),_jsx(Circle,{cx:width * 0.78,cy:cloud2Y -(height * 0.27 - height * 0.23),r:4,color:"#FFFFFF",opacity:0.25}),_jsx(Circle,{cx:width * 0.67,cy:cloud2Y -(height * 0.27 - height * 0.23),r:5,color:"#FFFFFF",opacity:0.30})]}),_jsxs(Group,{children:[_jsx(Circle,{cx:width * 0.84,cy:cloud3Y,r:10,color:"#F0F8FF",opacity:0.35,children:_jsx(Shadow,{dx:0,dy:1,blur:6,color:"rgba(0,0,0,0.03)"})}),_jsx(Circle,{cx:width * 0.89,cy:cloud3Y -(height * 0.19 - height * 0.17),r:12,color:"#FFFFFF",opacity:0.40,children:_jsx(Shadow,{dx:0,dy:1,blur:6,color:"rgba(0,0,0,0.03)"})}),_jsx(Circle,{cx:width * 0.93,cy:cloud3Y,r:8,color:"#F8F8FF",opacity:0.30,children:_jsx(Shadow,{dx:0,dy:1,blur:6,color:"rgba(0,0,0,0.02)"})}),_jsx(Circle,{cx:width * 0.96,cy:cloud3Y -(height * 0.19 - height * 0.18),r:4,color:"#F0F8FF",opacity:0.15}),_jsx(Circle,{cx:width * 0.86,cy:cloud3Y +(height * 0.21 - height * 0.19),r:3,color:"#FFFFFF",opacity:0.20})]}),_jsxs(Group,{children:[_jsx(Circle,{cx:width * 0.45,cy:cloud4Y,r:8,color:"#F8F8FF",opacity:0.25,children:_jsx(Shadow,{dx:0,dy:1,blur:4,color:"rgba(0,0,0,0.02)"})}),_jsx(Circle,{cx:width * 0.50,cy:height * 0.13,r:10,color:"#FFFFFF",opacity:0.30,children:_jsx(Shadow,{dx:0,dy:1,blur:4,color:"rgba(0,0,0,0.02)"})}),_jsx(Circle,{cx:width * 0.54,cy:height * 0.15,r:6,color:"#F0F8FF",opacity:0.20,children:_jsx(Shadow,{dx:0,dy:1,blur:4,color:"rgba(0,0,0,0.01)"})})]})]}),_jsxs(Path,{path:grassPath,children:[_jsx(LinearGradient,{start:vec(0,grassStartY - 20),end:vec(0,grassStartY + 20),colors:['#32CD32','#228B22','#006400']}),_jsx(Shadow,{dx:0,dy:-2,blur:4,color:"rgba(0,0,0,0.2)"})]}),Array.from({length:25},(_,i)=>{const x = width / 25 * i + i % 3 * 5;const grassHeight = 15 + i % 4 * 5;const grassType = i % 3;const bladePath = Skia.Path.Make();bladePath.moveTo(x,grassStartY);if(grassType === 0){bladePath.quadTo(x + 1,grassStartY - grassHeight * 0.6,x + 1,grassStartY - grassHeight);return _jsx(Path,{path:bladePath,style:"stroke",strokeWidth:1.5,color:"#16a34a",opacity:0.8},`grass-${i}`);}else if(grassType === 1){bladePath.quadTo(x + 2,grassStartY - grassHeight * 0.4,x + 3,grassStartY - grassHeight);return _jsx(Path,{path:bladePath,style:"stroke",strokeWidth:2,color:"#15803d",opacity:0.7},`grass-${i}`);}else{const midHeight = grassHeight * 0.5;bladePath.quadTo(x + 1,grassStartY - midHeight,x + 2,grassStartY - grassHeight);return _jsx(Path,{path:bladePath,style:"stroke",strokeWidth:2.5,color:"#166534",opacity:0.6},`grass-${i}`);}}),Array.from({length:20},(_,i)=>{const x = width / 20 * i + i % 2 * 10;const y = grassStartY - 5 + i % 3 * 5;const grassClusterHeight = 10 + i % 3 * 2;const clusterPath = Skia.Path.Make();clusterPath.moveTo(x,y);clusterPath.lineTo(x + 1,y - grassClusterHeight);clusterPath.moveTo(x + 2,y);clusterPath.lineTo(x + 3,y - grassClusterHeight * 0.8);clusterPath.moveTo(x + 4,y);clusterPath.lineTo(x + 5,y - grassClusterHeight * 0.6);return _jsx(Path,{path:clusterPath,style:"stroke",strokeWidth:1,color:"#22c55e",opacity:0.4},`cluster-${i}`);}),Array.from({length:8},(_,i)=>{const x = width / 8 * i + i % 3 * 20;const y = grassStartY + 30 + i % 4 * 15;const size = 2 + i % 3;return _jsx(Circle,{cx:x,cy:y,r:size,color:"#8B4513",opacity:0.6},i);}),_jsxs(Group,{children:[_jsxs(Group,{children:[_jsxs(Rect,{x:width * 0.05,y:grassStartY - 150,width:20,height:150,children:[_jsx(LinearGradient,{start:vec(0,0),end:vec(20,0),colors:['#654321','#8B4513','#A0522D','#8B4513']}),_jsx(Shadow,{dx:3,dy:0,blur:6,color:"rgba(0,0,0,0.4)"})]}),_jsx(Rect,{x:width * 0.05 + 3,y:grassStartY - 120,width:1,height:90,color:"#5D4037",opacity:0.8}),_jsx(Rect,{x:width * 0.05 + 7,y:grassStartY - 140,width:1.5,height:110,color:"#4A2C2A",opacity:0.7}),_jsx(Rect,{x:width * 0.05 + 12,y:grassStartY - 100,width:1,height:70,color:"#5D4037",opacity:0.6}),_jsx(Rect,{x:width * 0.05 + 16,y:grassStartY - 130,width:1.5,height:100,color:"#4A2C2A",opacity:0.8}),_jsx(Rect,{x:width * 0.05 + 18,y:grassStartY - 130,width:12,height:4,color:"#8B4513",opacity:0.9,children:_jsx(Shadow,{dx:1,dy:1,blur:2,color:"rgba(0,0,0,0.3)"})}),_jsx(Rect,{x:width * 0.05 - 2,y:grassStartY - 100,width:10,height:3,color:"#A0522D",opacity:0.8,children:_jsx(Shadow,{dx:-1,dy:1,blur:2,color:"rgba(0,0,0,0.3)"})}),_jsx(Rect,{x:width * 0.05 + 15,y:grassStartY - 160,width:8,height:3,color:"#8B4513",opacity:0.7,children:_jsx(Shadow,{dx:1,dy:1,blur:2,color:"rgba(0,0,0,0.2)"})}),_jsx(Circle,{cx:width * 0.05 + 10,cy:grassStartY - 150,r:38,color:"#1B5E20",opacity:0.9,children:_jsx(Shadow,{dx:4,dy:4,blur:10,color:"rgba(0,0,0,0.3)"})}),_jsx(Circle,{cx:width * 0.05 + 18,cy:grassStartY - 180,r:32,color:"#2E7D32",opacity:0.8}),_jsx(Circle,{cx:width * 0.05 + 25,cy:grassStartY - 140,r:28,color:"#388E3C",opacity:0.7}),_jsx(Circle,{cx:width * 0.05 + 2,cy:grassStartY - 120,r:30,color:"#2E7D32",opacity:0.75}),_jsx(Circle,{cx:width * 0.05 - 5,cy:grassStartY - 160,r:25,color:"#1B5E20",opacity:0.8}),_jsx(Circle,{cx:width * 0.05 + 8,cy:grassStartY - 200,r:26,color:"#4CAF50",opacity:0.6}),_jsx(Circle,{cx:width * 0.05 + 20,cy:grassStartY - 200,r:22,color:"#66BB6A",opacity:0.5}),_jsx(Circle,{cx:width * 0.05 + 12,cy:grassStartY - 170,r:20,color:"#388E3C",opacity:0.9}),_jsx(Circle,{cx:width * 0.05 + 6,cy:grassStartY - 140,r:18,color:"#2E7D32",opacity:0.8}),_jsx(Circle,{cx:width * 0.05 + 15,cy:grassStartY - 220,r:15,color:"#81C784",opacity:0.6}),_jsx(Circle,{cx:width * 0.05 + 3,cy:grassStartY - 210,r:12,color:"#A5D6A7",opacity:0.5}),_jsx(Circle,{cx:width * 0.05 + 28,cy:grassStartY - 180,r:14,color:"#81C784",opacity:0.6}),_jsx(Circle,{cx:width * 0.05 - 8,cy:grassStartY - 180,r:16,color:"#66BB6A",opacity:0.7}),_jsx(Circle,{cx:width * 0.05 + 5,cy:grassStartY - 230,r:10,color:"#C8E6C9",opacity:0.7}),_jsx(Circle,{cx:width * 0.05 + 18,cy:grassStartY - 240,r:8,color:"#E8F5E8",opacity:0.6}),_jsx(Circle,{cx:width * 0.05 + 22,cy:grassStartY - 190,r:6,color:"#C8E6C9",opacity:0.8})]}),_jsxs(Group,{children:[_jsxs(Rect,{x:width * 0.88,y:grassStartY - 200,width:18,height:200,children:[_jsx(LinearGradient,{start:vec(0,0),end:vec(18,0),colors:['#4A2C2A','#654321','#8B4513','#654321']}),_jsx(Shadow,{dx:-3,dy:0,blur:6,color:"rgba(0,0,0,0.4)"})]}),_jsx(Rect,{x:width * 0.88 + 2,y:grassStartY - 170,width:1,height:150,color:"#3E2723",opacity:0.9}),_jsx(Rect,{x:width * 0.88 + 6,y:grassStartY - 190,width:1.5,height:170,color:"#2E1A16",opacity:0.8}),_jsx(Rect,{x:width * 0.88 + 11,y:grassStartY - 160,width:1,height:130,color:"#3E2723",opacity:0.7}),_jsx(Rect,{x:width * 0.88 + 14,y:grassStartY - 180,width:1.5,height:160,color:"#2E1A16",opacity:0.9}),_jsx(Circle,{cx:width * 0.88 + 9,cy:grassStartY - 120,r:35,color:"#0D4F0C",opacity:0.95,children:_jsx(Shadow,{dx:-4,dy:4,blur:10,color:"rgba(0,0,0,0.3)"})}),_jsx(Circle,{cx:width * 0.88 + 5,cy:grassStartY - 100,r:30,color:"#1B5E20",opacity:0.9}),_jsx(Circle,{cx:width * 0.88 + 13,cy:grassStartY - 110,r:28,color:"#2E7D32",opacity:0.8}),_jsx(Circle,{cx:width * 0.88 + 9,cy:grassStartY - 180,r:32,color:"#1B5E20",opacity:0.9}),_jsx(Circle,{cx:width * 0.88 + 6,cy:grassStartY - 170,r:26,color:"#2E7D32",opacity:0.85}),_jsx(Circle,{cx:width * 0.88 + 12,cy:grassStartY - 190,r:24,color:"#388E3C",opacity:0.8}),_jsx(Circle,{cx:width * 0.88 + 9,cy:grassStartY - 240,r:28,color:"#2E7D32",opacity:0.9}),_jsx(Circle,{cx:width * 0.88 + 7,cy:grassStartY - 230,r:22,color:"#388E3C",opacity:0.85}),_jsx(Circle,{cx:width * 0.88 + 11,cy:grassStartY - 250,r:20,color:"#4CAF50",opacity:0.8}),_jsx(Circle,{cx:width * 0.88 + 9,cy:grassStartY - 300,r:22,color:"#388E3C",opacity:0.9}),_jsx(Circle,{cx:width * 0.88 + 8,cy:grassStartY - 290,r:18,color:"#4CAF50",opacity:0.8}),_jsx(Circle,{cx:width * 0.88 + 10,cy:grassStartY - 310,r:15,color:"#66BB6A",opacity:0.7}),_jsx(Circle,{cx:width * 0.88 + 4,cy:grassStartY - 150,r:8,color:"#0D4F0C",opacity:0.8}),_jsx(Circle,{cx:width * 0.88 + 14,cy:grassStartY - 170,r:6,color:"#1B5E20",opacity:0.9}),_jsx(Circle,{cx:width * 0.88 + 3,cy:grassStartY - 220,r:5,color:"#0D4F0C",opacity:0.7}),_jsx(Circle,{cx:width * 0.88 + 15,cy:grassStartY - 240,r:7,color:"#2E7D32",opacity:0.8}),_jsx(Circle,{cx:width * 0.88 + 12,cy:grassStartY - 280,r:8,color:"#81C784",opacity:0.6}),_jsx(Circle,{cx:width * 0.88 + 11,cy:grassStartY - 320,r:6,color:"#A5D6A7",opacity:0.5}),_jsx(Circle,{cx:width * 0.88 + 13,cy:grassStartY - 190,r:5,color:"#C8E6C9",opacity:0.7})]})]}),_jsxs(Group,{children:[_jsxs(Group,{children:[_jsx(Circle,{cx:width * 0.15,cy:grassStartY - 60,r:26,color:"#1B5E20",opacity:0.95,children:_jsx(Shadow,{dx:3,dy:3,blur:8,color:"rgba(0,0,0,0.3)"})}),_jsx(Circle,{cx:width * 0.18,cy:grassStartY - 90,r:22,color:"#2E7D32",opacity:0.9}),_jsx(Circle,{cx:width * 0.21,cy:grassStartY - 70,r:18,color:"#388E3C",opacity:0.8}),_jsx(Circle,{cx:width * 0.12,cy:grassStartY - 80,r:20,color:"#2E7D32",opacity:0.85}),_jsx(Circle,{cx:width * 0.09,cy:grassStartY - 50,r:16,color:"#1B5E20",opacity:0.9}),_jsx(Circle,{cx:width * 0.16,cy:grassStartY - 100,r:19,color:"#4CAF50",opacity:0.7}),_jsx(Circle,{cx:width * 0.19,cy:grassStartY - 95,r:15,color:"#66BB6A",opacity:0.6}),_jsx(Circle,{cx:width * 0.15,cy:grassStartY - 90,r:14,color:"#388E3C",opacity:0.9}),_jsx(Circle,{cx:width * 0.17,cy:grassStartY - 70,r:12,color:"#2E7D32",opacity:0.8}),_jsx(Circle,{cx:width * 0.13,cy:grassStartY - 95,r:10,color:"#81C784",opacity:0.7}),_jsx(Circle,{cx:width * 0.20,cy:grassStartY - 85,r:8,color:"#A5D6A7",opacity:0.6}),_jsx(Circle,{cx:width * 0.11,cy:grassStartY - 70,r:9,color:"#66BB6A",opacity:0.8}),_jsx(Circle,{cx:width * 0.22,cy:grassStartY - 80,r:7,color:"#81C784",opacity:0.7}),_jsx(Circle,{cx:width * 0.16,cy:grassStartY - 105,r:6,color:"#C8E6C9",opacity:0.8}),_jsx(Circle,{cx:width * 0.19,cy:grassStartY - 100,r:4,color:"#E8F5E8",opacity:0.7})]}),_jsxs(Group,{children:[_jsx(Circle,{cx:width * 0.35,cy:grassStartY - 40,r:21,color:"#1B5E20",opacity:0.9,children:_jsx(Shadow,{dx:2,dy:2,blur:6,color:"rgba(0,0,0,0.25)"})}),_jsx(Circle,{cx:width * 0.37,cy:grassStartY - 60,r:17,color:"#2E7D32",opacity:0.85}),_jsx(Circle,{cx:width * 0.33,cy:grassStartY - 30,r:15,color:"#388E3C",opacity:0.8}),_jsx(Circle,{cx:width * 0.36,cy:grassStartY - 80,r:13,color:"#4CAF50",opacity:0.7}),_jsx(Circle,{cx:width * 0.32,cy:grassStartY - 60,r:10,color:"#66BB6A",opacity:0.8}),_jsx(Circle,{cx:width * 0.38,cy:grassStartY - 50,r:8,color:"#81C784",opacity:0.7}),_jsx(Circle,{cx:width * 0.34,cy:grassStartY - 90,r:5,color:"#A5D6A7",opacity:0.8})]}),_jsxs(Group,{children:[_jsx(Circle,{cx:width * 0.52,cy:grassStartY - 45,r:25,color:"#1B5E20",opacity:0.95,children:_jsx(Shadow,{dx:2,dy:3,blur:8,color:"rgba(0,0,0,0.3)"})}),_jsx(Circle,{cx:width * 0.55,cy:grassStartY - 75,r:21,color:"#2E7D32",opacity:0.9}),_jsx(Circle,{cx:width * 0.49,cy:grassStartY - 35,r:19,color:"#388E3C",opacity:0.85}),_jsx(Circle,{cx:width * 0.54,cy:grassStartY - 100,r:16,color:"#4CAF50",opacity:0.8}),_jsx(Circle,{cx:width * 0.50,cy:grassStartY - 70,r:14,color:"#66BB6A",opacity:0.75}),_jsx(Circle,{cx:width * 0.47,cy:grassStartY - 90,r:11,color:"#81C784",opacity:0.7}),_jsx(Circle,{cx:width * 0.56,cy:grassStartY - 55,r:9,color:"#A5D6A7",opacity:0.6}),_jsx(Circle,{cx:width * 0.51,cy:grassStartY - 85,r:4,color:"#FF69B4",opacity:0.9}),_jsx(Circle,{cx:width * 0.54,cy:grassStartY - 75,r:3.5,color:"#FF6B6B",opacity:0.85}),_jsx(Circle,{cx:width * 0.49,cy:grassStartY - 55,r:3,color:"#FF1744",opacity:0.8}),_jsx(Circle,{cx:width * 0.52,cy:grassStartY - 105,r:6,color:"#C8E6C9",opacity:0.8})]}),_jsxs(Group,{children:[_jsx(Circle,{cx:width * 0.72,cy:grassStartY - 35,r:28,color:"#0D4F0C",opacity:0.95,children:_jsx(Shadow,{dx:-2,dy:3,blur:8,color:"rgba(0,0,0,0.3)"})}),_jsx(Circle,{cx:width * 0.75,cy:grassStartY - 70,r:24,color:"#1B5E20",opacity:0.9}),_jsx(Circle,{cx:width * 0.69,cy:grassStartY - 25,r:22,color:"#2E7D32",opacity:0.85}),_jsx(Circle,{cx:width * 0.74,cy:grassStartY - 85,r:19,color:"#388E3C",opacity:0.8}),_jsx(Circle,{cx:width * 0.68,cy:grassStartY - 55,r:17,color:"#4CAF50",opacity:0.75}),_jsx(Circle,{cx:width * 0.77,cy:grassStartY - 45,r:14,color:"#66BB6A",opacity:0.7}),_jsx(Circle,{cx:width * 0.66,cy:grassStartY - 75,r:12,color:"#81C784",opacity:0.65}),_jsx(Circle,{cx:width * 0.71,cy:grassStartY - 95,r:10,color:"#A5D6A7",opacity:0.6}),_jsx(Circle,{cx:width * 0.73,cy:grassStartY - 100,r:3,color:"#9C27B0",opacity:0.9}),_jsx(Circle,{cx:width * 0.70,cy:grassStartY - 90,r:2.5,color:"#673AB7",opacity:0.85}),_jsx(Circle,{cx:width * 0.76,cy:grassStartY - 55,r:3.5,color:"#FF9800",opacity:0.8}),_jsx(Circle,{cx:width * 0.73,cy:grassStartY - 110,r:7,color:"#C8E6C9",opacity:0.8}),_jsx(Circle,{cx:width * 0.75,cy:grassStartY - 90,r:5,color:"#E8F5E8",opacity:0.7})]}),_jsxs(Group,{children:[_jsx(Circle,{cx:width * 0.25,cy:grassStartY - 15,r:15,color:"#1B5E20",opacity:0.8,children:_jsx(Shadow,{dx:1,dy:2,blur:4,color:"rgba(0,0,0,0.2)"})}),_jsx(Circle,{cx:width * 0.27,cy:grassStartY - 35,r:12,color:"#2E7D32",opacity:0.75}),_jsx(Circle,{cx:width * 0.23,cy:grassStartY - 5,r:10,color:"#388E3C",opacity:0.7}),_jsx(Circle,{cx:width * 0.26,cy:grassStartY - 45,r:7,color:"#66BB6A",opacity:0.6}),_jsx(Circle,{cx:width * 0.65,cy:grassStartY - 5,r:13,color:"#2E7D32",opacity:0.8,children:_jsx(Shadow,{dx:-1,dy:2,blur:4,color:"rgba(0,0,0,0.2)"})}),_jsx(Circle,{cx:width * 0.67,cy:grassStartY - 25,r:10,color:"#388E3C",opacity:0.75}),_jsx(Circle,{cx:width * 0.63,cy:grassStartY + 5,r:8,color:"#4CAF50",opacity:0.7}),_jsx(Circle,{cx:width * 0.66,cy:grassStartY - 35,r:5,color:"#81C784",opacity:0.6})]})]}),_jsx(Group,{children:flowerPositions.map((pos,i)=>{const colors = ['#FF6B6B','#FF69B4','#9370DB','#4169E1','#FF8C00','#32CD32'];const color = colors[i % colors.length];const size = 3 + i % 3;return _jsxs(Group,{children:[_jsx(Circle,{cx:pos.x,cy:pos.y,r:size,color:color,opacity:0.8,children:_jsx(Shadow,{dx:0,dy:1,blur:1,color:"rgba(0,0,0,0.2)"})}),_jsx(Circle,{cx:pos.x,cy:pos.y,r:size * 0.4,color:"#FFD700",opacity:0.9})]},`flower-${i}`);})})]}),children]});};