66#include < unordered_map>
77#include < vector>
88
9+ #include < BufferStream.h>
910#include < sourcepp/math/Vector.h>
1011
11- class BufferStream ;
12- class BufferStreamReadOnly ;
13-
1412namespace fgdpp {
1513
1614class FGD {
@@ -107,7 +105,7 @@ class FGD {
107105
108106 [[nodiscard]] const std::vector<AutoVisGroup>& getAutoVisGroups () const ;
109107
110- private :
108+ protected :
111109 void readEntities (BufferStreamReadOnly& stream, const std::string& path, std::vector<std::string>& seenPaths);
112110
113111 std::list<std::string> backingData;
@@ -119,4 +117,87 @@ class FGD {
119117 std::vector<AutoVisGroup> autoVisGroups;
120118};
121119
120+ class FGDWriter {
121+ public:
122+ class AutoVisGroupWriter {
123+ public:
124+ explicit AutoVisGroupWriter (FGDWriter& parent_);
125+
126+ AutoVisGroupWriter& visGroup (const std::string& name, const std::vector<std::string>& entities);
127+
128+ FGDWriter& endAutoVisGroup ();
129+
130+ private:
131+ FGDWriter& parent;
132+ };
133+
134+ class EntityWriter {
135+ public:
136+ class KeyValueChoicesWriter {
137+ public:
138+ explicit KeyValueChoicesWriter (EntityWriter& parent_);
139+
140+ KeyValueChoicesWriter& choice (const std::string& value, const std::string& displayName);
141+
142+ EntityWriter& endKeyValueChoices ();
143+
144+ private:
145+ EntityWriter& parent;
146+ };
147+
148+ class KeyValueFlagsWriter {
149+ public:
150+ explicit KeyValueFlagsWriter (EntityWriter& parent_);
151+
152+ KeyValueFlagsWriter& flag (uint64_t value, const std::string& displayName, bool enabledByDefault, const std::string& description = " " );
153+
154+ EntityWriter& endKeyValueFlags ();
155+
156+ private:
157+ EntityWriter& parent;
158+ };
159+
160+ explicit EntityWriter (FGDWriter& parent_);
161+
162+ EntityWriter& keyValue (const std::string& name, const std::string& valueType, const std::string& displayName = " " , const std::string& valueDefault = " " , const std::string& description = " " , bool readOnly = false , bool report = false );
163+
164+ KeyValueChoicesWriter beginKeyValueChoices (const std::string& name, const std::string& displayName = " " , const std::string& valueDefault = " " , const std::string& description = " " , bool readOnly = false , bool report = false );
165+
166+ KeyValueFlagsWriter beginKeyValueFlags (const std::string& name, const std::string& displayName = " " , const std::string& description = " " , bool readOnly = false , bool report = false );
167+
168+ EntityWriter& input (const std::string& name, const std::string& valueType, const std::string& description = " " );
169+
170+ EntityWriter& output (const std::string& name, const std::string& valueType, const std::string& description = " " );
171+
172+ FGDWriter& endEntity ();
173+
174+ private:
175+ FGDWriter& parent;
176+ };
177+
178+ [[nodiscard]] static FGDWriter begin ();
179+
180+ FGDWriter& include (const std::string& fgdPath);
181+
182+ FGDWriter& version (int version);
183+
184+ FGDWriter& mapSize (sourcepp::math::Vec2i mapSize);
185+
186+ FGDWriter& materialExclusionDirs (const std::vector<std::string>& dirs);
187+
188+ AutoVisGroupWriter beginAutoVisGroup (const std::string& parentName);
189+
190+ EntityWriter beginEntity (const std::string& classType, const std::vector<std::string>& classProperties, const std::string& name, const std::string& description);
191+
192+ [[nodiscard]] std::string bakeToString ();
193+
194+ void bakeToFile (const std::string& fgdPath);
195+
196+ protected:
197+ FGDWriter ();
198+
199+ std::string backingData;
200+ BufferStream writer;
201+ };
202+
122203} // namespace fgdpp
0 commit comments