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 app.get_option(NameLong())->group(group);
21 }
22
23 [[nodiscard]] std::string NameCombined() const {
24 return NameShort() + "," + NameLong();
25 }
26};
27
28class OptOutput final : public Opt {
29 std::string output_path_;
30
31 public:
32 OptOutput() : output_path_{"."} {}
33
34 [[nodiscard]] std::string NameShort() const override {
35 return "-o";
36 }
37
38 [[nodiscard]] std::string NameLong() const override {
39 return "--output";
40 }
41
42 void RegisterOpt(CLI::App &app) override {
43 app.add_option(NameCombined(), output_path_,
44 "Output generated files to the directory specified by PATH. If any element of PATH does not "
45 "exist, it will be created.")
47 ->capture_default_str();
48 }
49
50 [[nodiscard]] std::string output_path() const {
51 return output_path_;
52 }
53};
54
55class OptTilesPalMode final : public Opt {
56 std::string pal_format_;
57
58 public:
59 OptTilesPalMode() : pal_format_{TilesPalModeToStr(porytiles::TilesPalMode::kTrueColor)} {}
60
61 [[nodiscard]] std::string NameShort() const override {
62 return "";
63 }
64
65 [[nodiscard]] std::string NameLong() const override {
66 return "--tiles-pal-mode";
67 }
68
69 void RegisterOpt(CLI::App &app) override {
70 app.add_option(
71 NameLong(), pal_format_,
72 "Set the palette mode for the output 'tiles.png'. Valid settings are 'true-color' or 'greyscale'. These "
73 "settings are for human visual purposes only and have no effect on the final in-game tiles.")
74 ->check(TilesPalModeValidator{})
75 ->capture_default_str();
76 }
77
78 [[nodiscard]] std::string pal_format() const {
79 return pal_format_;
80 }
81};
82
83class OptDisableMetatileGeneration final : public Opt {
84 bool disabled_{false};
85
86 public:
88
89 [[nodiscard]] std::string NameShort() const override {
90 return "";
91 }
92
93 [[nodiscard]] std::string NameLong() const override {
94 return "--disable-metatile-generation";
95 }
96
97 void RegisterOpt(CLI::App &app) override {
98 app.add_flag(NameLong(), disabled_,
99 "Disable generation of 'metatiles.bin'. Only enable this if you want to manage metatiles manually "
100 "via Porymap.");
101 }
102
103 [[nodiscard]] bool disabled() const {
104 return disabled_;
105 }
106};
107
108class OptDisableAttributeGeneration final : public Opt {
109 bool disabled_{false};
110
111 public:
113
114 [[nodiscard]] std::string NameShort() const override {
115 return "";
116 }
117
118 [[nodiscard]] std::string NameLong() const override {
119 return "--disable-attribute-generation";
120 }
121
122 void RegisterOpt(CLI::App &app) override {
123 app.add_flag(NameLong(), disabled_,
124 "Disable generation of 'metatile_attributes.bin'. Only enable this if you want to manage metatile "
125 "attributes manually via Porymap.");
126 }
127
128 [[nodiscard]] bool disabled() const {
129 return disabled_;
130 }
131};
132
133class OptTripleLayer final : public Opt {
134 bool triple_layer_{false};
135
136 public:
137 OptTripleLayer() = default;
138
139 [[nodiscard]] std::string NameShort() const override {
140 return "";
141 }
142
143 [[nodiscard]] std::string NameLong() const override {
144 return "--triple-layer";
145 }
146
147 void RegisterOpt(CLI::App &app) override {
148 app.add_flag(
149 NameLong(), triple_layer_,
150 "Enable triple-layer compilation mode. If this option is not supplied, Porytiles assumes you are compiling "
151 "a dual-layer tileset. For dual-layer tilesets the layer type will be inferred from your source layer "
152 "PNGs, so compilation will error out if any metatiles contain content on all three layers.");
153 }
154
155 [[nodiscard]] bool dual_layer() const {
156 return triple_layer_;
157 }
158};
159
160class OptTransparencyColor final : public Opt {
161 std::string rgb_;
162
163 public:
164 OptTransparencyColor() : rgb_{"255,0,255"} {}
165
166 [[nodiscard]] std::string NameShort() const override {
167 return "";
168 }
169
170 [[nodiscard]] std::string NameLong() const override {
171 return "--transparency-color";
172 }
173
174 void RegisterOpt(CLI::App &app) override {
175 app.add_option(NameLong(), rgb_,
176 "Select RGB color <R,G,B> to represent transparency in your layer source PNGs.")
177 ->check(RgbStringValidator{})
178 ->capture_default_str();
179 }
180
181 [[nodiscard]] const std::string &rgb() const {
182 return rgb_;
183 }
184};
std::string NameShort() const override
Definition option.hpp:114
std::string NameLong() const override
Definition option.hpp:118
void RegisterOpt(CLI::App &app) override
Definition option.hpp:122
std::string NameLong() const override
Definition option.hpp:93
void RegisterOpt(CLI::App &app) override
Definition option.hpp:97
std::string NameShort() const override
Definition option.hpp:89
void RegisterOpt(CLI::App &app) override
Definition option.hpp:42
std::string output_path() const
Definition option.hpp:50
std::string NameLong() const override
Definition option.hpp:38
std::string NameShort() const override
Definition option.hpp:34
OptOutput()
Definition option.hpp:32
std::string pal_format() const
Definition option.hpp:78
std::string NameLong() const override
Definition option.hpp:65
void RegisterOpt(CLI::App &app) override
Definition option.hpp:69
std::string NameShort() const override
Definition option.hpp:61
const std::string & rgb() const
Definition option.hpp:181
std::string NameLong() const override
Definition option.hpp:170
std::string NameShort() const override
Definition option.hpp:166
void RegisterOpt(CLI::App &app) override
Definition option.hpp:174
void RegisterOpt(CLI::App &app) override
Definition option.hpp:147
std::string NameShort() const override
Definition option.hpp:139
std::string NameLong() const override
Definition option.hpp:143
OptTripleLayer()=default
bool dual_layer() const
Definition option.hpp:155
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:23
virtual std::string NameLong() const =0
virtual ~Opt()=default