Euphoria
sprite.cc
Go to the documentation of this file.
1 #include "render/sprite.h"
2 
3 #include <algorithm>
4 
5 #include "base/vec4.h"
6 
7 #include "render/spriterender.h"
8 
9 using namespace eu::convert;
10 
11 namespace eu::render
12 {
13  Sprite::Sprite
14  (
15  std::shared_ptr<Texture2> t,
16  const vec2f& p
17  )
18  : texture(t)
19  , position(p)
20  , rotation(0.0_rad)
21  {
22  }
23 
24 
25  float
27  {
28  return static_cast<float>(texture->height) * scale.y;
29  }
30 
31 
32  float
34  {
35  return static_cast<float>(texture->width) * scale.x;
36  }
37 
38 
39  void
41  {
42  render->draw_sprite
43  (
44  *texture,
46  (
47  position,
48  Scale2f{0, 0},
49  static_cast<float>(texture->width),
50  static_cast<float>(texture->height)
51  ),
52  DrawData{}
56  );
57  }
58 
59 
61  : renderer(render)
62  {
63  }
64 
65 
66  void
67  Layer::add(Sprite* sprite)
68  {
69  texture_to_sprites[sprite->texture].push_back(sprite);
70  }
71 
72 
73  void
75  {
76  SpriteList& sprites = texture_to_sprites[sprite->texture];
77  sprites.erase
78  (
79  std::remove(sprites.begin(), sprites.end(), sprite),
80  sprites.end()
81  );
82  }
83 
84 
85  void
87  {
88  for(auto& list: texture_to_sprites)
89  {
90  for(auto& sp: list.second)
91  {
92  sp->render(renderer);
93  }
94  }
95  }
96 
97 }
static Rectf from_position_anchor_width_and_height(const vec2f &pos, const Scale2f &anchor, float width, float height)
Definition: rect.cc:56
Definition: rgb.h:143
float x
Definition: vec2.h:138
float y
Definition: vec2.h:139
DrawData & set_scale(const Scale2f &s)
Definition: spriterender.cc:35
DrawData & set_rotation(const Angle &r)
Definition: spriterender.cc:27
DrawData & set_tint(const Rgba &t)
Definition: spriterender.cc:43
Layer(SpriteRenderer *render)
Definition: sprite.cc:60
SpriteMap texture_to_sprites
Definition: sprite.h:44
std::vector< Sprite * > SpriteList
Definition: sprite.h:40
void render()
Definition: sprite.cc:86
SpriteRenderer * renderer
Definition: sprite.h:43
void add(Sprite *sprite)
Definition: sprite.cc:67
void remove(Sprite *sprite)
Definition: sprite.cc:74
Scale2f scale
Definition: sprite.h:21
float get_height() const
Definition: sprite.cc:26
void render(SpriteRenderer *render) const
Definition: sprite.cc:40
std::shared_ptr< Texture2 > texture
Definition: sprite.h:18
float get_width() const
Definition: sprite.cc:33
vec2f position
Definition: sprite.h:19
Angle rotation
Definition: sprite.h:20
Definition: vec2.h:33