add utilities

This commit is contained in:
Rokas Puzonas 2025-12-07 21:33:42 +02:00
parent 8679fa5aa2
commit ab840a903c
5 changed files with 120 additions and 0 deletions

38
src/generic_vector.h Normal file
View File

@ -0,0 +1,38 @@
#pragma once
#include "main.h"
#define DEFINE_VECTOR_STRUCT(vector_name, item_t) \
struct vector_name { \
item_t *items; \
size_t len; \
size_t capacity; \
};
#define DEFINE_VECTOR_ENSURE_METHOD_CAPACITY(func_name, list_t, item_t) \
void func_name(list_t *list, size_t expected_capacity) \
{ \
if (list->capacity < expected_capacity) { \
size_t larger_capacity = MAX(MAX(list->capacity*2, expected_capacity), 4); \
item_t *larger_items = realloc(list->items, larger_capacity * sizeof(item_t)); \
if (larger_items == NULL) { \
PANIC_OOM(); \
} \
list->items = larger_items; \
list->capacity = larger_capacity; \
} \
}
#define DEFINE_VECTOR_METHOD_FREE(func_name, list_t) \
void func_name(list_t *list) \
{ \
free(list->items); \
list->len = 0; \
list->capacity = 0; \
}
#define DEFINE_VECTOR_METHOD_CLEAR_RETAINING_CAPACITY(func_name, list_t) \
void func_name(list_t *list) \
{ \
list->len = 0; \
}

View File

@ -36,3 +36,4 @@ extern struct Resources g_resources;
Color rgb(uint8_t r, uint8_t g, uint8_t b);
Color hex(const char *str);
int signf(float value);

57
src/rect.c Normal file
View File

@ -0,0 +1,57 @@
#include "rect.h"
float rect_get_left(Rectangle rect)
{
return rect.x;
}
float rect_get_right(Rectangle rect)
{
return rect.x + rect.width;
}
float rect_get_top(Rectangle rect)
{
return rect.y;
}
float rect_get_bottom(Rectangle rect)
{
return rect.y + rect.height;
}
Rectangle rect_add_position(Rectangle rect, Vector2 pos)
{
rect.x += pos.x;
rect.y += pos.y;
return rect;
}
Vector2 rect_get_center(Rectangle rect)
{
return (Vector2){
.x = rect.x + rect.width / 2,
.y = rect.y + rect.height / 2,
};
}
bool rect_is_overlap(Rectangle rect1, Rectangle rect2)
{
return CheckCollisionRecs(rect1, rect2);
}
bool rect_is_inside_rect(Rectangle outer_rect, Rectangle inner_rect)
{
return rect_get_left(outer_rect) <= rect_get_left(inner_rect) &&
rect_get_right(outer_rect) >= rect_get_right(inner_rect) &&
rect_get_top(outer_rect) <= rect_get_top(inner_rect) &&
rect_get_bottom(outer_rect) >= rect_get_bottom(inner_rect);
}
bool rect_is_inside_point(Rectangle outer_rect, Vector2 inner_point)
{
bool is_x_inside = rect_get_left(outer_rect) <= inner_point.x && inner_point.x <= rect_get_right(outer_rect);
bool is_y_inside = rect_get_top(outer_rect) <= inner_point.y && inner_point.y <= rect_get_bottom(outer_rect);
return is_x_inside && is_y_inside;
}

13
src/rect.h Normal file
View File

@ -0,0 +1,13 @@
#pragma once
#include "main.h"
float rect_get_left(Rectangle rect);
float rect_get_right(Rectangle rect);
float rect_get_top(Rectangle rect);
float rect_get_bottom(Rectangle rect);
Rectangle rect_add_position(Rectangle rect, Vector2 pos);
Vector2 rect_get_center(Rectangle rect);
bool rect_is_inside_point(Rectangle outer_rect, Vector2 inner_point);
bool rect_is_inside_rect(Rectangle outer_rect, Rectangle inner_rect);
bool rect_is_overlap(Rectangle rect1, Rectangle rect2);

View File

@ -37,3 +37,14 @@ Color hex(const char *str)
uint8_t b = parse_hex_byte(&str[5]);
return rgb(r, g, b);
}
int signf(float value)
{
if (value > 0) {
return 1;
} else if (value < 0) {
return -1;
} else {
return 0;
}
}