From 05d39a81b8a41c7d48f95e04130e34580034e35f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Krzysztof=20Wi=C5=9Bniewski?= Date: Tue, 22 Apr 2025 23:02:22 +0200 Subject: [PATCH] Use `readVec` and `writeVec` where applicable (#1336) * Use readVec and writeVec where applicable * Use writeVec in chunkRequest.sendRequest --- src/itemdrop.zig | 16 ++++------------ src/network.zig | 10 ++-------- src/server/server.zig | 31 +++++++------------------------ 3 files changed, 13 insertions(+), 44 deletions(-) diff --git a/src/itemdrop.zig b/src/itemdrop.zig index 15c574b6..48c73a4b 100644 --- a/src/itemdrop.zig +++ b/src/itemdrop.zig @@ -120,12 +120,8 @@ pub const ItemDropManager = struct { // MARK: ItemDropManager var writer = utils.BinaryWriter.initCapacity(allocator, self.size*50); for(self.indices[0..self.size]) |i| { writer.writeInt(u16, i); - writer.writeFloat(f64, self.list.items(.pos)[i][0]); - writer.writeFloat(f64, self.list.items(.pos)[i][1]); - writer.writeFloat(f64, self.list.items(.pos)[i][2]); - writer.writeFloat(f64, self.list.items(.vel)[i][0]); - writer.writeFloat(f64, self.list.items(.vel)[i][1]); - writer.writeFloat(f64, self.list.items(.vel)[i][2]); + writer.writeVec(Vec3d, self.list.items(.pos)[i]); + writer.writeVec(Vec3d, self.list.items(.vel)[i]); } return writer.data.toOwnedSlice(); } @@ -468,12 +464,8 @@ pub const ClientItemDropManager = struct { // MARK: ClientItemDropManager var vel: [ItemDropManager.maxCapacity]Vec3d = undefined; while(reader.remaining.len != 0) { const i = try reader.readInt(u16); - pos[i][0] = try reader.readFloat(f64); - pos[i][1] = try reader.readFloat(f64); - pos[i][2] = try reader.readFloat(f64); - vel[i][0] = try reader.readFloat(f64); - vel[i][1] = try reader.readFloat(f64); - vel[i][2] = try reader.readFloat(f64); + pos[i] = try reader.readVec(Vec3d); + vel[i] = try reader.readVec(Vec3d); } mutex.lock(); defer mutex.unlock(); diff --git a/src/network.zig b/src/network.zig index 991349ee..24cfa80e 100644 --- a/src/network.zig +++ b/src/network.zig @@ -738,11 +738,7 @@ pub const Protocols = struct { pub const id: u8 = 2; pub const asynchronous = false; fn receive(conn: *Connection, reader: *utils.BinaryReader) !void { - const basePosition = Vec3i{ - try reader.readInt(i32), - try reader.readInt(i32), - try reader.readInt(i32), - }; + const basePosition = try reader.readVec(Vec3i); conn.user.?.clientUpdatePos = basePosition; conn.user.?.renderDistance = try reader.readInt(u16); while(reader.remaining.len >= 4) { @@ -767,9 +763,7 @@ pub const Protocols = struct { if(requests.len == 0) return; var writer = utils.BinaryWriter.initCapacity(main.stackAllocator, 14 + 4*requests.len); defer writer.deinit(); - writer.writeInt(i32, basePosition[0]); - writer.writeInt(i32, basePosition[1]); - writer.writeInt(i32, basePosition[2]); + writer.writeVec(Vec3i, basePosition); writer.writeInt(u16, renderDistance); for(requests) |req| { const voxelSizeShift: u5 = std.math.log2_int(u31, req.voxelSize); diff --git a/src/server/server.zig b/src/server/server.zig index 07f427fc..c7e5c2e7 100644 --- a/src/server/server.zig +++ b/src/server/server.zig @@ -9,6 +9,7 @@ const ConnectionManager = network.ConnectionManager; const utils = main.utils; const vec = main.vec; const Vec3d = vec.Vec3d; +const Vec3f = vec.Vec3f; const Vec3i = vec.Vec3i; const BinaryReader = main.utils.BinaryReader; const BinaryWriter = main.utils.BinaryWriter; @@ -250,21 +251,9 @@ pub const User = struct { // MARK: User pub fn receiveData(self: *User, reader: *BinaryReader) !void { self.mutex.lock(); defer self.mutex.unlock(); - const position: [3]f64 = .{ - try reader.readFloat(f64), - try reader.readFloat(f64), - try reader.readFloat(f64), - }; - const velocity: [3]f64 = .{ - try reader.readFloat(f64), - try reader.readFloat(f64), - try reader.readFloat(f64), - }; - const rotation: [3]f32 = .{ - try reader.readFloat(f32), - try reader.readFloat(f32), - try reader.readFloat(f32), - }; + const position: [3]f64 = try reader.readVec(Vec3d); + const velocity: [3]f64 = try reader.readVec(Vec3d); + const rotation: [3]f32 = try reader.readVec(Vec3f); self.player.rot = rotation; const time = try reader.readInt(i16); self.timeDifference.addDataPoint(time); @@ -407,15 +396,9 @@ fn update() void { // MARK: update() for(userList) |user| { const id = user.id; // TODO writer.writeInt(u32, id); - writer.writeFloat(f64, user.player.pos[0]); - writer.writeFloat(f64, user.player.pos[1]); - writer.writeFloat(f64, user.player.pos[2]); - writer.writeFloat(f32, user.player.rot[0]); - writer.writeFloat(f32, user.player.rot[1]); - writer.writeFloat(f32, user.player.rot[2]); - writer.writeFloat(f64, user.player.vel[0]); - writer.writeFloat(f64, user.player.vel[1]); - writer.writeFloat(f64, user.player.vel[2]); + writer.writeVec(Vec3d, user.player.pos); + writer.writeVec(Vec3f, user.player.rot); + writer.writeVec(Vec3d, user.player.vel); } for(userList) |user| { main.network.Protocols.entityPosition.send(user.conn, writer.data.items, itemData);