rotating sprite

This commit is contained in:
herbglitch 2023-01-03 00:21:29 -07:00
parent 8d5190e405
commit 47070363ff
2 changed files with 17 additions and 0 deletions

View file

@ -7,6 +7,7 @@ extern "C" {
#include "arc/graphics/renderer.h" #include "arc/graphics/renderer.h"
#include "arc/graphics/spritesheet.h" #include "arc/graphics/spritesheet.h"
#include "arc/math/point.h"
#include "arc/math/rectangle.h" #include "arc/math/rectangle.h"
#include "arc/std/array.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); 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 * @brief switches ARC_Sprite's frames to next for animation
* *

View file

@ -3,6 +3,7 @@
#include "arc/graphics/sdl/sprite.h" #include "arc/graphics/sdl/sprite.h"
#include "arc/graphics/sdl/spritesheet.h" #include "arc/graphics/sdl/spritesheet.h"
#include "arc/graphics/sdl/renderer.h" #include "arc/graphics/sdl/renderer.h"
#include "arc/math/point.h"
#include "arc/math/rectangle.h" #include "arc/math/rectangle.h"
#include <stdlib.h> #include <stdlib.h>
@ -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); 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){ void ARC_Sprite_IterateFrame(ARC_Sprite *sprite){
++*sprite->frameIndex; ++*sprite->frameIndex;