#pragma once #include "Features/Scene/SceneViewportController.h" #include "Rendering/Viewport/SceneViewportRenderService.h" #include #include #include namespace XCEngine::UI::Editor::App { class EditorCommandFocusService; class BuiltInIcons; class EditorSceneRuntime; } // namespace XCEngine::UI::Editor::App namespace XCEngine::UI::Editor::Rendering::Host { class UiTextureHost; } // namespace XCEngine::UI::Editor::Rendering::Host namespace XCEngine::UI::Editor::App { class ViewportHostService; class SceneViewportFeature { public: void Initialize( const std::filesystem::path& repoRoot, Rendering::Host::UiTextureHost& textureHost, const BuiltInIcons* builtInIcons, ViewportHostService& viewportHostService); void Shutdown( Rendering::Host::UiTextureHost& textureHost, ViewportHostService& viewportHostService); void ResetInteractionState(); void SetCommandFocusService(EditorCommandFocusService* commandFocusService); void SyncRenderRequest(EditorSceneRuntime& sceneRuntime); void Update( EditorSceneRuntime& sceneRuntime, const UIEditorWorkspaceComposeState& composeState, const UIEditorWorkspaceComposeFrame& composeFrame); void Append(::XCEngine::UI::UIDrawList& drawList) const; private: SceneViewportRenderService m_renderService = {}; SceneViewportController m_controller = {}; }; } // namespace XCEngine::UI::Editor::App