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,
28 // like TilesPalMode
29 : base_game_preset_{"pokeemerald"}, tiles_primary_override_{0}, tiles_total_override_{0},
30 metatiles_primary_override_{0}, metatiles_total_override_{0}, pals_primary_override_{0},
31 pals_total_override_{0}
32 {
33 }
34
35 [[nodiscard]] std::string GroupName() override
36 {
37 return "FIELDMAP OVERRIDE OPTIONS";
38 }
39
40 void RegisterGroup(CLI::App &app) override
41 {
42 // TODO: create a base game validator
43 app.add_option("--base-game-preset", base_game_preset_, "Base game preset to use for the tileset.")
44 ->group(GroupName())
45 ->capture_default_str();
46 app.add_option(
47 "--tiles-primary-override",
48 tiles_primary_override_,
49 "Override the number of tiles in the primary tileset.")
50 ->group(GroupName());
51 app.add_option(
52 "--tiles-total-override", tiles_total_override_, "Override the total number of tiles in the tileset.")
53 ->group(GroupName());
54 app.add_option(
55 "--metatiles-primary-override",
56 metatiles_primary_override_,
57 "Override the number of metatiles in the primary tileset.")
58 ->group(GroupName());
59 app.add_option(
60 "--metatiles-total-override",
61 metatiles_total_override_,
62 "Override the total number of metatiles in the tileset.")
63 ->group(GroupName());
64 app.add_option(
65 "--pals-primary-override",
66 pals_primary_override_,
67 "Override the number of metatiles in the primary tileset.")
68 ->group(GroupName());
69 app.add_option(
70 "--pals-total-override", pals_total_override_, "Override the total number of metatiles in the tileset.")
71 ->group(GroupName());
72 }
73
74 [[nodiscard]] const std::string &base_game_preset() const
75 {
76 return base_game_preset_;
77 }
78};
79
80class OptGroupDiagnostics final : public OptGroup {
81 std::vector<std::string> diagnostics_;
82
83 public:
85
86 [[nodiscard]] std::string GroupName() override
87 {
88 return "DIAGNOSTIC OPTIONS";
89 }
90
91 void RegisterGroup(CLI::App &app) override
92 {
93 app.add_option("--warning", diagnostics_, "Enable given warning diagnostics.")
95 ->group(GroupName());
96 app.add_option("--no-warning", diagnostics_, "Disable given warning diagnostics.")
98 ->group(GroupName());
99 app.add_option("--error", diagnostics_, "Enable given warning diagnostics as errors.")
101 ->group(GroupName());
102 app.add_option("--no-error", diagnostics_, "Disable given warning diagnostics as errors.")
104 ->group(GroupName());
105 }
106
107 [[nodiscard]] const std::vector<std::string> &diagnostics() const
108 {
109 return diagnostics_;
110 }
111};
112
113class OptGroupArtifacts final : public OptGroup {
114 OptOutput output_opt_;
115 OptTilesPalMode tiles_pal_mode_opt_;
116 OptDisableMetatileGeneration disable_metatile_generation_opt_;
117 OptDisableAttributeGeneration disable_attribute_generation_opt_;
118
119 public:
120 OptGroupArtifacts() = default;
121
122 [[nodiscard]] std::string GroupName() override
123 {
124 return "ARTIFACT OPTIONS";
125 }
126
127 void RegisterGroup(CLI::App &app) override
128 {
129 output_opt_.RegisterOpt(app);
130 output_opt_.SetGroup(GroupName(), app);
131 tiles_pal_mode_opt_.RegisterOpt(app);
132 tiles_pal_mode_opt_.SetGroup(GroupName(), app);
133 disable_metatile_generation_opt_.RegisterOpt(app);
134 disable_metatile_generation_opt_.SetGroup(GroupName(), app);
135 disable_attribute_generation_opt_.RegisterOpt(app);
136 disable_attribute_generation_opt_.SetGroup(GroupName(), app);
137 }
138
139 [[nodiscard]] const OptOutput &output_opt() const
140 {
141 return output_opt_;
142 }
143
144 [[nodiscard]] const OptTilesPalMode &tiles_pal_mode() const
145 {
146 return tiles_pal_mode_opt_;
147 }
148
149 [[nodiscard]] bool metatiles_disabled() const
150 {
151 return disable_metatile_generation_opt_.disabled();
152 }
153
154 [[nodiscard]] bool attributes_disabled() const
155 {
156 return disable_attribute_generation_opt_.disabled();
157 }
158};
159
161 public:
163
164 [[nodiscard]] std::string GroupName() override
165 {
166 return "PAL ASSIGNMENT CONFIG OPTIONS";
167 }
168
169 void RegisterGroup(CLI::App &app) override {}
170};
void RegisterOpt(CLI::App &app) override
Definition option.hpp:147
void RegisterOpt(CLI::App &app) override
Definition option.hpp:115
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:80
void SetGroup(const std::string &group, CLI::App &app) const
Definition option.hpp:19