/* 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: enum Flags {Tradeable = 1}; Item(const Info *info); /// copy constructor Item(const Item &other); ~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; } /// item flags inline const unsigned int flags() const { return item_flags; } /// returns true of a flag is set inline const bool flag_is_set(const Flags flag) const { return ((item_flags & (unsigned int)flag) == (unsigned int)flag); } /* ---- 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); /// set flag inline void set_flag(Flags flag) { item_flags |= flag; } /// unset flag inline void unset_flag(Flags flag) { item_flags &= ~flag; } 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; unsigned int item_flags; }; } // namespace core #endif // __INCLUDED_CORE_ITEM_H__