@nice2dev/game-engine 1.0.2 → 1.0.4

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 (188) hide show
  1. package/dist/cjs/ai/BehaviorTree.js +1215 -0
  2. package/dist/cjs/ai/BehaviorTree.js.map +1 -0
  3. package/dist/cjs/ai/StateMachine.js +783 -0
  4. package/dist/cjs/ai/StateMachine.js.map +1 -0
  5. package/dist/cjs/editor/ShaderGraph.js +1616 -0
  6. package/dist/cjs/editor/ShaderGraph.js.map +1 -0
  7. package/dist/cjs/editor/TimelineEditor.js +819 -0
  8. package/dist/cjs/editor/TimelineEditor.js.map +1 -0
  9. package/dist/cjs/export/GodotExporter.js +1102 -0
  10. package/dist/cjs/export/GodotExporter.js.map +1 -0
  11. package/dist/cjs/export/PlatformExporter.js +236 -0
  12. package/dist/cjs/export/PlatformExporter.js.map +1 -0
  13. package/dist/cjs/export/ThreeJSExporter.js +1116 -0
  14. package/dist/cjs/export/ThreeJSExporter.js.map +1 -0
  15. package/dist/cjs/export/UnityExporter.js +1193 -0
  16. package/dist/cjs/export/UnityExporter.js.map +1 -0
  17. package/dist/cjs/export/WebExporter.js +1036 -0
  18. package/dist/cjs/export/WebExporter.js.map +1 -0
  19. package/dist/cjs/export/index.js +58 -0
  20. package/dist/cjs/export/index.js.map +1 -0
  21. package/dist/cjs/import/AsepriteImporter.js +761 -0
  22. package/dist/cjs/import/AsepriteImporter.js.map +1 -0
  23. package/dist/cjs/import/DragonBonesImporter.js +499 -0
  24. package/dist/cjs/import/DragonBonesImporter.js.map +1 -0
  25. package/dist/cjs/import/GameMakerImporter.js +559 -0
  26. package/dist/cjs/import/GameMakerImporter.js.map +1 -0
  27. package/dist/cjs/import/GodotSceneImporter.js +824 -0
  28. package/dist/cjs/import/GodotSceneImporter.js.map +1 -0
  29. package/dist/cjs/import/LDtkImporter.js +481 -0
  30. package/dist/cjs/import/LDtkImporter.js.map +1 -0
  31. package/dist/cjs/import/Live2DImporter.js +553 -0
  32. package/dist/cjs/import/Live2DImporter.js.map +1 -0
  33. package/dist/cjs/import/NdgFormat.js +499 -0
  34. package/dist/cjs/import/NdgFormat.js.map +1 -0
  35. package/dist/cjs/import/OgmoImporter.js +529 -0
  36. package/dist/cjs/import/OgmoImporter.js.map +1 -0
  37. package/dist/cjs/import/RPGMakerImporter.js +520 -0
  38. package/dist/cjs/import/RPGMakerImporter.js.map +1 -0
  39. package/dist/cjs/import/SceneImporter.js +449 -0
  40. package/dist/cjs/import/SceneImporter.js.map +1 -0
  41. package/dist/cjs/import/SpineImporter.js +583 -0
  42. package/dist/cjs/import/SpineImporter.js.map +1 -0
  43. package/dist/cjs/import/SpriterImporter.js +652 -0
  44. package/dist/cjs/import/SpriterImporter.js.map +1 -0
  45. package/dist/cjs/import/TiledMapImporter.js +859 -0
  46. package/dist/cjs/import/TiledMapImporter.js.map +1 -0
  47. package/dist/cjs/import/UnitySceneImporter.js +732 -0
  48. package/dist/cjs/import/UnitySceneImporter.js.map +1 -0
  49. package/dist/cjs/import/index.js +305 -0
  50. package/dist/cjs/import/index.js.map +1 -0
  51. package/dist/cjs/index.js +201 -0
  52. package/dist/cjs/index.js.map +1 -1
  53. package/dist/cjs/scripting/GraphToAST.js +567 -0
  54. package/dist/cjs/scripting/GraphToAST.js.map +1 -0
  55. package/dist/cjs/scripting/LanguageExporter.js +321 -0
  56. package/dist/cjs/scripting/LanguageExporter.js.map +1 -0
  57. package/dist/cjs/scripting/ScriptAST.js +67 -0
  58. package/dist/cjs/scripting/ScriptAST.js.map +1 -0
  59. package/dist/cjs/scripting/VisualScripting2.js +1140 -0
  60. package/dist/cjs/scripting/VisualScripting2.js.map +1 -0
  61. package/dist/cjs/scripting/exporters/CSharpExporter.js +503 -0
  62. package/dist/cjs/scripting/exporters/CSharpExporter.js.map +1 -0
  63. package/dist/cjs/scripting/exporters/GDScriptExporter.js +452 -0
  64. package/dist/cjs/scripting/exporters/GDScriptExporter.js.map +1 -0
  65. package/dist/cjs/scripting/exporters/LuaExporter.js +457 -0
  66. package/dist/cjs/scripting/exporters/LuaExporter.js.map +1 -0
  67. package/dist/cjs/scripting/exporters/PythonExporter.js +565 -0
  68. package/dist/cjs/scripting/exporters/PythonExporter.js.map +1 -0
  69. package/dist/cjs/scripting/exporters/RustExporter.js +525 -0
  70. package/dist/cjs/scripting/exporters/RustExporter.js.map +1 -0
  71. package/dist/cjs/scripting/exporters/TypeScriptExporter.js +570 -0
  72. package/dist/cjs/scripting/exporters/TypeScriptExporter.js.map +1 -0
  73. package/dist/cjs/systems/ParticleSystem2.js +1478 -0
  74. package/dist/cjs/systems/ParticleSystem2.js.map +1 -0
  75. package/dist/esm/ai/BehaviorTree.js +1186 -0
  76. package/dist/esm/ai/BehaviorTree.js.map +1 -0
  77. package/dist/esm/ai/StateMachine.js +767 -0
  78. package/dist/esm/ai/StateMachine.js.map +1 -0
  79. package/dist/esm/editor/ShaderGraph.js +1606 -0
  80. package/dist/esm/editor/ShaderGraph.js.map +1 -0
  81. package/dist/esm/editor/TimelineEditor.js +800 -0
  82. package/dist/esm/editor/TimelineEditor.js.map +1 -0
  83. package/dist/esm/export/GodotExporter.js +1100 -0
  84. package/dist/esm/export/GodotExporter.js.map +1 -0
  85. package/dist/esm/export/PlatformExporter.js +230 -0
  86. package/dist/esm/export/PlatformExporter.js.map +1 -0
  87. package/dist/esm/export/ThreeJSExporter.js +1114 -0
  88. package/dist/esm/export/ThreeJSExporter.js.map +1 -0
  89. package/dist/esm/export/UnityExporter.js +1191 -0
  90. package/dist/esm/export/UnityExporter.js.map +1 -0
  91. package/dist/esm/export/WebExporter.js +1033 -0
  92. package/dist/esm/export/WebExporter.js.map +1 -0
  93. package/dist/esm/export/index.js +44 -0
  94. package/dist/esm/export/index.js.map +1 -0
  95. package/dist/esm/import/AsepriteImporter.js +759 -0
  96. package/dist/esm/import/AsepriteImporter.js.map +1 -0
  97. package/dist/esm/import/DragonBonesImporter.js +496 -0
  98. package/dist/esm/import/DragonBonesImporter.js.map +1 -0
  99. package/dist/esm/import/GameMakerImporter.js +556 -0
  100. package/dist/esm/import/GameMakerImporter.js.map +1 -0
  101. package/dist/esm/import/GodotSceneImporter.js +822 -0
  102. package/dist/esm/import/GodotSceneImporter.js.map +1 -0
  103. package/dist/esm/import/LDtkImporter.js +479 -0
  104. package/dist/esm/import/LDtkImporter.js.map +1 -0
  105. package/dist/esm/import/Live2DImporter.js +550 -0
  106. package/dist/esm/import/Live2DImporter.js.map +1 -0
  107. package/dist/esm/import/NdgFormat.js +490 -0
  108. package/dist/esm/import/NdgFormat.js.map +1 -0
  109. package/dist/esm/import/OgmoImporter.js +526 -0
  110. package/dist/esm/import/OgmoImporter.js.map +1 -0
  111. package/dist/esm/import/RPGMakerImporter.js +517 -0
  112. package/dist/esm/import/RPGMakerImporter.js.map +1 -0
  113. package/dist/esm/import/SceneImporter.js +441 -0
  114. package/dist/esm/import/SceneImporter.js.map +1 -0
  115. package/dist/esm/import/SpineImporter.js +580 -0
  116. package/dist/esm/import/SpineImporter.js.map +1 -0
  117. package/dist/esm/import/SpriterImporter.js +649 -0
  118. package/dist/esm/import/SpriterImporter.js.map +1 -0
  119. package/dist/esm/import/TiledMapImporter.js +857 -0
  120. package/dist/esm/import/TiledMapImporter.js.map +1 -0
  121. package/dist/esm/import/UnitySceneImporter.js +730 -0
  122. package/dist/esm/import/UnitySceneImporter.js.map +1 -0
  123. package/dist/esm/import/index.js +279 -0
  124. package/dist/esm/import/index.js.map +1 -0
  125. package/dist/esm/index.js +36 -0
  126. package/dist/esm/index.js.map +1 -1
  127. package/dist/esm/scripting/GraphToAST.js +564 -0
  128. package/dist/esm/scripting/GraphToAST.js.map +1 -0
  129. package/dist/esm/scripting/LanguageExporter.js +311 -0
  130. package/dist/esm/scripting/LanguageExporter.js.map +1 -0
  131. package/dist/esm/scripting/ScriptAST.js +52 -0
  132. package/dist/esm/scripting/ScriptAST.js.map +1 -0
  133. package/dist/esm/scripting/VisualScripting2.js +1130 -0
  134. package/dist/esm/scripting/VisualScripting2.js.map +1 -0
  135. package/dist/esm/scripting/exporters/CSharpExporter.js +501 -0
  136. package/dist/esm/scripting/exporters/CSharpExporter.js.map +1 -0
  137. package/dist/esm/scripting/exporters/GDScriptExporter.js +450 -0
  138. package/dist/esm/scripting/exporters/GDScriptExporter.js.map +1 -0
  139. package/dist/esm/scripting/exporters/LuaExporter.js +455 -0
  140. package/dist/esm/scripting/exporters/LuaExporter.js.map +1 -0
  141. package/dist/esm/scripting/exporters/PythonExporter.js +563 -0
  142. package/dist/esm/scripting/exporters/PythonExporter.js.map +1 -0
  143. package/dist/esm/scripting/exporters/RustExporter.js +523 -0
  144. package/dist/esm/scripting/exporters/RustExporter.js.map +1 -0
  145. package/dist/esm/scripting/exporters/TypeScriptExporter.js +568 -0
  146. package/dist/esm/scripting/exporters/TypeScriptExporter.js.map +1 -0
  147. package/dist/esm/systems/ParticleSystem2.js +1471 -0
  148. package/dist/esm/systems/ParticleSystem2.js.map +1 -0
  149. package/dist/types/ai/BehaviorTree.d.ts +375 -0
  150. package/dist/types/ai/StateMachine.d.ts +296 -0
  151. package/dist/types/editor/ShaderGraph.d.ts +207 -0
  152. package/dist/types/editor/TimelineEditor.d.ts +393 -0
  153. package/dist/types/export/GodotExporter.d.ts +56 -0
  154. package/dist/types/export/PlatformExporter.d.ts +201 -0
  155. package/dist/types/export/ThreeJSExporter.d.ts +40 -0
  156. package/dist/types/export/UnityExporter.d.ts +69 -0
  157. package/dist/types/export/WebExporter.d.ts +58 -0
  158. package/dist/types/export/index.d.ts +19 -0
  159. package/dist/types/import/AsepriteImporter.d.ts +46 -0
  160. package/dist/types/import/DragonBonesImporter.d.ts +331 -0
  161. package/dist/types/import/GameMakerImporter.d.ts +375 -0
  162. package/dist/types/import/GodotSceneImporter.d.ts +34 -0
  163. package/dist/types/import/LDtkImporter.d.ts +177 -0
  164. package/dist/types/import/Live2DImporter.d.ts +237 -0
  165. package/dist/types/import/NdgFormat.d.ts +387 -0
  166. package/dist/types/import/OgmoImporter.d.ts +237 -0
  167. package/dist/types/import/RPGMakerImporter.d.ts +186 -0
  168. package/dist/types/import/SceneImporter.d.ts +276 -0
  169. package/dist/types/import/SpineImporter.d.ts +372 -0
  170. package/dist/types/import/SpriterImporter.d.ts +230 -0
  171. package/dist/types/import/TiledMapImporter.d.ts +57 -0
  172. package/dist/types/import/UnitySceneImporter.d.ts +87 -0
  173. package/dist/types/import/index.d.ts +59 -0
  174. package/dist/types/index.d.ts +29 -17
  175. package/dist/types/scripting/GraphToAST.d.ts +55 -0
  176. package/dist/types/scripting/LanguageExporter.d.ts +136 -0
  177. package/dist/types/scripting/ScriptAST.d.ts +312 -0
  178. package/dist/types/scripting/VisualScripting2.d.ts +353 -0
  179. package/dist/types/scripting/exporters/CSharpExporter.d.ts +44 -0
  180. package/dist/types/scripting/exporters/GDScriptExporter.d.ts +46 -0
  181. package/dist/types/scripting/exporters/LuaExporter.d.ts +46 -0
  182. package/dist/types/scripting/exporters/PythonExporter.d.ts +49 -0
  183. package/dist/types/scripting/exporters/RustExporter.d.ts +46 -0
  184. package/dist/types/scripting/exporters/TypeScriptExporter.d.ts +48 -0
  185. package/dist/types/scripting/exporters/index.d.ts +8 -0
  186. package/dist/types/scripting/index.d.ts +11 -0
  187. package/dist/types/systems/ParticleSystem2.d.ts +646 -0
  188. package/package.json +3 -3
