#pragma once #include "Core/IEditorContext.h" #include "SceneViewportInteractionResolver.h" #include "SceneViewportTransformGizmoFrameBuilder.h" #include #include namespace XCEngine { namespace Editor { struct SceneViewportHoveredHandleState { SceneViewportActiveGizmoKind hoveredGizmoKind = SceneViewportActiveGizmoKind::None; SceneViewportGizmoAxis moveAxis = SceneViewportGizmoAxis::None; SceneViewportGizmoPlane movePlane = SceneViewportGizmoPlane::None; SceneViewportRotateGizmoAxis rotateAxis = SceneViewportRotateGizmoAxis::None; SceneViewportScaleGizmoHandle scaleHandle = SceneViewportScaleGizmoHandle::None; }; struct SceneViewportInteractionActions { SceneViewportActiveGizmoKind hoveredGizmoKind = SceneViewportActiveGizmoKind::None; SceneViewportOrientationAxis orientationAxis = SceneViewportOrientationAxis::None; uint64_t sceneIconEntityId = 0; bool beginTransformGizmo = false; bool orientationGizmoClick = false; bool sceneIconClick = false; bool selectSceneClick = false; bool HasClickAction() const { return beginTransformGizmo || orientationGizmoClick || sceneIconClick || selectSceneClick; } }; SceneViewportActiveGizmoKind ToSceneViewportActiveGizmoKind(SceneViewportInteractionKind kind); SceneViewportHoveredHandleState BuildSceneViewportHoveredHandleState( const SceneViewportInteractionResult& interaction); void ApplySceneViewportHoveredHandleState( const SceneViewportHoveredHandleState& hoveredHandleState, bool gizmoActive, bool showingMoveGizmo, SceneViewportMoveGizmo& moveGizmo, bool showingRotateGizmo, SceneViewportRotateGizmo& rotateGizmo, bool showingScaleGizmo, SceneViewportScaleGizmo& scaleGizmo); SceneViewportInteractionActions BuildSceneViewportInteractionActions( const SceneViewportInteractionResult& interaction, bool hasInteractiveViewport, bool clickedLeft, bool canResolveViewportInteraction); void DispatchSceneViewportInteractionActions( const SceneViewportInteractionActions& actions, IEditorContext& context, IViewportHostService& viewportHostService, const ::XCEngine::UI::UISize& viewportSize, const Math::Vector2& localMousePosition); } // namespace Editor } // namespace XCEngine