/** * * @file sprite.h * @author Alexandre Sollier * @date Janvier 2020 * @version 1.0 * @brief Image pouvant être chargé depuis un fichier * **/ #ifndef DISPLAY_SPRITE_H #define DISPLAY_SPRITE_H #include #include #include "../graphics/idrawable.h" #include "../graphics/rgbacolor.h" #include "../graphics/vec2d.h" #include "../transition/itransitionable.h" namespace nsGui { /** * @class Sprite * @brief Permet de charger une image depuis un format créé pour l'occasion, le .si2 */ class Sprite : public nsGraphics::IDrawable, public nsTransition::ITransitionable { public: /** * @brief TransitionIds : Liste de toutes les transitions que cet élément peut exécuter */ enum TransitionIds { TRANSITION_POSITION, /**< Transition pour la Position */ }; /** * @brief Constructeur pour la classe Sprite, charge les données depuis un fichier * @param[in] filename : Chemin d'accès vers le fichier image * @param[in] position : Position du sprite * @fn Sprite(const std::string& filename, const nsGraphics::Vec2D& Position = nsGraphics::Vec2D()); */ Sprite(const std::string& filename, const nsGraphics::Vec2D& position = nsGraphics::Vec2D()); /** * @brief Constructeur pour la classe Sprite, copie les données depuis un vecteur de pixels * @param[in] pixelData : Vecteur contenant des données sur les pixels * @param[in] rowSize : Nombre de pixels par ligne * @param[in] position : Position du sprite * @fn Sprite(const std::vector& pixelData, const uint32_t& rowSize, const nsGraphics::Vec2D& Position = nsGraphics::Vec2D()); */ Sprite(const std::vector& pixelData, const uint32_t& rowSize, const nsGraphics::Vec2D& position = nsGraphics::Vec2D()); virtual void draw(MinGL& window) const override; virtual void getValues(const int &id, std::vector &values) override; virtual void setValues(const int &id, const std::vector &values) override; /** * @brief Récupère le nombre de pixels par ligne * @return Une référence constante vers m_rowSize * @fn const uint32_t& getRowSize() const; */ const uint32_t& getRowSize() const; /** * @brief Récupère le vecteur contenant les pixels de l'image * @return Une référence constante vers m_pixelData * @fn const std::vector& getPixelData() const; */ const std::vector& getPixelData() const; /** * @brief Récupère la Position du sprite * @return Une référence const vers m_position * @fn const nsGraphics::Vec2D& getPosition() const; */ const nsGraphics::Vec2D& getPosition() const; /** * @brief Définit la nouvelle Position du sprite * @param[in] position : Nouvelle Position * @fn void setPosition(const nsGraphics::Vec2D &Position); */ void setPosition(const nsGraphics::Vec2D& position); /** * @brief Calcule la taille du sprite * @return La taille calculée * @fn Vec2D computeSize() const; */ nsGraphics::Vec2D computeSize() const; private: /** * @struct FileBegin * @brief Décrit le début d'un fichier .si2 */ struct FileBegin { uint16_t magic; /**< Le magic number du fichier, doit toujours être "SI" */ uint32_t headmagic; /**< Le magic number de la section en-tête, doit toujours être "HEAD" */ uint16_t fileVersion; /**< La version du format stockée par le fichier */ uint32_t pixelCount; /**< Le nombre de pixels contenus dans la section données */ uint32_t rowSize; /**< Le nombre de pixels par ligne */ uint32_t datamagic; /**< Le magic number de la section données, doit toujours être "DATA" */ } __attribute__((packed)); /** * @brief m_position : Position de ce Sprite */ nsGraphics::Vec2D m_position; /** * @brief m_rowSize : Nombre de pixel par ligne */ uint32_t m_rowSize; /** * @brief m_pixelData : Vecteur contenant tout les pixels composant l'image */ std::vector m_pixelData; }; // class Sprite } // namespace nsGui #endif // DISPLAY_SPRITE_H