/* 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, Unique = 2}; Item(const Info *info); /// copy constructor Item(const Item &other); ~Item(); /* ---- inspectors --------------------------------------------- */ /** * @brief associated amount */ inline long amount() const { return item_amount; } /** * @brief information record */ inline const Info *info() const { return item_info; } /** * @brief price */ inline const long price() const { return item_price; } /** * @brief server timestamp */ inline const unsigned long timestamp() const { return item_timestamp; } /** * @brief item flags */ inline const unsigned int flags() const { return item_flags; } /** * @brief returns true of a flag is set */ inline const bool has_flag(const Flags flag) const { return ((item_flags & (unsigned int) flag) == (unsigned int) flag); } /** * @brief return true if the dirty flag is set * */ inline const bool dirty() const { return item_dirty; } /* ---- mutators ----------------------------------------------- */ /** * @brief set associated amount */ void set_amount(const long amount); /** * @brief increase associated amount */ void inc_amount(const long amount); /** * @brief decrease associated amount */ void dec_amount(const long amount); /** * @brief set associated price */ void set_price(const long price); /** * @brief set item flag */ inline void set_flag(Flags flag) { item_flags |= flag; } /** * @brief unset item flag */ inline void unset_flag(Flags flag) { item_flags &= ~flag; } /** * @brief set the dirty flag * */ inline void set_dirty(const bool dirty = true) { item_dirty = true; } /* ---- 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; bool item_dirty; }; } // namespace core #endif // __INCLUDED_CORE_ITEM_H__