private void IncreseGlobalInfluence() { ChangeTileState tileFunc = ChangeGlobalInfluenceInTile; foreach (var buildingPos in Capitals) { if (GameFieldTiles.instance.tiles[buildingPos].GameFieldTileType == GameTile.TileType.Structure && GameFieldTiles.instance.tiles[buildingPos].StructType == GameTile.StructureType.Capital) { ChangelInfluenceByBuilding(buildingPos, GameFieldTiles.instance.tiles[buildingPos].BuildingLvl + 3, GameFieldTiles.instance.tiles[buildingPos].OwnerId, tileFunc); } } foreach (var buildingPos in InvadeBuildings) { if (GameFieldTiles.instance.tiles[buildingPos].GameFieldTileType == GameTile.TileType.Structure && GameFieldTiles.instance.tiles[buildingPos].StructType == GameTile.StructureType.InvadeBld) { ChangelInfluenceByBuilding(buildingPos, GameFieldTiles.instance.tiles[buildingPos].BuildingLvl + 1, GameFieldTiles.instance.tiles[buildingPos].OwnerId, tileFunc); } } }
private void ExpandBorders() { ChangeTileState tileFunc = ExpandBordersInTile; foreach (var buildingPos in Capitals) { if (GameFieldTiles.instance.tiles[buildingPos].GameFieldTileType == GameTile.TileType.Structure && GameFieldTiles.instance.tiles[buildingPos].StructType == GameTile.StructureType.Capital) { ChangelInfluenceByBuilding(buildingPos, GameFieldTiles.instance.tiles[buildingPos].BuildingLvl + 3, GameFieldTiles.instance.tiles[buildingPos].OwnerId, tileFunc); } } foreach (var buildingPos in OcupyBuildings) { if (GameFieldTiles.instance.tiles[buildingPos].GameFieldTileType == GameTile.TileType.Structure && GameFieldTiles.instance.tiles[buildingPos].StructType == GameTile.StructureType.OcupyBld) { ChangelInfluenceByBuilding(buildingPos, GameFieldTiles.instance.tiles[buildingPos].BuildingLvl + 1, GameFieldTiles.instance.tiles[buildingPos].OwnerId, tileFunc); } } }
private void ChangelInfluenceByBuilding(Vector3Int tilePos, int influenceValue, int playerId, ChangeTileState tileFunc) { BfQueue.Clear(); BfQueue.Enqueue(tilePos); VisitedFields.Clear(); VisitedFields.Add(tilePos); while (BfQueue.Count != 0) { Vector3Int currentField = BfQueue.Dequeue(); int distanceFromBuilding = GameFieldTiles.instance.TileDistance(tilePos, currentField); GameTile gameTile = GameFieldTiles.instance.tiles[currentField]; if (gameTile.GameFieldTileType == GameTile.TileType.Border) { continue; } tileFunc(gameTile, influenceValue - distanceFromBuilding + 1, playerId); if (distanceFromBuilding < influenceValue) { for (int i = 0; i < 6; i++) { Vector3Int nextField = GameFieldTiles.instance.OddrOffsetNeighbor(currentField, i); if (!VisitedFields.Contains(nextField)) { //Debug.Log("added: " + nextField); VisitedFields.Add(nextField); BfQueue.Enqueue(nextField); } } } } }