Example #1
0
        public static Vector2 GetNearestEmptyBuildingLocation(Vector2 _currentLocation)
        {
            List <BuildingLocation> emptyLocations;

            GameData.GetBuildingLocations(BuildingType.NONE, out emptyLocations);
            int smallestDistance             = 9999999;
            BuildingLocation nearestLocation = null;

            foreach (BuildingLocation _location in emptyLocations)
            {
                float distance = Math.Abs(Vector2.GetDistance(_currentLocation, _location.m_position).GetLength());
                if (distance < smallestDistance)
                {
                    smallestDistance = (int)distance;
                    nearestLocation  = _location;
                }
            }

            if (nearestLocation != null)
            {
                return(nearestLocation.m_position);
            }
            else
            {
                return(Vector2.zero);
            }
        }
Example #2
0
        public void EvaluateBuildingLocation(BuildingLocation _location)
        {
            float totalRating = 0;

            foreach (Heuristic _heuristic in m_buildingHeursticList)
            {
                totalRating += _heuristic.GetRating(_location);
            }
            _location.m_buildingPriorityRating = (int)totalRating;
        }
        public override float GetRating <T>(T _evaluatedObject)
        {
            BuildingLocation location = _evaluatedObject as BuildingLocation;

            if (location == null)
            {
                return(0);
            }
            if (StrategyManager.GetDesiredBuildingType() == location.m_idealBuildingType)
            {
                return(HeuristicData.IDEAL_IS_DESIRED_RATING);
            }
            else
            {
                return(0);
            }
        }
        public override float GetRating <T>(T _evaluatedObject)
        {
            BuildingLocation location = _evaluatedObject as BuildingLocation;

            if (location == null)
            {
                return(0);
            }

            if (location.m_buildingType == BuildingType.NONE)
            {
                return(HeuristicData.LOCATION_UNOCCUPIED_RATING);
            }
            else
            {
                return(0);
            }
        }
        //Moves to nearest empty location and builds a knight barracks
        public static string GetBasicQueenStrategy()
        {
            string           queenInstructions = "WAIT";
            BuildingLocation bestLocation      = null;

            if (!GameData.m_upgradingMine)
            {
                bestLocation      = m_evaluationSystem.GetBestBuildingLocation();
                queenInstructions = Helpers.GetQueenMoveCommand(Helpers.VerifyAndAvoidCollisions(bestLocation));
            }
            else if (GameData.m_touchedSite == -1)
            {
                GameData.m_upgradingMine = false;
            }
            //The queen is at a building location
            if (GameData.m_touchedSite != -1 && (GameData.m_upgradingMine || GameData.m_touchedSite == bestLocation.m_siteId))
            {
                BuildingLocation touchedLocation = GameData.GetBuilding(GameData.m_touchedSite);
                if (!GameData.m_upgradingMine && touchedLocation.m_buildingType != BuildingType.MINE && m_evaluationSystem.BarracksRequired())
                {
                    queenInstructions = Helpers.GetBuildCommand(touchedLocation, BuildingType.BARRACKS_KNIGHT);
                }
                else
                {
                    if (!GameData.m_upgradingMine && touchedLocation.m_idealBuildingType == BuildingType.MINE)
                    {
                        GameData.m_upgradingMine = true;
                        if (touchedLocation.m_goldRemaining <= 2)
                        {
                            touchedLocation.m_idealBuildingType = BuildingType.TOWER;
                        }
                    }
                    else if (touchedLocation.m_level >= (touchedLocation.m_maxYield - 1 < HeuristicData.MAX_MINE_UPGRADE_LEVEL - 1 ?
                                                         touchedLocation.m_maxYield - 1: HeuristicData.MAX_MINE_UPGRADE_LEVEL - 1))
                    {
                        GameData.m_upgradingMine = false;
                    }
                    queenInstructions = Helpers.GetBuildCommand(touchedLocation);
                }
            }
            return(queenInstructions);
        }
Example #6
0
        internal static Vector2 VerifyAndAvoidCollisions(BuildingLocation _target)
        {
            Unit    queen          = GameData.m_friendlyQueen;
            Vector2 direction      = (Vector2.GetDistance(queen.m_position, _target.m_position).Normalized() * GameData.m_queenAvoidanceRange);
            Vector2 targetPosition = queen.m_position + direction;

            List <Entity> entityList;

            GameData.GetAllEntities(out entityList);

            float lastAvoidanceAngle = 0;

            while (true)
            {
                foreach (Entity _entity in entityList)
                {
                    if (_entity == queen || _entity == _target)
                    {
                        continue;
                    }
                    Vector2 distanceToEntity = Vector2.GetDistance(targetPosition, _entity.m_position);
                    float   avoidanceRadius  = _entity.m_radius + queen.m_radius;
                    if (distanceToEntity.GetLength() < avoidanceRadius * avoidanceRadius)
                    {
                        float outAvoidanceAngle = 0;
                        targetPosition     = GetAvoidanceDestination(direction, distanceToEntity, avoidanceRadius, lastAvoidanceAngle, out outAvoidanceAngle);
                        lastAvoidanceAngle = outAvoidanceAngle;
                        direction          = (Vector2.GetDistance(queen.m_position, targetPosition).Normalized() * (GameData.m_queenAvoidanceRange));
                        break;
                    }
                }
                break;
            }

            return(targetPosition);
        }
Example #7
0
 internal static string GetBuildCommand(BuildingLocation _location, BuildingType _override = BuildingType.NONE)
 {
     return(string.Format("BUILD {0} {1}", _location.m_siteId, GetNameFromType(_override == BuildingType.NONE? _location.m_idealBuildingType : _override)));
 }