| Line | Branch | Exec | Source |
|---|---|---|---|
| 1 | /* | ||
| 2 | ** EPITECH PROJECT, 2024 | ||
| 3 | ** zappy | ||
| 4 | ** File description: | ||
| 5 | ** sprite | ||
| 6 | */ | ||
| 7 | |||
| 8 | #ifndef SPRITE_HPP_ | ||
| 9 | #define SPRITE_HPP_ | ||
| 10 | |||
| 11 | #include <SFML/Graphics.hpp> | ||
| 12 | #include <iostream> | ||
| 13 | |||
| 14 | |||
| 15 | class Sprite { | ||
| 16 | public: | ||
| 17 | ✗ | Sprite(const std::string &path, int frameCount = 1, float frameTime = 0.1f) : _frame(0), _frameCount(frameCount), _frameTime(frameTime) | |
| 18 | { | ||
| 19 | _path = path; | ||
| 20 | ✗ | if (!_texture.loadFromFile(path)) | |
| 21 | ✗ | throw std::runtime_error("Cannot load texture"); | |
| 22 | ✗ | _sprite.setTexture(_texture); | |
| 23 | ✗ | _frameSize = sf::Vector2u(_texture.getSize().x / _frameCount, _texture.getSize().y); | |
| 24 | ✗ | _sprite.setOrigin(_frameSize.x / 2, _frameSize.y / 2); | |
| 25 | ✗ | _sprite.setTextureRect(sf::IntRect(0, 0, _frameSize.x, _frameSize.y)); | |
| 26 | ✗ | } | |
| 27 | ✗ | ~Sprite() {}; | |
| 28 | |||
| 29 | ✗ | void setPosition(sf::Vector2f pos) { _sprite.setPosition(pos); } | |
| 30 | ✗ | sf::Vector2f getPosition() { return _sprite.getPosition(); } | |
| 31 | void setSize(sf::Vector2f size) { | ||
| 32 | _sprite.setScale(size); | ||
| 33 | } | ||
| 34 | ✗ | void draw(sf::RenderWindow &window) { window.draw(_sprite); } | |
| 35 | int update(float fElapsedTime); | ||
| 36 | ✗ | void disableLooping() { _looping = false; } | |
| 37 | ✗ | void setFrame(int frame) { | |
| 38 | ✗ | if (frame >= _frameCount) | |
| 39 | ✗ | _frame = 0; | |
| 40 | else | ||
| 41 | ✗ | _frame = frame; | |
| 42 | ✗ | _sprite.setTextureRect(sf::IntRect(_frame * _frameSize.x, 0, _frameSize.x, _frameSize.y)); | |
| 43 | ✗ | } | |
| 44 | bool mouseOver(sf::RenderWindow &window) { | ||
| 45 | sf::Vector2i mousePos = sf::Mouse::getPosition(window); | ||
| 46 | sf::Vector2f worldPos = window.mapPixelToCoords(mousePos); | ||
| 47 | sf::FloatRect bounds = _sprite.getGlobalBounds(); | ||
| 48 | return bounds.contains(worldPos); | ||
| 49 | } | ||
| 50 | void resetOrigin() { | ||
| 51 | ✗ | _sprite.setOrigin(0, 0); | |
| 52 | ✗ | } | |
| 53 | void setScale(float scale) { | ||
| 54 | ✗ | _sprite.setScale(scale, scale); | |
| 55 | ✗ | } | |
| 56 | void setColor(sf::Color color) { | ||
| 57 | ✗ | _sprite.setColor(color); | |
| 58 | ✗ | } | |
| 59 | void setRotation(float angle) { | ||
| 60 | ✗ | _sprite.setRotation(angle); | |
| 61 | ✗ | } | |
| 62 | bool isFinished() { | ||
| 63 | ✗ | if (_frame == _frameCount - 1) | |
| 64 | return true; | ||
| 65 | return false; | ||
| 66 | } | ||
| 67 | |||
| 68 | sf::Sprite _sprite; | ||
| 69 | private: | ||
| 70 | sf::Texture _texture; | ||
| 71 | sf::Vector2u _frameSize; | ||
| 72 | bool _looping = true; | ||
| 73 | |||
| 74 | int _frame = 0; | ||
| 75 | int _frameCount = 1; | ||
| 76 | float _frameTime = 0.1f; | ||
| 77 | float _time = 0; | ||
| 78 | std::string _path = ""; | ||
| 79 | }; | ||
| 80 | |||
| 81 | #endif /* !SPRITE_HPP_ */ | ||
| 82 |