/* core/item.h This file is part of the Osirion project and is distributed under the terms of the GNU General Public License version 2 */ #ifndef __INCLUDED_CORE_ITEM_H__ #define __INCLUDED_CORE_ITEM_H__ #include #include 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 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; }; class Item { public: typedef std::vector Registry; 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(); static Registry item_registry; }; } #endif