53 const std::string& command) {
54 std::vector<AIAction> actions;
56 std::string cmd_lower = command;
57 std::transform(cmd_lower.begin(), cmd_lower.end(), cmd_lower.begin(),
61 std::map<std::string, std::string> params;
85 if (absl::StrContains(cmd_lower,
"click") ||
86 absl::StrContains(cmd_lower,
"press")) {
87 std::regex button_pattern(R
"((save|load|export|import|open)\s+(\w+))",
90 if (std::regex_search(command, match, button_pattern)) {
91 params[
"button"] = match[1].str() +
" " + match[2].str();
97 return absl::InvalidArgumentError(
98 absl::StrCat(
"Could not parse AI command: ", command));
157 const std::string& command, std::map<std::string, std::string>* params) {
158 std::string cmd_lower = command;
159 std::transform(cmd_lower.begin(), cmd_lower.end(), cmd_lower.begin(),
162 if (!absl::StrContains(cmd_lower,
"place") &&
163 !absl::StrContains(cmd_lower,
"put") &&
164 !absl::StrContains(cmd_lower,
"set")) {
168 if (!absl::StrContains(cmd_lower,
"tile")) {
173 std::regex tile_pattern(R
"(tile\s+(?:id\s+)?(0x[0-9a-fA-F]+|\d+))",
177 if (std::regex_search(command, match, tile_pattern)) {
179 int tile_id = ParseHexOrDecimal(match[1].str());
180 (*params)[
"tile_id"] = std::to_string(tile_id);
190 if (ExtractCoordinates(command, &x, &y)) {
191 (*params)[
"x"] = std::to_string(x);
192 (*params)[
"y"] = std::to_string(y);
198 std::regex map_pattern(R
"((?:map|overworld)\s+(?:id\s+)?(\d+))",
200 if (std::regex_search(command, match, map_pattern)) {
201 (*params)[
"map_id"] = match[1].str();
203 (*params)[
"map_id"] =
"0";
210 const std::string& command, std::map<std::string, std::string>* params) {
211 std::string cmd_lower = command;
212 std::transform(cmd_lower.begin(), cmd_lower.end(), cmd_lower.begin(),
215 if (!absl::StrContains(cmd_lower,
"select") &&
216 !absl::StrContains(cmd_lower,
"choose") &&
217 !absl::StrContains(cmd_lower,
"pick")) {
221 if (!absl::StrContains(cmd_lower,
"tile")) {
226 std::regex tile_pattern(R
"(tile\s+(?:id\s+)?(0x[0-9a-fA-F]+|\d+))",
230 if (std::regex_search(command, match, tile_pattern)) {
232 int tile_id = ParseHexOrDecimal(match[1].str());
233 (*params)[
"tile_id"] = std::to_string(tile_id);
244 const std::string& command, std::map<std::string, std::string>* params) {
245 std::string cmd_lower = command;
246 std::transform(cmd_lower.begin(), cmd_lower.end(), cmd_lower.begin(),
249 if (!absl::StrContains(cmd_lower,
"open") &&
250 !absl::StrContains(cmd_lower,
"launch") &&
251 !absl::StrContains(cmd_lower,
"start")) {
255 if (absl::StrContains(cmd_lower,
"overworld")) {
256 (*params)[
"editor"] =
"overworld";
260 if (absl::StrContains(cmd_lower,
"dungeon")) {
261 (*params)[
"editor"] =
"dungeon";
265 if (absl::StrContains(cmd_lower,
"sprite")) {
266 (*params)[
"editor"] =
"sprite";
270 if (absl::StrContains(cmd_lower,
"tile16") ||
271 absl::StrContains(cmd_lower,
"tile 16")) {
272 (*params)[
"editor"] =
"tile16";