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