Skip to content

Commit 12203f7

Browse files
committed
creature edit wip
1 parent f0d2fc6 commit 12203f7

13 files changed

Lines changed: 654 additions & 43 deletions

CMakeLists.txt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,20 +16,24 @@ set(CMAKE_CXX_STANDARD_REQUIRED True)
1616
project ("EncounterMaster" C CXX)
1717

1818
# Add source to this project's executable.
19-
add_executable (EncounterMaster "EncounterMaster.cpp" "Menu.cpp" "imgui/imgui.cpp" "imgui/imgui_draw.cpp" "imgui/imgui_demo.cpp" "imgui/imgui_tables.cpp" "imgui/imgui_widgets.cpp" "imgui/backends/imgui_impl_sdlrenderer3.cpp" "imgui/backends/imgui_impl_sdl3.cpp" "Creature.h" "Creature.cpp" "Download.h" "Download.cpp")
19+
add_executable (EncounterMaster
20+
"EncounterMaster.cpp" "Menu.cpp" "Creature.h" "Creature.cpp" "Download.h" "Download.cpp" "CreatureList.h" "CreatureList.cpp"
21+
"imgui/imgui.cpp" "imgui/imgui_draw.cpp" "imgui/imgui_demo.cpp" "imgui/imgui_tables.cpp" "imgui/imgui_widgets.cpp" "imgui/backends/imgui_impl_sdlrenderer3.cpp" "imgui/backends/imgui_impl_sdl3.cpp" "CreatureEdit.h" "CreatureEdit.cpp" )
2022

2123
# VCPKG configuration (wouldn't work without manually setting it sorry)
2224
set(CMAKE_TOOLCHAIN_FILE "E:/vcpkg/scripts/buildsystems/vcpkg.cmake")
2325
include("${CMAKE_TOOLCHAIN_FILE}")
2426

2527
find_package(SDL3 CONFIG REQUIRED)
28+
find_package(SDL3_image CONFIG REQUIRED)
2629
find_package(CURL REQUIRED)
2730
find_package(nlohmann_json CONFIG REQUIRED)
2831

2932
include_directories(${CURL_INCLUDE_DIRS})
3033

3134
target_link_libraries(EncounterMaster PRIVATE
3235
SDL3::SDL3
36+
SDL3_image::SDL3_image-shared
3337
CURL::libcurl
3438
nlohmann_json::nlohmann_json
3539
)

Creature.cpp

