#pragma once #include "Scene/EditorSceneBackend.h" #include "Scene/SceneToolState.h" #include "Scene/SceneViewportCameraController.h" #include "Scene/SceneViewportRenderRequest.h" #include namespace XCEngine::UI::Editor::App { class EditorSceneRuntime; class SceneViewportSession { public: SceneViewportSession(); void Reset(); EditorSceneCameraSnapshot BuildCameraSnapshot() const; SceneViewportRenderRequest BuildRenderRequest( const EditorSceneRuntime& sceneRuntime) const; void ApplyCameraInput(const SceneViewportCameraInputState& input); bool FocusSelection(const EditorSceneRuntime& sceneRuntime); SceneToolMode GetToolMode() const; SceneToolSpaceMode GetToolSpaceMode() const; SceneToolPivotMode GetToolPivotMode() const; void SetToolMode(SceneToolMode mode); void SetToolSpaceMode(SceneToolSpaceMode mode); void SetToolPivotMode(SceneToolPivotMode mode); private: void IncrementCameraRevision(); std::uint64_t BuildRequestRevision(std::uint64_t sceneContentRevision) const; SceneViewportCameraController m_cameraController = {}; SceneToolMode m_toolMode = SceneToolMode::Translate; SceneToolSpaceMode m_toolSpaceMode = SceneToolSpaceMode::World; SceneToolPivotMode m_toolPivotMode = SceneToolPivotMode::Pivot; std::uint64_t m_cameraRevision = 0u; }; } // namespace XCEngine::UI::Editor::App