From 06813e2e5f4051b20c403e932936a23967035fad Mon Sep 17 00:00:00 2001 From: catAngent Date: Mon, 9 Sep 2024 21:43:59 +0100 Subject: [PATCH] shorten vector ops --- src/main.zig | 15 ++++++++------- src/util/raylib_helper.zig | 27 +++++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 7 deletions(-) diff --git a/src/main.zig b/src/main.zig index 8ec0308..b886db9 100644 --- a/src/main.zig +++ b/src/main.zig @@ -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); } } } diff --git a/src/util/raylib_helper.zig b/src/util/raylib_helper.zig index 38a9455..556d07b 100644 --- a/src/util/raylib_helper.zig +++ b/src/util/raylib_helper.zig @@ -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); + } +};