Files
XCEngine/editor/src/Viewport/SceneViewportOverlayBuilder.cpp

55 lines
1.5 KiB
C++

#include "SceneViewportOverlayBuilder.h"
#include "Core/IEditorContext.h"
#include "Core/ISceneManager.h"
#include <XCEngine/Scene/Scene.h>
#include <utility>
namespace XCEngine {
namespace Editor {
SceneViewportOverlayBuilder::SceneViewportOverlayBuilder()
: m_providerRegistry(BuildDefaultSceneViewportOverlayProviderRegistry()) {
}
SceneViewportOverlayBuilder::SceneViewportOverlayBuilder(
SceneViewportOverlayProviderRegistry providerRegistry)
: m_providerRegistry(std::move(providerRegistry)) {
}
SceneViewportOverlayFrameData SceneViewportOverlayBuilder::Build(
IEditorContext& context,
const SceneViewportOverlayData& overlay,
uint32_t viewportWidth,
uint32_t viewportHeight,
const std::vector<uint64_t>& selectedObjectIds,
const SceneViewportTransformGizmoOverlayState* transformGizmoOverlayState) const {
SceneViewportOverlayFrameData frameData = {};
frameData.overlay = overlay;
if (!overlay.valid || viewportWidth == 0u || viewportHeight == 0u) {
return frameData;
}
const Components::Scene* scene = context.GetSceneManager().GetScene();
if (scene == nullptr) {
return frameData;
}
const SceneViewportOverlayBuildContext buildContext = {
&context,
scene,
&overlay,
viewportWidth,
viewportHeight,
&selectedObjectIds,
transformGizmoOverlayState
};
m_providerRegistry.AppendOverlay(buildContext, frameData);
return frameData;
}
} // namespace Editor
} // namespace XCEngine