diff options
Diffstat (limited to 'src/item.cc')
-rw-r--r-- | src/item.cc | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/src/item.cc b/src/item.cc new file mode 100644 index 0000000..0aad620 --- /dev/null +++ b/src/item.cc @@ -0,0 +1,48 @@ +#include "json.hpp" +#include "item.h" +#include "weapon.h" +#include "armor.h" +#include "utils.h" +#include <iostream> +#include <memory> + +using namespace std; +typedef nlohmann::json json; + +namespace item { + shared_ptr<Item> Item::create(const json& data) { + auto dataMap = (map<string, json>) data; + if(dataMap.contains("damage")) { + return shared_ptr<Item>(new Weapon(data)); + } else if(dataMap.contains("ac")) { + return shared_ptr<Item>(new Armor(data)); + } + return shared_ptr<Item>(new Item(data)); + } + + Item::Item(const json& data) : name(data["name"]), cost(data["cost"]), weight(data["weight"]) {}; + + //Item::Item(const std::string& name, int cost, double weight) : name(name), cost(cost), weight(weight) {}; + + Item::~Item() {} + + string Item::getName() const { + return name; + } + + int Item::getCost() const { + return cost; + } + + double Item::getWeight() const { + return weight; + } + + json Item::toJson() const { + return json({ + {"name", name}, + {"cost", cost}, + {"weight", weight} + }); + } +} |