Ejemplo n.º 1
0
Archivo: FormGame.cs Proyecto: lacti/Lz
        internal void HandlePacket(ObjectPacket packet, PacketSession peerSession)
        {
            switch (packet.State)
            {
            case ObjectState.Appear:
                if (packet.Type == ObjectType.Player)
                {
                    Spawn <Player>(packet.ObjectId, packet.Name, packet.CurrentPosition);
                }
                else if (packet.Type == ObjectType.Npc)
                {
                    Spawn <Npc>(packet.ObjectId, packet.Name, packet.CurrentPosition);
                }
                break;

            case ObjectState.Disappear:
                Despawn(packet.ObjectId);

                if (_player != null && packet.ObjectId == _player.ObjectId)
                {
                    _player = null;
                }
                break;
            }
        }
        /// <summary>
        /// Updates this object from a network packet.
        /// </summary>
        /// <param name="packet">Packet to update from.</param>
        public virtual void UpdateFromPacket(BasePacket packet)
        {
            ObjectPacket objPacket = packet as ObjectPacket;

            // Set the initial positions of the object.
            float epsilon = 0.001f;

            Moving = !(Math.Abs(Transform.Position.X - objPacket.PositionX) < epsilon &&
                       Math.Abs(Transform.Position.Z - objPacket.PositionZ) < epsilon);

            Transform.Position.X = objPacket.PositionX;
            Transform.Position.Z = objPacket.PositionZ;

            Transform.Rotation.Y = objPacket.Rotation;

            // Set the initial burning status.
            Burning = objPacket.Burning;
            Health  = objPacket.Health;
        }