-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathGoomba.cpp
99 lines (69 loc) · 1.72 KB
/
Goomba.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
#include "Goomba.h"
CGoomba::CGoomba(float x, float y) : CEnemy(x,y,-1)
{
ChangeState(EEnemyState::LIVE);
this->x = x;
this->y = y;
this->nx = -1;
useChangeDirectionAfterAxisCollide = true;
}
std::string CGoomba::GetAnimationIdFromState() {
switch (state.type)
{
case EEnemyState::LIVE:
case EEnemyState::ONESHOTDIE:
return GOOMBA_ANI_WALKING;
case EEnemyState::WILL_DIE:
return GOOMBA_ANI_WILL_DIE;
default:
return GOOMBA_ANI_WALKING;
}
}
Vector2 CGoomba::GetBoundingBoxSize(EEnemyState st) {
switch (st)
{
case EEnemyState::LIVE:
return Vector2(GOOMBA_BBOX_WIDTH, GOOMBA_BBOX_HEIGHT);
case EEnemyState::WILL_DIE:
return Vector2(0, 0);
case EEnemyState::DIE:
case EEnemyState::ONESHOTDIE:
return Vector2(0, 0);
default:
return Vector2(GOOMBA_BBOX_WIDTH, GOOMBA_BBOX_HEIGHT);
}
}
void CGoomba::BeingCollidedTop(LPGAMEOBJECT obj) {
CEnemy::BeingCollidedTop(obj);
if (dynamic_cast<CMario*>(obj)) {
if (state.type == EEnemyState::LIVE)
ChangeState(EEnemyState::WILL_DIE, 1000);
}
}
void CGoomba::CollidedTop(LPGAMEOBJECT obj) {
if (dy > 3.0f) {
walkingScope.x = walkingScope.y = 0;
}
InitWtandingScope(obj);
}
bool CGoomba::ChangeState(EEnemyState newState, DWORD newTimeState) {
if (CEnemy::ChangeState(newState, newTimeState)) {
if (newState == EEnemyState::WILL_DIE) {
y += GOOMBA_BBOX_WILL_DIE_HEIGHT / 2;
}
return true;
}
return false;
}
void CGoomba::Update(DWORD dt, vector<LPGAMEOBJECT>* coObjects)
{
if (state.type == EEnemyState::WILL_DIE) {
ChangeState(EEnemyState::DIE);
return;
}
if (state.type == EEnemyState::DIE) return;
ApplyGravity();
CEnemy::Update(dt, coObjects);
ChangeDirectionAfterAxisCollide();
UpdateWithCollision(coObjects);
}