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)); }
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); }
public Activity MoveWithinRange(Target target, WRange range) { return(Fly.ToPos(target.CenterPosition)); }