Compare commits

...

2 commits

Author SHA1 Message Date
jesse
81ef85e1bf Merge remote-tracking branch 'origin/master' 2025-07-05 03:16:19 -07:00
jesse
9d5d8ba4ea made type Rect and added rect_cut procedures 2025-05-31 16:31:10 -07:00
2 changed files with 57 additions and 1 deletions

View file

@ -1,8 +1,12 @@
#module_parameters( #module_parameters(
UNITS: enum { radians; degrees; turns; } = .turns, UNITS: enum { radians; degrees; turns; } = .turns,
RECT_TYPE: Type = float,
// RECT_METHOD: enum { dimension; absolute; } = absolute, // Note(Jesse): Maybe at a later point we can do this
RUN_TESTS := false RUN_TESTS := false
); );
#assert meta.type_is_scalar(RECT_TYPE);
// @todo(judah): dumb we can't use meta.range_for here. // @todo(judah): dumb we can't use meta.range_for here.
U8_Min, U8_Max :: #run meta.lo_for(u8), #run meta.hi_for(u8); U8_Min, U8_Max :: #run meta.lo_for(u8), #run meta.hi_for(u8);
@ -18,10 +22,11 @@ S64_Min, S64_Max :: #run meta.lo_for(s64), #run meta.hi_for(s64);
F32_Min, F32_Max :: #run meta.lo_for(float32), #run meta.hi_for(float32); F32_Min, F32_Max :: #run meta.lo_for(float32), #run meta.hi_for(float32);
F64_Min, F64_Max :: #run meta.lo_for(float64), #run meta.hi_for(float64); F64_Min, F64_Max :: #run meta.lo_for(float64), #run meta.hi_for(float64);
#load "common.jai";
#load "vec.jai"; #load "vec.jai";
#load "mat.jai"; #load "mat.jai";
#load "ease.jai"; #load "ease.jai";
#load "common.jai"; #load "shape.jai";
#scope_module; #scope_module;

51
math/shape.jai Normal file
View file

@ -0,0 +1,51 @@
Rect :: #type,distinct Vec(4, RECT_TYPE);
make_rect :: (x: RECT_TYPE, y: RECT_TYPE, w: RECT_TYPE, h: RECT_TYPE) -> Rect {
r: Rect = ---;
r.x = x;
r.y = y;
r.width = w;
r.height = h;
return r;
}
cut_left :: (rect: *Rect, want: RECT_TYPE) -> Rect {
amnt := basic.min(want, rect.width);
r := rect.*;
r.width = amnt;
rect.x += amnt;
rect.width -= amnt;
return r;
}
cut_right :: (rect: *Rect, want: RECT_TYPE) -> Rect {
amnt := basic.min(want, rect.width);
r := rect.*;
r.x += rect.width - amnt;
r.width = amnt;
rect.width -= r.width;
return r;
}
cut_top :: (rect: *Rect, want: RECT_TYPE) -> Rect {
amnt := basic.min(rect.height, want);
r := rect.*;
r.height -= amnt;
rect.y += amnt;
rect.height -= amnt;
return r;
}
cut_bottom :: (rect: *Rect, want: RECT_TYPE) -> Rect {
amnt := basic.min(want, rect.height);
r := rect.*;
r.y += r.height - amnt;
r.height = amnt;
rect.height -= amnt;
return r;
}
#scope_file
basic :: #import "Basic";