-
Notifications
You must be signed in to change notification settings - Fork 0
/
psychosquid.cpp
108 lines (96 loc) · 2.39 KB
/
psychosquid.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
105
106
107
108
#include "psychosquid.h"
#include <QDebug>
Psychosquid::Psychosquid(qreal w, qreal h, const QPointF &pos,
const QPixmaps2 &pixs2, QGraphicsScene *scene,
QGraphicsItem *parent)
: AbstractAlien(w, h, pos, pixs2, scene, parent),
m_name("psychosquid"), m_recovering(false),
m_firstRec(false), m_secRec(false)
{
m_health = Config::ALIENS_MAX_HEALTH["psychosquid"];
m_timer = new QTimer;
connect(m_timer, SIGNAL(timeout()),
this, SLOT(slt_finishRecovering()));
m_timer->setSingleShot(true);
}
Psychosquid::~Psychosquid()
{
delete m_timer;
m_timer = nullptr;
}
const QString &Psychosquid::name() const
{
return m_name;
}
void Psychosquid::doCollide()
{
if (!m_recovering){
AbstractAlien::doCollide();
}
}
void Psychosquid::eat(const int)
{
// do nothing
}
void Psychosquid::findFood()
{
if (!m_recovering){
AbstractAlien::findFood();
}
}
void Psychosquid::advance(int)
{
AbstractAlien::advance(0);
if (m_health <= Config::ALIENS_MAX_HEALTH["psychosquid"] * 2 / 3
&& !m_firstRec
&& !m_recovering){
m_firstRec = true;
m_recovering = true;
m_timer->start(5000);
m_hasTarget = false;
m_target = nullptr;
}
if (m_health <= Config::ALIENS_MAX_HEALTH["psychosquid"] / 3
&& m_firstRec
&& !m_secRec
&& !m_recovering){
m_secRec = true;
m_recovering = true;
m_timer->start(1500);
m_hasTarget = false;
m_target = nullptr;
}
if (m_health > Config::ALIENS_MAX_HEALTH["psychosquid"] * 2 / 3
&& m_firstRec){
m_firstRec = false;
}
if (m_health > Config::ALIENS_MAX_HEALTH["psychosquid"] / 3
&& m_secRec){
m_secRec = false;
}
if (m_step % Config::UPDATE_PAINT_STEP == 0
&& m_recovering){
m_pixStateIndex += 4;
if (m_pixStateIndex >= 8){
m_pixStateIndex -= 4;
}
}
}
void Psychosquid::slt_finishRecovering()
{
m_recovering = false;
m_pixStateIndex -= 4;
if (m_pixStateIndex < 0){
m_pixStateIndex += 4;
}
update();
findFood();
}
void Psychosquid::slt_attacked(const QPointF & pos)
{
if (!m_recovering){
AbstractAlien::slt_attacked(pos);
} else {
m_health += Config::ATTACK_ALIEN_DAMAGE;
}
}