Files
XCEngine/editor/src/Viewport/SceneViewportHudOverlay.h

68 lines
1.9 KiB
C++

#pragma once
#include "SceneViewportEditorOverlayData.h"
#include <imgui.h>
#include <cstdint>
namespace XCEngine {
namespace Editor {
enum class SceneViewportHudOverlayHitKind : uint8_t {
None = 0,
OrientationAxis
};
struct SceneViewportHudOverlayHitResult {
SceneViewportHudOverlayHitKind kind = SceneViewportHudOverlayHitKind::None;
SceneViewportOrientationAxis orientationAxis = SceneViewportOrientationAxis::None;
bool HasHit() const {
return kind != SceneViewportHudOverlayHitKind::None;
}
};
struct SceneViewportHudOverlayData {
SceneViewportOverlayData sceneOverlay = {};
bool showOrientationGizmo = true;
bool showSceneIcons = true;
const SceneViewportOverlayFrameData* overlayFrameData = nullptr;
bool HasVisibleElements() const {
return sceneOverlay.valid &&
(showOrientationGizmo ||
(showSceneIcons &&
overlayFrameData != nullptr &&
!overlayFrameData->worldSprites.empty()));
}
};
inline SceneViewportHudOverlayData BuildSceneViewportHudOverlayData(
const SceneViewportOverlayData& sceneOverlay,
bool showOrientationGizmo = true,
const SceneViewportOverlayFrameData* overlayFrameData = nullptr,
bool showSceneIcons = true) {
SceneViewportHudOverlayData data = {};
data.sceneOverlay = sceneOverlay;
data.showOrientationGizmo = showOrientationGizmo;
data.showSceneIcons = showSceneIcons;
data.overlayFrameData = overlayFrameData;
return data;
}
void DrawSceneViewportHudOverlay(
ImDrawList* drawList,
const SceneViewportHudOverlayData& overlay,
const ImVec2& viewportMin,
const ImVec2& viewportMax);
SceneViewportHudOverlayHitResult HitTestSceneViewportHudOverlay(
const SceneViewportHudOverlayData& overlay,
const ImVec2& viewportMin,
const ImVec2& viewportMax,
const ImVec2& mousePosition);
} // namespace Editor
} // namespace XCEngine