From 2a9f262e6db5906db445d465e500d7ba8c90fab3 Mon Sep 17 00:00:00 2001 From: Your Name Date: Wed, 5 May 2021 09:44:50 -0400 Subject: Implemented additional commands --- src/spellcasting.h | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) (limited to 'src/spellcasting.h') diff --git a/src/spellcasting.h b/src/spellcasting.h index 0bbdf84..331a95f 100644 --- a/src/spellcasting.h +++ b/src/spellcasting.h @@ -4,20 +4,23 @@ #include "spell.h" #include "jsonable.h" #include "rules.h" +#include typedef nlohmann::json json; namespace entry { struct SlotLevel : public Jsonable { - SlotLevel(const json& data) : numSlots(data["slots"]), spells(jsonList2vec("spellcasting", data["spells"])) {} + SlotLevel(const json& data) : numSlots(data["slots"]), spells(jsonList2ptrvec("spells", data["spells"])) {} + SlotLevel() : numSlots(0) {} virtual ~SlotLevel() {} - const int numSlots; - const std::vector spells; + int numSlots; + std::vector> spells; + static std::shared_ptr create(const nlohmann::json& data); json toJson(void) const { std::vector s; for(auto spell : spells) { - s.push_back(spell.getName()); + s.push_back(spell->getName()); } return json({ {"slots", numSlots}, @@ -28,26 +31,30 @@ namespace entry { class Spellcasting : public Feature { public: - Spellcasting(const json& data, const json& base) : Feature(base), innate(data["innate"]), ability(rules::Ability(data["spellcasting_ability"])), spellsBySlot(json2vec(data["levels"])) {} + Spellcasting(const json& data, const json& base) : Feature(base), innate(data["innate"]), ability(rules::Ability(data["spellcasting_ability"])), spellsBySlot(json2ptrvec(data["levels"])) {} + // Can also be instantiated programatically + Spellcasting(const std::string& entry, const std::string& name, const std::string& type, const std::string& text, const rules::Ability& ability, bool isInnate) : Feature(entry, name, type, text), innate(isInnate), ability(ability) {} virtual ~Spellcasting() {} bool isInnate(void) const {return innate;} rules::Ability getAbility(void) const {return ability;} - std::vector getSpellsBySlot(void) const {return spellsBySlot;} + const std::vector>& getSlotLevels(void) const {return spellsBySlot;} + void addSlotLevel(void) {spellsBySlot.push_back(std::shared_ptr(new SlotLevel()));} + std::vector> getSpells(void) const; virtual std::string getText(const creature::Creature& c) const; virtual json toJson(void) const { auto data = Feature::toJson(); data["innate"] = innate; data["spellcasting_ability"] = ability; - data["levels"] = spellsBySlot; + data["levels"] = ptrvec2json(spellsBySlot); return data; } private: const bool innate; const rules::Ability ability; - const std::vector spellsBySlot; + std::vector> spellsBySlot; }; std::string genText(const Spellcasting& s, const creature::Creature& c); -- cgit v1.2.3