Esempio n. 1
0
        private void FillColonyWorkers(IColony colony)
        {
            var currentWorkers = colony.Workers.Count();
            var workersInQueue = intelManager.ProductionQueue.Where(u => u.UnitId == BlizzardConstants.Unit.SCV).Count();

            // Check minerals
            var optimalMineralWorkers = OptimalMineralWorkers(colony);
            var curMineralWorkers     = currentWorkers - colony.DesiredVespeneWorkers;

            if (curMineralWorkers < optimalMineralWorkers && workersInQueue < state.OwnColonies.Count)
            {
                productionManager.QueueUnit(BlizzardConstants.Unit.SCV, lowPriority: true, desiredPosition: colony.Point);
            }
            else if (intelManager.GameLoop > 600)              // Wait with more refineries.
            {
                // Check vespene
                var vespeneCapacity = VespeneWorkerCapacity(colony);
                if (intelManager.Common.Vespene > (intelManager.Common.Minerals * 0.75) && colony.DesiredVespeneWorkers > 0)
                {
                    colony.DesiredVespeneWorkers -= 1;                       // Surplus Vespene..
                }
                else if (colony.DesiredVespeneWorkers < vespeneCapacity)
                {
                    colony.DesiredVespeneWorkers += 1;                       // Allow increase production
                }
                else if (vespeneCapacity < COLONY_MAX_VESPENE_WORKERS &&
                         !intelManager.ProductionQueue.Any(u => u.UnitId == BlizzardConstants.Unit.Refinery))
                {
                    productionManager.QueueUnit(BlizzardConstants.Unit.Refinery,
                                                desiredPosition: GetRandomVespeneGeyser(colony).Point,
                                                lowPriority: true);
                }
            }
        }
Esempio n. 2
0
 private void TransferWorker(IUnit worker, IColony fromColony, IColony toColony)
 {
     fromColony.Workers.Remove(worker);
     worker.Orders.Clear();
     combatManager.Move(worker.Tag, toColony.Point);
     toColony.Workers.Add(worker);
 }
        public ColonyTests()
        {
            _antsGetter = Substitute.For <IAntsGetter>();
            _factory    = Substitute.For <IColonyAbstractFactory>();

            _factory.BuildAntsGetter().Returns(_antsGetter);

            _colony = new Core.Colony(_factory);
        }
Esempio n. 4
0
 private static ColonyData Convert(IColony colony)
 {
     return(new ColonyData
     {
         ColId = colony.Id,
         Point = colony.Point,
         IsStartingLocation = colony.IsStartingLocation,
         Minerals = { Convert(colony.Minerals.ToList()) },
         Vespene = { Convert(colony.Vespene.ToList()) },
         Structures = { Convert(colony.Structures) },
         Workers = { Convert(colony.Workers) },
         DesiredVespeneWorkers = colony.DesiredVespeneWorkers,
     });
 }
Esempio n. 5
0
        public void UpdateState(IIntelManager intelManager)
        {
            OwnColonies   = Helpers.GetOwnColonies(intelManager);
            EnemyColonies = Helpers.GetEnemyColonies(intelManager);

            BaseThreats = new Dictionary <IColony, List <IUnit> >();
            var enemyUnits = intelManager.UnitsEnemyVisible.ToList();

            foreach (var col in OwnColonies)
            {
                BaseThreats[col] = enemyUnits.Where(u => u.Point.Distance(col.Point) < 20).ToList();
            }

            RemainingSupply = intelManager.Common.FoodCap - intelManager.Common.FoodUsed;

            var minStructures = OwnColonies.Min(c => c.Structures.Count());

            LeastExpandedColony = OwnColonies.Where(c => c.Structures.Count() == minStructures).FirstOrDefault();
        }
Esempio n. 6
0
        private EconomyState GetEconomyState(IColony colony)
        {
            // TODO: something smarter. Currently consideres only minerals
            var target  = OptimalMineralWorkers(colony) + colony.DesiredVespeneWorkers;
            var current = colony.Workers.Count();

            if (current < target)
            {
                return(EconomyState.Missing);
            }
            else if (current == target)
            {
                return(EconomyState.Saturated);
            }
            else
            {
                return(EconomyState.Surplus);
            }
        }
Esempio n. 7
0
        private dynamic GetVisualizationType(IColony colony)
        {
            switch (colony.GetColonyType())
            {
            case ColonyType.Builder:
                return(visual.Builder);

            case ColonyType.Dead:
                return(visual.Dead);

            case ColonyType.Fighter:
                return(visual.Fighter);

            case ColonyType.Simple:
                return(visual.Simple);

            case ColonyType.Walker:
                return(visual.Walker);

            default:
                return(visual.Dead);
            }
        }
 public LivingAntsReporter(IColony colony)
 {
     _colony = colony;
 }
 public ReporterAbstractFactory(ICemetery cemetery, IEggsCheckerFactory eggsCheckerFactory, IColony colony)
 {
     _cemetery           = cemetery;
     _eggsCheckerFactory = eggsCheckerFactory;
     _colony             = colony;
 }
