-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathSpike.cpp
More file actions
92 lines (75 loc) · 2.39 KB
/
Spike.cpp
File metadata and controls
92 lines (75 loc) · 2.39 KB
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
#include "Spike.hpp"
Spike::Spike() : Entity() {
direction = SpikeDirection::DOUBLE_BOTTOM;
}
Spike::Spike(uint16_t sprite_index, SpikeDirection direction, float x, float y) : Entity(sprite_index, x, y) {
this->direction = direction;
}
void Spike::render(Spritesheet& spritesheet) {
Entity::render(spritesheet);
}
bool Spike::check_collision(float player_x, float player_y) {
uint16_t offset_x, offset_y, w, h;
/*if ((uint8_t)direction & (uint8_t)SpikeDirection::LEFT || ((uint8_t)direction & (uint8_t)SpikeDirection::DOUBLE && ((uint8_t)direction & (uint8_t)SpikeDirection::TOP || (uint8_t)direction & (uint8_t)SpikeDirection::BOTTOM))) {
}*/
switch (direction) {
case Spike::SpikeDirection::DOUBLE_BOTTOM:
offset_x = 0;
offset_y = SPRITES::SIZE_HALF;
w = SPRITES::SIZE;
h = SPRITES::SIZE_HALF;
break;
case Spike::SpikeDirection::DOUBLE_LEFT:
offset_x = 0;
offset_y = 0;
w = SPRITES::SIZE_HALF;
h = SPRITES::SIZE;
break;
case Spike::SpikeDirection::DOUBLE_TOP:
offset_x = 0;
offset_y = 0;
w = SPRITES::SIZE;
h = SPRITES::SIZE_HALF;
break;
case Spike::SpikeDirection::DOUBLE_RIGHT:
offset_x = SPRITES::SIZE_HALF;
offset_y = 0;
w = SPRITES::SIZE_HALF;
h = SPRITES::SIZE;
break;
case Spike::SpikeDirection::SINGLE_BOTTOM_LEFT:
case Spike::SpikeDirection::SINGLE_LEFT_BOTTOM:
offset_x = 0;
offset_y = SPRITES::SIZE_HALF;
w = SPRITES::SIZE_HALF;
h = SPRITES::SIZE_HALF;
break;
case Spike::SpikeDirection::SINGLE_LEFT_TOP:
case Spike::SpikeDirection::SINGLE_TOP_LEFT:
offset_x = 0;
offset_y = 0;
w = SPRITES::SIZE_HALF;
h = SPRITES::SIZE_HALF;
break;
case Spike::SpikeDirection::SINGLE_BOTTOM_RIGHT:
case Spike::SpikeDirection::SINGLE_RIGHT_BOTTOM:
offset_x = SPRITES::SIZE_HALF;
offset_y = SPRITES::SIZE_HALF;
w = SPRITES::SIZE_HALF;
h = SPRITES::SIZE_HALF;
break;
case Spike::SpikeDirection::SINGLE_RIGHT_TOP:
case Spike::SpikeDirection::SINGLE_TOP_RIGHT:
offset_x = SPRITES::SIZE_HALF;
offset_y = 0;
w = SPRITES::SIZE_HALF;
h = SPRITES::SIZE_HALF;
break;
default:
// Should never happen!
offset_x = offset_y = w = h = 0;
}
// Allow a tolerance for collisions
return player_x + GAME::SQUARE::WIDTH > x + offset_x + GAME::SPIKE::TOLERANCE && player_x < x + offset_x + w - GAME::SPIKE::TOLERANCE &&
player_y + GAME::SQUARE::HEIGHT > y + offset_y + GAME::SPIKE::TOLERANCE && player_y < y + offset_y + h - GAME::SPIKE::TOLERANCE;
}