protected internal virtual void PaintGrass() { var grass = Grass(); if (feeling == Feeling.GRASS) { foreach (var room in Rooms.Where(room => room.type != RoomType.NULL && room.type != RoomType.PASSAGE && room.type != RoomType.TUNNEL)) { grass[(room.Left + 1) + (room.Top + 1) * Width] = true; grass[(room.Right - 1) + (room.Top + 1) * Width] = true; grass[(room.Left + 1) + (room.Bottom - 1) * Width] = true; grass[(room.Right - 1) + (room.Bottom - 1) * Width] = true; } } for (var i = Width + 1; i < Length - Width - 1; i++) { if (map[i] != Terrain.EMPTY || !grass[i]) { continue; } var count = 1 + NEIGHBOURS8.Count(n => grass[i + n]); map[i] = (Random.Float() < count / 12f) ? Terrain.HIGH_GRASS : Terrain.GRASS; } }
protected internal override void Decorate() { for (var i = Width + 1; i < Length - Width - 1; i++) { switch (map[i]) { case Terrain.EMPTY: { var count = NEIGHBOURS8.Count(neighbour => (Terrain.Flags[map[i + neighbour]] & Terrain.PASSABLE) > 0); if (pdsharp.utils.Random.Int(80) < count) { map[i] = Terrain.EMPTY_DECO; } } break; case Terrain.WALL: { var count = NEIGHBOURS4.Count(neighbour => map[i + neighbour] == Terrain.WATER); if (pdsharp.utils.Random.Int(4) < count) { map[i] = Terrain.WALL_DECO; } } break; } } while (true) { var pos = RoomEntrance.Random(); if (pos == entrance) { continue; } map[pos] = Terrain.SIGN; break; } }