@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,1331 @@
1
+ /* ────────────────────────────────────────────────────────────────
2
+ MonoGame/FNA Exporter — .NET Game Framework
3
+
4
+ Exports NiceToDev game projects to MonoGame 3.8+ / FNA:
5
+ - Content pipeline integration
6
+ - C# classes for entities/components
7
+ - Game states and screens
8
+ - SpriteBatch rendering
9
+ - Content.mgcb generation
10
+ ──────────────────────────────────────────────────────────────── */
11
+ const DEFAULT_MONOGAME_CONFIG = {
12
+ outputPath: 'monogame_export',
13
+ assetPath: 'Content',
14
+ platform: 'pc',
15
+ framework: 'monogame',
16
+ monogameVersion: '3.8.2',
17
+ targetPlatform: 'DesktopGL',
18
+ extendedPipeline: true,
19
+ designTimeContent: true,
20
+ useECS: true,
21
+ useNez: false,
22
+ useTilemaps: true,
23
+ namespace: 'MyGame',
24
+ solutionName: 'MyGame',
25
+ };
26
+ /* ══════════════════════════════════════════════════════════════
27
+ C# CODE GENERATION
28
+ ══════════════════════════════════════════════════════════════ */
29
+ class MonoGameExporter {
30
+ constructor(config) {
31
+ this.csharpFiles = new Map();
32
+ this.contentFiles = [];
33
+ this.assets = [];
34
+ this.config = { ...DEFAULT_MONOGAME_CONFIG, ...config };
35
+ }
36
+ /** Export game project to MonoGame */
37
+ async export(project) {
38
+ const startTime = performance.now();
39
+ try {
40
+ // Update config with project info
41
+ if (project.name) {
42
+ this.config.namespace = this.toPascalCase(project.name);
43
+ this.config.solutionName = this.toPascalCase(project.name);
44
+ }
45
+ // Generate solution and project files
46
+ this.generateSolution(project);
47
+ this.generateCsproj(project);
48
+ // Generate main game class
49
+ this.generateGame1(project);
50
+ // Generate components
51
+ this.generateComponents(project);
52
+ // Generate entities
53
+ this.generateEntities(project);
54
+ // Generate systems (if using ECS)
55
+ if (this.config.useECS) {
56
+ this.generateSystems(project);
57
+ }
58
+ // Generate screens/states
59
+ this.generateScreens(project);
60
+ // Generate content pipeline
61
+ this.generateContentMgcb(project);
62
+ // Collect assets
63
+ this.collectAssets(project);
64
+ return {
65
+ success: true,
66
+ outputPath: this.config.outputPath,
67
+ files: Array.from(this.csharpFiles.entries()).map(([path, content]) => ({
68
+ path,
69
+ content,
70
+ type: 'source',
71
+ })),
72
+ assets: this.assets.map((a) => ({
73
+ path: `${this.config.assetPath}/${a.name}`,
74
+ type: 'asset',
75
+ originalPath: a.path,
76
+ })),
77
+ stats: {
78
+ duration: performance.now() - startTime,
79
+ fileCount: this.csharpFiles.size,
80
+ assetCount: this.assets.length,
81
+ },
82
+ };
83
+ }
84
+ catch (error) {
85
+ return {
86
+ success: false,
87
+ errors: [error.message],
88
+ };
89
+ }
90
+ }
91
+ generateSolution(project) {
92
+ const projectGuid = this.generateGuid();
93
+ const solutionGuid = this.generateGuid();
94
+ const sln = `
95
+ Microsoft Visual Studio Solution File, Format Version 12.00
96
+ # Visual Studio Version 17
97
+ VisualStudioVersion = 17.0.31903.59
98
+ MinimumVisualStudioVersion = 10.0.40219.1
99
+ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "${this.config.solutionName}", "${this.config.solutionName}\\${this.config.solutionName}.csproj", "{${projectGuid}}"
100
+ EndProject
101
+ Global
102
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
103
+ Debug|Any CPU = Debug|Any CPU
104
+ Release|Any CPU = Release|Any CPU
105
+ EndGlobalSection
106
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
107
+ {${projectGuid}}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
108
+ {${projectGuid}}.Debug|Any CPU.Build.0 = Debug|Any CPU
109
+ {${projectGuid}}.Release|Any CPU.ActiveCfg = Release|Any CPU
110
+ {${projectGuid}}.Release|Any CPU.Build.0 = Release|Any CPU
111
+ EndGlobalSection
112
+ GlobalSection(SolutionProperties) = preSolution
113
+ HideSolutionNode = FALSE
114
+ EndGlobalSection
115
+ GlobalSection(ExtensibilityGlobals) = postSolution
116
+ SolutionGuid = {${solutionGuid}}
117
+ EndGlobalSection
118
+ EndGlobal
119
+ `;
120
+ this.csharpFiles.set(`${this.config.solutionName}.sln`, sln.trim());
121
+ }
122
+ generateCsproj(_project) {
123
+ const { framework, monogameVersion, targetPlatform, useECS, useNez, extendedPipeline } = this.config;
124
+ const packageRefs = [];
125
+ if (framework === 'monogame') {
126
+ packageRefs.push(`<PackageReference Include="MonoGame.Framework.${targetPlatform}" Version="${monogameVersion}" />`);
127
+ packageRefs.push(`<PackageReference Include="MonoGame.Content.Builder.Task" Version="${monogameVersion}" />`);
128
+ }
129
+ else {
130
+ packageRefs.push(`<PackageReference Include="FNA" Version="24.01" />`);
131
+ }
132
+ if (extendedPipeline) {
133
+ packageRefs.push(`<PackageReference Include="MonoGame.Extended" Version="4.0.0" />`);
134
+ packageRefs.push(`<PackageReference Include="MonoGame.Extended.Content.Pipeline" Version="4.0.0" />`);
135
+ }
136
+ if (useECS) {
137
+ packageRefs.push(`<PackageReference Include="MonoGame.Extended.Entities" Version="4.0.0" />`);
138
+ }
139
+ if (useNez) {
140
+ packageRefs.push(`<PackageReference Include="Nez" Version="1.0.1" />`);
141
+ }
142
+ const csproj = `<Project Sdk="Microsoft.NET.Sdk">
143
+ <PropertyGroup>
144
+ <OutputType>WinExe</OutputType>
145
+ <TargetFramework>net8.0</TargetFramework>
146
+ <RollForward>Major</RollForward>
147
+ <PublishReadyToRun>false</PublishReadyToRun>
148
+ <TieredCompilation>false</TieredCompilation>
149
+ <RootNamespace>${this.config.namespace}</RootNamespace>
150
+ <AssemblyName>${this.config.solutionName}</AssemblyName>
151
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
152
+ </PropertyGroup>
153
+
154
+ <ItemGroup>
155
+ ${packageRefs.map((r) => ` ${r}`).join('\n')}
156
+ </ItemGroup>
157
+
158
+ <ItemGroup>
159
+ <None Remove="**\\*.mgcb" />
160
+ <MonoGameContentReference Include="Content\\Content.mgcb" />
161
+ </ItemGroup>
162
+
163
+ <ItemGroup>
164
+ <Compile Update="**\\*.cs" />
165
+ </ItemGroup>
166
+ </Project>
167
+ `;
168
+ this.csharpFiles.set(`${this.config.solutionName}/${this.config.solutionName}.csproj`, csproj);
169
+ }
170
+ generateGame1(project) {
171
+ const { namespace, useECS, useNez } = this.config;
172
+ const usings = [
173
+ 'using Microsoft.Xna.Framework;',
174
+ 'using Microsoft.Xna.Framework.Graphics;',
175
+ 'using Microsoft.Xna.Framework.Input;',
176
+ ];
177
+ if (useECS) {
178
+ usings.push('using MonoGame.Extended.Entities;');
179
+ }
180
+ if (useNez) {
181
+ usings.push('using Nez;');
182
+ }
183
+ usings.push(`using ${namespace}.Screens;`);
184
+ usings.push(`using ${namespace}.Components;`);
185
+ const game1 = `${usings.join('\n')}
186
+
187
+ namespace ${namespace}
188
+ {
189
+ public class Game1 : Game
190
+ {
191
+ private GraphicsDeviceManager _graphics;
192
+ private SpriteBatch _spriteBatch;
193
+ private ScreenManager _screenManager;
194
+ ${useECS ? 'private World _world;' : ''}
195
+
196
+ public static Game1 Instance { get; private set; }
197
+ public static int ScreenWidth => 1280;
198
+ public static int ScreenHeight => 720;
199
+
200
+ public Game1()
201
+ {
202
+ Instance = this;
203
+ _graphics = new GraphicsDeviceManager(this);
204
+ Content.RootDirectory = "Content";
205
+ IsMouseVisible = true;
206
+
207
+ _graphics.PreferredBackBufferWidth = ScreenWidth;
208
+ _graphics.PreferredBackBufferHeight = ScreenHeight;
209
+ _graphics.ApplyChanges();
210
+ }
211
+
212
+ protected override void Initialize()
213
+ {
214
+ _screenManager = new ScreenManager(this);
215
+ Components.Add(_screenManager);
216
+
217
+ ${useECS ? this.generateECSInitialization() : ''}
218
+
219
+ base.Initialize();
220
+ }
221
+
222
+ protected override void LoadContent()
223
+ {
224
+ _spriteBatch = new SpriteBatch(GraphicsDevice);
225
+
226
+ // Load global content
227
+ Assets.Load(Content);
228
+
229
+ // Start with menu screen
230
+ _screenManager.AddScreen(new MenuScreen());
231
+ }
232
+
233
+ protected override void Update(GameTime gameTime)
234
+ {
235
+ if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed ||
236
+ Keyboard.GetState().IsKeyDown(Keys.Escape))
237
+ {
238
+ Exit();
239
+ }
240
+
241
+ ${useECS ? '_world?.Update(gameTime);' : ''}
242
+
243
+ base.Update(gameTime);
244
+ }
245
+
246
+ protected override void Draw(GameTime gameTime)
247
+ {
248
+ GraphicsDevice.Clear(Color.CornflowerBlue);
249
+
250
+ ${useECS ? '_world?.Draw(gameTime);' : ''}
251
+
252
+ base.Draw(gameTime);
253
+ }
254
+ }
255
+ }
256
+ `;
257
+ this.csharpFiles.set(`${this.config.solutionName}/Game1.cs`, game1);
258
+ }
259
+ generateECSInitialization() {
260
+ return `
261
+ _world = new WorldBuilder()
262
+ .AddSystem(new MovementSystem())
263
+ .AddSystem(new CollisionSystem())
264
+ .AddSystem(new RenderSystem(_spriteBatch))
265
+ .AddSystem(new AnimationSystem())
266
+ .Build();`;
267
+ }
268
+ generateComponents(_project) {
269
+ const { namespace } = this.config;
270
+ const componentsCs = `using Microsoft.Xna.Framework;
271
+ using Microsoft.Xna.Framework.Graphics;
272
+
273
+ namespace ${namespace}.Components
274
+ {
275
+ // ═══════════════════════════════════════════════════════════════
276
+ // TRANSFORM
277
+ // ═══════════════════════════════════════════════════════════════
278
+
279
+ public class Transform
280
+ {
281
+ public Vector2 Position { get; set; }
282
+ public float Rotation { get; set; }
283
+ public Vector2 Scale { get; set; } = Vector2.One;
284
+ public Vector2 Origin { get; set; }
285
+
286
+ public Transform() { }
287
+
288
+ public Transform(Vector2 position)
289
+ {
290
+ Position = position;
291
+ }
292
+
293
+ public Transform(float x, float y)
294
+ {
295
+ Position = new Vector2(x, y);
296
+ }
297
+
298
+ public Matrix TransformMatrix =>
299
+ Matrix.CreateTranslation(-Origin.X, -Origin.Y, 0) *
300
+ Matrix.CreateScale(Scale.X, Scale.Y, 1) *
301
+ Matrix.CreateRotationZ(Rotation) *
302
+ Matrix.CreateTranslation(Position.X, Position.Y, 0);
303
+ }
304
+
305
+ // ═══════════════════════════════════════════════════════════════
306
+ // SPRITE
307
+ // ═══════════════════════════════════════════════════════════════
308
+
309
+ public class Sprite
310
+ {
311
+ public Texture2D Texture { get; set; }
312
+ public Rectangle? SourceRectangle { get; set; }
313
+ public Color Color { get; set; } = Color.White;
314
+ public SpriteEffects Effects { get; set; } = SpriteEffects.None;
315
+ public float LayerDepth { get; set; } = 0.5f;
316
+
317
+ public Sprite() { }
318
+
319
+ public Sprite(Texture2D texture)
320
+ {
321
+ Texture = texture;
322
+ }
323
+
324
+ public Vector2 Size => SourceRectangle.HasValue
325
+ ? new Vector2(SourceRectangle.Value.Width, SourceRectangle.Value.Height)
326
+ : (Texture != null ? new Vector2(Texture.Width, Texture.Height) : Vector2.Zero);
327
+ }
328
+
329
+ // ═══════════════════════════════════════════════════════════════
330
+ // VELOCITY
331
+ // ═══════════════════════════════════════════════════════════════
332
+
333
+ public class Velocity
334
+ {
335
+ public Vector2 Linear { get; set; }
336
+ public float Angular { get; set; }
337
+
338
+ public Velocity() { }
339
+
340
+ public Velocity(Vector2 linear)
341
+ {
342
+ Linear = linear;
343
+ }
344
+
345
+ public Velocity(float x, float y)
346
+ {
347
+ Linear = new Vector2(x, y);
348
+ }
349
+ }
350
+
351
+ // ═══════════════════════════════════════════════════════════════
352
+ // COLLIDER
353
+ // ═══════════════════════════════════════════════════════════════
354
+
355
+ public class Collider
356
+ {
357
+ public ColliderType Type { get; set; } = ColliderType.Rectangle;
358
+ public Vector2 Size { get; set; }
359
+ public float Radius { get; set; }
360
+ public Vector2 Offset { get; set; }
361
+ public bool IsTrigger { get; set; }
362
+ public int CollisionLayer { get; set; } = 1;
363
+ public int CollisionMask { get; set; } = -1;
364
+
365
+ public Rectangle Bounds(Vector2 position) => new Rectangle(
366
+ (int)(position.X + Offset.X - Size.X / 2),
367
+ (int)(position.Y + Offset.Y - Size.Y / 2),
368
+ (int)Size.X,
369
+ (int)Size.Y
370
+ );
371
+ }
372
+
373
+ public enum ColliderType
374
+ {
375
+ Rectangle,
376
+ Circle,
377
+ Capsule
378
+ }
379
+
380
+ // ═══════════════════════════════════════════════════════════════
381
+ // ANIMATION
382
+ // ═══════════════════════════════════════════════════════════════
383
+
384
+ public class AnimatedSprite
385
+ {
386
+ public Texture2D SpriteSheet { get; set; }
387
+ public int FrameWidth { get; set; }
388
+ public int FrameHeight { get; set; }
389
+ public int CurrentFrame { get; set; }
390
+ public int FrameCount { get; set; }
391
+ public float FrameTime { get; set; } = 0.1f;
392
+ public float Timer { get; set; }
393
+ public bool IsPlaying { get; set; } = true;
394
+ public bool Loop { get; set; } = true;
395
+ public int Row { get; set; } // For multi-row spritesheets
396
+
397
+ public Rectangle SourceRectangle => new Rectangle(
398
+ CurrentFrame * FrameWidth,
399
+ Row * FrameHeight,
400
+ FrameWidth,
401
+ FrameHeight
402
+ );
403
+
404
+ public void Update(float deltaTime)
405
+ {
406
+ if (!IsPlaying) return;
407
+
408
+ Timer += deltaTime;
409
+ if (Timer >= FrameTime)
410
+ {
411
+ Timer -= FrameTime;
412
+ CurrentFrame++;
413
+
414
+ if (CurrentFrame >= FrameCount)
415
+ {
416
+ if (Loop)
417
+ CurrentFrame = 0;
418
+ else
419
+ {
420
+ CurrentFrame = FrameCount - 1;
421
+ IsPlaying = false;
422
+ }
423
+ }
424
+ }
425
+ }
426
+ }
427
+
428
+ // ═══════════════════════════════════════════════════════════════
429
+ // GAMEPLAY
430
+ // ═══════════════════════════════════════════════════════════════
431
+
432
+ public class Health
433
+ {
434
+ public float Current { get; set; }
435
+ public float Max { get; set; }
436
+
437
+ public Health(float max)
438
+ {
439
+ Max = max;
440
+ Current = max;
441
+ }
442
+
443
+ public float Percentage => Current / Max;
444
+ public bool IsDead => Current <= 0;
445
+
446
+ public bool TakeDamage(float amount)
447
+ {
448
+ Current = MathHelper.Max(0, Current - amount);
449
+ return IsDead;
450
+ }
451
+
452
+ public void Heal(float amount)
453
+ {
454
+ Current = MathHelper.Min(Max, Current + amount);
455
+ }
456
+ }
457
+
458
+ public class Player
459
+ {
460
+ public int PlayerId { get; set; }
461
+ public int Score { get; set; }
462
+ public float Speed { get; set; } = 200f;
463
+ public bool CanJump { get; set; } = true;
464
+ }
465
+
466
+ public class Enemy
467
+ {
468
+ public EnemyType Type { get; set; }
469
+ public AIState State { get; set; } = AIState.Idle;
470
+ public float DetectionRange { get; set; } = 200f;
471
+ public float AttackRange { get; set; } = 50f;
472
+ }
473
+
474
+ public enum EnemyType
475
+ {
476
+ Basic,
477
+ Fast,
478
+ Tank,
479
+ Boss
480
+ }
481
+
482
+ public enum AIState
483
+ {
484
+ Idle,
485
+ Patrol,
486
+ Chase,
487
+ Attack,
488
+ Flee,
489
+ Dead
490
+ }
491
+ }
492
+ `;
493
+ this.csharpFiles.set(`${this.config.solutionName}/Components/Components.cs`, componentsCs);
494
+ }
495
+ generateEntities(_project) {
496
+ const { namespace } = this.config;
497
+ const entitiesCs = `using Microsoft.Xna.Framework;
498
+ using Microsoft.Xna.Framework.Graphics;
499
+ using ${namespace}.Components;
500
+
501
+ namespace ${namespace}.Entities
502
+ {
503
+ // ═══════════════════════════════════════════════════════════════
504
+ // BASE ENTITY
505
+ // ═══════════════════════════════════════════════════════════════
506
+
507
+ public abstract class Entity
508
+ {
509
+ public int Id { get; protected set; }
510
+ public bool IsActive { get; set; } = true;
511
+ public bool IsDestroyed { get; private set; }
512
+
513
+ public Transform Transform { get; set; } = new Transform();
514
+ public Sprite Sprite { get; set; }
515
+ public Velocity Velocity { get; set; }
516
+ public Collider Collider { get; set; }
517
+
518
+ private static int _nextId = 0;
519
+
520
+ protected Entity()
521
+ {
522
+ Id = _nextId++;
523
+ }
524
+
525
+ public virtual void Update(GameTime gameTime) { }
526
+
527
+ public virtual void Draw(SpriteBatch spriteBatch)
528
+ {
529
+ if (Sprite?.Texture == null) return;
530
+
531
+ spriteBatch.Draw(
532
+ Sprite.Texture,
533
+ Transform.Position,
534
+ Sprite.SourceRectangle,
535
+ Sprite.Color,
536
+ Transform.Rotation,
537
+ Transform.Origin,
538
+ Transform.Scale,
539
+ Sprite.Effects,
540
+ Sprite.LayerDepth
541
+ );
542
+ }
543
+
544
+ public void Destroy()
545
+ {
546
+ IsDestroyed = true;
547
+ OnDestroy();
548
+ }
549
+
550
+ protected virtual void OnDestroy() { }
551
+ }
552
+
553
+ // ═══════════════════════════════════════════════════════════════
554
+ // PLAYER ENTITY
555
+ // ═══════════════════════════════════════════════════════════════
556
+
557
+ public class PlayerEntity : Entity
558
+ {
559
+ public Player PlayerComponent { get; } = new Player();
560
+ public Health HealthComponent { get; } = new Health(100);
561
+ public AnimatedSprite AnimatedSprite { get; set; }
562
+
563
+ private bool _isGrounded;
564
+ private const float Gravity = 980f;
565
+ private const float JumpForce = -400f;
566
+
567
+ public PlayerEntity(Vector2 position)
568
+ {
569
+ Transform = new Transform(position);
570
+ Velocity = new Velocity();
571
+ Collider = new Collider
572
+ {
573
+ Type = ColliderType.Rectangle,
574
+ Size = new Vector2(32, 48),
575
+ CollisionLayer = 1
576
+ };
577
+ }
578
+
579
+ public override void Update(GameTime gameTime)
580
+ {
581
+ float dt = (float)gameTime.ElapsedGameTime.TotalSeconds;
582
+
583
+ // Gravity
584
+ if (!_isGrounded)
585
+ {
586
+ Velocity.Linear = new Vector2(Velocity.Linear.X, Velocity.Linear.Y + Gravity * dt);
587
+ }
588
+
589
+ // Apply velocity
590
+ Transform.Position += Velocity.Linear * dt;
591
+
592
+ // Update animation
593
+ AnimatedSprite?.Update(dt);
594
+ }
595
+
596
+ public void Move(Vector2 direction)
597
+ {
598
+ Velocity.Linear = new Vector2(direction.X * PlayerComponent.Speed, Velocity.Linear.Y);
599
+ }
600
+
601
+ public void Jump()
602
+ {
603
+ if (_isGrounded && PlayerComponent.CanJump)
604
+ {
605
+ Velocity.Linear = new Vector2(Velocity.Linear.X, JumpForce);
606
+ _isGrounded = false;
607
+ }
608
+ }
609
+
610
+ public void OnGrounded()
611
+ {
612
+ _isGrounded = true;
613
+ Velocity.Linear = new Vector2(Velocity.Linear.X, 0);
614
+ }
615
+ }
616
+
617
+ // ═══════════════════════════════════════════════════════════════
618
+ // ENEMY ENTITY
619
+ // ═══════════════════════════════════════════════════════════════
620
+
621
+ public class EnemyEntity : Entity
622
+ {
623
+ public Enemy EnemyComponent { get; } = new Enemy();
624
+ public Health HealthComponent { get; }
625
+
626
+ private Entity _target;
627
+ private float _stateTimer;
628
+
629
+ public EnemyEntity(Vector2 position, EnemyType type = EnemyType.Basic)
630
+ {
631
+ Transform = new Transform(position);
632
+ Velocity = new Velocity();
633
+ EnemyComponent.Type = type;
634
+
635
+ // Configure based on type
636
+ switch (type)
637
+ {
638
+ case EnemyType.Fast:
639
+ HealthComponent = new Health(50);
640
+ break;
641
+ case EnemyType.Tank:
642
+ HealthComponent = new Health(200);
643
+ break;
644
+ case EnemyType.Boss:
645
+ HealthComponent = new Health(500);
646
+ break;
647
+ default:
648
+ HealthComponent = new Health(100);
649
+ break;
650
+ }
651
+
652
+ Collider = new Collider
653
+ {
654
+ Type = ColliderType.Rectangle,
655
+ Size = new Vector2(32, 32),
656
+ CollisionLayer = 2
657
+ };
658
+ }
659
+
660
+ public void SetTarget(Entity target)
661
+ {
662
+ _target = target;
663
+ }
664
+
665
+ public override void Update(GameTime gameTime)
666
+ {
667
+ float dt = (float)gameTime.ElapsedGameTime.TotalSeconds;
668
+
669
+ UpdateAI(dt);
670
+ Transform.Position += Velocity.Linear * dt;
671
+ }
672
+
673
+ private void UpdateAI(float dt)
674
+ {
675
+ if (_target == null) return;
676
+
677
+ float distance = Vector2.Distance(Transform.Position, _target.Transform.Position);
678
+
679
+ switch (EnemyComponent.State)
680
+ {
681
+ case AIState.Idle:
682
+ if (distance < EnemyComponent.DetectionRange)
683
+ {
684
+ EnemyComponent.State = AIState.Chase;
685
+ }
686
+ break;
687
+
688
+ case AIState.Chase:
689
+ if (distance > EnemyComponent.DetectionRange * 1.5f)
690
+ {
691
+ EnemyComponent.State = AIState.Idle;
692
+ Velocity.Linear = Vector2.Zero;
693
+ }
694
+ else if (distance < EnemyComponent.AttackRange)
695
+ {
696
+ EnemyComponent.State = AIState.Attack;
697
+ }
698
+ else
699
+ {
700
+ Vector2 direction = Vector2.Normalize(_target.Transform.Position - Transform.Position);
701
+ float speed = EnemyComponent.Type == EnemyType.Fast ? 150f : 100f;
702
+ Velocity.Linear = direction * speed;
703
+ }
704
+ break;
705
+
706
+ case AIState.Attack:
707
+ if (distance > EnemyComponent.AttackRange * 1.2f)
708
+ {
709
+ EnemyComponent.State = AIState.Chase;
710
+ }
711
+ // Attack logic
712
+ break;
713
+ }
714
+ }
715
+ }
716
+ }
717
+ `;
718
+ this.csharpFiles.set(`${this.config.solutionName}/Entities/Entities.cs`, entitiesCs);
719
+ }
720
+ generateSystems(_project) {
721
+ const { namespace } = this.config;
722
+ const systemsCs = `using Microsoft.Xna.Framework;
723
+ using Microsoft.Xna.Framework.Graphics;
724
+ using MonoGame.Extended.Entities;
725
+ using MonoGame.Extended.Entities.Systems;
726
+ using ${namespace}.Components;
727
+
728
+ namespace ${namespace}.Systems
729
+ {
730
+ // ═══════════════════════════════════════════════════════════════
731
+ // MOVEMENT SYSTEM
732
+ // ═══════════════════════════════════════════════════════════════
733
+
734
+ public class MovementSystem : EntityUpdateSystem
735
+ {
736
+ private ComponentMapper<Transform> _transformMapper;
737
+ private ComponentMapper<Velocity> _velocityMapper;
738
+
739
+ public MovementSystem()
740
+ : base(Aspect.All(typeof(Transform), typeof(Velocity)))
741
+ {
742
+ }
743
+
744
+ public override void Initialize(IComponentMapperService mapperService)
745
+ {
746
+ _transformMapper = mapperService.GetMapper<Transform>();
747
+ _velocityMapper = mapperService.GetMapper<Velocity>();
748
+ }
749
+
750
+ public override void Update(GameTime gameTime)
751
+ {
752
+ float dt = (float)gameTime.ElapsedGameTime.TotalSeconds;
753
+
754
+ foreach (int entityId in ActiveEntities)
755
+ {
756
+ var transform = _transformMapper.Get(entityId);
757
+ var velocity = _velocityMapper.Get(entityId);
758
+
759
+ transform.Position += velocity.Linear * dt;
760
+ transform.Rotation += velocity.Angular * dt;
761
+ }
762
+ }
763
+ }
764
+
765
+ // ═══════════════════════════════════════════════════════════════
766
+ // COLLISION SYSTEM
767
+ // ═══════════════════════════════════════════════════════════════
768
+
769
+ public class CollisionSystem : EntityUpdateSystem
770
+ {
771
+ private ComponentMapper<Transform> _transformMapper;
772
+ private ComponentMapper<Collider> _colliderMapper;
773
+
774
+ public CollisionSystem()
775
+ : base(Aspect.All(typeof(Transform), typeof(Collider)))
776
+ {
777
+ }
778
+
779
+ public override void Initialize(IComponentMapperService mapperService)
780
+ {
781
+ _transformMapper = mapperService.GetMapper<Transform>();
782
+ _colliderMapper = mapperService.GetMapper<Collider>();
783
+ }
784
+
785
+ public override void Update(GameTime gameTime)
786
+ {
787
+ var entities = ActiveEntities.ToArray();
788
+
789
+ for (int i = 0; i < entities.Length; i++)
790
+ {
791
+ var transformA = _transformMapper.Get(entities[i]);
792
+ var colliderA = _colliderMapper.Get(entities[i]);
793
+ var boundsA = colliderA.Bounds(transformA.Position);
794
+
795
+ for (int j = i + 1; j < entities.Length; j++)
796
+ {
797
+ var transformB = _transformMapper.Get(entities[j]);
798
+ var colliderB = _colliderMapper.Get(entities[j]);
799
+ var boundsB = colliderB.Bounds(transformB.Position);
800
+
801
+ // Check layer/mask
802
+ if ((colliderA.CollisionLayer & colliderB.CollisionMask) == 0 ||
803
+ (colliderB.CollisionLayer & colliderA.CollisionMask) == 0)
804
+ continue;
805
+
806
+ if (boundsA.Intersects(boundsB))
807
+ {
808
+ OnCollision(entities[i], entities[j], colliderA, colliderB);
809
+ }
810
+ }
811
+ }
812
+ }
813
+
814
+ private void OnCollision(int entityA, int entityB, Collider colliderA, Collider colliderB)
815
+ {
816
+ if (colliderA.IsTrigger || colliderB.IsTrigger)
817
+ {
818
+ // Trigger event
819
+ }
820
+ else
821
+ {
822
+ // Physical collision
823
+ }
824
+ }
825
+ }
826
+
827
+ // ═══════════════════════════════════════════════════════════════
828
+ // RENDER SYSTEM
829
+ // ═══════════════════════════════════════════════════════════════
830
+
831
+ public class RenderSystem : EntityDrawSystem
832
+ {
833
+ private SpriteBatch _spriteBatch;
834
+ private ComponentMapper<Transform> _transformMapper;
835
+ private ComponentMapper<Sprite> _spriteMapper;
836
+
837
+ public RenderSystem(SpriteBatch spriteBatch)
838
+ : base(Aspect.All(typeof(Transform), typeof(Sprite)))
839
+ {
840
+ _spriteBatch = spriteBatch;
841
+ }
842
+
843
+ public override void Initialize(IComponentMapperService mapperService)
844
+ {
845
+ _transformMapper = mapperService.GetMapper<Transform>();
846
+ _spriteMapper = mapperService.GetMapper<Sprite>();
847
+ }
848
+
849
+ public override void Draw(GameTime gameTime)
850
+ {
851
+ _spriteBatch.Begin(SpriteSortMode.BackToFront, BlendState.AlphaBlend);
852
+
853
+ foreach (int entityId in ActiveEntities)
854
+ {
855
+ var transform = _transformMapper.Get(entityId);
856
+ var sprite = _spriteMapper.Get(entityId);
857
+
858
+ if (sprite.Texture == null) continue;
859
+
860
+ _spriteBatch.Draw(
861
+ sprite.Texture,
862
+ transform.Position,
863
+ sprite.SourceRectangle,
864
+ sprite.Color,
865
+ transform.Rotation,
866
+ transform.Origin,
867
+ transform.Scale,
868
+ sprite.Effects,
869
+ sprite.LayerDepth
870
+ );
871
+ }
872
+
873
+ _spriteBatch.End();
874
+ }
875
+ }
876
+
877
+ // ═══════════════════════════════════════════════════════════════
878
+ // ANIMATION SYSTEM
879
+ // ═══════════════════════════════════════════════════════════════
880
+
881
+ public class AnimationSystem : EntityUpdateSystem
882
+ {
883
+ private ComponentMapper<AnimatedSprite> _animationMapper;
884
+ private ComponentMapper<Sprite> _spriteMapper;
885
+
886
+ public AnimationSystem()
887
+ : base(Aspect.All(typeof(AnimatedSprite), typeof(Sprite)))
888
+ {
889
+ }
890
+
891
+ public override void Initialize(IComponentMapperService mapperService)
892
+ {
893
+ _animationMapper = mapperService.GetMapper<AnimatedSprite>();
894
+ _spriteMapper = mapperService.GetMapper<Sprite>();
895
+ }
896
+
897
+ public override void Update(GameTime gameTime)
898
+ {
899
+ float dt = (float)gameTime.ElapsedGameTime.TotalSeconds;
900
+
901
+ foreach (int entityId in ActiveEntities)
902
+ {
903
+ var animation = _animationMapper.Get(entityId);
904
+ var sprite = _spriteMapper.Get(entityId);
905
+
906
+ animation.Update(dt);
907
+ sprite.SourceRectangle = animation.SourceRectangle;
908
+ }
909
+ }
910
+ }
911
+ }
912
+ `;
913
+ this.csharpFiles.set(`${this.config.solutionName}/Systems/Systems.cs`, systemsCs);
914
+ }
915
+ generateScreens(_project) {
916
+ const { namespace } = this.config;
917
+ const screensCs = `using Microsoft.Xna.Framework;
918
+ using Microsoft.Xna.Framework.Content;
919
+ using Microsoft.Xna.Framework.Graphics;
920
+ using Microsoft.Xna.Framework.Input;
921
+
922
+ namespace ${namespace}.Screens
923
+ {
924
+ // ═══════════════════════════════════════════════════════════════
925
+ // SCREEN BASE
926
+ // ═══════════════════════════════════════════════════════════════
927
+
928
+ public abstract class Screen
929
+ {
930
+ public ScreenManager ScreenManager { get; internal set; }
931
+ public bool IsActive { get; set; } = true;
932
+ public bool IsPopup { get; protected set; }
933
+
934
+ protected ContentManager Content => ScreenManager.Game.Content;
935
+ protected GraphicsDevice GraphicsDevice => ScreenManager.GraphicsDevice;
936
+
937
+ public virtual void LoadContent() { }
938
+ public virtual void UnloadContent() { }
939
+ public virtual void Update(GameTime gameTime) { }
940
+ public virtual void Draw(GameTime gameTime, SpriteBatch spriteBatch) { }
941
+
942
+ public virtual void HandleInput(InputState input) { }
943
+
944
+ public void ExitScreen()
945
+ {
946
+ ScreenManager.RemoveScreen(this);
947
+ }
948
+ }
949
+
950
+ // ═══════════════════════════════════════════════════════════════
951
+ // SCREEN MANAGER
952
+ // ═══════════════════════════════════════════════════════════════
953
+
954
+ public class ScreenManager : DrawableGameComponent
955
+ {
956
+ private readonly List<Screen> _screens = new();
957
+ private readonly List<Screen> _screensToAdd = new();
958
+ private readonly List<Screen> _screensToRemove = new();
959
+ private SpriteBatch _spriteBatch;
960
+ private InputState _input = new();
961
+
962
+ public new Game Game { get; }
963
+
964
+ public ScreenManager(Game game) : base(game)
965
+ {
966
+ Game = game;
967
+ }
968
+
969
+ protected override void LoadContent()
970
+ {
971
+ _spriteBatch = new SpriteBatch(GraphicsDevice);
972
+ }
973
+
974
+ public override void Update(GameTime gameTime)
975
+ {
976
+ _input.Update();
977
+
978
+ // Add pending screens
979
+ foreach (var screen in _screensToAdd)
980
+ {
981
+ screen.LoadContent();
982
+ _screens.Add(screen);
983
+ }
984
+ _screensToAdd.Clear();
985
+
986
+ // Remove pending screens
987
+ foreach (var screen in _screensToRemove)
988
+ {
989
+ screen.UnloadContent();
990
+ _screens.Remove(screen);
991
+ }
992
+ _screensToRemove.Clear();
993
+
994
+ // Update screens
995
+ foreach (var screen in _screens)
996
+ {
997
+ if (screen.IsActive)
998
+ {
999
+ screen.HandleInput(_input);
1000
+ screen.Update(gameTime);
1001
+ }
1002
+ }
1003
+ }
1004
+
1005
+ public override void Draw(GameTime gameTime)
1006
+ {
1007
+ foreach (var screen in _screens)
1008
+ {
1009
+ if (screen.IsActive)
1010
+ {
1011
+ screen.Draw(gameTime, _spriteBatch);
1012
+ }
1013
+ }
1014
+ }
1015
+
1016
+ public void AddScreen(Screen screen)
1017
+ {
1018
+ screen.ScreenManager = this;
1019
+ _screensToAdd.Add(screen);
1020
+ }
1021
+
1022
+ public void RemoveScreen(Screen screen)
1023
+ {
1024
+ _screensToRemove.Add(screen);
1025
+ }
1026
+ }
1027
+
1028
+ // ═══════════════════════════════════════════════════════════════
1029
+ // INPUT STATE
1030
+ // ═══════════════════════════════════════════════════════════════
1031
+
1032
+ public class InputState
1033
+ {
1034
+ public KeyboardState CurrentKeyboardState { get; private set; }
1035
+ public KeyboardState PreviousKeyboardState { get; private set; }
1036
+ public MouseState CurrentMouseState { get; private set; }
1037
+ public MouseState PreviousMouseState { get; private set; }
1038
+ public GamePadState CurrentGamePadState { get; private set; }
1039
+ public GamePadState PreviousGamePadState { get; private set; }
1040
+
1041
+ public void Update()
1042
+ {
1043
+ PreviousKeyboardState = CurrentKeyboardState;
1044
+ PreviousMouseState = CurrentMouseState;
1045
+ PreviousGamePadState = CurrentGamePadState;
1046
+
1047
+ CurrentKeyboardState = Keyboard.GetState();
1048
+ CurrentMouseState = Mouse.GetState();
1049
+ CurrentGamePadState = GamePad.GetState(PlayerIndex.One);
1050
+ }
1051
+
1052
+ public bool IsKeyPressed(Keys key) =>
1053
+ CurrentKeyboardState.IsKeyDown(key) && PreviousKeyboardState.IsKeyUp(key);
1054
+
1055
+ public bool IsKeyHeld(Keys key) =>
1056
+ CurrentKeyboardState.IsKeyDown(key);
1057
+
1058
+ public bool IsKeyReleased(Keys key) =>
1059
+ CurrentKeyboardState.IsKeyUp(key) && PreviousKeyboardState.IsKeyDown(key);
1060
+
1061
+ public Vector2 GetMovement()
1062
+ {
1063
+ Vector2 movement = Vector2.Zero;
1064
+
1065
+ if (IsKeyHeld(Keys.W) || IsKeyHeld(Keys.Up)) movement.Y -= 1;
1066
+ if (IsKeyHeld(Keys.S) || IsKeyHeld(Keys.Down)) movement.Y += 1;
1067
+ if (IsKeyHeld(Keys.A) || IsKeyHeld(Keys.Left)) movement.X -= 1;
1068
+ if (IsKeyHeld(Keys.D) || IsKeyHeld(Keys.Right)) movement.X += 1;
1069
+
1070
+ if (movement != Vector2.Zero)
1071
+ movement = Vector2.Normalize(movement);
1072
+
1073
+ return movement;
1074
+ }
1075
+ }
1076
+
1077
+ // ═══════════════════════════════════════════════════════════════
1078
+ // MENU SCREEN
1079
+ // ═══════════════════════════════════════════════════════════════
1080
+
1081
+ public class MenuScreen : Screen
1082
+ {
1083
+ private SpriteFont _font;
1084
+ private int _selectedIndex;
1085
+ private string[] _menuItems = { "Play", "Options", "Exit" };
1086
+
1087
+ public override void LoadContent()
1088
+ {
1089
+ _font = Content.Load<SpriteFont>("Fonts/MenuFont");
1090
+ }
1091
+
1092
+ public override void HandleInput(InputState input)
1093
+ {
1094
+ if (input.IsKeyPressed(Keys.Up))
1095
+ {
1096
+ _selectedIndex--;
1097
+ if (_selectedIndex < 0) _selectedIndex = _menuItems.Length - 1;
1098
+ }
1099
+
1100
+ if (input.IsKeyPressed(Keys.Down))
1101
+ {
1102
+ _selectedIndex++;
1103
+ if (_selectedIndex >= _menuItems.Length) _selectedIndex = 0;
1104
+ }
1105
+
1106
+ if (input.IsKeyPressed(Keys.Enter))
1107
+ {
1108
+ switch (_selectedIndex)
1109
+ {
1110
+ case 0: // Play
1111
+ ScreenManager.AddScreen(new GameplayScreen());
1112
+ ExitScreen();
1113
+ break;
1114
+ case 1: // Options
1115
+ // Options screen
1116
+ break;
1117
+ case 2: // Exit
1118
+ ScreenManager.Game.Exit();
1119
+ break;
1120
+ }
1121
+ }
1122
+ }
1123
+
1124
+ public override void Draw(GameTime gameTime, SpriteBatch spriteBatch)
1125
+ {
1126
+ spriteBatch.Begin();
1127
+
1128
+ for (int i = 0; i < _menuItems.Length; i++)
1129
+ {
1130
+ Color color = i == _selectedIndex ? Color.Yellow : Color.White;
1131
+ Vector2 position = new Vector2(640 - _font.MeasureString(_menuItems[i]).X / 2, 300 + i * 50);
1132
+ spriteBatch.DrawString(_font, _menuItems[i], position, color);
1133
+ }
1134
+
1135
+ spriteBatch.End();
1136
+ }
1137
+ }
1138
+
1139
+ // ═══════════════════════════════════════════════════════════════
1140
+ // GAMEPLAY SCREEN
1141
+ // ═══════════════════════════════════════════════════════════════
1142
+
1143
+ public class GameplayScreen : Screen
1144
+ {
1145
+ public override void LoadContent()
1146
+ {
1147
+ // Load level content
1148
+ }
1149
+
1150
+ public override void HandleInput(InputState input)
1151
+ {
1152
+ if (input.IsKeyPressed(Keys.Escape))
1153
+ {
1154
+ ScreenManager.AddScreen(new PauseScreen());
1155
+ }
1156
+
1157
+ Vector2 movement = input.GetMovement();
1158
+ // Apply to player
1159
+ }
1160
+
1161
+ public override void Update(GameTime gameTime)
1162
+ {
1163
+ // Update game logic
1164
+ }
1165
+
1166
+ public override void Draw(GameTime gameTime, SpriteBatch spriteBatch)
1167
+ {
1168
+ spriteBatch.Begin(SpriteSortMode.BackToFront, BlendState.AlphaBlend);
1169
+
1170
+ // Draw game
1171
+
1172
+ spriteBatch.End();
1173
+ }
1174
+ }
1175
+
1176
+ // ═══════════════════════════════════════════════════════════════
1177
+ // PAUSE SCREEN
1178
+ // ═══════════════════════════════════════════════════════════════
1179
+
1180
+ public class PauseScreen : Screen
1181
+ {
1182
+ public PauseScreen()
1183
+ {
1184
+ IsPopup = true;
1185
+ }
1186
+
1187
+ public override void HandleInput(InputState input)
1188
+ {
1189
+ if (input.IsKeyPressed(Keys.Escape))
1190
+ {
1191
+ ExitScreen();
1192
+ }
1193
+ }
1194
+
1195
+ public override void Draw(GameTime gameTime, SpriteBatch spriteBatch)
1196
+ {
1197
+ spriteBatch.Begin();
1198
+
1199
+ // Draw semi-transparent overlay
1200
+ spriteBatch.Draw(
1201
+ Assets.PixelTexture,
1202
+ new Rectangle(0, 0, Game1.ScreenWidth, Game1.ScreenHeight),
1203
+ new Color(0, 0, 0, 0.5f)
1204
+ );
1205
+
1206
+ // Draw pause text
1207
+
1208
+ spriteBatch.End();
1209
+ }
1210
+ }
1211
+ }
1212
+ `;
1213
+ this.csharpFiles.set(`${this.config.solutionName}/Screens/Screens.cs`, screensCs);
1214
+ // Generate Assets class
1215
+ const assetsCs = `using Microsoft.Xna.Framework;
1216
+ using Microsoft.Xna.Framework.Content;
1217
+ using Microsoft.Xna.Framework.Graphics;
1218
+
1219
+ namespace ${namespace}
1220
+ {
1221
+ public static class Assets
1222
+ {
1223
+ // Textures
1224
+ public static Texture2D PixelTexture { get; private set; }
1225
+ public static Texture2D PlayerTexture { get; private set; }
1226
+ public static Texture2D EnemyTexture { get; private set; }
1227
+ public static Texture2D TilesetTexture { get; private set; }
1228
+
1229
+ // Fonts
1230
+ public static SpriteFont MenuFont { get; private set; }
1231
+ public static SpriteFont GameFont { get; private set; }
1232
+
1233
+ public static void Load(ContentManager content)
1234
+ {
1235
+ // Create pixel texture
1236
+ PixelTexture = new Texture2D(Game1.Instance.GraphicsDevice, 1, 1);
1237
+ PixelTexture.SetData(new[] { Color.White });
1238
+
1239
+ // Load textures
1240
+ PlayerTexture = content.Load<Texture2D>("Sprites/player");
1241
+ EnemyTexture = content.Load<Texture2D>("Sprites/enemy");
1242
+ TilesetTexture = content.Load<Texture2D>("Sprites/tileset");
1243
+
1244
+ // Load fonts
1245
+ MenuFont = content.Load<SpriteFont>("Fonts/MenuFont");
1246
+ GameFont = content.Load<SpriteFont>("Fonts/GameFont");
1247
+ }
1248
+ }
1249
+ }
1250
+ `;
1251
+ this.csharpFiles.set(`${this.config.solutionName}/Assets.cs`, assetsCs);
1252
+ }
1253
+ generateContentMgcb(project) {
1254
+ let mgcb = `#----------------------------- Global Properties ----------------------------#
1255
+
1256
+ /outputDir:bin/$(Platform)
1257
+ /intermediateDir:obj/$(Platform)
1258
+ /platform:DesktopGL
1259
+ /config:
1260
+ /profile:Reach
1261
+ /compress:False
1262
+
1263
+ #-------------------------------- References --------------------------------#
1264
+
1265
+ /reference:..\\..\\packages\\MonoGame.Extended.Content.Pipeline\\4.0.0\\tools\\MonoGame.Extended.Content.Pipeline.dll
1266
+
1267
+ #---------------------------------- Content ---------------------------------#
1268
+
1269
+ #begin Fonts/MenuFont.spritefont
1270
+ /importer:FontDescriptionImporter
1271
+ /processor:FontDescriptionProcessor
1272
+ /processorParam:PremultiplyAlpha=True
1273
+ /processorParam:TextureFormat=Compressed
1274
+ /build:Fonts/MenuFont.spritefont
1275
+
1276
+ #begin Fonts/GameFont.spritefont
1277
+ /importer:FontDescriptionImporter
1278
+ /processor:FontDescriptionProcessor
1279
+ /processorParam:PremultiplyAlpha=True
1280
+ /processorParam:TextureFormat=Compressed
1281
+ /build:Fonts/GameFont.spritefont
1282
+ `;
1283
+ // Add project assets
1284
+ if (project.assets) {
1285
+ for (const asset of project.assets) {
1286
+ const ext = asset.name.split('.').pop()?.toLowerCase();
1287
+ let processor = 'TextureProcessor';
1288
+ let importer = 'TextureImporter';
1289
+ if (ext === 'ogg' || ext === 'wav' || ext === 'mp3') {
1290
+ processor = 'SoundEffectProcessor';
1291
+ importer = 'OggImporter';
1292
+ }
1293
+ else if (ext === 'fx') {
1294
+ processor = 'EffectProcessor';
1295
+ importer = 'EffectImporter';
1296
+ }
1297
+ mgcb += `
1298
+ #begin ${asset.name}
1299
+ /importer:${importer}
1300
+ /processor:${processor}
1301
+ /build:${asset.name}
1302
+ `;
1303
+ }
1304
+ }
1305
+ this.csharpFiles.set(`${this.config.solutionName}/Content/Content.mgcb`, mgcb);
1306
+ }
1307
+ collectAssets(project) {
1308
+ if (project.assets) {
1309
+ this.assets = [...project.assets];
1310
+ }
1311
+ }
1312
+ generateGuid() {
1313
+ return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {
1314
+ const r = (Math.random() * 16) | 0;
1315
+ const v = c === 'x' ? r : (r & 0x3) | 0x8;
1316
+ return v.toString(16).toUpperCase();
1317
+ });
1318
+ }
1319
+ toPascalCase(str) {
1320
+ return str
1321
+ .split(/[\s_-]+/)
1322
+ .map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())
1323
+ .join('');
1324
+ }
1325
+ }
1326
+ /* ══════════════════════════════════════════════════════════════
1327
+ EXPORTS
1328
+ ══════════════════════════════════════════════════════════════ */
1329
+
1330
+ export { DEFAULT_MONOGAME_CONFIG, MonoGameExporter };
1331
+ //# sourceMappingURL=MonoGameExporter.js.map