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