-#local hash :: package core.hash
+
+use core {hash, math}
#tag conv.Custom_Format.{format_vector2i}
#tag conv.Custom_Parse.{parse_vector2i}
Vector2 :: struct {
x, y: f32;
- mag :: macro (v: Vector2) => math.sqrt(v.x * v.x + v.y * v.y);
+ mag :: (v: Vector2) => math.sqrt(v.x * v.x + v.y * v.y);
- square_mag :: macro (v: Vector2) => v.x * v.x + v.y * v.y;
+ square_mag :: (v: Vector2) => v.x * v.x + v.y * v.y;
- norm :: macro (v: Vector2) -> Vector2 {
+ norm :: (v: Vector2) -> Vector2 {
l := math.sqrt(v.x * v.x + v.y * v.y);
return .{ v.x / l, v.y / l };
}
Vector3 :: struct {
x, y, z: f32;
- mag :: macro (v: Vector3) => math.sqrt(v.x * v.x + v.y * v.y + v.z * v.z);
+ mag :: (v: Vector3) => math.sqrt(v.x * v.x + v.y * v.y + v.z * v.z);
- neg :: macro (v: Vector3) => Vector3.{ -v.x, -v.y, -v.z };
+ neg :: (v: Vector3) => Vector3.{ -v.x, -v.y, -v.z };
- dot :: macro (v1, v2: Vector3) -> f32 {
+ dot :: (v1, v2: Vector3) -> f32 {
return v1.x * v2.x + v1.y * v2.y + v1.z * v2.z;
}
- norm :: macro (v: Vector3) -> Vector3 {
+ norm :: (v: Vector3) -> Vector3 {
l := math.sqrt(v.x * v.x + v.y * v.y + v.z * v.z);
return .{ v.x / l, v.y / l, v.z / l };
}
- cross :: macro (v1, v2: Vector3) -> Vector3 {
+ cross :: (v1, v2: Vector3) -> Vector3 {
return .{
v1.y * v2.z - v1.z * v2.y,
v1.z * v2.x - v1.x * v2.z,
};
}
- clamp :: macro (v: Vector3, min: Vector3, max: Vector3) -> Vector3 {
+ clamp :: (v: Vector3, min: Vector3, max: Vector3) -> Vector3 {
return .{
math.clamp(v.x, min.x, max.x),
math.clamp(v.y, min.y, max.y),
}
}
-#operator + macro (v1, v2: Vector2i) => (typeof v1).{ v1.x + v2.x, v1.y + v2.y };
-#operator - macro (v1, v2: Vector2i) => (typeof v1).{ v1.x - v2.x, v1.y - v2.y };
-#operator * macro (v: Vector2i, s: i32) => (typeof v ).{ v.x * s, v.y * s };
-#operator * macro (v1, v2: Vector2i) => (typeof v1).{ v1.x * v2.x, v1.y * v2.y };
-#operator == macro (v1, v2: Vector2i) => v1.x == v2.x && v1.y == v2.y;
-#match hash.to_u32 macro (v: Vector2i) => 13 * v.x + 17 * v.y;
-
-#operator + macro (v1, v2: Vector2) => (typeof v1).{ v1.x + v2.x, v1.y + v2.y };
-#operator - macro (v1, v2: Vector2) => (typeof v1).{ v1.x - v2.x, v1.y - v2.y };
-#operator * macro (v: Vector2, s: f32) => (typeof v ).{ v.x * s, v.y * s };
-#operator * macro (v1, v2: Vector2) => (typeof v1).{ v1.x * v2.x, v1.y * v2.y };
-#operator == macro (v1, v2: Vector2) => v1.x == v2.x && v1.y == v2.y;
-
-#operator + macro (v1, v2: Vector3) => Vector3.{ v1.x + v2.x, v1.y + v2.y, v1.z + v2.z };
-#operator - macro (v1, v2: Vector3) => Vector3.{ v1.x - v2.x, v1.y - v2.y, v1.z - v2.z };
-#operator * macro (v: Vector3, s: f32) => Vector3.{ v.x * s, v.y * s, v.z * s };
-#operator * macro (v1, v2: Vector3) => (typeof v1).{ v1.x * v2.x, v1.y * v2.y, v1.z * v3.z };
-#operator == macro (v1, v2: Vector3) => v1.x == v2.x && v1.y == v2.y && v1.z == v2.z;
-
-#operator + macro (v1, v2: Vector3i) => Vector3i.{ v1.x + v2.x, v1.y + v2.y, v1.z + v2.z };
-#operator - macro (v1, v2: Vector3i) => Vector3i.{ v1.x - v2.x, v1.y - v2.y, v1.z - v2.z };
-#operator * macro (v: Vector3i, s: i32) => Vector3i.{ v.x * s, v.y * s, v.z * s };
-#operator * macro (v1, v2: Vector3i) => (typeof v1).{ v1.x * v2.x, v1.y * v2.y, v1.z * v3.z };
-#operator == macro (v1, v2: Vector3i) => v1.x == v2.x && v1.y == v2.y && v1.z == v2.z;
+#operator + (v1, v2: Vector2i) => Vector2i.{ v1.x + v2.x, v1.y + v2.y };
+#operator - (v1, v2: Vector2i) => Vector2i.{ v1.x - v2.x, v1.y - v2.y };
+#operator * (v: Vector2i, s: i32) => Vector2i.{ v.x * s, v.y * s };
+#operator * (v1, v2: Vector2i) => Vector2i.{ v1.x * v2.x, v1.y * v2.y };
+#operator == (v1, v2: Vector2i) => v1.x == v2.x && v1.y == v2.y;
+#match hash.to_u32 (v: Vector2i) => 13 * v.x + 17 * v.y;
+
+#operator + (v1, v2: Vector2) => (typeof v1).{ v1.x + v2.x, v1.y + v2.y };
+#operator - (v1, v2: Vector2) => (typeof v1).{ v1.x - v2.x, v1.y - v2.y };
+#operator * (v: Vector2, s: f32) => (typeof v ).{ v.x * s, v.y * s };
+#operator * (v1, v2: Vector2) => (typeof v1).{ v1.x * v2.x, v1.y * v2.y };
+#operator == (v1, v2: Vector2) => v1.x == v2.x && v1.y == v2.y;
+
+#operator + (v1, v2: Vector3) => Vector3.{ v1.x + v2.x, v1.y + v2.y, v1.z + v2.z };
+#operator - (v1, v2: Vector3) => Vector3.{ v1.x - v2.x, v1.y - v2.y, v1.z - v2.z };
+#operator * (v: Vector3, s: f32) => Vector3.{ v.x * s, v.y * s, v.z * s };
+#operator * (v1, v2: Vector3) => (typeof v1).{ v1.x * v2.x, v1.y * v2.y, v1.z * v2.z };
+#operator == (v1, v2: Vector3) => v1.x == v2.x && v1.y == v2.y && v1.z == v2.z;
+
+#operator + (v1, v2: Vector3i) => Vector3i.{ v1.x + v2.x, v1.y + v2.y, v1.z + v2.z };
+#operator - (v1, v2: Vector3i) => Vector3i.{ v1.x - v2.x, v1.y - v2.y, v1.z - v2.z };
+#operator * (v: Vector3i, s: i32) => Vector3i.{ v.x * s, v.y * s, v.z * s };
+#operator * (v1, v2: Vector3i) => (typeof v1).{ v1.x * v2.x, v1.y * v2.y, v1.z * v2.z };
+#operator == (v1, v2: Vector3i) => v1.x == v2.x && v1.y == v2.y && v1.z == v2.z;
#local {
conv :: package core.conv
&& r.y <= p.y && r.y + r.h >= p.y;
}
- center :: macro (use r: Rect) => Vector2.{ r.x+r.w/2, r.y+r.h/2 };
+ center :: (use r: Rect) => Vector2.{ r.x+r.w/2, r.y+r.h/2 };
- top_left :: macro (use r: Rect) => Vector2.{ r.x, r.y };
- top_right :: macro (use r: Rect) => Vector2.{ r.x+r.w, r.y };
- bottom_left :: macro (use r: Rect) => Vector2.{ r.x, r.y+r.h };
- bottom_right :: macro (use r: Rect) => Vector2.{ r.x+r.w, r.y+r.h };
+ top_left :: (use r: Rect) => Vector2.{ r.x, r.y };
+ top_right :: (use r: Rect) => Vector2.{ r.x+r.w, r.y };
+ bottom_left :: (use r: Rect) => Vector2.{ r.x, r.y+r.h };
+ bottom_right :: (use r: Rect) => Vector2.{ r.x+r.w, r.y+r.h };
}