79 lines
3.6 KiB
C++
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
|