yaze 0.3.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
dungeon_editor_v2_object_coverage.cc
Go to the documentation of this file.
1// Object Coverage wiring for DungeonEditorV2: creating the panel, opening a
2// room on a placed object, and the canvas "Check in Object Coverage" action.
3
4#include <algorithm>
5#include <memory>
6
10
11namespace yaze::editor {
12
13std::unique_ptr<ObjectCoveragePanel>
15 auto panel = std::make_unique<ObjectCoveragePanel>();
16 panel->SetProject(dependencies_.project);
17 panel->SetRooms(&rooms_);
18 panel->SetNavigateCallback(
19 [this](int room_id, size_t object_index, int object_id) {
20 NavigateToPlacedObject(room_id, object_index, object_id);
21 });
22 return panel;
23}
24
26 const zelda3::RoomObject& object) {
27 if (object_coverage_panel_ == nullptr) {
28 return;
29 }
30 object_coverage_panel_->FocusObject(object.id_, room_id);
33 OpenWindow("dungeon.workbench");
34 return;
35 }
36 OpenWindow("dungeon.object_coverage");
37}
38
39void DungeonEditorV2::NavigateToPlacedObject(int room_id, size_t object_index,
40 int object_id) {
41 if (room_id < 0 || room_id >= static_cast<int>(rooms_.size())) {
42 return;
43 }
44 OnRoomSelected(room_id, /*request_focus=*/true);
45 auto* viewer = GetViewerForRoom(room_id);
46 auto* room = rooms_.GetIfMaterialized(room_id);
47 if (viewer == nullptr || room == nullptr) {
48 return;
49 }
50 const auto& objects = room->GetTileObjects();
51 size_t target = object_index;
52 if (target >= objects.size() || objects[target].id_ != object_id) {
53 auto it = std::find_if(
54 objects.begin(), objects.end(),
55 [object_id](const auto& object) { return object.id_ == object_id; });
56 if (it == objects.end()) {
57 return;
58 }
59 target = static_cast<size_t>(it - objects.begin());
60 }
61 // Bind the interaction to the new room now; the next draw would otherwise
62 // treat it as a room change and clear this selection.
63 viewer->object_interaction().SetCurrentRoom(&rooms_, room_id);
64 viewer->object_interaction().SetSelectedObjects({target});
65 viewer->ScrollToTile(objects[target].x(), objects[target].y());
66}
67
68} // namespace yaze::editor
class ObjectCoveragePanel * object_coverage_panel_
std::unique_ptr< ObjectCoveragePanel > CreateObjectCoveragePanel()
void OpenWindow(const std::string &window_id)
class DungeonWorkbenchContent * workbench_panel_
void OnRoomSelected(int room_id, bool request_focus=true)
void FocusObjectCoverage(int room_id, const zelda3::RoomObject &object)
DungeonCanvasViewer * GetViewerForRoom(int room_id)
void NavigateToPlacedObject(int room_id, size_t object_index, int object_id)
zelda3::Room * GetIfMaterialized(int room_id)
EditorDependencies dependencies_
Definition editor.h:370
void FocusObject(int object_id, int room_id)
const std::vector< RoomObject > & GetTileObjects() const
Definition room.h:445
Editors are the view controllers for the application.
project::YazeProject * project
Definition editor.h:174