示例#1
0
 public void DespawnEntity(Entity e)
 {
     if (!e.IsSpawned)
     {
         return;
     }
     Entities.Remove(e);
     e.IsSpawned = false;
     if (e.Ticks)
     {
         Tickers.Remove(e);
     }
     if (e is PhysicsEntity)
     {
         for (int i = 0; i < ((PhysicsEntity)e).Joints.Count; i++)
         {
             DestroyJoint(((PhysicsEntity)e).Joints[i]);
         }
         ((PhysicsEntity)e).DestroyBody();
     }
     else if (e is PrimitiveEntity)
     {
         ((PrimitiveEntity)e).Destroy();
     }
     else if (e is PlayerEntity)
     {
         TheServer.Players.Remove((PlayerEntity)e);
         Players.Remove((PlayerEntity)e);
         ((PlayerEntity)e).Kick("Despawned!");
     }
     if (e.NetworkMe)
     {
         Location lpos = Location.NaN;
         if (e is PhysicsEntity)
         {
             lpos = ((PhysicsEntity)e).lPos;
         }
         else if (e is PrimitiveEntity)
         {
             lpos = ((PrimitiveEntity)e).lPos;
         }
         Location tpos = e.GetPosition();
         DespawnEntityPacketOut desppack = new DespawnEntityPacketOut(e.EID);
         foreach (PlayerEntity player in Players)
         {
             if (player.ShouldSeePositionPreviously(lpos) || player.ShouldSeePosition(tpos))
             {
                 player.Network.SendPacket(desppack);
             }
         }
     }
 }
示例#2
0
 /// <summary>
 /// Removes an entity from the world.
 /// </summary>
 /// <param name="e">The entity to remove.</param>
 public void DespawnEntity(Entity e)
 {
     if (!e.IsSpawned)
     {
         return;
     }
     e.IsSpawned = false;
     if (e.Ticks)
     {
         Tickers.Remove(e);
     }
     if (e is PhysicsEntity)
     {
         for (int i = 0; i < ((PhysicsEntity)e).Joints.Count; i++)
         {
             DestroyJoint(((PhysicsEntity)e).Joints[i]);
         }
         ((PhysicsEntity)e).DestroyBody();
     }
     else if (e is PrimitiveEntity)
     {
         ((PrimitiveEntity)e).Destroy();
     }
     else if (e is PlayerEntity)
     {
         TheServer.Players.Remove((PlayerEntity)e);
         Players.Remove((PlayerEntity)e);
         ((PlayerEntity)e).Kick("Despawned!");
     }
     if (e.NetworkMe)
     {
         DespawnEntityPacketOut desppack = new DespawnEntityPacketOut(e.EID);
         foreach (PlayerEntity player in Players)
         {
             if (player.Known.Contains(e.EID))
             {
                 player.Network.SendPacket(desppack);
                 player.Known.Remove(e.EID);
             }
         }
     }
     Entities.Remove(e.EID);
 }