Camera controls, fix some math; lighting probably broken
This commit is contained in:
38
src/math/Iterator3.zig
Normal file
38
src/math/Iterator3.zig
Normal file
@@ -0,0 +1,38 @@
|
||||
const Vector3 = @import("Vector3.zig").Vector3;
|
||||
|
||||
min: Vector3,
|
||||
max: Vector3,
|
||||
step: Vector3,
|
||||
current: ?Vector3,
|
||||
|
||||
pub fn init(min: Vector3, max: Vector3, step: Vector3) @This() {
|
||||
return .{
|
||||
.min = min,
|
||||
.max = max,
|
||||
.step = step,
|
||||
.current = min,
|
||||
};
|
||||
}
|
||||
|
||||
pub fn next(self: *@This()) ?Vector3 {
|
||||
const current = self.current orelse return null;
|
||||
|
||||
var next_current = current;
|
||||
|
||||
next_current = next_current.setX(next_current.getX() + self.step.getX());
|
||||
if (next_current.getX() > self.max.getX()) {
|
||||
next_current = next_current.setX(self.min.getX());
|
||||
next_current = next_current.setY(next_current.getY() + self.step.getY());
|
||||
if (next_current.getY() > self.max.getY()) {
|
||||
next_current = next_current.setY(self.min.getY());
|
||||
next_current = next_current.setZ(next_current.getZ() + self.step.getZ());
|
||||
if (next_current.getZ() > self.max.getZ()) {
|
||||
self.current = null;
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
self.current = next_current;
|
||||
return next_current;
|
||||
}
|
||||
@@ -30,12 +30,12 @@ pub const Vector2 = extern struct {
|
||||
|
||||
pub inline fn asVector3(self: Vector2, z: f32) Vector3 {
|
||||
const z_vector: @Vector(3, f32) = .{ undefined, undefined, z };
|
||||
return .{ .vector = @shuffle(f32, self.vector, z_vector, .{ 0, 1, ~@as(i32, -2) }) };
|
||||
return .{ .vector = @shuffle(f32, self.vector, z_vector, [_]i32{ 0, 1, ~@as(i32, 2) }) };
|
||||
}
|
||||
|
||||
pub inline fn asVector4(self: Vector4, z: f32, w: f32) Vector4 {
|
||||
const zw_vector: @Vector(4, f32) = .{ undefined, undefined, z, w };
|
||||
return .{ .vector = @shuffle(f32, self.vector, zw_vector, .{ 0, 1, ~@as(i32, -2), ~@as(i32, -3) }) };
|
||||
return .{ .vector = @shuffle(f32, self.vector, zw_vector, [_]i32{ 0, 1, ~@as(i32, 2), ~@as(i32, 3) }) };
|
||||
}
|
||||
|
||||
// --- ACCESSORS ---
|
||||
@@ -50,12 +50,12 @@ pub const Vector2 = extern struct {
|
||||
|
||||
pub inline fn setX(self: Vector2, x: f32) Vector2 {
|
||||
const x_vector: Vector = @splat(x);
|
||||
return .{ .vector = @shuffle(f32, self, x_vector, .{ ~@as(i32, 0), 1 }) };
|
||||
return .{ .vector = @shuffle(f32, self.vector, x_vector, .{ ~@as(i32, 0), 1 }) };
|
||||
}
|
||||
|
||||
pub inline fn setY(self: Vector2, y: f32) Vector2 {
|
||||
const y_vector: Vector = @splat(y);
|
||||
return .{ .vector = @shuffle(f32, self, y_vector, .{ 0, ~@as(i32, 1) }) };
|
||||
return .{ .vector = @shuffle(f32, self.vector, y_vector, .{ 0, ~@as(i32, 1) }) };
|
||||
}
|
||||
|
||||
// --- COMPONENT-WISE ---
|
||||
@@ -138,8 +138,8 @@ pub const Vector2 = extern struct {
|
||||
const s = @sin(angle_rad);
|
||||
return .{
|
||||
.vector = .{
|
||||
self.x * c - self.y * s,
|
||||
self.x * s + self.x * c,
|
||||
self.getX() * c - self.getY() * s,
|
||||
self.getX() * s + self.getY() * c,
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
@@ -31,12 +31,12 @@ pub const Vector3 = extern struct {
|
||||
}
|
||||
|
||||
pub inline fn asVector2(self: Vector3) Vector2 {
|
||||
return .{ .vector = @shuffle(f32, self.vector, undefined, .{ 0, 1 }) };
|
||||
return .{ .vector = @shuffle(f32, self.vector, undefined, [_]i32{ 0, 1 }) };
|
||||
}
|
||||
|
||||
pub inline fn asVector4(self: Vector3, w: f32) Vector4 {
|
||||
const w_vector: @Vector(4, f32) = .{ undefined, undefined, undefined, w };
|
||||
return .{ .vector = @shuffle(f32, self.vector, w_vector, .{ 0, 1, 2, ~@as(i32, -3) }) };
|
||||
return .{ .vector = @shuffle(f32, self.vector, w_vector, [_]i32{ 0, 1, 2, ~@as(i32, 3) }) };
|
||||
}
|
||||
|
||||
// --- ACCESSORS ---
|
||||
@@ -55,17 +55,17 @@ pub const Vector3 = extern struct {
|
||||
|
||||
pub inline fn setX(self: Vector3, x: f32) Vector3 {
|
||||
const x_vector: Vector = @splat(x);
|
||||
return .{ .vector = @shuffle(f32, self, x_vector, .{ ~@as(i32, 0), 1, 2 }) };
|
||||
return .{ .vector = @shuffle(f32, self.vector, x_vector, [_]i32{ ~@as(i32, 0), 1, 2 }) };
|
||||
}
|
||||
|
||||
pub inline fn setY(self: Vector3, y: f32) Vector3 {
|
||||
const y_vector: Vector = @splat(y);
|
||||
return .{ .vector = @shuffle(f32, self, y_vector, .{ 0, ~@as(i32, 1), 2 }) };
|
||||
return .{ .vector = @shuffle(f32, self.vector, y_vector, [_]i32{ 0, ~@as(i32, 1), 2 }) };
|
||||
}
|
||||
|
||||
pub inline fn setZ(self: Vector3, z: f32) Vector3 {
|
||||
const z_vector: Vector = @splat(z);
|
||||
return .{ .vector = @shuffle(f32, self, z_vector, .{ 0, 1, ~@as(i32, 2) }) };
|
||||
return .{ .vector = @shuffle(f32, self.vector, z_vector, [_]i32{ 0, 1, ~@as(i32, 2) }) };
|
||||
}
|
||||
|
||||
// --- COMPONENT-WISE ---
|
||||
|
||||
@@ -31,11 +31,11 @@ pub const Vector4 = extern struct {
|
||||
}
|
||||
|
||||
pub inline fn asVector2(self: Vector4) Vector2 {
|
||||
return .{ .vector = @shuffle(f32, self.vector, undefined, .{ 0, 1 }) };
|
||||
return .{ .vector = @shuffle(f32, self.vector, undefined, [_]i32{ 0, 1 }) };
|
||||
}
|
||||
|
||||
pub inline fn asVector3(self: Vector4) Vector3 {
|
||||
return .{ .vector = @shuffle(f32, self.vector, undefined, .{ 0, 1, 2 }) };
|
||||
return .{ .vector = @shuffle(f32, self.vector, undefined, [_]i32{ 0, 1, 2 }) };
|
||||
}
|
||||
|
||||
// --- ACCESSORS ---
|
||||
@@ -58,22 +58,22 @@ pub const Vector4 = extern struct {
|
||||
|
||||
pub inline fn setX(self: Vector4, x: f32) Vector4 {
|
||||
const x_vector: Vector = @splat(x);
|
||||
return .{ .vector = @shuffle(f32, self, x_vector, .{ ~@as(i32, 0), 1, 2, 3 }) };
|
||||
return .{ .vector = @shuffle(f32, self.vector, x_vector, [_]i32{ ~@as(i32, 0), 1, 2, 3 }) };
|
||||
}
|
||||
|
||||
pub inline fn setY(self: Vector4, y: f32) Vector4 {
|
||||
const y_vector: Vector = @splat(y);
|
||||
return .{ .vector = @shuffle(f32, self, y_vector, .{ 0, ~@as(i32, 1), 2, 3 }) };
|
||||
return .{ .vector = @shuffle(f32, self.vector, y_vector, [_]i32{ 0, ~@as(i32, 1), 2, 3 }) };
|
||||
}
|
||||
|
||||
pub inline fn setZ(self: Vector4, z: f32) Vector4 {
|
||||
const z_vector: Vector = @splat(z);
|
||||
return .{ .vector = @shuffle(f32, self, z_vector, .{ 0, 1, ~@as(i32, 2), 3 }) };
|
||||
return .{ .vector = @shuffle(f32, self.vector, z_vector, [_]i32{ 0, 1, ~@as(i32, 2), 3 }) };
|
||||
}
|
||||
|
||||
pub inline fn setW(self: Vector4, w: f32) Vector4 {
|
||||
const w_vector: Vector = @splat(w);
|
||||
return .{ .vector = @shuffle(f32, self, w_vector, .{ 0, 1, 2, ~@as(i32, 3) }) };
|
||||
return .{ .vector = @shuffle(f32, self.vector, w_vector, [_]i32{ 0, 1, 2, ~@as(i32, 3) }) };
|
||||
}
|
||||
|
||||
// --- COMPONENT-WISE ---
|
||||
|
||||
Reference in New Issue
Block a user