yaze 0.3.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
dungeon_commands.cc
Go to the documentation of this file.
2
3#include "absl/strings/numbers.h"
4#include "absl/strings/str_format.h"
6
7namespace yaze {
8namespace cli {
9namespace handlers {
10
12 resources::OutputFormatter& formatter) {
13 auto room_id_str = parser.GetString("room").value();
14
15 int room_id;
16 if (!absl::SimpleHexAtoi(room_id_str, &room_id)) {
17 return absl::InvalidArgumentError(
18 "Invalid room ID format. Must be hex.");
19 }
20
21 formatter.BeginObject("Dungeon Room Sprites");
22 formatter.AddField("room_id", room_id);
23
24 // Use existing dungeon system
25 zelda3::DungeonEditorSystem dungeon_editor(rom);
26 auto room_or = dungeon_editor.GetRoom(room_id);
27 if (!room_or.ok()) {
28 formatter.AddField("status", "error");
29 formatter.AddField("error", room_or.status().ToString());
30 formatter.EndObject();
31 return room_or.status();
32 }
33
34 auto room = room_or.value();
35
36 // TODO: Implement sprite listing from room data
37 formatter.AddField("total_sprites", 0);
38 formatter.AddField("status", "not_implemented");
39 formatter.AddField("message", "Sprite listing requires room sprite parsing");
40
41 formatter.BeginArray("sprites");
42 formatter.EndArray();
43 formatter.EndObject();
44
45 return absl::OkStatus();
46}
47
49 resources::OutputFormatter& formatter) {
50 auto room_id_str = parser.GetString("room").value();
51
52 int room_id;
53 if (!absl::SimpleHexAtoi(room_id_str, &room_id)) {
54 return absl::InvalidArgumentError(
55 "Invalid room ID format. Must be hex.");
56 }
57
58 formatter.BeginObject("Dungeon Room Description");
59 formatter.AddField("room_id", room_id);
60
61 // Use existing dungeon system
62 zelda3::DungeonEditorSystem dungeon_editor(rom);
63 auto room_or = dungeon_editor.GetRoom(room_id);
64 if (!room_or.ok()) {
65 formatter.AddField("status", "error");
66 formatter.AddField("error", room_or.status().ToString());
67 formatter.EndObject();
68 return room_or.status();
69 }
70
71 auto room = room_or.value();
72
73 formatter.AddField("status", "success");
74 formatter.AddField("name", absl::StrFormat("Room %d", room.id()));
75 formatter.AddField("room_id", room.id());
76 formatter.AddField("room_type", "Dungeon Room");
77
78 // Add room properties
79 formatter.BeginObject("properties");
80 formatter.AddField("has_doors", "Unknown");
81 formatter.AddField("has_sprites", "Unknown");
82 formatter.AddField("has_secrets", "Unknown");
83 formatter.EndObject();
84
85 formatter.EndObject();
86
87 return absl::OkStatus();
88}
89
91 resources::OutputFormatter& formatter) {
92 auto room_id_str = parser.GetString("room").value();
93
94 int room_id;
95 if (!absl::SimpleHexAtoi(room_id_str, &room_id)) {
96 return absl::InvalidArgumentError(
97 "Invalid room ID format. Must be hex.");
98 }
99
100 formatter.BeginObject("Dungeon Export");
101 formatter.AddField("room_id", room_id);
102
103 // Use existing dungeon system
104 zelda3::DungeonEditorSystem dungeon_editor(rom);
105 auto room_or = dungeon_editor.GetRoom(room_id);
106 if (!room_or.ok()) {
107 formatter.AddField("status", "error");
108 formatter.AddField("error", room_or.status().ToString());
109 formatter.EndObject();
110 return room_or.status();
111 }
112
113 auto room = room_or.value();
114
115 // Export room data
116 formatter.AddField("status", "success");
117 formatter.AddField("room_width", "Unknown");
118 formatter.AddField("room_height", "Unknown");
119 formatter.AddField("room_name", absl::StrFormat("Room %d", room.id()));
120
121 // Add room data as JSON
122 formatter.BeginObject("room_data");
123 formatter.AddField("tiles", "Room tile data would be exported here");
124 formatter.AddField("sprites", "Room sprite data would be exported here");
125 formatter.AddField("doors", "Room door data would be exported here");
126 formatter.EndObject();
127
128 formatter.EndObject();
129
130 return absl::OkStatus();
131}
132
134 resources::OutputFormatter& formatter) {
135 auto room_id_str = parser.GetString("room").value();
136
137 int room_id;
138 if (!absl::SimpleHexAtoi(room_id_str, &room_id)) {
139 return absl::InvalidArgumentError(
140 "Invalid room ID format. Must be hex.");
141 }
142
143 formatter.BeginObject("Dungeon Room Objects");
144 formatter.AddField("room_id", room_id);
145
146 // Use existing dungeon system
147 zelda3::DungeonEditorSystem dungeon_editor(rom);
148 auto room_or = dungeon_editor.GetRoom(room_id);
149 if (!room_or.ok()) {
150 formatter.AddField("status", "error");
151 formatter.AddField("error", room_or.status().ToString());
152 formatter.EndObject();
153 return room_or.status();
154 }
155
156 auto room = room_or.value();
157
158 // TODO: Implement object listing from room data
159 formatter.AddField("total_objects", 0);
160 formatter.AddField("status", "not_implemented");
161 formatter.AddField("message", "Object listing requires room object parsing");
162
163 formatter.BeginArray("objects");
164 formatter.EndArray();
165 formatter.EndObject();
166
167 return absl::OkStatus();
168}
169
171 resources::OutputFormatter& formatter) {
172 auto room_id_str = parser.GetString("room").value();
173
174 int room_id;
175 if (!absl::SimpleHexAtoi(room_id_str, &room_id)) {
176 return absl::InvalidArgumentError(
177 "Invalid room ID format. Must be hex.");
178 }
179
180 formatter.BeginObject("Dungeon Room Tiles");
181 formatter.AddField("room_id", room_id);
182
183 // Use existing dungeon system
184 zelda3::DungeonEditorSystem dungeon_editor(rom);
185 auto room_or = dungeon_editor.GetRoom(room_id);
186 if (!room_or.ok()) {
187 formatter.AddField("status", "error");
188 formatter.AddField("error", room_or.status().ToString());
189 formatter.EndObject();
190 return room_or.status();
191 }
192
193 auto room = room_or.value();
194
195 // TODO: Implement tile data retrieval from room
196 formatter.AddField("room_width", "Unknown");
197 formatter.AddField("room_height", "Unknown");
198 formatter.AddField("total_tiles", "Unknown");
199 formatter.AddField("status", "not_implemented");
200 formatter.AddField("message", "Tile data retrieval requires room tile parsing");
201
202 formatter.BeginArray("tiles");
203 formatter.EndArray();
204 formatter.EndObject();
205
206 return absl::OkStatus();
207}
208
210 resources::OutputFormatter& formatter) {
211 auto room_id_str = parser.GetString("room").value();
212 auto property = parser.GetString("property").value();
213 auto value = parser.GetString("value").value();
214
215 int room_id;
216 if (!absl::SimpleHexAtoi(room_id_str, &room_id)) {
217 return absl::InvalidArgumentError(
218 "Invalid room ID format. Must be hex.");
219 }
220
221 formatter.BeginObject("Dungeon Room Property Set");
222 formatter.AddField("room_id", room_id);
223 formatter.AddField("property", property);
224 formatter.AddField("value", value);
225
226 // Use existing dungeon system
227 zelda3::DungeonEditorSystem dungeon_editor(rom);
228 auto room_or = dungeon_editor.GetRoom(room_id);
229 if (!room_or.ok()) {
230 formatter.AddField("status", "error");
231 formatter.AddField("error", room_or.status().ToString());
232 formatter.EndObject();
233 return room_or.status();
234 }
235
236 // TODO: Implement property setting
237 formatter.AddField("status", "not_implemented");
238 formatter.AddField("message", "Property setting requires room property system");
239 formatter.EndObject();
240
241 return absl::OkStatus();
242}
243
244} // namespace handlers
245} // namespace cli
246} // namespace yaze
The Rom class is used to load, save, and modify Rom data.
Definition rom.h:71
absl::Status Execute(Rom *rom, const resources::ArgumentParser &parser, resources::OutputFormatter &formatter) override
Execute the command business logic.
absl::Status Execute(Rom *rom, const resources::ArgumentParser &parser, resources::OutputFormatter &formatter) override
Execute the command business logic.
absl::Status Execute(Rom *rom, const resources::ArgumentParser &parser, resources::OutputFormatter &formatter) override
Execute the command business logic.
absl::Status Execute(Rom *rom, const resources::ArgumentParser &parser, resources::OutputFormatter &formatter) override
Execute the command business logic.
absl::Status Execute(Rom *rom, const resources::ArgumentParser &parser, resources::OutputFormatter &formatter) override
Execute the command business logic.
absl::Status Execute(Rom *rom, const resources::ArgumentParser &parser, resources::OutputFormatter &formatter) override
Execute the command business logic.
Utility for parsing common CLI argument patterns.
std::optional< std::string > GetString(const std::string &name) const
Parse a named argument (e.g., –format=json or –format json)
Utility for consistent output formatting across commands.
void BeginArray(const std::string &key)
Begin an array.
void BeginObject(const std::string &title="")
Start a JSON object or text section.
void EndObject()
End a JSON object or text section.
void AddField(const std::string &key, const std::string &value)
Add a key-value pair.
Comprehensive dungeon editing system.
absl::StatusOr< Room > GetRoom(int room_id)
Main namespace for the application.