PokeMe64/include/core/Sprite.h
Philippe Symons 8e556391f3
Feature/show cartridge icons in initial transferpak scene (#4)
We now show a cartridge icon in the initial transferpak scene, which switches to the cartridge that was detected.
2024-08-23 12:32:12 +02:00

86 lines
2.8 KiB
C
Executable File

#ifndef _SPRITE_H
#define _SPRITE_H
#include "core/common.h"
typedef struct sprite_s sprite_t;
/**
* The render mode of the sprite. We have NORMAL and NINESLICE
* NINESLICE is used to render and stretch a 9sliced image similar to 9slice images
* are/were used on the web. (for things like rounded corners or otherwise custom boxes)
*/
enum class SpriteRenderMode
{
NORMAL = 0,
NINESLICE
};
typedef struct SpriteRenderSettings
{
/*
* Indicates the render mode of the sprite
*
* If you use NINESLICE, you MUST specify a 9 slice rectangle in the srcRect field.
* Please refer to the comments there for more info.
*/
SpriteRenderMode renderMode;
/**
* Either a source region within the sprite that needs to be rendered if the SpriteRenderMode is set to NORMAL
* or a 9slice rectangle if the SpriteRenderMode is set to NINESLICE
*
* A 9slice rectangle is special because it is usually used to specify a box-like image with
* special corners/edges using an extremely small image.
*
* One typical use case for this is when you want to draw rounded corners.
*
* To specify a 9slice image, the x, y, width and height properties of srcRect have a different meaning:
* x -> the width of each corner on the left size of the image
* y -> the height of each corner on the left size of the image
* width -> the width of each corner on the right size of the image
* height -> the height of each corner on the right size of the image
*
* Our RDPQGraphics class will use these values to stretch a 9slice image according to the
* destination rectangle specified in RDPQGraphics::drawSprite().
* The corners will never get stretched, but the edges and middle portion will
*
* Note: because of the properties of a 9slice image, the image doesn't really need to be any bigger
* than the widths and heights of all corners combined + 1 pixel in each direction.
*
* For example: if my corners are all 6x6 pixels, then it suffices to create an image that is 13x13 pixels
* to render the box element.
*/
Rectangle srcRect;
/**
* @brief Rotation angle in radians
*/
float rotationAngle;
struct {
/**
* WARNING: needs to be a multiple of 8
*/
uint8_t numColors;
/**
* @brief If set, this RGBA16 array will replace the original color palette for the specified sprite
*/
const uint16_t* colorsRGBA16;
} customPalette;
} SpriteRenderSettings;
typedef struct SurfaceRenderSettings
{
/**
* Source region within the sprite that needs to be rendered (partial rendering)
*/
Rectangle srcRect;
/**
* @brief Rotation angle in radians
*/
float rotationAngle;
} SurfaceRenderSettings;
#endif