@nice2dev/game-engine 1.0.5 → 1.0.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (721) hide show
  1. package/dist/cjs/accessibility/Accessibility.js +55 -20
  2. package/dist/cjs/accessibility/Accessibility.js.map +1 -1
  3. package/dist/cjs/ai/AI.js +74 -40
  4. package/dist/cjs/ai/AI.js.map +1 -1
  5. package/dist/cjs/ai/BehaviorTree.js +39 -47
  6. package/dist/cjs/ai/BehaviorTree.js.map +1 -1
  7. package/dist/cjs/ai/StateMachine.js +64 -100
  8. package/dist/cjs/ai/StateMachine.js.map +1 -1
  9. package/dist/cjs/animation/Animation.js +58 -34
  10. package/dist/cjs/animation/Animation.js.map +1 -1
  11. package/dist/cjs/audio/AudioAdvanced.js +71 -37
  12. package/dist/cjs/audio/AudioAdvanced.js.map +1 -1
  13. package/dist/cjs/audio/AudioBridge.js +61 -49
  14. package/dist/cjs/audio/AudioBridge.js.map +1 -1
  15. package/dist/cjs/audio/AudioManager.js +45 -29
  16. package/dist/cjs/audio/AudioManager.js.map +1 -1
  17. package/dist/cjs/build-cloud/BuildOrchestration.js +1142 -0
  18. package/dist/cjs/build-cloud/BuildOrchestration.js.map +1 -0
  19. package/dist/cjs/build-cloud/GodotBuildCloud.js +722 -0
  20. package/dist/cjs/build-cloud/GodotBuildCloud.js.map +1 -0
  21. package/dist/cjs/build-cloud/UnityBuildCloud.js +652 -0
  22. package/dist/cjs/build-cloud/UnityBuildCloud.js.map +1 -0
  23. package/dist/cjs/build-cloud/UnrealBuildCloud.js +674 -0
  24. package/dist/cjs/build-cloud/UnrealBuildCloud.js.map +1 -0
  25. package/dist/cjs/core/EventBus.js +2 -1
  26. package/dist/cjs/core/EventBus.js.map +1 -1
  27. package/dist/cjs/core/GameConfig.js +1 -1
  28. package/dist/cjs/core/GameConfig.js.map +1 -1
  29. package/dist/cjs/core/GameLoop.js +6 -3
  30. package/dist/cjs/core/GameLoop.js.map +1 -1
  31. package/dist/cjs/core/ServiceLocator.js +1 -2
  32. package/dist/cjs/core/ServiceLocator.js.map +1 -1
  33. package/dist/cjs/devtools/DevTools.js +73 -43
  34. package/dist/cjs/devtools/DevTools.js.map +1 -1
  35. package/dist/cjs/devtools/DeveloperExperience.js +84 -42
  36. package/dist/cjs/devtools/DeveloperExperience.js.map +1 -1
  37. package/dist/cjs/devtools/GameplayAnalytics.js +71 -43
  38. package/dist/cjs/devtools/GameplayAnalytics.js.map +1 -1
  39. package/dist/cjs/dialogue/DialogueSystem.js +153 -129
  40. package/dist/cjs/dialogue/DialogueSystem.js.map +1 -1
  41. package/dist/cjs/docs/DocGenerator.js +70 -28
  42. package/dist/cjs/docs/DocGenerator.js.map +1 -1
  43. package/dist/cjs/ecs/World.js +159 -33
  44. package/dist/cjs/ecs/World.js.map +1 -1
  45. package/dist/cjs/editor/AchievementEditor.js +650 -0
  46. package/dist/cjs/editor/AchievementEditor.js.map +1 -0
  47. package/dist/cjs/editor/AdvancedEditor.js +95 -23
  48. package/dist/cjs/editor/AdvancedEditor.js.map +1 -1
  49. package/dist/cjs/editor/AnimationRetargeting.js +742 -0
  50. package/dist/cjs/editor/AnimationRetargeting.js.map +1 -0
  51. package/dist/cjs/editor/AssetBrowser.js +1191 -0
  52. package/dist/cjs/editor/AssetBrowser.js.map +1 -0
  53. package/dist/cjs/editor/AssetManager.js +22 -14
  54. package/dist/cjs/editor/AssetManager.js.map +1 -1
  55. package/dist/cjs/editor/ConsolePro.js +1092 -0
  56. package/dist/cjs/editor/ConsolePro.js.map +1 -0
  57. package/dist/cjs/editor/CraftingEditor.js +749 -0
  58. package/dist/cjs/editor/CraftingEditor.js.map +1 -0
  59. package/dist/cjs/editor/DebugTools.js +46 -23
  60. package/dist/cjs/editor/DebugTools.js.map +1 -1
  61. package/dist/cjs/editor/DialogueSystem.js +924 -0
  62. package/dist/cjs/editor/DialogueSystem.js.map +1 -0
  63. package/dist/cjs/editor/LeaderboardSystem.js +496 -0
  64. package/dist/cjs/editor/LeaderboardSystem.js.map +1 -0
  65. package/dist/cjs/editor/NiceGameEditor.js +532 -142
  66. package/dist/cjs/editor/NiceGameEditor.js.map +1 -1
  67. package/dist/cjs/editor/PrefabSystem.js +864 -0
  68. package/dist/cjs/editor/PrefabSystem.js.map +1 -0
  69. package/dist/cjs/editor/ProfilerPanel.js +716 -0
  70. package/dist/cjs/editor/ProfilerPanel.js.map +1 -0
  71. package/dist/cjs/editor/QuestEditor.js +850 -0
  72. package/dist/cjs/editor/QuestEditor.js.map +1 -0
  73. package/dist/cjs/editor/ReplaySystem.js +655 -0
  74. package/dist/cjs/editor/ReplaySystem.js.map +1 -0
  75. package/dist/cjs/editor/SceneEditor.js +33 -13
  76. package/dist/cjs/editor/SceneEditor.js.map +1 -1
  77. package/dist/cjs/editor/ScreenshotMode.js +710 -0
  78. package/dist/cjs/editor/ScreenshotMode.js.map +1 -0
  79. package/dist/cjs/editor/ShaderGraph.js +7 -6
  80. package/dist/cjs/editor/ShaderGraph.js.map +1 -1
  81. package/dist/cjs/editor/TimelineEditor.js +36 -30
  82. package/dist/cjs/editor/TimelineEditor.js.map +1 -1
  83. package/dist/cjs/editor/UndoRedoPro.js +920 -0
  84. package/dist/cjs/editor/UndoRedoPro.js.map +1 -0
  85. package/dist/cjs/editor/VRARMode.js +658 -0
  86. package/dist/cjs/editor/VRARMode.js.map +1 -0
  87. package/dist/cjs/engine/NiceGameEngine.js +12 -10
  88. package/dist/cjs/engine/NiceGameEngine.js.map +1 -1
  89. package/dist/cjs/engine/SaveSystemV2.js +73 -37
  90. package/dist/cjs/engine/SaveSystemV2.js.map +1 -1
  91. package/dist/cjs/enterprise/Enterprise.js +92 -44
  92. package/dist/cjs/enterprise/Enterprise.js.map +1 -1
  93. package/dist/cjs/export/BevyExporter.js +998 -0
  94. package/dist/cjs/export/BevyExporter.js.map +1 -0
  95. package/dist/cjs/export/CocosExporter.js +706 -0
  96. package/dist/cjs/export/CocosExporter.js.map +1 -0
  97. package/dist/cjs/export/Construct3Exporter.js +832 -0
  98. package/dist/cjs/export/Construct3Exporter.js.map +1 -0
  99. package/dist/cjs/export/DefoldExporter.js +1106 -0
  100. package/dist/cjs/export/DefoldExporter.js.map +1 -0
  101. package/dist/cjs/export/GDevelopExporter.js +748 -0
  102. package/dist/cjs/export/GDevelopExporter.js.map +1 -0
  103. package/dist/cjs/export/GameMakerExporter.js +846 -0
  104. package/dist/cjs/export/GameMakerExporter.js.map +1 -0
  105. package/dist/cjs/export/GodotExporter.js +45 -50
  106. package/dist/cjs/export/GodotExporter.js.map +1 -1
  107. package/dist/cjs/export/MinecraftBedrockExporter.js +606 -0
  108. package/dist/cjs/export/MinecraftBedrockExporter.js.map +1 -0
  109. package/dist/cjs/export/MonoGameExporter.js +1334 -0
  110. package/dist/cjs/export/MonoGameExporter.js.map +1 -0
  111. package/dist/cjs/export/Pico8Exporter.js +846 -0
  112. package/dist/cjs/export/Pico8Exporter.js.map +1 -0
  113. package/dist/cjs/export/PlatformExporter.js +4 -5
  114. package/dist/cjs/export/PlatformExporter.js.map +1 -1
  115. package/dist/cjs/export/RPGMakerExporter.js +906 -0
  116. package/dist/cjs/export/RPGMakerExporter.js.map +1 -0
  117. package/dist/cjs/export/RobloxExporter.js +943 -0
  118. package/dist/cjs/export/RobloxExporter.js.map +1 -0
  119. package/dist/cjs/export/Solar2DExporter.js +1283 -0
  120. package/dist/cjs/export/Solar2DExporter.js.map +1 -0
  121. package/dist/cjs/export/ThreeJSExporter.js +52 -55
  122. package/dist/cjs/export/ThreeJSExporter.js.map +1 -1
  123. package/dist/cjs/export/Tic80Exporter.js +1315 -0
  124. package/dist/cjs/export/Tic80Exporter.js.map +1 -0
  125. package/dist/cjs/export/UnityExporter.js +41 -56
  126. package/dist/cjs/export/UnityExporter.js.map +1 -1
  127. package/dist/cjs/export/UnrealExporter.js +962 -0
  128. package/dist/cjs/export/UnrealExporter.js.map +1 -0
  129. package/dist/cjs/export/WebExporter.js +42 -50
  130. package/dist/cjs/export/WebExporter.js.map +1 -1
  131. package/dist/cjs/export/index.js +50 -2
  132. package/dist/cjs/export/index.js.map +1 -1
  133. package/dist/cjs/godot-integration/GodotAssetLibrary.js +716 -0
  134. package/dist/cjs/godot-integration/GodotAssetLibrary.js.map +1 -0
  135. package/dist/cjs/godot-integration/GodotImport.js +1069 -0
  136. package/dist/cjs/godot-integration/GodotImport.js.map +1 -0
  137. package/dist/cjs/godot-integration/GodotLiveLink.js +962 -0
  138. package/dist/cjs/godot-integration/GodotLiveLink.js.map +1 -0
  139. package/dist/cjs/godot-integration/components/GodotProjectBrowser.js +668 -0
  140. package/dist/cjs/godot-integration/components/GodotProjectBrowser.js.map +1 -0
  141. package/dist/cjs/i18n/I18n.js +56 -30
  142. package/dist/cjs/i18n/I18n.js.map +1 -1
  143. package/dist/cjs/i18n/useTranslation.js +4 -4
  144. package/dist/cjs/i18n/useTranslation.js.map +1 -1
  145. package/dist/cjs/import/AsepriteImporter.js +15 -19
  146. package/dist/cjs/import/AsepriteImporter.js.map +1 -1
  147. package/dist/cjs/import/DragonBonesImporter.js +36 -40
  148. package/dist/cjs/import/DragonBonesImporter.js.map +1 -1
  149. package/dist/cjs/import/GameMakerImporter.js +11 -17
  150. package/dist/cjs/import/GameMakerImporter.js.map +1 -1
  151. package/dist/cjs/import/GodotSceneImporter.js +43 -29
  152. package/dist/cjs/import/GodotSceneImporter.js.map +1 -1
  153. package/dist/cjs/import/LDtkImporter.js +16 -17
  154. package/dist/cjs/import/LDtkImporter.js.map +1 -1
  155. package/dist/cjs/import/Live2DImporter.js +16 -19
  156. package/dist/cjs/import/Live2DImporter.js.map +1 -1
  157. package/dist/cjs/import/NdgFormat.js +28 -35
  158. package/dist/cjs/import/NdgFormat.js.map +1 -1
  159. package/dist/cjs/import/OgmoImporter.js +16 -18
  160. package/dist/cjs/import/OgmoImporter.js.map +1 -1
  161. package/dist/cjs/import/RPGMakerImporter.js +5 -6
  162. package/dist/cjs/import/RPGMakerImporter.js.map +1 -1
  163. package/dist/cjs/import/SceneImporter.js +23 -13
  164. package/dist/cjs/import/SceneImporter.js.map +1 -1
  165. package/dist/cjs/import/SpineImporter.js +20 -20
  166. package/dist/cjs/import/SpineImporter.js.map +1 -1
  167. package/dist/cjs/import/SpriterImporter.js +38 -46
  168. package/dist/cjs/import/SpriterImporter.js.map +1 -1
  169. package/dist/cjs/import/TiledMapImporter.js +20 -24
  170. package/dist/cjs/import/TiledMapImporter.js.map +1 -1
  171. package/dist/cjs/import/UnitySceneImporter.js +15 -15
  172. package/dist/cjs/import/UnitySceneImporter.js.map +1 -1
  173. package/dist/cjs/index.js +516 -4
  174. package/dist/cjs/index.js.map +1 -1
  175. package/dist/cjs/input/GamepadNavigation.js +82 -47
  176. package/dist/cjs/input/GamepadNavigation.js.map +1 -1
  177. package/dist/cjs/input/InputManager.js +107 -52
  178. package/dist/cjs/input/InputManager.js.map +1 -1
  179. package/dist/cjs/input/useGamepads.js +35 -29
  180. package/dist/cjs/input/useGamepads.js.map +1 -1
  181. package/dist/cjs/integration/IconSprite.js +39 -21
  182. package/dist/cjs/integration/IconSprite.js.map +1 -1
  183. package/dist/cjs/inventory/InventorySystem.js +218 -127
  184. package/dist/cjs/inventory/InventorySystem.js.map +1 -1
  185. package/dist/cjs/kids/KidMode.js +491 -78
  186. package/dist/cjs/kids/KidMode.js.map +1 -1
  187. package/dist/cjs/kids/KidTools.js +154 -48
  188. package/dist/cjs/kids/KidTools.js.map +1 -1
  189. package/dist/cjs/monetization/Monetization.js +47 -35
  190. package/dist/cjs/monetization/Monetization.js.map +1 -1
  191. package/dist/cjs/multiplayer/LocalMultiplayer.js +48 -26
  192. package/dist/cjs/multiplayer/LocalMultiplayer.js.map +1 -1
  193. package/dist/cjs/multiplayer/MiniGameTypes.js +23 -10
  194. package/dist/cjs/multiplayer/MiniGameTypes.js.map +1 -1
  195. package/dist/cjs/native-engine/AssetPipeline.js +540 -0
  196. package/dist/cjs/native-engine/AssetPipeline.js.map +1 -0
  197. package/dist/cjs/native-engine/AudioEngine.js +825 -0
  198. package/dist/cjs/native-engine/AudioEngine.js.map +1 -0
  199. package/dist/cjs/native-engine/InputSystem.js +1175 -0
  200. package/dist/cjs/native-engine/InputSystem.js.map +1 -0
  201. package/dist/cjs/native-engine/NetworkingSystem.js +825 -0
  202. package/dist/cjs/native-engine/NetworkingSystem.js.map +1 -0
  203. package/dist/cjs/native-engine/PhysicsEngine.js +622 -0
  204. package/dist/cjs/native-engine/PhysicsEngine.js.map +1 -0
  205. package/dist/cjs/native-engine/RenderingEngine.js +371 -0
  206. package/dist/cjs/native-engine/RenderingEngine.js.map +1 -0
  207. package/dist/cjs/native-engine/SceneGraph.js +862 -0
  208. package/dist/cjs/native-engine/SceneGraph.js.map +1 -0
  209. package/dist/cjs/network/MultiplayerTransport.js +63 -33
  210. package/dist/cjs/network/MultiplayerTransport.js.map +1 -1
  211. package/dist/cjs/network/Networking.js +87 -62
  212. package/dist/cjs/network/Networking.js.map +1 -1
  213. package/dist/cjs/pathfinding/Pathfinding.js +71 -26
  214. package/dist/cjs/pathfinding/Pathfinding.js.map +1 -1
  215. package/dist/cjs/performance/AssetStreaming.js +656 -0
  216. package/dist/cjs/performance/AssetStreaming.js.map +1 -0
  217. package/dist/cjs/performance/BenchmarkSuite.js +37 -24
  218. package/dist/cjs/performance/BenchmarkSuite.js.map +1 -1
  219. package/dist/cjs/performance/DeltaCompression.js +566 -0
  220. package/dist/cjs/performance/DeltaCompression.js.map +1 -0
  221. package/dist/cjs/performance/DeterministicPhysics.js +603 -0
  222. package/dist/cjs/performance/DeterministicPhysics.js.map +1 -0
  223. package/dist/cjs/performance/ECSOptimization.js +726 -0
  224. package/dist/cjs/performance/ECSOptimization.js.map +1 -0
  225. package/dist/cjs/performance/HotReload.js +525 -0
  226. package/dist/cjs/performance/HotReload.js.map +1 -0
  227. package/dist/cjs/performance/InputRecording.js +590 -0
  228. package/dist/cjs/performance/InputRecording.js.map +1 -0
  229. package/dist/cjs/performance/InterestManagement.js +532 -0
  230. package/dist/cjs/performance/InterestManagement.js.map +1 -0
  231. package/dist/cjs/performance/LocalizationRuntime.js +472 -0
  232. package/dist/cjs/performance/LocalizationRuntime.js.map +1 -0
  233. package/dist/cjs/performance/MemoryManagement.js +487 -0
  234. package/dist/cjs/performance/MemoryManagement.js.map +1 -0
  235. package/dist/cjs/performance/ModSupport.js +531 -0
  236. package/dist/cjs/performance/ModSupport.js.map +1 -0
  237. package/dist/cjs/performance/MultiThreadedPhysics.js +500 -0
  238. package/dist/cjs/performance/MultiThreadedPhysics.js.map +1 -0
  239. package/dist/cjs/performance/NetworkPrediction.js +521 -0
  240. package/dist/cjs/performance/NetworkPrediction.js.map +1 -0
  241. package/dist/cjs/performance/ObjectPooling.js +653 -0
  242. package/dist/cjs/performance/ObjectPooling.js.map +1 -0
  243. package/dist/cjs/performance/Performance.js +64 -25
  244. package/dist/cjs/performance/Performance.js.map +1 -1
  245. package/dist/cjs/performance/PerformanceAdvanced.js +83 -49
  246. package/dist/cjs/performance/PerformanceAdvanced.js.map +1 -1
  247. package/dist/cjs/performance/SaveSystem.js +574 -0
  248. package/dist/cjs/performance/SaveSystem.js.map +1 -0
  249. package/dist/cjs/performance/WebGPURenderer.js +702 -0
  250. package/dist/cjs/performance/WebGPURenderer.js.map +1 -0
  251. package/dist/cjs/physics/PhysicsAdvanced.js +32 -20
  252. package/dist/cjs/physics/PhysicsAdvanced.js.map +1 -1
  253. package/dist/cjs/physics/PhysicsEngine2D.js +63 -36
  254. package/dist/cjs/physics/PhysicsEngine2D.js.map +1 -1
  255. package/dist/cjs/plugins/PluginSDK.js +46 -34
  256. package/dist/cjs/plugins/PluginSDK.js.map +1 -1
  257. package/dist/cjs/plugins/PluginTestKit.js +28 -29
  258. package/dist/cjs/plugins/PluginTestKit.js.map +1 -1
  259. package/dist/cjs/procedural/Procedural.js +24 -17
  260. package/dist/cjs/procedural/Procedural.js.map +1 -1
  261. package/dist/cjs/procedural/WorldBuilding.js +187 -55
  262. package/dist/cjs/procedural/WorldBuilding.js.map +1 -1
  263. package/dist/cjs/quest/QuestSystem.js +145 -111
  264. package/dist/cjs/quest/QuestSystem.js.map +1 -1
  265. package/dist/cjs/release/Release.js +142 -31
  266. package/dist/cjs/release/Release.js.map +1 -1
  267. package/dist/cjs/rendering/Camera2D.js +12 -7
  268. package/dist/cjs/rendering/Camera2D.js.map +1 -1
  269. package/dist/cjs/rendering/Renderer2D.js +62 -26
  270. package/dist/cjs/rendering/Renderer2D.js.map +1 -1
  271. package/dist/cjs/rendering/WebGPURenderPipeline.js +60 -31
  272. package/dist/cjs/rendering/WebGPURenderPipeline.js.map +1 -1
  273. package/dist/cjs/runtime3d/Runtime3D.js +80 -55
  274. package/dist/cjs/runtime3d/Runtime3D.js.map +1 -1
  275. package/dist/cjs/runtime3d/SceneEditor3D.js +20 -11
  276. package/dist/cjs/runtime3d/SceneEditor3D.js.map +1 -1
  277. package/dist/cjs/scene/SceneManager.js +26 -12
  278. package/dist/cjs/scene/SceneManager.js.map +1 -1
  279. package/dist/cjs/scripting/GraphToAST.js +36 -24
  280. package/dist/cjs/scripting/GraphToAST.js.map +1 -1
  281. package/dist/cjs/scripting/LanguageExporter.js +2 -3
  282. package/dist/cjs/scripting/LanguageExporter.js.map +1 -1
  283. package/dist/cjs/scripting/NodeGraph.js +49 -32
  284. package/dist/cjs/scripting/NodeGraph.js.map +1 -1
  285. package/dist/cjs/scripting/ScriptAST.js +19 -6
  286. package/dist/cjs/scripting/ScriptAST.js.map +1 -1
  287. package/dist/cjs/scripting/VisualScripting2.js +13 -12
  288. package/dist/cjs/scripting/VisualScripting2.js.map +1 -1
  289. package/dist/cjs/scripting/exporters/CSharpExporter.js +16 -16
  290. package/dist/cjs/scripting/exporters/CSharpExporter.js.map +1 -1
  291. package/dist/cjs/scripting/exporters/GDScriptExporter.js +3 -6
  292. package/dist/cjs/scripting/exporters/GDScriptExporter.js.map +1 -1
  293. package/dist/cjs/scripting/exporters/LuaExporter.js +5 -9
  294. package/dist/cjs/scripting/exporters/LuaExporter.js.map +1 -1
  295. package/dist/cjs/scripting/exporters/PythonExporter.js +7 -13
  296. package/dist/cjs/scripting/exporters/PythonExporter.js.map +1 -1
  297. package/dist/cjs/scripting/exporters/RustExporter.js +7 -14
  298. package/dist/cjs/scripting/exporters/RustExporter.js.map +1 -1
  299. package/dist/cjs/scripting/exporters/TypeScriptExporter.js +28 -29
  300. package/dist/cjs/scripting/exporters/TypeScriptExporter.js.map +1 -1
  301. package/dist/cjs/social/Social.js +27 -20
  302. package/dist/cjs/social/Social.js.map +1 -1
  303. package/dist/cjs/systems/LightingSystem.js +980 -0
  304. package/dist/cjs/systems/LightingSystem.js.map +1 -0
  305. package/dist/cjs/systems/ParticleSystem2.js +34 -17
  306. package/dist/cjs/systems/ParticleSystem2.js.map +1 -1
  307. package/dist/cjs/systems/PhysicsDebugSystem.js +1228 -0
  308. package/dist/cjs/systems/PhysicsDebugSystem.js.map +1 -0
  309. package/dist/cjs/systems/TerrainSystem.js +1137 -0
  310. package/dist/cjs/systems/TerrainSystem.js.map +1 -0
  311. package/dist/cjs/templates/ActionTemplates.js +144 -24
  312. package/dist/cjs/templates/ActionTemplates.js.map +1 -1
  313. package/dist/cjs/templates/FightingTemplate.js +536 -0
  314. package/dist/cjs/templates/FightingTemplate.js.map +1 -0
  315. package/dist/cjs/templates/MetroidvaniaTemplate.js +523 -0
  316. package/dist/cjs/templates/MetroidvaniaTemplate.js.map +1 -0
  317. package/dist/cjs/templates/PartyTemplates.js +60 -28
  318. package/dist/cjs/templates/PartyTemplates.js.map +1 -1
  319. package/dist/cjs/templates/PuzzleTemplates.js +63 -22
  320. package/dist/cjs/templates/PuzzleTemplates.js.map +1 -1
  321. package/dist/cjs/templates/RPGTemplates.js +29 -15
  322. package/dist/cjs/templates/RPGTemplates.js.map +1 -1
  323. package/dist/cjs/templates/SportsTemplates.js +41 -17
  324. package/dist/cjs/templates/SportsTemplates.js.map +1 -1
  325. package/dist/cjs/templates/StrategyTemplates.js +45 -18
  326. package/dist/cjs/templates/StrategyTemplates.js.map +1 -1
  327. package/dist/cjs/templates/SurvivalTemplate.js +479 -0
  328. package/dist/cjs/templates/SurvivalTemplate.js.map +1 -0
  329. package/dist/cjs/templates/WaveDefense.js +139 -52
  330. package/dist/cjs/templates/WaveDefense.js.map +1 -1
  331. package/dist/cjs/tilemap/Tilemap.js +48 -32
  332. package/dist/cjs/tilemap/Tilemap.js.map +1 -1
  333. package/dist/cjs/tutorials/TutorialBranching.js +111 -42
  334. package/dist/cjs/tutorials/TutorialBranching.js.map +1 -1
  335. package/dist/cjs/tutorials/TutorialEngine.js +152 -80
  336. package/dist/cjs/tutorials/TutorialEngine.js.map +1 -1
  337. package/dist/cjs/tutorials/TutorialOverlay.js +117 -40
  338. package/dist/cjs/tutorials/TutorialOverlay.js.map +1 -1
  339. package/dist/cjs/ui/GameUI.js +69 -42
  340. package/dist/cjs/ui/GameUI.js.map +1 -1
  341. package/dist/cjs/unity-integration/UnityAssetStore.js +754 -0
  342. package/dist/cjs/unity-integration/UnityAssetStore.js.map +1 -0
  343. package/dist/cjs/unity-integration/UnityImport.js +1252 -0
  344. package/dist/cjs/unity-integration/UnityImport.js.map +1 -0
  345. package/dist/cjs/unity-integration/UnityLiveLink.js +1022 -0
  346. package/dist/cjs/unity-integration/UnityLiveLink.js.map +1 -0
  347. package/dist/cjs/unity-integration/components/UnityAssetStoreBrowser.js +796 -0
  348. package/dist/cjs/unity-integration/components/UnityAssetStoreBrowser.js.map +1 -0
  349. package/dist/cjs/unity-integration/components/UnityProjectBrowser.js +833 -0
  350. package/dist/cjs/unity-integration/components/UnityProjectBrowser.js.map +1 -0
  351. package/dist/cjs/unreal-integration/UnrealImport.js +442 -0
  352. package/dist/cjs/unreal-integration/UnrealImport.js.map +1 -0
  353. package/dist/cjs/unreal-integration/UnrealLiveLink.js +1186 -0
  354. package/dist/cjs/unreal-integration/UnrealLiveLink.js.map +1 -0
  355. package/dist/cjs/unreal-integration/UnrealMarketplace.js +497 -0
  356. package/dist/cjs/unreal-integration/UnrealMarketplace.js.map +1 -0
  357. package/dist/cjs/unreal-integration/components/UnrealProjectBrowser.js +835 -0
  358. package/dist/cjs/unreal-integration/components/UnrealProjectBrowser.js.map +1 -0
  359. package/dist/cjs/xr/ARVR.js +32 -9
  360. package/dist/cjs/xr/ARVR.js.map +1 -1
  361. package/dist/esm/accessibility/Accessibility.js +55 -20
  362. package/dist/esm/accessibility/Accessibility.js.map +1 -1
  363. package/dist/esm/ai/AI.js +74 -40
  364. package/dist/esm/ai/AI.js.map +1 -1
  365. package/dist/esm/ai/BehaviorTree.js +39 -47
  366. package/dist/esm/ai/BehaviorTree.js.map +1 -1
  367. package/dist/esm/ai/StateMachine.js +65 -99
  368. package/dist/esm/ai/StateMachine.js.map +1 -1
  369. package/dist/esm/animation/Animation.js +58 -34
  370. package/dist/esm/animation/Animation.js.map +1 -1
  371. package/dist/esm/audio/AudioAdvanced.js +71 -37
  372. package/dist/esm/audio/AudioAdvanced.js.map +1 -1
  373. package/dist/esm/audio/AudioBridge.js +61 -49
  374. package/dist/esm/audio/AudioBridge.js.map +1 -1
  375. package/dist/esm/audio/AudioManager.js +45 -29
  376. package/dist/esm/audio/AudioManager.js.map +1 -1
  377. package/dist/esm/build-cloud/BuildOrchestration.js +1129 -0
  378. package/dist/esm/build-cloud/BuildOrchestration.js.map +1 -0
  379. package/dist/esm/build-cloud/GodotBuildCloud.js +715 -0
  380. package/dist/esm/build-cloud/GodotBuildCloud.js.map +1 -0
  381. package/dist/esm/build-cloud/UnityBuildCloud.js +643 -0
  382. package/dist/esm/build-cloud/UnityBuildCloud.js.map +1 -0
  383. package/dist/esm/build-cloud/UnrealBuildCloud.js +668 -0
  384. package/dist/esm/build-cloud/UnrealBuildCloud.js.map +1 -0
  385. package/dist/esm/core/EventBus.js +2 -1
  386. package/dist/esm/core/EventBus.js.map +1 -1
  387. package/dist/esm/core/GameConfig.js +1 -1
  388. package/dist/esm/core/GameConfig.js.map +1 -1
  389. package/dist/esm/core/GameLoop.js +6 -3
  390. package/dist/esm/core/GameLoop.js.map +1 -1
  391. package/dist/esm/core/ServiceLocator.js +1 -2
  392. package/dist/esm/core/ServiceLocator.js.map +1 -1
  393. package/dist/esm/devtools/DevTools.js +73 -43
  394. package/dist/esm/devtools/DevTools.js.map +1 -1
  395. package/dist/esm/devtools/DeveloperExperience.js +84 -42
  396. package/dist/esm/devtools/DeveloperExperience.js.map +1 -1
  397. package/dist/esm/devtools/GameplayAnalytics.js +71 -43
  398. package/dist/esm/devtools/GameplayAnalytics.js.map +1 -1
  399. package/dist/esm/dialogue/DialogueSystem.js +153 -129
  400. package/dist/esm/dialogue/DialogueSystem.js.map +1 -1
  401. package/dist/esm/docs/DocGenerator.js +70 -28
  402. package/dist/esm/docs/DocGenerator.js.map +1 -1
  403. package/dist/esm/ecs/World.js +159 -33
  404. package/dist/esm/ecs/World.js.map +1 -1
  405. package/dist/esm/editor/AchievementEditor.js +645 -0
  406. package/dist/esm/editor/AchievementEditor.js.map +1 -0
  407. package/dist/esm/editor/AdvancedEditor.js +95 -23
  408. package/dist/esm/editor/AdvancedEditor.js.map +1 -1
  409. package/dist/esm/editor/AnimationRetargeting.js +738 -0
  410. package/dist/esm/editor/AnimationRetargeting.js.map +1 -0
  411. package/dist/esm/editor/AssetBrowser.js +1184 -0
  412. package/dist/esm/editor/AssetBrowser.js.map +1 -0
  413. package/dist/esm/editor/AssetManager.js +22 -14
  414. package/dist/esm/editor/AssetManager.js.map +1 -1
  415. package/dist/esm/editor/ConsolePro.js +1085 -0
  416. package/dist/esm/editor/ConsolePro.js.map +1 -0
  417. package/dist/esm/editor/CraftingEditor.js +744 -0
  418. package/dist/esm/editor/CraftingEditor.js.map +1 -0
  419. package/dist/esm/editor/DebugTools.js +46 -23
  420. package/dist/esm/editor/DebugTools.js.map +1 -1
  421. package/dist/esm/editor/DialogueSystem.js +918 -0
  422. package/dist/esm/editor/DialogueSystem.js.map +1 -0
  423. package/dist/esm/editor/LeaderboardSystem.js +491 -0
  424. package/dist/esm/editor/LeaderboardSystem.js.map +1 -0
  425. package/dist/esm/editor/NiceGameEditor.js +532 -142
  426. package/dist/esm/editor/NiceGameEditor.js.map +1 -1
  427. package/dist/esm/editor/PrefabSystem.js +858 -0
  428. package/dist/esm/editor/PrefabSystem.js.map +1 -0
  429. package/dist/esm/editor/ProfilerPanel.js +710 -0
  430. package/dist/esm/editor/ProfilerPanel.js.map +1 -0
  431. package/dist/esm/editor/QuestEditor.js +846 -0
  432. package/dist/esm/editor/QuestEditor.js.map +1 -0
  433. package/dist/esm/editor/ReplaySystem.js +648 -0
  434. package/dist/esm/editor/ReplaySystem.js.map +1 -0
  435. package/dist/esm/editor/SceneEditor.js +33 -13
  436. package/dist/esm/editor/SceneEditor.js.map +1 -1
  437. package/dist/esm/editor/ScreenshotMode.js +702 -0
  438. package/dist/esm/editor/ScreenshotMode.js.map +1 -0
  439. package/dist/esm/editor/ShaderGraph.js +7 -6
  440. package/dist/esm/editor/ShaderGraph.js.map +1 -1
  441. package/dist/esm/editor/TimelineEditor.js +37 -30
  442. package/dist/esm/editor/TimelineEditor.js.map +1 -1
  443. package/dist/esm/editor/UndoRedoPro.js +914 -0
  444. package/dist/esm/editor/UndoRedoPro.js.map +1 -0
  445. package/dist/esm/editor/VRARMode.js +653 -0
  446. package/dist/esm/editor/VRARMode.js.map +1 -0
  447. package/dist/esm/engine/NiceGameEngine.js +12 -10
  448. package/dist/esm/engine/NiceGameEngine.js.map +1 -1
  449. package/dist/esm/engine/SaveSystemV2.js +73 -37
  450. package/dist/esm/engine/SaveSystemV2.js.map +1 -1
  451. package/dist/esm/enterprise/Enterprise.js +92 -44
  452. package/dist/esm/enterprise/Enterprise.js.map +1 -1
  453. package/dist/esm/export/BevyExporter.js +995 -0
  454. package/dist/esm/export/BevyExporter.js.map +1 -0
  455. package/dist/esm/export/CocosExporter.js +703 -0
  456. package/dist/esm/export/CocosExporter.js.map +1 -0
  457. package/dist/esm/export/Construct3Exporter.js +829 -0
  458. package/dist/esm/export/Construct3Exporter.js.map +1 -0
  459. package/dist/esm/export/DefoldExporter.js +1103 -0
  460. package/dist/esm/export/DefoldExporter.js.map +1 -0
  461. package/dist/esm/export/GDevelopExporter.js +745 -0
  462. package/dist/esm/export/GDevelopExporter.js.map +1 -0
  463. package/dist/esm/export/GameMakerExporter.js +843 -0
  464. package/dist/esm/export/GameMakerExporter.js.map +1 -0
  465. package/dist/esm/export/GodotExporter.js +45 -50
  466. package/dist/esm/export/GodotExporter.js.map +1 -1
  467. package/dist/esm/export/MinecraftBedrockExporter.js +603 -0
  468. package/dist/esm/export/MinecraftBedrockExporter.js.map +1 -0
  469. package/dist/esm/export/MonoGameExporter.js +1331 -0
  470. package/dist/esm/export/MonoGameExporter.js.map +1 -0
  471. package/dist/esm/export/Pico8Exporter.js +843 -0
  472. package/dist/esm/export/Pico8Exporter.js.map +1 -0
  473. package/dist/esm/export/PlatformExporter.js +4 -5
  474. package/dist/esm/export/PlatformExporter.js.map +1 -1
  475. package/dist/esm/export/RPGMakerExporter.js +903 -0
  476. package/dist/esm/export/RPGMakerExporter.js.map +1 -0
  477. package/dist/esm/export/RobloxExporter.js +940 -0
  478. package/dist/esm/export/RobloxExporter.js.map +1 -0
  479. package/dist/esm/export/Solar2DExporter.js +1280 -0
  480. package/dist/esm/export/Solar2DExporter.js.map +1 -0
  481. package/dist/esm/export/ThreeJSExporter.js +52 -55
  482. package/dist/esm/export/ThreeJSExporter.js.map +1 -1
  483. package/dist/esm/export/Tic80Exporter.js +1312 -0
  484. package/dist/esm/export/Tic80Exporter.js.map +1 -0
  485. package/dist/esm/export/UnityExporter.js +41 -56
  486. package/dist/esm/export/UnityExporter.js.map +1 -1
  487. package/dist/esm/export/UnrealExporter.js +959 -0
  488. package/dist/esm/export/UnrealExporter.js.map +1 -0
  489. package/dist/esm/export/WebExporter.js +42 -50
  490. package/dist/esm/export/WebExporter.js.map +1 -1
  491. package/dist/esm/export/index.js +38 -2
  492. package/dist/esm/export/index.js.map +1 -1
  493. package/dist/esm/godot-integration/GodotAssetLibrary.js +711 -0
  494. package/dist/esm/godot-integration/GodotAssetLibrary.js.map +1 -0
  495. package/dist/esm/godot-integration/GodotImport.js +1062 -0
  496. package/dist/esm/godot-integration/GodotImport.js.map +1 -0
  497. package/dist/esm/godot-integration/GodotLiveLink.js +958 -0
  498. package/dist/esm/godot-integration/GodotLiveLink.js.map +1 -0
  499. package/dist/esm/godot-integration/components/GodotProjectBrowser.js +666 -0
  500. package/dist/esm/godot-integration/components/GodotProjectBrowser.js.map +1 -0
  501. package/dist/esm/i18n/I18n.js +56 -30
  502. package/dist/esm/i18n/I18n.js.map +1 -1
  503. package/dist/esm/i18n/useTranslation.js +4 -4
  504. package/dist/esm/i18n/useTranslation.js.map +1 -1
  505. package/dist/esm/import/AsepriteImporter.js +15 -19
  506. package/dist/esm/import/AsepriteImporter.js.map +1 -1
  507. package/dist/esm/import/DragonBonesImporter.js +36 -40
  508. package/dist/esm/import/DragonBonesImporter.js.map +1 -1
  509. package/dist/esm/import/GameMakerImporter.js +11 -17
  510. package/dist/esm/import/GameMakerImporter.js.map +1 -1
  511. package/dist/esm/import/GodotSceneImporter.js +43 -29
  512. package/dist/esm/import/GodotSceneImporter.js.map +1 -1
  513. package/dist/esm/import/LDtkImporter.js +16 -17
  514. package/dist/esm/import/LDtkImporter.js.map +1 -1
  515. package/dist/esm/import/Live2DImporter.js +16 -19
  516. package/dist/esm/import/Live2DImporter.js.map +1 -1
  517. package/dist/esm/import/NdgFormat.js +28 -35
  518. package/dist/esm/import/NdgFormat.js.map +1 -1
  519. package/dist/esm/import/OgmoImporter.js +16 -18
  520. package/dist/esm/import/OgmoImporter.js.map +1 -1
  521. package/dist/esm/import/RPGMakerImporter.js +5 -6
  522. package/dist/esm/import/RPGMakerImporter.js.map +1 -1
  523. package/dist/esm/import/SceneImporter.js +23 -13
  524. package/dist/esm/import/SceneImporter.js.map +1 -1
  525. package/dist/esm/import/SpineImporter.js +20 -20
  526. package/dist/esm/import/SpineImporter.js.map +1 -1
  527. package/dist/esm/import/SpriterImporter.js +38 -46
  528. package/dist/esm/import/SpriterImporter.js.map +1 -1
  529. package/dist/esm/import/TiledMapImporter.js +20 -24
  530. package/dist/esm/import/TiledMapImporter.js.map +1 -1
  531. package/dist/esm/import/UnitySceneImporter.js +15 -15
  532. package/dist/esm/import/UnitySceneImporter.js.map +1 -1
  533. package/dist/esm/index.js +76 -3
  534. package/dist/esm/index.js.map +1 -1
  535. package/dist/esm/input/GamepadNavigation.js +82 -47
  536. package/dist/esm/input/GamepadNavigation.js.map +1 -1
  537. package/dist/esm/input/InputManager.js +107 -52
  538. package/dist/esm/input/InputManager.js.map +1 -1
  539. package/dist/esm/input/useGamepads.js +35 -29
  540. package/dist/esm/input/useGamepads.js.map +1 -1
  541. package/dist/esm/integration/IconSprite.js +39 -21
  542. package/dist/esm/integration/IconSprite.js.map +1 -1
  543. package/dist/esm/inventory/InventorySystem.js +218 -127
  544. package/dist/esm/inventory/InventorySystem.js.map +1 -1
  545. package/dist/esm/kids/KidMode.js +491 -78
  546. package/dist/esm/kids/KidMode.js.map +1 -1
  547. package/dist/esm/kids/KidTools.js +154 -48
  548. package/dist/esm/kids/KidTools.js.map +1 -1
  549. package/dist/esm/monetization/Monetization.js +47 -35
  550. package/dist/esm/monetization/Monetization.js.map +1 -1
  551. package/dist/esm/multiplayer/LocalMultiplayer.js +48 -26
  552. package/dist/esm/multiplayer/LocalMultiplayer.js.map +1 -1
  553. package/dist/esm/multiplayer/MiniGameTypes.js +23 -10
  554. package/dist/esm/multiplayer/MiniGameTypes.js.map +1 -1
  555. package/dist/esm/native-engine/AssetPipeline.js +537 -0
  556. package/dist/esm/native-engine/AssetPipeline.js.map +1 -0
  557. package/dist/esm/native-engine/AudioEngine.js +822 -0
  558. package/dist/esm/native-engine/AudioEngine.js.map +1 -0
  559. package/dist/esm/native-engine/InputSystem.js +1170 -0
  560. package/dist/esm/native-engine/InputSystem.js.map +1 -0
  561. package/dist/esm/native-engine/NetworkingSystem.js +817 -0
  562. package/dist/esm/native-engine/NetworkingSystem.js.map +1 -0
  563. package/dist/esm/native-engine/PhysicsEngine.js +619 -0
  564. package/dist/esm/native-engine/PhysicsEngine.js.map +1 -0
  565. package/dist/esm/native-engine/RenderingEngine.js +368 -0
  566. package/dist/esm/native-engine/RenderingEngine.js.map +1 -0
  567. package/dist/esm/native-engine/SceneGraph.js +857 -0
  568. package/dist/esm/native-engine/SceneGraph.js.map +1 -0
  569. package/dist/esm/network/MultiplayerTransport.js +63 -33
  570. package/dist/esm/network/MultiplayerTransport.js.map +1 -1
  571. package/dist/esm/network/Networking.js +87 -62
  572. package/dist/esm/network/Networking.js.map +1 -1
  573. package/dist/esm/pathfinding/Pathfinding.js +71 -26
  574. package/dist/esm/pathfinding/Pathfinding.js.map +1 -1
  575. package/dist/esm/performance/AssetStreaming.js +649 -0
  576. package/dist/esm/performance/AssetStreaming.js.map +1 -0
  577. package/dist/esm/performance/BenchmarkSuite.js +37 -24
  578. package/dist/esm/performance/BenchmarkSuite.js.map +1 -1
  579. package/dist/esm/performance/DeltaCompression.js +554 -0
  580. package/dist/esm/performance/DeltaCompression.js.map +1 -0
  581. package/dist/esm/performance/DeterministicPhysics.js +573 -0
  582. package/dist/esm/performance/DeterministicPhysics.js.map +1 -0
  583. package/dist/esm/performance/ECSOptimization.js +716 -0
  584. package/dist/esm/performance/ECSOptimization.js.map +1 -0
  585. package/dist/esm/performance/HotReload.js +517 -0
  586. package/dist/esm/performance/HotReload.js.map +1 -0
  587. package/dist/esm/performance/InputRecording.js +580 -0
  588. package/dist/esm/performance/InputRecording.js.map +1 -0
  589. package/dist/esm/performance/InterestManagement.js +524 -0
  590. package/dist/esm/performance/InterestManagement.js.map +1 -0
  591. package/dist/esm/performance/LocalizationRuntime.js +465 -0
  592. package/dist/esm/performance/LocalizationRuntime.js.map +1 -0
  593. package/dist/esm/performance/MemoryManagement.js +481 -0
  594. package/dist/esm/performance/MemoryManagement.js.map +1 -0
  595. package/dist/esm/performance/ModSupport.js +520 -0
  596. package/dist/esm/performance/ModSupport.js.map +1 -0
  597. package/dist/esm/performance/MultiThreadedPhysics.js +491 -0
  598. package/dist/esm/performance/MultiThreadedPhysics.js.map +1 -0
  599. package/dist/esm/performance/NetworkPrediction.js +508 -0
  600. package/dist/esm/performance/NetworkPrediction.js.map +1 -0
  601. package/dist/esm/performance/ObjectPooling.js +639 -0
  602. package/dist/esm/performance/ObjectPooling.js.map +1 -0
  603. package/dist/esm/performance/Performance.js +64 -25
  604. package/dist/esm/performance/Performance.js.map +1 -1
  605. package/dist/esm/performance/PerformanceAdvanced.js +83 -49
  606. package/dist/esm/performance/PerformanceAdvanced.js.map +1 -1
  607. package/dist/esm/performance/SaveSystem.js +567 -0
  608. package/dist/esm/performance/SaveSystem.js.map +1 -0
  609. package/dist/esm/performance/WebGPURenderer.js +697 -0
  610. package/dist/esm/performance/WebGPURenderer.js.map +1 -0
  611. package/dist/esm/physics/PhysicsAdvanced.js +32 -20
  612. package/dist/esm/physics/PhysicsAdvanced.js.map +1 -1
  613. package/dist/esm/physics/PhysicsEngine2D.js +63 -36
  614. package/dist/esm/physics/PhysicsEngine2D.js.map +1 -1
  615. package/dist/esm/plugins/PluginSDK.js +46 -34
  616. package/dist/esm/plugins/PluginSDK.js.map +1 -1
  617. package/dist/esm/plugins/PluginTestKit.js +28 -29
  618. package/dist/esm/plugins/PluginTestKit.js.map +1 -1
  619. package/dist/esm/procedural/Procedural.js +24 -17
  620. package/dist/esm/procedural/Procedural.js.map +1 -1
  621. package/dist/esm/procedural/WorldBuilding.js +188 -55
  622. package/dist/esm/procedural/WorldBuilding.js.map +1 -1
  623. package/dist/esm/quest/QuestSystem.js +145 -111
  624. package/dist/esm/quest/QuestSystem.js.map +1 -1
  625. package/dist/esm/release/Release.js +142 -31
  626. package/dist/esm/release/Release.js.map +1 -1
  627. package/dist/esm/rendering/Camera2D.js +12 -7
  628. package/dist/esm/rendering/Camera2D.js.map +1 -1
  629. package/dist/esm/rendering/Renderer2D.js +62 -26
  630. package/dist/esm/rendering/Renderer2D.js.map +1 -1
  631. package/dist/esm/rendering/WebGPURenderPipeline.js +60 -31
  632. package/dist/esm/rendering/WebGPURenderPipeline.js.map +1 -1
  633. package/dist/esm/runtime3d/Runtime3D.js +80 -55
  634. package/dist/esm/runtime3d/Runtime3D.js.map +1 -1
  635. package/dist/esm/runtime3d/SceneEditor3D.js +20 -11
  636. package/dist/esm/runtime3d/SceneEditor3D.js.map +1 -1
  637. package/dist/esm/scene/SceneManager.js +26 -12
  638. package/dist/esm/scene/SceneManager.js.map +1 -1
  639. package/dist/esm/scripting/GraphToAST.js +36 -24
  640. package/dist/esm/scripting/GraphToAST.js.map +1 -1
  641. package/dist/esm/scripting/LanguageExporter.js +2 -3
  642. package/dist/esm/scripting/LanguageExporter.js.map +1 -1
  643. package/dist/esm/scripting/NodeGraph.js +49 -32
  644. package/dist/esm/scripting/NodeGraph.js.map +1 -1
  645. package/dist/esm/scripting/ScriptAST.js +19 -6
  646. package/dist/esm/scripting/ScriptAST.js.map +1 -1
  647. package/dist/esm/scripting/VisualScripting2.js +13 -12
  648. package/dist/esm/scripting/VisualScripting2.js.map +1 -1
  649. package/dist/esm/scripting/exporters/CSharpExporter.js +16 -16
  650. package/dist/esm/scripting/exporters/CSharpExporter.js.map +1 -1
  651. package/dist/esm/scripting/exporters/GDScriptExporter.js +3 -6
  652. package/dist/esm/scripting/exporters/GDScriptExporter.js.map +1 -1
  653. package/dist/esm/scripting/exporters/LuaExporter.js +5 -9
  654. package/dist/esm/scripting/exporters/LuaExporter.js.map +1 -1
  655. package/dist/esm/scripting/exporters/PythonExporter.js +7 -13
  656. package/dist/esm/scripting/exporters/PythonExporter.js.map +1 -1
  657. package/dist/esm/scripting/exporters/RustExporter.js +7 -14
  658. package/dist/esm/scripting/exporters/RustExporter.js.map +1 -1
  659. package/dist/esm/scripting/exporters/TypeScriptExporter.js +28 -29
  660. package/dist/esm/scripting/exporters/TypeScriptExporter.js.map +1 -1
  661. package/dist/esm/social/Social.js +27 -20
  662. package/dist/esm/social/Social.js.map +1 -1
  663. package/dist/esm/systems/LightingSystem.js +968 -0
  664. package/dist/esm/systems/LightingSystem.js.map +1 -0
  665. package/dist/esm/systems/ParticleSystem2.js +34 -17
  666. package/dist/esm/systems/ParticleSystem2.js.map +1 -1
  667. package/dist/esm/systems/PhysicsDebugSystem.js +1219 -0
  668. package/dist/esm/systems/PhysicsDebugSystem.js.map +1 -0
  669. package/dist/esm/systems/TerrainSystem.js +1125 -0
  670. package/dist/esm/systems/TerrainSystem.js.map +1 -0
  671. package/dist/esm/templates/ActionTemplates.js +144 -24
  672. package/dist/esm/templates/ActionTemplates.js.map +1 -1
  673. package/dist/esm/templates/FightingTemplate.js +513 -0
  674. package/dist/esm/templates/FightingTemplate.js.map +1 -0
  675. package/dist/esm/templates/MetroidvaniaTemplate.js +484 -0
  676. package/dist/esm/templates/MetroidvaniaTemplate.js.map +1 -0
  677. package/dist/esm/templates/PartyTemplates.js +60 -28
  678. package/dist/esm/templates/PartyTemplates.js.map +1 -1
  679. package/dist/esm/templates/PuzzleTemplates.js +63 -22
  680. package/dist/esm/templates/PuzzleTemplates.js.map +1 -1
  681. package/dist/esm/templates/RPGTemplates.js +29 -15
  682. package/dist/esm/templates/RPGTemplates.js.map +1 -1
  683. package/dist/esm/templates/SportsTemplates.js +41 -17
  684. package/dist/esm/templates/SportsTemplates.js.map +1 -1
  685. package/dist/esm/templates/StrategyTemplates.js +45 -18
  686. package/dist/esm/templates/StrategyTemplates.js.map +1 -1
  687. package/dist/esm/templates/SurvivalTemplate.js +447 -0
  688. package/dist/esm/templates/SurvivalTemplate.js.map +1 -0
  689. package/dist/esm/templates/WaveDefense.js +139 -52
  690. package/dist/esm/templates/WaveDefense.js.map +1 -1
  691. package/dist/esm/tilemap/Tilemap.js +48 -32
  692. package/dist/esm/tilemap/Tilemap.js.map +1 -1
  693. package/dist/esm/tutorials/TutorialBranching.js +111 -42
  694. package/dist/esm/tutorials/TutorialBranching.js.map +1 -1
  695. package/dist/esm/tutorials/TutorialEngine.js +152 -80
  696. package/dist/esm/tutorials/TutorialEngine.js.map +1 -1
  697. package/dist/esm/tutorials/TutorialOverlay.js +117 -40
  698. package/dist/esm/tutorials/TutorialOverlay.js.map +1 -1
  699. package/dist/esm/ui/GameUI.js +69 -42
  700. package/dist/esm/ui/GameUI.js.map +1 -1
  701. package/dist/esm/unity-integration/UnityAssetStore.js +749 -0
  702. package/dist/esm/unity-integration/UnityAssetStore.js.map +1 -0
  703. package/dist/esm/unity-integration/UnityImport.js +1246 -0
  704. package/dist/esm/unity-integration/UnityImport.js.map +1 -0
  705. package/dist/esm/unity-integration/UnityLiveLink.js +1017 -0
  706. package/dist/esm/unity-integration/UnityLiveLink.js.map +1 -0
  707. package/dist/esm/unity-integration/components/UnityAssetStoreBrowser.js +794 -0
  708. package/dist/esm/unity-integration/components/UnityAssetStoreBrowser.js.map +1 -0
  709. package/dist/esm/unity-integration/components/UnityProjectBrowser.js +831 -0
  710. package/dist/esm/unity-integration/components/UnityProjectBrowser.js.map +1 -0
  711. package/dist/esm/unreal-integration/UnrealImport.js +437 -0
  712. package/dist/esm/unreal-integration/UnrealImport.js.map +1 -0
  713. package/dist/esm/unreal-integration/UnrealLiveLink.js +1182 -0
  714. package/dist/esm/unreal-integration/UnrealLiveLink.js.map +1 -0
  715. package/dist/esm/unreal-integration/UnrealMarketplace.js +490 -0
  716. package/dist/esm/unreal-integration/UnrealMarketplace.js.map +1 -0
  717. package/dist/esm/unreal-integration/components/UnrealProjectBrowser.js +833 -0
  718. package/dist/esm/unreal-integration/components/UnrealProjectBrowser.js.map +1 -0
  719. package/dist/esm/xr/ARVR.js +32 -9
  720. package/dist/esm/xr/ARVR.js.map +1 -1
  721. package/package.json +7 -6
