diff options
Diffstat (limited to 'src/crepe/api/Sprite.h')
| -rw-r--r-- | src/crepe/api/Sprite.h | 96 | 
1 files changed, 58 insertions, 38 deletions
| diff --git a/src/crepe/api/Sprite.h b/src/crepe/api/Sprite.h index a0e90a0..ea8104c 100644 --- a/src/crepe/api/Sprite.h +++ b/src/crepe/api/Sprite.h @@ -1,11 +1,10 @@  #pragma once -#include <cstdint> -  #include "../Component.h"  #include "Color.h"  #include "Texture.h" +#include "types.h"  namespace crepe { @@ -20,60 +19,81 @@ class AnimatorSystem;   * flip settings, and is managed in layers with defined sorting orders.   */  class Sprite : public Component { -  public: +	//! settings to flip the image  	struct FlipSettings { +		//! horizantal flip  		bool flip_x = false; +		//! vertical flip  		bool flip_y = false;  	}; +	//! Sprite data that does not have to be set in the constructor +	struct Data { +		/** +		 * \color tint of the sprite  +		 * +		 * the default value is white because of the color multiplier. +		 * this means that the orginal image will be shown. if color is BLACK for example +		 * then it turns the image black because of the Color channels being 0. +		 */ +		Color color = Color::WHITE; + +		//! Flip settings for the sprite +		FlipSettings flip; + +		//! Layer sorting level of the sprite +		const int sorting_in_layer = 0; + +		//! Order within the sorting layer +		const int order_in_layer = 0; + +		/** +	 	* \size width and height of the sprite in game units +	 	* +	 	* - if height is filled in and not width it will multiply width by aspect_ratio. +	 	* - if width is filled in and not height it will multiply height by aspect_ratio. +	 	* - if neither is filled it will not show sprite because size will be zero +	 	* - if both are filled will it use the width and height without making sure the aspect_ratio +	 	* is correct +	 	*/ +		vec2 size; + +		//! independent sprite angle. rotating clockwise direction in degrees +		float angle_offset = 0; + +		//! independent sprite scale multiplier +		float scale_offset = 1; + +		//! independent sprite offset position +		vec2 position_offset; +	}; +  public: -	// TODO: Loek comment in github #27 will be looked another time -	// about shared_ptr Texture  	/**  	 * \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. -	 * \param order_layer decides the sorting in layer of the sprite. -	 * \param sort_layer decides the order in layer of the sprite. -	 * \param height the height of the image in game units -	 */ -	Sprite(game_object_id_t id, Texture & image, const Color & color, -		   const FlipSettings & flip, int sort_layer, int order_layer, int height); - -	/** -	 * \brief Destroys the Sprite instance. +	 * \param texture asset of the image +	 * \param ctx all the sprite data  	 */ +	Sprite(game_object_id_t id, Texture & texture, const Data & data);  	~Sprite();  	//! Texture used for the sprite -	const Texture sprite_image; +	const Texture texture; -	//! Color tint of the sprite -	Color color; - -	//! Flip settings for the sprite -	FlipSettings flip; - -	//! Layer sorting level of the sprite -	const int sorting_in_layer; -	//! Order within the sorting layer -	const int order_in_layer; - -	//! height in world units -	const int height; +	Data data; +private:  	/** -	 * \aspect_ratio ratio of the img so that scaling will not become weird -	 * -	 * cannot be const because if Animator component is addded then ratio becomes scuffed and -	 * does it need to be calculated again in the Animator -	 */ -	double aspect_ratio; +	* \aspect_ratio ratio of the img +	*  +	*  - This will multiply one of \c size variable if it is 0. +	*  - Will be adjusted if \c Animator component is added to an GameObject +	*  that is why this value cannot be const.  +	*/ +	float aspect_ratio; -private:  	//! Reads the mask of sprite  	friend class SDLContext; |