コード例 #1
0
        private List <Action> DefendWithWorkers(IEnumerable <UnitCalculation> attackingEnemies, int frame)
        {
            var bunkersInProgress = attackingEnemies.Where(e => e.Unit.UnitType == (uint)UnitTypes.TERRAN_BUNKER && e.Unit.BuildProgress < 1);

            if (bunkersInProgress.Count() > 0)
            {
                var bunker = bunkersInProgress.OrderByDescending(u => u.Unit.BuildProgress).FirstOrDefault();
                // attack with 8 woerkers
                if (WorkerDefenders.Count() == 0)
                {
                    var closestWokrers = ActiveUnitData.Commanders.Where(u => u.Value.UnitCalculation.UnitClassifications.Contains(UnitClassification.Worker) && u.Value.UnitRole == UnitRole.Minerals).OrderBy(d => Vector2.DistanceSquared(d.Value.UnitCalculation.Position, bunker.Position)).Take(8);
                    WorkerDefenders.AddRange(closestWokrers.Select(c => c.Value));
                    foreach (var worker in WorkerDefenders)
                    {
                        worker.UnitRole = UnitRole.Attack;
                    }
                }
                foreach (var worker in WorkerDefenders.Where(w => w.UnitCalculation.TargetPriorityCalculation.TargetPriority == TargetPriority.Retreat || w.UnitCalculation.TargetPriorityCalculation.TargetPriority == TargetPriority.FullRetreat))
                {
                    worker.UnitCalculation.TargetPriorityCalculation.TargetPriority = TargetPriority.KillBunker;
                }
                return(MicroController.Attack(WorkerDefenders, new Point2D {
                    X = bunker.Position.X, Y = bunker.Position.Y
                }, TargetingData.ForwardDefensePoint, TargetingData.MainDefensePoint, frame));
            }

            return(new List <SC2APIProtocol.Action>());
        }
コード例 #2
0
 private void StopDefendingWithWorkers()
 {
     if (WorkerDefenders.Count() > 0)
     {
         foreach (var defender in WorkerDefenders)
         {
             defender.UnitRole = UnitRole.None;
         }
         WorkerDefenders.Clear();
     }
 }