54 lines
2.2 KiB
C++
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
|