public override IEnumerable <Order> Order(World world, CPos cell, int2 worldPixel, MouseInput mi) { if (mi.Button != Game.Settings.Game.MouseButtonPreference.Action) { world.CancelInputMode(); } else { var technician = this.technicians.OrderBy(e => (e.CenterPosition - world.Map.CenterOfCell(cell)).Length).FirstOrDefault(); if (technician == null) { yield break; } var actor = world.ActorMap.GetActorsAt(cell).FirstOrDefault(a => TechnicianUtils.CanEnter(technician, a)); if (actor == null) { yield break; } yield return(new(TechnicianEnterOrderTargeter.Id, technician, Target.FromActor(actor), true)); } }
public override bool Tick(Actor self) { if (!this.IsCanceling && !TechnicianUtils.CanEnter(self, this.target)) { this.Cancel(self, true); } return(base.Tick(self)); }
public override bool CanTargetActor(Actor self, Actor target, TargetModifiers modifiers, ref string cursor) { if (TechnicianUtils.CanEnter(self, target)) { cursor = cursorAllowed; return(true); } cursor = cursorForbidden; return(false); }
public override string GetCursor(World world, CPos cell, int2 worldPixel, MouseInput mi) { var technician = technicians.OrderBy(e => (e.CenterPosition - world.Map.CenterOfCell(cell)).Length).FirstOrDefault(); if (technician == null) { return(null); } var actor = world.ActorMap.GetActorsAt(cell).FirstOrDefault(a => TechnicianUtils.CanEnter(technician, a)); var info = technician.Info.TraitInfo <TechnicianInfo>(); return(actor != null ? info.Cursor : info.BlockedCursor); }