-
Notifications
You must be signed in to change notification settings - Fork 0
/
Character.cpp
104 lines (91 loc) · 2.08 KB
/
Character.cpp
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
#include <ncurses.h>
#include "Character.hpp"
#include "macros.hpp"
#include "Enemy.hpp"
#include "Bullet.hpp"
Character::Character(void) : x(1), y(1), lives(4) {
this->weapon = new Weapon;
}
Character::Character(Character const & ref) : x(ref.x), y(ref.y), lives(ref.lives) {
this->weapon = new Weapon(*(ref.weapon));
}
Character & Character::operator=(Character const & ref) {
this->x = ref.x;
this->y = ref.y;
this->lives = ref.lives;
delete this->weapon;
this->weapon = new Weapon(*(ref.weapon));
return *this;
}
Character::~Character(void) {
delete this->weapon;
}
void Character::setX(int x) {
if (x < 0)
this->x = 0;
else if (x > WIN_WIDTH - CHAR_WIDTH)
this->x = WIN_WIDTH - CHAR_WIDTH;
else
this->x = x;
}
void Character::setY(int y) {
if (y < 0)
this->y = 0;
else if (y > WIN_HEIGHT - CHAR_HEIGHT)
this->y = WIN_HEIGHT - CHAR_HEIGHT;
else
this->y = y;
}
int Character::getX(void) const {
return this->x;
}
int Character::getY(void) const {
return this->y;
}
bool Character::hit(void) {
this->lives--;
if (this->lives == 0)
return (true);
return (false);
}
void Character::upgrade(std::string const & weaponType) {
if (weaponType == this->weapon->getType())
this->weapon->upgrade();
else {
delete this->weapon;
this->weapon = new Weapon(weaponType);
}
}
void Character::attack(t_bullets **alist) const {
this->weapon->fire(this->y + 1, this->x + CHAR_WIDTH, alist);
}
void Character::display(void) const {
mvprintw(y, x, PLAYER_SPRITE1);
mvprintw(y + 1, x, PLAYER_SPRITE2);
mvprintw(y + 2, x, PLAYER_SPRITE3);
}
bool Character::collision(t_enemies *tene, t_bullets *tbull)
{
while (tene != nullptr)
{
if (!tene->enemy->checkVisibility()) {
tene = tene->next;
continue ;
}
if (abs(tene->enemy->getX() - x) < CHAR_WIDTH &&
abs(tene->enemy->getY() - y) < CHAR_HEIGHT)
{
tene->enemy->invisify();
return (true);
}
tene = tene->next;
}
while (tbull != nullptr)
{
if (abs(tbull->bullet->getX() - x) < CHAR_WIDTH &&
abs(tbull->bullet->getY() - y) < CHAR_HEIGHT)
return (true);
tbull = tbull->next;
}
return (false);
}