public void AssignFloodPlains(IEnumerable <IHexCell> cells) { foreach (var cell in cells) { if (RiverCanon.HasRiver(cell) && cell.Terrain == CellTerrain.Desert && ModLogic.CanChangeTerrainOfCell(cell, CellTerrain.FloodPlains) ) { ModLogic.ChangeTerrainOfCell(cell, CellTerrain.FloodPlains); } } }
protected override void EditCell(IHexCell cell) { if (IsPaintingTerrain && CellModificationLogic.CanChangeTerrainOfCell(cell, ActiveTerrain)) { CellModificationLogic.ChangeTerrainOfCell(cell, ActiveTerrain); } }
private Func <IHexCell, bool> GetLakeCandidateFilter(MapRegion region) { return(delegate(IHexCell cell) { if (cell.Terrain != CellTerrain.Snow && cell.Terrain != CellTerrain.Desert && !cell.Terrain.IsWater() && ModLogic.CanChangeTerrainOfCell(cell, CellTerrain.FreshWater) ) { bool surroundedByLandOrLakes = Grid.GetNeighbors(cell).All( neighbor => neighbor.Terrain != CellTerrain.ShallowWater && neighbor.Terrain != CellTerrain.DeepWater ); bool hasResourceNode = NodePositionCanon.GetPossessionsOfOwner(cell).Any(); bool fewNearbylakes = Grid.GetCellsInRadius(cell, 2).Count( nearby => nearby.Terrain == CellTerrain.FreshWater ) < MaxNearbyLakes; bool noAdjacentDesert = !Grid.GetNeighbors(cell).Any(neighbor => neighbor.Terrain == CellTerrain.Desert); return surroundedByLandOrLakes && !hasResourceNode && fewNearbylakes && noAdjacentDesert; } else { return false; } }); }
private bool CandidateFilter(IHexCell cell) { return(!RiverCanon.HasRiver(cell) && !NodeLocationCanon.GetPossessionsOfOwner(cell).Any() && ModLogic.CanChangeTerrainOfCell(cell, CellTerrain.ShallowWater) && Grid.GetNeighbors(cell).Any(neighbor => neighbor.Terrain == CellTerrain.ShallowWater) && !Grid.GetNeighbors(cell).Any(neighbor => neighbor.Terrain == CellTerrain.FreshWater)); }