aboutsummaryrefslogtreecommitdiffstats
path: root/examples/shooter/player.cpp
blob: dab743a9ebb0402a664e6cb83f1df8ebe865b561 (plain)
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_;
}