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
|
#include "player.h"
Player::Player(const glm::vec4 &bound, const yage::Texture &texture)
: bound_(bound), texture_(texture), direction_(Direction::DOWN),
action_(Action::IDLE), speed_(4)
{
}
void Player::setTexture(const yage::Texture &texture) {
texture_ = texture;
}
void Player::draw(yage::SpriteBatch &sp)
{
static int time = 0;
static int iteration = 0;
float width = 1.f / static_cast<float>(texture_.x);
float height = 1.f / static_cast<float>(texture_.y);
switch (action_) {
case Action::IDLE:
sp.draw(bound_,
{width, static_cast<int>(direction_) * height, width, height},
texture_.id, yage::Colour(255, 255, 255, 255), 1);
break;
case Action::MOVING:
if(time % 15 == 0) {
iteration = (iteration + 1) % 2;
}
sp.draw(bound_,
{iteration * 2 * width, static_cast<int>(direction_) * height, width, height},
texture_.id, yage::Colour(255, 255, 255, 255), 1);
time = (time + 1) % 59;
break;
}
}
void Player::move(Direction direction)
{
direction_ = direction;
action_ = Action::MOVING;
switch (direction_) {
case Direction::LEFT:
bound_.x -= speed_;
break;
case Direction::DOWN:
bound_.y -= speed_;
break;
case Direction::RIGHT:
bound_.x += speed_;
break;
case Direction::UP:
bound_.y += speed_;
break;
}
}
void Player::idle()
{
action_ = Action::IDLE;
}
void Player::look(Direction direction)
{
direction_ = direction;
}
glm::vec4 Player::position() const
{
return bound_;
}
|