Porytiles
Loading...
Searching...
No Matches
option_group.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <string>
4
5#include <CLI/CLI.hpp>
6
7#include "./option.hpp"
8
9class OptGroup {
10 public:
11 virtual ~OptGroup() = default;
12 virtual std::string GroupName() = 0;
13 virtual void RegisterGroup(CLI::App &app) = 0;
14};
15
16class OptGroupFieldmap final : public OptGroup {
17 std::string base_game_preset_;
18 std::size_t tiles_primary_override_;
19 std::size_t tiles_total_override_;
20 std::size_t metatiles_primary_override_;
21 std::size_t metatiles_total_override_;
22 std::size_t pals_primary_override_;
23 std::size_t pals_total_override_;
24
25 public:
27 // TODO : 'pokeemerald' base game string should be defined by an enum, like TilesPalMode
28 : base_game_preset_{"pokeemerald"}, tiles_primary_override_{0}, tiles_total_override_{0},
29 metatiles_primary_override_{0}, metatiles_total_override_{0}, pals_primary_override_{0},
30 pals_total_override_{0} {}
31
32 [[nodiscard]] std::string GroupName() override {
33 return "FIELDMAP OVERRIDE OPTIONS";
34 }
35
36 void RegisterGroup(CLI::App &app) override {
37 // TODO : create a base game validator
38 app.add_option("--base-game-preset", base_game_preset_, "Base game preset to use for the tileset.")
39 ->group(GroupName())
40 ->capture_default_str();
41 app.add_option("--tiles-primary-override", tiles_primary_override_,
42 "Override the number of tiles in the primary tileset.")
43 ->group(GroupName());
44 app.add_option("--tiles-total-override", tiles_total_override_,
45 "Override the total number of tiles in the tileset.")
46 ->group(GroupName());
47 app.add_option("--metatiles-primary-override", metatiles_primary_override_,
48 "Override the number of metatiles in the primary tileset.")
49 ->group(GroupName());
50 app.add_option("--metatiles-total-override", metatiles_total_override_,
51 "Override the total number of metatiles in the tileset.")
52 ->group(GroupName());
53 app.add_option("--pals-primary-override", pals_primary_override_,
54 "Override the number of metatiles in the primary tileset.")
55 ->group(GroupName());
56 app.add_option("--pals-total-override", pals_total_override_,
57 "Override the total number of metatiles in the tileset.")
58 ->group(GroupName());
59 }
60
61 [[nodiscard]] const std::string &base_game_preset() const {
62 return base_game_preset_;
63 }
64};
65
66class OptGroupDiagnostics final : public OptGroup {
67 std::vector<std::string> diagnostics_;
68
69 public:
71
72 [[nodiscard]] std::string GroupName() override {
73 return "DIAGNOSTIC OPTIONS";
74 }
75
76 void RegisterGroup(CLI::App &app) override {
77 app.add_option("--warning", diagnostics_, "Enable given warning diagnostics.")
79 ->group(GroupName());
80 app.add_option("--no-warning", diagnostics_, "Disable given warning diagnostics.")
82 ->group(GroupName());
83 app.add_option("--error", diagnostics_, "Enable given warning diagnostics as errors.")
85 ->group(GroupName());
86 app.add_option("--no-error", diagnostics_, "Disable given warning diagnostics as errors.")
88 ->group(GroupName());
89 }
90
91 [[nodiscard]] const std::vector<std::string> &diagnostics() const {
92 return diagnostics_;
93 }
94};
95
96class OptGroupArtifacts final : public OptGroup {
97 OptOutput output_opt_;
98 OptTilesPalMode tiles_pal_mode_opt_;
99 OptDisableMetatileGeneration disable_metatile_generation_opt_;
100 OptDisableAttributeGeneration disable_attribute_generation_opt_;
101
102 public:
103 OptGroupArtifacts() = default;
104
105 [[nodiscard]] std::string GroupName() override {
106 return "ARTIFACT OPTIONS";
107 }
108
109 void RegisterGroup(CLI::App &app) override {
110 output_opt_.RegisterOpt(app);
111 output_opt_.SetGroup(GroupName(), app);
112 tiles_pal_mode_opt_.RegisterOpt(app);
113 tiles_pal_mode_opt_.SetGroup(GroupName(), app);
114 disable_metatile_generation_opt_.RegisterOpt(app);
115 disable_metatile_generation_opt_.SetGroup(GroupName(), app);
116 disable_attribute_generation_opt_.RegisterOpt(app);
117 disable_attribute_generation_opt_.SetGroup(GroupName(), app);
118 }
119
120 [[nodiscard]] const OptOutput &output_opt() const {
121 return output_opt_;
122 }
123
124 [[nodiscard]] const OptTilesPalMode &tiles_pal_mode() const {
125 return tiles_pal_mode_opt_;
126 }
127
128 [[nodiscard]] bool metatiles_disabled() const {
129 return disable_metatile_generation_opt_.disabled();
130 }
131
132 [[nodiscard]] bool attributes_disabled() const {
133 return disable_attribute_generation_opt_.disabled();
134 }
135};
136
138 public:
140
141 [[nodiscard]] std::string GroupName() override {
142 return "PAL ASSIGNMENT CONFIG OPTIONS";
143 }
144
145 void RegisterGroup(CLI::App &app) override {}
146};
void RegisterOpt(CLI::App &app) override
Definition option.hpp:122
void RegisterOpt(CLI::App &app) override
Definition option.hpp:97
const OptOutput & output_opt() const
bool metatiles_disabled() const
bool attributes_disabled() const
OptGroupArtifacts()=default
std::string GroupName() override
const OptTilesPalMode & tiles_pal_mode() const
void RegisterGroup(CLI::App &app) override
void RegisterGroup(CLI::App &app) override
const std::vector< std::string > & diagnostics() const
std::string GroupName() override
OptGroupDiagnostics()=default
std::string GroupName() override
void RegisterGroup(CLI::App &app) override
const std::string & base_game_preset() const
void RegisterGroup(CLI::App &app) override
std::string GroupName() override
virtual void RegisterGroup(CLI::App &app)=0
virtual ~OptGroup()=default
virtual std::string GroupName()=0
void RegisterOpt(CLI::App &app) override
Definition option.hpp:69
void SetGroup(const std::string &group, CLI::App &app) const
Definition option.hpp:19