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); } } }
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); }
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, }); }
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(); }
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); } }
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; }
private IUnit GetRandomVespeneGeyser(IColony colony) { var geysers = colony.Vespene.ToList(); return(geysers[rng.Next(geysers.Count)]); }
private IUnit GetRandomMineralPatch(IColony colony) { var patches = colony.Minerals.ToList(); return(patches[rng.Next(patches.Count)]); }
private int OptimalMineralWorkers(IColony colony) => colony.Minerals.Count() * 2;
private int VespeneWorkerCapacity(IColony colony) => colony.Structures.Where(s => s.UnitType == BlizzardConstants.Unit.Refinery).Count() * 3;
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 }); }