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); } } } }
/// <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); }