@nice2dev/game-engine 1.0.5 → 1.0.11

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 +7 -6
@@ -0,0 +1,940 @@
1
+ import { PlatformExporter } from './PlatformExporter.js';
2
+
3
+ /* ────────────────────────────────────────────────────────────────
4
+ Roblox Exporter — Roblox Studio Project Export
5
+
6
+ Exports Nice2Dev projects to Roblox Studio format including:
7
+ - Luau scripts (.lua)
8
+ - Model instances (.rbxmx XML)
9
+ - Module scripts
10
+ - Place file structure
11
+ ──────────────────────────────────────────────────────────────── */
12
+ /* ── Roblox Exporter Implementation ───────────────────────────── */
13
+ class RobloxExporter extends PlatformExporter {
14
+ constructor() {
15
+ super(...arguments);
16
+ this.platformId = 'roblox';
17
+ this.platformInfo = {
18
+ id: 'roblox',
19
+ name: 'Roblox Studio',
20
+ description: 'Roblox platform with Luau scripting language',
21
+ website: 'https://create.roblox.com',
22
+ features: [
23
+ '3d-rendering',
24
+ 'physics-3d',
25
+ 'audio',
26
+ 'networking',
27
+ 'ui-system',
28
+ 'particles',
29
+ 'animation',
30
+ ],
31
+ supportedAssets: ['audio', 'script', 'scene', 'prefab', 'particleSystem', 'texture', 'data'],
32
+ exportFormats: ['.lua', '.rbxmx', '.rbxlx'],
33
+ };
34
+ this.projectName = 'Nice2DevGame';
35
+ this.useStrictMode = true;
36
+ }
37
+ async doExport(project, options) {
38
+ this.projectName = (options.projectName ?? project.name).replace(/[^a-zA-Z0-9_]/g, '_');
39
+ const platformOpts = options.platformOptions ?? {};
40
+ this.useStrictMode = platformOpts.strictMode !== false;
41
+ // Generate folder structure
42
+ await this.generateFolderStructure(project, options);
43
+ // Generate core scripts
44
+ await this.generateCoreScripts(project, options);
45
+ // Generate services setup
46
+ await this.generateServicesSetup(project, options);
47
+ // Export scenes as places/models
48
+ for (const scene of project.scenes) {
49
+ await this.exportScene(scene, project, options);
50
+ }
51
+ // Export prefabs as models
52
+ for (const prefab of project.prefabs) {
53
+ await this.exportPrefab(prefab, options);
54
+ }
55
+ // Generate client scripts if enabled
56
+ if (platformOpts.includeClientScripts !== false) {
57
+ await this.generateClientScripts(project, options);
58
+ }
59
+ // Generate server scripts if enabled
60
+ if (platformOpts.includeServerScripts !== false) {
61
+ await this.generateServerScripts(project, options);
62
+ }
63
+ }
64
+ /* ── Folder Structure ───────────────────────────────────────── */
65
+ async generateFolderStructure(project, options) {
66
+ // README for the export
67
+ const readme = `# ${project.name} - Roblox Export
68
+
69
+ Generated from Nice2Dev project v${project.version}
70
+
71
+ ## Folder Structure
72
+
73
+ - \`ServerScriptService/\` - Server-side scripts
74
+ - \`ReplicatedStorage/\` - Shared modules and assets
75
+ - \`StarterPlayer/StarterPlayerScripts/\` - Client scripts
76
+ - \`StarterGui/\` - UI elements
77
+ - \`Workspace/\` - Game world objects
78
+
79
+ ## Setup Instructions
80
+
81
+ 1. Open Roblox Studio
82
+ 2. Create a new place or open existing
83
+ 3. Import the .rbxmx model files
84
+ 4. Copy Lua scripts to appropriate services
85
+ 5. Configure game settings as needed
86
+
87
+ ## Notes
88
+
89
+ - Textures and audio assets need to be uploaded to Roblox and IDs updated
90
+ - Physics settings may need adjustment for Roblox's scale
91
+ `;
92
+ this.addTextFile('README.md', readme);
93
+ }
94
+ /* ── Core Scripts ───────────────────────────────────────────── */
95
+ async generateCoreScripts(project, options) {
96
+ // Game Manager Module
97
+ const gameManagerModule = `${this.useStrictMode ? '--!strict\n' : ''}--[[
98
+ Game Manager Module
99
+ Generated from Nice2Dev project: ${project.name}
100
+
101
+ Central game state and utility management.
102
+ ]]
103
+
104
+ local GameManager = {}
105
+ GameManager.__index = GameManager
106
+
107
+ -- Services
108
+ local Players = game:GetService("Players")
109
+ local ReplicatedStorage = game:GetService("ReplicatedStorage")
110
+ local RunService = game:GetService("RunService")
111
+
112
+ -- Game State
113
+ local gameState = {
114
+ isPaused = false,
115
+ currentScene = nil,
116
+ entities = {},
117
+ globalVariables = {},
118
+ }
119
+
120
+ -- Settings from Nice2Dev project
121
+ GameManager.Settings = {
122
+ GameWidth = ${project.settings.resolution.width},
123
+ GameHeight = ${project.settings.resolution.height},
124
+ MasterVolume = ${project.settings.audio.masterVolume},
125
+ PhysicsEnabled = ${project.settings.physics.enabled},
126
+ GravityX = ${project.settings.physics.gravity.x},
127
+ GravityY = ${project.settings.physics.gravity.y},
128
+ }
129
+
130
+ function GameManager.new()
131
+ local self = setmetatable({}, GameManager)
132
+ return self
133
+ end
134
+
135
+ function GameManager:Initialize()
136
+ -- Apply gravity settings
137
+ workspace.Gravity = math.abs(self.Settings.GravityY)
138
+
139
+ -- Set up game loop
140
+ RunService.Heartbeat:Connect(function(deltaTime)
141
+ if not gameState.isPaused then
142
+ self:Update(deltaTime)
143
+ end
144
+ end)
145
+
146
+ print("[GameManager] Initialized")
147
+ end
148
+
149
+ function GameManager:Update(deltaTime: number)
150
+ -- Update all registered entities
151
+ for id, entity in pairs(gameState.entities) do
152
+ if entity.Update then
153
+ entity:Update(deltaTime)
154
+ end
155
+ end
156
+ end
157
+
158
+ function GameManager:RegisterEntity(id: string, entity: any)
159
+ gameState.entities[id] = entity
160
+ end
161
+
162
+ function GameManager:UnregisterEntity(id: string)
163
+ gameState.entities[id] = nil
164
+ end
165
+
166
+ function GameManager:GetEntity(id: string)
167
+ return gameState.entities[id]
168
+ end
169
+
170
+ function GameManager:SetVariable(key: string, value: any)
171
+ gameState.globalVariables[key] = value
172
+ end
173
+
174
+ function GameManager:GetVariable(key: string): any
175
+ return gameState.globalVariables[key]
176
+ end
177
+
178
+ function GameManager:Pause()
179
+ gameState.isPaused = true
180
+ end
181
+
182
+ function GameManager:Resume()
183
+ gameState.isPaused = false
184
+ end
185
+
186
+ function GameManager:IsPaused(): boolean
187
+ return gameState.isPaused
188
+ end
189
+
190
+ return GameManager
191
+ `;
192
+ this.addTextFile('ReplicatedStorage/Modules/GameManager.lua', gameManagerModule);
193
+ // Entity Base Module
194
+ const entityBaseModule = `${this.useStrictMode ? '--!strict\n' : ''}--[[
195
+ Entity Base Module
196
+ Base class for all Nice2Dev entities
197
+ ]]
198
+
199
+ local EntityBase = {}
200
+ EntityBase.__index = EntityBase
201
+
202
+ export type Entity = {
203
+ Id: string,
204
+ Name: string,
205
+ Tags: {string},
206
+ Instance: Instance?,
207
+
208
+ Start: (self: Entity) -> (),
209
+ Update: (self: Entity, deltaTime: number) -> (),
210
+ Destroy: (self: Entity) -> (),
211
+ HasTag: (self: Entity, tag: string) -> boolean,
212
+ }
213
+
214
+ function EntityBase.new(id: string, name: string): Entity
215
+ local self = setmetatable({}, EntityBase)
216
+ self.Id = id
217
+ self.Name = name
218
+ self.Tags = {}
219
+ self.Instance = nil
220
+ return self :: Entity
221
+ end
222
+
223
+ function EntityBase:Start()
224
+ -- Override in derived entities
225
+ end
226
+
227
+ function EntityBase:Update(deltaTime: number)
228
+ -- Override in derived entities
229
+ end
230
+
231
+ function EntityBase:Destroy()
232
+ if self.Instance then
233
+ self.Instance:Destroy()
234
+ end
235
+ end
236
+
237
+ function EntityBase:HasTag(tag: string): boolean
238
+ for _, t in ipairs(self.Tags) do
239
+ if t == tag then
240
+ return true
241
+ end
242
+ end
243
+ return false
244
+ end
245
+
246
+ function EntityBase:AddTag(tag: string)
247
+ if not self:HasTag(tag) then
248
+ table.insert(self.Tags, tag)
249
+ end
250
+ end
251
+
252
+ function EntityBase:RemoveTag(tag: string)
253
+ for i, t in ipairs(self.Tags) do
254
+ if t == tag then
255
+ table.remove(self.Tags, i)
256
+ return
257
+ end
258
+ end
259
+ end
260
+
261
+ function EntityBase:SetPosition(x: number, y: number, z: number?)
262
+ if self.Instance and self.Instance:IsA("BasePart") then
263
+ self.Instance.Position = Vector3.new(x, y, z or 0)
264
+ elseif self.Instance and self.Instance:IsA("Model") then
265
+ local primary = self.Instance.PrimaryPart
266
+ if primary then
267
+ self.Instance:SetPrimaryPartCFrame(CFrame.new(x, y, z or 0))
268
+ end
269
+ end
270
+ end
271
+
272
+ function EntityBase:GetPosition(): Vector3
273
+ if self.Instance and self.Instance:IsA("BasePart") then
274
+ return self.Instance.Position
275
+ elseif self.Instance and self.Instance:IsA("Model") then
276
+ local primary = self.Instance.PrimaryPart
277
+ if primary then
278
+ return primary.Position
279
+ end
280
+ end
281
+ return Vector3.new(0, 0, 0)
282
+ end
283
+
284
+ function EntityBase:MoveTowards(targetPosition: Vector3, speed: number, deltaTime: number)
285
+ local currentPos = self:GetPosition()
286
+ local direction = (targetPosition - currentPos).Unit
287
+ local distance = (targetPosition - currentPos).Magnitude
288
+
289
+ if distance <= speed * deltaTime then
290
+ self:SetPosition(targetPosition.X, targetPosition.Y, targetPosition.Z)
291
+ else
292
+ local newPos = currentPos + direction * speed * deltaTime
293
+ self:SetPosition(newPos.X, newPos.Y, newPos.Z)
294
+ end
295
+ end
296
+
297
+ function EntityBase:LookAt(targetPosition: Vector3)
298
+ if self.Instance and self.Instance:IsA("BasePart") then
299
+ self.Instance.CFrame = CFrame.lookAt(self.Instance.Position, targetPosition)
300
+ end
301
+ end
302
+
303
+ return EntityBase
304
+ `;
305
+ this.addTextFile('ReplicatedStorage/Modules/EntityBase.lua', entityBaseModule);
306
+ // Utility Module
307
+ const utilityModule = `${this.useStrictMode ? '--!strict\n' : ''}--[[
308
+ Nice2Dev Utility Module
309
+ Common utility functions for game development
310
+ ]]
311
+
312
+ local Utility = {}
313
+
314
+ -- Math Utilities
315
+ function Utility.Lerp(a: number, b: number, t: number): number
316
+ return a + (b - a) * math.clamp(t, 0, 1)
317
+ end
318
+
319
+ function Utility.LerpVector3(a: Vector3, b: Vector3, t: number): Vector3
320
+ return a:Lerp(b, math.clamp(t, 0, 1))
321
+ end
322
+
323
+ function Utility.LerpColor3(a: Color3, b: Color3, t: number): Color3
324
+ return a:Lerp(b, math.clamp(t, 0, 1))
325
+ end
326
+
327
+ function Utility.Remap(value: number, inMin: number, inMax: number, outMin: number, outMax: number): number
328
+ return outMin + (value - inMin) * (outMax - outMin) / (inMax - inMin)
329
+ end
330
+
331
+ function Utility.RandomPointInCircle(center: Vector3, radius: number): Vector3
332
+ local angle = math.random() * math.pi * 2
333
+ local distance = math.sqrt(math.random()) * radius
334
+ return center + Vector3.new(
335
+ math.cos(angle) * distance,
336
+ 0,
337
+ math.sin(angle) * distance
338
+ )
339
+ end
340
+
341
+ function Utility.RandomPointInSphere(center: Vector3, radius: number): Vector3
342
+ local theta = math.random() * math.pi * 2
343
+ local phi = math.acos(2 * math.random() - 1)
344
+ local r = radius * math.random() ^ (1/3)
345
+
346
+ return center + Vector3.new(
347
+ r * math.sin(phi) * math.cos(theta),
348
+ r * math.sin(phi) * math.sin(theta),
349
+ r * math.cos(phi)
350
+ )
351
+ end
352
+
353
+ -- Distance Utilities
354
+ function Utility.Distance2D(a: Vector3, b: Vector3): number
355
+ local dx = a.X - b.X
356
+ local dz = a.Z - b.Z
357
+ return math.sqrt(dx * dx + dz * dz)
358
+ end
359
+
360
+ function Utility.Distance3D(a: Vector3, b: Vector3): number
361
+ return (a - b).Magnitude
362
+ end
363
+
364
+ -- Instance Utilities
365
+ function Utility.FindFirstChildWithTag(parent: Instance, tag: string): Instance?
366
+ local CollectionService = game:GetService("CollectionService")
367
+ for _, child in ipairs(parent:GetChildren()) do
368
+ if CollectionService:HasTag(child, tag) then
369
+ return child
370
+ end
371
+ end
372
+ return nil
373
+ end
374
+
375
+ function Utility.FindChildrenWithTag(parent: Instance, tag: string): {Instance}
376
+ local CollectionService = game:GetService("CollectionService")
377
+ local result = {}
378
+ for _, child in ipairs(parent:GetDescendants()) do
379
+ if CollectionService:HasTag(child, tag) then
380
+ table.insert(result, child)
381
+ end
382
+ end
383
+ return result
384
+ end
385
+
386
+ -- Timer Utility
387
+ function Utility.CreateTimer(duration: number, callback: () -> ()): thread
388
+ return task.spawn(function()
389
+ task.wait(duration)
390
+ callback()
391
+ end)
392
+ end
393
+
394
+ function Utility.CreateRepeatingTimer(interval: number, callback: () -> boolean): thread
395
+ return task.spawn(function()
396
+ while true do
397
+ task.wait(interval)
398
+ local shouldContinue = callback()
399
+ if not shouldContinue then
400
+ break
401
+ end
402
+ end
403
+ end)
404
+ end
405
+
406
+ -- Spawn Utility
407
+ function Utility.SpawnModel(model: Model, position: Vector3, parent: Instance?): Model
408
+ local clone = model:Clone()
409
+ if clone.PrimaryPart then
410
+ clone:SetPrimaryPartCFrame(CFrame.new(position))
411
+ end
412
+ clone.Parent = parent or workspace
413
+ return clone
414
+ end
415
+
416
+ return Utility
417
+ `;
418
+ this.addTextFile('ReplicatedStorage/Modules/Utility.lua', utilityModule);
419
+ }
420
+ /* ── Services Setup ─────────────────────────────────────────── */
421
+ async generateServicesSetup(project, options) {
422
+ const platformOpts = options.platformOptions ?? {};
423
+ // Based on genre, include different default setups
424
+ const genre = platformOpts.genre ?? 'adventure';
425
+ // Game Initialization Script
426
+ const initScript = `${this.useStrictMode ? '--!strict\n' : ''}--[[
427
+ Game Initialization Script
428
+ Generated from Nice2Dev project: ${project.name}
429
+ Genre: ${genre}
430
+ ]]
431
+
432
+ local ReplicatedStorage = game:GetService("ReplicatedStorage")
433
+ local Players = game:GetService("Players")
434
+
435
+ -- Wait for modules to load
436
+ local Modules = ReplicatedStorage:WaitForChild("Modules")
437
+ local GameManager = require(Modules:WaitForChild("GameManager"))
438
+
439
+ -- Initialize game
440
+ local gameManager = GameManager.new()
441
+ gameManager:Initialize()
442
+
443
+ -- Store reference globally for other scripts
444
+ _G.GameManager = gameManager
445
+
446
+ -- Player handling
447
+ Players.PlayerAdded:Connect(function(player)
448
+ print("[Game] Player joined:", player.Name)
449
+
450
+ player.CharacterAdded:Connect(function(character)
451
+ -- Character setup
452
+ local humanoid = character:WaitForChild("Humanoid")
453
+
454
+ -- Apply Nice2Dev settings
455
+ -- humanoid.WalkSpeed = 16
456
+ -- humanoid.JumpPower = 50
457
+ end)
458
+ end)
459
+
460
+ Players.PlayerRemoving:Connect(function(player)
461
+ print("[Game] Player left:", player.Name)
462
+ end)
463
+
464
+ print("[Game] ${project.name} initialized successfully!")
465
+ `;
466
+ this.addTextFile('ServerScriptService/GameInit.server.lua', initScript);
467
+ }
468
+ /* ── Client Scripts ─────────────────────────────────────────── */
469
+ async generateClientScripts(project, options) {
470
+ // Client-side game controller
471
+ const clientController = `${this.useStrictMode ? '--!strict\n' : ''}--[[
472
+ Client Controller
473
+ Handles client-side game logic and input
474
+ ]]
475
+
476
+ local Players = game:GetService("Players")
477
+ local ReplicatedStorage = game:GetService("ReplicatedStorage")
478
+ local UserInputService = game:GetService("UserInputService")
479
+ local RunService = game:GetService("RunService")
480
+
481
+ local LocalPlayer = Players.LocalPlayer
482
+
483
+ -- Modules
484
+ local Modules = ReplicatedStorage:WaitForChild("Modules")
485
+ local Utility = require(Modules:WaitForChild("Utility"))
486
+
487
+ -- Input State
488
+ local inputState = {
489
+ moveDirection = Vector3.new(0, 0, 0),
490
+ mousePosition = Vector2.new(0, 0),
491
+ keysDown = {},
492
+ }
493
+
494
+ -- Input Handling
495
+ UserInputService.InputBegan:Connect(function(input, gameProcessed)
496
+ if gameProcessed then return end
497
+
498
+ if input.UserInputType == Enum.UserInputType.Keyboard then
499
+ inputState.keysDown[input.KeyCode] = true
500
+
501
+ -- Example: Jump on space
502
+ if input.KeyCode == Enum.KeyCode.Space then
503
+ local character = LocalPlayer.Character
504
+ if character then
505
+ local humanoid = character:FindFirstChildOfClass("Humanoid")
506
+ if humanoid then
507
+ humanoid:ChangeState(Enum.HumanoidStateType.Jumping)
508
+ end
509
+ end
510
+ end
511
+ elseif input.UserInputType == Enum.UserInputType.MouseButton1 then
512
+ -- Left click
513
+ elseif input.UserInputType == Enum.UserInputType.MouseButton2 then
514
+ -- Right click
515
+ end
516
+ end)
517
+
518
+ UserInputService.InputEnded:Connect(function(input, gameProcessed)
519
+ if input.UserInputType == Enum.UserInputType.Keyboard then
520
+ inputState.keysDown[input.KeyCode] = nil
521
+ end
522
+ end)
523
+
524
+ -- Mouse tracking
525
+ UserInputService.InputChanged:Connect(function(input)
526
+ if input.UserInputType == Enum.UserInputType.MouseMovement then
527
+ inputState.mousePosition = Vector2.new(input.Position.X, input.Position.Y)
528
+ end
529
+ end)
530
+
531
+ -- Helper functions
532
+ local function IsKeyDown(keyCode: Enum.KeyCode): boolean
533
+ return inputState.keysDown[keyCode] ~= nil
534
+ end
535
+
536
+ local function GetMoveDirection(): Vector3
537
+ local direction = Vector3.new(0, 0, 0)
538
+
539
+ if IsKeyDown(Enum.KeyCode.W) or IsKeyDown(Enum.KeyCode.Up) then
540
+ direction = direction + Vector3.new(0, 0, -1)
541
+ end
542
+ if IsKeyDown(Enum.KeyCode.S) or IsKeyDown(Enum.KeyCode.Down) then
543
+ direction = direction + Vector3.new(0, 0, 1)
544
+ end
545
+ if IsKeyDown(Enum.KeyCode.A) or IsKeyDown(Enum.KeyCode.Left) then
546
+ direction = direction + Vector3.new(-1, 0, 0)
547
+ end
548
+ if IsKeyDown(Enum.KeyCode.D) or IsKeyDown(Enum.KeyCode.Right) then
549
+ direction = direction + Vector3.new(1, 0, 0)
550
+ end
551
+
552
+ if direction.Magnitude > 0 then
553
+ direction = direction.Unit
554
+ end
555
+
556
+ return direction
557
+ end
558
+
559
+ -- Client update loop
560
+ RunService.RenderStepped:Connect(function(deltaTime)
561
+ inputState.moveDirection = GetMoveDirection()
562
+
563
+ -- Update client-side effects, animations, etc.
564
+ end)
565
+
566
+ print("[ClientController] Initialized")
567
+ `;
568
+ this.addTextFile('StarterPlayer/StarterPlayerScripts/ClientController.client.lua', clientController);
569
+ }
570
+ /* ── Server Scripts ─────────────────────────────────────────── */
571
+ async generateServerScripts(project, options) {
572
+ // Data handling script
573
+ const dataScript = `${this.useStrictMode ? '--!strict\n' : ''}--[[
574
+ Data Handler Script
575
+ Handles player data saving and loading using DataStoreService
576
+ ]]
577
+
578
+ local DataStoreService = game:GetService("DataStoreService")
579
+ local Players = game:GetService("Players")
580
+
581
+ local playerDataStore = DataStoreService:GetDataStore("PlayerData_${this.projectName}")
582
+
583
+ -- Default player data
584
+ local defaultData = {
585
+ coins = 0,
586
+ level = 1,
587
+ experience = 0,
588
+ inventory = {},
589
+ settings = {
590
+ musicVolume = ${project.settings.audio.masterVolume},
591
+ sfxVolume = 1.0,
592
+ },
593
+ }
594
+
595
+ local playerData = {}
596
+
597
+ local function LoadPlayerData(player: Player): {[string]: any}
598
+ local success, data = pcall(function()
599
+ return playerDataStore:GetAsync("Player_" .. player.UserId)
600
+ end)
601
+
602
+ if success and data then
603
+ -- Merge with defaults for any missing keys
604
+ for key, value in pairs(defaultData) do
605
+ if data[key] == nil then
606
+ data[key] = value
607
+ end
608
+ end
609
+ return data
610
+ else
611
+ warn("[Data] Failed to load data for", player.Name, "using defaults")
612
+ return table.clone(defaultData)
613
+ end
614
+ end
615
+
616
+ local function SavePlayerData(player: Player, data: {[string]: any})
617
+ local success, err = pcall(function()
618
+ playerDataStore:SetAsync("Player_" .. player.UserId, data)
619
+ end)
620
+
621
+ if not success then
622
+ warn("[Data] Failed to save data for", player.Name, ":", err)
623
+ end
624
+ end
625
+
626
+ -- Player handling
627
+ Players.PlayerAdded:Connect(function(player)
628
+ playerData[player.UserId] = LoadPlayerData(player)
629
+ print("[Data] Loaded data for", player.Name)
630
+ end)
631
+
632
+ Players.PlayerRemoving:Connect(function(player)
633
+ if playerData[player.UserId] then
634
+ SavePlayerData(player, playerData[player.UserId])
635
+ playerData[player.UserId] = nil
636
+ print("[Data] Saved data for", player.Name)
637
+ end
638
+ end)
639
+
640
+ -- Auto-save every 5 minutes
641
+ task.spawn(function()
642
+ while true do
643
+ task.wait(300)
644
+ for userId, data in pairs(playerData) do
645
+ local player = Players:GetPlayerByUserId(userId)
646
+ if player then
647
+ SavePlayerData(player, data)
648
+ end
649
+ end
650
+ print("[Data] Auto-save complete")
651
+ end
652
+ end)
653
+
654
+ -- API for other scripts
655
+ local DataHandler = {}
656
+
657
+ function DataHandler.GetPlayerData(player: Player): {[string]: any}?
658
+ return playerData[player.UserId]
659
+ end
660
+
661
+ function DataHandler.SetPlayerData(player: Player, key: string, value: any)
662
+ if playerData[player.UserId] then
663
+ playerData[player.UserId][key] = value
664
+ end
665
+ end
666
+
667
+ return DataHandler
668
+ `;
669
+ this.addTextFile('ServerScriptService/DataHandler.server.lua', dataScript);
670
+ }
671
+ /* ── Scene Export ───────────────────────────────────────────── */
672
+ async exportScene(scene, project, options) {
673
+ // Generate scene as a Model in RBXMX format
674
+ const modelXml = this.generateSceneModel(scene, project);
675
+ this.addTextFile(`Workspace/${scene.name}.rbxmx`, modelXml);
676
+ // Generate scene script
677
+ const sceneScript = this.generateSceneScript(scene);
678
+ this.addTextFile(`ServerScriptService/Scenes/${scene.name}.server.lua`, sceneScript);
679
+ }
680
+ generateSceneModel(scene, project) {
681
+ const instances = [];
682
+ // Root folder for scene
683
+ instances.push(`<Item class="Folder" referent="RBX_SCENE_ROOT">
684
+ <Properties>
685
+ <string name="Name">${scene.name}</string>
686
+ </Properties>`);
687
+ // Generate entity instances
688
+ for (const entity of scene.entities) {
689
+ instances.push(this.generateEntityXml(entity));
690
+ }
691
+ instances.push(`</Item>`);
692
+ return `<roblox xmlns:xmime="http://www.w3.org/2005/05/xmlmime" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.roblox.com/roblox.xsd" version="4">
693
+ <Meta name="ExplicitAutoJoints">true</Meta>
694
+ ${instances.join('\n ')}
695
+ </roblox>`;
696
+ }
697
+ generateEntityXml(entity, parentRef = 'RBX_SCENE_ROOT') {
698
+ const pos = entity.position ?? { x: 0, y: 0 };
699
+ const scale = entity.scale ?? { x: 1, y: 1 };
700
+ const referent = `RBX_${entity.id.replace(/[^a-zA-Z0-9]/g, '_')}`;
701
+ // Determine instance class based on components
702
+ let instanceClass = 'Part';
703
+ const additionalProps = '';
704
+ const hasCollider = entity.components.some((c) => c.type.includes('Collider'));
705
+ entity.components.some((c) => c.type === 'sprite');
706
+ const hasLight = entity.components.some((c) => c.type === 'light');
707
+ if (hasLight) {
708
+ instanceClass = 'Part'; // Will contain a PointLight child
709
+ }
710
+ const xml = `<Item class="${instanceClass}" referent="${referent}">
711
+ <Properties>
712
+ <string name="Name">${entity.name ?? entity.id}</string>
713
+ <Vector3 name="Position">
714
+ <X>${pos.x}</X>
715
+ <Y>${pos.y}</Y>
716
+ <Z>0</Z>
717
+ </Vector3>
718
+ <Vector3 name="Size">
719
+ <X>${scale.x}</X>
720
+ <Y>${scale.y}</Y>
721
+ <Z>1</Z>
722
+ </Vector3>
723
+ <bool name="Anchored">${!entity.components.some((c) => c.type === 'rigidbody')}</bool>
724
+ <bool name="CanCollide">${hasCollider}</bool>
725
+ ${additionalProps}
726
+ </Properties>
727
+ ${this.generateComponentChildren(entity)}
728
+ </Item>`;
729
+ return xml;
730
+ }
731
+ generateComponentChildren(entity) {
732
+ const children = [];
733
+ for (const comp of entity.components) {
734
+ switch (comp.type) {
735
+ case 'light':
736
+ const lightColor = comp.properties?.['color'] ?? '#ffffff';
737
+ const brightness = comp.properties?.['intensity'] ?? 1;
738
+ const range = comp.properties?.['range'] ?? 10;
739
+ children.push(`<Item class="PointLight">
740
+ <Properties>
741
+ <Color3 name="Color">${this.hexToRobloxColor3(lightColor)}</Color3>
742
+ <float name="Brightness">${brightness}</float>
743
+ <float name="Range">${range}</float>
744
+ </Properties>
745
+ </Item>`);
746
+ break;
747
+ case 'audioSource':
748
+ const soundId = comp.properties?.['clip'];
749
+ const volume = comp.properties?.['volume'] ?? 1;
750
+ const loop = comp.properties?.['loop'] ?? false;
751
+ children.push(`<Item class="Sound">
752
+ <Properties>
753
+ <string name="Name">${comp.type}_sound</string>
754
+ <Content name="SoundId"><url>${soundId ?? ''}</url></Content>
755
+ <float name="Volume">${volume}</float>
756
+ <bool name="Looped">${loop}</bool>
757
+ </Properties>
758
+ </Item>`);
759
+ break;
760
+ case 'particleEmitter':
761
+ children.push(`<Item class="ParticleEmitter">
762
+ <Properties>
763
+ <string name="Name">${comp.type}_emitter</string>
764
+ <float name="Rate">${comp.properties?.['rate'] ?? 10}</float>
765
+ </Properties>
766
+ </Item>`);
767
+ break;
768
+ }
769
+ }
770
+ return children.join('\n ');
771
+ }
772
+ hexToRobloxColor3(hex) {
773
+ const h = hex.replace('#', '');
774
+ const r = parseInt(h.substr(0, 2), 16) / 255;
775
+ const g = parseInt(h.substr(2, 2), 16) / 255;
776
+ const b = parseInt(h.substr(4, 2), 16) / 255;
777
+ return `<R>${r.toFixed(6)}</R><G>${g.toFixed(6)}</G><B>${b.toFixed(6)}</B>`;
778
+ }
779
+ generateSceneScript(scene) {
780
+ return `${this.useStrictMode ? '--!strict\n' : ''}--[[
781
+ Scene Script: ${scene.name}
782
+ Generated from Nice2Dev scene
783
+ ]]
784
+
785
+ local ReplicatedStorage = game:GetService("ReplicatedStorage")
786
+ local Modules = ReplicatedStorage:WaitForChild("Modules")
787
+ local EntityBase = require(Modules:WaitForChild("EntityBase"))
788
+ local GameManager = require(Modules:WaitForChild("GameManager"))
789
+
790
+ local SceneManager = {}
791
+
792
+ -- Entity definitions for this scene
793
+ local entityDefinitions = {
794
+ ${scene.entities
795
+ .map((e) => ` ["${e.id}"] = {
796
+ name = "${e.name ?? e.id}",
797
+ position = Vector3.new(${e.position?.x ?? 0}, ${e.position?.y ?? 0}, 0),
798
+ tags = {${(e.tags ?? []).map((t) => `"${t}"`).join(', ')}},
799
+ },`)
800
+ .join('\n')}
801
+ }
802
+
803
+ function SceneManager:Initialize()
804
+ -- Create entities from definitions
805
+ for id, def in pairs(entityDefinitions) do
806
+ local entity = EntityBase.new(id, def.name)
807
+ entity.Tags = def.tags
808
+
809
+ -- Find or create instance in workspace
810
+ local folder = workspace:FindFirstChild("${scene.name}")
811
+ if folder then
812
+ local instance = folder:FindFirstChild(def.name)
813
+ if instance then
814
+ entity.Instance = instance
815
+ end
816
+ end
817
+
818
+ -- Register with GameManager
819
+ if _G.GameManager then
820
+ _G.GameManager:RegisterEntity(id, entity)
821
+ end
822
+
823
+ entity:Start()
824
+ end
825
+
826
+ print("[Scene] ${scene.name} initialized with", #entityDefinitions, "entities")
827
+ end
828
+
829
+ function SceneManager:Cleanup()
830
+ for id, _ in pairs(entityDefinitions) do
831
+ if _G.GameManager then
832
+ local entity = _G.GameManager:GetEntity(id)
833
+ if entity then
834
+ entity:Destroy()
835
+ end
836
+ _G.GameManager:UnregisterEntity(id)
837
+ end
838
+ end
839
+ end
840
+
841
+ return SceneManager
842
+ `;
843
+ }
844
+ /* ── Prefab Export ──────────────────────────────────────────── */
845
+ async exportPrefab(prefab, options) {
846
+ // Generate prefab as a Module script that can instantiate the entity
847
+ const prefabModule = `${this.useStrictMode ? '--!strict\n' : ''}--[[
848
+ Prefab Module: ${prefab.name}
849
+ Generated from Nice2Dev prefab
850
+ ]]
851
+
852
+ local ReplicatedStorage = game:GetService("ReplicatedStorage")
853
+ local Modules = ReplicatedStorage:WaitForChild("Modules")
854
+ local EntityBase = require(Modules:WaitForChild("EntityBase"))
855
+
856
+ local ${prefab.name}Prefab = {}
857
+
858
+ -- Prefab definition
859
+ local prefabDef = {
860
+ name = "${prefab.entity.name ?? prefab.name}",
861
+ components = {
862
+ ${prefab.entity.components.map((c) => ` { type = "${c.type}", properties = ${this.luaTableFromObject(c.properties ?? {})} },`).join('\n')}
863
+ },
864
+ tags = {${(prefab.entity.tags ?? []).map((t) => `"${t}"`).join(', ')}},
865
+ }
866
+
867
+ function ${prefab.name}Prefab.Spawn(position: Vector3, parent: Instance?): any
868
+ local entity = EntityBase.new(
869
+ game:GetService("HttpService"):GenerateGUID(false),
870
+ prefabDef.name
871
+ )
872
+ entity.Tags = table.clone(prefabDef.tags)
873
+
874
+ -- Create instance
875
+ local part = Instance.new("Part")
876
+ part.Name = prefabDef.name
877
+ part.Position = position
878
+ part.Anchored = true
879
+ part.Parent = parent or workspace
880
+
881
+ entity.Instance = part
882
+
883
+ -- Apply components
884
+ for _, comp in ipairs(prefabDef.components) do
885
+ -- Component setup based on type
886
+ if comp.type == "light" then
887
+ local light = Instance.new("PointLight")
888
+ light.Parent = part
889
+ elseif comp.type == "audioSource" then
890
+ local sound = Instance.new("Sound")
891
+ sound.Parent = part
892
+ end
893
+ end
894
+
895
+ -- Register with GameManager
896
+ if _G.GameManager then
897
+ _G.GameManager:RegisterEntity(entity.Id, entity)
898
+ end
899
+
900
+ entity:Start()
901
+ return entity
902
+ end
903
+
904
+ return ${prefab.name}Prefab
905
+ `;
906
+ this.addTextFile(`ReplicatedStorage/Prefabs/${prefab.name}.lua`, prefabModule);
907
+ }
908
+ luaTableFromObject(obj) {
909
+ const entries = Object.entries(obj).map(([key, value]) => {
910
+ let luaValue;
911
+ if (typeof value === 'string') {
912
+ luaValue = `"${value}"`;
913
+ }
914
+ else if (typeof value === 'boolean') {
915
+ luaValue = value ? 'true' : 'false';
916
+ }
917
+ else if (typeof value === 'number') {
918
+ luaValue = String(value);
919
+ }
920
+ else if (value === null || value === undefined) {
921
+ luaValue = 'nil';
922
+ }
923
+ else if (typeof value === 'object') {
924
+ luaValue = this.luaTableFromObject(value);
925
+ }
926
+ else {
927
+ luaValue = String(value);
928
+ }
929
+ return `${key} = ${luaValue}`;
930
+ });
931
+ return `{ ${entries.join(', ')} }`;
932
+ }
933
+ }
934
+ /* ── Factory ──────────────────────────────────────────────────── */
935
+ function createRobloxExporter() {
936
+ return new RobloxExporter();
937
+ }
938
+
939
+ export { RobloxExporter, createRobloxExporter };
940
+ //# sourceMappingURL=RobloxExporter.js.map