public Microsoft.Xna.Framework.Vector3 GetSpawnLocation(WorldManager world, EntitySpawnLocation SpawnLocation) { Microsoft.Xna.Framework.Vector3 location = location = VoxelHelpers.FindFirstVoxelBelowIncludeWater(new VoxelHandle(world.ChunkManager.ChunkData, GlobalVoxelCoordinate.FromVector3(MonsterSpawner.GetRandomWorldEdge(world)))).WorldPosition + Microsoft.Xna.Framework.Vector3.Up * 1.5f; switch (SpawnLocation) { case EntitySpawnLocation.BalloonPort: { var balloonport = world.PlayerFaction.GetRooms().OfType <BalloonPort>(); if (balloonport.Any()) { location = Datastructures.SelectRandom(balloonport).GetBoundingBox().Center() + Microsoft.Xna.Framework.Vector3.Up * 1.5f; } break; } case EntitySpawnLocation.RandomZone: { var zones = world.PlayerFaction.GetRooms(); if (zones.Any()) { location = Datastructures.SelectRandom(zones).GetBoundingBox().Center() + Microsoft.Xna.Framework.Vector3.Up * 1.5f; } break; } case EntitySpawnLocation.WorldEdge: { // already computed break; } } return(location); }