| 1 | //************************************ bs::framework - Copyright 2018 Marko Pintera **************************************// | 
|---|
| 2 | //*********** Licensed under the MIT license. See LICENSE.md for full terms. This notice is not to be removed. ***********// | 
|---|
| 3 | #pragma once | 
|---|
| 4 |  | 
|---|
| 5 | #include "BsPrerequisites.h" | 
|---|
| 6 | #include "2D/BsSprite.h" | 
|---|
| 7 | #include "Math/BsVector2.h" | 
|---|
| 8 | #include "Image/BsColor.h" | 
|---|
| 9 |  | 
|---|
| 10 | namespace bs | 
|---|
| 11 | { | 
|---|
| 12 | /** @addtogroup 2D | 
|---|
| 13 | *  @{ | 
|---|
| 14 | */ | 
|---|
| 15 |  | 
|---|
| 16 | /**	Image sprite description structure used for initializing or updating an image sprite. */ | 
|---|
| 17 | struct IMAGE_SPRITE_DESC | 
|---|
| 18 | { | 
|---|
| 19 | IMAGE_SPRITE_DESC() = default; | 
|---|
| 20 |  | 
|---|
| 21 | UINT32 width = 0; /**< Width of the image in pixels. */ | 
|---|
| 22 | UINT32 height = 0; /**< Height of the image in pixels. */ | 
|---|
| 23 | SpriteAnchor anchor = SA_TopLeft; /**< Determines where in the provided bounds will the sprite be placed. */ | 
|---|
| 24 | Vector2 uvScale = Vector2(1.0f, 1.0f); /**< Scale applied to UV width/height used for rendering the sprite. */ | 
|---|
| 25 | Vector2 uvOffset = Vector2(0.0f, 0.0f); /**< Offset applied to UV coordinates when rendering the sprite. */ | 
|---|
| 26 | bool transparent = true; /**< Should the sprite be rendered with transparency. */ | 
|---|
| 27 |  | 
|---|
| 28 | HSpriteTexture texture; /**< Texture to overlay on the sprite. */ | 
|---|
| 29 | Color color; /**< Color tint to apply to the sprite. */ | 
|---|
| 30 | /** | 
|---|
| 31 | * Time (since application start) at which the sprite texture's 0th frame is played. Used if the sprite texture | 
|---|
| 32 | * has sprite sheet animation defined. | 
|---|
| 33 | */ | 
|---|
| 34 | float animationStartTime = 0.0f; | 
|---|
| 35 |  | 
|---|
| 36 | /** | 
|---|
| 37 | * Borders (in texels) that allow you to control how is the texture scaled. If borders are 0 the texture will be | 
|---|
| 38 | * scaled uniformly. If they are not null only the area inside the borders will be scaled and the outside are will | 
|---|
| 39 | * remain the original size as in the texture. This allows you to implement "Scale9Grid" functionality. | 
|---|
| 40 | */ | 
|---|
| 41 | UINT32 borderLeft = 0; | 
|---|
| 42 | UINT32 borderRight = 0; | 
|---|
| 43 | UINT32 borderTop = 0; | 
|---|
| 44 | UINT32 borderBottom = 0; | 
|---|
| 45 | }; | 
|---|
| 46 |  | 
|---|
| 47 | /**	A sprite consisting of a single image represented by a sprite texture. */ | 
|---|
| 48 | class BS_EXPORT ImageSprite : public Sprite | 
|---|
| 49 | { | 
|---|
| 50 | public: | 
|---|
| 51 | ImageSprite() = default; | 
|---|
| 52 | ~ImageSprite(); | 
|---|
| 53 |  | 
|---|
| 54 | /** | 
|---|
| 55 | * Recreates internal sprite data according the specified description structure. | 
|---|
| 56 | * | 
|---|
| 57 | * @param[in]	desc	Describes the geometry and material of the sprite. | 
|---|
| 58 | * @param[in]	groupId	Group identifier that forces different materials to be used for different groups (for | 
|---|
| 59 | *						example you don't want the sprites to share the same material if they use different world | 
|---|
| 60 | *						transform matrices). | 
|---|
| 61 | */ | 
|---|
| 62 | void update(const IMAGE_SPRITE_DESC& desc, UINT64 groupId); | 
|---|
| 63 |  | 
|---|
| 64 | /** | 
|---|
| 65 | * Calculates the required UV scale in order for a texture of size @p sourceSize to be placed on the surface | 
|---|
| 66 | * of @p destSize size, while respecting the chosen scale mode. | 
|---|
| 67 | */ | 
|---|
| 68 | static Vector2 getTextureUVScale(Vector2I sourceSize, Vector2I destSize, TextureScaleMode scaleMode); | 
|---|
| 69 |  | 
|---|
| 70 | private: | 
|---|
| 71 | /**	Clears internal geometry buffers. */ | 
|---|
| 72 | void clearMesh(); | 
|---|
| 73 | }; | 
|---|
| 74 |  | 
|---|
| 75 | /** @} */ | 
|---|
| 76 | } | 
|---|