00001 #ifndef ITEM_INST_HH_
00002 # define ITEM_INST_HH_
00003
00004 # include <cassert>
00005 # include <iostream>
00006
00007 # include "objects_fwd.hh"
00008
00009 namespace objects
00010 {
00011 class ItemInst
00012 {
00013 public:
00014 ItemInst(int item_id, const Item &item, const ItemClass &item_class,
00015 int count);
00016 virtual ~ItemInst();
00017
00018 public:
00019 int get_item_id() const;
00020 void set_item_id(int item_id);
00021 const Item &get_item() const;
00022 const ItemClass &get_item_class() const;
00023 int get_count() const;
00024 void set_count(int count);
00025
00026 virtual bool identified() const = 0;
00027 virtual bool possessed() const = 0;
00028 virtual void print(std::ostream &os) const;
00029
00030 protected:
00031 int _item_id;
00032 const Item &_item;
00033 const ItemClass &_item_class;
00034 int _count;
00035 };
00036
00037 class UnidentifiedItem : public ItemInst
00038 {
00039 public:
00040 UnidentifiedItem(int item_id, const Item &item, const ItemClass &item_class,
00041 int count);
00042 ~UnidentifiedItem();
00043
00044 virtual bool identified() const;
00045 virtual bool possessed() const;
00046 };
00047
00048 class IdentifiedItem : public ItemInst
00049 {
00050 public:
00051 IdentifiedItem(int item_id, const Item &item, const ItemClass &item_class,
00052 int count, int durability, int level);
00053 ~IdentifiedItem();
00054
00055 virtual bool identified() const;
00056 virtual bool possessed() const;
00057 virtual void print(std::ostream &os) const;
00058
00059 int get_value();
00060 bool can_be_sold();
00061
00062 int get_durability() const;
00063 void set_durability(int i);
00064 int get_level() const;
00065
00066 protected:
00067 int _durability;
00068 int _level;
00069
00071 };
00072
00073 class PossessedItem : public IdentifiedItem
00074 {
00075 public:
00076 PossessedItem(int item_id, const Item &item, const ItemClass &item_class,
00077 int count, int durability, int level,
00078 const ItemContainer &item_container, int position);
00079 ~PossessedItem();
00080
00081 virtual bool possessed() const;
00082 virtual void print(std::ostream &os) const;
00083
00084 const ItemContainer &get_item_container() const;
00085 int get_position() const;
00086 void set_item_container(const ItemContainer &ic);
00087 void set_position(int i);
00088
00089 protected:
00090 const ItemContainer *_item_container;
00091 int _position;
00092 };
00093
00094 class ItemInScreen : public UnidentifiedItem
00095 {
00096 public:
00097 ItemInScreen(int item_id, const Item &item, const ItemClass &item_class,
00098 int count, int pos_x, int pos_y);
00099 ~ItemInScreen();
00100
00101 virtual void print(std::ostream &os) const;
00102
00103 int get_pos_x() const;
00104 int get_pos_y() const;
00105 bool is_available() const;
00106 void set_unavailable();
00107
00108 protected:
00109
00110 int _pos_x;
00111 int _pos_y;
00112
00113
00114 bool _available;
00115 };
00116
00117 std::ostream &operator <<(std::ostream &os, const ItemInst &ii);
00118 }
00119
00120 # include "item_inst.hxx"
00121
00122 #endif