Refactor scene viewport state into local sessions
This commit is contained in:
@@ -2,6 +2,7 @@
|
||||
|
||||
#include "Scene/SceneViewportTransformGizmoSupport.h"
|
||||
#include "Scene/EditorSceneRuntime.h"
|
||||
#include "Scene/SceneViewportSession.h"
|
||||
#include "Scene/SceneToolState.h"
|
||||
|
||||
#include <utility>
|
||||
@@ -83,10 +84,9 @@ TransformGizmoSelectionState BuildSelectionState(
|
||||
return state;
|
||||
}
|
||||
|
||||
SceneViewportOverlayData BuildOverlayData(const EditorSceneRuntime& sceneRuntime) {
|
||||
SceneViewportOverlayData BuildOverlayData(const SceneViewportSession& session) {
|
||||
SceneViewportOverlayData overlay = {};
|
||||
const EditorSceneCameraSnapshot snapshot =
|
||||
sceneRuntime.BuildSceneViewCameraSnapshot();
|
||||
const EditorSceneCameraSnapshot snapshot = session.BuildCameraSnapshot();
|
||||
if (!snapshot.valid) {
|
||||
return overlay;
|
||||
}
|
||||
@@ -310,6 +310,7 @@ SceneViewportTransformGizmo& SceneViewportTransformGizmo::operator=(
|
||||
|
||||
void SceneViewportTransformGizmo::Refresh(
|
||||
EditorSceneRuntime& sceneRuntime,
|
||||
const SceneViewportSession& session,
|
||||
const UIRect& viewportRect,
|
||||
const UIPoint& pointerScreen,
|
||||
bool hoverEnabled) {
|
||||
@@ -322,16 +323,16 @@ void SceneViewportTransformGizmo::Refresh(
|
||||
return;
|
||||
}
|
||||
|
||||
const SceneViewportOverlayData overlay = BuildOverlayData(sceneRuntime);
|
||||
const SceneViewportOverlayData overlay = BuildOverlayData(session);
|
||||
if (!overlay.valid) {
|
||||
CancelDrag(sceneRuntime);
|
||||
return;
|
||||
}
|
||||
|
||||
const bool useCenterPivot =
|
||||
sceneRuntime.GetToolPivotMode() == SceneToolPivotMode::Center;
|
||||
session.GetToolPivotMode() == SceneToolPivotMode::Center;
|
||||
const bool localSpace =
|
||||
sceneRuntime.GetToolSpaceMode() == SceneToolSpaceMode::Local;
|
||||
session.GetToolSpaceMode() == SceneToolSpaceMode::Local;
|
||||
const TransformGizmoSelectionState selection =
|
||||
BuildSelectionState(sceneRuntime, useCenterPivot);
|
||||
if (!selection.primaryObject.IsValid()) {
|
||||
@@ -339,7 +340,7 @@ void SceneViewportTransformGizmo::Refresh(
|
||||
return;
|
||||
}
|
||||
|
||||
const SceneToolMode toolMode = sceneRuntime.GetToolMode();
|
||||
const SceneToolMode toolMode = session.GetToolMode();
|
||||
if (toolMode == SceneToolMode::View) {
|
||||
CancelDrag(sceneRuntime);
|
||||
return;
|
||||
@@ -466,11 +467,13 @@ void SceneViewportTransformGizmo::Refresh(
|
||||
}
|
||||
}
|
||||
|
||||
bool SceneViewportTransformGizmo::TryBeginDrag(EditorSceneRuntime& sceneRuntime) {
|
||||
bool SceneViewportTransformGizmo::TryBeginDrag(
|
||||
EditorSceneRuntime& sceneRuntime,
|
||||
const SceneViewportSession& session) {
|
||||
State& state = *m_state;
|
||||
state.undoBridge.Bind(sceneRuntime);
|
||||
|
||||
switch (sceneRuntime.GetToolMode()) {
|
||||
switch (session.GetToolMode()) {
|
||||
case SceneToolMode::Translate:
|
||||
return state.moveGizmo.TryBeginDrag(state.moveContext, state.undoBridge);
|
||||
case SceneToolMode::Rotate:
|
||||
|
||||
Reference in New Issue
Block a user