Integrate XCUI runtime context into SceneRuntime

This commit is contained in:
2026-04-05 06:52:17 +08:00
parent edf434aa03
commit d46dcbfa9e
7 changed files with 323 additions and 2 deletions

View File

@@ -1,10 +1,21 @@
#include "Scene/SceneRuntime.h"
#include "Scripting/ScriptEngine.h"
#include <XCEngine/UI/Runtime/UISceneRuntimeContext.h>
namespace XCEngine {
namespace Components {
SceneRuntime::SceneRuntime()
: m_uiRuntime(std::make_unique<UI::Runtime::UISceneRuntimeContext>()) {
}
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;
@@ -18,16 +29,19 @@ void SceneRuntime::Start(Scene* scene) {
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;
}
@@ -49,6 +63,7 @@ void SceneRuntime::Update(float deltaTime) {
Scripting::ScriptEngine::Get().OnUpdate(deltaTime);
m_scene->Update(deltaTime);
m_uiRuntime->Update(deltaTime);
}
void SceneRuntime::LateUpdate(float deltaTime) {
@@ -60,5 +75,33 @@ void SceneRuntime::LateUpdate(float 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