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

66 lines
2.3 KiB
C++

#pragma once
#include "Core/IEditorContext.h"
#include "SceneViewportInteractionResolver.h"
#include "SceneViewportTransformGizmoFrameBuilder.h"
#include <imgui.h>
#include <cstdint>
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