diff options
Diffstat (limited to 'src/core/item.h')
-rw-r--r-- | src/core/item.h | 66 |
1 files changed, 49 insertions, 17 deletions
diff --git a/src/core/item.h b/src/core/item.h index d390c2d..8299444 100644 --- a/src/core/item.h +++ b/src/core/item.h @@ -8,48 +8,80 @@ #define __INCLUDED_CORE_ITEM_H__ #include <string> +#include <vector> namespace core { /** + * @brief a specific type of item in the game + * Examples are tritanium hull armor, ion cannon, iron ore + */ +class ItemType +{ +public: + ItemType(const char *label); + + inline const std::string &label() { return itemtype_label; } + + inline const std::string &name() { return itemtype_name; } + + inline const float baseprice() { return itemtype_baseprice; } + + void set_name(const std::string &name); + + void set_baseprice(const float baseprice); + +private: + std::string itemtype_label; + std::string itemtype_name; + + float itemtype_baseprice; +}; + + +/** * @brief a class of items * Examples are armor, cannons, commodities... */ class ItemClass { public: + typedef std::vector<ItemType *> Types; + ItemClass(const char *label); + ~ItemClass(); inline const std::string &label() { return itemclass_label; } inline const std::string &name() { return itemclass_name; } + ItemType *find_type(const char *label); + + void set_name(const std::string &name); + + void add_type(ItemType *itemtype); + + void list(); + private: std::string itemclass_label; std::string itemclass_name; + + Types itemclass_types; }; -/** - * @brief a specific type of item in the game - * Examples are tritanium hull armor, ion cannon, gems - */ -class ItemType +class Item { public: - ItemType(const char *label); - - inline const std::string &label() { return itemtype_label; } - - inline const std::string &name() { return itemtype_name; } + typedef std::vector<ItemClass *> Registry; - inline const float base_price() { return itemtype_baseprice; } + static void add_class(ItemClass * itemclass); + static void add_type(ItemClass * itemclass, ItemType *itemtype); + static void find_class(const char *label); + static void clear(); + static void list(); -private: - std::string itemtype_label; - std::string itemtype_name; - - ItemClass *itemtype_class; - float itemtype_baseprice; + static Registry item_registry; }; } |