@@ -0,0 +1,1022 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * @file UnityLiveLink.ts
5
+ * @description Unity Live Link system for real-time editor synchronization
6
+ * PRO-1.8.2: Unity Live Link
7
+ *
8
+ * Features:
9
+ * - Unity Editor Plugin (C#) integration
10
+ * - Bidirectional Sync Protocol (WebSocket)
11
+ * - Unity Play Mode Integration
12
+ * - Real-time scene sync
13
+ * - Selection mirroring
14
+ * - Property change streaming
15
+ */
16
+ class UnityLiveLinkClient {
17
+ constructor(config = {}) {
18
+ this.ws = null;
19
+ this.state = 'disconnected';
20
+ this.sessionId = '';
21
+ this.sequence = 0;
22
+ this.reconnectAttempts = 0;
23
+ this.heartbeatTimer = null;
24
+ this.reconnectTimer = null;
25
+ this.pendingRequests = new Map();
26
+ this.callbacks = {};
27
+ // Scene state
28
+ this.sceneData = new Map();
29
+ this.selectedIds = [];
30
+ this.activeId = null;
31
+ this.versionVector = {};
32
+ this.pendingChanges = [];
33
+ this.playModeState = 'stopped';
34
+ this.config = {
35
+ serverUrl: 'ws://localhost:9876',
36
+ autoReconnect: true,
37
+ reconnectInterval: 3000,
38
+ maxReconnectAttempts: 10,
39
+ heartbeatInterval: 5000,
40
+ connectionTimeout: 10000,
41
+ syncConfig: {
42
+ direction: 'bidirectional',
43
+ conflictResolution: 'lastWriteWins',
44
+ autoSync: true,
45
+ syncInterval: 100,
46
+ componentFilter: [],
47
+ layerFilter: [],
48
+ maxPendingChanges: 50,
49
+ },
50
+ ...config,
51
+ };
52
+ }
53
+ // ─── Connection Management ─────────────────────────────
54
+ async connect() {
55
+ if (this.state === 'connected' || this.state === 'connecting') {
56
+ return;
57
+ }
58
+ this.state = 'connecting';
59
+ this.callbacks.onStateChange?.(this.state);
60
+ return new Promise((resolve, reject) => {
61
+ const timeout = setTimeout(() => {
62
+ this.ws?.close();
63
+ reject(new Error('Connection timeout'));
64
+ }, this.config.connectionTimeout);
65
+ try {
66
+ this.ws = new WebSocket(this.config.serverUrl);
67
+ this.ws.onopen = () => {
68
+ clearTimeout(timeout);
69
+ this.state = 'authenticating';
70
+ this.callbacks.onStateChange?.(this.state);
71
+ this.reconnectAttempts = 0;
72
+ this.startHeartbeat();
73
+ this.sendHandshake();
74
+ resolve();
75
+ };
76
+ this.ws.onclose = (event) => {
77
+ clearTimeout(timeout);
78
+ this.handleDisconnect(event.code, event.reason);
79
+ };
80
+ this.ws.onerror = (error) => {
81
+ clearTimeout(timeout);
82
+ this.state = 'error';
83
+ this.callbacks.onStateChange?.(this.state);
84
+ this.callbacks.onError?.(new Error('WebSocket error'));
85
+ reject(error);
86
+ };
87
+ this.ws.onmessage = (event) => {
88
+ this.handleMessage(event.data);
89
+ };
90
+ }
91
+ catch (error) {
92
+ clearTimeout(timeout);
93
+ this.state = 'error';
94
+ this.callbacks.onStateChange?.(this.state);
95
+ reject(error);
96
+ }
97
+ });
98
+ }
99
+ disconnect() {
100
+ this.stopHeartbeat();
101
+ this.stopReconnect();
102
+ if (this.ws) {
103
+ this.ws.close(1000, 'Client disconnect');
104
+ this.ws = null;
105
+ }
106
+ this.state = 'disconnected';
107
+ this.callbacks.onStateChange?.(this.state);
108
+ this.sessionId = '';
109
+ this.clearPendingRequests();
110
+ }
111
+ handleDisconnect(code, reason) {
112
+ this.stopHeartbeat();
113
+ this.state = 'disconnected';
114
+ this.ws = null;
115
+ this.callbacks.onStateChange?.(this.state);
116
+ this.callbacks.onDisconnected?.(code, reason);
117
+ if (this.config.autoReconnect && code !== 1000) {
118
+ this.scheduleReconnect();
119
+ }
120
+ }
121
+ scheduleReconnect() {
122
+ if (this.reconnectAttempts >= this.config.maxReconnectAttempts) {
123
+ this.callbacks.onError?.(new Error('Max reconnect attempts reached'));
124
+ return;
125
+ }
126
+ this.reconnectAttempts++;
127
+ this.callbacks.onReconnecting?.(this.reconnectAttempts);
128
+ this.reconnectTimer = setTimeout(() => {
129
+ this.connect().catch(() => {
130
+ // Reconnect will be scheduled again in handleDisconnect
131
+ });
132
+ }, this.config.reconnectInterval);
133
+ }
134
+ stopReconnect() {
135
+ if (this.reconnectTimer) {
136
+ clearTimeout(this.reconnectTimer);
137
+ this.reconnectTimer = null;
138
+ }
139
+ this.reconnectAttempts = 0;
140
+ }
141
+ startHeartbeat() {
142
+ this.heartbeatTimer = setInterval(() => {
143
+ this.sendPing();
144
+ }, this.config.heartbeatInterval);
145
+ }
146
+ stopHeartbeat() {
147
+ if (this.heartbeatTimer) {
148
+ clearInterval(this.heartbeatTimer);
149
+ this.heartbeatTimer = null;
150
+ }
151
+ }
152
+ // ─── Message Handling ──────────────────────────────────
153
+ handleMessage(data) {
154
+ let message;
155
+ try {
156
+ message = JSON.parse(data);
157
+ }
158
+ catch {
159
+ this.callbacks.onError?.(new Error('Invalid message format'));
160
+ return;
161
+ }
162
+ // Handle pending request responses
163
+ if (message.correlationId && this.pendingRequests.has(message.correlationId)) {
164
+ const pending = this.pendingRequests.get(message.correlationId);
165
+ clearTimeout(pending.timeout);
166
+ this.pendingRequests.delete(message.correlationId);
167
+ pending.resolve(message.payload);
168
+ return;
169
+ }
170
+ // Handle by message type
171
+ switch (message.type) {
172
+ case 'handshake_ack':
173
+ this.handleHandshakeAck(message.payload);
174
+ break;
175
+ case 'sync_scene':
176
+ this.handleSyncScene(message.payload);
177
+ break;
178
+ case 'sync_object':
179
+ this.handleSyncObject(message.payload);
180
+ break;
181
+ case 'sync_property':
182
+ this.handleSyncProperty(message.payload);
183
+ break;
184
+ case 'selection_change':
185
+ this.handleSelectionChange(message.payload);
186
+ break;
187
+ case 'create_object':
188
+ this.handleCreateObject(message.payload);
189
+ break;
190
+ case 'delete_object':
191
+ this.handleDeleteObject(message.payload);
192
+ break;
193
+ case 'reparent_object':
194
+ this.handleReparentObject(message.payload);
195
+ break;
196
+ case 'play_mode_start':
197
+ case 'play_mode_stop':
198
+ case 'play_mode_pause':
199
+ this.handlePlayModeChange(message.type, message.payload);
200
+ break;
201
+ case 'play_mode_state':
202
+ this.handlePlayModeState(message.payload);
203
+ break;
204
+ case 'hot_reload':
205
+ this.handleHotReload(message.payload);
206
+ break;
207
+ case 'breakpoint_hit':
208
+ this.handleBreakpoint(message.payload);
209
+ break;
210
+ case 'pong':
211
+ // Heartbeat response, no action needed
212
+ break;
213
+ case 'error':
214
+ this.handleError(message.payload);
215
+ break;
216
+ }
217
+ }
218
+ handleHandshakeAck(payload) {
219
+ if (payload.success) {
220
+ this.sessionId = payload.sessionId;
221
+ this.config.syncConfig = { ...this.config.syncConfig, ...payload.syncConfig };
222
+ this.state = 'connected';
223
+ this.callbacks.onStateChange?.(this.state);
224
+ this.callbacks.onConnected?.(payload.sessionId);
225
+ }
226
+ else {
227
+ this.state = 'error';
228
+ this.callbacks.onStateChange?.(this.state);
229
+ this.callbacks.onError?.(new Error(payload.error ?? 'Handshake failed'));
230
+ this.disconnect();
231
+ }
232
+ }
233
+ handleSyncScene(payload) {
234
+ if (payload.isFullSync) {
235
+ this.sceneData.clear();
236
+ }
237
+ // Build scene data map
238
+ const processObject = (obj) => {
239
+ this.sceneData.set(obj.instanceId, obj);
240
+ // Note: children are instance IDs, not full objects in delta sync
241
+ };
242
+ for (const root of payload.roots) {
243
+ this.processObjectRecursive(root, processObject);
244
+ }
245
+ // Update version vector
246
+ this.versionVector = { ...this.versionVector, ...payload.versionVector };
247
+ this.callbacks.onSceneSync?.(payload);
248
+ }
249
+ processObjectRecursive(obj, callback) {
250
+ callback(obj);
251
+ // Children in full sync would be full objects; in delta sync they're IDs
252
+ // This simplified version assumes IDs only
253
+ }
254
+ handleSyncObject(payload) {
255
+ const existing = this.sceneData.get(payload.instanceId);
256
+ // Conflict detection
257
+ if (existing && existing.version >= payload.version) {
258
+ if (this.config.syncConfig.conflictResolution === 'lastWriteWins' ||
259
+ this.config.syncConfig.conflictResolution === 'unityWins') ;
260
+ else if (this.config.syncConfig.conflictResolution === 'nice2devWins') {
261
+ // Reject, keep our version
262
+ return;
263
+ }
264
+ else {
265
+ // Manual resolution
266
+ this.callbacks.onConflict?.('object', payload.instanceId, existing, payload);
267
+ return;
268
+ }
269
+ }
270
+ this.sceneData.set(payload.instanceId, payload);
271
+ this.callbacks.onObjectSync?.(payload);
272
+ }
273
+ handleSyncProperty(payload) {
274
+ const obj = this.sceneData.get(payload.objectInstanceId);
275
+ if (!obj) {
276
+ return;
277
+ }
278
+ // Apply property change
279
+ if (payload.componentInstanceId === 0) {
280
+ // GameObject property
281
+ this.applyPropertyChange(obj, payload.propertyPath, payload.value);
282
+ }
283
+ else {
284
+ // Component property
285
+ const component = obj.components.find((c) => c.instanceId === payload.componentInstanceId);
286
+ if (component) {
287
+ this.applyPropertyChange(component.properties, payload.propertyPath, payload.value);
288
+ }
289
+ }
290
+ this.callbacks.onPropertySync?.(payload);
291
+ }
292
+ applyPropertyChange(target, path, value) {
293
+ const parts = path.split('.');
294
+ let current = target;
295
+ for (let i = 0; i < parts.length - 1; i++) {
296
+ const part = parts[i];
297
+ if (typeof current[part] !== 'object' || current[part] === null) {
298
+ current[part] = {};
299
+ }
300
+ current = current[part];
301
+ }
302
+ current[parts[parts.length - 1]] = value;
303
+ }
304
+ handleSelectionChange(payload) {
305
+ if (payload.origin !== 'nice2dev') {
306
+ this.selectedIds = payload.selectedInstanceIds;
307
+ this.activeId = payload.activeInstanceId;
308
+ this.callbacks.onSelectionChange?.(payload);
309
+ }
310
+ }
311
+ handleCreateObject(payload) {
312
+ this.sceneData.set(payload.object.instanceId, payload.object);
313
+ this.callbacks.onObjectCreated?.(payload);
314
+ }
315
+ handleDeleteObject(payload) {
316
+ for (const id of payload.instanceIds) {
317
+ if (payload.deleteChildren) {
318
+ this.deleteObjectAndChildren(id);
319
+ }
320
+ else {
321
+ this.sceneData.delete(id);
322
+ }
323
+ }
324
+ this.callbacks.onObjectDeleted?.(payload);
325
+ }
326
+ deleteObjectAndChildren(instanceId) {
327
+ const obj = this.sceneData.get(instanceId);
328
+ if (!obj) {
329
+ return;
330
+ }
331
+ for (const childId of obj.children) {
332
+ this.deleteObjectAndChildren(childId);
333
+ }
334
+ this.sceneData.delete(instanceId);
335
+ }
336
+ handleReparentObject(payload) {
337
+ const obj = this.sceneData.get(payload.instanceId);
338
+ if (!obj) {
339
+ return;
340
+ }
341
+ // Update parent references would need to be implemented
342
+ // based on how parent relationships are tracked
343
+ this.callbacks.onObjectReparented?.(payload);
344
+ }
345
+ handlePlayModeChange(type, payload) {
346
+ this.playModeState = payload.state;
347
+ switch (type) {
348
+ case 'play_mode_start':
349
+ this.callbacks.onPlayModeStart?.(payload);
350
+ break;
351
+ case 'play_mode_stop':
352
+ this.callbacks.onPlayModeStop?.(payload);
353
+ break;
354
+ case 'play_mode_pause':
355
+ this.callbacks.onPlayModePause?.(payload);
356
+ break;
357
+ }
358
+ }
359
+ handlePlayModeState(payload) {
360
+ this.playModeState = payload.state;
361
+ this.callbacks.onPlayModeState?.(payload);
362
+ }
363
+ handleHotReload(payload) {
364
+ this.callbacks.onHotReload?.(payload);
365
+ }
366
+ handleBreakpoint(payload) {
367
+ this.callbacks.onBreakpointHit?.(payload);
368
+ }
369
+ handleError(payload) {
370
+ this.callbacks.onError?.(new Error(`${payload.code}: ${payload.message}`));
371
+ }
372
+ // ─── Sending Messages ──────────────────────────────────
373
+ send(message) {
374
+ if (!this.ws || this.ws.readyState !== WebSocket.OPEN) {
375
+ return;
376
+ }
377
+ const fullMessage = {
378
+ ...message,
379
+ sequence: this.sequence++,
380
+ timestamp: Date.now(),
381
+ };
382
+ this.ws.send(JSON.stringify(fullMessage));
383
+ }
384
+ async sendRequest(message, timeout = 10000) {
385
+ const correlationId = this.generateCorrelationId();
386
+ return new Promise((resolve, reject) => {
387
+ const timeoutHandle = setTimeout(() => {
388
+ this.pendingRequests.delete(correlationId);
389
+ reject(new Error('Request timeout'));
390
+ }, timeout);
391
+ this.pendingRequests.set(correlationId, {
392
+ resolve: resolve,
393
+ reject,
394
+ timeout: timeoutHandle,
395
+ });
396
+ this.send({ ...message, correlationId });
397
+ });
398
+ }
399
+ clearPendingRequests() {
400
+ for (const [, pending] of this.pendingRequests) {
401
+ clearTimeout(pending.timeout);
402
+ pending.reject(new Error('Connection closed'));
403
+ }
404
+ this.pendingRequests.clear();
405
+ }
406
+ generateCorrelationId() {
407
+ return `${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
408
+ }
409
+ sendHandshake() {
410
+ this.send({
411
+ type: 'handshake',
412
+ payload: {
413
+ clientName: 'Nice2Dev Game Engine',
414
+ clientVersion: '1.0.0',
415
+ protocolVersion: 1,
416
+ features: ['scene_sync', 'selection_mirror', 'play_mode', 'hot_reload', 'breakpoints'],
417
+ },
418
+ });
419
+ }
420
+ sendPing() {
421
+ this.send({
422
+ type: 'ping',
423
+ payload: { timestamp: Date.now() },
424
+ });
425
+ }
426
+ // ─── Public API ────────────────────────────────────────
427
+ getState() {
428
+ return this.state;
429
+ }
430
+ isConnected() {
431
+ return this.state === 'connected';
432
+ }
433
+ getSessionId() {
434
+ return this.sessionId;
435
+ }
436
+ getPlayModeState() {
437
+ return this.playModeState;
438
+ }
439
+ getSceneData() {
440
+ return new Map(this.sceneData);
441
+ }
442
+ getObject(instanceId) {
443
+ return this.sceneData.get(instanceId);
444
+ }
445
+ getSelectedIds() {
446
+ return [...this.selectedIds];
447
+ }
448
+ getActiveId() {
449
+ return this.activeId;
450
+ }
451
+ // ─── Scene Operations ──────────────────────────────────
452
+ requestFullSync() {
453
+ this.send({
454
+ type: 'sync_scene',
455
+ payload: { requestFullSync: true },
456
+ });
457
+ }
458
+ setSelection(instanceIds, activeId = null) {
459
+ this.selectedIds = instanceIds;
460
+ this.activeId = activeId ?? instanceIds[0] ?? null;
461
+ this.send({
462
+ type: 'selection_change',
463
+ payload: {
464
+ selectedInstanceIds: instanceIds,
465
+ activeInstanceId: this.activeId,
466
+ origin: 'nice2dev',
467
+ },
468
+ });
469
+ }
470
+ updateProperty(objectInstanceId, componentInstanceId, propertyPath, value) {
471
+ const payload = {
472
+ objectInstanceId,
473
+ componentInstanceId,
474
+ propertyPath,
475
+ value,
476
+ version: Date.now(), // Simple version
477
+ };
478
+ // Buffer change for batch sending
479
+ this.pendingChanges.push(payload);
480
+ // Flush if over threshold
481
+ if (this.pendingChanges.length >= this.config.syncConfig.maxPendingChanges) {
482
+ this.flushPendingChanges();
483
+ }
484
+ }
485
+ flushPendingChanges() {
486
+ for (const change of this.pendingChanges) {
487
+ this.send({
488
+ type: 'sync_property',
489
+ payload: change,
490
+ });
491
+ }
492
+ this.pendingChanges = [];
493
+ }
494
+ createObject(parentInstanceId, name, position = { x: 0, y: 0, z: 0 }) {
495
+ const tempInstanceId = -(Date.now() % 1000000); // Negative temp ID
496
+ const payload = {
497
+ parentInstanceId,
498
+ siblingIndex: -1, // Append
499
+ object: {
500
+ instanceId: tempInstanceId,
501
+ name,
502
+ isActive: true,
503
+ layer: 0,
504
+ tag: 'Untagged',
505
+ transform: {
506
+ localPosition: position,
507
+ localRotation: { x: 0, y: 0, z: 0, w: 1 },
508
+ localScale: { x: 1, y: 1, z: 1 },
509
+ },
510
+ components: [],
511
+ children: [],
512
+ version: 1,
513
+ },
514
+ };
515
+ this.send({
516
+ type: 'create_object',
517
+ payload,
518
+ });
519
+ }
520
+ deleteObjects(instanceIds, deleteChildren = true) {
521
+ this.send({
522
+ type: 'delete_object',
523
+ payload: {
524
+ instanceIds,
525
+ deleteChildren,
526
+ },
527
+ });
528
+ }
529
+ reparentObject(instanceId, newParentInstanceId, siblingIndex = -1) {
530
+ this.send({
531
+ type: 'reparent_object',
532
+ payload: {
533
+ instanceId,
534
+ newParentInstanceId,
535
+ newSiblingIndex: siblingIndex,
536
+ },
537
+ });
538
+ }
539
+ // ─── Play Mode Control ─────────────────────────────────
540
+ enterPlayMode() {
541
+ this.send({
542
+ type: 'play_mode_start',
543
+ payload: {},
544
+ });
545
+ }
546
+ exitPlayMode() {
547
+ this.send({
548
+ type: 'play_mode_stop',
549
+ payload: {},
550
+ });
551
+ }
552
+ pausePlayMode() {
553
+ this.send({
554
+ type: 'play_mode_pause',
555
+ payload: {},
556
+ });
557
+ }
558
+ togglePlayMode() {
559
+ if (this.playModeState === 'stopped') {
560
+ this.enterPlayMode();
561
+ }
562
+ else if (this.playModeState === 'playing') {
563
+ this.pausePlayMode();
564
+ }
565
+ else {
566
+ this.enterPlayMode();
567
+ }
568
+ }
569
+ // ─── Hot Reload ────────────────────────────────────────
570
+ triggerHotReload(scriptPaths) {
571
+ this.send({
572
+ type: 'hot_reload',
573
+ payload: { scripts: scriptPaths ?? [] },
574
+ });
575
+ }
576
+ // ─── Callbacks ─────────────────────────────────────────
577
+ setCallbacks(callbacks) {
578
+ this.callbacks = { ...this.callbacks, ...callbacks };
579
+ }
580
+ onStateChange(callback) {
581
+ this.callbacks.onStateChange = callback;
582
+ return () => {
583
+ this.callbacks.onStateChange = undefined;
584
+ };
585
+ }
586
+ onConnected(callback) {
587
+ this.callbacks.onConnected = callback;
588
+ return () => {
589
+ this.callbacks.onConnected = undefined;
590
+ };
591
+ }
592
+ onDisconnected(callback) {
593
+ this.callbacks.onDisconnected = callback;
594
+ return () => {
595
+ this.callbacks.onDisconnected = undefined;
596
+ };
597
+ }
598
+ onSceneSync(callback) {
599
+ this.callbacks.onSceneSync = callback;
600
+ return () => {
601
+ this.callbacks.onSceneSync = undefined;
602
+ };
603
+ }
604
+ }
605
+ // ============================================================
606
+ // Unity C# Plugin Generator
607
+ // ============================================================
608
+ function generateUnityLiveLinkPlugin(config) {
609
+ const ns = config?.namespace ?? 'Nice2Dev.LiveLink';
610
+ const className = config?.className ?? 'Nice2DevLiveLinkEditor';
611
+ const port = config?.defaultPort ?? 9876;
612
+ return `// Auto-generated Unity Editor Plugin for Nice2Dev Live Link
613
+ // Place this in Assets/Editor/Nice2Dev/
614
+
615
+ using System;
616
+ using System.Collections.Generic;
617
+ using System.Net.WebSockets;
618
+ using System.Text;
619
+ using System.Threading;
620
+ using System.Threading.Tasks;
621
+ using UnityEditor;
622
+ using UnityEngine;
623
+
624
+ namespace ${ns}
625
+ {
626
+ [Serializable]
627
+ public class LiveLinkMessage
628
+ {
629
+ public string type;
630
+ public int sequence;
631
+ public long timestamp;
632
+ public string correlationId;
633
+ public string payload;
634
+ }
635
+
636
+ public class ${className} : EditorWindow
637
+ {
638
+ private ClientWebSocket _webSocket;
639
+ private CancellationTokenSource _tokenSource;
640
+ private string _serverUrl = "ws://localhost:${port}";
641
+ private string _connectionStatus = "Disconnected";
642
+ private bool _isConnected = false;
643
+ private int _sequence = 0;
644
+
645
+ private Vector2 _scrollPos;
646
+ private List<string> _log = new List<string>();
647
+
648
+ [MenuItem("Window/Nice2Dev/Live Link")]
649
+ public static void ShowWindow()
650
+ {
651
+ GetWindow<${className}>("Nice2Dev Live Link");
652
+ }
653
+
654
+ private void OnEnable()
655
+ {
656
+ EditorApplication.update += OnEditorUpdate;
657
+ Selection.selectionChanged += OnSelectionChanged;
658
+ EditorApplication.playModeStateChanged += OnPlayModeChanged;
659
+ }
660
+
661
+ private void OnDisable()
662
+ {
663
+ EditorApplication.update -= OnEditorUpdate;
664
+ Selection.selectionChanged -= OnSelectionChanged;
665
+ EditorApplication.playModeStateChanged -= OnPlayModeChanged;
666
+ Disconnect();
667
+ }
668
+
669
+ private void OnGUI()
670
+ {
671
+ GUILayout.Label("Nice2Dev Live Link", EditorStyles.boldLabel);
672
+
673
+ EditorGUILayout.BeginHorizontal();
674
+ _serverUrl = EditorGUILayout.TextField("Server URL", _serverUrl);
675
+ EditorGUILayout.EndHorizontal();
676
+
677
+ EditorGUILayout.BeginHorizontal();
678
+ GUI.enabled = !_isConnected;
679
+ if (GUILayout.Button("Connect"))
680
+ {
681
+ Connect();
682
+ }
683
+ GUI.enabled = _isConnected;
684
+ if (GUILayout.Button("Disconnect"))
685
+ {
686
+ Disconnect();
687
+ }
688
+ GUI.enabled = true;
689
+ EditorGUILayout.EndHorizontal();
690
+
691
+ EditorGUILayout.LabelField("Status:", _connectionStatus);
692
+
693
+ EditorGUILayout.Space();
694
+
695
+ if (_isConnected)
696
+ {
697
+ if (GUILayout.Button("Sync Scene"))
698
+ {
699
+ SendSceneData();
700
+ }
701
+ }
702
+
703
+ EditorGUILayout.Space();
704
+ EditorGUILayout.LabelField("Log:", EditorStyles.boldLabel);
705
+
706
+ _scrollPos = EditorGUILayout.BeginScrollView(_scrollPos, GUILayout.Height(200));
707
+ foreach (var entry in _log)
708
+ {
709
+ EditorGUILayout.LabelField(entry);
710
+ }
711
+ EditorGUILayout.EndScrollView();
712
+
713
+ if (GUILayout.Button("Clear Log"))
714
+ {
715
+ _log.Clear();
716
+ }
717
+ }
718
+
719
+ private async void Connect()
720
+ {
721
+ try
722
+ {
723
+ _tokenSource = new CancellationTokenSource();
724
+ _webSocket = new ClientWebSocket();
725
+
726
+ _connectionStatus = "Connecting...";
727
+ Log("Connecting to " + _serverUrl);
728
+
729
+ await _webSocket.ConnectAsync(new Uri(_serverUrl), _tokenSource.Token);
730
+
731
+ _isConnected = true;
732
+ _connectionStatus = "Connected";
733
+ Log("Connected successfully");
734
+
735
+ SendHandshake();
736
+ _ = ReceiveLoop();
737
+ }
738
+ catch (Exception ex)
739
+ {
740
+ _connectionStatus = "Error: " + ex.Message;
741
+ Log("Connection error: " + ex.Message);
742
+ _isConnected = false;
743
+ }
744
+ }
745
+
746
+ private void Disconnect()
747
+ {
748
+ _tokenSource?.Cancel();
749
+ _webSocket?.Dispose();
750
+ _webSocket = null;
751
+ _isConnected = false;
752
+ _connectionStatus = "Disconnected";
753
+ Log("Disconnected");
754
+ }
755
+
756
+ private async Task ReceiveLoop()
757
+ {
758
+ var buffer = new byte[65536];
759
+
760
+ while (_isConnected && _webSocket?.State == WebSocketState.Open)
761
+ {
762
+ try
763
+ {
764
+ var result = await _webSocket.ReceiveAsync(
765
+ new ArraySegment<byte>(buffer),
766
+ _tokenSource.Token
767
+ );
768
+
769
+ if (result.MessageType == WebSocketMessageType.Close)
770
+ {
771
+ Disconnect();
772
+ break;
773
+ }
774
+
775
+ var json = Encoding.UTF8.GetString(buffer, 0, result.Count);
776
+ HandleMessage(json);
777
+ }
778
+ catch (OperationCanceledException)
779
+ {
780
+ break;
781
+ }
782
+ catch (Exception ex)
783
+ {
784
+ Log("Receive error: " + ex.Message);
785
+ break;
786
+ }
787
+ }
788
+ }
789
+
790
+ private void HandleMessage(string json)
791
+ {
792
+ try
793
+ {
794
+ var message = JsonUtility.FromJson<LiveLinkMessage>(json);
795
+ Log($"Received: {message.type}");
796
+
797
+ switch (message.type)
798
+ {
799
+ case "handshake_ack":
800
+ Log("Handshake acknowledged");
801
+ break;
802
+ case "sync_property":
803
+ // Handle property sync from Nice2Dev
804
+ break;
805
+ case "selection_change":
806
+ // Handle selection change from Nice2Dev
807
+ break;
808
+ case "play_mode_start":
809
+ EditorApplication.isPlaying = true;
810
+ break;
811
+ case "play_mode_stop":
812
+ EditorApplication.isPlaying = false;
813
+ break;
814
+ case "ping":
815
+ SendPong();
816
+ break;
817
+ }
818
+ }
819
+ catch (Exception ex)
820
+ {
821
+ Log("Message parse error: " + ex.Message);
822
+ }
823
+ }
824
+
825
+ private void SendMessage(string type, object payload)
826
+ {
827
+ if (!_isConnected || _webSocket?.State != WebSocketState.Open)
828
+ return;
829
+
830
+ var message = new
831
+ {
832
+ type = type,
833
+ sequence = _sequence++,
834
+ timestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(),
835
+ payload = payload
836
+ };
837
+
838
+ var json = JsonUtility.ToJson(message);
839
+ var bytes = Encoding.UTF8.GetBytes(json);
840
+
841
+ _ = _webSocket.SendAsync(
842
+ new ArraySegment<byte>(bytes),
843
+ WebSocketMessageType.Text,
844
+ true,
845
+ _tokenSource.Token
846
+ );
847
+ }
848
+
849
+ private void SendHandshake()
850
+ {
851
+ SendMessage("handshake", new
852
+ {
853
+ clientName = "Unity Editor",
854
+ clientVersion = Application.unityVersion,
855
+ protocolVersion = 1,
856
+ features = new[] { "scene_sync", "selection_mirror", "play_mode", "hot_reload" },
857
+ projectPath = Application.dataPath,
858
+ unityVersion = Application.unityVersion
859
+ });
860
+ }
861
+
862
+ private void SendPong()
863
+ {
864
+ SendMessage("pong", new { timestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds() });
865
+ }
866
+
867
+ private void SendSceneData()
868
+ {
869
+ var scene = UnityEngine.SceneManagement.SceneManager.GetActiveScene();
870
+ var roots = scene.GetRootGameObjects();
871
+ var syncRoots = new List<object>();
872
+
873
+ foreach (var root in roots)
874
+ {
875
+ syncRoots.Add(SerializeGameObject(root));
876
+ }
877
+
878
+ SendMessage("sync_scene", new
879
+ {
880
+ sceneName = scene.name,
881
+ scenePath = scene.path,
882
+ sceneGUID = AssetDatabase.AssetPathToGUID(scene.path),
883
+ roots = syncRoots,
884
+ isFullSync = true,
885
+ versionVector = new Dictionary<string, int>()
886
+ });
887
+
888
+ Log($"Sent scene data: {roots.Length} root objects");
889
+ }
890
+
891
+ private object SerializeGameObject(GameObject go)
892
+ {
893
+ var components = new List<object>();
894
+ foreach (var comp in go.GetComponents<Component>())
895
+ {
896
+ if (comp == null) continue;
897
+ components.Add(new
898
+ {
899
+ instanceId = comp.GetInstanceID(),
900
+ typeName = comp.GetType().Name,
901
+ enabled = comp is Behaviour b ? b.enabled : true,
902
+ properties = new Dictionary<string, object>()
903
+ });
904
+ }
905
+
906
+ var children = new List<int>();
907
+ for (int i = 0; i < go.transform.childCount; i++)
908
+ {
909
+ children.Add(go.transform.GetChild(i).gameObject.GetInstanceID());
910
+ }
911
+
912
+ return new
913
+ {
914
+ instanceId = go.GetInstanceID(),
915
+ name = go.name,
916
+ isActive = go.activeSelf,
917
+ layer = go.layer,
918
+ tag = go.tag,
919
+ transform = new
920
+ {
921
+ localPosition = new { x = go.transform.localPosition.x, y = go.transform.localPosition.y, z = go.transform.localPosition.z },
922
+ localRotation = new { x = go.transform.localRotation.x, y = go.transform.localRotation.y, z = go.transform.localRotation.z, w = go.transform.localRotation.w },
923
+ localScale = new { x = go.transform.localScale.x, y = go.transform.localScale.y, z = go.transform.localScale.z }
924
+ },
925
+ components = components,
926
+ children = children,
927
+ version = 1
928
+ };
929
+ }
930
+
931
+ private void OnSelectionChanged()
932
+ {
933
+ if (!_isConnected) return;
934
+
935
+ var ids = new List<int>();
936
+ foreach (var obj in Selection.gameObjects)
937
+ {
938
+ ids.Add(obj.GetInstanceID());
939
+ }
940
+
941
+ SendMessage("selection_change", new
942
+ {
943
+ selectedInstanceIds = ids,
944
+ activeInstanceId = Selection.activeGameObject?.GetInstanceID() ?? 0,
945
+ origin = "unity"
946
+ });
947
+ }
948
+
949
+ private void OnPlayModeChanged(PlayModeStateChange state)
950
+ {
951
+ if (!_isConnected) return;
952
+
953
+ string messageType = state switch
954
+ {
955
+ PlayModeStateChange.EnteredPlayMode => "play_mode_start",
956
+ PlayModeStateChange.ExitingPlayMode => "play_mode_stop",
957
+ PlayModeStateChange.EnteredEditMode => "play_mode_stop",
958
+ _ => null
959
+ };
960
+
961
+ if (messageType != null)
962
+ {
963
+ SendMessage(messageType, new
964
+ {
965
+ state = EditorApplication.isPlaying ? "playing" : "stopped",
966
+ gameTime = Time.time,
967
+ frameCount = Time.frameCount,
968
+ targetFrameRate = Application.targetFrameRate,
969
+ actualFps = 1.0f / Time.deltaTime
970
+ });
971
+ }
972
+ }
973
+
974
+ private void OnEditorUpdate()
975
+ {
976
+ // Could implement periodic state sync here
977
+ }
978
+
979
+ private void Log(string message)
980
+ {
981
+ _log.Add($"[{DateTime.Now:HH:mm:ss}] {message}");
982
+ if (_log.Count > 100)
983
+ {
984
+ _log.RemoveAt(0);
985
+ }
986
+ Repaint();
987
+ }
988
+ }
989
+ }
990
+ `;
991
+ }
992
+ // ============================================================
993
+ // Factory Functions
994
+ // ============================================================
995
+ function createUnityLiveLinkClient(config) {
996
+ return new UnityLiveLinkClient(config);
997
+ }
998
+ function createDefaultLiveLinkConfig() {
999
+ return {
1000
+ serverUrl: 'ws://localhost:9876',
1001
+ autoReconnect: true,
1002
+ reconnectInterval: 3000,
1003
+ maxReconnectAttempts: 10,
1004
+ heartbeatInterval: 5000,
1005
+ connectionTimeout: 10000,
1006
+ syncConfig: {
1007
+ direction: 'bidirectional',
1008
+ conflictResolution: 'lastWriteWins',
1009
+ autoSync: true,
1010
+ syncInterval: 100,
1011
+ componentFilter: [],
1012
+ layerFilter: [],
1013
+ maxPendingChanges: 50,
1014
+ },
1015
+ };
1016
+ }
1017
+
1018
+ exports.UnityLiveLinkClient = UnityLiveLinkClient;
1019
+ exports.createDefaultLiveLinkConfig = createDefaultLiveLinkConfig;
1020
+ exports.createUnityLiveLinkClient = createUnityLiveLinkClient;
1021
+ exports.generateUnityLiveLinkPlugin = generateUnityLiveLinkPlugin;
1022
+ //# sourceMappingURL=UnityLiveLink.js.map