#pragma once #include "SceneViewportEditorOverlayData.h" #include #include 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