Exemplo n.º 1
0
        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
                }
            }
        }
Exemplo n.º 2
0
        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
                        }
                    }
                }
            }
        }
Exemplo n.º 3
0
 public override int CheckSupport(IUnitController target)
 {
     if (HexVectorUtil.AxialDistance(unitController.SimPosition.BoardPos, target.SimPosition.BoardPos) <= 3 && target != unitController)
     {
         return(unitController.DamageOutput);
     }
     else
     {
         return(0);
     }
 }
Exemplo n.º 4
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);
        }