From 5aede928d8c449103867d908d60be1d28d3c0fca Mon Sep 17 00:00:00 2001 From: herbglitch Date: Sun, 25 Jun 2023 22:14:32 -0600 Subject: [PATCH] ARC_FObround added --- include/arc/graphics/obround.h | 2 ++ include/arc/graphics/rectangle.h | 2 ++ include/arc/math/obround.h | 25 +++++++++++++++++++++++++ src/graphics/sdl/obround.c | 5 +++++ src/graphics/sdl/rectangle.c | 5 +++++ src/math/obround.c | 19 +++++++++++++++++++ src/math/vector2.c | 4 ++++ 7 files changed, 62 insertions(+) diff --git a/include/arc/graphics/obround.h b/include/arc/graphics/obround.h index d0f8a5a..6ab1239 100644 --- a/include/arc/graphics/obround.h +++ b/include/arc/graphics/obround.h @@ -12,6 +12,8 @@ extern "C" { void ARC_Obround_Render(ARC_Obround *obround, ARC_Renderer *renderer, ARC_Color *color); +void ARC_FObround_Render(ARC_FObround *obround, ARC_Renderer *renderer, ARC_Color *color); + // void ARC_Rect_RenderFill(ARC_Rect *rect, ARC_Renderer *renderer, ARC_Color *color); #ifdef __cplusplus diff --git a/include/arc/graphics/rectangle.h b/include/arc/graphics/rectangle.h index 1dea87d..329e1e6 100644 --- a/include/arc/graphics/rectangle.h +++ b/include/arc/graphics/rectangle.h @@ -14,6 +14,8 @@ void ARC_Rect_Render(ARC_Rect *rect, ARC_Renderer *renderer, ARC_Color *color); void ARC_Rect_RenderFill(ARC_Rect *rect, ARC_Renderer *renderer, ARC_Color *color); +void ARC_FRect_Render(ARC_FRect *rect, ARC_Renderer *renderer, ARC_Color *color); + #ifdef __cplusplus } #endif diff --git a/include/arc/math/obround.h b/include/arc/math/obround.h index 233417d..f0f5f90 100644 --- a/include/arc/math/obround.h +++ b/include/arc/math/obround.h @@ -14,6 +14,31 @@ typedef struct ARC_Obround { int32_t h; } ARC_Obround; +typedef struct ARC_FObround { + float x; + float y; + float r; + float h; +} ARC_FObround; + +/** + * @brief casts Obround to FObround + * + * @param obround ARC_Obround to be casted + * + * @return ARC_FObround + */ +ARC_FObround ARC_Obround_CastToFObround(ARC_Obround *obround); + +/** + * @brief casts FObround to Obround + * + * @param obround ARC_FObround to be casted + * + * @return ARC_Obround + */ +ARC_Obround ARC_FObround_CastToObround(ARC_FObround *obround); + #ifdef __cplusplus } #endif diff --git a/src/graphics/sdl/obround.c b/src/graphics/sdl/obround.c index 36c0775..403c573 100644 --- a/src/graphics/sdl/obround.c +++ b/src/graphics/sdl/obround.c @@ -43,4 +43,9 @@ void ARC_Obround_Render(ARC_Obround *obround, ARC_Renderer *renderer, ARC_Color } } +void ARC_FObround_Render(ARC_FObround *obround, ARC_Renderer *renderer, ARC_Color *color){ + ARC_Obround casted = ARC_FObround_CastToObround(obround); + ARC_Obround_Render(&casted, renderer, color); +} + #endif // ARC_SDL \ No newline at end of file diff --git a/src/graphics/sdl/rectangle.c b/src/graphics/sdl/rectangle.c index 79d5f32..bc63694 100644 --- a/src/graphics/sdl/rectangle.c +++ b/src/graphics/sdl/rectangle.c @@ -13,4 +13,9 @@ void ARC_Rect_RenderFill(ARC_Rect *rect, ARC_Renderer *renderer, ARC_Color *colo SDL_RenderFillRect((SDL_Renderer *)renderer, (SDL_Rect *) rect); } +void ARC_FRect_Render(ARC_FRect *rect, ARC_Renderer *renderer, ARC_Color *color){ + ARC_Rect casted = ARC_FRect_CastToRect(rect); + ARC_Rect_Render(&casted, renderer, color); +} + #endif // ARC_SDL \ No newline at end of file diff --git a/src/math/obround.c b/src/math/obround.c index e69de29..b8ef45c 100644 --- a/src/math/obround.c +++ b/src/math/obround.c @@ -0,0 +1,19 @@ +#include "arc/math/obround.h" + +ARC_FObround ARC_Obround_CastToFObround(ARC_Obround *obround){ + return (ARC_FObround){ + .x = (float)obround->x, + .y = (float)obround->y, + .r = (float)obround->r, + .h = (float)obround->h + }; +} + +ARC_Obround ARC_FObround_CastToObround(ARC_FObround *obround){ + return (ARC_Obround){ + .x = (int32_t)obround->x, + .y = (int32_t)obround->y, + .r = (int32_t)obround->r, + .h = (int32_t)obround->h + }; +} \ No newline at end of file diff --git a/src/math/vector2.c b/src/math/vector2.c index c0fdabe..a825903 100644 --- a/src/math/vector2.c +++ b/src/math/vector2.c @@ -3,6 +3,10 @@ void ARC_Vector2_Normalize(ARC_Vector2 *vector){ float length = sqrtf((vector->x * vector->x) + (vector->y * vector->y)); + if(length == 0){ + return; + } + vector->x /= length; vector->y /= length; }