From 7b5d1e3d46e94262a9c0fd3a01ab4685aea9d12d Mon Sep 17 00:00:00 2001 From: Your Name Date: Sat, 1 May 2021 15:10:54 -0400 Subject: Added bash completion, amongst others --- src/weapon.h | 46 ++++++++++++++++++++++++++++++++-------------- 1 file changed, 32 insertions(+), 14 deletions(-) (limited to 'src/weapon.h') diff --git a/src/weapon.h b/src/weapon.h index 7a8c0ba..9384f78 100644 --- a/src/weapon.h +++ b/src/weapon.h @@ -1,5 +1,6 @@ #pragma once #include "item.h" +#include "rules.h" #include "json.hpp" #include @@ -9,44 +10,61 @@ namespace creature { namespace entry { class Weapon; + class Damage; std::string genText(const Weapon& w, const creature::Creature& c); + std::vector getAbilityOptions(const Weapon& w); + std::vector rollDmg(const Weapon& w, bool versatile=false); + std::string formatDmg(const Weapon& w, const creature::Creature& c); + + class Damage : public Jsonable { + public: + Damage(const nlohmann::json& data) : count(data["dmg_die_count"]), sides(data["dmg_die_sides"]), type(data["dmg_type"]), isOr(data["is_or"]) {} + const int count; + const int sides; + const std::string type; + const bool isOr; + int rolled = 0; + + nlohmann::json toJson(void) const { + return nlohmann::json({ + {"dmg_die_count", count}, + {"dmg_die_sides", sides}, + {"dmg_type", type}, + {"is_or", isOr} + }); + } + }; class Weapon : public Item, public Substantial { public: - Weapon(const nlohmann::json& data, const nlohmann::json& base) : Item(base), damageType(data["damage"]["dmg_type"]), damageDieCount(data["damage"]["dmg_die_count"]), damageDieSides(data["damage"]["dmg_die_sides"]), properties(data["properties"]), weaponType(data["weapon_type"]), range(data["range"][0], data["range"][1]), reach(data["reach"]), cost(data["cost"]), weight(data["weight"]) {} + Weapon(const nlohmann::json& data, const nlohmann::json& base) : Item(base), damage(json2vec(data["damage"])), properties(data["properties"]), weaponType(data["weapon_type"]), range(data["range"][0], data["range"][1]), reach(data["reach"]), cost(data["cost"]), weight(data["weight"]) {} - std::string getDamageType(void) const {return damageType;} - int getDamageDieCount(void) const {return damageDieCount;} - int getDamageDieSides(bool versatile=false) const; + std::vector getDamage(void) const {return damage;} std::set getProperties(void) const {return properties;} std::string getWeaponType(void) const {return weaponType;} std::pair getRange(void) const {return range;} int getReach(void) const {return reach;} int getCost(void) const {return cost;} double getWeight(void) const {return weight;} - + virtual std::string getText() const override; virtual std::string getText(const creature::Creature& c) const override {return genText(*this, c);} - /*virtual nlohmann::json toJson(void) const { + virtual nlohmann::json toJson(void) const { auto data = Item::toJson(); - data["damage"]["dmg_type"] = damageType; - data["damage"]["dmg_die_count"] = damageDieCount; - data["damage"]["dmg_die_sides"] = damageDieSides; + data["damage"] = damage; data["properties"] = properties; - data["type"] = weaponType; + data["weapon_type"] = weaponType; data["range"] = range; data["reach"] = reach; data["cost"] = cost; data["weight"] = weight; return data; - }*/ + } private: - const std::string damageType; - const int damageDieCount; - const int damageDieSides; + const std::vector damage; const std::set properties; const std::string weaponType; const std::pair range; -- cgit v1.2.3