private void UpdatePlayerPos()
{
if (_isInvisible) return;
var packet = new Packet();
if (_delta.IsZero())
{
return;
}
if (_delta.NeedTp())
{
packet.Id = PacketType.PositionAndOrientationTeleport;
packet.AddVar(UserId);
packet.AddVar(Position.X);
packet.AddVar(Position.Y);
packet.AddVar(Position.Z);
packet.AddVar(Position.Yaw);
packet.AddVar(Position.Pitch);
}
else
{
if (_delta.PosChanged())
{
if (_delta.RotChanged())
{
//Pos AND Rot
packet.Id = PacketType.PositionAndOrientationUpdate;
packet.AddVar(UserId);
packet.AddVar((byte) _delta.X);
packet.AddVar((byte) _delta.Y);
packet.AddVar((byte) _delta.Z);
packet.AddVar(Position.Yaw);
packet.AddVar(Position.Pitch);
}
else
{
//Just Pos
packet.Id = PacketType.PositionUpdate;
packet.AddVar(UserId);
packet.AddVar((byte) _delta.X);
packet.AddVar((byte) _delta.Y);
packet.AddVar((byte) _delta.Z);
}
}
else
{
if (_delta.RotChanged())
{
packet.Id = PacketType.OrientationUpdate;
packet.AddVar(UserId);
packet.AddVar(Position.Yaw);
packet.AddVar(Position.Pitch);
}
}
}
foreach (Player p in Level.Players.ToArray())
{
if (p.IsActive && p != this)
{
p.SendPacket(packet);
}
}
}