quakeball/Assets/Scripts/Networking/Packets/PlayerUpdatePckt.cs

86 lines
2.6 KiB
C#

using UnityEngine;
using NeonTea.Quakeball.TeaNet.Packets;
using System.Collections.Generic;
using NeonTea.Quakeball.Networking;
namespace NeonTea.Quakeball.Networking.Packets {
public class MultiplePlayerUpdatesPckt : Packet {
public List<PlayerUpdatePckt> Updates = new List<PlayerUpdatePckt>();
public MultiplePlayerUpdatesPckt() { }
public MultiplePlayerUpdatesPckt(List<NetPlayer> players) {
foreach (NetPlayer p in players) {
if (p.Controlled == null) {
continue;
}
Updates.Add(p.Controlled.CreatePacket(p.Id));
}
}
public override void Read(ByteBuffer buffer) {
Updates.Clear();
int count = buffer.ReadInt();
for (int i = 0; i < count; i++) {
PlayerUpdatePckt pckt = new PlayerUpdatePckt();
pckt.Read(buffer);
Updates.Add(pckt);
}
}
public override void Write(ByteBuffer buffer) {
buffer.Write(Updates.Count);
foreach (PlayerUpdatePckt p in Updates) {
p.Write(buffer);
}
}
}
public class PlayerUpdatePckt : Packet {
public ulong PlayerId;
public Vector3 MoveDirection;
public byte MoveStyle;
public bool Jumping;
public float Pitch;
public float Yaw;
public PlayerUpdatePckt() { }
public PlayerUpdatePckt(Vector3 moveDirection, byte moveStyle, bool jumping, float pitch, float yaw, ulong id = 0) {
MoveDirection = moveDirection;
MoveStyle = moveStyle;
Jumping = jumping;
Pitch = pitch;
Yaw = yaw;
PlayerId = id;
}
public override void Read(ByteBuffer buffer) {
PlayerId = buffer.ReadULong();
float x = buffer.ReadFloat();
float y = buffer.ReadFloat();
float z = buffer.ReadFloat();
MoveDirection = new Vector3(x, y, z);
MoveStyle = buffer.Read();
Jumping = buffer.ReadBool();
Pitch = buffer.ReadFloat();
Yaw = buffer.ReadFloat();
}
public override void Write(ByteBuffer buffer) {
buffer.Write(PlayerId);
buffer.Write(MoveDirection.x);
buffer.Write(MoveDirection.y);
buffer.Write(MoveDirection.z);
buffer.Write(MoveStyle);
buffer.Write(Jumping);
buffer.Write(Pitch);
buffer.Write(Yaw);
}
}
}