@@ -0,0 +1,646 @@
1
+ /**
2
+ * @file ParticleSystem2.ts
3
+ * @description Advanced Particle System with GPU Compute and Visual Editor
4
+ * PRO-1.4: Professional Editor Features
5
+ *
6
+ * Features:
7
+ * - GPU-accelerated particles (WebGPU Compute)
8
+ * - Multiple emitter shapes
9
+ * - Force fields (gravity, wind, vortex, etc.)
10
+ * - Sub-emitters and trails
11
+ * - Collision detection
12
+ * - LOD system
13
+ * - Visual editor integration
14
+ */
15
+ export type ParticleSimulationSpace = 'local' | 'world';
16
+ export type ParticleRenderMode = 'billboard' | 'stretchedBillboard' | 'horizontalBillboard' | 'verticalBillboard' | 'mesh' | 'trail';
17
+ export type ParticleBlendMode = 'alpha' | 'additive' | 'multiply' | 'premultiplied';
18
+ export type ParticleSortingMode = 'none' | 'byDistance' | 'oldestFirst' | 'youngestFirst';
19
+ export type InterpolationMode = 'linear' | 'smooth' | 'step';
20
+ export interface CurveKeyframe {
21
+ time: number;
22
+ value: number;
23
+ inTangent: number;
24
+ outTangent: number;
25
+ mode: 'auto' | 'free' | 'linear' | 'constant';
26
+ }
27
+ export interface ParticleAnimationCurve {
28
+ keyframes: CurveKeyframe[];
29
+ preWrapMode: 'clamp' | 'loop' | 'pingPong';
30
+ postWrapMode: 'clamp' | 'loop' | 'pingPong';
31
+ }
32
+ export interface Gradient {
33
+ colorKeys: {
34
+ time: number;
35
+ color: [number, number, number];
36
+ }[];
37
+ alphaKeys: {
38
+ time: number;
39
+ alpha: number;
40
+ }[];
41
+ mode: 'blend' | 'fixed';
42
+ }
43
+ export type MinMaxCurve = {
44
+ mode: 'constant';
45
+ value: number;
46
+ } | {
47
+ mode: 'curve';
48
+ curve: ParticleAnimationCurve;
49
+ multiplier: number;
50
+ } | {
51
+ mode: 'randomBetweenTwoConstants';
52
+ min: number;
53
+ max: number;
54
+ } | {
55
+ mode: 'randomBetweenTwoCurves';
56
+ curveMin: ParticleAnimationCurve;
57
+ curveMax: ParticleAnimationCurve;
58
+ multiplier: number;
59
+ };
60
+ export type MinMaxGradient = {
61
+ mode: 'color';
62
+ color: [number, number, number, number];
63
+ } | {
64
+ mode: 'gradient';
65
+ gradient: Gradient;
66
+ } | {
67
+ mode: 'randomBetweenTwoColors';
68
+ colorMin: [number, number, number, number];
69
+ colorMax: [number, number, number, number];
70
+ } | {
71
+ mode: 'randomBetweenTwoGradients';
72
+ gradientMin: Gradient;
73
+ gradientMax: Gradient;
74
+ };
75
+ export type MinMaxVector3 = {
76
+ mode: 'constant';
77
+ value: [number, number, number];
78
+ } | {
79
+ mode: 'randomBetweenTwoConstants';
80
+ min: [number, number, number];
81
+ max: [number, number, number];
82
+ };
83
+ export type EmitterShape = SphereShape | HemisphereShape | ConeShape | BoxShape | CircleShape | RectangleShape | EdgeShape | MeshShape | SkinnnedMeshShape;
84
+ export interface SphereShape {
85
+ type: 'sphere';
86
+ radius: number;
87
+ radiusThickness: number;
88
+ arc: number;
89
+ arcMode: 'random' | 'loop' | 'pingPong' | 'burstSpread';
90
+ arcSpeed: number;
91
+ position: [number, number, number];
92
+ rotation: [number, number, number];
93
+ scale: [number, number, number];
94
+ }
95
+ export interface HemisphereShape {
96
+ type: 'hemisphere';
97
+ radius: number;
98
+ radiusThickness: number;
99
+ arc: number;
100
+ arcMode: 'random' | 'loop' | 'pingPong' | 'burstSpread';
101
+ arcSpeed: number;
102
+ position: [number, number, number];
103
+ rotation: [number, number, number];
104
+ scale: [number, number, number];
105
+ }
106
+ export interface ConeShape {
107
+ type: 'cone';
108
+ angle: number;
109
+ radius: number;
110
+ radiusThickness: number;
111
+ arc: number;
112
+ arcMode: 'random' | 'loop' | 'pingPong' | 'burstSpread';
113
+ arcSpeed: number;
114
+ length: number;
115
+ emitFrom: 'base' | 'volume' | 'shell' | 'volumeShell';
116
+ position: [number, number, number];
117
+ rotation: [number, number, number];
118
+ scale: [number, number, number];
119
+ }
120
+ export interface BoxShape {
121
+ type: 'box';
122
+ emitFrom: 'volume' | 'shell' | 'edge';
123
+ position: [number, number, number];
124
+ rotation: [number, number, number];
125
+ scale: [number, number, number];
126
+ }
127
+ export interface CircleShape {
128
+ type: 'circle';
129
+ radius: number;
130
+ radiusThickness: number;
131
+ arc: number;
132
+ arcMode: 'random' | 'loop' | 'pingPong' | 'burstSpread';
133
+ arcSpeed: number;
134
+ position: [number, number, number];
135
+ rotation: [number, number, number];
136
+ scale: [number, number, number];
137
+ }
138
+ export interface RectangleShape {
139
+ type: 'rectangle';
140
+ emitFrom: 'vertex' | 'edge' | 'shell';
141
+ position: [number, number, number];
142
+ rotation: [number, number, number];
143
+ scale: [number, number, number];
144
+ }
145
+ export interface EdgeShape {
146
+ type: 'edge';
147
+ radius: number;
148
+ radiusMode: 'random' | 'loop' | 'pingPong' | 'burstSpread';
149
+ radiusSpeed: number;
150
+ position: [number, number, number];
151
+ rotation: [number, number, number];
152
+ scale: [number, number, number];
153
+ }
154
+ export interface MeshShape {
155
+ type: 'mesh';
156
+ meshId: string;
157
+ emitFrom: 'vertex' | 'edge' | 'triangle';
158
+ useMeshColors: boolean;
159
+ normalOffset: number;
160
+ position: [number, number, number];
161
+ rotation: [number, number, number];
162
+ scale: [number, number, number];
163
+ }
164
+ export interface SkinnnedMeshShape {
165
+ type: 'skinnedMesh';
166
+ meshId: string;
167
+ emitFrom: 'vertex' | 'edge' | 'triangle';
168
+ useMeshColors: boolean;
169
+ normalOffset: number;
170
+ position: [number, number, number];
171
+ rotation: [number, number, number];
172
+ scale: [number, number, number];
173
+ }
174
+ export type ForceField = GravityField | DirectionalField | VortexField | DragField | TurbulenceField | AttractorField | VectorField;
175
+ export interface GravityField {
176
+ type: 'gravity';
177
+ strength: number;
178
+ direction: [number, number, number];
179
+ }
180
+ export interface DirectionalField {
181
+ type: 'directional';
182
+ strength: MinMaxCurve;
183
+ direction: [number, number, number];
184
+ randomize: number;
185
+ }
186
+ export interface VortexField {
187
+ type: 'vortex';
188
+ center: [number, number, number];
189
+ axis: [number, number, number];
190
+ strength: MinMaxCurve;
191
+ attractionStrength: number;
192
+ radius: number;
193
+ }
194
+ export interface DragField {
195
+ type: 'drag';
196
+ coefficient: MinMaxCurve;
197
+ multiplyBySize: boolean;
198
+ multiplyByVelocity: boolean;
199
+ }
200
+ export interface TurbulenceField {
201
+ type: 'turbulence';
202
+ strength: MinMaxCurve;
203
+ frequency: number;
204
+ scrollSpeed: [number, number, number];
205
+ octaves: number;
206
+ roughness: number;
207
+ }
208
+ export interface AttractorField {
209
+ type: 'attractor';
210
+ position: [number, number, number];
211
+ strength: MinMaxCurve;
212
+ radius: number;
213
+ radiusScale: number;
214
+ killOnArrive: boolean;
215
+ }
216
+ export interface VectorField {
217
+ type: 'vectorField';
218
+ textureId: string;
219
+ strength: MinMaxCurve;
220
+ speed: number;
221
+ attractionSpeed: number;
222
+ position: [number, number, number];
223
+ rotation: [number, number, number];
224
+ scale: [number, number, number];
225
+ }
226
+ export interface ParticleCollision {
227
+ enabled: boolean;
228
+ type: 'planes' | 'world' | 'depth';
229
+ planes: CollisionPlane[];
230
+ bounce: MinMaxCurve;
231
+ lifetimeLoss: MinMaxCurve;
232
+ minKillSpeed: number;
233
+ radiusScale: number;
234
+ dampen: MinMaxCurve;
235
+ enableDynamicColliders: boolean;
236
+ colliderForce: number;
237
+ multiplyByCollisionAngle: boolean;
238
+ multiplyByParticleSpeed: boolean;
239
+ multiplyByParticleSize: boolean;
240
+ sendCollisionMessages: boolean;
241
+ }
242
+ export interface CollisionPlane {
243
+ normal: [number, number, number];
244
+ position: [number, number, number];
245
+ }
246
+ export type SubEmitterTrigger = 'birth' | 'collision' | 'death' | 'trigger' | 'manual';
247
+ export interface SubEmitter {
248
+ id: string;
249
+ systemId: string;
250
+ trigger: SubEmitterTrigger;
251
+ probability: number;
252
+ inheritProperties: {
253
+ color: boolean;
254
+ size: boolean;
255
+ rotation: boolean;
256
+ lifetime: boolean;
257
+ duration: boolean;
258
+ };
259
+ emitProbability: number;
260
+ }
261
+ export interface ParticleTrail {
262
+ enabled: boolean;
263
+ ratio: number;
264
+ lifetime: MinMaxCurve;
265
+ minVertexDistance: number;
266
+ textureMode: 'stretch' | 'tile' | 'distributePerSegment' | 'repeatPerSegment';
267
+ worldSpace: boolean;
268
+ dieWithParticle: boolean;
269
+ sizeAffectsWidth: boolean;
270
+ sizeAffectsLifetime: boolean;
271
+ inheritParticleColor: boolean;
272
+ colorOverLifetime: MinMaxGradient;
273
+ widthOverTrail: MinMaxCurve;
274
+ colorOverTrail: MinMaxGradient;
275
+ generateLightingData: boolean;
276
+ shadowBias: number;
277
+ }
278
+ export interface TextureSheetAnimation {
279
+ enabled: boolean;
280
+ mode: 'grid' | 'sprites';
281
+ tilesX: number;
282
+ tilesY: number;
283
+ animation: 'wholeSheet' | 'singleRow';
284
+ rowIndex: number;
285
+ rowMode: 'custom' | 'random' | 'meshIndex';
286
+ timeMode: 'lifetime' | 'speed' | 'fps';
287
+ frameOverTime: MinMaxCurve;
288
+ startFrame: MinMaxCurve;
289
+ cycleCount: number;
290
+ speedRange: [number, number];
291
+ fps: number;
292
+ sprites: {
293
+ name: string;
294
+ frame: number;
295
+ }[];
296
+ }
297
+ export interface ParticleLights {
298
+ enabled: boolean;
299
+ ratio: number;
300
+ randomDistribution: boolean;
301
+ light: {
302
+ type: 'point' | 'spot';
303
+ color: MinMaxGradient;
304
+ intensity: MinMaxCurve;
305
+ range: MinMaxCurve;
306
+ spotAngle?: number;
307
+ };
308
+ useParticleColor: boolean;
309
+ sizeAffectsRange: boolean;
310
+ alphaAffectsIntensity: boolean;
311
+ maxLights: number;
312
+ }
313
+ export interface ParticleNoise {
314
+ enabled: boolean;
315
+ separateAxes: boolean;
316
+ strength: MinMaxCurve;
317
+ strengthX?: MinMaxCurve;
318
+ strengthY?: MinMaxCurve;
319
+ strengthZ?: MinMaxCurve;
320
+ frequency: number;
321
+ scrollSpeed: number;
322
+ damping: boolean;
323
+ octaves: number;
324
+ octaveMultiplier: number;
325
+ octaveScale: number;
326
+ quality: 'low' | 'medium' | 'high';
327
+ remapEnabled: boolean;
328
+ remapCurve: ParticleAnimationCurve;
329
+ remapX?: ParticleAnimationCurve;
330
+ remapY?: ParticleAnimationCurve;
331
+ remapZ?: ParticleAnimationCurve;
332
+ positionAmount: MinMaxCurve;
333
+ rotationAmount: MinMaxCurve;
334
+ sizeAmount: MinMaxCurve;
335
+ }
336
+ export interface ParticleSystemDef {
337
+ id: string;
338
+ name: string;
339
+ main: {
340
+ duration: number;
341
+ looping: boolean;
342
+ prewarm: boolean;
343
+ startDelay: MinMaxCurve;
344
+ startLifetime: MinMaxCurve;
345
+ startSpeed: MinMaxCurve;
346
+ startSize3D: boolean;
347
+ startSize: MinMaxCurve;
348
+ startSizeX?: MinMaxCurve;
349
+ startSizeY?: MinMaxCurve;
350
+ startSizeZ?: MinMaxCurve;
351
+ startRotation3D: boolean;
352
+ startRotation: MinMaxCurve;
353
+ startRotationX?: MinMaxCurve;
354
+ startRotationY?: MinMaxCurve;
355
+ startRotationZ?: MinMaxCurve;
356
+ flipRotation: number;
357
+ startColor: MinMaxGradient;
358
+ gravityModifier: MinMaxCurve;
359
+ simulationSpace: ParticleSimulationSpace;
360
+ simulationSpeed: number;
361
+ deltaTime: 'scaled' | 'unscaled';
362
+ scalingMode: 'hierarchy' | 'local' | 'shape';
363
+ playOnAwake: boolean;
364
+ emitterVelocityMode: 'transform' | 'rigidbody' | 'custom';
365
+ maxParticles: number;
366
+ stopAction: 'none' | 'disable' | 'destroy' | 'callback';
367
+ cullingMode: 'automatic' | 'pauseAndCatchUp' | 'pause' | 'alwaysSimulate';
368
+ ringBufferMode: 'disabled' | 'pauseUntilReplaced' | 'loopUntilReplaced';
369
+ ringBufferLoopRange: [number, number];
370
+ };
371
+ emission: {
372
+ enabled: boolean;
373
+ rateOverTime: MinMaxCurve;
374
+ rateOverDistance: MinMaxCurve;
375
+ bursts: EmissionBurst[];
376
+ };
377
+ shape: EmitterShape;
378
+ velocityOverLifetime: {
379
+ enabled: boolean;
380
+ space: 'local' | 'world';
381
+ linear: MinMaxVector3;
382
+ orbital: MinMaxVector3;
383
+ offset: MinMaxVector3;
384
+ radial: MinMaxCurve;
385
+ speedModifier: MinMaxCurve;
386
+ };
387
+ limitVelocityOverLifetime: {
388
+ enabled: boolean;
389
+ separateAxes: boolean;
390
+ speed: MinMaxCurve;
391
+ speedX?: MinMaxCurve;
392
+ speedY?: MinMaxCurve;
393
+ speedZ?: MinMaxCurve;
394
+ space: 'local' | 'world';
395
+ dampen: number;
396
+ drag: MinMaxCurve;
397
+ multiplyDragBySize: boolean;
398
+ multiplyDragByVelocity: boolean;
399
+ };
400
+ inheritVelocity: {
401
+ enabled: boolean;
402
+ mode: 'initial' | 'current';
403
+ curve: MinMaxCurve;
404
+ };
405
+ lifetimeByEmitterSpeed: {
406
+ enabled: boolean;
407
+ curve: MinMaxCurve;
408
+ speedRange: [number, number];
409
+ };
410
+ forceOverLifetime: {
411
+ enabled: boolean;
412
+ space: 'local' | 'world';
413
+ x: MinMaxCurve;
414
+ y: MinMaxCurve;
415
+ z: MinMaxCurve;
416
+ randomize: boolean;
417
+ };
418
+ colorOverLifetime: {
419
+ enabled: boolean;
420
+ color: MinMaxGradient;
421
+ };
422
+ colorBySpeed: {
423
+ enabled: boolean;
424
+ color: MinMaxGradient;
425
+ speedRange: [number, number];
426
+ };
427
+ sizeOverLifetime: {
428
+ enabled: boolean;
429
+ separateAxes: boolean;
430
+ size: MinMaxCurve;
431
+ sizeX?: MinMaxCurve;
432
+ sizeY?: MinMaxCurve;
433
+ sizeZ?: MinMaxCurve;
434
+ };
435
+ sizeBySpeed: {
436
+ enabled: boolean;
437
+ separateAxes: boolean;
438
+ size: MinMaxCurve;
439
+ sizeX?: MinMaxCurve;
440
+ sizeY?: MinMaxCurve;
441
+ sizeZ?: MinMaxCurve;
442
+ speedRange: [number, number];
443
+ };
444
+ rotationOverLifetime: {
445
+ enabled: boolean;
446
+ separateAxes: boolean;
447
+ angularVelocity: MinMaxCurve;
448
+ angularVelocityX?: MinMaxCurve;
449
+ angularVelocityY?: MinMaxCurve;
450
+ angularVelocityZ?: MinMaxCurve;
451
+ };
452
+ rotationBySpeed: {
453
+ enabled: boolean;
454
+ separateAxes: boolean;
455
+ angularVelocity: MinMaxCurve;
456
+ angularVelocityX?: MinMaxCurve;
457
+ angularVelocityY?: MinMaxCurve;
458
+ angularVelocityZ?: MinMaxCurve;
459
+ speedRange: [number, number];
460
+ };
461
+ externalForces: {
462
+ enabled: boolean;
463
+ multiplier: MinMaxCurve;
464
+ influenceFilter: 'layerMask' | 'list' | 'listAndLayerMask';
465
+ influenceMask: number;
466
+ forceFields: ForceField[];
467
+ };
468
+ noise: ParticleNoise;
469
+ collision: ParticleCollision;
470
+ triggers: {
471
+ enabled: boolean;
472
+ inside: 'ignore' | 'kill' | 'callback';
473
+ outside: 'ignore' | 'kill' | 'callback';
474
+ enter: 'ignore' | 'kill' | 'callback';
475
+ exit: 'ignore' | 'kill' | 'callback';
476
+ colliderQueryMode: 'disabled' | 'one' | 'all';
477
+ radiusScale: number;
478
+ };
479
+ subEmitters: SubEmitter[];
480
+ textureSheetAnimation: TextureSheetAnimation;
481
+ lights: ParticleLights;
482
+ trails: ParticleTrail;
483
+ customData: {
484
+ enabled: boolean;
485
+ stream1: {
486
+ mode: 'disabled' | 'vector' | 'color';
487
+ components: number;
488
+ };
489
+ stream2: {
490
+ mode: 'disabled' | 'vector' | 'color';
491
+ components: number;
492
+ };
493
+ };
494
+ renderer: {
495
+ enabled: boolean;
496
+ renderMode: ParticleRenderMode;
497
+ material: string;
498
+ trailMaterial?: string;
499
+ sortMode: ParticleSortingMode;
500
+ sortingFudge: number;
501
+ minParticleSize: number;
502
+ maxParticleSize: number;
503
+ cameraVelocityScale: number;
504
+ velocityScale: number;
505
+ lengthScale: number;
506
+ normalDirection: number;
507
+ shadowCastingMode: 'off' | 'on' | 'twoSided' | 'shadowsOnly';
508
+ receiveShadows: boolean;
509
+ motionVectors: 'cameraMotionOnly' | 'perObjectMotion' | 'forceNoMotion';
510
+ lightProbes: 'off' | 'blendProbes' | 'useProxyVolume';
511
+ reflectionProbes: 'off' | 'blendProbes' | 'blendProbesAndSkybox' | 'simple';
512
+ maskInteraction: 'none' | 'visibleInsideMask' | 'visibleOutsideMask';
513
+ pivot: [number, number, number];
514
+ flip: [number, number, number];
515
+ allowRoll: boolean;
516
+ freeformStretching: boolean;
517
+ rotateWithStretchDirection: boolean;
518
+ mesh?: string;
519
+ meshes?: string[];
520
+ meshDistribution?: 'uniformRandom' | 'nonUniformRandom';
521
+ meshWeights?: number[];
522
+ enableGPUInstancing: boolean;
523
+ };
524
+ }
525
+ export interface EmissionBurst {
526
+ time: number;
527
+ count: MinMaxCurve;
528
+ cycles: number;
529
+ interval: number;
530
+ probability: number;
531
+ }
532
+ export interface Particle {
533
+ position: Float32Array;
534
+ velocity: Float32Array;
535
+ startColor: Float32Array;
536
+ color: Float32Array;
537
+ startSize: Float32Array;
538
+ size: Float32Array;
539
+ rotation: Float32Array;
540
+ angularVelocity: Float32Array;
541
+ startLifetime: number;
542
+ remainingLifetime: number;
543
+ normalizedLifetime: number;
544
+ randomSeed: number;
545
+ startSpeed: number;
546
+ axisOfRotation: Float32Array;
547
+ meshIndex: number;
548
+ customData1: Float32Array;
549
+ customData2: Float32Array;
550
+ }
551
+ export interface ParticleSystemState {
552
+ particles: Particle[];
553
+ activeCount: number;
554
+ time: number;
555
+ isPlaying: boolean;
556
+ isPaused: boolean;
557
+ isStopped: boolean;
558
+ isEmitting: boolean;
559
+ randomSeed: number;
560
+ emitCounter: number;
561
+ distanceTraveled: number;
562
+ lastPosition: Float32Array;
563
+ burstStates: BurstState[];
564
+ }
565
+ export interface BurstState {
566
+ burstIndex: number;
567
+ cycleCount: number;
568
+ nextTime: number;
569
+ }
570
+ export interface ParticleGPUBuffers {
571
+ positionBuffer: GPUBuffer | WebGLBuffer;
572
+ velocityBuffer: GPUBuffer | WebGLBuffer;
573
+ colorBuffer: GPUBuffer | WebGLBuffer;
574
+ sizeBuffer: GPUBuffer | WebGLBuffer;
575
+ rotationBuffer: GPUBuffer | WebGLBuffer;
576
+ lifetimeBuffer: GPUBuffer | WebGLBuffer;
577
+ randomBuffer: GPUBuffer | WebGLBuffer;
578
+ indirectDrawBuffer: GPUBuffer | WebGLBuffer;
579
+ aliveIndexBuffer: GPUBuffer | WebGLBuffer;
580
+ deadIndexBuffer: GPUBuffer | WebGLBuffer;
581
+ counterBuffer: GPUBuffer | WebGLBuffer;
582
+ }
583
+ export declare class ParticleSystem2 {
584
+ private definition;
585
+ private state;
586
+ private gpuBuffers?;
587
+ private useGPU;
588
+ constructor(def: ParticleSystemDef);
589
+ private createInitialState;
590
+ private createDeadParticle;
591
+ play(): void;
592
+ pause(): void;
593
+ stop(clear?: boolean): void;
594
+ clear(): void;
595
+ private resetBurstStates;
596
+ private prewarm;
597
+ emit(count: number, position?: [number, number, number]): void;
598
+ private emitSingleParticle;
599
+ private findDeadParticleIndex;
600
+ private initializeParticle;
601
+ private sampleEmitterShape;
602
+ private sampleSphere;
603
+ private sampleHemisphere;
604
+ private sampleCone;
605
+ private sampleBox;
606
+ private sampleCircle;
607
+ simulate(deltaTime: number): void;
608
+ private processEmission;
609
+ private updateParticle;
610
+ private applyForces;
611
+ private applyForceField;
612
+ private applyVelocityOverLifetime;
613
+ private applyForceOverLifetime;
614
+ private applyLimitVelocityOverLifetime;
615
+ private applyNoise;
616
+ private applyColorOverLifetime;
617
+ private applySizeOverLifetime;
618
+ private applyRotationOverLifetime;
619
+ private applyColorBySpeed;
620
+ private applySizeBySpeed;
621
+ private applyRotationBySpeed;
622
+ private handleCollision;
623
+ private triggerSubEmitters;
624
+ private evaluateMinMaxCurve;
625
+ private evaluateAnimationCurve;
626
+ private handleWrapMode;
627
+ private evaluateMinMaxGradient;
628
+ private evaluateGradient;
629
+ private evaluateMinMaxVector3;
630
+ private seededRandom;
631
+ private normalizedTime;
632
+ get particleCount(): number;
633
+ get isPlaying(): boolean;
634
+ get isPaused(): boolean;
635
+ get isStopped(): boolean;
636
+ get time(): number;
637
+ get duration(): number;
638
+ getParticles(): Particle[];
639
+ getDefinition(): ParticleSystemDef;
640
+ setDefinition(def: ParticleSystemDef): void;
641
+ }
642
+ export declare function createDefaultParticleSystem(name: string): ParticleSystemDef;
643
+ export declare function createParticleSystem(def: ParticleSystemDef): ParticleSystem2;
644
+ export declare function createFireParticleSystem(): ParticleSystemDef;
645
+ export declare function createSmokeParticleSystem(): ParticleSystemDef;
646
+ export declare function createSparkParticleSystem(): ParticleSystemDef;
package/package.json CHANGED
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "name": "@nice2dev/game-engine",
3
- "version": "1.0.2",
3
+ "version": "1.0.4",
4
4
  "description": "Nice2Dev Game Engine — No-code game engine and editor for React",
5
5
  "author": "NiceToDev <contact@nicetodev.com>",
6
- "license": "MIT",
6
+ "license": "SEE LICENSE IN LICENSE",
7
7
  "homepage": "https://github.com/NiceToDev/NiceToDev.UI#readme",
8
8
  "repository": {
9
9
  "type": "git",
@@ -59,7 +59,7 @@
59
59
  "nicetodev"
60
60
  ],
61
61
  "peerDependencies": {
62
- "@nice2dev/icons-gaming": "*",
62
+ "@nice2dev/icons-gaming": "^1.0.0",
63
63
  "@nice2dev/ui": "^1.0.0",
64
64
  "@nice2dev/ui-graphics": "^1.0.0",
65
65
  "react": ">=17.0.0",