sfml_impl 0.1.0
Vendor SFML 3.0.2 : IGraphic2Module / IAudioModule
Loading...
Searching...
No Matches
SfmlSprite.hpp
Go to the documentation of this file.
1
11#ifndef SFMLSPRITE_HPP_
12#define SFMLSPRITE_HPP_
13
14//Sfml
15#include <SFML/Graphics.hpp>
16
17//Interface
18#include "ISprite.hpp"
19
20//encapsulation
21#include "SfmlTexture.hpp"
22
27class SfmlSprite : public graphic::ISprite {
28
29 public:
30 SfmlSprite(SfmlTexture &texture) : _texture(texture), _sprite(texture.handle()) {
31 }
32
33 ~SfmlSprite() override = default;
34
35 bool isReady() const override {
36 return _texture.isReady();
37 }
38
39 Rect<float> getBounds() const override {
40 sf::FloatRect rect = _sprite.getGlobalBounds();
41 return {rect.position.x, rect.position.y, rect.size.x, rect.size.y};
42 }
43
44 void setCrop(Rect<float> rect) override {
45 _sprite.setTextureRect(sf::IntRect{
46 sf::Vector2i{static_cast<int32_t>(rect.x), static_cast<int32_t>(rect.y)},
47 sf::Vector2i{static_cast<int32_t>(rect.w), static_cast<int32_t>(rect.h)}});
48 }
49
50 Vector2f getPosition() const override {
51 sf::Vector2f pos = _sprite.getPosition();
52 return {static_cast<double>(pos.x), static_cast<double>(pos.y)};
53 }
54 void setPosition(Vector2f position) override {
55 _sprite.setPosition({static_cast<float>(position.x), static_cast<float>(position.y)});
56 }
57
58 float getRotation() const override {
59 return _sprite.getRotation().asDegrees();
60 }
61
62 void setRotation(float angle, bool isRad = false) override {
63 if (isRad)
64 _sprite.setRotation(sf::radians(angle));
65 else
66 _sprite.setRotation(sf::degrees(angle));
67 }
68
69 Vector2f getSize() const override {
70 sf::Vector2f scale = _sprite.getScale();
71 sf::Vector2f size = _sprite.getLocalBounds().size;
72 return {static_cast<double>(size.x * scale.x), static_cast<double>(size.y * scale.y)};
73 }
74
75 void setSize(Vector2f size) override {
76 sf::Vector2f bounds = _sprite.getLocalBounds().size;
77 if (bounds.x == 0 || bounds.y == 0) return;
78 _sprite.setScale({
79 static_cast<float>(size.x / bounds.x),
80 static_cast<float>(size.y / bounds.y)
81 });
82 }
83
84 friend class SfmlWindow;
85
86 private:
87 SfmlTexture &_texture;
88 sf::Sprite _sprite;
89};
90
93#endif /* !SFMLSPRITE_HPP_ */
Sfml Sprite class - references a SfmlTexture, does not own it. Deleting the sprite never touches the ...
Definition SfmlSprite.hpp:27
void setPosition(Vector2f position) override
Definition SfmlSprite.hpp:54
Rect< float > getBounds() const override
Definition SfmlSprite.hpp:39
~SfmlSprite() override=default
SfmlSprite(SfmlTexture &texture)
Definition SfmlSprite.hpp:30
bool isReady() const override
Definition SfmlSprite.hpp:35
Vector2f getPosition() const override
Definition SfmlSprite.hpp:50
float getRotation() const override
Definition SfmlSprite.hpp:58
void setRotation(float angle, bool isRad=false) override
Definition SfmlSprite.hpp:62
void setSize(Vector2f size) override
Definition SfmlSprite.hpp:75
Vector2f getSize() const override
Definition SfmlSprite.hpp:69
void setCrop(Rect< float > rect) override
Definition SfmlSprite.hpp:44
Sfml Texture class - owns the loaded texture. SfmlSprite only references it (sf::Sprite itself alread...
Definition SfmlTexture.hpp:28
bool isReady() const override
Definition SfmlTexture.hpp:41
Sfml Window class - implements IWindow2 only, sfml has no 3D.
Definition SfmlWindow.hpp:46