@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,846 @@
1
+ 'use strict';
2
+
3
+ var PlatformExporter = require('./PlatformExporter.js');
4
+
5
+ /* ────────────────────────────────────────────────────────────────
6
+ GameMaker Exporter — GameMaker Studio 2 Project Export
7
+
8
+ Exports Nice2Dev projects to GameMaker Studio 2 format including:
9
+ - GML scripts (.gml)
10
+ - Object files (.yy)
11
+ - Room files (.yy)
12
+ - Sprite assets (.yy)
13
+ - Project file (.yyp)
14
+ ──────────────────────────────────────────────────────────────── */
15
+ /* ── GameMaker UUID Generator ─────────────────────────────────── */
16
+ function generateGMUUID() {
17
+ return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {
18
+ const r = (Math.random() * 16) | 0;
19
+ const v = c === 'x' ? r : (r & 0x3) | 0x8;
20
+ return v.toString(16);
21
+ });
22
+ }
23
+ /* ── GameMaker Event Types ────────────────────────────────────── */
24
+ const GM_EVENTS = {
25
+ CREATE: { type: 0, num: 0 },
26
+ STEP: { type: 3, num: 0 },
27
+ DRAW: { type: 8, num: 0 }};
28
+ /* ── GameMaker Exporter Implementation ────────────────────────── */
29
+ class GameMakerExporter extends PlatformExporter.PlatformExporter {
30
+ constructor() {
31
+ super(...arguments);
32
+ this.platformId = 'gamemaker';
33
+ this.platformInfo = {
34
+ id: 'gamemaker',
35
+ name: 'GameMaker Studio 2',
36
+ description: 'YoYo Games GameMaker Studio 2 with GML scripting',
37
+ website: 'https://gamemaker.io',
38
+ features: [
39
+ '2d-rendering',
40
+ 'physics-2d',
41
+ 'audio',
42
+ 'networking',
43
+ 'ui-system',
44
+ 'tilemaps',
45
+ 'particles',
46
+ 'animation',
47
+ ],
48
+ supportedAssets: [
49
+ 'sprite',
50
+ 'tileset',
51
+ 'audio',
52
+ 'font',
53
+ 'script',
54
+ 'scene',
55
+ 'prefab',
56
+ 'particleSystem',
57
+ 'data',
58
+ ],
59
+ exportFormats: ['.yyp', '.yy', '.gml'],
60
+ };
61
+ this.projectName = 'Nice2DevGame';
62
+ this.resourceTree = [];
63
+ this.objectScripts = new Map();
64
+ }
65
+ async doExport(project, options) {
66
+ this.projectName = (options.projectName ?? project.name).replace(/[^a-zA-Z0-9_]/g, '_');
67
+ this.resourceTree = [];
68
+ this.objectScripts.clear();
69
+ const platformOpts = options.platformOptions ?? {};
70
+ platformOpts.enablePhysics ?? project.settings.physics.enabled;
71
+ // Generate project file
72
+ await this.generateProjectFile(project, options);
73
+ // Generate scripts
74
+ await this.generateScripts(project, options);
75
+ // Generate objects from prefabs and unique entities
76
+ await this.generateObjects(project, options);
77
+ // Generate rooms from scenes
78
+ for (const scene of project.scenes) {
79
+ await this.generateRoom(scene, project, options);
80
+ }
81
+ // Generate sprite assets
82
+ for (const asset of project.assets) {
83
+ if (asset.type === 'sprite' || asset.type === 'texture') {
84
+ await this.generateSprite(asset, options);
85
+ }
86
+ else if (asset.type === 'audio') {
87
+ await this.generateSound(asset, options);
88
+ }
89
+ }
90
+ }
91
+ /* ── Project File ───────────────────────────────────────────── */
92
+ async generateProjectFile(project, options) {
93
+ const projectFile = {
94
+ resourceType: 'GMProject',
95
+ resourceVersion: '1.6',
96
+ name: this.projectName,
97
+ AudioGroups: [
98
+ {
99
+ resourceType: 'GMAudioGroup',
100
+ resourceVersion: '1.3',
101
+ name: 'audiogroup_default',
102
+ targets: -1,
103
+ },
104
+ ],
105
+ configs: {
106
+ children: [],
107
+ name: 'Default',
108
+ },
109
+ defaultScriptType: 1, // GML
110
+ Folders: this.generateFolderStructure(),
111
+ IncludedFiles: [],
112
+ isEcma: false,
113
+ LibaryEmitters: [],
114
+ MetaData: {
115
+ IDEVersion: '2024.2.0.132',
116
+ },
117
+ resources: this.resourceTree,
118
+ RoomOrderNodes: project.scenes.map((s) => ({
119
+ roomId: { name: `rm_${s.name}`, path: `rooms/rm_${s.name}/rm_${s.name}.yy` },
120
+ })),
121
+ templateType: null,
122
+ TextureGroups: [
123
+ {
124
+ resourceType: 'GMTextureGroup',
125
+ resourceVersion: '1.3',
126
+ name: 'Default',
127
+ autocrop: true,
128
+ border: 2,
129
+ compressFormat: 'bz2',
130
+ directory: '',
131
+ groupParent: null,
132
+ isScaled: true,
133
+ loadType: 'default',
134
+ mipsToGenerate: 0,
135
+ targets: -1,
136
+ },
137
+ ],
138
+ };
139
+ this.addTextFile(`${this.projectName}.yyp`, JSON.stringify(projectFile, null, 2));
140
+ }
141
+ generateFolderStructure() {
142
+ return [
143
+ this.createFolder('Sprites', 'sprites'),
144
+ this.createFolder('Sounds', 'sounds'),
145
+ this.createFolder('Scripts', 'scripts'),
146
+ this.createFolder('Objects', 'objects'),
147
+ this.createFolder('Rooms', 'rooms'),
148
+ ];
149
+ }
150
+ createFolder(name, folderPath) {
151
+ return {
152
+ resourceType: 'GMFolder',
153
+ resourceVersion: '1.0',
154
+ name,
155
+ folderPath: `folders/${name}.yy`,
156
+ order: 0,
157
+ };
158
+ }
159
+ /* ── Scripts ────────────────────────────────────────────────── */
160
+ async generateScripts(project, options) {
161
+ // Utility script
162
+ const utilScript = `/// @description Nice2Dev Utility Functions
163
+
164
+ /// @function n2d_move_towards(target_x, target_y, speed)
165
+ /// @param target_x
166
+ /// @param target_y
167
+ /// @param speed
168
+ function n2d_move_towards(_target_x, _target_y, _speed) {
169
+ var _dir = point_direction(x, y, _target_x, _target_y);
170
+ var _dist = point_distance(x, y, _target_x, _target_y);
171
+
172
+ if (_dist <= _speed) {
173
+ x = _target_x;
174
+ y = _target_y;
175
+ } else {
176
+ x += lengthdir_x(_speed, _dir);
177
+ y += lengthdir_y(_speed, _dir);
178
+ }
179
+ }
180
+
181
+ /// @function n2d_look_at(target_x, target_y)
182
+ /// @param target_x
183
+ /// @param target_y
184
+ function n2d_look_at(_target_x, _target_y) {
185
+ image_angle = point_direction(x, y, _target_x, _target_y);
186
+ }
187
+
188
+ /// @function n2d_random_point_in_circle(center_x, center_y, radius)
189
+ /// @param center_x
190
+ /// @param center_y
191
+ /// @param radius
192
+ function n2d_random_point_in_circle(_cx, _cy, _radius) {
193
+ var _angle = random(360);
194
+ var _dist = sqrt(random(1)) * _radius;
195
+ return {
196
+ x: _cx + lengthdir_x(_dist, _angle),
197
+ y: _cy + lengthdir_y(_dist, _angle)
198
+ };
199
+ }
200
+
201
+ /// @function n2d_spawn_entity(object, x_, y_)
202
+ /// @param object
203
+ /// @param x_
204
+ /// @param y_
205
+ function n2d_spawn_entity(_object, _x, _y) {
206
+ return instance_create_layer(_x, _y, "Instances", _object);
207
+ }
208
+
209
+ /// @function n2d_find_by_tag(tag)
210
+ /// @param tag
211
+ function n2d_find_by_tag(_tag) {
212
+ var _result = [];
213
+ with (obj_nice2dev_base) {
214
+ if (variable_instance_exists(id, "tags")) {
215
+ for (var i = 0; i < array_length(tags); i++) {
216
+ if (tags[i] == _tag) {
217
+ array_push(_result, id);
218
+ break;
219
+ }
220
+ }
221
+ }
222
+ }
223
+ return _result;
224
+ }
225
+ `;
226
+ this.addTextFile('scripts/scr_nice2dev_utils/scr_nice2dev_utils.gml', utilScript);
227
+ this.addTextFile('scripts/scr_nice2dev_utils/scr_nice2dev_utils.yy', JSON.stringify({
228
+ resourceType: 'GMScript',
229
+ resourceVersion: '1.0',
230
+ name: 'scr_nice2dev_utils',
231
+ isCompatibility: false,
232
+ isDnD: false,
233
+ parent: { name: 'Scripts', path: 'folders/Scripts.yy' },
234
+ }, null, 2));
235
+ this.resourceTree.push({
236
+ id: { name: 'scr_nice2dev_utils', path: 'scripts/scr_nice2dev_utils/scr_nice2dev_utils.yy' },
237
+ });
238
+ // Game controller script
239
+ const gameScript = `/// @description Game Controller Functions
240
+
241
+ globalvar game_paused;
242
+ game_paused = false;
243
+
244
+ /// @function game_pause()
245
+ function game_pause() {
246
+ game_paused = true;
247
+ // Deactivate all instances except UI
248
+ instance_deactivate_all(true);
249
+ // Keep UI active
250
+ // instance_activate_object(obj_ui_controller);
251
+ }
252
+
253
+ /// @function game_resume()
254
+ function game_resume() {
255
+ game_paused = false;
256
+ instance_activate_all();
257
+ }
258
+
259
+ /// @function game_goto_room(room_name)
260
+ /// @param room_name
261
+ function game_goto_room(_room_name) {
262
+ room_goto(asset_get_index(_room_name));
263
+ }
264
+
265
+ /// @function game_save(slot)
266
+ /// @param slot
267
+ function game_save(_slot) {
268
+ var _save_data = {
269
+ room: room_get_name(room),
270
+ // Add more save data as needed
271
+ };
272
+
273
+ var _filename = "save_" + string(_slot) + ".json";
274
+ var _file = file_text_open_write(_filename);
275
+ file_text_write_string(_file, json_stringify(_save_data));
276
+ file_text_close(_file);
277
+ }
278
+
279
+ /// @function game_load(slot)
280
+ /// @param slot
281
+ function game_load(_slot) {
282
+ var _filename = "save_" + string(_slot) + ".json";
283
+ if (file_exists(_filename)) {
284
+ var _file = file_text_open_read(_filename);
285
+ var _json = file_text_read_string(_file);
286
+ file_text_close(_file);
287
+
288
+ var _data = json_parse(_json);
289
+ room_goto(asset_get_index(_data.room));
290
+ }
291
+ }
292
+ `;
293
+ this.addTextFile('scripts/scr_game_controller/scr_game_controller.gml', gameScript);
294
+ this.addTextFile('scripts/scr_game_controller/scr_game_controller.yy', JSON.stringify({
295
+ resourceType: 'GMScript',
296
+ resourceVersion: '1.0',
297
+ name: 'scr_game_controller',
298
+ isCompatibility: false,
299
+ isDnD: false,
300
+ parent: { name: 'Scripts', path: 'folders/Scripts.yy' },
301
+ }, null, 2));
302
+ this.resourceTree.push({
303
+ id: {
304
+ name: 'scr_game_controller',
305
+ path: 'scripts/scr_game_controller/scr_game_controller.yy',
306
+ },
307
+ });
308
+ }
309
+ /* ── Objects ────────────────────────────────────────────────── */
310
+ async generateObjects(project, options) {
311
+ // Base object for Nice2Dev entities
312
+ await this.generateBaseObject();
313
+ // Generate objects from prefabs
314
+ for (const prefab of project.prefabs) {
315
+ await this.generateObjectFromEntity(prefab.entity, `obj_${prefab.name}`, options);
316
+ }
317
+ // Generate unique entity type objects
318
+ const entityTypes = new Set();
319
+ for (const scene of project.scenes) {
320
+ for (const entity of scene.entities) {
321
+ if (entity.type && !project.prefabs.find((p) => p.name === entity.type)) {
322
+ entityTypes.add(entity.type);
323
+ }
324
+ }
325
+ }
326
+ for (const entityType of entityTypes) {
327
+ const templateEntity = this.findEntityByType(project, entityType);
328
+ if (templateEntity) {
329
+ await this.generateObjectFromEntity(templateEntity, `obj_${entityType}`, options);
330
+ }
331
+ }
332
+ }
333
+ findEntityByType(project, type) {
334
+ for (const scene of project.scenes) {
335
+ const found = scene.entities.find((e) => e.type === type);
336
+ if (found) {
337
+ return found;
338
+ }
339
+ }
340
+ return null;
341
+ }
342
+ async generateBaseObject() {
343
+ const objectDef = {
344
+ resourceType: 'GMObject',
345
+ resourceVersion: '1.0',
346
+ name: 'obj_nice2dev_base',
347
+ solid: false,
348
+ visible: true,
349
+ managed: true,
350
+ persistent: false,
351
+ physicsObject: false,
352
+ physicsShape: 1,
353
+ eventList: [
354
+ {
355
+ resourceType: 'GMEvent',
356
+ resourceVersion: '1.0',
357
+ isDnD: false,
358
+ eventNum: GM_EVENTS.CREATE.num,
359
+ eventType: GM_EVENTS.CREATE.type,
360
+ },
361
+ ],
362
+ properties: [
363
+ {
364
+ resourceType: 'GMObjectProperty',
365
+ resourceVersion: '1.0',
366
+ name: 'entity_id',
367
+ varType: 1, // String
368
+ value: '""',
369
+ },
370
+ {
371
+ resourceType: 'GMObjectProperty',
372
+ resourceVersion: '1.0',
373
+ name: 'tags',
374
+ varType: 5, // Array
375
+ value: '[]',
376
+ },
377
+ ],
378
+ overriddenProperties: [],
379
+ parent: { name: 'Objects', path: 'folders/Objects.yy' },
380
+ };
381
+ this.addTextFile('objects/obj_nice2dev_base/obj_nice2dev_base.yy', JSON.stringify(objectDef, null, 2));
382
+ // Create event
383
+ const createEvent = `/// @description Initialize base Nice2Dev entity
384
+ entity_id = "";
385
+ tags = [];
386
+
387
+ // Override in child objects
388
+ event_inherited();
389
+ `;
390
+ this.addTextFile('objects/obj_nice2dev_base/Create_0.gml', createEvent);
391
+ this.resourceTree.push({
392
+ id: { name: 'obj_nice2dev_base', path: 'objects/obj_nice2dev_base/obj_nice2dev_base.yy' },
393
+ });
394
+ }
395
+ async generateObjectFromEntity(entity, objectName, options) {
396
+ const safeName = objectName.replace(/[^a-zA-Z0-9_]/g, '_');
397
+ const hasPhysics = entity.components.some((c) => c.type === 'rigidbody');
398
+ // Find sprite component
399
+ const spriteComp = entity.components.find((c) => c.type === 'sprite');
400
+ const spriteName = spriteComp?.properties?.['texture'];
401
+ const objectDef = {
402
+ resourceType: 'GMObject',
403
+ resourceVersion: '1.0',
404
+ name: safeName,
405
+ spriteId: spriteName
406
+ ? { name: `spr_${spriteName}`, path: `sprites/spr_${spriteName}/spr_${spriteName}.yy` }
407
+ : undefined,
408
+ solid: entity.components.some((c) => c.type === 'boxCollider' && !c.properties?.['isTrigger']),
409
+ visible: entity.active !== false,
410
+ managed: true,
411
+ persistent: false,
412
+ parentObjectId: {
413
+ name: 'obj_nice2dev_base',
414
+ path: 'objects/obj_nice2dev_base/obj_nice2dev_base.yy',
415
+ },
416
+ physicsObject: hasPhysics,
417
+ physicsShape: 1,
418
+ eventList: this.generateEventList(entity),
419
+ properties: this.extractEntityProperties(entity),
420
+ overriddenProperties: [],
421
+ parent: { name: 'Objects', path: 'folders/Objects.yy' },
422
+ };
423
+ this.addTextFile(`objects/${safeName}/${safeName}.yy`, JSON.stringify(objectDef, null, 2));
424
+ // Generate event scripts
425
+ await this.generateEventScripts(entity, safeName);
426
+ this.resourceTree.push({
427
+ id: { name: safeName, path: `objects/${safeName}/${safeName}.yy` },
428
+ });
429
+ }
430
+ generateEventList(entity) {
431
+ const events = [
432
+ {
433
+ resourceType: 'GMEvent',
434
+ resourceVersion: '1.0',
435
+ isDnD: false,
436
+ eventNum: GM_EVENTS.CREATE.num,
437
+ eventType: GM_EVENTS.CREATE.type,
438
+ },
439
+ {
440
+ resourceType: 'GMEvent',
441
+ resourceVersion: '1.0',
442
+ isDnD: false,
443
+ eventNum: GM_EVENTS.STEP.num,
444
+ eventType: GM_EVENTS.STEP.type,
445
+ },
446
+ ];
447
+ // Add draw event if sprite
448
+ if (entity.components.some((c) => c.type === 'sprite')) {
449
+ events.push({
450
+ resourceType: 'GMEvent',
451
+ resourceVersion: '1.0',
452
+ isDnD: false,
453
+ eventNum: GM_EVENTS.DRAW.num,
454
+ eventType: GM_EVENTS.DRAW.type,
455
+ });
456
+ }
457
+ return events;
458
+ }
459
+ extractEntityProperties(entity) {
460
+ const props = [];
461
+ // Add common properties
462
+ for (const comp of entity.components) {
463
+ if (comp.properties) {
464
+ for (const [key, value] of Object.entries(comp.properties)) {
465
+ const varType = this.getGMLVarType(value);
466
+ props.push({
467
+ resourceType: 'GMObjectProperty',
468
+ resourceVersion: '1.0',
469
+ name: `${comp.type}_${key}`,
470
+ varType,
471
+ value: this.valueToGML(value),
472
+ });
473
+ }
474
+ }
475
+ }
476
+ return props;
477
+ }
478
+ getGMLVarType(value) {
479
+ if (typeof value === 'number') {
480
+ return Number.isInteger(value) ? 0 : 2;
481
+ } // Int or Real
482
+ if (typeof value === 'string') {
483
+ return 1;
484
+ } // String
485
+ if (typeof value === 'boolean') {
486
+ return 3;
487
+ } // Bool
488
+ if (Array.isArray(value)) {
489
+ return 5;
490
+ } // Array
491
+ return 1; // Default to string
492
+ }
493
+ valueToGML(value) {
494
+ if (typeof value === 'string') {
495
+ return `"${value}"`;
496
+ }
497
+ if (typeof value === 'boolean') {
498
+ return value ? 'true' : 'false';
499
+ }
500
+ if (Array.isArray(value)) {
501
+ return JSON.stringify(value);
502
+ }
503
+ if (typeof value === 'object' && value !== null) {
504
+ return JSON.stringify(value);
505
+ }
506
+ return String(value);
507
+ }
508
+ async generateEventScripts(entity, objectName) {
509
+ // Create event
510
+ let createScript = `/// @description Initialize ${entity.name ?? objectName}
511
+ event_inherited();
512
+
513
+ entity_id = "${entity.id}";
514
+ `;
515
+ // Add tag initialization
516
+ if (entity.tags && entity.tags.length > 0) {
517
+ createScript += `tags = ${JSON.stringify(entity.tags)};\n`;
518
+ }
519
+ // Add component-specific initialization
520
+ for (const comp of entity.components) {
521
+ createScript += this.generateComponentInit(comp);
522
+ }
523
+ this.addTextFile(`objects/${objectName}/Create_0.gml`, createScript);
524
+ // Step event
525
+ const stepScript = `/// @description Step event for ${entity.name ?? objectName}
526
+
527
+ // Add update logic here
528
+ `;
529
+ this.addTextFile(`objects/${objectName}/Step_0.gml`, stepScript);
530
+ // Draw event (if has sprite)
531
+ if (entity.components.some((c) => c.type === 'sprite')) {
532
+ const drawScript = `/// @description Draw event
533
+ draw_self();
534
+ `;
535
+ this.addTextFile(`objects/${objectName}/Draw_0.gml`, drawScript);
536
+ }
537
+ }
538
+ generateComponentInit(comp) {
539
+ let code = `\n// ${comp.type} component\n`;
540
+ switch (comp.type) {
541
+ case 'sprite':
542
+ const color = comp.properties?.['color'];
543
+ if (color) {
544
+ code += `image_blend = ${this.colorToGML(color)};\n`;
545
+ }
546
+ break;
547
+ case 'rigidbody':
548
+ code += `phy_active = true;\n`;
549
+ if (comp.properties?.['mass']) {
550
+ code += `phy_mass = ${comp.properties['mass']};\n`;
551
+ }
552
+ if (comp.properties?.['linearDamping']) {
553
+ code += `phy_linear_damping = ${comp.properties['linearDamping']};\n`;
554
+ }
555
+ break;
556
+ case 'audioSource':
557
+ if (comp.properties?.['playOnAwake']) {
558
+ const clip = comp.properties['clip'];
559
+ if (clip) {
560
+ code += `audio_play_sound(snd_${clip}, 1, ${comp.properties['loop'] ? 'true' : 'false'});\n`;
561
+ }
562
+ }
563
+ break;
564
+ }
565
+ return code;
566
+ }
567
+ colorToGML(color) {
568
+ if (color.startsWith('#')) {
569
+ // Convert hex to GML color (BGR format)
570
+ const hex = color.replace('#', '');
571
+ const r = parseInt(hex.substr(0, 2), 16);
572
+ const g = parseInt(hex.substr(2, 2), 16);
573
+ const b = parseInt(hex.substr(4, 2), 16);
574
+ return `make_colour_rgb(${r}, ${g}, ${b})`;
575
+ }
576
+ return 'c_white';
577
+ }
578
+ /* ── Rooms ──────────────────────────────────────────────────── */
579
+ async generateRoom(scene, project, options) {
580
+ const roomName = `rm_${scene.name.replace(/[^a-zA-Z0-9_]/g, '_')}`;
581
+ const width = project.settings.resolution.width;
582
+ const height = project.settings.resolution.height;
583
+ const platformOpts = options.platformOptions ?? {};
584
+ const instances = [];
585
+ const instanceOrder = [];
586
+ // Generate instances from entities
587
+ for (const entity of scene.entities) {
588
+ const objName = entity.prefabId
589
+ ? `obj_${entity.prefabId}`
590
+ : entity.type
591
+ ? `obj_${entity.type}`
592
+ : 'obj_nice2dev_base';
593
+ const instanceName = `inst_${generateGMUUID().substr(0, 8)}`;
594
+ const pos = entity.position ?? { x: 0, y: 0 };
595
+ instances.push({
596
+ resourceType: 'GMRoomInstance',
597
+ resourceVersion: '1.0',
598
+ name: instanceName,
599
+ properties: [],
600
+ isDnd: false,
601
+ objectId: { name: objName, path: `objects/${objName}/${objName}.yy` },
602
+ inheritCode: false,
603
+ hasCreationCode: false,
604
+ colour: 4294967295,
605
+ rotation: entity.rotation ?? 0,
606
+ scaleX: entity.scale?.x ?? 1,
607
+ scaleY: entity.scale?.y ?? 1,
608
+ x: pos.x,
609
+ y: pos.y,
610
+ });
611
+ instanceOrder.push({ name: instanceName, path: `rooms/${roomName}/${roomName}.yy` });
612
+ }
613
+ // Build layers
614
+ const layers = [
615
+ {
616
+ resourceType: 'GMRLayer',
617
+ resourceVersion: '1.0',
618
+ name: 'Instances',
619
+ visible: true,
620
+ depth: 0,
621
+ userdefinedDepth: false,
622
+ inheritLayerDepth: false,
623
+ inheritLayerSettings: false,
624
+ instances,
625
+ },
626
+ {
627
+ resourceType: 'GMRBackgroundLayer',
628
+ resourceVersion: '1.0',
629
+ name: 'Background',
630
+ visible: true,
631
+ depth: 100,
632
+ userdefinedDepth: false,
633
+ inheritLayerDepth: false,
634
+ inheritLayerSettings: false,
635
+ },
636
+ ];
637
+ // Add tile layers from tilemaps
638
+ if (scene.tilemaps) {
639
+ for (const tilemap of scene.tilemaps) {
640
+ layers.push(this.createTileLayer(tilemap, project));
641
+ }
642
+ }
643
+ const room = {
644
+ resourceType: 'GMRoom',
645
+ resourceVersion: '1.0',
646
+ name: roomName,
647
+ isDnd: false,
648
+ creationCodeFile: '',
649
+ inheritCode: false,
650
+ inheritCreationOrder: false,
651
+ inheritLayers: false,
652
+ instanceCreationOrder: instanceOrder,
653
+ layers,
654
+ parent: { name: 'Rooms', path: 'folders/Rooms.yy' },
655
+ roomSettings: {
656
+ inheritRoomSettings: false,
657
+ Width: width,
658
+ Height: height,
659
+ persistent: false,
660
+ },
661
+ viewSettings: {
662
+ inheritViewSettings: false,
663
+ enableViews: true,
664
+ clearViewBackground: true,
665
+ clearDisplayBuffer: true,
666
+ },
667
+ physicsSettings: {
668
+ inheritPhysicsSettings: false,
669
+ PhysicsWorld: platformOpts.enablePhysics ?? project.settings.physics.enabled,
670
+ PhysicsWorldGravityX: project.settings.physics.gravity.x,
671
+ PhysicsWorldGravityY: project.settings.physics.gravity.y,
672
+ PhysicsWorldPixToMetres: 0.1,
673
+ },
674
+ };
675
+ this.addTextFile(`rooms/${roomName}/${roomName}.yy`, JSON.stringify(room, null, 2));
676
+ this.resourceTree.push({
677
+ id: { name: roomName, path: `rooms/${roomName}/${roomName}.yy` },
678
+ });
679
+ }
680
+ createTileLayer(tilemap, project) {
681
+ return {
682
+ resourceType: 'GMRTileLayer',
683
+ resourceVersion: '1.1',
684
+ name: tilemap.name,
685
+ visible: true,
686
+ depth: 50,
687
+ userdefinedDepth: false,
688
+ inheritLayerDepth: false,
689
+ inheritLayerSettings: false,
690
+ tiles: {
691
+ SerialiseWidth: tilemap.width,
692
+ SerialiseHeight: tilemap.height,
693
+ TileSerialiseData: tilemap.layers[0]?.data ?? [],
694
+ },
695
+ };
696
+ }
697
+ /* ── Sprites ────────────────────────────────────────────────── */
698
+ async generateSprite(asset, options) {
699
+ const spriteName = `spr_${asset.name.replace(/[^a-zA-Z0-9_]/g, '_')}`;
700
+ const platformOpts = options.platformOptions ?? {};
701
+ // Determine origin based on options
702
+ let originX = 0, originY = 0;
703
+ switch (platformOpts.spriteOrigin) {
704
+ case 'center':
705
+ originX = 0.5;
706
+ originY = 0.5;
707
+ break;
708
+ case 'bottom-center':
709
+ originX = 0.5;
710
+ originY = 1;
711
+ break;
712
+ default: // top-left
713
+ originX = 0;
714
+ originY = 0;
715
+ }
716
+ const spriteDef = {
717
+ resourceType: 'GMSprite',
718
+ resourceVersion: '1.0',
719
+ name: spriteName,
720
+ bboxMode: 0,
721
+ bbox_bottom: 31,
722
+ bbox_left: 0,
723
+ bbox_right: 31,
724
+ bbox_top: 0,
725
+ collisionKind: 1,
726
+ collisionTolerance: 0,
727
+ DynamicTexturePage: false,
728
+ edgeFiltering: false,
729
+ For3D: false,
730
+ frames: [
731
+ {
732
+ resourceType: 'GMSpriteFrame',
733
+ resourceVersion: '1.1',
734
+ name: generateGMUUID(),
735
+ },
736
+ ],
737
+ gridX: 0,
738
+ gridY: 0,
739
+ height: 32,
740
+ HTile: false,
741
+ layers: [
742
+ {
743
+ resourceType: 'GMImageLayer',
744
+ resourceVersion: '1.0',
745
+ name: generateGMUUID(),
746
+ blendMode: 0,
747
+ displayName: 'default',
748
+ isLocked: false,
749
+ opacity: 100,
750
+ visible: true,
751
+ },
752
+ ],
753
+ nineSlice: null,
754
+ origin: platformOpts.spriteOrigin === 'center'
755
+ ? 4
756
+ : platformOpts.spriteOrigin === 'bottom-center'
757
+ ? 7
758
+ : 0,
759
+ parent: { name: 'Sprites', path: 'folders/Sprites.yy' },
760
+ preMultiplyAlpha: false,
761
+ sequence: {
762
+ resourceType: 'GMSequence',
763
+ resourceVersion: '1.4',
764
+ name: spriteName,
765
+ autoRecord: true,
766
+ backdropHeight: 768,
767
+ backdropImageOpacity: 0.5,
768
+ backdropImagePath: '',
769
+ backdropWidth: 1366,
770
+ backdropXOffset: 0.0,
771
+ backdropYOffset: 0.0,
772
+ events: {
773
+ Keyframes: [],
774
+ resourceType: 'KeyframeStore<MessageEventKeyframe>',
775
+ resourceVersion: '1.0',
776
+ },
777
+ eventStubScript: null,
778
+ eventToFunction: {},
779
+ length: 1.0,
780
+ lockOrigin: false,
781
+ moments: {
782
+ Keyframes: [],
783
+ resourceType: 'KeyframeStore<MomentsEventKeyframe>',
784
+ resourceVersion: '1.0',
785
+ },
786
+ playback: 1,
787
+ playbackSpeed: 15.0,
788
+ playbackSpeedType: 0,
789
+ showBackdrop: true,
790
+ showBackdropImage: false,
791
+ spriteId: { name: spriteName, path: `sprites/${spriteName}/${spriteName}.yy` },
792
+ timeUnits: 1,
793
+ tracks: [],
794
+ volume: 1.0,
795
+ xorigin: Math.floor(32 * originX),
796
+ yorigin: Math.floor(32 * originY),
797
+ },
798
+ swatchColours: null,
799
+ swfPrecision: 2.525,
800
+ textureGroupId: { name: 'Default', path: 'texturegroups/Default' },
801
+ type: 0,
802
+ VTile: false,
803
+ width: 32,
804
+ };
805
+ this.addTextFile(`sprites/${spriteName}/${spriteName}.yy`, JSON.stringify(spriteDef, null, 2));
806
+ // Add warning for actual image file
807
+ this.addWarning('SPRITE_MANUAL', `Sprite "${asset.name}" requires manual image import`, `Copy sprite image to sprites/${spriteName}/ folder`);
808
+ this.resourceTree.push({
809
+ id: { name: spriteName, path: `sprites/${spriteName}/${spriteName}.yy` },
810
+ });
811
+ }
812
+ /* ── Sounds ─────────────────────────────────────────────────── */
813
+ async generateSound(asset, options) {
814
+ const soundName = `snd_${asset.name.replace(/[^a-zA-Z0-9_]/g, '_')}`;
815
+ const soundDef = {
816
+ resourceType: 'GMSound',
817
+ resourceVersion: '1.0',
818
+ name: soundName,
819
+ audioGroupId: { name: 'audiogroup_default', path: 'audiogroups/audiogroup_default' },
820
+ bitDepth: 1,
821
+ bitRate: 128,
822
+ compression: 0,
823
+ conversionMode: 0,
824
+ duration: 1.0,
825
+ parent: { name: 'Sounds', path: 'folders/Sounds.yy' },
826
+ preload: false,
827
+ sampleRate: 44100,
828
+ soundFile: `${soundName}.ogg`,
829
+ type: 0,
830
+ volume: 1.0,
831
+ };
832
+ this.addTextFile(`sounds/${soundName}/${soundName}.yy`, JSON.stringify(soundDef, null, 2));
833
+ this.addWarning('SOUND_MANUAL', `Sound "${asset.name}" requires manual audio import`, `Copy audio file to sounds/${soundName}/ folder as ${soundName}.ogg`);
834
+ this.resourceTree.push({
835
+ id: { name: soundName, path: `sounds/${soundName}/${soundName}.yy` },
836
+ });
837
+ }
838
+ }
839
+ /* ── Factory ──────────────────────────────────────────────────── */
840
+ function createGameMakerExporter() {
841
+ return new GameMakerExporter();
842
+ }
843
+
844
+ exports.GameMakerExporter = GameMakerExporter;
845
+ exports.createGameMakerExporter = createGameMakerExporter;
846
+ //# sourceMappingURL=GameMakerExporter.js.map