@nice2dev/game-engine 1.0.4 → 1.0.10

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 (721) hide show
  1. package/dist/cjs/accessibility/Accessibility.js +55 -20
  2. package/dist/cjs/accessibility/Accessibility.js.map +1 -1
  3. package/dist/cjs/ai/AI.js +74 -40
  4. package/dist/cjs/ai/AI.js.map +1 -1
  5. package/dist/cjs/ai/BehaviorTree.js +39 -47
  6. package/dist/cjs/ai/BehaviorTree.js.map +1 -1
  7. package/dist/cjs/ai/StateMachine.js +64 -100
  8. package/dist/cjs/ai/StateMachine.js.map +1 -1
  9. package/dist/cjs/animation/Animation.js +58 -34
  10. package/dist/cjs/animation/Animation.js.map +1 -1
  11. package/dist/cjs/audio/AudioAdvanced.js +71 -37
  12. package/dist/cjs/audio/AudioAdvanced.js.map +1 -1
  13. package/dist/cjs/audio/AudioBridge.js +61 -49
  14. package/dist/cjs/audio/AudioBridge.js.map +1 -1
  15. package/dist/cjs/audio/AudioManager.js +45 -29
  16. package/dist/cjs/audio/AudioManager.js.map +1 -1
  17. package/dist/cjs/build-cloud/BuildOrchestration.js +1142 -0
  18. package/dist/cjs/build-cloud/BuildOrchestration.js.map +1 -0
  19. package/dist/cjs/build-cloud/GodotBuildCloud.js +722 -0
  20. package/dist/cjs/build-cloud/GodotBuildCloud.js.map +1 -0
  21. package/dist/cjs/build-cloud/UnityBuildCloud.js +652 -0
  22. package/dist/cjs/build-cloud/UnityBuildCloud.js.map +1 -0
  23. package/dist/cjs/build-cloud/UnrealBuildCloud.js +674 -0
  24. package/dist/cjs/build-cloud/UnrealBuildCloud.js.map +1 -0
  25. package/dist/cjs/core/EventBus.js +2 -1
  26. package/dist/cjs/core/EventBus.js.map +1 -1
  27. package/dist/cjs/core/GameConfig.js +1 -1
  28. package/dist/cjs/core/GameConfig.js.map +1 -1
  29. package/dist/cjs/core/GameLoop.js +6 -3
  30. package/dist/cjs/core/GameLoop.js.map +1 -1
  31. package/dist/cjs/core/ServiceLocator.js +1 -2
  32. package/dist/cjs/core/ServiceLocator.js.map +1 -1
  33. package/dist/cjs/devtools/DevTools.js +73 -43
  34. package/dist/cjs/devtools/DevTools.js.map +1 -1
  35. package/dist/cjs/devtools/DeveloperExperience.js +84 -42
  36. package/dist/cjs/devtools/DeveloperExperience.js.map +1 -1
  37. package/dist/cjs/devtools/GameplayAnalytics.js +71 -43
  38. package/dist/cjs/devtools/GameplayAnalytics.js.map +1 -1
  39. package/dist/cjs/dialogue/DialogueSystem.js +153 -129
  40. package/dist/cjs/dialogue/DialogueSystem.js.map +1 -1
  41. package/dist/cjs/docs/DocGenerator.js +70 -28
  42. package/dist/cjs/docs/DocGenerator.js.map +1 -1
  43. package/dist/cjs/ecs/World.js +159 -33
  44. package/dist/cjs/ecs/World.js.map +1 -1
  45. package/dist/cjs/editor/AchievementEditor.js +650 -0
  46. package/dist/cjs/editor/AchievementEditor.js.map +1 -0
  47. package/dist/cjs/editor/AdvancedEditor.js +95 -23
  48. package/dist/cjs/editor/AdvancedEditor.js.map +1 -1
  49. package/dist/cjs/editor/AnimationRetargeting.js +742 -0
  50. package/dist/cjs/editor/AnimationRetargeting.js.map +1 -0
  51. package/dist/cjs/editor/AssetBrowser.js +1191 -0
  52. package/dist/cjs/editor/AssetBrowser.js.map +1 -0
  53. package/dist/cjs/editor/AssetManager.js +22 -14
  54. package/dist/cjs/editor/AssetManager.js.map +1 -1
  55. package/dist/cjs/editor/ConsolePro.js +1092 -0
  56. package/dist/cjs/editor/ConsolePro.js.map +1 -0
  57. package/dist/cjs/editor/CraftingEditor.js +749 -0
  58. package/dist/cjs/editor/CraftingEditor.js.map +1 -0
  59. package/dist/cjs/editor/DebugTools.js +46 -23
  60. package/dist/cjs/editor/DebugTools.js.map +1 -1
  61. package/dist/cjs/editor/DialogueSystem.js +924 -0
  62. package/dist/cjs/editor/DialogueSystem.js.map +1 -0
  63. package/dist/cjs/editor/LeaderboardSystem.js +496 -0
  64. package/dist/cjs/editor/LeaderboardSystem.js.map +1 -0
  65. package/dist/cjs/editor/NiceGameEditor.js +532 -142
  66. package/dist/cjs/editor/NiceGameEditor.js.map +1 -1
  67. package/dist/cjs/editor/PrefabSystem.js +864 -0
  68. package/dist/cjs/editor/PrefabSystem.js.map +1 -0
  69. package/dist/cjs/editor/ProfilerPanel.js +716 -0
  70. package/dist/cjs/editor/ProfilerPanel.js.map +1 -0
  71. package/dist/cjs/editor/QuestEditor.js +850 -0
  72. package/dist/cjs/editor/QuestEditor.js.map +1 -0
  73. package/dist/cjs/editor/ReplaySystem.js +655 -0
  74. package/dist/cjs/editor/ReplaySystem.js.map +1 -0
  75. package/dist/cjs/editor/SceneEditor.js +33 -13
  76. package/dist/cjs/editor/SceneEditor.js.map +1 -1
  77. package/dist/cjs/editor/ScreenshotMode.js +710 -0
  78. package/dist/cjs/editor/ScreenshotMode.js.map +1 -0
  79. package/dist/cjs/editor/ShaderGraph.js +7 -6
  80. package/dist/cjs/editor/ShaderGraph.js.map +1 -1
  81. package/dist/cjs/editor/TimelineEditor.js +36 -30
  82. package/dist/cjs/editor/TimelineEditor.js.map +1 -1
  83. package/dist/cjs/editor/UndoRedoPro.js +920 -0
  84. package/dist/cjs/editor/UndoRedoPro.js.map +1 -0
  85. package/dist/cjs/editor/VRARMode.js +658 -0
  86. package/dist/cjs/editor/VRARMode.js.map +1 -0
  87. package/dist/cjs/engine/NiceGameEngine.js +12 -10
  88. package/dist/cjs/engine/NiceGameEngine.js.map +1 -1
  89. package/dist/cjs/engine/SaveSystemV2.js +73 -37
  90. package/dist/cjs/engine/SaveSystemV2.js.map +1 -1
  91. package/dist/cjs/enterprise/Enterprise.js +92 -44
  92. package/dist/cjs/enterprise/Enterprise.js.map +1 -1
  93. package/dist/cjs/export/BevyExporter.js +998 -0
  94. package/dist/cjs/export/BevyExporter.js.map +1 -0
  95. package/dist/cjs/export/CocosExporter.js +706 -0
  96. package/dist/cjs/export/CocosExporter.js.map +1 -0
  97. package/dist/cjs/export/Construct3Exporter.js +832 -0
  98. package/dist/cjs/export/Construct3Exporter.js.map +1 -0
  99. package/dist/cjs/export/DefoldExporter.js +1106 -0
  100. package/dist/cjs/export/DefoldExporter.js.map +1 -0
  101. package/dist/cjs/export/GDevelopExporter.js +748 -0
  102. package/dist/cjs/export/GDevelopExporter.js.map +1 -0
  103. package/dist/cjs/export/GameMakerExporter.js +846 -0
  104. package/dist/cjs/export/GameMakerExporter.js.map +1 -0
  105. package/dist/cjs/export/GodotExporter.js +45 -50
  106. package/dist/cjs/export/GodotExporter.js.map +1 -1
  107. package/dist/cjs/export/MinecraftBedrockExporter.js +606 -0
  108. package/dist/cjs/export/MinecraftBedrockExporter.js.map +1 -0
  109. package/dist/cjs/export/MonoGameExporter.js +1334 -0
  110. package/dist/cjs/export/MonoGameExporter.js.map +1 -0
  111. package/dist/cjs/export/Pico8Exporter.js +846 -0
  112. package/dist/cjs/export/Pico8Exporter.js.map +1 -0
  113. package/dist/cjs/export/PlatformExporter.js +4 -5
  114. package/dist/cjs/export/PlatformExporter.js.map +1 -1
  115. package/dist/cjs/export/RPGMakerExporter.js +906 -0
  116. package/dist/cjs/export/RPGMakerExporter.js.map +1 -0
  117. package/dist/cjs/export/RobloxExporter.js +943 -0
  118. package/dist/cjs/export/RobloxExporter.js.map +1 -0
  119. package/dist/cjs/export/Solar2DExporter.js +1283 -0
  120. package/dist/cjs/export/Solar2DExporter.js.map +1 -0
  121. package/dist/cjs/export/ThreeJSExporter.js +52 -55
  122. package/dist/cjs/export/ThreeJSExporter.js.map +1 -1
  123. package/dist/cjs/export/Tic80Exporter.js +1315 -0
  124. package/dist/cjs/export/Tic80Exporter.js.map +1 -0
  125. package/dist/cjs/export/UnityExporter.js +41 -56
  126. package/dist/cjs/export/UnityExporter.js.map +1 -1
  127. package/dist/cjs/export/UnrealExporter.js +962 -0
  128. package/dist/cjs/export/UnrealExporter.js.map +1 -0
  129. package/dist/cjs/export/WebExporter.js +42 -50
  130. package/dist/cjs/export/WebExporter.js.map +1 -1
  131. package/dist/cjs/export/index.js +50 -2
  132. package/dist/cjs/export/index.js.map +1 -1
  133. package/dist/cjs/godot-integration/GodotAssetLibrary.js +716 -0
  134. package/dist/cjs/godot-integration/GodotAssetLibrary.js.map +1 -0
  135. package/dist/cjs/godot-integration/GodotImport.js +1069 -0
  136. package/dist/cjs/godot-integration/GodotImport.js.map +1 -0
  137. package/dist/cjs/godot-integration/GodotLiveLink.js +962 -0
  138. package/dist/cjs/godot-integration/GodotLiveLink.js.map +1 -0
  139. package/dist/cjs/godot-integration/components/GodotProjectBrowser.js +668 -0
  140. package/dist/cjs/godot-integration/components/GodotProjectBrowser.js.map +1 -0
  141. package/dist/cjs/i18n/I18n.js +56 -30
  142. package/dist/cjs/i18n/I18n.js.map +1 -1
  143. package/dist/cjs/i18n/useTranslation.js +4 -4
  144. package/dist/cjs/i18n/useTranslation.js.map +1 -1
  145. package/dist/cjs/import/AsepriteImporter.js +15 -19
  146. package/dist/cjs/import/AsepriteImporter.js.map +1 -1
  147. package/dist/cjs/import/DragonBonesImporter.js +36 -40
  148. package/dist/cjs/import/DragonBonesImporter.js.map +1 -1
  149. package/dist/cjs/import/GameMakerImporter.js +11 -17
  150. package/dist/cjs/import/GameMakerImporter.js.map +1 -1
  151. package/dist/cjs/import/GodotSceneImporter.js +43 -29
  152. package/dist/cjs/import/GodotSceneImporter.js.map +1 -1
  153. package/dist/cjs/import/LDtkImporter.js +16 -17
  154. package/dist/cjs/import/LDtkImporter.js.map +1 -1
  155. package/dist/cjs/import/Live2DImporter.js +16 -19
  156. package/dist/cjs/import/Live2DImporter.js.map +1 -1
  157. package/dist/cjs/import/NdgFormat.js +28 -35
  158. package/dist/cjs/import/NdgFormat.js.map +1 -1
  159. package/dist/cjs/import/OgmoImporter.js +16 -18
  160. package/dist/cjs/import/OgmoImporter.js.map +1 -1
  161. package/dist/cjs/import/RPGMakerImporter.js +5 -6
  162. package/dist/cjs/import/RPGMakerImporter.js.map +1 -1
  163. package/dist/cjs/import/SceneImporter.js +23 -13
  164. package/dist/cjs/import/SceneImporter.js.map +1 -1
  165. package/dist/cjs/import/SpineImporter.js +20 -20
  166. package/dist/cjs/import/SpineImporter.js.map +1 -1
  167. package/dist/cjs/import/SpriterImporter.js +38 -46
  168. package/dist/cjs/import/SpriterImporter.js.map +1 -1
  169. package/dist/cjs/import/TiledMapImporter.js +20 -24
  170. package/dist/cjs/import/TiledMapImporter.js.map +1 -1
  171. package/dist/cjs/import/UnitySceneImporter.js +15 -15
  172. package/dist/cjs/import/UnitySceneImporter.js.map +1 -1
  173. package/dist/cjs/index.js +516 -4
  174. package/dist/cjs/index.js.map +1 -1
  175. package/dist/cjs/input/GamepadNavigation.js +82 -47
  176. package/dist/cjs/input/GamepadNavigation.js.map +1 -1
  177. package/dist/cjs/input/InputManager.js +107 -52
  178. package/dist/cjs/input/InputManager.js.map +1 -1
  179. package/dist/cjs/input/useGamepads.js +35 -29
  180. package/dist/cjs/input/useGamepads.js.map +1 -1
  181. package/dist/cjs/integration/IconSprite.js +39 -21
  182. package/dist/cjs/integration/IconSprite.js.map +1 -1
  183. package/dist/cjs/inventory/InventorySystem.js +218 -127
  184. package/dist/cjs/inventory/InventorySystem.js.map +1 -1
  185. package/dist/cjs/kids/KidMode.js +491 -78
  186. package/dist/cjs/kids/KidMode.js.map +1 -1
  187. package/dist/cjs/kids/KidTools.js +154 -48
  188. package/dist/cjs/kids/KidTools.js.map +1 -1
  189. package/dist/cjs/monetization/Monetization.js +47 -35
  190. package/dist/cjs/monetization/Monetization.js.map +1 -1
  191. package/dist/cjs/multiplayer/LocalMultiplayer.js +48 -26
  192. package/dist/cjs/multiplayer/LocalMultiplayer.js.map +1 -1
  193. package/dist/cjs/multiplayer/MiniGameTypes.js +23 -10
  194. package/dist/cjs/multiplayer/MiniGameTypes.js.map +1 -1
  195. package/dist/cjs/native-engine/AssetPipeline.js +540 -0
  196. package/dist/cjs/native-engine/AssetPipeline.js.map +1 -0
  197. package/dist/cjs/native-engine/AudioEngine.js +825 -0
  198. package/dist/cjs/native-engine/AudioEngine.js.map +1 -0
  199. package/dist/cjs/native-engine/InputSystem.js +1175 -0
  200. package/dist/cjs/native-engine/InputSystem.js.map +1 -0
  201. package/dist/cjs/native-engine/NetworkingSystem.js +825 -0
  202. package/dist/cjs/native-engine/NetworkingSystem.js.map +1 -0
  203. package/dist/cjs/native-engine/PhysicsEngine.js +622 -0
  204. package/dist/cjs/native-engine/PhysicsEngine.js.map +1 -0
  205. package/dist/cjs/native-engine/RenderingEngine.js +371 -0
  206. package/dist/cjs/native-engine/RenderingEngine.js.map +1 -0
  207. package/dist/cjs/native-engine/SceneGraph.js +862 -0
  208. package/dist/cjs/native-engine/SceneGraph.js.map +1 -0
  209. package/dist/cjs/network/MultiplayerTransport.js +63 -33
  210. package/dist/cjs/network/MultiplayerTransport.js.map +1 -1
  211. package/dist/cjs/network/Networking.js +87 -62
  212. package/dist/cjs/network/Networking.js.map +1 -1
  213. package/dist/cjs/pathfinding/Pathfinding.js +71 -26
  214. package/dist/cjs/pathfinding/Pathfinding.js.map +1 -1
  215. package/dist/cjs/performance/AssetStreaming.js +656 -0
  216. package/dist/cjs/performance/AssetStreaming.js.map +1 -0
  217. package/dist/cjs/performance/BenchmarkSuite.js +37 -24
  218. package/dist/cjs/performance/BenchmarkSuite.js.map +1 -1
  219. package/dist/cjs/performance/DeltaCompression.js +566 -0
  220. package/dist/cjs/performance/DeltaCompression.js.map +1 -0
  221. package/dist/cjs/performance/DeterministicPhysics.js +603 -0
  222. package/dist/cjs/performance/DeterministicPhysics.js.map +1 -0
  223. package/dist/cjs/performance/ECSOptimization.js +726 -0
  224. package/dist/cjs/performance/ECSOptimization.js.map +1 -0
  225. package/dist/cjs/performance/HotReload.js +525 -0
  226. package/dist/cjs/performance/HotReload.js.map +1 -0
  227. package/dist/cjs/performance/InputRecording.js +590 -0
  228. package/dist/cjs/performance/InputRecording.js.map +1 -0
  229. package/dist/cjs/performance/InterestManagement.js +532 -0
  230. package/dist/cjs/performance/InterestManagement.js.map +1 -0
  231. package/dist/cjs/performance/LocalizationRuntime.js +472 -0
  232. package/dist/cjs/performance/LocalizationRuntime.js.map +1 -0
  233. package/dist/cjs/performance/MemoryManagement.js +487 -0
  234. package/dist/cjs/performance/MemoryManagement.js.map +1 -0
  235. package/dist/cjs/performance/ModSupport.js +531 -0
  236. package/dist/cjs/performance/ModSupport.js.map +1 -0
  237. package/dist/cjs/performance/MultiThreadedPhysics.js +500 -0
  238. package/dist/cjs/performance/MultiThreadedPhysics.js.map +1 -0
  239. package/dist/cjs/performance/NetworkPrediction.js +521 -0
  240. package/dist/cjs/performance/NetworkPrediction.js.map +1 -0
  241. package/dist/cjs/performance/ObjectPooling.js +653 -0
  242. package/dist/cjs/performance/ObjectPooling.js.map +1 -0
  243. package/dist/cjs/performance/Performance.js +64 -25
  244. package/dist/cjs/performance/Performance.js.map +1 -1
  245. package/dist/cjs/performance/PerformanceAdvanced.js +83 -49
  246. package/dist/cjs/performance/PerformanceAdvanced.js.map +1 -1
  247. package/dist/cjs/performance/SaveSystem.js +574 -0
  248. package/dist/cjs/performance/SaveSystem.js.map +1 -0
  249. package/dist/cjs/performance/WebGPURenderer.js +702 -0
  250. package/dist/cjs/performance/WebGPURenderer.js.map +1 -0
  251. package/dist/cjs/physics/PhysicsAdvanced.js +32 -20
  252. package/dist/cjs/physics/PhysicsAdvanced.js.map +1 -1
  253. package/dist/cjs/physics/PhysicsEngine2D.js +63 -36
  254. package/dist/cjs/physics/PhysicsEngine2D.js.map +1 -1
  255. package/dist/cjs/plugins/PluginSDK.js +46 -34
  256. package/dist/cjs/plugins/PluginSDK.js.map +1 -1
  257. package/dist/cjs/plugins/PluginTestKit.js +28 -29
  258. package/dist/cjs/plugins/PluginTestKit.js.map +1 -1
  259. package/dist/cjs/procedural/Procedural.js +24 -17
  260. package/dist/cjs/procedural/Procedural.js.map +1 -1
  261. package/dist/cjs/procedural/WorldBuilding.js +187 -55
  262. package/dist/cjs/procedural/WorldBuilding.js.map +1 -1
  263. package/dist/cjs/quest/QuestSystem.js +145 -111
  264. package/dist/cjs/quest/QuestSystem.js.map +1 -1
  265. package/dist/cjs/release/Release.js +142 -31
  266. package/dist/cjs/release/Release.js.map +1 -1
  267. package/dist/cjs/rendering/Camera2D.js +12 -7
  268. package/dist/cjs/rendering/Camera2D.js.map +1 -1
  269. package/dist/cjs/rendering/Renderer2D.js +62 -26
  270. package/dist/cjs/rendering/Renderer2D.js.map +1 -1
  271. package/dist/cjs/rendering/WebGPURenderPipeline.js +60 -31
  272. package/dist/cjs/rendering/WebGPURenderPipeline.js.map +1 -1
  273. package/dist/cjs/runtime3d/Runtime3D.js +80 -55
  274. package/dist/cjs/runtime3d/Runtime3D.js.map +1 -1
  275. package/dist/cjs/runtime3d/SceneEditor3D.js +20 -11
  276. package/dist/cjs/runtime3d/SceneEditor3D.js.map +1 -1
  277. package/dist/cjs/scene/SceneManager.js +26 -12
  278. package/dist/cjs/scene/SceneManager.js.map +1 -1
  279. package/dist/cjs/scripting/GraphToAST.js +36 -24
  280. package/dist/cjs/scripting/GraphToAST.js.map +1 -1
  281. package/dist/cjs/scripting/LanguageExporter.js +2 -3
  282. package/dist/cjs/scripting/LanguageExporter.js.map +1 -1
  283. package/dist/cjs/scripting/NodeGraph.js +49 -32
  284. package/dist/cjs/scripting/NodeGraph.js.map +1 -1
  285. package/dist/cjs/scripting/ScriptAST.js +19 -6
  286. package/dist/cjs/scripting/ScriptAST.js.map +1 -1
  287. package/dist/cjs/scripting/VisualScripting2.js +13 -12
  288. package/dist/cjs/scripting/VisualScripting2.js.map +1 -1
  289. package/dist/cjs/scripting/exporters/CSharpExporter.js +16 -16
  290. package/dist/cjs/scripting/exporters/CSharpExporter.js.map +1 -1
  291. package/dist/cjs/scripting/exporters/GDScriptExporter.js +3 -6
  292. package/dist/cjs/scripting/exporters/GDScriptExporter.js.map +1 -1
  293. package/dist/cjs/scripting/exporters/LuaExporter.js +5 -9
  294. package/dist/cjs/scripting/exporters/LuaExporter.js.map +1 -1
  295. package/dist/cjs/scripting/exporters/PythonExporter.js +7 -13
  296. package/dist/cjs/scripting/exporters/PythonExporter.js.map +1 -1
  297. package/dist/cjs/scripting/exporters/RustExporter.js +7 -14
  298. package/dist/cjs/scripting/exporters/RustExporter.js.map +1 -1
  299. package/dist/cjs/scripting/exporters/TypeScriptExporter.js +28 -29
  300. package/dist/cjs/scripting/exporters/TypeScriptExporter.js.map +1 -1
  301. package/dist/cjs/social/Social.js +27 -20
  302. package/dist/cjs/social/Social.js.map +1 -1
  303. package/dist/cjs/systems/LightingSystem.js +980 -0
  304. package/dist/cjs/systems/LightingSystem.js.map +1 -0
  305. package/dist/cjs/systems/ParticleSystem2.js +34 -17
  306. package/dist/cjs/systems/ParticleSystem2.js.map +1 -1
  307. package/dist/cjs/systems/PhysicsDebugSystem.js +1228 -0
  308. package/dist/cjs/systems/PhysicsDebugSystem.js.map +1 -0
  309. package/dist/cjs/systems/TerrainSystem.js +1137 -0
  310. package/dist/cjs/systems/TerrainSystem.js.map +1 -0
  311. package/dist/cjs/templates/ActionTemplates.js +144 -24
  312. package/dist/cjs/templates/ActionTemplates.js.map +1 -1
  313. package/dist/cjs/templates/FightingTemplate.js +536 -0
  314. package/dist/cjs/templates/FightingTemplate.js.map +1 -0
  315. package/dist/cjs/templates/MetroidvaniaTemplate.js +523 -0
  316. package/dist/cjs/templates/MetroidvaniaTemplate.js.map +1 -0
  317. package/dist/cjs/templates/PartyTemplates.js +60 -28
  318. package/dist/cjs/templates/PartyTemplates.js.map +1 -1
  319. package/dist/cjs/templates/PuzzleTemplates.js +63 -22
  320. package/dist/cjs/templates/PuzzleTemplates.js.map +1 -1
  321. package/dist/cjs/templates/RPGTemplates.js +29 -15
  322. package/dist/cjs/templates/RPGTemplates.js.map +1 -1
  323. package/dist/cjs/templates/SportsTemplates.js +41 -17
  324. package/dist/cjs/templates/SportsTemplates.js.map +1 -1
  325. package/dist/cjs/templates/StrategyTemplates.js +45 -18
  326. package/dist/cjs/templates/StrategyTemplates.js.map +1 -1
  327. package/dist/cjs/templates/SurvivalTemplate.js +479 -0
  328. package/dist/cjs/templates/SurvivalTemplate.js.map +1 -0
  329. package/dist/cjs/templates/WaveDefense.js +139 -52
  330. package/dist/cjs/templates/WaveDefense.js.map +1 -1
  331. package/dist/cjs/tilemap/Tilemap.js +48 -32
  332. package/dist/cjs/tilemap/Tilemap.js.map +1 -1
  333. package/dist/cjs/tutorials/TutorialBranching.js +111 -42
  334. package/dist/cjs/tutorials/TutorialBranching.js.map +1 -1
  335. package/dist/cjs/tutorials/TutorialEngine.js +152 -80
  336. package/dist/cjs/tutorials/TutorialEngine.js.map +1 -1
  337. package/dist/cjs/tutorials/TutorialOverlay.js +117 -40
  338. package/dist/cjs/tutorials/TutorialOverlay.js.map +1 -1
  339. package/dist/cjs/ui/GameUI.js +69 -42
  340. package/dist/cjs/ui/GameUI.js.map +1 -1
  341. package/dist/cjs/unity-integration/UnityAssetStore.js +754 -0
  342. package/dist/cjs/unity-integration/UnityAssetStore.js.map +1 -0
  343. package/dist/cjs/unity-integration/UnityImport.js +1252 -0
  344. package/dist/cjs/unity-integration/UnityImport.js.map +1 -0
  345. package/dist/cjs/unity-integration/UnityLiveLink.js +1022 -0
  346. package/dist/cjs/unity-integration/UnityLiveLink.js.map +1 -0
  347. package/dist/cjs/unity-integration/components/UnityAssetStoreBrowser.js +796 -0
  348. package/dist/cjs/unity-integration/components/UnityAssetStoreBrowser.js.map +1 -0
  349. package/dist/cjs/unity-integration/components/UnityProjectBrowser.js +833 -0
  350. package/dist/cjs/unity-integration/components/UnityProjectBrowser.js.map +1 -0
  351. package/dist/cjs/unreal-integration/UnrealImport.js +442 -0
  352. package/dist/cjs/unreal-integration/UnrealImport.js.map +1 -0
  353. package/dist/cjs/unreal-integration/UnrealLiveLink.js +1186 -0
  354. package/dist/cjs/unreal-integration/UnrealLiveLink.js.map +1 -0
  355. package/dist/cjs/unreal-integration/UnrealMarketplace.js +497 -0
  356. package/dist/cjs/unreal-integration/UnrealMarketplace.js.map +1 -0
  357. package/dist/cjs/unreal-integration/components/UnrealProjectBrowser.js +835 -0
  358. package/dist/cjs/unreal-integration/components/UnrealProjectBrowser.js.map +1 -0
  359. package/dist/cjs/xr/ARVR.js +32 -9
  360. package/dist/cjs/xr/ARVR.js.map +1 -1
  361. package/dist/esm/accessibility/Accessibility.js +55 -20
  362. package/dist/esm/accessibility/Accessibility.js.map +1 -1
  363. package/dist/esm/ai/AI.js +74 -40
  364. package/dist/esm/ai/AI.js.map +1 -1
  365. package/dist/esm/ai/BehaviorTree.js +39 -47
  366. package/dist/esm/ai/BehaviorTree.js.map +1 -1
  367. package/dist/esm/ai/StateMachine.js +65 -99
  368. package/dist/esm/ai/StateMachine.js.map +1 -1
  369. package/dist/esm/animation/Animation.js +58 -34
  370. package/dist/esm/animation/Animation.js.map +1 -1
  371. package/dist/esm/audio/AudioAdvanced.js +71 -37
  372. package/dist/esm/audio/AudioAdvanced.js.map +1 -1
  373. package/dist/esm/audio/AudioBridge.js +61 -49
  374. package/dist/esm/audio/AudioBridge.js.map +1 -1
  375. package/dist/esm/audio/AudioManager.js +45 -29
  376. package/dist/esm/audio/AudioManager.js.map +1 -1
  377. package/dist/esm/build-cloud/BuildOrchestration.js +1129 -0
  378. package/dist/esm/build-cloud/BuildOrchestration.js.map +1 -0
  379. package/dist/esm/build-cloud/GodotBuildCloud.js +715 -0
  380. package/dist/esm/build-cloud/GodotBuildCloud.js.map +1 -0
  381. package/dist/esm/build-cloud/UnityBuildCloud.js +643 -0
  382. package/dist/esm/build-cloud/UnityBuildCloud.js.map +1 -0
  383. package/dist/esm/build-cloud/UnrealBuildCloud.js +668 -0
  384. package/dist/esm/build-cloud/UnrealBuildCloud.js.map +1 -0
  385. package/dist/esm/core/EventBus.js +2 -1
  386. package/dist/esm/core/EventBus.js.map +1 -1
  387. package/dist/esm/core/GameConfig.js +1 -1
  388. package/dist/esm/core/GameConfig.js.map +1 -1
  389. package/dist/esm/core/GameLoop.js +6 -3
  390. package/dist/esm/core/GameLoop.js.map +1 -1
  391. package/dist/esm/core/ServiceLocator.js +1 -2
  392. package/dist/esm/core/ServiceLocator.js.map +1 -1
  393. package/dist/esm/devtools/DevTools.js +73 -43
  394. package/dist/esm/devtools/DevTools.js.map +1 -1
  395. package/dist/esm/devtools/DeveloperExperience.js +84 -42
  396. package/dist/esm/devtools/DeveloperExperience.js.map +1 -1
  397. package/dist/esm/devtools/GameplayAnalytics.js +71 -43
  398. package/dist/esm/devtools/GameplayAnalytics.js.map +1 -1
  399. package/dist/esm/dialogue/DialogueSystem.js +153 -129
  400. package/dist/esm/dialogue/DialogueSystem.js.map +1 -1
  401. package/dist/esm/docs/DocGenerator.js +70 -28
  402. package/dist/esm/docs/DocGenerator.js.map +1 -1
  403. package/dist/esm/ecs/World.js +159 -33
  404. package/dist/esm/ecs/World.js.map +1 -1
  405. package/dist/esm/editor/AchievementEditor.js +645 -0
  406. package/dist/esm/editor/AchievementEditor.js.map +1 -0
  407. package/dist/esm/editor/AdvancedEditor.js +95 -23
  408. package/dist/esm/editor/AdvancedEditor.js.map +1 -1
  409. package/dist/esm/editor/AnimationRetargeting.js +738 -0
  410. package/dist/esm/editor/AnimationRetargeting.js.map +1 -0
  411. package/dist/esm/editor/AssetBrowser.js +1184 -0
  412. package/dist/esm/editor/AssetBrowser.js.map +1 -0
  413. package/dist/esm/editor/AssetManager.js +22 -14
  414. package/dist/esm/editor/AssetManager.js.map +1 -1
  415. package/dist/esm/editor/ConsolePro.js +1085 -0
  416. package/dist/esm/editor/ConsolePro.js.map +1 -0
  417. package/dist/esm/editor/CraftingEditor.js +744 -0
  418. package/dist/esm/editor/CraftingEditor.js.map +1 -0
  419. package/dist/esm/editor/DebugTools.js +46 -23
  420. package/dist/esm/editor/DebugTools.js.map +1 -1
  421. package/dist/esm/editor/DialogueSystem.js +918 -0
  422. package/dist/esm/editor/DialogueSystem.js.map +1 -0
  423. package/dist/esm/editor/LeaderboardSystem.js +491 -0
  424. package/dist/esm/editor/LeaderboardSystem.js.map +1 -0
  425. package/dist/esm/editor/NiceGameEditor.js +532 -142
  426. package/dist/esm/editor/NiceGameEditor.js.map +1 -1
  427. package/dist/esm/editor/PrefabSystem.js +858 -0
  428. package/dist/esm/editor/PrefabSystem.js.map +1 -0
  429. package/dist/esm/editor/ProfilerPanel.js +710 -0
  430. package/dist/esm/editor/ProfilerPanel.js.map +1 -0
  431. package/dist/esm/editor/QuestEditor.js +846 -0
  432. package/dist/esm/editor/QuestEditor.js.map +1 -0
  433. package/dist/esm/editor/ReplaySystem.js +648 -0
  434. package/dist/esm/editor/ReplaySystem.js.map +1 -0
  435. package/dist/esm/editor/SceneEditor.js +33 -13
  436. package/dist/esm/editor/SceneEditor.js.map +1 -1
  437. package/dist/esm/editor/ScreenshotMode.js +702 -0
  438. package/dist/esm/editor/ScreenshotMode.js.map +1 -0
  439. package/dist/esm/editor/ShaderGraph.js +7 -6
  440. package/dist/esm/editor/ShaderGraph.js.map +1 -1
  441. package/dist/esm/editor/TimelineEditor.js +37 -30
  442. package/dist/esm/editor/TimelineEditor.js.map +1 -1
  443. package/dist/esm/editor/UndoRedoPro.js +914 -0
  444. package/dist/esm/editor/UndoRedoPro.js.map +1 -0
  445. package/dist/esm/editor/VRARMode.js +653 -0
  446. package/dist/esm/editor/VRARMode.js.map +1 -0
  447. package/dist/esm/engine/NiceGameEngine.js +12 -10
  448. package/dist/esm/engine/NiceGameEngine.js.map +1 -1
  449. package/dist/esm/engine/SaveSystemV2.js +73 -37
  450. package/dist/esm/engine/SaveSystemV2.js.map +1 -1
  451. package/dist/esm/enterprise/Enterprise.js +92 -44
  452. package/dist/esm/enterprise/Enterprise.js.map +1 -1
  453. package/dist/esm/export/BevyExporter.js +995 -0
  454. package/dist/esm/export/BevyExporter.js.map +1 -0
  455. package/dist/esm/export/CocosExporter.js +703 -0
  456. package/dist/esm/export/CocosExporter.js.map +1 -0
  457. package/dist/esm/export/Construct3Exporter.js +829 -0
  458. package/dist/esm/export/Construct3Exporter.js.map +1 -0
  459. package/dist/esm/export/DefoldExporter.js +1103 -0
  460. package/dist/esm/export/DefoldExporter.js.map +1 -0
  461. package/dist/esm/export/GDevelopExporter.js +745 -0
  462. package/dist/esm/export/GDevelopExporter.js.map +1 -0
  463. package/dist/esm/export/GameMakerExporter.js +843 -0
  464. package/dist/esm/export/GameMakerExporter.js.map +1 -0
  465. package/dist/esm/export/GodotExporter.js +45 -50
  466. package/dist/esm/export/GodotExporter.js.map +1 -1
  467. package/dist/esm/export/MinecraftBedrockExporter.js +603 -0
  468. package/dist/esm/export/MinecraftBedrockExporter.js.map +1 -0
  469. package/dist/esm/export/MonoGameExporter.js +1331 -0
  470. package/dist/esm/export/MonoGameExporter.js.map +1 -0
  471. package/dist/esm/export/Pico8Exporter.js +843 -0
  472. package/dist/esm/export/Pico8Exporter.js.map +1 -0
  473. package/dist/esm/export/PlatformExporter.js +4 -5
  474. package/dist/esm/export/PlatformExporter.js.map +1 -1
  475. package/dist/esm/export/RPGMakerExporter.js +903 -0
  476. package/dist/esm/export/RPGMakerExporter.js.map +1 -0
  477. package/dist/esm/export/RobloxExporter.js +940 -0
  478. package/dist/esm/export/RobloxExporter.js.map +1 -0
  479. package/dist/esm/export/Solar2DExporter.js +1280 -0
  480. package/dist/esm/export/Solar2DExporter.js.map +1 -0
  481. package/dist/esm/export/ThreeJSExporter.js +52 -55
  482. package/dist/esm/export/ThreeJSExporter.js.map +1 -1
  483. package/dist/esm/export/Tic80Exporter.js +1312 -0
  484. package/dist/esm/export/Tic80Exporter.js.map +1 -0
  485. package/dist/esm/export/UnityExporter.js +41 -56
  486. package/dist/esm/export/UnityExporter.js.map +1 -1
  487. package/dist/esm/export/UnrealExporter.js +959 -0
  488. package/dist/esm/export/UnrealExporter.js.map +1 -0
  489. package/dist/esm/export/WebExporter.js +42 -50
  490. package/dist/esm/export/WebExporter.js.map +1 -1
  491. package/dist/esm/export/index.js +38 -2
  492. package/dist/esm/export/index.js.map +1 -1
  493. package/dist/esm/godot-integration/GodotAssetLibrary.js +711 -0
  494. package/dist/esm/godot-integration/GodotAssetLibrary.js.map +1 -0
  495. package/dist/esm/godot-integration/GodotImport.js +1062 -0
  496. package/dist/esm/godot-integration/GodotImport.js.map +1 -0
  497. package/dist/esm/godot-integration/GodotLiveLink.js +958 -0
  498. package/dist/esm/godot-integration/GodotLiveLink.js.map +1 -0
  499. package/dist/esm/godot-integration/components/GodotProjectBrowser.js +666 -0
  500. package/dist/esm/godot-integration/components/GodotProjectBrowser.js.map +1 -0
  501. package/dist/esm/i18n/I18n.js +56 -30
  502. package/dist/esm/i18n/I18n.js.map +1 -1
  503. package/dist/esm/i18n/useTranslation.js +4 -4
  504. package/dist/esm/i18n/useTranslation.js.map +1 -1
  505. package/dist/esm/import/AsepriteImporter.js +15 -19
  506. package/dist/esm/import/AsepriteImporter.js.map +1 -1
  507. package/dist/esm/import/DragonBonesImporter.js +36 -40
  508. package/dist/esm/import/DragonBonesImporter.js.map +1 -1
  509. package/dist/esm/import/GameMakerImporter.js +11 -17
  510. package/dist/esm/import/GameMakerImporter.js.map +1 -1
  511. package/dist/esm/import/GodotSceneImporter.js +43 -29
  512. package/dist/esm/import/GodotSceneImporter.js.map +1 -1
  513. package/dist/esm/import/LDtkImporter.js +16 -17
  514. package/dist/esm/import/LDtkImporter.js.map +1 -1
  515. package/dist/esm/import/Live2DImporter.js +16 -19
  516. package/dist/esm/import/Live2DImporter.js.map +1 -1
  517. package/dist/esm/import/NdgFormat.js +28 -35
  518. package/dist/esm/import/NdgFormat.js.map +1 -1
  519. package/dist/esm/import/OgmoImporter.js +16 -18
  520. package/dist/esm/import/OgmoImporter.js.map +1 -1
  521. package/dist/esm/import/RPGMakerImporter.js +5 -6
  522. package/dist/esm/import/RPGMakerImporter.js.map +1 -1
  523. package/dist/esm/import/SceneImporter.js +23 -13
  524. package/dist/esm/import/SceneImporter.js.map +1 -1
  525. package/dist/esm/import/SpineImporter.js +20 -20
  526. package/dist/esm/import/SpineImporter.js.map +1 -1
  527. package/dist/esm/import/SpriterImporter.js +38 -46
  528. package/dist/esm/import/SpriterImporter.js.map +1 -1
  529. package/dist/esm/import/TiledMapImporter.js +20 -24
  530. package/dist/esm/import/TiledMapImporter.js.map +1 -1
  531. package/dist/esm/import/UnitySceneImporter.js +15 -15
  532. package/dist/esm/import/UnitySceneImporter.js.map +1 -1
  533. package/dist/esm/index.js +76 -3
  534. package/dist/esm/index.js.map +1 -1
  535. package/dist/esm/input/GamepadNavigation.js +82 -47
  536. package/dist/esm/input/GamepadNavigation.js.map +1 -1
  537. package/dist/esm/input/InputManager.js +107 -52
  538. package/dist/esm/input/InputManager.js.map +1 -1
  539. package/dist/esm/input/useGamepads.js +35 -29
  540. package/dist/esm/input/useGamepads.js.map +1 -1
  541. package/dist/esm/integration/IconSprite.js +39 -21
  542. package/dist/esm/integration/IconSprite.js.map +1 -1
  543. package/dist/esm/inventory/InventorySystem.js +218 -127
  544. package/dist/esm/inventory/InventorySystem.js.map +1 -1
  545. package/dist/esm/kids/KidMode.js +491 -78
  546. package/dist/esm/kids/KidMode.js.map +1 -1
  547. package/dist/esm/kids/KidTools.js +154 -48
  548. package/dist/esm/kids/KidTools.js.map +1 -1
  549. package/dist/esm/monetization/Monetization.js +47 -35
  550. package/dist/esm/monetization/Monetization.js.map +1 -1
  551. package/dist/esm/multiplayer/LocalMultiplayer.js +48 -26
  552. package/dist/esm/multiplayer/LocalMultiplayer.js.map +1 -1
  553. package/dist/esm/multiplayer/MiniGameTypes.js +23 -10
  554. package/dist/esm/multiplayer/MiniGameTypes.js.map +1 -1
  555. package/dist/esm/native-engine/AssetPipeline.js +537 -0
  556. package/dist/esm/native-engine/AssetPipeline.js.map +1 -0
  557. package/dist/esm/native-engine/AudioEngine.js +822 -0
  558. package/dist/esm/native-engine/AudioEngine.js.map +1 -0
  559. package/dist/esm/native-engine/InputSystem.js +1170 -0
  560. package/dist/esm/native-engine/InputSystem.js.map +1 -0
  561. package/dist/esm/native-engine/NetworkingSystem.js +817 -0
  562. package/dist/esm/native-engine/NetworkingSystem.js.map +1 -0
  563. package/dist/esm/native-engine/PhysicsEngine.js +619 -0
  564. package/dist/esm/native-engine/PhysicsEngine.js.map +1 -0
  565. package/dist/esm/native-engine/RenderingEngine.js +368 -0
  566. package/dist/esm/native-engine/RenderingEngine.js.map +1 -0
  567. package/dist/esm/native-engine/SceneGraph.js +857 -0
  568. package/dist/esm/native-engine/SceneGraph.js.map +1 -0
  569. package/dist/esm/network/MultiplayerTransport.js +63 -33
  570. package/dist/esm/network/MultiplayerTransport.js.map +1 -1
  571. package/dist/esm/network/Networking.js +87 -62
  572. package/dist/esm/network/Networking.js.map +1 -1
  573. package/dist/esm/pathfinding/Pathfinding.js +71 -26
  574. package/dist/esm/pathfinding/Pathfinding.js.map +1 -1
  575. package/dist/esm/performance/AssetStreaming.js +649 -0
  576. package/dist/esm/performance/AssetStreaming.js.map +1 -0
  577. package/dist/esm/performance/BenchmarkSuite.js +37 -24
  578. package/dist/esm/performance/BenchmarkSuite.js.map +1 -1
  579. package/dist/esm/performance/DeltaCompression.js +554 -0
  580. package/dist/esm/performance/DeltaCompression.js.map +1 -0
  581. package/dist/esm/performance/DeterministicPhysics.js +573 -0
  582. package/dist/esm/performance/DeterministicPhysics.js.map +1 -0
  583. package/dist/esm/performance/ECSOptimization.js +716 -0
  584. package/dist/esm/performance/ECSOptimization.js.map +1 -0
  585. package/dist/esm/performance/HotReload.js +517 -0
  586. package/dist/esm/performance/HotReload.js.map +1 -0
  587. package/dist/esm/performance/InputRecording.js +580 -0
  588. package/dist/esm/performance/InputRecording.js.map +1 -0
  589. package/dist/esm/performance/InterestManagement.js +524 -0
  590. package/dist/esm/performance/InterestManagement.js.map +1 -0
  591. package/dist/esm/performance/LocalizationRuntime.js +465 -0
  592. package/dist/esm/performance/LocalizationRuntime.js.map +1 -0
  593. package/dist/esm/performance/MemoryManagement.js +481 -0
  594. package/dist/esm/performance/MemoryManagement.js.map +1 -0
  595. package/dist/esm/performance/ModSupport.js +520 -0
  596. package/dist/esm/performance/ModSupport.js.map +1 -0
  597. package/dist/esm/performance/MultiThreadedPhysics.js +491 -0
  598. package/dist/esm/performance/MultiThreadedPhysics.js.map +1 -0
  599. package/dist/esm/performance/NetworkPrediction.js +508 -0
  600. package/dist/esm/performance/NetworkPrediction.js.map +1 -0
  601. package/dist/esm/performance/ObjectPooling.js +639 -0
  602. package/dist/esm/performance/ObjectPooling.js.map +1 -0
  603. package/dist/esm/performance/Performance.js +64 -25
  604. package/dist/esm/performance/Performance.js.map +1 -1
  605. package/dist/esm/performance/PerformanceAdvanced.js +83 -49
  606. package/dist/esm/performance/PerformanceAdvanced.js.map +1 -1
  607. package/dist/esm/performance/SaveSystem.js +567 -0
  608. package/dist/esm/performance/SaveSystem.js.map +1 -0
  609. package/dist/esm/performance/WebGPURenderer.js +697 -0
  610. package/dist/esm/performance/WebGPURenderer.js.map +1 -0
  611. package/dist/esm/physics/PhysicsAdvanced.js +32 -20
  612. package/dist/esm/physics/PhysicsAdvanced.js.map +1 -1
  613. package/dist/esm/physics/PhysicsEngine2D.js +63 -36
  614. package/dist/esm/physics/PhysicsEngine2D.js.map +1 -1
  615. package/dist/esm/plugins/PluginSDK.js +46 -34
  616. package/dist/esm/plugins/PluginSDK.js.map +1 -1
  617. package/dist/esm/plugins/PluginTestKit.js +28 -29
  618. package/dist/esm/plugins/PluginTestKit.js.map +1 -1
  619. package/dist/esm/procedural/Procedural.js +24 -17
  620. package/dist/esm/procedural/Procedural.js.map +1 -1
  621. package/dist/esm/procedural/WorldBuilding.js +188 -55
  622. package/dist/esm/procedural/WorldBuilding.js.map +1 -1
  623. package/dist/esm/quest/QuestSystem.js +145 -111
  624. package/dist/esm/quest/QuestSystem.js.map +1 -1
  625. package/dist/esm/release/Release.js +142 -31
  626. package/dist/esm/release/Release.js.map +1 -1
  627. package/dist/esm/rendering/Camera2D.js +12 -7
  628. package/dist/esm/rendering/Camera2D.js.map +1 -1
  629. package/dist/esm/rendering/Renderer2D.js +62 -26
  630. package/dist/esm/rendering/Renderer2D.js.map +1 -1
  631. package/dist/esm/rendering/WebGPURenderPipeline.js +60 -31
  632. package/dist/esm/rendering/WebGPURenderPipeline.js.map +1 -1
  633. package/dist/esm/runtime3d/Runtime3D.js +80 -55
  634. package/dist/esm/runtime3d/Runtime3D.js.map +1 -1
  635. package/dist/esm/runtime3d/SceneEditor3D.js +20 -11
  636. package/dist/esm/runtime3d/SceneEditor3D.js.map +1 -1
  637. package/dist/esm/scene/SceneManager.js +26 -12
  638. package/dist/esm/scene/SceneManager.js.map +1 -1
  639. package/dist/esm/scripting/GraphToAST.js +36 -24
  640. package/dist/esm/scripting/GraphToAST.js.map +1 -1
  641. package/dist/esm/scripting/LanguageExporter.js +2 -3
  642. package/dist/esm/scripting/LanguageExporter.js.map +1 -1
  643. package/dist/esm/scripting/NodeGraph.js +49 -32
  644. package/dist/esm/scripting/NodeGraph.js.map +1 -1
  645. package/dist/esm/scripting/ScriptAST.js +19 -6
  646. package/dist/esm/scripting/ScriptAST.js.map +1 -1
  647. package/dist/esm/scripting/VisualScripting2.js +13 -12
  648. package/dist/esm/scripting/VisualScripting2.js.map +1 -1
  649. package/dist/esm/scripting/exporters/CSharpExporter.js +16 -16
  650. package/dist/esm/scripting/exporters/CSharpExporter.js.map +1 -1
  651. package/dist/esm/scripting/exporters/GDScriptExporter.js +3 -6
  652. package/dist/esm/scripting/exporters/GDScriptExporter.js.map +1 -1
  653. package/dist/esm/scripting/exporters/LuaExporter.js +5 -9
  654. package/dist/esm/scripting/exporters/LuaExporter.js.map +1 -1
  655. package/dist/esm/scripting/exporters/PythonExporter.js +7 -13
  656. package/dist/esm/scripting/exporters/PythonExporter.js.map +1 -1
  657. package/dist/esm/scripting/exporters/RustExporter.js +7 -14
  658. package/dist/esm/scripting/exporters/RustExporter.js.map +1 -1
  659. package/dist/esm/scripting/exporters/TypeScriptExporter.js +28 -29
  660. package/dist/esm/scripting/exporters/TypeScriptExporter.js.map +1 -1
  661. package/dist/esm/social/Social.js +27 -20
  662. package/dist/esm/social/Social.js.map +1 -1
  663. package/dist/esm/systems/LightingSystem.js +968 -0
  664. package/dist/esm/systems/LightingSystem.js.map +1 -0
  665. package/dist/esm/systems/ParticleSystem2.js +34 -17
  666. package/dist/esm/systems/ParticleSystem2.js.map +1 -1
  667. package/dist/esm/systems/PhysicsDebugSystem.js +1219 -0
  668. package/dist/esm/systems/PhysicsDebugSystem.js.map +1 -0
  669. package/dist/esm/systems/TerrainSystem.js +1125 -0
  670. package/dist/esm/systems/TerrainSystem.js.map +1 -0
  671. package/dist/esm/templates/ActionTemplates.js +144 -24
  672. package/dist/esm/templates/ActionTemplates.js.map +1 -1
  673. package/dist/esm/templates/FightingTemplate.js +513 -0
  674. package/dist/esm/templates/FightingTemplate.js.map +1 -0
  675. package/dist/esm/templates/MetroidvaniaTemplate.js +484 -0
  676. package/dist/esm/templates/MetroidvaniaTemplate.js.map +1 -0
  677. package/dist/esm/templates/PartyTemplates.js +60 -28
  678. package/dist/esm/templates/PartyTemplates.js.map +1 -1
  679. package/dist/esm/templates/PuzzleTemplates.js +63 -22
  680. package/dist/esm/templates/PuzzleTemplates.js.map +1 -1
  681. package/dist/esm/templates/RPGTemplates.js +29 -15
  682. package/dist/esm/templates/RPGTemplates.js.map +1 -1
  683. package/dist/esm/templates/SportsTemplates.js +41 -17
  684. package/dist/esm/templates/SportsTemplates.js.map +1 -1
  685. package/dist/esm/templates/StrategyTemplates.js +45 -18
  686. package/dist/esm/templates/StrategyTemplates.js.map +1 -1
  687. package/dist/esm/templates/SurvivalTemplate.js +447 -0
  688. package/dist/esm/templates/SurvivalTemplate.js.map +1 -0
  689. package/dist/esm/templates/WaveDefense.js +139 -52
  690. package/dist/esm/templates/WaveDefense.js.map +1 -1
  691. package/dist/esm/tilemap/Tilemap.js +48 -32
  692. package/dist/esm/tilemap/Tilemap.js.map +1 -1
  693. package/dist/esm/tutorials/TutorialBranching.js +111 -42
  694. package/dist/esm/tutorials/TutorialBranching.js.map +1 -1
  695. package/dist/esm/tutorials/TutorialEngine.js +152 -80
  696. package/dist/esm/tutorials/TutorialEngine.js.map +1 -1
  697. package/dist/esm/tutorials/TutorialOverlay.js +117 -40
  698. package/dist/esm/tutorials/TutorialOverlay.js.map +1 -1
  699. package/dist/esm/ui/GameUI.js +69 -42
  700. package/dist/esm/ui/GameUI.js.map +1 -1
  701. package/dist/esm/unity-integration/UnityAssetStore.js +749 -0
  702. package/dist/esm/unity-integration/UnityAssetStore.js.map +1 -0
  703. package/dist/esm/unity-integration/UnityImport.js +1246 -0
  704. package/dist/esm/unity-integration/UnityImport.js.map +1 -0
  705. package/dist/esm/unity-integration/UnityLiveLink.js +1017 -0
  706. package/dist/esm/unity-integration/UnityLiveLink.js.map +1 -0
  707. package/dist/esm/unity-integration/components/UnityAssetStoreBrowser.js +794 -0
  708. package/dist/esm/unity-integration/components/UnityAssetStoreBrowser.js.map +1 -0
  709. package/dist/esm/unity-integration/components/UnityProjectBrowser.js +831 -0
  710. package/dist/esm/unity-integration/components/UnityProjectBrowser.js.map +1 -0
  711. package/dist/esm/unreal-integration/UnrealImport.js +437 -0
  712. package/dist/esm/unreal-integration/UnrealImport.js.map +1 -0
  713. package/dist/esm/unreal-integration/UnrealLiveLink.js +1182 -0
  714. package/dist/esm/unreal-integration/UnrealLiveLink.js.map +1 -0
  715. package/dist/esm/unreal-integration/UnrealMarketplace.js +490 -0
  716. package/dist/esm/unreal-integration/UnrealMarketplace.js.map +1 -0
  717. package/dist/esm/unreal-integration/components/UnrealProjectBrowser.js +833 -0
  718. package/dist/esm/unreal-integration/components/UnrealProjectBrowser.js.map +1 -0
  719. package/dist/esm/xr/ARVR.js +32 -9
  720. package/dist/esm/xr/ARVR.js.map +1 -1
  721. package/package.json +6 -5
