55 lines
1.2 KiB
Zig
55 lines
1.2 KiB
Zig
pub fn Point(comptime T: type) type {
|
|
return struct {
|
|
const Self = @This();
|
|
|
|
x: T,
|
|
y: T,
|
|
|
|
pub fn eql(self: Self, other: Self) bool {
|
|
return self.x == other.x and self.y == other.y;
|
|
}
|
|
|
|
pub fn neg(self: Self) Self {
|
|
return Self{
|
|
.x = -self.x,
|
|
.y = -self.y,
|
|
};
|
|
}
|
|
|
|
pub fn zero() Self {
|
|
return Self{ .x = 0, .y = 0 };
|
|
}
|
|
|
|
pub fn add(self: Self, other: Self) Self {
|
|
return Self{
|
|
.x = self.x + other.x,
|
|
.y = self.y + other.y,
|
|
};
|
|
}
|
|
|
|
pub fn sub(self: Self, other: Self) Self {
|
|
return Self{
|
|
.x = self.x - other.x,
|
|
.y = self.y - other.y,
|
|
};
|
|
}
|
|
|
|
pub fn to_i32(self: Self) Point(i32) {
|
|
return Point(i32){
|
|
.x = @intCast(self.x),
|
|
.y = @intCast(self.y),
|
|
};
|
|
}
|
|
|
|
pub fn to_u32(self: Self) Point(u32) {
|
|
return Point(u32){
|
|
.x = @intCast(self.x),
|
|
.y = @intCast(self.y),
|
|
};
|
|
}
|
|
};
|
|
}
|
|
|
|
pub const PointI32 = Point(i32);
|
|
pub const PointU32 = Point(u32);
|