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