#pragma once #include "item.h" #include "json.hpp" #include namespace creature { class Creature; } namespace entry { class Weapon; std::string genText(const Weapon& w, const creature::Creature& c); 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"]) {} std::string getDamageType(void) const {return damageType;} int getDamageDieCount(void) const {return damageDieCount;} int getDamageDieSides(bool versatile=false) const; 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 { auto data = Item::toJson(); data["damage"]["dmg_type"] = damageType; data["damage"]["dmg_die_count"] = damageDieCount; data["damage"]["dmg_die_sides"] = damageDieSides; data["properties"] = properties; data["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::set properties; const std::string weaponType; const std::pair range; const int reach; const int cost; const double weight; }; }