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); }
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)); }
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)); }