jGL
Loading...
Searching...
No Matches
sprite.h
Go to the documentation of this file.
1#ifndef SPRITE_H
2#define SPRITE_H
3
4#include <jGL/texture.h>
5#include <jGL/primitive.h>
6#include <jGL/orthoCam.h>
7
8#include <memory>
9#include <algorithm>
10
20namespace jGL
21{
22 class Sprite
23 {
24
25 public:
26
27 Sprite() = default;
28
38 (
39 Transform * tra,
40 TextureRegion * to,
41 Texture * tex,
42 glm::vec4 * colour
43 )
44 : transform(tra),
45 texOffset(to),
46 texture(tex),
48 {}
49
53 glm::vec4 * colour;
54
61 {
63 {
64 {
65 glm::vec2(-0.5, -0.5),
66 glm::vec2(-0.5, 0.5),
67 glm::vec2(0.5, 0.5),
68 glm::vec2(0.5, -0.5)
69 }
70 };
71
72 float ct = std::cos(transform->theta); float st = std::sin(transform->theta);
73 glm::mat2 rot(ct, -st, st, ct);
74 glm::vec2 pos(transform->x, transform->y);
75 glm::vec2 scale(transform->scaleX, transform->scaleY);
76
77
78 for (uint8_t i = 0; i < wbb.vertices.size(); i++)
79 {
80 wbb.vertices[i] = rot*(wbb.vertices[i]*scale)+pos;
81 }
82
83 return wbb;
84 }
85
93 {
96 glm::vec2 pos;
97 for (uint8_t i = 0; i < wbb.vertices.size(); i++)
98 {
99 pos = camera.worldToScreen(wbb.vertices[i].x, wbb.vertices[i].y);
100 sbb.vertices[i].x = uint16_t(pos.x);
101 sbb.vertices[i].y = uint16_t(pos.y);
102 }
103 return sbb;
104 }
105
110
111 protected:
112
114 {
115 glm::vec3 whc = texture->size();
116 if (to.lx == 0){ to.lx = whc.x; }
117 if (to.ly == 0){ to.ly = whc.y; }
119 std::clamp(float(to.tx) / float(whc.x), 0.0f, 1.0f),
120 std::clamp(float(to.ty) / float(whc.y), 0.0f, 1.0f),
121 std::clamp(float(to.lx) / float(whc.x), 0.0f, 1.0f),
122 std::clamp(float(to.ly) / float(whc.y), 0.0f, 1.0f)
123 );
124 }
125
127 {
128 glm::vec3 whc = texture->size();
129 return TextureRegion(
130 uint16_t(to.tx * whc.x),
131 uint16_t(to.ty * whc.y),
132 uint16_t(to.lx * whc.x),
133 uint16_t(to.ly * whc.y)
134 );
135 }
136 };
137}
138
139#endif /* SPRITE_H */
An orthographic camera for 2D.
Definition orthoCam.h:21
glm::vec2 worldToScreen(float x, float y) const
Convert world position to screen coordinate.
Definition orthoCam.h:76
Definition sprite.h:23
TextureRegion fromNormalised(NormalisedTextureRegion to) const
Definition sprite.h:126
TextureRegion * texOffset
Definition sprite.h:51
ScreenBoundingBox getScreenBoundingBox(const OrthoCam &camera)
Get the ScreenBoundingBox of the Sprite.
Definition sprite.h:92
WorldBoundingBox getWorldBoundingBox() const
Get the WorldBoundingBox of the Sprite.
Definition sprite.h:60
NormalisedTextureRegion getNormalisedTextureRegion() const
Definition sprite.h:106
Sprite()=default
Sprite(Transform *tra, TextureRegion *to, Texture *tex, glm::vec4 *colour)
Construct a Sprite.
Definition sprite.h:38
Transform * transform
Definition sprite.h:50
Texture * texture
Definition sprite.h:52
NormalisedTextureRegion toNormalised(TextureRegion to) const
Definition sprite.h:113
glm::vec4 * colour
Definition sprite.h:53
Definition texture.h:17
const glm::ivec3 size() const
Definition texture.h:35
A world space bounding box.
Definition primitive.h:173
A drawable graphic.
Definition id.h:10
A bounding box template.
Definition primitive.h:128
std::array< glm::tvec2< T >, 4 > vertices
Vertices of bounding box.
Definition primitive.h:141
Rectangular region of a texture, normalised by the textures dimensions.
Definition primitive.h:106
float lx
Definition primitive.h:118
float ty
Definition primitive.h:117
float tx
Definition primitive.h:116
float ly
Definition primitive.h:119
Rectangular region of a texture in pixels.
Definition primitive.h:77
uint16_t ly
Definition primitive.h:90
uint16_t tx
Definition primitive.h:87
uint16_t lx
Definition primitive.h:89
uint16_t ty
Definition primitive.h:88
Position, rotation, and scale.
Definition primitive.h:44
double scaleY
Definition primitive.h:62
double theta
Definition primitive.h:60
double y
Definition primitive.h:59
double scaleX
Definition primitive.h:61
double x
Definition primitive.h:58