diff options
Diffstat (limited to 'src/crepe/api/Sprite.h')
-rw-r--r-- | src/crepe/api/Sprite.h | 75 |
1 files changed, 72 insertions, 3 deletions
diff --git a/src/crepe/api/Sprite.h b/src/crepe/api/Sprite.h index 00dcb27..2e8b52a 100644 --- a/src/crepe/api/Sprite.h +++ b/src/crepe/api/Sprite.h @@ -1,6 +1,5 @@ #pragma once -#include <SDL2/SDL_rect.h> #include <cstdint> #include <memory> @@ -11,22 +10,92 @@ namespace crepe { +/** + * \struct Rect + * \brief Represents a rectangle area for rendering. + * + * Everything within the defined rectangle will be rendered. + * The SDLContext will translate this into the library's rectangle structure. + */ +struct Rect { + int w = 0; + int h = 0; + int x = 0; + int y = 0; +}; + +/** + * \struct FlipSettings + * \brief Flip settings for the sprite. + * + * Defines the horizontal and vertical flip settings for a sprite, which the + * SDLContext will translate into the corresponding settings for the library. + */ struct FlipSettings { - bool flip_x = true; - bool flip_y = true; + bool flip_x = false; + bool flip_y = false; }; +//! Forward declaration of the SDLContext facade. +class SDLContext; + +//! Forward declaration of the Animator class. +class Animator; + +//! Forward declaration of the AnimatorSystem class. +class AnimatorSystem; + +/** + * \class Sprite + * \brief Represents a renderable sprite component. + * + * A renderable sprite that can be displayed in the game. It includes a texture, + * color, and flip settings, and is managed in layers with defined sorting orders. + */ class Sprite : public Component { public: + /** + * \brief Constructs a Sprite with specified parameters. + * \param game_id Unique identifier for the game object this sprite belongs to. + * \param image Shared pointer to the texture for this sprite. + * \param color Color tint applied to the sprite. + * \param flip Flip settings for horizontal and vertical orientation. + */ Sprite(game_object_id_t id, std::shared_ptr<Texture> image, const Color & color, const FlipSettings & flip); + + /** + * \brief Destroys the Sprite instance. + */ ~Sprite(); + + + //! Texture used for the sprite std::shared_ptr<Texture> sprite_image; + //! Color tint of the sprite Color color; + //! Flip settings for the sprite FlipSettings flip; + //! Layer sorting level of the sprite uint8_t sorting_in_layer; + //! Order within the sorting layer uint8_t order_in_layer; + +public: + /** + * \brief Gets the maximum number of instances allowed for this sprite. + * \return Maximum instance count as an integer. + */ + virtual int get_instances_max() const { return 10; } + +private: + friend class SDLContext; + friend class Animator; + friend class AnimatorSystem; + + //! Render area of the sprite + Rect sprite_rect; }; } // namespace crepe |