Esempio n. 10
0
        private IUnit GetRandomVespeneGeyser(IColony colony)
        {
            var geysers = colony.Vespene.ToList();

            return(geysers[rng.Next(geysers.Count)]);
        }
Esempio n. 11
0
        private IUnit GetRandomMineralPatch(IColony colony)
        {
            var patches = colony.Minerals.ToList();

            return(patches[rng.Next(patches.Count)]);
        }
Esempio n. 12
0
 private int OptimalMineralWorkers(IColony colony)
 => colony.Minerals.Count() * 2;
Esempio n. 13
0
 private int VespeneWorkerCapacity(IColony colony)
 => colony.Structures.Where(s => s.UnitType == BlizzardConstants.Unit.Refinery).Count() * 3;
Esempio n. 14
0
        public IntelResponse BundleIntel(IntelRequest request)
        {
            AbathurMap map = null;

            if (request.Map)
            {
                map = new AbathurMap {
                }
            }
            ;
            Score score = null;

            if (request.Score)
            {
                score = _intel.CurrentScore;
            }
            PlayerCommon playerCommon = null;

            if (request.Common)
            {
                playerCommon = _intel.Common;
            }
            ICollection <UpgradeData> upgradeSelf = null;

            if (request.UpgradesSelf)
            {
                upgradeSelf = _intel.UpgradesSelf;
            }
            ICollection <IUnit> alliedBuilding = null;

            if (request.BuildingsSelf)
            {
                alliedBuilding = _intel.StructuresSelf().ToList();
            }
            ICollection <IUnit> alliedWorkers = null;

            if (request.WorkersSelf)
            {
                alliedWorkers = _intel.WorkersSelf().ToList();
            }
            ICollection <IUnit> alliedUnits = null;

            if (request.WorkersSelf)
            {
                alliedUnits = _intel.UnitsSelf().ToList();
            }
            ICollection <IUnit> structuresEnemy = null;

            if (request.StructuresEnemy)
            {
                structuresEnemy = _intel.WorkersEnemy().ToList();
            }
            ICollection <IUnit> unitsEnemy = null;

            if (request.UnitsEnemy)
            {
                unitsEnemy = _intel.WorkersEnemy().ToList();
            }
            ICollection <IUnit> workersEnemy = null;

            if (request.WorkersEnemy)
            {
                workersEnemy = _intel.WorkersEnemy().ToList();
            }
            IColony primaryColony = null;

            if (request.PrimaryColony)
            {
                primaryColony = _intel.PrimaryColony;
            }
            IEnumerable <IColony> colonies = null;

            if (request.Colonies)
            {
                colonies = _intel.Colonies;
            }
            ICollection <IUnit> mineralFields = null;

            if (request.MineralFields)
            {
                mineralFields = _intel.MineralFields.ToList();
            }
            ICollection <IUnit> vespeneGeysers = null;

            if (request.VespeneGeysers)
            {
                vespeneGeysers = _intel.VespeneGeysers.ToList();
            }
            ICollection <IUnit> destructibles = null;

            if (request.Destructibles)
            {
                destructibles = _intel.Destructibles().ToList();
            }
            ICollection <UnitTypeData> productionQueue = null;

            if (request.ProductionQueue)
            {
                productionQueue = _intel.ProductionQueue.ToList();
            }
            IEnumerable <Squad> squads = null;

            if (request.Squads)
            {
                squads = _squadRepo.Get();
            }
            uint gameloop = 0;

            if (request.GameLoop)
            {
                gameloop = _intel.GameLoop;
            }

            return(new IntelResponse {
                Map = map,
                Score = score,
                Common = playerCommon,
                UpgradesSelf = { upgradeSelf },
                BuildingsSelf = { Convert(alliedBuilding) },
                WorkersSelf = { Convert(alliedWorkers) },
                UnitsSelf = { Convert(alliedUnits) },
                StructuresEnemy = { Convert(structuresEnemy) },
                WorkersEnemy = { Convert(workersEnemy) },
                UnitsEnemy = { Convert(unitsEnemy) },
                PrimaryColony = Convert(primaryColony),
                Colonies = { Convert(colonies.ToList()) },
                MineralFields = { Convert(mineralFields) },
                VespeneGeysers = { Convert(vespeneGeysers) },
                Destructibles = { Convert(destructibles) },
                ProductionQueue = { productionQueue },
                Squads = { squads.Select(Convert) },
                GameLoop = gameloop
            });
        }