/// <summary> /// Do a pre-filtering of tiles on the world map. Mostly used to gather "valid" tiles (that is, tiles that are /// settleable). /// </summary> private void Prefilter() { Log.Message($"[PrepareLanding] Prefilter: {Find.WorldGrid.tiles.Count} tiles in WorldGrid.tiles"); FilterInfoLogger.AppendTitleMessage("PLFILT_PreFiltering".Translate(), textColor: Color.cyan); ClearMatchingTiles(); // clear all valid tile ids _allValidTileIds.Clear(); // get all valid tiles for a new settlement var tileCount = Find.World.grid.TilesCount; for (var i = 0; i < tileCount; i++) { if (!IsViableTile(i)) { continue; } _allValidTileIds.Add(i); } var msgTilesRemainAfterFilter = string.Format("PLFILT_ValidTilesRemainAfterFilter".Translate(), _allValidTileIds.Count, Find.WorldGrid.tiles.Count - _allValidTileIds.Count); FilterInfoLogger.AppendMessage(msgTilesRemainAfterFilter); // get all tiles with at least one river var allTilesWithRivers = _allValidTileIds.FindAll( tileId => Find.World.grid[tileId].VisibleRivers != null && Find.World.grid[tileId].VisibleRivers.Count != 0); AllTilesWithRiver = new ReadOnlyCollection <int>(allTilesWithRivers); FilterInfoLogger.AppendMessage(string.Format("PLFILT_TilesWithRiver".Translate(), AllTilesWithRiver.Count)); // get all tiles with at least one road var allTilesWithRoads = _allValidTileIds.FindAll(tileId => Find.World.grid[tileId].VisibleRoads != null && Find.World.grid[tileId].VisibleRoads.Count != 0); AllTilesWithRoad = new ReadOnlyCollection <int>(allTilesWithRoads); FilterInfoLogger.AppendMessage(string.Format("PLFILT_TilesWithRoad".Translate(), AllTilesWithRoad.Count)); OnPrefilterDone?.Invoke(); }
/// <summary> /// Do a pre-filtering of tiles on the world map. Mostly used to gather "valid" tiles (that is, tiles that are /// settleable). /// </summary> protected void Prefilter() { Log.Message($"[PrepareLanding] Prefilter: {Find.WorldGrid.tiles.Count} tiles in WorldGrid.tiles"); var separator = "-".Repeat(80); FilterInfoLogger.AppendMessage($"{separator}\nPreFiltering\n{separator}", textColor: Color.cyan); // clear all valid tile ids _allValidTileIds.Clear(); // get all valid tiles for a new settlement var tileCount = Find.World.grid.TilesCount; for (var i = 0; i < tileCount; i++) { if (!IsViableTile(i)) { continue; } _allValidTileIds.Add(i); } FilterInfoLogger.AppendMessage( $"Prefilter: {_allValidTileIds.Count} tiles remain after filter ({Find.WorldGrid.tiles.Count - _allValidTileIds.Count} removed)."); // get all tiles with at least one river var allTilesWithRivers = _allValidTileIds.FindAll( tileId => (Find.World.grid[tileId].VisibleRivers != null) && (Find.World.grid[tileId].VisibleRivers.Count != 0)); AllTilesWithRiver = new ReadOnlyCollection <int>(allTilesWithRivers); FilterInfoLogger.AppendMessage($"Prefilter: {allTilesWithRivers.Count} tiles with at least one river."); // get all tiles with at least one road var allTilesWithRoads = _allValidTileIds.FindAll(tileId => (Find.World.grid[tileId].VisibleRoads != null) && (Find.World.grid[tileId].VisibleRoads.Count != 0)); AllTilesWithRoad = new ReadOnlyCollection <int>(allTilesWithRoads); FilterInfoLogger.AppendMessage($"Prefilter: {allTilesWithRoads.Count} tiles with at least one road."); OnPrefilterDone?.Invoke(); }