Refactor scene viewport state into local sessions

This commit is contained in:
2026-04-29 14:13:47 +08:00
parent da6f37dafe
commit 212d4016e0
16 changed files with 353 additions and 380 deletions

View File

@@ -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: