FloatMin :: proc(a: float, b: float): float {
    if (a > b) return b;
    return a;
}

FloatMax :: proc(a: float, b: float): float {
    if (a > b) return a;
    return a;
}

FloatClamp :: proc(val: float, min: float, max: float): float {
    if (val > max) return max;
    if (val < min) return min;
    return val;
}

IntMin :: proc(a: int, b: int): int {
    if (a > b) return b;
    return a;
}

IntMax :: proc(a: int, b: int): int {
    if (a > b) return a;
    return a;
}

IntClamp :: proc(val: int, min: int, max: int): int {
    if (val > max) return max;
    if (val < min) return min;
    return val;
}

Rect2 :: struct {
    min: Vector2;
    max: Vector2;
}

CutLeft :: proc(r: *Rect2, value: float): Rect2 {
    minx := r.min.x;
    r.min.x = FloatMin(r.max.x, r.min.x + value);
    return :Rect2{
        {    minx, r.min.y},
        {r.min.x, r.max.y},
    };
}

CutRight :: proc(r: *Rect2, value: float): Rect2 {
    maxx := r.max.x;
    r.max.x = FloatMax(r.max.x - value, r.min.x);
    return :Rect2{
        {r.max.x, r.min.y},
        {    maxx, r.max.y},
    };
}

CutBottom :: proc(r: *Rect2, value: float): Rect2 { // Y is down
    maxy := r.max.y;
    r.max.y = FloatMax(r.min.y, r.max.y - value);
    return :Rect2{
        {r.min.x, r.max.y},
        {r.max.x,     maxy},
    };
}

CutTop :: proc(r: *Rect2, value: float): Rect2 { // Y is down
    miny := r.min.y;
    r.min.y = FloatMin(r.min.y + value, r.max.y);
    return :Rect2{
        {r.min.x,     miny},
        {r.max.x, r.min.y},
    };
}

Shrink :: proc(r: Rect2, value: float): Rect2 {
    r.min.x += value;
    r.max.x -= value;
    r.min.y += value;
    r.max.y -= value;
    return r;
}

RectFromSize :: proc(pos: Vector2, size: Vector2): Rect2 {
    result: Rect2 = {pos, Vector2Add(pos, size)};
    return result;
}

GetRectSize :: proc(rect: Rect2): Vector2 {
    result: Vector2 = {rect.max.x - rect.min.x, rect.max.y - rect.min.y};
    return result;
}

RectToRectangle :: proc(rect: Rect2): Rectangle {
    size := GetRectSize(rect);
    result: Rectangle = {rect.min.x, rect.min.y, size.x, size.y};
    return result;
}