Use readVec and writeVec where applicable (#1336)

* Use readVec and writeVec where applicable

* Use writeVec in chunkRequest.sendRequest
This commit is contained in:
Krzysztof Wiśniewski 2025-04-22 23:02:22 +02:00 committed by GitHub
parent f193eb68bd
commit 05d39a81b8
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 13 additions and 44 deletions

View File

@ -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();

View File

@ -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);

View File

@ -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);