66 lines
2.3 KiB
C++
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
|