@@ -0,0 +1,1280 @@
1
+ import { PlatformExporter } from './PlatformExporter.js';
2
+
3
+ /* ────────────────────────────────────────────────────────────────
4
+ Solar2D (Corona SDK) Exporter
5
+
6
+ Exports Nice2Dev projects to Solar2D format:
7
+ - Main project files (main.lua, config.lua, build.settings)
8
+ - Scene modules
9
+ - Lua scripts
10
+ - Asset management
11
+ ──────────────────────────────────────────────────────────────── */
12
+ /* ── Exporter Implementation ──────────────────────────────────── */
13
+ class Solar2DExporter extends PlatformExporter {
14
+ constructor() {
15
+ super(...arguments);
16
+ this.platformId = 'solar2d';
17
+ this.platformInfo = {
18
+ id: 'solar2d',
19
+ name: 'Solar2D',
20
+ description: 'Solar2D (formerly Corona SDK) - Cross-platform 2D game engine',
21
+ website: 'https://solar2d.com/',
22
+ features: ['2d-rendering', 'physics-2d', 'audio', 'particles', 'ui-system', 'animation'],
23
+ supportedAssets: [
24
+ 'texture',
25
+ 'audio',
26
+ 'tilemap',
27
+ 'animation',
28
+ 'prefab',
29
+ 'scene',
30
+ 'data',
31
+ 'font',
32
+ ],
33
+ exportFormats: ['.lua', '.json', '.settings'],
34
+ };
35
+ }
36
+ async doExport(project, options) {
37
+ options.platformOptions ?? {};
38
+ // Generate config.lua
39
+ await this.generateConfigLua(project, options);
40
+ // Generate build.settings
41
+ await this.generateBuildSettings(project, options);
42
+ // Generate main.lua
43
+ await this.generateMainLua(project, options);
44
+ // Generate utility modules
45
+ await this.generateUtilityModules(project, options);
46
+ // Generate scenes
47
+ for (const scene of project.scenes) {
48
+ await this.exportScene(scene, project, options);
49
+ }
50
+ // Generate prefabs
51
+ for (const prefab of project.prefabs) {
52
+ await this.exportPrefab(prefab, options);
53
+ }
54
+ // Generate README
55
+ await this.generateReadme(project, options);
56
+ }
57
+ /* ── Config Lua ─────────────────────────────────────────────── */
58
+ async generateConfigLua(project, options) {
59
+ const platformOpts = options.platformOptions ?? {};
60
+ const scale = platformOpts.scale ?? 'letterbox';
61
+ const configLua = `-- Project: ${project.name}
62
+ -- Generated from Nice2Dev
63
+
64
+ -- config.lua - Application configuration
65
+
66
+ local aspectRatio = display.pixelHeight / display.pixelWidth
67
+
68
+ application = {
69
+ content = {
70
+ width = ${scale === 'none' ? 'display.pixelWidth' : project.settings.resolution.width},
71
+ height = ${scale === 'none' ? 'display.pixelHeight' : project.settings.resolution.height},
72
+ scale = "${scale}",
73
+ fps = ${project.settings.targetFrameRate ?? 60},
74
+
75
+ -- Dynamic content scaling
76
+ imageSuffix = {
77
+ ["@2x"] = 1.5,
78
+ ["@4x"] = 3.0,
79
+ },
80
+ },
81
+
82
+ -- License configuration
83
+ license = {
84
+ google = {
85
+ key = "YOUR_GOOGLE_LICENSE_KEY",
86
+ },
87
+ },
88
+
89
+ -- Shader precision (optional)
90
+ shader = {
91
+ precisionHint = "highp",
92
+ },
93
+ }
94
+
95
+ -- Letterbox scaling adjustments
96
+ if application.content.scale == "letterbox" then
97
+ if aspectRatio > 1.5 then
98
+ -- Taller devices (iPad-like)
99
+ application.content.height = math.ceil(application.content.width * aspectRatio)
100
+ end
101
+ end
102
+ `;
103
+ this.addTextFile('config.lua', configLua);
104
+ }
105
+ /* ── Build Settings ─────────────────────────────────────────── */
106
+ async generateBuildSettings(project, options) {
107
+ const safeName = (options.projectName ?? project.name)
108
+ .toLowerCase()
109
+ .replace(/[^a-z0-9_]/g, '_');
110
+ const platformOpts = options.platformOptions ?? {};
111
+ const buildSettings = `-- Build settings for ${project.name}
112
+ -- Generated from Nice2Dev
113
+
114
+ settings = {
115
+ -- Application orientation(s)
116
+ orientation = {
117
+ default = "landscapeRight",
118
+ supported = { "landscapeLeft", "landscapeRight" },
119
+ },
120
+
121
+ -- Exclude files from build
122
+ excludeFiles = {
123
+ all = { "*.psd", "*.txt", "*.md", "*.json" },
124
+ ios = { "Icon-*dpi.png", "*.ogg" },
125
+ android = { "Icon.png", "Icon-Small-*.png", "Icon*@2x.png", "*.aiff" },
126
+ },
127
+
128
+ -- iOS settings
129
+ iphone = {
130
+ plist = {
131
+ UIStatusBarHidden = true,
132
+ UILaunchStoryboardName = "LaunchScreen",
133
+ UIApplicationExitsOnSuspend = false,
134
+ CFBundleDisplayName = "${project.name}",
135
+ CFBundleIdentifier = "com.nice2dev.${safeName}",
136
+ CFBundleName = "${project.name}",
137
+ CFBundleVersion = "${project.version}",
138
+ CFBundleShortVersionString = "${project.version}",
139
+ ITSAppUsesNonExemptEncryption = false,
140
+ NSAppTransportSecurity = {
141
+ NSAllowsArbitraryLoads = true,
142
+ },
143
+ },
144
+ xcassets = "Images.xcassets",
145
+ entitlements = {
146
+ ["com.apple.developer.game-center"] = true,
147
+ },
148
+ },
149
+
150
+ -- Android settings
151
+ android = {
152
+ versionCode = "${project.version.replace(/\./g, '')}1",
153
+ usesPermissions = {
154
+ "android.permission.INTERNET",
155
+ "android.permission.WRITE_EXTERNAL_STORAGE",
156
+ "android.permission.VIBRATE",
157
+ },
158
+ supportsScreens = {
159
+ smallScreens = true,
160
+ normalScreens = true,
161
+ largeScreens = true,
162
+ xlargeScreens = true,
163
+ },
164
+ applicationChildElements = {
165
+ [[
166
+ <meta-data android:name="com.google.android.gms.version"
167
+ android:value="@integer/google_play_services_version" />
168
+ ]],
169
+ },
170
+ usesFeatures = {},
171
+ },
172
+
173
+ -- Windows settings
174
+ win32 = {
175
+ singleInstance = true,
176
+ preferenceStorage = "registry",
177
+ },
178
+
179
+ -- macOS settings
180
+ osx = {
181
+ bundleIdentifier = "com.nice2dev.${safeName}",
182
+ retinaSupport = true,
183
+ },
184
+
185
+ -- HTML5 settings
186
+ html5 = {
187
+ fps = ${project.settings.targetFrameRate ?? 60},
188
+ width = ${project.settings.resolution.width},
189
+ height = ${project.settings.resolution.height},
190
+ preferWebGL = true,
191
+ },
192
+
193
+ -- Plugins
194
+ plugins = {
195
+ ${platformOpts.pluginStubs
196
+ ? ` ["plugin.Bytedance"] = { publisherId = "social.nicetodrive" },
197
+ ["plugin.ads.mediator"] = { publisherId = "com.coronalabs" },`
198
+ : ''}
199
+ },
200
+
201
+ -- Splash screen
202
+ splashScreen = {
203
+ enable = true,
204
+ image = "splash.png",
205
+ },
206
+ }
207
+ `;
208
+ this.addTextFile('build.settings', buildSettings);
209
+ }
210
+ /* ── Main Lua ───────────────────────────────────────────────── */
211
+ async generateMainLua(project, options) {
212
+ const platformOpts = options.platformOptions ?? {};
213
+ const usePhysics = platformOpts.usePhysics !== false;
214
+ platformOpts.useComposer !== false;
215
+ const firstScene = project.scenes[0];
216
+ const firstSceneName = firstScene
217
+ ? firstScene.name.toLowerCase().replace(/[^a-z0-9_]/g, '_')
218
+ : 'main_scene';
219
+ const mainLua = `-- ${project.name}
220
+ -- Main entry point
221
+ -- Generated from Nice2Dev
222
+
223
+ ---------------------------------------------------------------------------------
224
+ -- Modules
225
+ ---------------------------------------------------------------------------------
226
+ local composer = require("composer")
227
+ local physics = require("physics")
228
+
229
+ -- Game modules
230
+ local GameManager = require("modules.game_manager")
231
+ local Utils = require("modules.utils")
232
+ local Events = require("modules.events")
233
+
234
+ ---------------------------------------------------------------------------------
235
+ -- Configuration
236
+ ---------------------------------------------------------------------------------
237
+ display.setStatusBar(display.HiddenStatusBar)
238
+ display.setDefault("background", 0, 0, 0)
239
+
240
+ -- Multitouch
241
+ system.activate("multitouch")
242
+
243
+ -- Random seed
244
+ math.randomseed(os.time())
245
+
246
+ ---------------------------------------------------------------------------------
247
+ -- Physics Setup
248
+ ---------------------------------------------------------------------------------
249
+ ${usePhysics
250
+ ? `physics.start()
251
+ physics.setGravity(${project.settings.physics.gravity.x}, ${project.settings.physics.gravity.y * -1})
252
+ physics.setDrawMode("normal") -- debug: "hybrid" or "debug"
253
+ physics.setScale(${project.settings.physics.scale ?? 30})`
254
+ : '-- Physics disabled'}
255
+
256
+ ---------------------------------------------------------------------------------
257
+ -- Global Game State
258
+ ---------------------------------------------------------------------------------
259
+ _G.GAME = {
260
+ name = "${project.name}",
261
+ version = "${project.version}",
262
+ settings = {
263
+ width = ${project.settings.resolution.width},
264
+ height = ${project.settings.resolution.height},
265
+ masterVolume = ${project.settings.audio.masterVolume},
266
+ },
267
+ state = {
268
+ isPaused = false,
269
+ currentScene = nil,
270
+ score = 0,
271
+ level = 1,
272
+ },
273
+ entities = {},
274
+ }
275
+
276
+ ---------------------------------------------------------------------------------
277
+ -- Initialize Game Manager
278
+ ---------------------------------------------------------------------------------
279
+ GameManager.init()
280
+
281
+ ---------------------------------------------------------------------------------
282
+ -- Global Key Listener (for testing/debug)
283
+ ---------------------------------------------------------------------------------
284
+ local function onKeyEvent(event)
285
+ if event.phase == "up" then
286
+ if event.keyName == "escape" or event.keyName == "back" then
287
+ -- Handle back button
288
+ if composer.getSceneName("current") ~= "${firstSceneName}" then
289
+ composer.gotoScene("scenes.${firstSceneName}", { effect = "fade", time = 300 })
290
+ else
291
+ native.requestExit()
292
+ end
293
+ return true
294
+ elseif event.keyName == "p" then
295
+ -- Toggle pause
296
+ _G.GAME.state.isPaused = not _G.GAME.state.isPaused
297
+ Events.dispatch("game:pause", { isPaused = _G.GAME.state.isPaused })
298
+ end
299
+ end
300
+ return false
301
+ end
302
+ Runtime:addEventListener("key", onKeyEvent)
303
+
304
+ ---------------------------------------------------------------------------------
305
+ -- Start Game
306
+ ---------------------------------------------------------------------------------
307
+ print("[Nice2Dev] Starting ${project.name} v${project.version}")
308
+
309
+ -- Go to first scene
310
+ composer.gotoScene("scenes.${firstSceneName}", {
311
+ effect = "fade",
312
+ time = 500,
313
+ })
314
+ `;
315
+ this.addTextFile('main.lua', mainLua);
316
+ }
317
+ /* ── Utility Modules ────────────────────────────────────────── */
318
+ async generateUtilityModules(project, options) {
319
+ // Game Manager
320
+ const gameManagerLua = `-- Game Manager Module
321
+ -- Central game state and utilities
322
+ -- Generated from Nice2Dev
323
+
324
+ local M = {}
325
+
326
+ -- Dependencies
327
+ local Events = require("modules.events")
328
+ local Utils = require("modules.utils")
329
+
330
+ -- Private state
331
+ local state = {
332
+ entities = {},
333
+ pools = {},
334
+ timers = {},
335
+ audioChannels = {},
336
+ }
337
+
338
+ -- Initialize game manager
339
+ function M.init()
340
+ print("[GameManager] Initializing...")
341
+
342
+ -- Set up audio channels
343
+ audio.setVolume(_G.GAME.settings.masterVolume)
344
+
345
+ -- Create object pools
346
+ state.pools = {}
347
+
348
+ print("[GameManager] Ready")
349
+ end
350
+
351
+ -- Entity management
352
+ function M.registerEntity(entity)
353
+ if entity and entity.id then
354
+ state.entities[entity.id] = entity
355
+ Events.dispatch("entity:registered", { entity = entity })
356
+ end
357
+ end
358
+
359
+ function M.unregisterEntity(entityId)
360
+ if state.entities[entityId] then
361
+ state.entities[entityId] = nil
362
+ Events.dispatch("entity:unregistered", { id = entityId })
363
+ end
364
+ end
365
+
366
+ function M.getEntity(entityId)
367
+ return state.entities[entityId]
368
+ end
369
+
370
+ function M.getEntitiesByTag(tag)
371
+ local result = {}
372
+ for id, entity in pairs(state.entities) do
373
+ if entity.tags and Utils.tableContains(entity.tags, tag) then
374
+ table.insert(result, entity)
375
+ end
376
+ end
377
+ return result
378
+ end
379
+
380
+ -- Object pooling
381
+ function M.createPool(name, factory, initialSize)
382
+ initialSize = initialSize or 10
383
+ state.pools[name] = {
384
+ factory = factory,
385
+ available = {},
386
+ inUse = {},
387
+ }
388
+
389
+ for i = 1, initialSize do
390
+ local obj = factory()
391
+ obj.isVisible = false
392
+ table.insert(state.pools[name].available, obj)
393
+ end
394
+ end
395
+
396
+ function M.getFromPool(name)
397
+ local pool = state.pools[name]
398
+ if not pool then return nil end
399
+
400
+ local obj = table.remove(pool.available)
401
+ if not obj then
402
+ obj = pool.factory()
403
+ end
404
+
405
+ obj.isVisible = true
406
+ table.insert(pool.inUse, obj)
407
+ return obj
408
+ end
409
+
410
+ function M.returnToPool(name, obj)
411
+ local pool = state.pools[name]
412
+ if not pool then return end
413
+
414
+ obj.isVisible = false
415
+ for i, inUseObj in ipairs(pool.inUse) do
416
+ if inUseObj == obj then
417
+ table.remove(pool.inUse, i)
418
+ break
419
+ end
420
+ end
421
+ table.insert(pool.available, obj)
422
+ end
423
+
424
+ -- Audio helpers
425
+ function M.playSound(filename, options)
426
+ options = options or {}
427
+ local sound = audio.loadSound("sounds/" .. filename)
428
+ local channel = audio.play(sound, {
429
+ channel = options.channel,
430
+ loops = options.loops or 0,
431
+ onComplete = options.onComplete,
432
+ })
433
+ return channel
434
+ end
435
+
436
+ function M.playMusic(filename, options)
437
+ options = options or {}
438
+ local music = audio.loadStream("music/" .. filename)
439
+ local channel = audio.play(music, {
440
+ channel = 1,
441
+ loops = options.loops or -1,
442
+ fadein = options.fadein or 0,
443
+ })
444
+ state.audioChannels.music = channel
445
+ return channel
446
+ end
447
+
448
+ function M.stopMusic(fadeout)
449
+ if state.audioChannels.music then
450
+ if fadeout and fadeout > 0 then
451
+ audio.fade({
452
+ channel = state.audioChannels.music,
453
+ time = fadeout,
454
+ volume = 0,
455
+ })
456
+ timer.performWithDelay(fadeout, function()
457
+ audio.stop(state.audioChannels.music)
458
+ end)
459
+ else
460
+ audio.stop(state.audioChannels.music)
461
+ end
462
+ end
463
+ end
464
+
465
+ -- Pause/Resume
466
+ function M.pause()
467
+ _G.GAME.state.isPaused = true
468
+ physics.pause()
469
+ Events.dispatch("game:pause", { isPaused = true })
470
+ end
471
+
472
+ function M.resume()
473
+ _G.GAME.state.isPaused = false
474
+ physics.start()
475
+ Events.dispatch("game:pause", { isPaused = false })
476
+ end
477
+
478
+ -- Cleanup
479
+ function M.cleanup()
480
+ -- Clear entities
481
+ for id, _ in pairs(state.entities) do
482
+ state.entities[id] = nil
483
+ end
484
+
485
+ -- Clear pools
486
+ for name, pool in pairs(state.pools) do
487
+ for _, obj in ipairs(pool.available) do
488
+ display.remove(obj)
489
+ end
490
+ for _, obj in ipairs(pool.inUse) do
491
+ display.remove(obj)
492
+ end
493
+ state.pools[name] = nil
494
+ end
495
+ end
496
+
497
+ return M
498
+ `;
499
+ this.addTextFile('modules/game_manager.lua', gameManagerLua);
500
+ // Utils
501
+ const utilsLua = `-- Utils Module
502
+ -- Common utility functions
503
+ -- Generated from Nice2Dev
504
+
505
+ local M = {}
506
+
507
+ -- Math utilities
508
+ function M.lerp(a, b, t)
509
+ return a + (b - a) * math.max(0, math.min(1, t))
510
+ end
511
+
512
+ function M.clamp(value, min, max)
513
+ return math.max(min, math.min(max, value))
514
+ end
515
+
516
+ function M.randomFloat(min, max)
517
+ return min + math.random() * (max - min)
518
+ end
519
+
520
+ function M.randomInt(min, max)
521
+ return math.random(min, max)
522
+ end
523
+
524
+ function M.distance(x1, y1, x2, y2)
525
+ local dx = x2 - x1
526
+ local dy = y2 - y1
527
+ return math.sqrt(dx * dx + dy * dy)
528
+ end
529
+
530
+ function M.angle(x1, y1, x2, y2)
531
+ return math.atan2(y2 - y1, x2 - x1)
532
+ end
533
+
534
+ function M.pointInRect(px, py, rx, ry, rw, rh)
535
+ return px >= rx and px <= rx + rw and py >= ry and py <= ry + rh
536
+ end
537
+
538
+ function M.rectsOverlap(r1x, r1y, r1w, r1h, r2x, r2y, r2w, r2h)
539
+ return r1x < r2x + r2w and
540
+ r1x + r1w > r2x and
541
+ r1y < r2y + r2h and
542
+ r1y + r1h > r2y
543
+ end
544
+
545
+ -- Table utilities
546
+ function M.tableContains(tbl, value)
547
+ for _, v in ipairs(tbl) do
548
+ if v == value then return true end
549
+ end
550
+ return false
551
+ end
552
+
553
+ function M.tableCopy(tbl)
554
+ local copy = {}
555
+ for k, v in pairs(tbl) do
556
+ if type(v) == "table" then
557
+ copy[k] = M.tableCopy(v)
558
+ else
559
+ copy[k] = v
560
+ end
561
+ end
562
+ return copy
563
+ end
564
+
565
+ function M.tableLength(tbl)
566
+ local count = 0
567
+ for _ in pairs(tbl) do count = count + 1 end
568
+ return count
569
+ end
570
+
571
+ function M.tableKeys(tbl)
572
+ local keys = {}
573
+ for k in pairs(tbl) do
574
+ table.insert(keys, k)
575
+ end
576
+ return keys
577
+ end
578
+
579
+ function M.shuffleTable(tbl)
580
+ for i = #tbl, 2, -1 do
581
+ local j = math.random(i)
582
+ tbl[i], tbl[j] = tbl[j], tbl[i]
583
+ end
584
+ return tbl
585
+ end
586
+
587
+ -- String utilities
588
+ function M.split(str, delimiter)
589
+ local result = {}
590
+ for match in (str .. delimiter):gmatch("(.-)" .. delimiter) do
591
+ table.insert(result, match)
592
+ end
593
+ return result
594
+ end
595
+
596
+ function M.trim(str)
597
+ return str:match("^%s*(.-)%s*$")
598
+ end
599
+
600
+ -- Timer helpers
601
+ function M.setTimeout(callback, delay)
602
+ return timer.performWithDelay(delay, callback)
603
+ end
604
+
605
+ function M.setInterval(callback, interval)
606
+ return timer.performWithDelay(interval, callback, 0)
607
+ end
608
+
609
+ function M.clearTimer(timerHandle)
610
+ if timerHandle then
611
+ timer.cancel(timerHandle)
612
+ end
613
+ end
614
+
615
+ -- Display helpers
616
+ function M.screenCenter()
617
+ return display.contentCenterX, display.contentCenterY
618
+ end
619
+
620
+ function M.screenSize()
621
+ return display.actualContentWidth, display.actualContentHeight
622
+ end
623
+
624
+ function M.isOffScreen(obj, margin)
625
+ margin = margin or 50
626
+ return obj.x < -margin or
627
+ obj.x > display.actualContentWidth + margin or
628
+ obj.y < -margin or
629
+ obj.y > display.actualContentHeight + margin
630
+ end
631
+
632
+ return M
633
+ `;
634
+ this.addTextFile('modules/utils.lua', utilsLua);
635
+ // Events
636
+ const eventsLua = `-- Events Module
637
+ -- Simple event system
638
+ -- Generated from Nice2Dev
639
+
640
+ local M = {}
641
+
642
+ -- Private storage
643
+ local listeners = {}
644
+
645
+ -- Add event listener
646
+ function M.on(eventName, callback)
647
+ if not listeners[eventName] then
648
+ listeners[eventName] = {}
649
+ end
650
+ table.insert(listeners[eventName], callback)
651
+
652
+ -- Return unsubscribe function
653
+ return function()
654
+ M.off(eventName, callback)
655
+ end
656
+ end
657
+
658
+ -- Remove event listener
659
+ function M.off(eventName, callback)
660
+ if listeners[eventName] then
661
+ for i, cb in ipairs(listeners[eventName]) do
662
+ if cb == callback then
663
+ table.remove(listeners[eventName], i)
664
+ break
665
+ end
666
+ end
667
+ end
668
+ end
669
+
670
+ -- Dispatch event
671
+ function M.dispatch(eventName, data)
672
+ if listeners[eventName] then
673
+ for _, callback in ipairs(listeners[eventName]) do
674
+ local success, err = pcall(callback, data)
675
+ if not success then
676
+ print("[Events] Error in " .. eventName .. ": " .. tostring(err))
677
+ end
678
+ end
679
+ end
680
+ end
681
+
682
+ -- Once (listen for single occurrence)
683
+ function M.once(eventName, callback)
684
+ local unsubscribe
685
+ unsubscribe = M.on(eventName, function(data)
686
+ unsubscribe()
687
+ callback(data)
688
+ end)
689
+ return unsubscribe
690
+ end
691
+
692
+ -- Remove all listeners for an event
693
+ function M.removeAll(eventName)
694
+ listeners[eventName] = nil
695
+ end
696
+
697
+ -- Clear all listeners
698
+ function M.clear()
699
+ listeners = {}
700
+ end
701
+
702
+ return M
703
+ `;
704
+ this.addTextFile('modules/events.lua', eventsLua);
705
+ // Entity base class
706
+ const entityLua = `-- Entity Module
707
+ -- Base entity class for game objects
708
+ -- Generated from Nice2Dev
709
+
710
+ local M = {}
711
+ M.__index = M
712
+
713
+ local Utils = require("modules.utils")
714
+ local Events = require("modules.events")
715
+ local GameManager = require("modules.game_manager")
716
+
717
+ -- Constructor
718
+ function M.new(params)
719
+ local self = setmetatable({}, M)
720
+
721
+ params = params or {}
722
+
723
+ self.id = params.id or tostring(os.time() .. math.random(1000, 9999))
724
+ self.name = params.name or "Entity"
725
+ self.tags = params.tags or {}
726
+ self.isAlive = true
727
+ self.components = {}
728
+
729
+ -- Create display group
730
+ self.group = display.newGroup()
731
+ self.group.x = params.x or 0
732
+ self.group.y = params.y or 0
733
+ self.group.rotation = params.rotation or 0
734
+ self.group.xScale = params.scaleX or 1
735
+ self.group.yScale = params.scaleY or 1
736
+
737
+ -- Reference back to entity
738
+ self.group.entity = self
739
+
740
+ -- Register with game manager
741
+ GameManager.registerEntity(self)
742
+
743
+ return self
744
+ end
745
+
746
+ -- Position getters/setters
747
+ function M:getPosition()
748
+ return self.group.x, self.group.y
749
+ end
750
+
751
+ function M:setPosition(x, y)
752
+ self.group.x = x
753
+ self.group.y = y
754
+ end
755
+
756
+ function M:move(dx, dy)
757
+ self.group.x = self.group.x + dx
758
+ self.group.y = self.group.y + dy
759
+ end
760
+
761
+ -- Rotation
762
+ function M:getRotation()
763
+ return self.group.rotation
764
+ end
765
+
766
+ function M:setRotation(angle)
767
+ self.group.rotation = angle
768
+ end
769
+
770
+ function M:rotate(delta)
771
+ self.group.rotation = self.group.rotation + delta
772
+ end
773
+
774
+ -- Scale
775
+ function M:getScale()
776
+ return self.group.xScale, self.group.yScale
777
+ end
778
+
779
+ function M:setScale(sx, sy)
780
+ self.group.xScale = sx
781
+ self.group.yScale = sy or sx
782
+ end
783
+
784
+ -- Tags
785
+ function M:hasTag(tag)
786
+ return Utils.tableContains(self.tags, tag)
787
+ end
788
+
789
+ function M:addTag(tag)
790
+ if not self:hasTag(tag) then
791
+ table.insert(self.tags, tag)
792
+ end
793
+ end
794
+
795
+ function M:removeTag(tag)
796
+ for i, t in ipairs(self.tags) do
797
+ if t == tag then
798
+ table.remove(self.tags, i)
799
+ break
800
+ end
801
+ end
802
+ end
803
+
804
+ -- Components
805
+ function M:addComponent(name, component)
806
+ self.components[name] = component
807
+ component.entity = self
808
+ if component.init then
809
+ component:init()
810
+ end
811
+ end
812
+
813
+ function M:getComponent(name)
814
+ return self.components[name]
815
+ end
816
+
817
+ function M:removeComponent(name)
818
+ local component = self.components[name]
819
+ if component then
820
+ if component.destroy then
821
+ component:destroy()
822
+ end
823
+ self.components[name] = nil
824
+ end
825
+ end
826
+
827
+ -- Update (called each frame if registered)
828
+ function M:update(dt)
829
+ if not self.isAlive then return end
830
+
831
+ -- Update all components
832
+ for _, component in pairs(self.components) do
833
+ if component.update then
834
+ component:update(dt)
835
+ end
836
+ end
837
+ end
838
+
839
+ -- Destroy
840
+ function M:destroy()
841
+ if not self.isAlive then return end
842
+
843
+ self.isAlive = false
844
+
845
+ -- Destroy all components
846
+ for name, component in pairs(self.components) do
847
+ if component.destroy then
848
+ component:destroy()
849
+ end
850
+ end
851
+ self.components = {}
852
+
853
+ -- Unregister
854
+ GameManager.unregisterEntity(self.id)
855
+
856
+ -- Remove display group
857
+ if self.group then
858
+ display.remove(self.group)
859
+ self.group = nil
860
+ end
861
+
862
+ Events.dispatch("entity:destroyed", { id = self.id })
863
+ end
864
+
865
+ return M
866
+ `;
867
+ this.addTextFile('modules/entity.lua', entityLua);
868
+ }
869
+ /* ── Scene Export ───────────────────────────────────────────── */
870
+ async exportScene(scene, project, options) {
871
+ const sceneName = scene.name.toLowerCase().replace(/[^a-z0-9_]/g, '_');
872
+ options.platformOptions ?? {};
873
+ const sceneLua = `-- Scene: ${scene.name}
874
+ -- Generated from Nice2Dev
875
+
876
+ local composer = require("composer")
877
+ local physics = require("physics")
878
+
879
+ local GameManager = require("modules.game_manager")
880
+ local Events = require("modules.events")
881
+ local Utils = require("modules.utils")
882
+ local Entity = require("modules.entity")
883
+
884
+ local scene = composer.newScene()
885
+
886
+ ---------------------------------------------------------------------------------
887
+ -- Scene Variables
888
+ ---------------------------------------------------------------------------------
889
+ local sceneGroup
890
+ local entities = {}
891
+ local timers = {}
892
+ local listeners = {}
893
+
894
+ ---------------------------------------------------------------------------------
895
+ -- Scene Methods
896
+ ---------------------------------------------------------------------------------
897
+
898
+ -- Create scene objects
899
+ function scene:create(event)
900
+ sceneGroup = self.view
901
+
902
+ -- Background
903
+ local bg = display.newRect(sceneGroup, display.contentCenterX, display.contentCenterY,
904
+ display.actualContentWidth, display.actualContentHeight)
905
+ bg:setFillColor(${this.hexToRGB(scene.background ?? '#000000')})
906
+
907
+ -- Create entities
908
+ ${scene.entities.map((entity) => this.createEntityLua(entity)).join('\n')}
909
+
910
+ print("[Scene] ${sceneName} created")
911
+ end
912
+
913
+ -- Show scene (transition in)
914
+ function scene:show(event)
915
+ sceneGroup = self.view
916
+ local phase = event.phase
917
+
918
+ if phase == "will" then
919
+ -- Called when scene is about to appear
920
+ elseif phase == "did" then
921
+ -- Called when scene has fully appeared
922
+
923
+ -- Start physics
924
+ physics.start()
925
+
926
+ -- Add update listener
927
+ listeners.enterFrame = function(e)
928
+ self:update(e)
929
+ end
930
+ Runtime:addEventListener("enterFrame", listeners.enterFrame)
931
+
932
+ -- Add touch listener
933
+ listeners.touch = function(e)
934
+ return self:touch(e)
935
+ end
936
+ Runtime:addEventListener("touch", listeners.touch)
937
+
938
+ _G.GAME.state.currentScene = "${sceneName}"
939
+ Events.dispatch("scene:started", { name = "${sceneName}" })
940
+
941
+ print("[Scene] ${sceneName} started")
942
+ end
943
+ end
944
+
945
+ -- Hide scene (transition out)
946
+ function scene:hide(event)
947
+ sceneGroup = self.view
948
+ local phase = event.phase
949
+
950
+ if phase == "will" then
951
+ -- Called when scene is about to hide
952
+
953
+ -- Remove listeners
954
+ if listeners.enterFrame then
955
+ Runtime:removeEventListener("enterFrame", listeners.enterFrame)
956
+ end
957
+ if listeners.touch then
958
+ Runtime:removeEventListener("touch", listeners.touch)
959
+ end
960
+
961
+ elseif phase == "did" then
962
+ -- Called when scene has fully hidden
963
+ physics.pause()
964
+
965
+ Events.dispatch("scene:ended", { name = "${sceneName}" })
966
+ print("[Scene] ${sceneName} hidden")
967
+ end
968
+ end
969
+
970
+ -- Destroy scene
971
+ function scene:destroy(event)
972
+ sceneGroup = self.view
973
+
974
+ -- Cancel timers
975
+ for _, t in ipairs(timers) do
976
+ timer.cancel(t)
977
+ end
978
+ timers = {}
979
+
980
+ -- Destroy entities
981
+ for _, entity in ipairs(entities) do
982
+ if entity.destroy then
983
+ entity:destroy()
984
+ end
985
+ end
986
+ entities = {}
987
+
988
+ print("[Scene] ${sceneName} destroyed")
989
+ end
990
+
991
+ ---------------------------------------------------------------------------------
992
+ -- Update Loop
993
+ ---------------------------------------------------------------------------------
994
+ function scene:update(event)
995
+ if _G.GAME.state.isPaused then return end
996
+
997
+ local dt = event.time / 1000 -- Convert to seconds
998
+
999
+ -- Update all entities
1000
+ for i = #entities, 1, -1 do
1001
+ local entity = entities[i]
1002
+ if entity.isAlive then
1003
+ if entity.update then
1004
+ entity:update(dt)
1005
+ end
1006
+ else
1007
+ table.remove(entities, i)
1008
+ end
1009
+ end
1010
+ end
1011
+
1012
+ ---------------------------------------------------------------------------------
1013
+ -- Touch Handler
1014
+ ---------------------------------------------------------------------------------
1015
+ function scene:touch(event)
1016
+ if event.phase == "began" then
1017
+ -- Touch started
1018
+ Events.dispatch("touch:start", { x = event.x, y = event.y })
1019
+ elseif event.phase == "moved" then
1020
+ -- Touch moved
1021
+ Events.dispatch("touch:move", { x = event.x, y = event.y })
1022
+ elseif event.phase == "ended" or event.phase == "cancelled" then
1023
+ -- Touch ended
1024
+ Events.dispatch("touch:end", { x = event.x, y = event.y })
1025
+ end
1026
+ return true
1027
+ end
1028
+
1029
+ ---------------------------------------------------------------------------------
1030
+ -- Scene Event Listeners
1031
+ ---------------------------------------------------------------------------------
1032
+ scene:addEventListener("create", scene)
1033
+ scene:addEventListener("show", scene)
1034
+ scene:addEventListener("hide", scene)
1035
+ scene:addEventListener("destroy", scene)
1036
+
1037
+ return scene
1038
+ `;
1039
+ this.addTextFile(`scenes/${sceneName}.lua`, sceneLua);
1040
+ }
1041
+ createEntityLua(entity) {
1042
+ const name = (entity.name ?? entity.id).toLowerCase().replace(/[^a-z0-9_]/g, '_');
1043
+ const pos = entity.position ?? { x: 0, y: 0 };
1044
+ const scale = entity.scale ?? { x: 1, y: 1 };
1045
+ const rotation = entity.rotation ?? 0;
1046
+ const tags = entity.tags ?? [];
1047
+ let entityLua = ` -- Entity: ${entity.name ?? entity.id}
1048
+ local ${name} = Entity.new({
1049
+ x = ${pos.x},
1050
+ y = ${pos.y},
1051
+ rotation = ${rotation},
1052
+ scaleX = ${scale.x},
1053
+ scaleY = ${scale.y},
1054
+ name = "${entity.name ?? entity.id}",
1055
+ tags = {${tags.map((t) => `"${t}"`).join(', ')}},
1056
+ })
1057
+ ${name}.group.anchorX = 0.5
1058
+ ${name}.group.anchorY = 0.5
1059
+ sceneGroup:insert(${name}.group)
1060
+ table.insert(entities, ${name})
1061
+ `;
1062
+ // Add sprite if present
1063
+ const spriteComp = entity.components.find((c) => c.type === 'sprite');
1064
+ if (spriteComp) {
1065
+ const texture = spriteComp.properties?.['texture'] ?? 'placeholder.png';
1066
+ entityLua += ` local ${name}_sprite = display.newImageRect(${name}.group, "images/${texture}", ${32 * scale.x}, ${32 * scale.y})
1067
+ ${name}_sprite.x = 0
1068
+ ${name}_sprite.y = 0
1069
+ `;
1070
+ }
1071
+ // Add physics if rigidbody
1072
+ const rigidbodyComp = entity.components.find((c) => c.type === 'rigidbody');
1073
+ if (rigidbodyComp) {
1074
+ const bodyType = rigidbodyComp.properties?.['isKinematic']
1075
+ ? 'kinematic'
1076
+ : 'dynamic';
1077
+ const mass = rigidbodyComp.properties?.['mass'] ?? 1;
1078
+ entityLua += ` physics.addBody(${name}.group, "${bodyType}", {
1079
+ density = ${mass},
1080
+ friction = 0.5,
1081
+ bounce = 0.2,
1082
+ })
1083
+ `;
1084
+ }
1085
+ return entityLua;
1086
+ }
1087
+ hexToRGB(hex) {
1088
+ const cleanHex = hex.replace('#', '');
1089
+ const r = parseInt(cleanHex.substring(0, 2), 16) / 255;
1090
+ const g = parseInt(cleanHex.substring(2, 4), 16) / 255;
1091
+ const b = parseInt(cleanHex.substring(4, 6), 16) / 255;
1092
+ return `${r.toFixed(2)}, ${g.toFixed(2)}, ${b.toFixed(2)}`;
1093
+ }
1094
+ /* ── Prefab Export ──────────────────────────────────────────── */
1095
+ async exportPrefab(prefab, options) {
1096
+ const prefabName = prefab.name.toLowerCase().replace(/[^a-z0-9_]/g, '_');
1097
+ const entity = prefab.entity;
1098
+ const tags = entity.tags ?? [];
1099
+ const prefabLua = `-- Prefab: ${prefab.name}
1100
+ -- Generated from Nice2Dev
1101
+
1102
+ local Entity = require("modules.entity")
1103
+
1104
+ local M = {}
1105
+
1106
+ function M.create(params)
1107
+ params = params or {}
1108
+
1109
+ local entity = Entity.new({
1110
+ id = params.id,
1111
+ name = "${prefab.name}",
1112
+ x = params.x or 0,
1113
+ y = params.y or 0,
1114
+ rotation = params.rotation or ${entity.rotation ?? 0},
1115
+ scaleX = params.scaleX or ${entity.scale?.x ?? 1},
1116
+ scaleY = params.scaleY or ${entity.scale?.y ?? 1},
1117
+ tags = params.tags or {${tags.map((t) => `"${t}"`).join(', ')}},
1118
+ })
1119
+
1120
+ ${entity.components.map((c) => this.componentToLua(c, prefabName)).join('\n')}
1121
+
1122
+ return entity
1123
+ end
1124
+
1125
+ return M
1126
+ `;
1127
+ this.addTextFile(`prefabs/${prefabName}.lua`, prefabLua);
1128
+ }
1129
+ componentToLua(component, entityName) {
1130
+ switch (component.type) {
1131
+ case 'sprite': {
1132
+ const texture = component.properties?.['texture'] ?? 'placeholder.png';
1133
+ return ` -- Sprite component
1134
+ local sprite = display.newImageRect(entity.group, "images/${texture}", 32, 32)
1135
+ sprite.x = 0
1136
+ sprite.y = 0`;
1137
+ }
1138
+ case 'rigidbody': {
1139
+ const bodyType = component.properties?.['isKinematic']
1140
+ ? 'kinematic'
1141
+ : 'dynamic';
1142
+ const mass = component.properties?.['mass'] ?? 1;
1143
+ return ` -- Physics component
1144
+ local physics = require("physics")
1145
+ physics.addBody(entity.group, "${bodyType}", {
1146
+ density = ${mass},
1147
+ friction = 0.5,
1148
+ bounce = 0.2,
1149
+ })`;
1150
+ }
1151
+ default:
1152
+ return ` -- ${component.type} component (custom)`;
1153
+ }
1154
+ }
1155
+ /* ── README ─────────────────────────────────────────────────── */
1156
+ async generateReadme(project, options) {
1157
+ const readme = `# ${project.name} - Solar2D Export
1158
+
1159
+ Generated from Nice2Dev project v${project.version}
1160
+
1161
+ ## Requirements
1162
+
1163
+ - Solar2D Simulator (download from https://solar2d.com/)
1164
+ - Solar2D account for building
1165
+
1166
+ ## Installation
1167
+
1168
+ 1. Open Solar2D Simulator
1169
+ 2. File > Open Project
1170
+ 3. Select this folder
1171
+ 4. Click "Open main.lua"
1172
+
1173
+ ## Project Structure
1174
+
1175
+ - \`main.lua\` - Entry point
1176
+ - \`config.lua\` - App configuration
1177
+ - \`build.settings\` - Build settings for all platforms
1178
+ - \`modules/\` - Core modules
1179
+ - \`game_manager.lua\` - Central game state
1180
+ - \`utils.lua\` - Utility functions
1181
+ - \`events.lua\` - Event system
1182
+ - \`entity.lua\` - Entity base class
1183
+ - \`scenes/\` - Composer scenes
1184
+ - \`prefabs/\` - Spawnable prefabs
1185
+ - \`images/\` - Image assets (add your own)
1186
+ - \`sounds/\` - Sound effects (add your own)
1187
+ - \`music/\` - Background music (add your own)
1188
+
1189
+ ## Scenes
1190
+
1191
+ ${project.scenes.map((s) => `- ${s.name} (${s.entities.length} entities)`).join('\n')}
1192
+
1193
+ ## Building
1194
+
1195
+ ### Simulator
1196
+ Just open main.lua in Solar2D Simulator.
1197
+
1198
+ ### Device Build
1199
+ 1. File > Build
1200
+ 2. Select platform (iOS, Android, HTML5, etc.)
1201
+ 3. Configure signing (for iOS/Android)
1202
+ 4. Build!
1203
+
1204
+ ### HTML5
1205
+ 1. File > Build > HTML5
1206
+ 2. Upload build folder to web server
1207
+
1208
+ ## Key Modules
1209
+
1210
+ ### GameManager
1211
+ \`\`\`lua
1212
+ local GameManager = require("modules.game_manager")
1213
+
1214
+ -- Register entity
1215
+ GameManager.registerEntity(entity)
1216
+
1217
+ -- Get entities by tag
1218
+ local enemies = GameManager.getEntitiesByTag("enemy")
1219
+
1220
+ -- Play sound
1221
+ GameManager.playSound("explosion.wav")
1222
+
1223
+ -- Play music
1224
+ GameManager.playMusic("background.mp3", { loops = -1 })
1225
+ \`\`\`
1226
+
1227
+ ### Events
1228
+ \`\`\`lua
1229
+ local Events = require("modules.events")
1230
+
1231
+ -- Listen for event
1232
+ Events.on("game:pause", function(data)
1233
+ print("Game paused:", data.isPaused)
1234
+ end)
1235
+
1236
+ -- Dispatch event
1237
+ Events.dispatch("game:pause", { isPaused = true })
1238
+ \`\`\`
1239
+
1240
+ ### Entity
1241
+ \`\`\`lua
1242
+ local Entity = require("modules.entity")
1243
+
1244
+ local player = Entity.new({
1245
+ x = 100,
1246
+ y = 200,
1247
+ name = "Player",
1248
+ tags = {"player"},
1249
+ })
1250
+
1251
+ player:setPosition(300, 400)
1252
+ player:rotate(45)
1253
+ player:destroy()
1254
+ \`\`\`
1255
+
1256
+ ## Notes
1257
+
1258
+ - Add your image assets to \`images/\` folder
1259
+ - Add sound effects to \`sounds/\` folder
1260
+ - Add music to \`music/\` folder
1261
+ - Physics uses Box2D (built-in)
1262
+ - Scenes use Composer for lifecycle management
1263
+
1264
+ ## Settings
1265
+
1266
+ - Resolution: ${project.settings.resolution.width}x${project.settings.resolution.height}
1267
+ - Physics: ${project.settings.physics.enabled ? 'Enabled' : 'Disabled'}
1268
+ - Gravity: (${project.settings.physics.gravity.x}, ${project.settings.physics.gravity.y})
1269
+ - Master Volume: ${project.settings.audio.masterVolume}
1270
+ `;
1271
+ this.addTextFile('README.md', readme);
1272
+ }
1273
+ }
1274
+ /* ── Factory ──────────────────────────────────────────────────── */
1275
+ function createSolar2DExporter() {
1276
+ return new Solar2DExporter();
1277
+ }
1278
+
1279
+ export { Solar2DExporter, createSolar2DExporter };
1280
+ //# sourceMappingURL=Solar2DExporter.js.map