From d13358b71ec15085f2638fd9c3fc634df62dfc94 Mon Sep 17 00:00:00 2001 From: Your Name Date: Sun, 9 May 2021 13:56:46 -0400 Subject: Reduced dependency on json-related hacks --- src/creature.h | 90 ++++++++++++++++++++++++++-------------------------------- 1 file changed, 40 insertions(+), 50 deletions(-) (limited to 'src/creature.h') diff --git a/src/creature.h b/src/creature.h index 0970f04..6e0d226 100644 --- a/src/creature.h +++ b/src/creature.h @@ -19,32 +19,27 @@ typedef nlohmann::json json; namespace creature { class Creature; - class dmgType : public Jsonable { - public: - dmgType(const json& data) : type(data["type"]), qualifiers(utils::json2vec(data["qualifiers"])) {} - std::string type; - std::vector qualifiers; - std::string getText() const { - if(qualifiers.empty()) { - return type; - } - return utils::join(qualifiers, ", ") + " " + type; - } - json toJson(void) const { - return json({ - {"type", type}, - {"qualifiers", qualifiers} - }); + struct dmgType { + std::string type; + std::vector qualifiers; + std::string getText() const { + if(qualifiers.empty()) { + return type; } + return utils::join(qualifiers, ", ") + " " + type; + } + }; + NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(dmgType, type, qualifiers); + struct NatArmor { + std::string name; + int bonus; }; + NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(NatArmor, name, bonus); // Convenience function to calculate AC const int getAC(const Creature& c); - // Convenience function to spit out everything about it - std::string genText(const Creature& c); - class Creature : public entry::Entry { public: Creature(const json& data, const json& base); @@ -57,16 +52,15 @@ namespace creature { std::map getSaves(void) const; //Override getText - virtual std::string getText() const override {return genText(*this);} + virtual std::string getText() const override; // Inline getters std::string getCreatureName(void) const {return getName();} std::string getGivenName(void) const {return givenName;} - //std::string getType(void) const {return getType();} std::string getSize(void) const {return size;} std::string getAlignment(void) const {return alignment;} double getCR(void) const {return cr;} - std::pair getNaturalArmor(void) const {return {natArmorName, natArmorBonus};} + NatArmor getNaturalArmor(void) const {return natural_armor;} std::string getLanguages(void) const {return langs;} int getHP(void) const {return hp;} int getHPMax(void) const {return hpMax;} @@ -74,14 +68,14 @@ namespace creature { std::string getSpeed(void) const {return speed;} int getScore(const rules::Ability& ability) const {return stats.at(ability);} int getBonus(const rules::Ability& ability) const {return std::floor((getScore(ability) - 10) / 2.0);} - int getProficiency(void) const {return proficiency;} + int getProficiency(void) const {return prof;} std::vector> getFeatures(void) const {return features;} std::shared_ptr getSpellcasting(void) const; std::vector> getInventory(void) const {return inventory;} - std::vector getDmgImmunities(void) const {return dmgImmunities;} - std::vector getDmgResistances(void) const {return dmgResistances;} - std::vector getDmgVulnerabilities(void) const {return dmgVulnerabilities;} - std::vector getCondImmunities(void) const {return condImmunities;} + std::vector getDmgImmunities(void) const {return d_immunities;} + std::vector getDmgResistances(void) const {return d_resistances;} + std::vector getDmgVulnerabilities(void) const {return d_vulnerabilities;} + std::vector getCondImmunities(void) const {return c_immunities;} // Setters (mutators) @@ -90,7 +84,7 @@ namespace creature { void applyHealing(int amount); void setScore(const rules::Ability& ability, int score); void setProfLevel(const rules::Skill& skill, int level); - void setProficiency(int prof) {proficiency = prof;} + void setProficiency(int p) {prof = p;} void addInventoryItem(std::shared_ptr item); void addSpell(std::shared_ptr spell); void removeSpell(std::shared_ptr spell); @@ -100,34 +94,30 @@ namespace creature { virtual json toJson(void) const; private: - // Mutable variables + std::string givenName; int hpMax; int hp; std::vector> inventory; std::map stats; std::map skills; - int proficiency; - - //Immutable variables - //const std::string creatureName; - const std::string size; - //const std::string type; - const std::string alignment; - const int hdCount; - const int hdSides; - const std::string speed; - const std::vector saves; - const std::vector senses; - const std::string langs; - const double cr; - const std::string natArmorName; - const int natArmorBonus; - const std::vector dmgImmunities; - const std::vector dmgResistances; - const std::vector dmgVulnerabilities; - const std::vector condImmunities; - const std::vector> features; + int prof; + std::string size; + std::string alignment; + int hit_die_count; + int hit_die_sides; + std::string speed; + std::vector saves; + std::vector senses; + std::string langs; + double cr; + bool observant; + NatArmor natural_armor; + std::vector d_immunities; + std::vector d_resistances; + std::vector d_vulnerabilities; + std::vector c_immunities; + std::vector> features; }; -- cgit v1.2.3