MetaCore/MetaEditor/EditorApplication.h
2026-03-19 18:01:50 +08:00

72 lines
2.9 KiB
C++

#pragma once
#include "MetaEditor/IEditorShell.h"
#include "MetaEditor/EditorPresenter.h"
#include "MetaCore/engine/assets/AssetDatabase.h"
#include "MetaCore/engine/editor_core/CommandService.h"
#include "MetaCore/engine/editor_core/EditorSession.h"
#include "MetaCore/engine/editor_core/EditorLayoutService.h"
#include "MetaCore/engine/editor_core/InspectorService.h"
#include "MetaCore/engine/editor_core/SceneCommands.h"
#include "MetaCore/engine/editor_core/SelectionService.h"
#include "MetaCore/engine/editor_core/TransformGizmoService.h"
#include "MetaCore/engine/editor_core/ViewportService.h"
#include "MetaCore/engine/render/SimplePbrShaderLibrary.h"
#include "MetaCore/engine/scene/Project.h"
#include "MetaCore/engine/scene/Scene.h"
#include "MetaCore/engine/scene/SceneSerializer.h"
#include "MetaCore/platform/panda/PandaPlatformContext.h"
#include "MetaCore/platform/panda/PandaRenderBackend.h"
#include <filesystem>
#include <memory>
#include <optional>
#include <array>
namespace metacore::editor {
class EditorApplication {
public:
EditorApplication();
bool initialize(const std::filesystem::path& project_root);
int run();
void shutdown();
private:
void ensure_runtime_preview_root();
void ensure_demo_scene_content();
void apply_shell_edits();
void poll_window_shortcuts();
void log_frame_summary(const EditorFrameSnapshot& snapshot) const;
[[nodiscard]] int resolve_frame_budget() const;
[[nodiscard]] bool should_continue_running(int frame_index, int frame_budget) const;
void persist_editor_state() const;
std::filesystem::path project_root_;
metacore::platform::panda::PandaPlatformContext platform_;
metacore::platform::panda::PandaRenderBackend render_backend_;
metacore::engine::scene::ProjectService project_service_;
metacore::engine::scene::SceneService scene_service_;
metacore::engine::scene::SceneSerializer scene_serializer_;
metacore::engine::assets::AssetService asset_service_;
metacore::engine::assets::AssetDatabase asset_database_;
metacore::engine::editor_core::SelectionService selection_service_;
metacore::engine::editor_core::TransformGizmoService gizmo_service_;
metacore::engine::editor_core::CommandService command_service_;
metacore::engine::editor_core::EditorLayoutService layout_service_;
metacore::engine::editor_core::InspectorService inspector_service_;
metacore::engine::editor_core::ViewportService viewport_service_;
metacore::engine::editor_core::EditorSession session_{};
metacore::engine::editor_core::EditorLayoutState layout_state_{};
metacore::engine::scene::Project project_{};
metacore::engine::scene::Scene scene_{};
std::optional<EditorFrameSnapshot> last_snapshot_{};
EditorPresenter presenter_{};
std::unique_ptr<IEditorShell> editor_shell_{};
std::array<bool, 256> key_down_{};
};
} // namespace metacore::editor