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);
 });
Esempio n. 2
0
        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());
                }
            });
        }
Esempio n. 3
0
        protected Unit GetFreeWorker()
        {
            var freeWorkers = MineralWorkers.Where(x => !x.IsCarryingMinerals).Where(x => !x.IsGatheringGas);

            return(freeWorkers.FirstOrDefault() ?? OwnWorkers.FirstOrDefault(x => !x.IsGatheringGas) ?? OwnWorkers.First());
        }
Esempio n. 4
0
 protected bool IsNearWorkers(Unit u) => OwnWorkers.Where(w => w.IsGatheringMinerals || w.IsGatheringGas).Any(w => w.TilePosition.CalcApproximateDistance(u.TilePosition) < 1);