blob: 33755b230cd5f33ab56444703d347af1910e2321 (
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
|
#ifndef COMPONENTS_SPRITE_HPP_
#define COMPONENTS_SPRITE_HPP_
#include "base.hpp"
#include <texture.hpp>
#include <vector2.hpp>
#include <vector>
struct SpriteData {
SpriteData(void) = default;
SpriteData(Texture t);
SpriteData(std::string path, vec2 off);
SpriteData(std::string path, vec2 off, vec2 si);
Texture tex;
vec2 size;
vec2 offset;
vec2 offset_tex;
vec2 size_tex;
unsigned int limb;
bool veltate = false;
};
using Frame = std::vector<std::pair<SpriteData, vec2>>;
std::vector<Frame> developFrame(XMLElement*);
/**
* @struct Sprite
* @brief If an entity is visible we want to be able to see it.
* Each entity is given a sprite, a sprite can consist of manu frames or pieces to make one.
*/
struct Sprite : public Component {
Sprite(bool left = false)
: faceLeft(left) {}
Sprite(XMLElement* imp, XMLElement* def) {
fromXML(imp, def);
}
inline Frame getSprite(void) {
return sprite;
}
int clearSprite(void);
int addSpriteSegment(SpriteData data, vec2 loc);
int changeSpriteSegment(SpriteData data, vec2 loc);
vec2 getSpriteSize();
void fromXML(XMLElement* imp, XMLElement* def) final {
(void)imp;
auto frames = developFrame(def);
if (!frames.empty())
sprite = frames.at(0);
faceLeft = false;
}
Frame sprite;
bool faceLeft;
};
#endif // COMPONENTS_SPRITE_HPP_
|