From dfce4d0398a8bafbb7ad7a31345af181c0269c09 Mon Sep 17 00:00:00 2001 From: Your Name Date: Thu, 15 Apr 2021 15:23:23 -0400 Subject: Added spells --- src/spellcasting.h | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 src/spellcasting.h (limited to 'src/spellcasting.h') 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("spellcasting", data["spells"])) {} + virtual ~SlotLevel() {} + const int numSlots; + const std::vector 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(data["levels"])) {} + virtual ~Spellcasting() {} + + bool isInnate(void) const {return innate;} + std::string getAbility(void) const {return ability;} + std::vector 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 spellsBySlot; + }; +} -- cgit v1.2.3