MetaCore/MetaEditor/DearImGuiEditorShell.h

54 lines
2.2 KiB
C++

#pragma once
#include "MetaEditor/IEditorShell.h"
#include <filesystem>
namespace metacore::editor {
class DearImGuiEditorShell final : public IEditorShell {
public:
bool initialize() override;
void shutdown() override;
void consume_snapshot(const EditorFrameSnapshot& snapshot) override;
[[nodiscard]] bool initialized() const override;
[[nodiscard]] const EditorFrameSnapshot& last_snapshot() const override;
[[nodiscard]] std::string summarize_snapshot() const override;
[[nodiscard]] std::string describe_workspace() const override;
[[nodiscard]] std::string shell_name() const override;
[[nodiscard]] PendingShellEdits consume_pending_edits() override;
void set_debug_export_path(std::filesystem::path path);
private:
void enqueue_headless_transform_edit(const EditorFrameSnapshot& snapshot);
void render_headless_frame(const EditorFrameSnapshot& snapshot);
void render_dockspace_frame(const EditorFrameSnapshot& snapshot);
void ensure_default_dock_layout(const EditorFrameSnapshot& snapshot, unsigned int dockspace_id);
void render_toolbar(const EditorFrameSnapshot& snapshot);
void render_panel(const metacore::engine::editor_core::DockPanel& panel, const EditorFrameSnapshot& snapshot);
void render_hierarchy_panel(const EditorFrameSnapshot& snapshot);
void render_project_panel(const EditorFrameSnapshot& snapshot);
void render_viewport_panel(const EditorFrameSnapshot& snapshot);
void render_inspector_panel(const EditorFrameSnapshot& snapshot);
void render_console_panel(const EditorFrameSnapshot& snapshot);
void render_runtime_preview_panel(const EditorFrameSnapshot& snapshot);
void export_debug_snapshot() const;
void export_viewport_snapshot(std::ostringstream& stream) const;
bool initialized_ = false;
EditorFrameSnapshot last_snapshot_{};
std::filesystem::path debug_export_path_{};
int last_draw_command_count_ = 0;
int last_vertex_count_ = 0;
int last_index_count_ = 0;
int last_window_count_ = 0;
bool headless_frame_enabled_ = false;
bool dock_layout_initialized_ = false;
bool headless_transform_override_consumed_ = false;
PendingShellEdits pending_edits_{};
};
} // namespace metacore::editor