Refactor scene viewport state into local sessions
This commit is contained in:
@@ -2,6 +2,7 @@
|
||||
|
||||
#include "Viewport/EditorViewportPicking.h"
|
||||
#include "Scene/EditorSceneRuntime.h"
|
||||
#include "Scene/SceneViewportSession.h"
|
||||
#include "State/EditorCommandFocusService.h"
|
||||
|
||||
#include "Panels/EditorPanelIds.h"
|
||||
@@ -105,30 +106,31 @@ bool TryResolveToolModeShortcut(
|
||||
|
||||
void ApplySceneToolMode(
|
||||
SceneToolMode mode,
|
||||
SceneViewportSession& session,
|
||||
EditorSceneRuntime& sceneRuntime,
|
||||
SceneViewportTransformGizmo& transformGizmo) {
|
||||
if (sceneRuntime.GetToolMode() == mode) {
|
||||
if (session.GetToolMode() == mode) {
|
||||
return;
|
||||
}
|
||||
|
||||
transformGizmo.CancelDrag(sceneRuntime);
|
||||
sceneRuntime.SetToolMode(mode);
|
||||
session.SetToolMode(mode);
|
||||
}
|
||||
|
||||
void ApplySceneViewportToggleButton(
|
||||
std::size_t toggleIndex,
|
||||
EditorSceneRuntime& sceneRuntime) {
|
||||
SceneViewportSession& session) {
|
||||
if (toggleIndex == 0u) {
|
||||
sceneRuntime.SetToolPivotMode(
|
||||
sceneRuntime.GetToolPivotMode() == SceneToolPivotMode::Pivot
|
||||
session.SetToolPivotMode(
|
||||
session.GetToolPivotMode() == SceneToolPivotMode::Pivot
|
||||
? SceneToolPivotMode::Center
|
||||
: SceneToolPivotMode::Pivot);
|
||||
return;
|
||||
}
|
||||
|
||||
if (toggleIndex == 1u) {
|
||||
sceneRuntime.SetToolSpaceMode(
|
||||
sceneRuntime.GetToolSpaceMode() == SceneToolSpaceMode::World
|
||||
session.SetToolSpaceMode(
|
||||
session.GetToolSpaceMode() == SceneToolSpaceMode::World
|
||||
? SceneToolSpaceMode::Local
|
||||
: SceneToolSpaceMode::World);
|
||||
}
|
||||
@@ -162,6 +164,7 @@ void SceneViewportController::SetCommandFocusService(
|
||||
|
||||
void SceneViewportController::Update(
|
||||
EditorSceneRuntime& sceneRuntime,
|
||||
SceneViewportSession& session,
|
||||
const IViewportObjectPickerService& viewportObjectPicker,
|
||||
const UIEditorWorkspaceComposeState& composeState,
|
||||
const UIEditorWorkspaceComposeFrame& composeFrame) {
|
||||
@@ -173,7 +176,6 @@ void SceneViewportController::Update(
|
||||
if (m_transformGizmo.IsActive()) {
|
||||
m_transformGizmo.CancelDrag(sceneRuntime);
|
||||
}
|
||||
sceneRuntime.SetHoveredToolHandle(SceneToolHandle::None);
|
||||
ResetInteractionState();
|
||||
return;
|
||||
}
|
||||
@@ -221,9 +223,9 @@ void SceneViewportController::Update(
|
||||
slotLayout.inputRect,
|
||||
slotLayout.topBarRect,
|
||||
slotLayout.bounds,
|
||||
sceneRuntime.GetToolMode(),
|
||||
sceneRuntime.GetToolPivotMode(),
|
||||
sceneRuntime.GetToolSpaceMode(),
|
||||
session.GetToolMode(),
|
||||
session.GetToolPivotMode(),
|
||||
session.GetToolSpaceMode(),
|
||||
kSceneViewportToolOverlayInvalidIndex,
|
||||
kSceneViewportToolOverlayInvalidIndex,
|
||||
kSceneViewportToolOverlayInvalidIndex,
|
||||
@@ -254,7 +256,7 @@ void SceneViewportController::Update(
|
||||
m_activeToggleOverlayIndex = transitionHoveredToggleOverlayIndex;
|
||||
ApplySceneViewportToggleButton(
|
||||
m_activeToggleOverlayIndex,
|
||||
sceneRuntime);
|
||||
session);
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -268,6 +270,7 @@ void SceneViewportController::Update(
|
||||
if (m_activeToolOverlayIndex < m_toolOverlay.GetFrame().buttons.size()) {
|
||||
ApplySceneToolMode(
|
||||
m_toolOverlay.GetFrame().buttons[m_activeToolOverlayIndex].mode,
|
||||
session,
|
||||
sceneRuntime,
|
||||
m_transformGizmo);
|
||||
}
|
||||
@@ -288,9 +291,9 @@ void SceneViewportController::Update(
|
||||
slotLayout.inputRect,
|
||||
slotLayout.topBarRect,
|
||||
slotLayout.bounds,
|
||||
sceneRuntime.GetToolMode(),
|
||||
sceneRuntime.GetToolPivotMode(),
|
||||
sceneRuntime.GetToolSpaceMode(),
|
||||
session.GetToolMode(),
|
||||
session.GetToolPivotMode(),
|
||||
session.GetToolSpaceMode(),
|
||||
m_hoveredToolOverlayIndex,
|
||||
m_activeToolOverlayIndex,
|
||||
m_hoveredToggleOverlayIndex,
|
||||
@@ -300,7 +303,7 @@ void SceneViewportController::Update(
|
||||
m_activeToolOverlayIndex != kSceneViewportToolOverlayInvalidIndex ||
|
||||
m_activeToggleOverlayIndex != kSceneViewportToolOverlayInvalidIndex;
|
||||
|
||||
const bool usingViewMoveTool = IsViewMoveTool(sceneRuntime.GetToolMode());
|
||||
const bool usingViewMoveTool = IsViewMoveTool(session.GetToolMode());
|
||||
|
||||
if (!m_transformGizmo.IsActive()) {
|
||||
for (const auto& transition : inputFrame.pointerButtonTransitions) {
|
||||
@@ -351,28 +354,29 @@ void SceneViewportController::Update(
|
||||
!m_navigationState.panDragging) {
|
||||
SceneToolMode shortcutMode = SceneToolMode::View;
|
||||
if (TryResolveToolModeShortcut(inputFrame, shortcutMode)) {
|
||||
ApplySceneToolMode(shortcutMode, sceneRuntime, m_transformGizmo);
|
||||
ApplySceneToolMode(shortcutMode, session, sceneRuntime, m_transformGizmo);
|
||||
}
|
||||
}
|
||||
|
||||
if (inputFrame.focused &&
|
||||
!m_transformGizmo.IsActive() &&
|
||||
WasKeyPressed(inputFrame, KeyCode::F)) {
|
||||
sceneRuntime.FocusSceneSelection();
|
||||
session.FocusSelection(sceneRuntime);
|
||||
}
|
||||
|
||||
RefreshSceneOverlays(
|
||||
sceneRuntime,
|
||||
session,
|
||||
slotLayout.inputRect,
|
||||
pointerScreen,
|
||||
viewportHoverEligible);
|
||||
sceneRuntime.SetHoveredToolHandle(SceneToolHandle::None);
|
||||
|
||||
if (m_transformGizmo.IsActive()) {
|
||||
if (WasKeyPressed(inputFrame, KeyCode::Escape)) {
|
||||
m_transformGizmo.CancelDrag(sceneRuntime);
|
||||
RefreshSceneOverlays(
|
||||
sceneRuntime,
|
||||
session,
|
||||
slotLayout.inputRect,
|
||||
pointerScreen,
|
||||
viewportHoverEligible);
|
||||
@@ -383,6 +387,7 @@ void SceneViewportController::Update(
|
||||
m_transformGizmo.EndDrag(sceneRuntime);
|
||||
RefreshSceneOverlays(
|
||||
sceneRuntime,
|
||||
session,
|
||||
slotLayout.inputRect,
|
||||
pointerScreen,
|
||||
viewportHoverEligible);
|
||||
@@ -392,6 +397,7 @@ void SceneViewportController::Update(
|
||||
m_transformGizmo.UpdateDrag(sceneRuntime);
|
||||
RefreshSceneOverlays(
|
||||
sceneRuntime,
|
||||
session,
|
||||
slotLayout.inputRect,
|
||||
pointerScreen,
|
||||
viewportHoverEligible);
|
||||
@@ -409,14 +415,16 @@ void SceneViewportController::Update(
|
||||
|
||||
RefreshSceneOverlays(
|
||||
sceneRuntime,
|
||||
session,
|
||||
slotLayout.inputRect,
|
||||
transition.screenPosition,
|
||||
true);
|
||||
if (m_transformGizmo.IsHoveringHandle() &&
|
||||
m_transformGizmo.TryBeginDrag(sceneRuntime)) {
|
||||
m_transformGizmo.TryBeginDrag(sceneRuntime, session)) {
|
||||
m_navigationState = {};
|
||||
RefreshSceneOverlays(
|
||||
sceneRuntime,
|
||||
session,
|
||||
slotLayout.inputRect,
|
||||
pointerScreen,
|
||||
viewportHoverEligible);
|
||||
@@ -429,6 +437,7 @@ void SceneViewportController::Update(
|
||||
sceneRuntime.SetSelection(sceneIconHit.entityId);
|
||||
RefreshSceneOverlays(
|
||||
sceneRuntime,
|
||||
session,
|
||||
slotLayout.inputRect,
|
||||
pointerScreen,
|
||||
viewportHoverEligible);
|
||||
@@ -449,6 +458,7 @@ void SceneViewportController::Update(
|
||||
|
||||
RefreshSceneOverlays(
|
||||
sceneRuntime,
|
||||
session,
|
||||
slotLayout.inputRect,
|
||||
pointerScreen,
|
||||
viewportHoverEligible);
|
||||
@@ -486,14 +496,15 @@ void SceneViewportController::Update(
|
||||
}
|
||||
|
||||
if (HasCameraInput(input)) {
|
||||
sceneRuntime.ApplySceneViewportCameraInput(input);
|
||||
session.ApplyCameraInput(input);
|
||||
RefreshSceneOverlays(
|
||||
sceneRuntime,
|
||||
session,
|
||||
slotLayout.inputRect,
|
||||
pointerScreen,
|
||||
viewportHoverEligible);
|
||||
} else {
|
||||
m_sceneOverlay.Refresh(sceneRuntime, slotLayout.inputRect);
|
||||
m_sceneOverlay.Refresh(sceneRuntime, session, slotLayout.inputRect);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -529,12 +540,14 @@ float SceneViewportController::ConsumeDeltaTimeSeconds() {
|
||||
|
||||
void SceneViewportController::RefreshSceneOverlays(
|
||||
EditorSceneRuntime& sceneRuntime,
|
||||
const SceneViewportSession& session,
|
||||
const UIRect& viewportRect,
|
||||
const UIPoint& pointerScreen,
|
||||
bool hoverEnabled) {
|
||||
m_sceneOverlay.Refresh(sceneRuntime, viewportRect);
|
||||
m_sceneOverlay.Refresh(sceneRuntime, session, viewportRect);
|
||||
m_transformGizmo.Refresh(
|
||||
sceneRuntime,
|
||||
session,
|
||||
viewportRect,
|
||||
pointerScreen,
|
||||
hoverEnabled);
|
||||
|
||||
Reference in New Issue
Block a user