Lines changed: 42 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -9,44 +9,44 @@ dnd::Creature parse_creature(const json& j) {
99
creature.set_meta(j.value("meta", ""));
1010

1111
// Stats
12-
creature.set_armor_class(j.value("armor_class", ""));
13-
creature.set_hit_points(j.value("hit_points", ""));
14-
creature.set_speed(j.value("speed", ""));
15-
creature.set_str(j.value("str", ""));
16-
creature.set_str_mod(j.value("str_mod", ""));
17-
creature.set_dex(j.value("dex", ""));
18-
creature.set_dex_mod(j.value("dex_mod", ""));
19-
creature.set_con(j.value("con", ""));
20-
creature.set_con_mod(j.value("con_mod", ""));
21-
creature.set_creature_int(j.value("int", ""));
22-
creature.set_int_mod(j.value("int_mod", ""));
23-
creature.set_wis(j.value("wis", ""));
24-
creature.set_wis_mod(j.value("wis_mod", ""));
25-
creature.set_cha(j.value("cha", ""));
26-
creature.set_cha_mod(j.value("cha_mod", ""));
12+
creature.set_armor_class(j.value("Armor Class", ""));
13+
creature.set_hit_points(j.value("Hit Points", ""));
14+
creature.set_speed(j.value("Speed", ""));
15+
creature.set_str(j.value("STR", ""));
16+
creature.set_str_mod(j.value("STR_mod", ""));
17+
creature.set_dex(j.value("DEX", ""));
18+
creature.set_dex_mod(j.value("DEX_mod", ""));
19+
creature.set_con(j.value("CON", ""));
20+
creature.set_con_mod(j.value("CON_mod", ""));
21+
creature.set_creature_int(j.value("INT", ""));
22+
creature.set_int_mod(j.value("INT_mod", ""));
23+
creature.set_wis(j.value("WIS", ""));
24+
creature.set_wis_mod(j.value("WIS_mod", ""));
25+
creature.set_cha(j.value("CHA", ""));
26+
creature.set_cha_mod(j.value("CHA_mod", ""));
2727

2828
// Other fields
29-
creature.set_saving_throws(j.value("saving_throws", ""));
29+
creature.set_saving_throws(j.value("Saving Throws", ""));
3030

31-
creature.set_skills(j.value("skills", ""));
32-
creature.set_senses(j.value("senses", ""));
33-
creature.set_languages(j.value("languages", ""));
34-
creature.set_challenge(j.value("challenge", ""));
31+
creature.set_skills(j.value("Skills", ""));
32+
creature.set_senses(j.value("Senses", ""));
33+
creature.set_languages(j.value("Languages", ""));
34+
creature.set_challenge(j.value("Challenge", ""));
3535

3636
// Actions and traits
37-
creature.set_traits(j.value("traits", ""));
38-
creature.set_actions(j.value("actions", ""));
39-
creature.set_legendary_actions(j.value("legendary_actions", ""));
37+
creature.set_traits(j.value("Traits", ""));
38+
creature.set_actions(j.value("Actions", ""));
39+
creature.set_legendary_actions(j.value("Legendary Actions", ""));
4040

4141
// Image URL
4242
creature.set_img_url(j.value("img_url", ""));
4343

4444
// Combat-related fields
45-
creature.set_damage_immunities(j.value("damage_immunities", ""));
46-
creature.set_condition_immunities(j.value("condition_immunities", ""));
47-
creature.set_damage_resistances(j.value("damage_resistances", ""));
48-
creature.set_damage_vulnerabilities(j.value("damage_vulnerabilities", ""));
49-
creature.set_reactions(j.value("reactions", ""));
45+
creature.set_damage_immunities(j.value("Damage Immunities", ""));
46+
creature.set_condition_immunities(j.value("Condition Immunities", ""));
47+
creature.set_damage_resistances(j.value("Damage Resistances", ""));
48+
creature.set_damage_vulnerabilities(j.value("Damage Vulnerabilities", ""));
49+
creature.set_reactions(j.value("Reactions", ""));
5050

5151
return creature;
5252
}
@@ -81,6 +81,7 @@ std::vector<dnd::Creature> parse_creatures_from_file(
8181

8282
std::vector<dnd::Creature> parse_creatures_from_directory(
8383
const std::string& directory) {
84+
SDL_Log("Loading creatures...");
8485
std::vector<dnd::Creature> all_creatures;
8586
for (const auto& entry : std::filesystem::directory_iterator(directory)) {
8687
if (entry.path().extension() == ".json") {
@@ -90,5 +91,18 @@ std::vector<dnd::Creature> parse_creatures_from_directory(
9091
}
9192
}
9293

94+
save_creatures_to_file(all_creatures, "all_creatures.json");
95+
9396
return all_creatures;
9497
}
98+
99+
void save_creatures_to_file(const std::vector<dnd::Creature>& creatures,
100+
const std::string& filename) {
101+
json j = json::array();
102+
for (dnd::Creature creature : creatures) {
103+
j.push_back(creature.to_json());
104+
}
105+
106+
std::ofstream file(filename);
107+
file << j;
108+
}

Creature.h

Lines changed: 44 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
#include <regex>
88
#include <stdexcept>
99

10+
using json = nlohmann::json;
11+
1012
class CreatureElement {
1113
public:
1214
CreatureElement() = default;
@@ -172,13 +174,51 @@ class CreatureElement {
172174
void set_reactions(std::optional<std::string> value) {
173175
this->reactions = value;
174176
}
177+
178+
json to_json()
179+
{
180+
json j;
181+
if (name) j["name"] = *name;
182+
if (meta) j["meta"] = *meta;
183+
if (armor_class) j["Armor Class"] = *armor_class;
184+
if (hit_points) j["Hit Points"] = *hit_points;
185+
if (speed) j["Speed"] = *speed;
186+
if (str) j["STR"] = *str;
187+
if (str_mod) j["STR_mod"] = *str_mod;
188+
if (dex) j["DEX"] = *dex;
189+
if (dex_mod) j["DEX_mod"] = *dex_mod;
190+
if (con) j["CON"] = *con;
191+
if (con_mod) j["CON_mod"] = *con_mod;
192+
if (creature_int) j["int"] = *creature_int;
193+
if (int_mod) j["INT_mod"] = *int_mod;
194+
if (wis) j["WIS"] = *wis;
195+
if (wis_mod) j["WIS_mod"] = *wis_mod;
196+
if (cha) j["CHA"] = *cha;
197+
if (cha_mod) j["CHA_mod"] = *cha_mod;
198+
if (saving_throws) j["Saving Throws"] = *saving_throws;
199+
if (skills) j["Skills"] = *skills;
200+
if (senses) j["Senses"] = *senses;
201+
if (languages) j["Languages"] = *languages;
202+
if (challenge) j["Challenge"] = *challenge;
203+
if (traits) j["Traits"] = *traits;
204+
if (actions) j["Actions"] = *actions;
205+
if (legendary_actions) j["Legendary Actions"] = *legendary_actions;
206+
if (img_url) j["img_url"] = *img_url;
207+
if (damage_immunities) j["Damage Immunities"] = *damage_immunities;
208+
if (condition_immunities) j["Condition Immunities"] = *condition_immunities;
209+
if (damage_resistances) j["Damage Resistances"] = *damage_resistances;
210+
if (damage_vulnerabilities)
211+
j["Damage Vulnerabilities"] = *damage_vulnerabilities;
212+
if (reactions) j["Reactions"] = *reactions;
213+
return j;
214+
}
175215
};
176216

177217
namespace dnd {
178218
using Creature = CreatureElement;
219+
179220
}
180221

181-
using json = nlohmann::json;
182222

183223
dnd::Creature parse_creature(const json& j);
184224

@@ -187,4 +227,7 @@ std::vector<dnd::Creature> parse_creatures_from_file(const std::string& filename
187227
std::vector<dnd::Creature> parse_creatures_from_directory(
188228
const std::string& directory);
189229

230+
void save_creatures_to_file(const std::vector<dnd::Creature>& creatures,
231+
const std::string& filename);
232+
190233
#endif

0 commit comments

Comments
 (0)