private void MapDistancesToGoal() { HexEntry goalHex = null; foreach (HexEntry hex in scenarioLoader.HexGrid.Values) { if (hex.Terrain == Terrain.Goal) { goalHex = hex; } hex.aiDistanceToGoal = int.MaxValue; } if (goalHex == null) { Debug.Log("No goal"); return; } foreach (HexEntry hex in scenarioLoader.HexGrid.Values) { if (hex != goalHex) { hex.aiDistanceToGoal = (int)HexVectorUtil.AxialDistance(goalHex.BoardPos, hex.BoardPos); } else { hex.aiDistanceToGoal = -10; // Used because the distance is a direct weighting factor } } }
private void PopulateHexDistancesToEnemies(int player) { // Reset hex distances foreach (HexEntry hex in scenarioLoader.HexGrid.Values) { hex.AIDistanceToEnemy = int.MaxValue; hex.aiAdjacentEnemies = 0; } foreach (int p in selectionManager.UnitsByPlayer.Keys) { if (p == player) // Only enemy units { continue; } foreach (IUnitController unit in selectionManager.UnitsByPlayer[p]) { foreach (HexEntry hex in scenarioLoader.HexGrid.Values) { int distanceToUnit = (int)HexVectorUtil.AxialDistance(unit.Position.BoardPos, hex.BoardPos); if (distanceToUnit < hex.AIDistanceToEnemy) { hex.AIDistanceToEnemy = distanceToUnit; // Update nearest enemy distance } if (distanceToUnit == 1) { hex.aiAdjacentEnemies++; // Update adjacent enemies } } } } }
public override int CheckSupport(IUnitController target) { if (HexVectorUtil.AxialDistance(unitController.SimPosition.BoardPos, target.SimPosition.BoardPos) <= 3 && target != unitController) { return(unitController.DamageOutput); } else { return(0); } }
public override int CheckRetal(List <HexEntry> recentPath, IUnitController enemy) { if (recentPath.Count < 2 || enemy.PlayerOwner == unitController.PlayerOwner) { return(0); } HexEntry current = recentPath[recentPath.Count - 1]; HexEntry last = recentPath[recentPath.Count - 2]; if (HexVectorUtil.AxialDistance(current.BoardPos, unitController.SimPosition.BoardPos) == 3) { if (HexVectorUtil.AxialDistance(last.BoardPos, unitController.SimPosition.BoardPos) > 3) { return(unitController.DamageOutput); } } return(0); }