3#include "absl/strings/numbers.h"
4#include "absl/strings/str_format.h"
13 auto room_id_str = parser.
GetString(
"room").value();
16 if (!absl::SimpleHexAtoi(room_id_str, &room_id)) {
17 return absl::InvalidArgumentError(
18 "Invalid room ID format. Must be hex.");
22 formatter.
AddField(
"room_id", room_id);
26 auto room_or = dungeon_editor.
GetRoom(room_id);
28 formatter.
AddField(
"status",
"error");
29 formatter.
AddField(
"error", room_or.status().ToString());
31 return room_or.status();
34 auto room = room_or.value();
37 formatter.
AddField(
"total_sprites", 0);
38 formatter.
AddField(
"status",
"not_implemented");
39 formatter.
AddField(
"message",
"Sprite listing requires room sprite parsing");
45 return absl::OkStatus();
50 auto room_id_str = parser.
GetString(
"room").value();
53 if (!absl::SimpleHexAtoi(room_id_str, &room_id)) {
54 return absl::InvalidArgumentError(
55 "Invalid room ID format. Must be hex.");
59 formatter.
AddField(
"room_id", room_id);
63 auto room_or = dungeon_editor.
GetRoom(room_id);
65 formatter.
AddField(
"status",
"error");
66 formatter.
AddField(
"error", room_or.status().ToString());
68 return room_or.status();
71 auto room = room_or.value();
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");
80 formatter.
AddField(
"has_doors",
"Unknown");
81 formatter.
AddField(
"has_sprites",
"Unknown");
82 formatter.
AddField(
"has_secrets",
"Unknown");
87 return absl::OkStatus();
92 auto room_id_str = parser.
GetString(
"room").value();
95 if (!absl::SimpleHexAtoi(room_id_str, &room_id)) {
96 return absl::InvalidArgumentError(
97 "Invalid room ID format. Must be hex.");
101 formatter.
AddField(
"room_id", room_id);
105 auto room_or = dungeon_editor.
GetRoom(room_id);
107 formatter.
AddField(
"status",
"error");
108 formatter.
AddField(
"error", room_or.status().ToString());
110 return room_or.status();
113 auto room = room_or.value();
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()));
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");
130 return absl::OkStatus();
135 auto room_id_str = parser.
GetString(
"room").value();
138 if (!absl::SimpleHexAtoi(room_id_str, &room_id)) {
139 return absl::InvalidArgumentError(
140 "Invalid room ID format. Must be hex.");
144 formatter.
AddField(
"room_id", room_id);
148 auto room_or = dungeon_editor.
GetRoom(room_id);
150 formatter.
AddField(
"status",
"error");
151 formatter.
AddField(
"error", room_or.status().ToString());
153 return room_or.status();
156 auto room = room_or.value();
159 formatter.
AddField(
"total_objects", 0);
160 formatter.
AddField(
"status",
"not_implemented");
161 formatter.
AddField(
"message",
"Object listing requires room object parsing");
167 return absl::OkStatus();
172 auto room_id_str = parser.
GetString(
"room").value();
175 if (!absl::SimpleHexAtoi(room_id_str, &room_id)) {
176 return absl::InvalidArgumentError(
177 "Invalid room ID format. Must be hex.");
181 formatter.
AddField(
"room_id", room_id);
185 auto room_or = dungeon_editor.
GetRoom(room_id);
187 formatter.
AddField(
"status",
"error");
188 formatter.
AddField(
"error", room_or.status().ToString());
190 return room_or.status();
193 auto room = room_or.value();
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");
206 return absl::OkStatus();
211 auto room_id_str = parser.
GetString(
"room").value();
212 auto property = parser.
GetString(
"property").value();
213 auto value = parser.
GetString(
"value").value();
216 if (!absl::SimpleHexAtoi(room_id_str, &room_id)) {
217 return absl::InvalidArgumentError(
218 "Invalid room ID format. Must be hex.");
221 formatter.
BeginObject(
"Dungeon Room Property Set");
222 formatter.
AddField(
"room_id", room_id);
223 formatter.
AddField(
"property", property);
228 auto room_or = dungeon_editor.
GetRoom(room_id);
230 formatter.
AddField(
"status",
"error");
231 formatter.
AddField(
"error", room_or.status().ToString());
233 return room_or.status();
237 formatter.
AddField(
"status",
"not_implemented");
238 formatter.
AddField(
"message",
"Property setting requires room property system");
241 return absl::OkStatus();
The Rom class is used to load, save, and modify Rom data.
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)
Comprehensive dungeon editing system.
absl::StatusOr< Room > GetRoom(int room_id)
Main namespace for the application.