using System; using System.IO; using UnityEngine; using Multiplayer.Network; [Serializable] public struct PlayerData : INetworkSerializable { public ushort playerId; public string username; public Vector3 position; public Quaternion rotation; public PlayerData(string username, Vector3 position, Quaternion rotation) { playerId = 0; // assigned by server this.username = username; this.position = position; this.rotation = rotation; } public void Serialize(BinaryWriter writer) { writer.Write(playerId); writer.Write(username ?? ""); //Position writer.Write(position.x); writer.Write(position.y); writer.Write(position.z); //Rotation byte yaw = (byte)(rotation.eulerAngles.y / 360f * 255f); writer.Write(yaw); } public void Deserialize(BinaryReader reader) { playerId = reader.ReadUInt16(); username = reader.ReadString(); position = new Vector3( reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle() ); byte yaw = reader.ReadByte(); rotation = Quaternion.Euler(0, yaw / 255f * 360f, 0); } }