コード例 #1
0
        public override Activity Tick(Actor self)
        {
            if (!Target.IsValid)
            {
                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.ToPx(Target.CenterLocation),
                    new FlyTimed(50));
            }
            inner = Util.RunActivity(self, inner);

            return(this);
        }
コード例 #2
0
        public override Activity Tick(Actor self)
        {
            if (IsCanceled)
            {
                return(NextActivity);
            }
            if (!isCalculated)
            {
                Calculate(self);
            }
            if (dest == null)
            {
                var rearmBuildings = self.Info.Traits.Get <PlaneInfo>().RearmBuildings;
                var nearestAfld    = self.World.ActorsWithTrait <Reservable>()
                                     .Where(a => a.Actor.Owner == self.Owner && rearmBuildings.Contains(a.Actor.Info.Name))
                                     .Select(a => a.Actor)
                                     .ClosestTo(self.CenterLocation);

                self.CancelActivity();
                return(Util.SequenceActivities(Fly.ToCell(nearestAfld.Location), new FlyCircle()));
            }

            return(Util.SequenceActivities(
                       Fly.ToPx(w1),
                       Fly.ToPx(w2),
                       Fly.ToPx(w3),
                       new Land(Target.FromActor(dest)),
                       NextActivity));
        }
コード例 #3
0
        public override Activity Tick(Actor self)
        {
            if (IsCanceled)
            {
                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.ToPx(w1),
                       Fly.ToPx(w2),
                       Fly.ToPx(w3),
                       new Land(Target.FromActor(dest)),
                       NextActivity));
        }