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

72 lines
2.0 KiB
C#

using UnityEngine;
using NeonTea.Quakeball.TeaNet.Packets;
namespace NeonTea.Quakeball.Networking.Packets {
public class PlayerActionPckt : Packet {
public ulong PlayerId;
public PlayerAction Action;
public Serializable Serializable;
public PlayerActionPckt() { }
public PlayerActionPckt(PlayerAction action, Serializable serializable, ulong id = 0) {
Action = action;
Serializable = serializable;
PlayerId = id;
}
public override void Read(ByteBuffer buffer) {
PlayerId = buffer.ReadULong();
switch (buffer.Read()) {
case 0:
Action = PlayerAction.Jump;
break;
case 1:
Action = PlayerAction.Shoot;
Serializable = new ShootData();
Serializable.Read(buffer);
break;
}
}
public override void Write(ByteBuffer buffer) {
buffer.Write(PlayerId);
buffer.Write((byte)Action);
if (Action == PlayerAction.Shoot) {
buffer.Write(Serializable);
}
}
}
public enum PlayerAction {
Null = byte.MaxValue,
Jump = 0,
Shoot = 1,
}
public class ShootData : Serializable {
public float Pitch;
public float Yaw;
public PlayerSyncPacket SyncPckt;
public ShootData() { }
public ShootData(float pitch, float yaw, PlayerSyncPacket syncPckt) {
Pitch = pitch;
Yaw = yaw;
SyncPckt = syncPckt;
}
public void Read(ByteBuffer buffer) {
Pitch = buffer.ReadFloat();
Yaw = buffer.ReadFloat();
SyncPckt = new PlayerSyncPacket();
SyncPckt.Read(buffer);
}
public void Write(ByteBuffer buffer) {
buffer.Write(Pitch);
buffer.Write(Yaw);
SyncPckt.Write(buffer);
}
}
}