]> jfr.im git - irc/gameservirc.git/blob - gameserv-2.0/libgameservgldl/include/GameServ/GameLayer/GameObjects/ItemGO.h
f2dbc305cf2fc118fa039b18a3c5f2b1fffd8ef6
[irc/gameservirc.git] / gameserv-2.0 / libgameservgldl / include / GameServ / GameLayer / GameObjects / ItemGO.h
1 #ifndef __GS__ITEM_H__
2 #define __GS__ITEM_H__
3 #include <GameServ/GameLayer/GameObjects/GameObject.h>
4 using GameServ::GameLayer::GameObjects::GameObject;
5 #include <GameServ/Types.h>
6 using GameServ::Types::ItemTypes;
7 using GameServ::Types::Modifiers;
8 using GameServ::Types::Range;
9 using GameServ::Types::ObjectTypes;
10
11 #include <string>
12 using std::string;
13 #include <map>
14 using std::map;
15
16 namespace GameServ { namespace GameLayer { namespace GameObjects {
17
18 class ItemGO : public GameObject
19 {
20 public:
21 ItemGO();
22 virtual ~ItemGO();
23
24 //! Property get - Name
25 string Name(void) const;
26 //! Property set - Name
27 void Name(const string &value);
28
29 //! Property get - Price
30 unsigned long int Price(void) const;
31 //! Property set - Price
32 void Price(const unsigned long int &value);
33
34 //! Property get - Uses
35 int Uses(void) const;
36 //! Property set - Uses
37 void Uses(const int &value);
38
39 //! Property get - Item Type
40 virtual ItemTypes::ItemType Type(void) const = 0;
41
42 //! Property get - Modifiers
43 map<Modifiers::Modifier, Range<int> > Modifiers(void) const;
44
45 //! Property set - Modifiers
46 void Modifiers(const map<Modifiers::Modifier, Range<int> > &modifiers);
47
48 //! Use item on a game object
49 virtual void Use(shared_ptr<GameObject> spObject);
50 //! Undo item's last effect on a game object
51 virtual void Undo(shared_ptr<GameObject> spObject);
52
53 virtual ItemGO *Clone(void) const = 0;
54
55 virtual ObjectTypes::ObjectType ObjectType(void) const;
56
57 protected:
58 string mName;
59 unsigned long int mPrice;
60 int mUses;
61 map<Modifiers::Modifier, Range<int> > mModifiers;
62
63 //! Base class standard modifier applier. Simply adds the modified stat to the correct stat
64 virtual void ApplyModifier(shared_ptr<GameObject> spObject, const Modifiers::Modifier &modifier, Range<int> r);
65 virtual void UndoModifier(shared_ptr<GameObject> spObject, const Modifiers::Modifier &modifier, Range<int> r);
66 };
67 }}}
68 #endif