refactor(editor): isolate engine service boundaries
This commit is contained in:
66
editor/app/Services/Engine/EngineGameViewportBridge.cpp
Normal file
66
editor/app/Services/Engine/EngineGameViewportBridge.cpp
Normal file
@@ -0,0 +1,66 @@
|
||||
#include "Engine/EngineGameViewportBridge.h"
|
||||
|
||||
#include <XCEngine/Scene/Scene.h>
|
||||
#include <XCEngine/Scene/SceneManager.h>
|
||||
|
||||
#include <algorithm>
|
||||
#include <vector>
|
||||
|
||||
namespace XCEngine::UI::Editor::App {
|
||||
|
||||
namespace {
|
||||
|
||||
using ::XCEngine::Components::Scene;
|
||||
using ::XCEngine::Components::SceneManager;
|
||||
|
||||
Scene* ResolvePrimaryScene(SceneManager& sceneManager) {
|
||||
if (Scene* activeScene = sceneManager.GetActiveScene();
|
||||
activeScene != nullptr) {
|
||||
return activeScene;
|
||||
}
|
||||
|
||||
const std::vector<Scene*> scenes = sceneManager.GetAllScenes();
|
||||
if (!scenes.empty() && scenes.front() != nullptr) {
|
||||
sceneManager.SetActiveScene(scenes.front());
|
||||
return scenes.front();
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
GameViewportFramePlanBuildStatus EngineGameViewportBridge::BuildFramePlans(
|
||||
const ::XCEngine::Rendering::RenderContext& renderContext,
|
||||
const ::XCEngine::Rendering::RenderSurface& surface,
|
||||
std::vector<::XCEngine::Rendering::CameraStackFramePlan>& outFramePlans) {
|
||||
outFramePlans.clear();
|
||||
|
||||
Scene* scene = ResolvePrimaryScene(SceneManager::Get());
|
||||
if (scene == nullptr) {
|
||||
return GameViewportFramePlanBuildStatus::NoActiveScene;
|
||||
}
|
||||
|
||||
outFramePlans = m_gameViewportRenderer.BuildStackFramePlans(
|
||||
*scene,
|
||||
nullptr,
|
||||
renderContext,
|
||||
surface);
|
||||
outFramePlans.erase(
|
||||
std::remove_if(
|
||||
outFramePlans.begin(),
|
||||
outFramePlans.end(),
|
||||
[](const auto& plan) { return !plan.IsValid(); }),
|
||||
outFramePlans.end());
|
||||
return outFramePlans.empty()
|
||||
? GameViewportFramePlanBuildStatus::NoRenderableCamera
|
||||
: GameViewportFramePlanBuildStatus::Success;
|
||||
}
|
||||
|
||||
bool EngineGameViewportBridge::RenderFramePlans(
|
||||
const std::vector<::XCEngine::Rendering::CameraStackFramePlan>& framePlans) {
|
||||
return !framePlans.empty() &&
|
||||
m_gameViewportRenderer.Render(framePlans);
|
||||
}
|
||||
|
||||
} // namespace XCEngine::UI::Editor::App
|
||||
Reference in New Issue
Block a user