-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathCharacter.h
145 lines (121 loc) · 3.69 KB
/
Character.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
#pragma once
#include<map>
#include "Actor.h"
#include "Map.h"
#include "Const.h"
#include "Vec2i.h"
#include "Item.h"
#include "Magic.h"
class Character : public Actor
{
public:
Character(Vec2i coords, int hp, char symb, int damage) :
Actor(coords, symb),
_hp(hp),
_damage(damage)
{
}
int hitPoints() const { return _hp; }
int damage() const { return _damage; };
Vec2i direction() const { return _direction; }
Vec2i newCoordinates() const { return Vec2i(_coords) + Vec2i(_direction); }
void setDamage(int damage){ _damage = damage; }
void setDirection(Vec2i dir){ _direction = dir; }
inline bool isDead(){ return (_hp <= 0 ? true : false); }
void act(Map *map) override { move(map); }
virtual void recieveDamage(int damage) { _hp -= damage; }
virtual void heal(int ammount) {}
void collide(Map *map, Actor *target) override { target->collide(map, this); }
void collide(Map *map, Character *target) override {}
virtual void collide(Map *map, Knight *target) {}
virtual void collide(Map *map, Princess *target) {}
virtual void collide(Map *map, Monster *target) {}
virtual void collide(Map *map, Medkit *target) {}
virtual void collide(Map *map, Magic *target) {}
virtual void collide(Map *map, Wizard *target) {}
protected:
Vec2i _direction;
int _hp;
int _damage;
virtual void move(Map *map) {}
};
class Knight : public Character
{
public:
Knight(Vec2i coords, int hp, char symb, int damage);
void heal(int ammount) override;
void setDirection(char direction);
void recieveDamage(int damage) override;
void collide(Map *map, Actor *target) override { target->collide(map, this); }
void collide(Map *map, Character *target) override { target->collide(map, this); }
void collide(Map *map, Medkit *target) override { target->collide(map, this); }
void collide(Map *map, Monster *target) override;
void collide(Map *map, Princess *target) override;
void collide(Map *map, Magic *target) override { target->collide(map, this); }
private:
std::map<char, Vec2i> _directions;
void move(Map *map) override;
};
class Princess : public Character
{
public:
Princess(Vec2i coords, int hp, char symb, int damage) :
Character(coords, hp, symb, damage)
{
}
void recieveDamage(int damage) override;
void collide(Map *map, Character *target) override { target->collide(map, this); }
void collide(Map *map, Magic *target) override { target->collide(map, this); }
};
class Monster : public Character
{
public:
Monster(Vec2i coords, int hp, char symb, int damage) :
Character(coords, hp, symb, damage)
{
}
void collide(Map *map, Actor *target) override { target->collide(map, this); }
void collide(Map *map, Character *target) override { target->collide(map, this); }
void collide(Map *map, Knight *target) override;
void collide(Map *map, Princess *target) override;
void collide(Map *map, Magic *target){ target->collide(map, this); }
private:
void move(Map *map) override;
};
class Zombie : public Monster
{
public:
Zombie(Vec2i coords, int hp, char symb, int damage) :
Monster(coords, hp, symb, damage)
{
}
void heal(int ammount) override;
void recieveDamage(int damage) override;
};
class Dragon : public Monster
{
public:
Dragon(Vec2i coords, int hp, char symb, int damage) :
Monster(coords, hp, symb, damage)
{
}
void heal(int ammount) override;
void recieveDamage(int damage);
private:
void move(Map *map) override;
};
class Wizard : public Monster
{
public:
Wizard(Vec2i coords, int hp, char symb, int damage, int mana) :
Monster(coords, hp, symb, damage),
_mana(mana)
{
}
void heal(int ammount) override;
void recieveDamage(int damage);
void collide(Map *map, Actor *target) override { target->collide(map, this); }
private:
void move(Map *map) override;
int _mana;
};