yaze 0.3.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
dungeon_project_labels.h
Go to the documentation of this file.
1#ifndef YAZE_APP_EDITOR_DUNGEON_DUNGEON_PROJECT_LABELS_H
2#define YAZE_APP_EDITOR_DUNGEON_DUNGEON_PROJECT_LABELS_H
3
4#include <cstddef>
5#include <string>
6
7#include "absl/strings/str_format.h"
8#include "core/project.h"
10
12
14 const project::YazeProject* project, int room_id,
15 size_t* dungeon_index = nullptr) {
16 // Real Oracle .yaze projects can ship a project_registry (Docs/Dev/Planning/
17 // dungeons.json) without an accompanying hack_manifest_v1.json — see
18 // ProjectPathsTest::OpenInjectsOracleDungeonRoomLabelsIntoProjectFile. The
19 // registry is the canonical source of room/dungeon names; the hack manifest
20 // is an independent, optional add-on. Don't gate registry lookups on it.
21 if (!project || !project->project_opened() ||
23 return nullptr;
24 }
25
26 const auto& dungeons = project->hack_manifest.project_registry().dungeons;
27 for (size_t i = 0; i < dungeons.size(); ++i) {
28 const auto& dungeon = dungeons[i];
29 for (const auto& room : dungeon.rooms) {
30 if (room.id == room_id) {
31 if (dungeon_index) {
32 *dungeon_index = i;
33 }
34 return &dungeon;
35 }
36 }
37 }
38 return nullptr;
39}
40
42 const project::YazeProject* project, int room_id) {
43 const core::DungeonEntry* dungeon = FindDungeonForRoom(project, room_id);
44 if (!dungeon) {
45 return nullptr;
46 }
47 for (const auto& room : dungeon->rooms) {
48 if (room.id == room_id) {
49 return &room;
50 }
51 }
52 return nullptr;
53}
54
55inline std::string FormatDungeonName(const core::DungeonEntry& dungeon) {
56 if (dungeon.id.empty()) {
57 return dungeon.name;
58 }
59 if (dungeon.name.empty()) {
60 return dungeon.id;
61 }
62 return absl::StrFormat("%s %s", dungeon.id, dungeon.name);
63}
64
65inline std::string GetDungeonNameForRoom(const project::YazeProject* project,
66 int room_id) {
67 const core::DungeonEntry* dungeon = FindDungeonForRoom(project, room_id);
68 return dungeon ? FormatDungeonName(*dungeon) : std::string();
69}
70
71inline std::string GetRoomFloorLabel(const project::YazeProject* project,
72 int room_id) {
73 if (const core::DungeonRoom* room = FindDungeonRoom(project, room_id);
74 room && !room->floor.empty()) {
75 return room->floor;
76 }
77 return std::string();
78}
79
80inline std::string GetRoomLabel(const project::YazeProject* project,
81 int room_id) {
82 if (const core::DungeonRoom* room = FindDungeonRoom(project, room_id);
83 room && !room->name.empty()) {
84 return room->name;
85 }
86 auto& labels = zelda3::GetResourceLabels();
87 return labels.GetLabel(zelda3::ResourceType::kRoom, room_id);
88}
89
90} // namespace yaze::editor::dungeon_project_labels
91
92#endif // YAZE_APP_EDITOR_DUNGEON_DUNGEON_PROJECT_LABELS_H
const ProjectRegistry & project_registry() const
bool HasProjectRegistry() const
std::string GetRoomLabel(const project::YazeProject *project, int room_id)
const core::DungeonEntry * FindDungeonForRoom(const project::YazeProject *project, int room_id, size_t *dungeon_index=nullptr)
std::string GetDungeonNameForRoom(const project::YazeProject *project, int room_id)
const core::DungeonRoom * FindDungeonRoom(const project::YazeProject *project, int room_id)
std::string GetRoomFloorLabel(const project::YazeProject *project, int room_id)
std::string FormatDungeonName(const core::DungeonEntry &dungeon)
ResourceLabelProvider & GetResourceLabels()
Get the global ResourceLabelProvider instance.
A complete dungeon entry with rooms and connections.
std::vector< DungeonRoom > rooms
A room within a dungeon, with spatial and metadata info.
std::vector< DungeonEntry > dungeons
Modern project structure with comprehensive settings consolidation.
Definition project.h:172
bool project_opened() const
Definition project.h:348
core::HackManifest hack_manifest
Definition project.h:212