public override void Execute() => OwnWorkers.Where(w => w.IsIdle) .Where(w => !MyUnits.TrackedUnits.ContainsKey(w) || !MyUnits.TrackedUnits[w].StartsWith("MoveDroneTo")) .ForEach(w => { MyUnits.SetActivity(w, nameof(IdleWorkersToMineral)); GatherClosestMineral(w); });
public override void Execute() { OwnWorkers.Where(u => u.IsUnderAttack).ForEach(worker => { var closeUnits = worker.UnitsInRadius(64); var closeEnemyUnits = closeUnits.Where(Game.Enemy.Units.Contains).ToList(); if (!closeEnemyUnits.Any()) { return; } var closeAlliedUnits = closeUnits.Where(Game.Self.Units.Contains) .Where(w => w.IsGatheringMinerals || w.IsGatheringGas).Where(w => !ShouldFlee(w)); closeAlliedUnits.ForEach(u => { MyUnits.SetActivity(u, nameof(WorkersAttackClosestEnemy)); u.Attack(closeEnemyUnits.First(), false); }); if (ShouldFlee(worker)) { GatherBaseMineralFarFromAttacker(worker, closeEnemyUnits.First()); } }); }
protected Unit GetFreeWorker() { var freeWorkers = MineralWorkers.Where(x => !x.IsCarryingMinerals).Where(x => !x.IsGatheringGas); return(freeWorkers.FirstOrDefault() ?? OwnWorkers.FirstOrDefault(x => !x.IsGatheringGas) ?? OwnWorkers.First()); }
protected bool IsNearWorkers(Unit u) => OwnWorkers.Where(w => w.IsGatheringMinerals || w.IsGatheringGas).Any(w => w.TilePosition.CalcApproximateDistance(u.TilePosition) < 1);