-
Notifications
You must be signed in to change notification settings - Fork 0
/
graphics-component.cpp
79 lines (70 loc) · 2.46 KB
/
graphics-component.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
#include <iostream>
#include "game.hpp"
#include "graphics-component.hpp"
#include "texture-manager.hpp"
#include "defs.hpp"
GraphicsComponent::GraphicsComponent(SDL_Rect &r) {
src = r;
currentAnimation = nullptr;
flip = SDL_FLIP_NONE;
}
void GraphicsComponent::draw(Entity* entity) {
TextureManager::draw(src, SDL_Rect { Game::camera->xpos + entity->xpos, Game::camera->ypos + entity->ypos, src.w * SCALING, src.h * SCALING }, alpha, flip);
alpha = 255;
}
void GraphicsComponent::addAnimation(int name, SDL_Rect src, int f, int s) {
animation_map[name] = new Animation(src, f , s);
}
void GraphicsComponent::addAnimation(int name, SDL_Rect src, int f, int s, int t) {
animation_map[name] = new Animation(src, f, s);
animation_map[name]->type = t;
}
void GraphicsComponent::addAnimation(int name, SDL_Rect src, int f, int s, int x_off, int y_off) {
animation_map[name] = new Animation(src, f , s);
x_offset = x_off;
y_offset = y_off;
}
void GraphicsComponent::setAnimation(int name, SDL_RendererFlip f) {
if (animation_map.find(name) != animation_map.end()) {
if (currentAnimation != nullptr && currentAnimation != animation_map[name]) {
animation_complete = false;
frameIndex = 0;
}
animationIndex = name;
currentAnimation = animation_map[name];
}
flip = f;
}
void GraphicsComponent::setAnimation(int name) {
if (animation_map.find(name) != animation_map.end()) {
if (currentAnimation != nullptr && currentAnimation != animation_map[name]) {
animation_complete = false;
frameIndex = 0;
}
animationIndex = name;
currentAnimation = animation_map[name];
}
}
void GraphicsComponent::unsetAnimation() {
currentAnimation = nullptr;
}
void GraphicsComponent::update(Entity* entity) {
if (currentAnimation != nullptr) {
src = currentAnimation->src;
src.x += TILESHEET_SIZE * frameIndex;
frameDelay++;
if (frameDelay > currentAnimation->speed) {
if (currentAnimation->type == LINEAR) {
frameIndex = (frameIndex + 1) % currentAnimation->frames;
}
else if (currentAnimation->type == BOUNCE) {
frameIndex = frameIndex + 1 - bounce * 2;
std::cout << bounce << std::endl;
if (frameIndex == (currentAnimation->frames - 1)) bounce = true;
else if (frameIndex == 0) bounce = false;
}
animation_complete = (frameIndex == 0);
frameDelay = 0;
}
}
}