From 36c6ff5589086d1ad56b8ced116b566300a56529 Mon Sep 17 00:00:00 2001 From: randy Date: Tue, 9 Jul 2024 18:40:48 +0700 Subject: [PATCH] added range.c --- oogabooga/oogabooga.c | 1 + oogabooga/range.c | 42 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+) create mode 100644 oogabooga/range.c diff --git a/oogabooga/oogabooga.c b/oogabooga/oogabooga.c index 0ecf02d..8700b78 100644 --- a/oogabooga/oogabooga.c +++ b/oogabooga/oogabooga.c @@ -265,6 +265,7 @@ typedef u8 bool; #include "hash.c" #include "path_utils.c" #include "linmath.c" +#include "range.c" #include "hash_table.c" diff --git a/oogabooga/range.c b/oogabooga/range.c new file mode 100644 index 0000000..b20c815 --- /dev/null +++ b/oogabooga/range.c @@ -0,0 +1,42 @@ + +// randy: we might wanna remove the f by default, similar to the Vector2 ? +// I know that we'll have a Range2i at some point, so maybe it's better to be explicit for less confusion? +// I'll leave this decision up to u charlie just delete this whenever u see it + +typedef struct Range1f { + float min; + float max; +} Range1f; +// ... + +typedef struct Range2f { + Vector2 min; + Vector2 max; +} Range2f; + +inline Range2f range2f_make(Vector2 min, Vector2 max) { return (Range2f) { min, max }; } + +Range2f range2f_shift(Range2f r, Vector2 shift) { + r.min = v2_add(r.min, shift); + r.max = v2_add(r.max, shift); + return r; +} + +Range2f range2f_make_bottom_center(Vector2 size) { + Range2f range = {0}; + range.max = size; + range = range2f_shift(range, v2(size.x * -0.5, 0.0)); + return range; +} + +Vector2 range2f_size(Range2f range) { + Vector2 size = {0}; + size = v2_sub(range.min, range.max); + size.x = fabsf(size.x); + size.y = fabsf(size.y); + return size; +} + +bool range2f_contains(Range2f range, Vector2 v) { + return v.x >= range.min.x && v.x <= range.max.x && v.y >= range.min.y && v.y <= range.max.y; +} \ No newline at end of file