@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.
- package/dist/cjs/accessibility/Accessibility.js +55 -20
- package/dist/cjs/accessibility/Accessibility.js.map +1 -1
- package/dist/cjs/ai/AI.js +74 -40
- package/dist/cjs/ai/AI.js.map +1 -1
- package/dist/cjs/ai/BehaviorTree.js +39 -47
- package/dist/cjs/ai/BehaviorTree.js.map +1 -1
- package/dist/cjs/ai/StateMachine.js +64 -100
- package/dist/cjs/ai/StateMachine.js.map +1 -1
- package/dist/cjs/animation/Animation.js +58 -34
- package/dist/cjs/animation/Animation.js.map +1 -1
- package/dist/cjs/audio/AudioAdvanced.js +71 -37
- package/dist/cjs/audio/AudioAdvanced.js.map +1 -1
- package/dist/cjs/audio/AudioBridge.js +61 -49
- package/dist/cjs/audio/AudioBridge.js.map +1 -1
- package/dist/cjs/audio/AudioManager.js +45 -29
- package/dist/cjs/audio/AudioManager.js.map +1 -1
- package/dist/cjs/build-cloud/BuildOrchestration.js +1142 -0
- package/dist/cjs/build-cloud/BuildOrchestration.js.map +1 -0
- package/dist/cjs/build-cloud/GodotBuildCloud.js +722 -0
- package/dist/cjs/build-cloud/GodotBuildCloud.js.map +1 -0
- package/dist/cjs/build-cloud/UnityBuildCloud.js +652 -0
- package/dist/cjs/build-cloud/UnityBuildCloud.js.map +1 -0
- package/dist/cjs/build-cloud/UnrealBuildCloud.js +674 -0
- package/dist/cjs/build-cloud/UnrealBuildCloud.js.map +1 -0
- package/dist/cjs/core/EventBus.js +2 -1
- package/dist/cjs/core/EventBus.js.map +1 -1
- package/dist/cjs/core/GameConfig.js +1 -1
- package/dist/cjs/core/GameConfig.js.map +1 -1
- package/dist/cjs/core/GameLoop.js +6 -3
- package/dist/cjs/core/GameLoop.js.map +1 -1
- package/dist/cjs/core/ServiceLocator.js +1 -2
- package/dist/cjs/core/ServiceLocator.js.map +1 -1
- package/dist/cjs/devtools/DevTools.js +73 -43
- package/dist/cjs/devtools/DevTools.js.map +1 -1
- package/dist/cjs/devtools/DeveloperExperience.js +84 -42
- package/dist/cjs/devtools/DeveloperExperience.js.map +1 -1
- package/dist/cjs/devtools/GameplayAnalytics.js +71 -43
- package/dist/cjs/devtools/GameplayAnalytics.js.map +1 -1
- package/dist/cjs/dialogue/DialogueSystem.js +153 -129
- package/dist/cjs/dialogue/DialogueSystem.js.map +1 -1
- package/dist/cjs/docs/DocGenerator.js +70 -28
- package/dist/cjs/docs/DocGenerator.js.map +1 -1
- package/dist/cjs/ecs/World.js +159 -33
- package/dist/cjs/ecs/World.js.map +1 -1
- package/dist/cjs/editor/AchievementEditor.js +650 -0
- package/dist/cjs/editor/AchievementEditor.js.map +1 -0
- package/dist/cjs/editor/AdvancedEditor.js +95 -23
- package/dist/cjs/editor/AdvancedEditor.js.map +1 -1
- package/dist/cjs/editor/AnimationRetargeting.js +742 -0
- package/dist/cjs/editor/AnimationRetargeting.js.map +1 -0
- package/dist/cjs/editor/AssetBrowser.js +1191 -0
- package/dist/cjs/editor/AssetBrowser.js.map +1 -0
- package/dist/cjs/editor/AssetManager.js +22 -14
- package/dist/cjs/editor/AssetManager.js.map +1 -1
- package/dist/cjs/editor/ConsolePro.js +1092 -0
- package/dist/cjs/editor/ConsolePro.js.map +1 -0
- package/dist/cjs/editor/CraftingEditor.js +749 -0
- package/dist/cjs/editor/CraftingEditor.js.map +1 -0
- package/dist/cjs/editor/DebugTools.js +46 -23
- package/dist/cjs/editor/DebugTools.js.map +1 -1
- package/dist/cjs/editor/DialogueSystem.js +924 -0
- package/dist/cjs/editor/DialogueSystem.js.map +1 -0
- package/dist/cjs/editor/LeaderboardSystem.js +496 -0
- package/dist/cjs/editor/LeaderboardSystem.js.map +1 -0
- package/dist/cjs/editor/NiceGameEditor.js +532 -142
- package/dist/cjs/editor/NiceGameEditor.js.map +1 -1
- package/dist/cjs/editor/PrefabSystem.js +864 -0
- package/dist/cjs/editor/PrefabSystem.js.map +1 -0
- package/dist/cjs/editor/ProfilerPanel.js +716 -0
- package/dist/cjs/editor/ProfilerPanel.js.map +1 -0
- package/dist/cjs/editor/QuestEditor.js +850 -0
- package/dist/cjs/editor/QuestEditor.js.map +1 -0
- package/dist/cjs/editor/ReplaySystem.js +655 -0
- package/dist/cjs/editor/ReplaySystem.js.map +1 -0
- package/dist/cjs/editor/SceneEditor.js +33 -13
- package/dist/cjs/editor/SceneEditor.js.map +1 -1
- package/dist/cjs/editor/ScreenshotMode.js +710 -0
- package/dist/cjs/editor/ScreenshotMode.js.map +1 -0
- package/dist/cjs/editor/ShaderGraph.js +7 -6
- package/dist/cjs/editor/ShaderGraph.js.map +1 -1
- package/dist/cjs/editor/TimelineEditor.js +36 -30
- package/dist/cjs/editor/TimelineEditor.js.map +1 -1
- package/dist/cjs/editor/UndoRedoPro.js +920 -0
- package/dist/cjs/editor/UndoRedoPro.js.map +1 -0
- package/dist/cjs/editor/VRARMode.js +658 -0
- package/dist/cjs/editor/VRARMode.js.map +1 -0
- package/dist/cjs/engine/NiceGameEngine.js +12 -10
- package/dist/cjs/engine/NiceGameEngine.js.map +1 -1
- package/dist/cjs/engine/SaveSystemV2.js +73 -37
- package/dist/cjs/engine/SaveSystemV2.js.map +1 -1
- package/dist/cjs/enterprise/Enterprise.js +92 -44
- package/dist/cjs/enterprise/Enterprise.js.map +1 -1
- package/dist/cjs/export/BevyExporter.js +998 -0
- package/dist/cjs/export/BevyExporter.js.map +1 -0
- package/dist/cjs/export/CocosExporter.js +706 -0
- package/dist/cjs/export/CocosExporter.js.map +1 -0
- package/dist/cjs/export/Construct3Exporter.js +832 -0
- package/dist/cjs/export/Construct3Exporter.js.map +1 -0
- package/dist/cjs/export/DefoldExporter.js +1106 -0
- package/dist/cjs/export/DefoldExporter.js.map +1 -0
- package/dist/cjs/export/GDevelopExporter.js +748 -0
- package/dist/cjs/export/GDevelopExporter.js.map +1 -0
- package/dist/cjs/export/GameMakerExporter.js +846 -0
- package/dist/cjs/export/GameMakerExporter.js.map +1 -0
- package/dist/cjs/export/GodotExporter.js +45 -50
- package/dist/cjs/export/GodotExporter.js.map +1 -1
- package/dist/cjs/export/MinecraftBedrockExporter.js +606 -0
- package/dist/cjs/export/MinecraftBedrockExporter.js.map +1 -0
- package/dist/cjs/export/MonoGameExporter.js +1334 -0
- package/dist/cjs/export/MonoGameExporter.js.map +1 -0
- package/dist/cjs/export/Pico8Exporter.js +846 -0
- package/dist/cjs/export/Pico8Exporter.js.map +1 -0
- package/dist/cjs/export/PlatformExporter.js +4 -5
- package/dist/cjs/export/PlatformExporter.js.map +1 -1
- package/dist/cjs/export/RPGMakerExporter.js +906 -0
- package/dist/cjs/export/RPGMakerExporter.js.map +1 -0
- package/dist/cjs/export/RobloxExporter.js +943 -0
- package/dist/cjs/export/RobloxExporter.js.map +1 -0
- package/dist/cjs/export/Solar2DExporter.js +1283 -0
- package/dist/cjs/export/Solar2DExporter.js.map +1 -0
- package/dist/cjs/export/ThreeJSExporter.js +52 -55
- package/dist/cjs/export/ThreeJSExporter.js.map +1 -1
- package/dist/cjs/export/Tic80Exporter.js +1315 -0
- package/dist/cjs/export/Tic80Exporter.js.map +1 -0
- package/dist/cjs/export/UnityExporter.js +41 -56
- package/dist/cjs/export/UnityExporter.js.map +1 -1
- package/dist/cjs/export/UnrealExporter.js +962 -0
- package/dist/cjs/export/UnrealExporter.js.map +1 -0
- package/dist/cjs/export/WebExporter.js +42 -50
- package/dist/cjs/export/WebExporter.js.map +1 -1
- package/dist/cjs/export/index.js +50 -2
- package/dist/cjs/export/index.js.map +1 -1
- package/dist/cjs/godot-integration/GodotAssetLibrary.js +716 -0
- package/dist/cjs/godot-integration/GodotAssetLibrary.js.map +1 -0
- package/dist/cjs/godot-integration/GodotImport.js +1069 -0
- package/dist/cjs/godot-integration/GodotImport.js.map +1 -0
- package/dist/cjs/godot-integration/GodotLiveLink.js +962 -0
- package/dist/cjs/godot-integration/GodotLiveLink.js.map +1 -0
- package/dist/cjs/godot-integration/components/GodotProjectBrowser.js +668 -0
- package/dist/cjs/godot-integration/components/GodotProjectBrowser.js.map +1 -0
- package/dist/cjs/i18n/I18n.js +56 -30
- package/dist/cjs/i18n/I18n.js.map +1 -1
- package/dist/cjs/i18n/useTranslation.js +4 -4
- package/dist/cjs/i18n/useTranslation.js.map +1 -1
- package/dist/cjs/import/AsepriteImporter.js +15 -19
- package/dist/cjs/import/AsepriteImporter.js.map +1 -1
- package/dist/cjs/import/DragonBonesImporter.js +36 -40
- package/dist/cjs/import/DragonBonesImporter.js.map +1 -1
- package/dist/cjs/import/GameMakerImporter.js +11 -17
- package/dist/cjs/import/GameMakerImporter.js.map +1 -1
- package/dist/cjs/import/GodotSceneImporter.js +43 -29
- package/dist/cjs/import/GodotSceneImporter.js.map +1 -1
- package/dist/cjs/import/LDtkImporter.js +16 -17
- package/dist/cjs/import/LDtkImporter.js.map +1 -1
- package/dist/cjs/import/Live2DImporter.js +16 -19
- package/dist/cjs/import/Live2DImporter.js.map +1 -1
- package/dist/cjs/import/NdgFormat.js +28 -35
- package/dist/cjs/import/NdgFormat.js.map +1 -1
- package/dist/cjs/import/OgmoImporter.js +16 -18
- package/dist/cjs/import/OgmoImporter.js.map +1 -1
- package/dist/cjs/import/RPGMakerImporter.js +5 -6
- package/dist/cjs/import/RPGMakerImporter.js.map +1 -1
- package/dist/cjs/import/SceneImporter.js +23 -13
- package/dist/cjs/import/SceneImporter.js.map +1 -1
- package/dist/cjs/import/SpineImporter.js +20 -20
- package/dist/cjs/import/SpineImporter.js.map +1 -1
- package/dist/cjs/import/SpriterImporter.js +38 -46
- package/dist/cjs/import/SpriterImporter.js.map +1 -1
- package/dist/cjs/import/TiledMapImporter.js +20 -24
- package/dist/cjs/import/TiledMapImporter.js.map +1 -1
- package/dist/cjs/import/UnitySceneImporter.js +15 -15
- package/dist/cjs/import/UnitySceneImporter.js.map +1 -1
- package/dist/cjs/index.js +516 -4
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/input/GamepadNavigation.js +82 -47
- package/dist/cjs/input/GamepadNavigation.js.map +1 -1
- package/dist/cjs/input/InputManager.js +107 -52
- package/dist/cjs/input/InputManager.js.map +1 -1
- package/dist/cjs/input/useGamepads.js +35 -29
- package/dist/cjs/input/useGamepads.js.map +1 -1
- package/dist/cjs/integration/IconSprite.js +39 -21
- package/dist/cjs/integration/IconSprite.js.map +1 -1
- package/dist/cjs/inventory/InventorySystem.js +218 -127
- package/dist/cjs/inventory/InventorySystem.js.map +1 -1
- package/dist/cjs/kids/KidMode.js +491 -78
- package/dist/cjs/kids/KidMode.js.map +1 -1
- package/dist/cjs/kids/KidTools.js +154 -48
- package/dist/cjs/kids/KidTools.js.map +1 -1
- package/dist/cjs/monetization/Monetization.js +47 -35
- package/dist/cjs/monetization/Monetization.js.map +1 -1
- package/dist/cjs/multiplayer/LocalMultiplayer.js +48 -26
- package/dist/cjs/multiplayer/LocalMultiplayer.js.map +1 -1
- package/dist/cjs/multiplayer/MiniGameTypes.js +23 -10
- package/dist/cjs/multiplayer/MiniGameTypes.js.map +1 -1
- package/dist/cjs/native-engine/AssetPipeline.js +540 -0
- package/dist/cjs/native-engine/AssetPipeline.js.map +1 -0
- package/dist/cjs/native-engine/AudioEngine.js +825 -0
- package/dist/cjs/native-engine/AudioEngine.js.map +1 -0
- package/dist/cjs/native-engine/InputSystem.js +1175 -0
- package/dist/cjs/native-engine/InputSystem.js.map +1 -0
- package/dist/cjs/native-engine/NetworkingSystem.js +825 -0
- package/dist/cjs/native-engine/NetworkingSystem.js.map +1 -0
- package/dist/cjs/native-engine/PhysicsEngine.js +622 -0
- package/dist/cjs/native-engine/PhysicsEngine.js.map +1 -0
- package/dist/cjs/native-engine/RenderingEngine.js +371 -0
- package/dist/cjs/native-engine/RenderingEngine.js.map +1 -0
- package/dist/cjs/native-engine/SceneGraph.js +862 -0
- package/dist/cjs/native-engine/SceneGraph.js.map +1 -0
- package/dist/cjs/network/MultiplayerTransport.js +63 -33
- package/dist/cjs/network/MultiplayerTransport.js.map +1 -1
- package/dist/cjs/network/Networking.js +87 -62
- package/dist/cjs/network/Networking.js.map +1 -1
- package/dist/cjs/pathfinding/Pathfinding.js +71 -26
- package/dist/cjs/pathfinding/Pathfinding.js.map +1 -1
- package/dist/cjs/performance/AssetStreaming.js +656 -0
- package/dist/cjs/performance/AssetStreaming.js.map +1 -0
- package/dist/cjs/performance/BenchmarkSuite.js +37 -24
- package/dist/cjs/performance/BenchmarkSuite.js.map +1 -1
- package/dist/cjs/performance/DeltaCompression.js +566 -0
- package/dist/cjs/performance/DeltaCompression.js.map +1 -0
- package/dist/cjs/performance/DeterministicPhysics.js +603 -0
- package/dist/cjs/performance/DeterministicPhysics.js.map +1 -0
- package/dist/cjs/performance/ECSOptimization.js +726 -0
- package/dist/cjs/performance/ECSOptimization.js.map +1 -0
- package/dist/cjs/performance/HotReload.js +525 -0
- package/dist/cjs/performance/HotReload.js.map +1 -0
- package/dist/cjs/performance/InputRecording.js +590 -0
- package/dist/cjs/performance/InputRecording.js.map +1 -0
- package/dist/cjs/performance/InterestManagement.js +532 -0
- package/dist/cjs/performance/InterestManagement.js.map +1 -0
- package/dist/cjs/performance/LocalizationRuntime.js +472 -0
- package/dist/cjs/performance/LocalizationRuntime.js.map +1 -0
- package/dist/cjs/performance/MemoryManagement.js +487 -0
- package/dist/cjs/performance/MemoryManagement.js.map +1 -0
- package/dist/cjs/performance/ModSupport.js +531 -0
- package/dist/cjs/performance/ModSupport.js.map +1 -0
- package/dist/cjs/performance/MultiThreadedPhysics.js +500 -0
- package/dist/cjs/performance/MultiThreadedPhysics.js.map +1 -0
- package/dist/cjs/performance/NetworkPrediction.js +521 -0
- package/dist/cjs/performance/NetworkPrediction.js.map +1 -0
- package/dist/cjs/performance/ObjectPooling.js +653 -0
- package/dist/cjs/performance/ObjectPooling.js.map +1 -0
- package/dist/cjs/performance/Performance.js +64 -25
- package/dist/cjs/performance/Performance.js.map +1 -1
- package/dist/cjs/performance/PerformanceAdvanced.js +83 -49
- package/dist/cjs/performance/PerformanceAdvanced.js.map +1 -1
- package/dist/cjs/performance/SaveSystem.js +574 -0
- package/dist/cjs/performance/SaveSystem.js.map +1 -0
- package/dist/cjs/performance/WebGPURenderer.js +702 -0
- package/dist/cjs/performance/WebGPURenderer.js.map +1 -0
- package/dist/cjs/physics/PhysicsAdvanced.js +32 -20
- package/dist/cjs/physics/PhysicsAdvanced.js.map +1 -1
- package/dist/cjs/physics/PhysicsEngine2D.js +63 -36
- package/dist/cjs/physics/PhysicsEngine2D.js.map +1 -1
- package/dist/cjs/plugins/PluginSDK.js +46 -34
- package/dist/cjs/plugins/PluginSDK.js.map +1 -1
- package/dist/cjs/plugins/PluginTestKit.js +28 -29
- package/dist/cjs/plugins/PluginTestKit.js.map +1 -1
- package/dist/cjs/procedural/Procedural.js +24 -17
- package/dist/cjs/procedural/Procedural.js.map +1 -1
- package/dist/cjs/procedural/WorldBuilding.js +187 -55
- package/dist/cjs/procedural/WorldBuilding.js.map +1 -1
- package/dist/cjs/quest/QuestSystem.js +145 -111
- package/dist/cjs/quest/QuestSystem.js.map +1 -1
- package/dist/cjs/release/Release.js +142 -31
- package/dist/cjs/release/Release.js.map +1 -1
- package/dist/cjs/rendering/Camera2D.js +12 -7
- package/dist/cjs/rendering/Camera2D.js.map +1 -1
- package/dist/cjs/rendering/Renderer2D.js +62 -26
- package/dist/cjs/rendering/Renderer2D.js.map +1 -1
- package/dist/cjs/rendering/WebGPURenderPipeline.js +60 -31
- package/dist/cjs/rendering/WebGPURenderPipeline.js.map +1 -1
- package/dist/cjs/runtime3d/Runtime3D.js +80 -55
- package/dist/cjs/runtime3d/Runtime3D.js.map +1 -1
- package/dist/cjs/runtime3d/SceneEditor3D.js +20 -11
- package/dist/cjs/runtime3d/SceneEditor3D.js.map +1 -1
- package/dist/cjs/scene/SceneManager.js +26 -12
- package/dist/cjs/scene/SceneManager.js.map +1 -1
- package/dist/cjs/scripting/GraphToAST.js +36 -24
- package/dist/cjs/scripting/GraphToAST.js.map +1 -1
- package/dist/cjs/scripting/LanguageExporter.js +2 -3
- package/dist/cjs/scripting/LanguageExporter.js.map +1 -1
- package/dist/cjs/scripting/NodeGraph.js +49 -32
- package/dist/cjs/scripting/NodeGraph.js.map +1 -1
- package/dist/cjs/scripting/ScriptAST.js +19 -6
- package/dist/cjs/scripting/ScriptAST.js.map +1 -1
- package/dist/cjs/scripting/VisualScripting2.js +13 -12
- package/dist/cjs/scripting/VisualScripting2.js.map +1 -1
- package/dist/cjs/scripting/exporters/CSharpExporter.js +16 -16
- package/dist/cjs/scripting/exporters/CSharpExporter.js.map +1 -1
- package/dist/cjs/scripting/exporters/GDScriptExporter.js +3 -6
- package/dist/cjs/scripting/exporters/GDScriptExporter.js.map +1 -1
- package/dist/cjs/scripting/exporters/LuaExporter.js +5 -9
- package/dist/cjs/scripting/exporters/LuaExporter.js.map +1 -1
- package/dist/cjs/scripting/exporters/PythonExporter.js +7 -13
- package/dist/cjs/scripting/exporters/PythonExporter.js.map +1 -1
- package/dist/cjs/scripting/exporters/RustExporter.js +7 -14
- package/dist/cjs/scripting/exporters/RustExporter.js.map +1 -1
- package/dist/cjs/scripting/exporters/TypeScriptExporter.js +28 -29
- package/dist/cjs/scripting/exporters/TypeScriptExporter.js.map +1 -1
- package/dist/cjs/social/Social.js +27 -20
- package/dist/cjs/social/Social.js.map +1 -1
- package/dist/cjs/systems/LightingSystem.js +980 -0
- package/dist/cjs/systems/LightingSystem.js.map +1 -0
- package/dist/cjs/systems/ParticleSystem2.js +34 -17
- package/dist/cjs/systems/ParticleSystem2.js.map +1 -1
- package/dist/cjs/systems/PhysicsDebugSystem.js +1228 -0
- package/dist/cjs/systems/PhysicsDebugSystem.js.map +1 -0
- package/dist/cjs/systems/TerrainSystem.js +1137 -0
- package/dist/cjs/systems/TerrainSystem.js.map +1 -0
- package/dist/cjs/templates/ActionTemplates.js +144 -24
- package/dist/cjs/templates/ActionTemplates.js.map +1 -1
- package/dist/cjs/templates/FightingTemplate.js +536 -0
- package/dist/cjs/templates/FightingTemplate.js.map +1 -0
- package/dist/cjs/templates/MetroidvaniaTemplate.js +523 -0
- package/dist/cjs/templates/MetroidvaniaTemplate.js.map +1 -0
- package/dist/cjs/templates/PartyTemplates.js +60 -28
- package/dist/cjs/templates/PartyTemplates.js.map +1 -1
- package/dist/cjs/templates/PuzzleTemplates.js +63 -22
- package/dist/cjs/templates/PuzzleTemplates.js.map +1 -1
- package/dist/cjs/templates/RPGTemplates.js +29 -15
- package/dist/cjs/templates/RPGTemplates.js.map +1 -1
- package/dist/cjs/templates/SportsTemplates.js +41 -17
- package/dist/cjs/templates/SportsTemplates.js.map +1 -1
- package/dist/cjs/templates/StrategyTemplates.js +45 -18
- package/dist/cjs/templates/StrategyTemplates.js.map +1 -1
- package/dist/cjs/templates/SurvivalTemplate.js +479 -0
- package/dist/cjs/templates/SurvivalTemplate.js.map +1 -0
- package/dist/cjs/templates/WaveDefense.js +139 -52
- package/dist/cjs/templates/WaveDefense.js.map +1 -1
- package/dist/cjs/tilemap/Tilemap.js +48 -32
- package/dist/cjs/tilemap/Tilemap.js.map +1 -1
- package/dist/cjs/tutorials/TutorialBranching.js +111 -42
- package/dist/cjs/tutorials/TutorialBranching.js.map +1 -1
- package/dist/cjs/tutorials/TutorialEngine.js +152 -80
- package/dist/cjs/tutorials/TutorialEngine.js.map +1 -1
- package/dist/cjs/tutorials/TutorialOverlay.js +117 -40
- package/dist/cjs/tutorials/TutorialOverlay.js.map +1 -1
- package/dist/cjs/ui/GameUI.js +69 -42
- package/dist/cjs/ui/GameUI.js.map +1 -1
- package/dist/cjs/unity-integration/UnityAssetStore.js +754 -0
- package/dist/cjs/unity-integration/UnityAssetStore.js.map +1 -0
- package/dist/cjs/unity-integration/UnityImport.js +1252 -0
- package/dist/cjs/unity-integration/UnityImport.js.map +1 -0
- package/dist/cjs/unity-integration/UnityLiveLink.js +1022 -0
- package/dist/cjs/unity-integration/UnityLiveLink.js.map +1 -0
- package/dist/cjs/unity-integration/components/UnityAssetStoreBrowser.js +796 -0
- package/dist/cjs/unity-integration/components/UnityAssetStoreBrowser.js.map +1 -0
- package/dist/cjs/unity-integration/components/UnityProjectBrowser.js +833 -0
- package/dist/cjs/unity-integration/components/UnityProjectBrowser.js.map +1 -0
- package/dist/cjs/unreal-integration/UnrealImport.js +442 -0
- package/dist/cjs/unreal-integration/UnrealImport.js.map +1 -0
- package/dist/cjs/unreal-integration/UnrealLiveLink.js +1186 -0
- package/dist/cjs/unreal-integration/UnrealLiveLink.js.map +1 -0
- package/dist/cjs/unreal-integration/UnrealMarketplace.js +497 -0
- package/dist/cjs/unreal-integration/UnrealMarketplace.js.map +1 -0
- package/dist/cjs/unreal-integration/components/UnrealProjectBrowser.js +835 -0
- package/dist/cjs/unreal-integration/components/UnrealProjectBrowser.js.map +1 -0
- package/dist/cjs/xr/ARVR.js +32 -9
- package/dist/cjs/xr/ARVR.js.map +1 -1
- package/dist/esm/accessibility/Accessibility.js +55 -20
- package/dist/esm/accessibility/Accessibility.js.map +1 -1
- package/dist/esm/ai/AI.js +74 -40
- package/dist/esm/ai/AI.js.map +1 -1
- package/dist/esm/ai/BehaviorTree.js +39 -47
- package/dist/esm/ai/BehaviorTree.js.map +1 -1
- package/dist/esm/ai/StateMachine.js +65 -99
- package/dist/esm/ai/StateMachine.js.map +1 -1
- package/dist/esm/animation/Animation.js +58 -34
- package/dist/esm/animation/Animation.js.map +1 -1
- package/dist/esm/audio/AudioAdvanced.js +71 -37
- package/dist/esm/audio/AudioAdvanced.js.map +1 -1
- package/dist/esm/audio/AudioBridge.js +61 -49
- package/dist/esm/audio/AudioBridge.js.map +1 -1
- package/dist/esm/audio/AudioManager.js +45 -29
- package/dist/esm/audio/AudioManager.js.map +1 -1
- package/dist/esm/build-cloud/BuildOrchestration.js +1129 -0
- package/dist/esm/build-cloud/BuildOrchestration.js.map +1 -0
- package/dist/esm/build-cloud/GodotBuildCloud.js +715 -0
- package/dist/esm/build-cloud/GodotBuildCloud.js.map +1 -0
- package/dist/esm/build-cloud/UnityBuildCloud.js +643 -0
- package/dist/esm/build-cloud/UnityBuildCloud.js.map +1 -0
- package/dist/esm/build-cloud/UnrealBuildCloud.js +668 -0
- package/dist/esm/build-cloud/UnrealBuildCloud.js.map +1 -0
- package/dist/esm/core/EventBus.js +2 -1
- package/dist/esm/core/EventBus.js.map +1 -1
- package/dist/esm/core/GameConfig.js +1 -1
- package/dist/esm/core/GameConfig.js.map +1 -1
- package/dist/esm/core/GameLoop.js +6 -3
- package/dist/esm/core/GameLoop.js.map +1 -1
- package/dist/esm/core/ServiceLocator.js +1 -2
- package/dist/esm/core/ServiceLocator.js.map +1 -1
- package/dist/esm/devtools/DevTools.js +73 -43
- package/dist/esm/devtools/DevTools.js.map +1 -1
- package/dist/esm/devtools/DeveloperExperience.js +84 -42
- package/dist/esm/devtools/DeveloperExperience.js.map +1 -1
- package/dist/esm/devtools/GameplayAnalytics.js +71 -43
- package/dist/esm/devtools/GameplayAnalytics.js.map +1 -1
- package/dist/esm/dialogue/DialogueSystem.js +153 -129
- package/dist/esm/dialogue/DialogueSystem.js.map +1 -1
- package/dist/esm/docs/DocGenerator.js +70 -28
- package/dist/esm/docs/DocGenerator.js.map +1 -1
- package/dist/esm/ecs/World.js +159 -33
- package/dist/esm/ecs/World.js.map +1 -1
- package/dist/esm/editor/AchievementEditor.js +645 -0
- package/dist/esm/editor/AchievementEditor.js.map +1 -0
- package/dist/esm/editor/AdvancedEditor.js +95 -23
- package/dist/esm/editor/AdvancedEditor.js.map +1 -1
- package/dist/esm/editor/AnimationRetargeting.js +738 -0
- package/dist/esm/editor/AnimationRetargeting.js.map +1 -0
- package/dist/esm/editor/AssetBrowser.js +1184 -0
- package/dist/esm/editor/AssetBrowser.js.map +1 -0
- package/dist/esm/editor/AssetManager.js +22 -14
- package/dist/esm/editor/AssetManager.js.map +1 -1
- package/dist/esm/editor/ConsolePro.js +1085 -0
- package/dist/esm/editor/ConsolePro.js.map +1 -0
- package/dist/esm/editor/CraftingEditor.js +744 -0
- package/dist/esm/editor/CraftingEditor.js.map +1 -0
- package/dist/esm/editor/DebugTools.js +46 -23
- package/dist/esm/editor/DebugTools.js.map +1 -1
- package/dist/esm/editor/DialogueSystem.js +918 -0
- package/dist/esm/editor/DialogueSystem.js.map +1 -0
- package/dist/esm/editor/LeaderboardSystem.js +491 -0
- package/dist/esm/editor/LeaderboardSystem.js.map +1 -0
- package/dist/esm/editor/NiceGameEditor.js +532 -142
- package/dist/esm/editor/NiceGameEditor.js.map +1 -1
- package/dist/esm/editor/PrefabSystem.js +858 -0
- package/dist/esm/editor/PrefabSystem.js.map +1 -0
- package/dist/esm/editor/ProfilerPanel.js +710 -0
- package/dist/esm/editor/ProfilerPanel.js.map +1 -0
- package/dist/esm/editor/QuestEditor.js +846 -0
- package/dist/esm/editor/QuestEditor.js.map +1 -0
- package/dist/esm/editor/ReplaySystem.js +648 -0
- package/dist/esm/editor/ReplaySystem.js.map +1 -0
- package/dist/esm/editor/SceneEditor.js +33 -13
- package/dist/esm/editor/SceneEditor.js.map +1 -1
- package/dist/esm/editor/ScreenshotMode.js +702 -0
- package/dist/esm/editor/ScreenshotMode.js.map +1 -0
- package/dist/esm/editor/ShaderGraph.js +7 -6
- package/dist/esm/editor/ShaderGraph.js.map +1 -1
- package/dist/esm/editor/TimelineEditor.js +37 -30
- package/dist/esm/editor/TimelineEditor.js.map +1 -1
- package/dist/esm/editor/UndoRedoPro.js +914 -0
- package/dist/esm/editor/UndoRedoPro.js.map +1 -0
- package/dist/esm/editor/VRARMode.js +653 -0
- package/dist/esm/editor/VRARMode.js.map +1 -0
- package/dist/esm/engine/NiceGameEngine.js +12 -10
- package/dist/esm/engine/NiceGameEngine.js.map +1 -1
- package/dist/esm/engine/SaveSystemV2.js +73 -37
- package/dist/esm/engine/SaveSystemV2.js.map +1 -1
- package/dist/esm/enterprise/Enterprise.js +92 -44
- package/dist/esm/enterprise/Enterprise.js.map +1 -1
- package/dist/esm/export/BevyExporter.js +995 -0
- package/dist/esm/export/BevyExporter.js.map +1 -0
- package/dist/esm/export/CocosExporter.js +703 -0
- package/dist/esm/export/CocosExporter.js.map +1 -0
- package/dist/esm/export/Construct3Exporter.js +829 -0
- package/dist/esm/export/Construct3Exporter.js.map +1 -0
- package/dist/esm/export/DefoldExporter.js +1103 -0
- package/dist/esm/export/DefoldExporter.js.map +1 -0
- package/dist/esm/export/GDevelopExporter.js +745 -0
- package/dist/esm/export/GDevelopExporter.js.map +1 -0
- package/dist/esm/export/GameMakerExporter.js +843 -0
- package/dist/esm/export/GameMakerExporter.js.map +1 -0
- package/dist/esm/export/GodotExporter.js +45 -50
- package/dist/esm/export/GodotExporter.js.map +1 -1
- package/dist/esm/export/MinecraftBedrockExporter.js +603 -0
- package/dist/esm/export/MinecraftBedrockExporter.js.map +1 -0
- package/dist/esm/export/MonoGameExporter.js +1331 -0
- package/dist/esm/export/MonoGameExporter.js.map +1 -0
- package/dist/esm/export/Pico8Exporter.js +843 -0
- package/dist/esm/export/Pico8Exporter.js.map +1 -0
- package/dist/esm/export/PlatformExporter.js +4 -5
- package/dist/esm/export/PlatformExporter.js.map +1 -1
- package/dist/esm/export/RPGMakerExporter.js +903 -0
- package/dist/esm/export/RPGMakerExporter.js.map +1 -0
- package/dist/esm/export/RobloxExporter.js +940 -0
- package/dist/esm/export/RobloxExporter.js.map +1 -0
- package/dist/esm/export/Solar2DExporter.js +1280 -0
- package/dist/esm/export/Solar2DExporter.js.map +1 -0
- package/dist/esm/export/ThreeJSExporter.js +52 -55
- package/dist/esm/export/ThreeJSExporter.js.map +1 -1
- package/dist/esm/export/Tic80Exporter.js +1312 -0
- package/dist/esm/export/Tic80Exporter.js.map +1 -0
- package/dist/esm/export/UnityExporter.js +41 -56
- package/dist/esm/export/UnityExporter.js.map +1 -1
- package/dist/esm/export/UnrealExporter.js +959 -0
- package/dist/esm/export/UnrealExporter.js.map +1 -0
- package/dist/esm/export/WebExporter.js +42 -50
- package/dist/esm/export/WebExporter.js.map +1 -1
- package/dist/esm/export/index.js +38 -2
- package/dist/esm/export/index.js.map +1 -1
- package/dist/esm/godot-integration/GodotAssetLibrary.js +711 -0
- package/dist/esm/godot-integration/GodotAssetLibrary.js.map +1 -0
- package/dist/esm/godot-integration/GodotImport.js +1062 -0
- package/dist/esm/godot-integration/GodotImport.js.map +1 -0
- package/dist/esm/godot-integration/GodotLiveLink.js +958 -0
- package/dist/esm/godot-integration/GodotLiveLink.js.map +1 -0
- package/dist/esm/godot-integration/components/GodotProjectBrowser.js +666 -0
- package/dist/esm/godot-integration/components/GodotProjectBrowser.js.map +1 -0
- package/dist/esm/i18n/I18n.js +56 -30
- package/dist/esm/i18n/I18n.js.map +1 -1
- package/dist/esm/i18n/useTranslation.js +4 -4
- package/dist/esm/i18n/useTranslation.js.map +1 -1
- package/dist/esm/import/AsepriteImporter.js +15 -19
- package/dist/esm/import/AsepriteImporter.js.map +1 -1
- package/dist/esm/import/DragonBonesImporter.js +36 -40
- package/dist/esm/import/DragonBonesImporter.js.map +1 -1
- package/dist/esm/import/GameMakerImporter.js +11 -17
- package/dist/esm/import/GameMakerImporter.js.map +1 -1
- package/dist/esm/import/GodotSceneImporter.js +43 -29
- package/dist/esm/import/GodotSceneImporter.js.map +1 -1
- package/dist/esm/import/LDtkImporter.js +16 -17
- package/dist/esm/import/LDtkImporter.js.map +1 -1
- package/dist/esm/import/Live2DImporter.js +16 -19
- package/dist/esm/import/Live2DImporter.js.map +1 -1
- package/dist/esm/import/NdgFormat.js +28 -35
- package/dist/esm/import/NdgFormat.js.map +1 -1
- package/dist/esm/import/OgmoImporter.js +16 -18
- package/dist/esm/import/OgmoImporter.js.map +1 -1
- package/dist/esm/import/RPGMakerImporter.js +5 -6
- package/dist/esm/import/RPGMakerImporter.js.map +1 -1
- package/dist/esm/import/SceneImporter.js +23 -13
- package/dist/esm/import/SceneImporter.js.map +1 -1
- package/dist/esm/import/SpineImporter.js +20 -20
- package/dist/esm/import/SpineImporter.js.map +1 -1
- package/dist/esm/import/SpriterImporter.js +38 -46
- package/dist/esm/import/SpriterImporter.js.map +1 -1
- package/dist/esm/import/TiledMapImporter.js +20 -24
- package/dist/esm/import/TiledMapImporter.js.map +1 -1
- package/dist/esm/import/UnitySceneImporter.js +15 -15
- package/dist/esm/import/UnitySceneImporter.js.map +1 -1
- package/dist/esm/index.js +76 -3
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/input/GamepadNavigation.js +82 -47
- package/dist/esm/input/GamepadNavigation.js.map +1 -1
- package/dist/esm/input/InputManager.js +107 -52
- package/dist/esm/input/InputManager.js.map +1 -1
- package/dist/esm/input/useGamepads.js +35 -29
- package/dist/esm/input/useGamepads.js.map +1 -1
- package/dist/esm/integration/IconSprite.js +39 -21
- package/dist/esm/integration/IconSprite.js.map +1 -1
- package/dist/esm/inventory/InventorySystem.js +218 -127
- package/dist/esm/inventory/InventorySystem.js.map +1 -1
- package/dist/esm/kids/KidMode.js +491 -78
- package/dist/esm/kids/KidMode.js.map +1 -1
- package/dist/esm/kids/KidTools.js +154 -48
- package/dist/esm/kids/KidTools.js.map +1 -1
- package/dist/esm/monetization/Monetization.js +47 -35
- package/dist/esm/monetization/Monetization.js.map +1 -1
- package/dist/esm/multiplayer/LocalMultiplayer.js +48 -26
- package/dist/esm/multiplayer/LocalMultiplayer.js.map +1 -1
- package/dist/esm/multiplayer/MiniGameTypes.js +23 -10
- package/dist/esm/multiplayer/MiniGameTypes.js.map +1 -1
- package/dist/esm/native-engine/AssetPipeline.js +537 -0
- package/dist/esm/native-engine/AssetPipeline.js.map +1 -0
- package/dist/esm/native-engine/AudioEngine.js +822 -0
- package/dist/esm/native-engine/AudioEngine.js.map +1 -0
- package/dist/esm/native-engine/InputSystem.js +1170 -0
- package/dist/esm/native-engine/InputSystem.js.map +1 -0
- package/dist/esm/native-engine/NetworkingSystem.js +817 -0
- package/dist/esm/native-engine/NetworkingSystem.js.map +1 -0
- package/dist/esm/native-engine/PhysicsEngine.js +619 -0
- package/dist/esm/native-engine/PhysicsEngine.js.map +1 -0
- package/dist/esm/native-engine/RenderingEngine.js +368 -0
- package/dist/esm/native-engine/RenderingEngine.js.map +1 -0
- package/dist/esm/native-engine/SceneGraph.js +857 -0
- package/dist/esm/native-engine/SceneGraph.js.map +1 -0
- package/dist/esm/network/MultiplayerTransport.js +63 -33
- package/dist/esm/network/MultiplayerTransport.js.map +1 -1
- package/dist/esm/network/Networking.js +87 -62
- package/dist/esm/network/Networking.js.map +1 -1
- package/dist/esm/pathfinding/Pathfinding.js +71 -26
- package/dist/esm/pathfinding/Pathfinding.js.map +1 -1
- package/dist/esm/performance/AssetStreaming.js +649 -0
- package/dist/esm/performance/AssetStreaming.js.map +1 -0
- package/dist/esm/performance/BenchmarkSuite.js +37 -24
- package/dist/esm/performance/BenchmarkSuite.js.map +1 -1
- package/dist/esm/performance/DeltaCompression.js +554 -0
- package/dist/esm/performance/DeltaCompression.js.map +1 -0
- package/dist/esm/performance/DeterministicPhysics.js +573 -0
- package/dist/esm/performance/DeterministicPhysics.js.map +1 -0
- package/dist/esm/performance/ECSOptimization.js +716 -0
- package/dist/esm/performance/ECSOptimization.js.map +1 -0
- package/dist/esm/performance/HotReload.js +517 -0
- package/dist/esm/performance/HotReload.js.map +1 -0
- package/dist/esm/performance/InputRecording.js +580 -0
- package/dist/esm/performance/InputRecording.js.map +1 -0
- package/dist/esm/performance/InterestManagement.js +524 -0
- package/dist/esm/performance/InterestManagement.js.map +1 -0
- package/dist/esm/performance/LocalizationRuntime.js +465 -0
- package/dist/esm/performance/LocalizationRuntime.js.map +1 -0
- package/dist/esm/performance/MemoryManagement.js +481 -0
- package/dist/esm/performance/MemoryManagement.js.map +1 -0
- package/dist/esm/performance/ModSupport.js +520 -0
- package/dist/esm/performance/ModSupport.js.map +1 -0
- package/dist/esm/performance/MultiThreadedPhysics.js +491 -0
- package/dist/esm/performance/MultiThreadedPhysics.js.map +1 -0
- package/dist/esm/performance/NetworkPrediction.js +508 -0
- package/dist/esm/performance/NetworkPrediction.js.map +1 -0
- package/dist/esm/performance/ObjectPooling.js +639 -0
- package/dist/esm/performance/ObjectPooling.js.map +1 -0
- package/dist/esm/performance/Performance.js +64 -25
- package/dist/esm/performance/Performance.js.map +1 -1
- package/dist/esm/performance/PerformanceAdvanced.js +83 -49
- package/dist/esm/performance/PerformanceAdvanced.js.map +1 -1
- package/dist/esm/performance/SaveSystem.js +567 -0
- package/dist/esm/performance/SaveSystem.js.map +1 -0
- package/dist/esm/performance/WebGPURenderer.js +697 -0
- package/dist/esm/performance/WebGPURenderer.js.map +1 -0
- package/dist/esm/physics/PhysicsAdvanced.js +32 -20
- package/dist/esm/physics/PhysicsAdvanced.js.map +1 -1
- package/dist/esm/physics/PhysicsEngine2D.js +63 -36
- package/dist/esm/physics/PhysicsEngine2D.js.map +1 -1
- package/dist/esm/plugins/PluginSDK.js +46 -34
- package/dist/esm/plugins/PluginSDK.js.map +1 -1
- package/dist/esm/plugins/PluginTestKit.js +28 -29
- package/dist/esm/plugins/PluginTestKit.js.map +1 -1
- package/dist/esm/procedural/Procedural.js +24 -17
- package/dist/esm/procedural/Procedural.js.map +1 -1
- package/dist/esm/procedural/WorldBuilding.js +188 -55
- package/dist/esm/procedural/WorldBuilding.js.map +1 -1
- package/dist/esm/quest/QuestSystem.js +145 -111
- package/dist/esm/quest/QuestSystem.js.map +1 -1
- package/dist/esm/release/Release.js +142 -31
- package/dist/esm/release/Release.js.map +1 -1
- package/dist/esm/rendering/Camera2D.js +12 -7
- package/dist/esm/rendering/Camera2D.js.map +1 -1
- package/dist/esm/rendering/Renderer2D.js +62 -26
- package/dist/esm/rendering/Renderer2D.js.map +1 -1
- package/dist/esm/rendering/WebGPURenderPipeline.js +60 -31
- package/dist/esm/rendering/WebGPURenderPipeline.js.map +1 -1
- package/dist/esm/runtime3d/Runtime3D.js +80 -55
- package/dist/esm/runtime3d/Runtime3D.js.map +1 -1
- package/dist/esm/runtime3d/SceneEditor3D.js +20 -11
- package/dist/esm/runtime3d/SceneEditor3D.js.map +1 -1
- package/dist/esm/scene/SceneManager.js +26 -12
- package/dist/esm/scene/SceneManager.js.map +1 -1
- package/dist/esm/scripting/GraphToAST.js +36 -24
- package/dist/esm/scripting/GraphToAST.js.map +1 -1
- package/dist/esm/scripting/LanguageExporter.js +2 -3
- package/dist/esm/scripting/LanguageExporter.js.map +1 -1
- package/dist/esm/scripting/NodeGraph.js +49 -32
- package/dist/esm/scripting/NodeGraph.js.map +1 -1
- package/dist/esm/scripting/ScriptAST.js +19 -6
- package/dist/esm/scripting/ScriptAST.js.map +1 -1
- package/dist/esm/scripting/VisualScripting2.js +13 -12
- package/dist/esm/scripting/VisualScripting2.js.map +1 -1
- package/dist/esm/scripting/exporters/CSharpExporter.js +16 -16
- package/dist/esm/scripting/exporters/CSharpExporter.js.map +1 -1
- package/dist/esm/scripting/exporters/GDScriptExporter.js +3 -6
- package/dist/esm/scripting/exporters/GDScriptExporter.js.map +1 -1
- package/dist/esm/scripting/exporters/LuaExporter.js +5 -9
- package/dist/esm/scripting/exporters/LuaExporter.js.map +1 -1
- package/dist/esm/scripting/exporters/PythonExporter.js +7 -13
- package/dist/esm/scripting/exporters/PythonExporter.js.map +1 -1
- package/dist/esm/scripting/exporters/RustExporter.js +7 -14
- package/dist/esm/scripting/exporters/RustExporter.js.map +1 -1
- package/dist/esm/scripting/exporters/TypeScriptExporter.js +28 -29
- package/dist/esm/scripting/exporters/TypeScriptExporter.js.map +1 -1
- package/dist/esm/social/Social.js +27 -20
- package/dist/esm/social/Social.js.map +1 -1
- package/dist/esm/systems/LightingSystem.js +968 -0
- package/dist/esm/systems/LightingSystem.js.map +1 -0
- package/dist/esm/systems/ParticleSystem2.js +34 -17
- package/dist/esm/systems/ParticleSystem2.js.map +1 -1
- package/dist/esm/systems/PhysicsDebugSystem.js +1219 -0
- package/dist/esm/systems/PhysicsDebugSystem.js.map +1 -0
- package/dist/esm/systems/TerrainSystem.js +1125 -0
- package/dist/esm/systems/TerrainSystem.js.map +1 -0
- package/dist/esm/templates/ActionTemplates.js +144 -24
- package/dist/esm/templates/ActionTemplates.js.map +1 -1
- package/dist/esm/templates/FightingTemplate.js +513 -0
- package/dist/esm/templates/FightingTemplate.js.map +1 -0
- package/dist/esm/templates/MetroidvaniaTemplate.js +484 -0
- package/dist/esm/templates/MetroidvaniaTemplate.js.map +1 -0
- package/dist/esm/templates/PartyTemplates.js +60 -28
- package/dist/esm/templates/PartyTemplates.js.map +1 -1
- package/dist/esm/templates/PuzzleTemplates.js +63 -22
- package/dist/esm/templates/PuzzleTemplates.js.map +1 -1
- package/dist/esm/templates/RPGTemplates.js +29 -15
- package/dist/esm/templates/RPGTemplates.js.map +1 -1
- package/dist/esm/templates/SportsTemplates.js +41 -17
- package/dist/esm/templates/SportsTemplates.js.map +1 -1
- package/dist/esm/templates/StrategyTemplates.js +45 -18
- package/dist/esm/templates/StrategyTemplates.js.map +1 -1
- package/dist/esm/templates/SurvivalTemplate.js +447 -0
- package/dist/esm/templates/SurvivalTemplate.js.map +1 -0
- package/dist/esm/templates/WaveDefense.js +139 -52
- package/dist/esm/templates/WaveDefense.js.map +1 -1
- package/dist/esm/tilemap/Tilemap.js +48 -32
- package/dist/esm/tilemap/Tilemap.js.map +1 -1
- package/dist/esm/tutorials/TutorialBranching.js +111 -42
- package/dist/esm/tutorials/TutorialBranching.js.map +1 -1
- package/dist/esm/tutorials/TutorialEngine.js +152 -80
- package/dist/esm/tutorials/TutorialEngine.js.map +1 -1
- package/dist/esm/tutorials/TutorialOverlay.js +117 -40
- package/dist/esm/tutorials/TutorialOverlay.js.map +1 -1
- package/dist/esm/ui/GameUI.js +69 -42
- package/dist/esm/ui/GameUI.js.map +1 -1
- package/dist/esm/unity-integration/UnityAssetStore.js +749 -0
- package/dist/esm/unity-integration/UnityAssetStore.js.map +1 -0
- package/dist/esm/unity-integration/UnityImport.js +1246 -0
- package/dist/esm/unity-integration/UnityImport.js.map +1 -0
- package/dist/esm/unity-integration/UnityLiveLink.js +1017 -0
- package/dist/esm/unity-integration/UnityLiveLink.js.map +1 -0
- package/dist/esm/unity-integration/components/UnityAssetStoreBrowser.js +794 -0
- package/dist/esm/unity-integration/components/UnityAssetStoreBrowser.js.map +1 -0
- package/dist/esm/unity-integration/components/UnityProjectBrowser.js +831 -0
- package/dist/esm/unity-integration/components/UnityProjectBrowser.js.map +1 -0
- package/dist/esm/unreal-integration/UnrealImport.js +437 -0
- package/dist/esm/unreal-integration/UnrealImport.js.map +1 -0
- package/dist/esm/unreal-integration/UnrealLiveLink.js +1182 -0
- package/dist/esm/unreal-integration/UnrealLiveLink.js.map +1 -0
- package/dist/esm/unreal-integration/UnrealMarketplace.js +490 -0
- package/dist/esm/unreal-integration/UnrealMarketplace.js.map +1 -0
- package/dist/esm/unreal-integration/components/UnrealProjectBrowser.js +833 -0
- package/dist/esm/unreal-integration/components/UnrealProjectBrowser.js.map +1 -0
- package/dist/esm/xr/ARVR.js +32 -9
- package/dist/esm/xr/ARVR.js.map +1 -1
- package/package.json +7 -6
|
@@ -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
|