MetaCore/MetaEditor/EditorPresenter.cpp

79 lines
3.6 KiB
C++

#include "MetaEditor/EditorPresenter.h"
namespace metacore::editor {
namespace {
std::string to_string(const metacore::engine::editor_core::TransformGizmoService::Operation operation) {
using Operation = metacore::engine::editor_core::TransformGizmoService::Operation;
switch (operation) {
case Operation::Translate:
return "Translate";
case Operation::Rotate:
return "Rotate";
case Operation::Scale:
return "Scale";
}
return "Translate";
}
std::string to_string(const metacore::engine::editor_core::TransformGizmoService::Space space) {
using Space = metacore::engine::editor_core::TransformGizmoService::Space;
switch (space) {
case Space::Local:
return "Local";
case Space::World:
return "World";
}
return "Local";
}
} // namespace
EditorFrameSnapshot EditorPresenter::build_snapshot(
const metacore::engine::scene::Scene& scene,
const metacore::engine::assets::AssetDatabase& asset_database,
const metacore::engine::editor_core::SelectionService& selection_service,
const metacore::engine::editor_core::TransformGizmoService& gizmo_service,
const metacore::engine::editor_core::ViewportService& viewport_service,
const metacore::engine::editor_core::EditorSession& session
) const {
EditorFrameSnapshot snapshot;
snapshot.actions = action_catalog_.build_default_actions();
snapshot.workspace = workspace_factory_.build_default_layout();
snapshot.shell = shell_builder_.build(snapshot.actions, snapshot.workspace);
snapshot.hierarchy = panel_view_models_.build_hierarchy(scene, selection_service);
snapshot.assets = panel_view_models_.build_project_assets(asset_database);
snapshot.inspector = panel_view_models_.build_inspector(scene, selection_service);
snapshot.viewport.camera_position = viewport_service.camera_position();
snapshot.viewport.gizmo_operation = to_string(gizmo_service.operation());
snapshot.viewport.gizmo_space = to_string(gizmo_service.space());
snapshot.viewport.snap_enabled = gizmo_service.snap_enabled();
snapshot.viewport.snap_values = gizmo_service.snap_values();
if (viewport_service.focus_target().has_value()) {
snapshot.viewport.focus_target_id = *viewport_service.focus_target();
}
if (selection_service.selection().has_value()) {
if (const auto object = metacore::engine::scene::SceneService{}.find_object(scene, *selection_service.selection())) {
snapshot.viewport.has_selection = true;
snapshot.viewport.selected_object_id = object->get().id;
snapshot.viewport.selected_object_name = object->get().name;
snapshot.viewport.object_position = object->get().transform.position;
snapshot.viewport.object_rotation = object->get().transform.rotation;
snapshot.viewport.object_scale = object->get().transform.scale;
}
}
snapshot.console = panel_view_models_.console_messages(session);
snapshot.status_text = session.status_text();
snapshot.scene_object_count = scene.objects.size();
snapshot.hierarchy_visible = session.panel_state().hierarchy_visible;
snapshot.inspector_visible = session.panel_state().inspector_visible;
snapshot.project_visible = session.panel_state().project_visible;
snapshot.console_visible = session.panel_state().console_visible;
snapshot.runtime_preview_visible = session.panel_state().runtime_preview_visible;
snapshot.toolbar_visible = session.panel_state().toolbar_visible;
return snapshot;
}
} // namespace metacore::editor