Пример #1
0
        internal void Update()
        {
            if (!visible)
            {
                return;
            }
            Packet packet = null;
            bool   posChanged = false, farChanged = false, rotChanged = false;

            if (position.X != oldpos.X || position.Y != oldpos.Y || position.Z != oldpos.Z)
            {
                posChanged = true;
            }
            if (position.RotX != oldpos.RotX || position.RotY != oldpos.RotY)
            {
                rotChanged = true;
            }
            if (Math.Abs((int)position.X - oldpos.X) > 127 || Math.Abs((int)position.Y - oldpos.Y) > 127 ||
                Math.Abs((int)position.Z - oldpos.Z) > 127)
            {
                farChanged = true;
            }
            if (farChanged)
            {
                packet = Protocol.TeleportPacket(id, Position);
            }
            else if (posChanged && rotChanged)
            {
                unchecked {
                    packet = Protocol.MoveLookPacket(
                        id, (byte)(position.X - oldpos.X), (byte)(position.Y - oldpos.Y),
                        (byte)(position.Z - oldpos.Z), position.RotX, position.RotY);
                }
            }
            else if (posChanged)
            {
                unchecked {
                    packet = Protocol.MovePacket(
                        id, (byte)(position.X - oldpos.X), (byte)(position.Y - oldpos.Y), (byte)(position.Z - oldpos.Z));
                }
            }
            else if (rotChanged)
            {
                packet = Protocol.LookPacket(id, position.RotX, position.RotY);
            }
            if (packet != null)
            {
                oldpos.Set(position);
                packet.Send(level);
                MoveEvent.Raise(level.server, this);
            }
        }