#include "Scene/SceneRuntime.h" #include "Scripting/ScriptEngine.h" #include namespace XCEngine { namespace Components { SceneRuntime::SceneRuntime() : m_uiRuntime(std::make_unique()) { } SceneRuntime::~SceneRuntime() = default; SceneRuntime::SceneRuntime(SceneRuntime&& other) noexcept = default; SceneRuntime& SceneRuntime::operator=(SceneRuntime&& other) noexcept = default; void SceneRuntime::Start(Scene* scene) { if (m_running && m_scene == scene) { return; } Stop(); if (!scene) { return; } m_scene = scene; m_running = true; m_uiRuntime->Reset(); Scripting::ScriptEngine::Get().OnRuntimeStart(scene); } void SceneRuntime::Stop() { if (!m_running) { m_uiRuntime->Reset(); m_scene = nullptr; return; } Scripting::ScriptEngine::Get().OnRuntimeStop(); m_uiRuntime->Reset(); m_running = false; m_scene = nullptr; } void SceneRuntime::FixedUpdate(float fixedDeltaTime) { if (!m_running || !m_scene || !m_scene->IsActive()) { return; } // Scripts run first so their state changes are visible to native components in the same frame. Scripting::ScriptEngine::Get().OnFixedUpdate(fixedDeltaTime); m_scene->FixedUpdate(fixedDeltaTime); } void SceneRuntime::Update(float deltaTime) { if (!m_running || !m_scene || !m_scene->IsActive()) { return; } Scripting::ScriptEngine::Get().OnUpdate(deltaTime); m_scene->Update(deltaTime); m_uiRuntime->Update(deltaTime); } void SceneRuntime::LateUpdate(float deltaTime) { if (!m_running || !m_scene || !m_scene->IsActive()) { return; } Scripting::ScriptEngine::Get().OnLateUpdate(deltaTime); m_scene->LateUpdate(deltaTime); } UI::Runtime::UISystem& SceneRuntime::GetUISystem() { return m_uiRuntime->GetSystem(); } UI::Runtime::UIScreenStackController& SceneRuntime::GetUIScreenStackController() { return m_uiRuntime->GetStackController(); } const UI::Runtime::UISystemFrameResult& SceneRuntime::GetLastUIFrame() const { return m_uiRuntime->GetLastFrame(); } void SceneRuntime::SetUIViewportRect(const UI::UIRect& viewportRect) { m_uiRuntime->SetViewportRect(viewportRect); } void SceneRuntime::SetUIFocused(bool focused) { m_uiRuntime->SetFocused(focused); } void SceneRuntime::QueueUIInputEvent(const UI::UIInputEvent& event) { m_uiRuntime->QueueInputEvent(event); } void SceneRuntime::ClearQueuedUIInputEvents() { m_uiRuntime->ClearQueuedInputEvents(); } } // namespace Components } // namespace XCEngine