private void PlaceLevels(Floor floor, Location location) { const float levelDistance = 75f; var disk = new PoissonDisk(Random.Next()); var points = disk.SampleRectangle(new Vector2(0, 0), new Vector2(floor.Settings.Width, floor.Settings.Height), levelDistance); foreach (var point in points) { if (!floor.IsPointPassable(point)) { continue; } double roll = Random.NextDouble(); var returnWarp = new Warp(location, point); floor.Tiles[point] = roll > 0.5 ? GenerateWarp(ParentWorld.DungeonGenerator, LocationType.Dungeon, returnWarp, Sprites.LadderDown) : GenerateWarp(ParentWorld.CaveGenerator, LocationType.Cave, returnWarp, Sprites.LadderDown); } }
private void PlantTrees(Floor floor) { const float baseTreeDistance = 10f; var disk = new PoissonDisk(Random.Next()); var points = disk.SampleRectangle(new Vector2(0, 0), new Vector2(floor.Settings.Width, floor.Settings.Height), baseTreeDistance); foreach (var point in points) { if (floor.Tiles[point] is WaterTile) { continue; } double roll = Random.NextDouble(); bool plantTree = false; switch (floor.Tiles[point].SpriteId) { case Sprites.Sand: plantTree = roll < 0.1; break; case Sprites.ValleyGrass: plantTree = roll < 0.5; break; case Sprites.ForestGrass: plantTree = roll < 0.9; break; } if (plantTree) { floor.Entities.Add(point, new Tree(Sprites.Reserved)); } } }