Porytiles
Loading...
Searching...
No Matches
anim_palette_resolution_strategy.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <algorithm>
4#include <cctype>
5#include <format>
6#include <optional>
7#include <ostream>
8#include <string>
9
11
12// NOTE: DO NOT EDIT THIS FILE DIRECTLY. It is AUTO-GENERATED from config_schema.yaml.
13// To add new config values or make other changes, edit config_schema.yaml and regenerate via:
14//
15// uv run scripts/generate_config.py
16
17namespace porytiles {
18
65};
66
80[[nodiscard]] inline std::optional<AnimPaletteResolutionStrategy>
82{
83 // Phase 1: Exact match against C++ constant names
84 if (str == "scan_local_metatiles") {
86 }
87 if (str == "palette_00") {
89 }
90 if (str == "palette_01") {
92 }
93 if (str == "palette_02") {
95 }
96 if (str == "palette_03") {
98 }
99 if (str == "palette_04") {
100 return std::optional{AnimPaletteResolutionStrategy::palette_04};
101 }
102 if (str == "palette_05") {
103 return std::optional{AnimPaletteResolutionStrategy::palette_05};
104 }
105 if (str == "palette_06") {
106 return std::optional{AnimPaletteResolutionStrategy::palette_06};
107 }
108 if (str == "palette_07") {
109 return std::optional{AnimPaletteResolutionStrategy::palette_07};
110 }
111 if (str == "palette_08") {
112 return std::optional{AnimPaletteResolutionStrategy::palette_08};
113 }
114 if (str == "palette_09") {
115 return std::optional{AnimPaletteResolutionStrategy::palette_09};
116 }
117 if (str == "palette_10") {
118 return std::optional{AnimPaletteResolutionStrategy::palette_10};
119 }
120 if (str == "palette_11") {
121 return std::optional{AnimPaletteResolutionStrategy::palette_11};
122 }
123 if (str == "palette_12") {
124 return std::optional{AnimPaletteResolutionStrategy::palette_12};
125 }
126 if (str == "palette_13") {
127 return std::optional{AnimPaletteResolutionStrategy::palette_13};
128 }
129 if (str == "palette_14") {
130 return std::optional{AnimPaletteResolutionStrategy::palette_14};
131 }
132 if (str == "palette_15") {
133 return std::optional{AnimPaletteResolutionStrategy::palette_15};
134 }
135 if (str == "internal_png_palette") {
137 }
138 if (str == "scan_all_tilesets") {
140 }
141
142 // Phase 2: Case-insensitive fuzzy match
143 std::string lower_str = str;
144 std::ranges::transform(
145 lower_str, lower_str.begin(), [](unsigned char c) { return static_cast<char>(std::tolower(c)); });
146
147 // Fuzzy names for scan_local_metatiles
148 if (lower_str == "scan-local-metatiles") {
150 }
151 if (lower_str == "scan_local_metatiles") {
153 }
154 if (lower_str == "scanlocalmetatiles") {
156 }
157 // Fuzzy names for palette_00
158 if (lower_str == "palette-00") {
159 return std::optional{AnimPaletteResolutionStrategy::palette_00};
160 }
161 if (lower_str == "palette_00") {
162 return std::optional{AnimPaletteResolutionStrategy::palette_00};
163 }
164 if (lower_str == "palette00") {
165 return std::optional{AnimPaletteResolutionStrategy::palette_00};
166 }
167 if (lower_str == "pal-0") {
168 return std::optional{AnimPaletteResolutionStrategy::palette_00};
169 }
170 if (lower_str == "pal_0") {
171 return std::optional{AnimPaletteResolutionStrategy::palette_00};
172 }
173 if (lower_str == "pal0") {
174 return std::optional{AnimPaletteResolutionStrategy::palette_00};
175 }
176 if (lower_str == "palette-0") {
177 return std::optional{AnimPaletteResolutionStrategy::palette_00};
178 }
179 if (lower_str == "palette_0") {
180 return std::optional{AnimPaletteResolutionStrategy::palette_00};
181 }
182 if (lower_str == "palette0") {
183 return std::optional{AnimPaletteResolutionStrategy::palette_00};
184 }
185 // Fuzzy names for palette_01
186 if (lower_str == "palette-01") {
187 return std::optional{AnimPaletteResolutionStrategy::palette_01};
188 }
189 if (lower_str == "palette_01") {
190 return std::optional{AnimPaletteResolutionStrategy::palette_01};
191 }
192 if (lower_str == "palette01") {
193 return std::optional{AnimPaletteResolutionStrategy::palette_01};
194 }
195 if (lower_str == "pal-1") {
196 return std::optional{AnimPaletteResolutionStrategy::palette_01};
197 }
198 if (lower_str == "pal_1") {
199 return std::optional{AnimPaletteResolutionStrategy::palette_01};
200 }
201 if (lower_str == "pal1") {
202 return std::optional{AnimPaletteResolutionStrategy::palette_01};
203 }
204 if (lower_str == "palette-1") {
205 return std::optional{AnimPaletteResolutionStrategy::palette_01};
206 }
207 if (lower_str == "palette_1") {
208 return std::optional{AnimPaletteResolutionStrategy::palette_01};
209 }
210 if (lower_str == "palette1") {
211 return std::optional{AnimPaletteResolutionStrategy::palette_01};
212 }
213 // Fuzzy names for palette_02
214 if (lower_str == "palette-02") {
215 return std::optional{AnimPaletteResolutionStrategy::palette_02};
216 }
217 if (lower_str == "palette_02") {
218 return std::optional{AnimPaletteResolutionStrategy::palette_02};
219 }
220 if (lower_str == "palette02") {
221 return std::optional{AnimPaletteResolutionStrategy::palette_02};
222 }
223 if (lower_str == "pal-2") {
224 return std::optional{AnimPaletteResolutionStrategy::palette_02};
225 }
226 if (lower_str == "pal_2") {
227 return std::optional{AnimPaletteResolutionStrategy::palette_02};
228 }
229 if (lower_str == "pal2") {
230 return std::optional{AnimPaletteResolutionStrategy::palette_02};
231 }
232 if (lower_str == "palette-2") {
233 return std::optional{AnimPaletteResolutionStrategy::palette_02};
234 }
235 if (lower_str == "palette_2") {
236 return std::optional{AnimPaletteResolutionStrategy::palette_02};
237 }
238 if (lower_str == "palette2") {
239 return std::optional{AnimPaletteResolutionStrategy::palette_02};
240 }
241 // Fuzzy names for palette_03
242 if (lower_str == "palette-03") {
243 return std::optional{AnimPaletteResolutionStrategy::palette_03};
244 }
245 if (lower_str == "palette_03") {
246 return std::optional{AnimPaletteResolutionStrategy::palette_03};
247 }
248 if (lower_str == "palette03") {
249 return std::optional{AnimPaletteResolutionStrategy::palette_03};
250 }
251 if (lower_str == "pal-3") {
252 return std::optional{AnimPaletteResolutionStrategy::palette_03};
253 }
254 if (lower_str == "pal_3") {
255 return std::optional{AnimPaletteResolutionStrategy::palette_03};
256 }
257 if (lower_str == "pal3") {
258 return std::optional{AnimPaletteResolutionStrategy::palette_03};
259 }
260 if (lower_str == "palette-3") {
261 return std::optional{AnimPaletteResolutionStrategy::palette_03};
262 }
263 if (lower_str == "palette_3") {
264 return std::optional{AnimPaletteResolutionStrategy::palette_03};
265 }
266 if (lower_str == "palette3") {
267 return std::optional{AnimPaletteResolutionStrategy::palette_03};
268 }
269 // Fuzzy names for palette_04
270 if (lower_str == "palette-04") {
271 return std::optional{AnimPaletteResolutionStrategy::palette_04};
272 }
273 if (lower_str == "palette_04") {
274 return std::optional{AnimPaletteResolutionStrategy::palette_04};
275 }
276 if (lower_str == "palette04") {
277 return std::optional{AnimPaletteResolutionStrategy::palette_04};
278 }
279 if (lower_str == "pal-4") {
280 return std::optional{AnimPaletteResolutionStrategy::palette_04};
281 }
282 if (lower_str == "pal_4") {
283 return std::optional{AnimPaletteResolutionStrategy::palette_04};
284 }
285 if (lower_str == "pal4") {
286 return std::optional{AnimPaletteResolutionStrategy::palette_04};
287 }
288 if (lower_str == "palette-4") {
289 return std::optional{AnimPaletteResolutionStrategy::palette_04};
290 }
291 if (lower_str == "palette_4") {
292 return std::optional{AnimPaletteResolutionStrategy::palette_04};
293 }
294 if (lower_str == "palette4") {
295 return std::optional{AnimPaletteResolutionStrategy::palette_04};
296 }
297 // Fuzzy names for palette_05
298 if (lower_str == "palette-05") {
299 return std::optional{AnimPaletteResolutionStrategy::palette_05};
300 }
301 if (lower_str == "palette_05") {
302 return std::optional{AnimPaletteResolutionStrategy::palette_05};
303 }
304 if (lower_str == "palette05") {
305 return std::optional{AnimPaletteResolutionStrategy::palette_05};
306 }
307 if (lower_str == "pal-5") {
308 return std::optional{AnimPaletteResolutionStrategy::palette_05};
309 }
310 if (lower_str == "pal_5") {
311 return std::optional{AnimPaletteResolutionStrategy::palette_05};
312 }
313 if (lower_str == "pal5") {
314 return std::optional{AnimPaletteResolutionStrategy::palette_05};
315 }
316 if (lower_str == "palette-5") {
317 return std::optional{AnimPaletteResolutionStrategy::palette_05};
318 }
319 if (lower_str == "palette_5") {
320 return std::optional{AnimPaletteResolutionStrategy::palette_05};
321 }
322 if (lower_str == "palette5") {
323 return std::optional{AnimPaletteResolutionStrategy::palette_05};
324 }
325 // Fuzzy names for palette_06
326 if (lower_str == "palette-06") {
327 return std::optional{AnimPaletteResolutionStrategy::palette_06};
328 }
329 if (lower_str == "palette_06") {
330 return std::optional{AnimPaletteResolutionStrategy::palette_06};
331 }
332 if (lower_str == "palette06") {
333 return std::optional{AnimPaletteResolutionStrategy::palette_06};
334 }
335 if (lower_str == "pal-6") {
336 return std::optional{AnimPaletteResolutionStrategy::palette_06};
337 }
338 if (lower_str == "pal_6") {
339 return std::optional{AnimPaletteResolutionStrategy::palette_06};
340 }
341 if (lower_str == "pal6") {
342 return std::optional{AnimPaletteResolutionStrategy::palette_06};
343 }
344 if (lower_str == "palette-6") {
345 return std::optional{AnimPaletteResolutionStrategy::palette_06};
346 }
347 if (lower_str == "palette_6") {
348 return std::optional{AnimPaletteResolutionStrategy::palette_06};
349 }
350 if (lower_str == "palette6") {
351 return std::optional{AnimPaletteResolutionStrategy::palette_06};
352 }
353 // Fuzzy names for palette_07
354 if (lower_str == "palette-07") {
355 return std::optional{AnimPaletteResolutionStrategy::palette_07};
356 }
357 if (lower_str == "palette_07") {
358 return std::optional{AnimPaletteResolutionStrategy::palette_07};
359 }
360 if (lower_str == "palette07") {
361 return std::optional{AnimPaletteResolutionStrategy::palette_07};
362 }
363 if (lower_str == "pal-7") {
364 return std::optional{AnimPaletteResolutionStrategy::palette_07};
365 }
366 if (lower_str == "pal_7") {
367 return std::optional{AnimPaletteResolutionStrategy::palette_07};
368 }
369 if (lower_str == "pal7") {
370 return std::optional{AnimPaletteResolutionStrategy::palette_07};
371 }
372 if (lower_str == "palette-7") {
373 return std::optional{AnimPaletteResolutionStrategy::palette_07};
374 }
375 if (lower_str == "palette_7") {
376 return std::optional{AnimPaletteResolutionStrategy::palette_07};
377 }
378 if (lower_str == "palette7") {
379 return std::optional{AnimPaletteResolutionStrategy::palette_07};
380 }
381 // Fuzzy names for palette_08
382 if (lower_str == "palette-08") {
383 return std::optional{AnimPaletteResolutionStrategy::palette_08};
384 }
385 if (lower_str == "palette_08") {
386 return std::optional{AnimPaletteResolutionStrategy::palette_08};
387 }
388 if (lower_str == "palette08") {
389 return std::optional{AnimPaletteResolutionStrategy::palette_08};
390 }
391 if (lower_str == "pal-8") {
392 return std::optional{AnimPaletteResolutionStrategy::palette_08};
393 }
394 if (lower_str == "pal_8") {
395 return std::optional{AnimPaletteResolutionStrategy::palette_08};
396 }
397 if (lower_str == "pal8") {
398 return std::optional{AnimPaletteResolutionStrategy::palette_08};
399 }
400 if (lower_str == "palette-8") {
401 return std::optional{AnimPaletteResolutionStrategy::palette_08};
402 }
403 if (lower_str == "palette_8") {
404 return std::optional{AnimPaletteResolutionStrategy::palette_08};
405 }
406 if (lower_str == "palette8") {
407 return std::optional{AnimPaletteResolutionStrategy::palette_08};
408 }
409 // Fuzzy names for palette_09
410 if (lower_str == "palette-09") {
411 return std::optional{AnimPaletteResolutionStrategy::palette_09};
412 }
413 if (lower_str == "palette_09") {
414 return std::optional{AnimPaletteResolutionStrategy::palette_09};
415 }
416 if (lower_str == "palette09") {
417 return std::optional{AnimPaletteResolutionStrategy::palette_09};
418 }
419 if (lower_str == "pal-9") {
420 return std::optional{AnimPaletteResolutionStrategy::palette_09};
421 }
422 if (lower_str == "pal_9") {
423 return std::optional{AnimPaletteResolutionStrategy::palette_09};
424 }
425 if (lower_str == "pal9") {
426 return std::optional{AnimPaletteResolutionStrategy::palette_09};
427 }
428 if (lower_str == "palette-9") {
429 return std::optional{AnimPaletteResolutionStrategy::palette_09};
430 }
431 if (lower_str == "palette_9") {
432 return std::optional{AnimPaletteResolutionStrategy::palette_09};
433 }
434 if (lower_str == "palette9") {
435 return std::optional{AnimPaletteResolutionStrategy::palette_09};
436 }
437 // Fuzzy names for palette_10
438 if (lower_str == "palette-10") {
439 return std::optional{AnimPaletteResolutionStrategy::palette_10};
440 }
441 if (lower_str == "palette_10") {
442 return std::optional{AnimPaletteResolutionStrategy::palette_10};
443 }
444 if (lower_str == "palette10") {
445 return std::optional{AnimPaletteResolutionStrategy::palette_10};
446 }
447 if (lower_str == "pal-10") {
448 return std::optional{AnimPaletteResolutionStrategy::palette_10};
449 }
450 if (lower_str == "pal_10") {
451 return std::optional{AnimPaletteResolutionStrategy::palette_10};
452 }
453 if (lower_str == "pal10") {
454 return std::optional{AnimPaletteResolutionStrategy::palette_10};
455 }
456 // Fuzzy names for palette_11
457 if (lower_str == "palette-11") {
458 return std::optional{AnimPaletteResolutionStrategy::palette_11};
459 }
460 if (lower_str == "palette_11") {
461 return std::optional{AnimPaletteResolutionStrategy::palette_11};
462 }
463 if (lower_str == "palette11") {
464 return std::optional{AnimPaletteResolutionStrategy::palette_11};
465 }
466 if (lower_str == "pal-11") {
467 return std::optional{AnimPaletteResolutionStrategy::palette_11};
468 }
469 if (lower_str == "pal_11") {
470 return std::optional{AnimPaletteResolutionStrategy::palette_11};
471 }
472 if (lower_str == "pal11") {
473 return std::optional{AnimPaletteResolutionStrategy::palette_11};
474 }
475 // Fuzzy names for palette_12
476 if (lower_str == "palette-12") {
477 return std::optional{AnimPaletteResolutionStrategy::palette_12};
478 }
479 if (lower_str == "palette_12") {
480 return std::optional{AnimPaletteResolutionStrategy::palette_12};
481 }
482 if (lower_str == "palette12") {
483 return std::optional{AnimPaletteResolutionStrategy::palette_12};
484 }
485 if (lower_str == "pal-12") {
486 return std::optional{AnimPaletteResolutionStrategy::palette_12};
487 }
488 if (lower_str == "pal_12") {
489 return std::optional{AnimPaletteResolutionStrategy::palette_12};
490 }
491 if (lower_str == "pal12") {
492 return std::optional{AnimPaletteResolutionStrategy::palette_12};
493 }
494 // Fuzzy names for palette_13
495 if (lower_str == "palette-13") {
496 return std::optional{AnimPaletteResolutionStrategy::palette_13};
497 }
498 if (lower_str == "palette_13") {
499 return std::optional{AnimPaletteResolutionStrategy::palette_13};
500 }
501 if (lower_str == "palette13") {
502 return std::optional{AnimPaletteResolutionStrategy::palette_13};
503 }
504 if (lower_str == "pal-13") {
505 return std::optional{AnimPaletteResolutionStrategy::palette_13};
506 }
507 if (lower_str == "pal_13") {
508 return std::optional{AnimPaletteResolutionStrategy::palette_13};
509 }
510 if (lower_str == "pal13") {
511 return std::optional{AnimPaletteResolutionStrategy::palette_13};
512 }
513 // Fuzzy names for palette_14
514 if (lower_str == "palette-14") {
515 return std::optional{AnimPaletteResolutionStrategy::palette_14};
516 }
517 if (lower_str == "palette_14") {
518 return std::optional{AnimPaletteResolutionStrategy::palette_14};
519 }
520 if (lower_str == "palette14") {
521 return std::optional{AnimPaletteResolutionStrategy::palette_14};
522 }
523 if (lower_str == "pal-14") {
524 return std::optional{AnimPaletteResolutionStrategy::palette_14};
525 }
526 if (lower_str == "pal_14") {
527 return std::optional{AnimPaletteResolutionStrategy::palette_14};
528 }
529 if (lower_str == "pal14") {
530 return std::optional{AnimPaletteResolutionStrategy::palette_14};
531 }
532 // Fuzzy names for palette_15
533 if (lower_str == "palette-15") {
534 return std::optional{AnimPaletteResolutionStrategy::palette_15};
535 }
536 if (lower_str == "palette_15") {
537 return std::optional{AnimPaletteResolutionStrategy::palette_15};
538 }
539 if (lower_str == "palette15") {
540 return std::optional{AnimPaletteResolutionStrategy::palette_15};
541 }
542 if (lower_str == "pal-15") {
543 return std::optional{AnimPaletteResolutionStrategy::palette_15};
544 }
545 if (lower_str == "pal_15") {
546 return std::optional{AnimPaletteResolutionStrategy::palette_15};
547 }
548 if (lower_str == "pal15") {
549 return std::optional{AnimPaletteResolutionStrategy::palette_15};
550 }
551 // Fuzzy names for internal_png_palette
552 if (lower_str == "internal-png-palette") {
554 }
555 if (lower_str == "internal_png_palette") {
557 }
558 if (lower_str == "internal-png-pal") {
560 }
561 if (lower_str == "internal_png_pal") {
563 }
564 if (lower_str == "internalpngpal") {
566 }
567 // Fuzzy names for scan_all_tilesets
568 if (lower_str == "scan-all-tilesets") {
570 }
571 if (lower_str == "scan_all_tilesets") {
573 }
574 if (lower_str == "scanalltilesets") {
576 }
577 if (lower_str == "full-tileset-scan") {
579 }
580 if (lower_str == "full_tileset_scan") {
582 }
583 if (lower_str == "fulltilesetscan") {
585 }
586
587 return std::nullopt;
588}
589
598[[nodiscard]] inline std::string to_string(const AnimPaletteResolutionStrategy m)
599{
600 switch (m) {
602 return "scan_local_metatiles";
604 return "palette_00";
606 return "palette_01";
608 return "palette_02";
610 return "palette_03";
612 return "palette_04";
614 return "palette_05";
616 return "palette_06";
618 return "palette_07";
620 return "palette_08";
622 return "palette_09";
624 return "palette_10";
626 return "palette_11";
628 return "palette_12";
630 return "palette_13";
632 return "palette_14";
634 return "palette_15";
636 return "internal_png_palette";
638 return "scan_all_tilesets";
639 }
640 panic("unhandled AnimPaletteResolutionStrategy value");
641}
642
648inline std::ostream &operator<<(std::ostream &os, const AnimPaletteResolutionStrategy m)
649{
650 return os << to_string(m);
651}
652
653} // namespace porytiles
654
655template <>
656struct std::formatter<porytiles::AnimPaletteResolutionStrategy> {
657 constexpr auto parse(std::format_parse_context &ctx)
658 {
659 return ctx.begin();
660 }
661
662 auto format(const porytiles::AnimPaletteResolutionStrategy &value, auto &ctx) const
663 {
664 return std::format_to(ctx.out(), "{}", porytiles::to_string(value));
665 }
666};
void panic(const StringViewSourceLoc &s)
Unconditionally terminates the program with a panic message.
Definition panic.cpp:43
std::ostream & operator<<(std::ostream &os, const PrimaryPairingMode m)
Stream insertion operator for PrimaryPairingMode.
AnimPaletteResolutionStrategy
Strategy for determining which palette to use when decompiling animation tiles.
@ scan_all_tilesets
Scan layouts config and find all tilesets paired with current tileset, see if an index is present in ...
@ palette_11
Use palette 11 directly.
@ palette_12
Use palette 12 directly.
@ palette_02
Use palette 02 directly.
@ palette_03
Use palette 03 directly.
@ palette_00
Use palette 00 directly.
@ palette_08
Use palette 08 directly.
@ palette_14
Use palette 14 directly.
@ palette_04
Use palette 04 directly.
@ palette_05
Use palette 05 directly.
@ palette_01
Use palette 01 directly.
@ palette_06
Use palette 06 directly.
@ palette_13
Use palette 13 directly.
@ palette_15
Use palette 15 directly.
@ palette_10
Use palette 10 directly.
@ scan_local_metatiles
Scan local tileset metatile entries to find palette references for the animation tiles.
@ internal_png_palette
Use the Porymap-component frame PNG internal palette, if present.
@ palette_09
Use palette 09 directly.
@ palette_07
Use palette 07 directly.
std::optional< AnimPaletteResolutionStrategy > anim_palette_resolution_strategy_from_str(const std::string &str)
Parses a string into a AnimPaletteResolutionStrategy with fuzzy matching.
std::string to_string(const PrimaryPairingMode m)
Converts a PrimaryPairingMode to its canonical string representation.
auto format(const porytiles::AnimPaletteResolutionStrategy &value, auto &ctx) const