diff options
Diffstat (limited to 'src/spellcasting.h')
-rw-r--r-- | src/spellcasting.h | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/src/spellcasting.h b/src/spellcasting.h new file mode 100644 index 0000000..f996322 --- /dev/null +++ b/src/spellcasting.h @@ -0,0 +1,46 @@ +#pragma once +#include "feature.h" +#include "json.hpp" +#include "spell.h" +#include "jsonable.h" + +typedef nlohmann::json json; + +namespace feature { + struct SlotLevel : public Jsonable { + SlotLevel(const json& data) : numSlots(data["slots"]), spells(jsonList2vec<spell::Spell>("spellcasting", data["spells"])) {} + virtual ~SlotLevel() {} + const int numSlots; + const std::vector<spell::Spell> spells; + + json toJson(void) const { + return json({ + {"slots", numSlots}, + {"spells", spells} + }); + } + }; + + class Spellcasting : public Feature { + public: + Spellcasting(const json& data, const json& base) : Feature(base), innate(data["innate"]), ability(data["spellcasting_ability"]), spellsBySlot(json2vec<SlotLevel>(data["levels"])) {} + virtual ~Spellcasting() {} + + bool isInnate(void) const {return innate;} + std::string getAbility(void) const {return ability;} + std::vector<SlotLevel> getSpellsBySlot(void) const {return spellsBySlot;} + + virtual json toJson(void) const { + auto data = Feature::toJson(); + data["innate"] = innate; + data["ability"] = ability; + data["levels"] = spellsBySlot; + return data; + } + + private: + const bool innate; + const std::string ability; + const std::vector<SlotLevel> spellsBySlot; + }; +} |