コード例 #1
0
ファイル: ReturnToBase.cs プロジェクト: epicelite/OpenRA
        public override Activity Tick(Actor self)
        {
            if (IsCanceled || self.IsDead())
            {
                return(NextActivity);
            }

            if (!isCalculated)
            {
                Calculate(self);
            }

            if (dest == null)
            {
                var nearestAfld = ChooseAirfield(self, false);

                self.CancelActivity();
                if (nearestAfld != null)
                {
                    return(Util.SequenceActivities(Fly.ToCell(nearestAfld.Location), new FlyCircle()));
                }
                else
                {
                    return(new FlyCircle());
                }
            }

            return(Util.SequenceActivities(
                       Fly.ToPos(w1),
                       Fly.ToPos(w2),
                       Fly.ToPos(w3),
                       new Land(Target.FromActor(dest)),
                       NextActivity));
        }
コード例 #2
0
ファイル: FlyAttack.cs プロジェクト: epicelite/OpenRA
        public override Activity Tick(Actor self)
        {
            if (!target.IsValidFor(self))
            {
                Cancel(self);
            }

            var limitedAmmo = self.TraitOrDefault <LimitedAmmo>();

            if (limitedAmmo != null && !limitedAmmo.HasAmmo())
            {
                Cancel(self);
            }

            var attack = self.TraitOrDefault <AttackPlane>();

            if (attack != null)
            {
                attack.DoAttack(self, target);
            }

            if (inner == null)
            {
                if (IsCanceled)
                {
                    return(NextActivity);
                }

                inner = Util.SequenceActivities(Fly.ToPos(target.CenterPosition), new FlyTimed(50));
            }

            inner = Util.RunActivity(self, inner);

            return(this);
        }
コード例 #3
0
 public Activity MoveWithinRange(Target target, WRange range)
 {
     return(Fly.ToPos(target.CenterPosition));
 }