Porytiles
Loading...
Searching...
No Matches
option.hpp
Go to the documentation of this file.
1#pragma once
2
3#include "CLI/CLI.hpp"
4
6
7#include "validators.hpp"
8
9class Opt {
10 public:
11 virtual ~Opt() = default;
12
13 [[nodiscard]] virtual std::string NameShort() const = 0;
14
15 [[nodiscard]] virtual std::string NameLong() const = 0;
16
17 virtual void RegisterOpt(CLI::App &app) = 0;
18
19 void SetGroup(const std::string &group, CLI::App &app) const
20 {
21 app.get_option(NameLong())->group(group);
22 }
23
24 [[nodiscard]] std::string NameCombined() const
25 {
26 return NameShort() + "," + NameLong();
27 }
28};
29
30class OptOutput final : public Opt {
31 std::string output_path_;
32
33 public:
34 OptOutput() : output_path_{"."} {}
35
36 [[nodiscard]] std::string NameShort() const override
37 {
38 return "-o";
39 }
40
41 [[nodiscard]] std::string NameLong() const override
42 {
43 return "--output";
44 }
45
46 void RegisterOpt(CLI::App &app) override
47 {
48 app.add_option(
50 output_path_,
51 "Output generated files to the directory specified by PATH. "
52 "If any element of PATH does not "
53 "exist, it will be created.")
55 ->capture_default_str();
56 }
57
58 [[nodiscard]] std::string output_path() const
59 {
60 return output_path_;
61 }
62};
63
64class OptTilesPalMode final : public Opt {
65 std::string pal_format_;
66
67 public:
68 OptTilesPalMode() : pal_format_{to_string(porytiles2::TilesPalMode::true_color)} {}
69
70 [[nodiscard]] std::string NameShort() const override
71 {
72 return "";
73 }
74
75 [[nodiscard]] std::string NameLong() const override
76 {
77 return "--tiles-pal-mode";
78 }
79
80 void RegisterOpt(CLI::App &app) override
81 {
82 app.add_option(
83 NameLong(),
84 pal_format_,
85 "Set the palette mode for the output 'tiles.png'. Valid "
86 "settings are 'true-color' or 'greyscale'. These "
87 "settings are for human visual purposes only and have no "
88 "effect on the final in-game tiles.")
89 ->check(TilesPalModeValidator{})
90 ->capture_default_str();
91 }
92
93 [[nodiscard]] std::string pal_format() const
94 {
95 return pal_format_;
96 }
97};
98
99class OptDisableMetatileGeneration final : public Opt {
100 bool disabled_{false};
101
102 public:
104
105 [[nodiscard]] std::string NameShort() const override
106 {
107 return "";
108 }
109
110 [[nodiscard]] std::string NameLong() const override
111 {
112 return "--disable-metatile-generation";
113 }
114
115 void RegisterOpt(CLI::App &app) override
116 {
117 app.add_flag(
118 NameLong(),
119 disabled_,
120 "Disable generation of 'metatiles.bin'. Only enable this if "
121 "you want to manage metatiles manually "
122 "via Porymap.");
123 }
124
125 [[nodiscard]] bool disabled() const
126 {
127 return disabled_;
128 }
129};
130
131class OptDisableAttributeGeneration final : public Opt {
132 bool disabled_{false};
133
134 public:
136
137 [[nodiscard]] std::string NameShort() const override
138 {
139 return "";
140 }
141
142 [[nodiscard]] std::string NameLong() const override
143 {
144 return "--disable-attribute-generation";
145 }
146
147 void RegisterOpt(CLI::App &app) override
148 {
149 app.add_flag(
150 NameLong(),
151 disabled_,
152 "Disable generation of 'metatile_attributes.bin'. Only enable "
153 "this if you want to manage metatile "
154 "attributes manually via Porymap.");
155 }
156
157 [[nodiscard]] bool disabled() const
158 {
159 return disabled_;
160 }
161};
162
163class OptTripleLayer final : public Opt {
164 bool triple_layer_{false};
165
166 public:
167 OptTripleLayer() = default;
168
169 [[nodiscard]] std::string NameShort() const override
170 {
171 return "";
172 }
173
174 [[nodiscard]] std::string NameLong() const override
175 {
176 return "--triple-layer";
177 }
178
179 void RegisterOpt(CLI::App &app) override
180 {
181 app.add_flag(
182 NameLong(),
183 triple_layer_,
184 "Enable triple-layer compilation mode. If this option is not "
185 "supplied, Porytiles assumes you are compiling "
186 "a dual-layer tileset. For dual-layer tilesets the layer type "
187 "will be inferred from your source layer "
188 "PNGs, so compilation will error out if any metatiles contain "
189 "content on all three layers.");
190 }
191
192 [[nodiscard]] bool dual_layer() const
193 {
194 return triple_layer_;
195 }
196};
197
198class OptTransparencyColor final : public Opt {
199 std::string rgb_;
200
201 public:
202 OptTransparencyColor() : rgb_{"255,0,255"} {}
203
204 [[nodiscard]] std::string NameShort() const override
205 {
206 return "";
207 }
208
209 [[nodiscard]] std::string NameLong() const override
210 {
211 return "--transparency-color";
212 }
213
214 void RegisterOpt(CLI::App &app) override
215 {
216 app.add_option(
217 NameLong(),
218 rgb_,
219 "Select RGB color <R,G,B> to represent transparency in your "
220 "layer source PNGs.")
221 ->check(RgbStringValidator{})
222 ->capture_default_str();
223 }
224
225 [[nodiscard]] const std::string &rgb() const
226 {
227 return rgb_;
228 }
229};
std::string NameShort() const override
Definition option.hpp:137
std::string NameLong() const override
Definition option.hpp:142
void RegisterOpt(CLI::App &app) override
Definition option.hpp:147
std::string NameLong() const override
Definition option.hpp:110
void RegisterOpt(CLI::App &app) override
Definition option.hpp:115
std::string NameShort() const override
Definition option.hpp:105
void RegisterOpt(CLI::App &app) override
Definition option.hpp:46
std::string output_path() const
Definition option.hpp:58
std::string NameLong() const override
Definition option.hpp:41
std::string NameShort() const override
Definition option.hpp:36
OptOutput()
Definition option.hpp:34
std::string pal_format() const
Definition option.hpp:93
std::string NameLong() const override
Definition option.hpp:75
void RegisterOpt(CLI::App &app) override
Definition option.hpp:80
std::string NameShort() const override
Definition option.hpp:70
const std::string & rgb() const
Definition option.hpp:225
std::string NameLong() const override
Definition option.hpp:209
std::string NameShort() const override
Definition option.hpp:204
void RegisterOpt(CLI::App &app) override
Definition option.hpp:214
void RegisterOpt(CLI::App &app) override
Definition option.hpp:179
std::string NameShort() const override
Definition option.hpp:169
std::string NameLong() const override
Definition option.hpp:174
OptTripleLayer()=default
bool dual_layer() const
Definition option.hpp:192
Definition option.hpp:9
virtual std::string NameShort() const =0
virtual void RegisterOpt(CLI::App &app)=0
void SetGroup(const std::string &group, CLI::App &app) const
Definition option.hpp:19
std::string NameCombined() const
Definition option.hpp:24
virtual std::string NameLong() const =0
virtual ~Opt()=default