shorten vector ops

This commit is contained in:
catAngent 2024-09-09 21:43:59 +01:00
parent 41d076914f
commit 06813e2e5f
2 changed files with 35 additions and 7 deletions

View file

@ -1,6 +1,7 @@
const std = @import("std");
const rh = @import("util/raylib_helper.zig");
const raylib = rh.raylib;
const v3 = rh.v3;
const chunks = @import("world/chunk.zig");
pub fn drawCameraPosition(camera: raylib.Camera3D, x: i32, y: i32) !void {
@ -16,8 +17,8 @@ pub fn drawCameraPosition(camera: raylib.Camera3D, x: i32, y: i32) !void {
}
pub fn moveCamera(camera: *raylib.Camera3D, vec: raylib.Vector3) void {
camera.position = raylib.Vector3Add(camera.position, vec);
camera.target = raylib.Vector3Add(camera.target, vec);
camera.position = v3.add(camera.position, vec);
camera.target = v3.add(camera.target, vec);
}
pub fn main() !void {
@ -57,8 +58,8 @@ pub fn main() !void {
while (!raylib.WindowShouldClose()) {
raylib.ClearBackground(raylib.GRAY);
const right = raylib.Vector3Negate(raylib.Vector3Normalize(raylib.Vector3CrossProduct(camera.up, raylib.Vector3Subtract(camera.target, camera.position))));
const forward = raylib.Vector3CrossProduct(right, raylib.Vector3{ .x = 0, .y = -1, .z = 0 });
const right = v3.neg(v3.nor(v3.cross(camera.up, v3.sub(camera.target, camera.position))));
const forward = v3.cross(right, v3.new(0, -1, 0));
const speed = @as(f32, if (raylib.IsKeyDown(raylib.KEY_LEFT_CONTROL)) 25 else 5) * raylib.GetFrameTime();
var movement = raylib.Vector3Zero();
@ -74,8 +75,8 @@ pub fn main() !void {
moveCamera(&camera, raylib.Vector3Scale(raylib.Vector3Normalize(movement), speed));
const delta = raylib.GetMouseDelta();
camera.target = raylib.Vector3Add(camera.position, raylib.Vector3RotateByAxisAngle(raylib.Vector3Subtract(camera.target, camera.position), raylib.Vector3{ .x = 0, .y = 1, .z = 0 }, -0.005 * delta.x));
camera.target = raylib.Vector3Add(camera.position, raylib.Vector3RotateByAxisAngle(raylib.Vector3Subtract(camera.target, camera.position), right, -0.005 * delta.y));
camera.target = v3.add(camera.position, v3.rotate(v3.sub(camera.target, camera.position), v3.new(0, 1, 0), -0.005 * delta.x));
camera.target = v3.add(camera.position, v3.rotate(v3.sub(camera.target, camera.position), right, -0.005 * delta.y));
raylib.BeginDrawing();
defer raylib.EndDrawing();
@ -90,7 +91,7 @@ pub fn main() !void {
while (y < 16) : (y += 1) {
var z: f32 = 0;
while (z < 16) : (z += 1) {
raylib.DrawCube(raylib.Vector3{ .x = x + 48, .y = y, .z = z }, 1, 1, 1, raylib.RED);
raylib.DrawCube(v3.new(x - 48, y, z), 1, 1, 1, raylib.RED);
}
}
}

View file

@ -2,3 +2,30 @@ pub const raylib = @cImport({
@cInclude("raylib.h");
@cInclude("raymath.h");
});
pub const v3 = struct {
pub inline fn new(x: f32, y: f32, z: f32) raylib.Vector3 {
return raylib.Vector3{ .x = x, .y = y, .z = z };
}
pub inline fn add(a: raylib.Vector3, b: raylib.Vector3) raylib.Vector3 {
return raylib.Vector3Add(a, b);
}
pub inline fn sub(a: raylib.Vector3, b: raylib.Vector3) raylib.Vector3 {
return raylib.Vector3Subtract(a, b);
}
pub inline fn neg(a: raylib.Vector3) raylib.Vector3 {
return raylib.Vector3Negate(a);
}
pub inline fn scl(a: raylib.Vector3, b: f32) raylib.Vector3 {
return raylib.Vector3Scale(a, b);
}
pub inline fn nor(a: raylib.Vector3) raylib.Vector3 {
return raylib.Vector3Normalize(a);
}
pub inline fn cross(a: raylib.Vector3, b: raylib.Vector3) raylib.Vector3 {
return raylib.Vector3CrossProduct(a, b);
}
pub inline fn rotate(vec: raylib.Vector3, axis: raylib.Vector3, angle: f32) raylib.Vector3 {
return raylib.Vector3RotateByAxisAngle(vec, axis, angle);
}
};