diff --git a/include/arc/graphics/sprite.h b/include/arc/graphics/sprite.h index f1ec2ea..96fe23b 100644 --- a/include/arc/graphics/sprite.h +++ b/include/arc/graphics/sprite.h @@ -7,6 +7,7 @@ extern "C" { #include "arc/graphics/renderer.h" #include "arc/graphics/spritesheet.h" +#include "arc/math/point.h" #include "arc/math/rectangle.h" #include "arc/std/array.h" @@ -50,6 +51,17 @@ void ARC_Sprite_Copy(ARC_Sprite **newSprite, ARC_Sprite *oldSprite); */ void ARC_Sprite_Render(ARC_Sprite *sprite, ARC_Renderer *renderer, ARC_Rect *renderBounds); +/** + * @brief renders ARC_Sprite type with rotation + * + * @param sprite ARC_Sprite that will be rendered + * @param renderer ARC_Renderer that is handling rendering + * @param renderBounds area of renderer that ARC_Sprite will be rendered to + * @param angle angle to rotate ARC_Sprite + * @param center point to rotate ARC_Sprite around + */ +void ARC_Sprite_RenderRotated(ARC_Sprite *sprite, ARC_Renderer *renderer, ARC_Rect *renderBounds, ARC_Point *center, double angle); + /** * @brief switches ARC_Sprite's frames to next for animation * diff --git a/src/graphics/sdl/sprite.c b/src/graphics/sdl/sprite.c index 0e40feb..c50f92a 100644 --- a/src/graphics/sdl/sprite.c +++ b/src/graphics/sdl/sprite.c @@ -3,6 +3,7 @@ #include "arc/graphics/sdl/sprite.h" #include "arc/graphics/sdl/spritesheet.h" #include "arc/graphics/sdl/renderer.h" +#include "arc/math/point.h" #include "arc/math/rectangle.h" #include @@ -31,6 +32,10 @@ void ARC_Sprite_Render(ARC_Sprite *sprite, ARC_Renderer *renderer, ARC_Rect *ren SDL_RenderCopy(renderer->renderer, sprite->spritesheet->texture, (SDL_Rect *)sprite->frames->data + *sprite->frameIndex, (SDL_Rect *)renderBounds); } +void ARC_Sprite_RenderRotated(ARC_Sprite *sprite, ARC_Renderer *renderer, ARC_Rect *renderBounds, ARC_Point *center, double angle){ + SDL_RenderCopyEx(renderer->renderer, sprite->spritesheet->texture, (SDL_Rect *)sprite->frames->data + *sprite->frameIndex, (SDL_Rect *)renderBounds, angle, (SDL_Point *)center, SDL_FLIP_NONE); +} + void ARC_Sprite_IterateFrame(ARC_Sprite *sprite){ ++*sprite->frameIndex;