/* 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 "core/info.h" namespace core { /** * @brief an item in the inventory of an entity * The info record represents the type of the item */ class Item { public: Item(const Info *info); ~Item(); /* ---- inspectors --------------------------------------------- */ /** * @brief associated amount */ inline long amount() const { return item_amount; } /** * @brief information card */ inline const Info *info() const { return item_info; } inline const long price() const { return item_price; } inline const unsigned long timestamp() const { return item_timestamp; } /* ---- mutators ----------------------------------------------- */ /** * @brief set associated amount */ void set_amount(const long amount); void inc_amount(const long amount); void dec_amount(const long amount); void set_price(const long price); void set_dirty(); /* ---- serializers -------------------------------------------- */ void serialize_server_update(std::ostream & os) const; void receive_server_update(std::istream &is); private: void set_timestamp(const unsigned long timestamp); const Info *item_info; long item_price; long item_amount; unsigned long item_timestamp; }; } // namespace core #endif // __INCLUDED_CORE_ITEM_H__