public void BeginTargeting(ITargetingSource source, ITargetingSource parent = null) { if (source.Targetable) { targetingSource = source; targetingSourceAdditionalPawns = new List <Pawn>(); } else { Verb getVerb = source.GetVerb; if (getVerb.verbProps.nonInterruptingSelfCast) { getVerb.TryStartCastOn(getVerb.Caster); return; } Job job = JobMaker.MakeJob(JobDefOf.UseVerbOnThing, getVerb.Caster); job.verbToUse = getVerb; source.CasterPawn.jobs.StartJob(job, JobCondition.InterruptForced); } action = null; caster = null; targetParams = null; actionWhenFinished = null; mouseAttachment = null; targetingSourceParent = parent; needsStopTargetingCall = false; }
protected override TargetingParameters GetTargetingParameters() { TargetingParameters targetingParameters = base.GetTargetingParameters(); targetingParameters.validator = ((TargetInfo targ) => BaseTargetValidator(targ.Thing) && ((targ.Thing as Pawn)?.RaceProps.Animal ?? false)); return(targetingParameters); }
private static Gizmo GetMeleeAttackGizmo(Pawn pawn) { Command_Target command_Target = new Command_Target(); command_Target.defaultLabel = "CommandMeleeAttack".Translate(); command_Target.defaultDesc = "CommandMeleeAttackDesc".Translate(); command_Target.targetingParams = TargetingParameters.ForAttackAny(); command_Target.hotKey = KeyBindingDefOf.Misc2; command_Target.icon = TexCommand.AttackMelee; if (FloatMenuUtility.GetMeleeAttackAction(pawn, LocalTargetInfo.Invalid, out string failStr) == null) { command_Target.Disable(failStr.CapitalizeFirst() + "."); } command_Target.action = delegate(Thing target) { IEnumerable <Pawn> enumerable = Find.Selector.SelectedObjects.Where(delegate(object x) { Pawn pawn2 = x as Pawn; return(pawn2 != null && pawn2.IsColonistPlayerControlled && pawn2.Drafted); }).Cast <Pawn>(); foreach (Pawn item in enumerable) { FloatMenuUtility.GetMeleeAttackAction(item, target, out string _)?.Invoke(); } }; return(command_Target); }
private static Gizmo GetSquadAttackGizmo(Pawn pawn) { Command_Target command_Target = new Command_Target(); command_Target.defaultLabel = "CommandSquadAttack".Translate(); command_Target.defaultDesc = "CommandSquadAttackDesc".Translate(); command_Target.targetingParams = TargetingParameters.ForAttackAny(); command_Target.hotKey = KeyBindingDefOf.Misc1; command_Target.icon = TexCommand.SquadAttack; string str; if (FloatMenuUtility.GetAttackAction(pawn, LocalTargetInfo.Invalid, out str) == null) { command_Target.Disable(str.CapitalizeFirst() + "."); } command_Target.action = delegate(Thing target) { IEnumerable <Pawn> enumerable = Find.Selector.SelectedObjects.Where(delegate(object x) { Pawn pawn3 = x as Pawn; return(pawn3 != null && pawn3.IsColonistPlayerControlled && pawn3.Drafted); }).Cast <Pawn>(); foreach (Pawn pawn2 in enumerable) { string text; Action attackAction = FloatMenuUtility.GetAttackAction(pawn2, target, out text); if (attackAction != null) { attackAction(); } } }; return(command_Target); }
public static TargetingParameters ForAttackHostile() { TargetingParameters targetingParameters = new TargetingParameters(); targetingParameters.canTargetPawns = true; targetingParameters.canTargetBuildings = true; targetingParameters.canTargetItems = true; targetingParameters.mapObjectTargetsMustBeAutoAttackable = true; targetingParameters.validator = delegate(TargetInfo targ) { if (!targ.HasThing) { return(false); } if (targ.Thing.HostileTo(Faction.OfPlayer)) { return(true); } Pawn pawn = targ.Thing as Pawn; if (pawn != null && pawn.NonHumanlikeOrWildMan()) { return(true); } return(false); }; return(targetingParameters); }
public static TargetingParameters ForArrest(Pawn arrester) { TargetingParameters targetingParameters = new TargetingParameters(); targetingParameters.canTargetPawns = true; targetingParameters.canTargetBuildings = false; targetingParameters.mapObjectTargetsMustBeAutoAttackable = false; targetingParameters.validator = delegate(TargetInfo targ) { if (!targ.HasThing) { return(false); } Pawn pawn = targ.Thing as Pawn; if (pawn != null && pawn != arrester && pawn.CanBeArrestedBy(arrester)) { if (pawn.Downed) { return(false); } return(true); } return(false); }; return(targetingParameters); }
private void BeginCallAid(Pawn caller, Map map, Faction faction, bool free, float biocodeChance = 1f) { targetingParameters = new TargetingParameters(); targetingParameters.canTargetLocations = true; targetingParameters.canTargetSelf = false; targetingParameters.canTargetPawns = false; targetingParameters.canTargetFires = false; targetingParameters.canTargetBuildings = false; targetingParameters.canTargetItems = false; targetingParameters.validator = delegate(TargetInfo target) { if (def.royalAid.targetingRange > 0f && target.Cell.DistanceTo(caller.Position) > def.royalAid.targetingRange) { return(false); } if (target.Cell.Fogged(map) || !DropCellFinder.CanPhysicallyDropInto(target.Cell, map, canRoofPunch: true)) { return(false); } return(target.Cell.GetEdifice(map) == null && !target.Cell.Impassable(map)); }; this.caller = caller; this.map = map; calledFaction = faction; this.free = free; this.biocodeChance = biocodeChance; Find.Targeter.BeginTargeting(this); }
private static Gizmo GetMeleeAttackGizmo(Pawn pawn) { Command_Target command_Target = new Command_Target(); command_Target.defaultLabel = "CommandMeleeAttack".Translate(); command_Target.defaultDesc = "CommandMeleeAttackDesc".Translate(); command_Target.targetingParams = TargetingParameters.ForAttackAny(); command_Target.hotKey = KeyBindingDefOf.Misc2; command_Target.icon = TexCommand.AttackMelee; if (FloatMenuUtility.GetMeleeAttackAction(pawn, LocalTargetInfo.Invalid, out var failStr) == null) { command_Target.Disable(failStr.CapitalizeFirst() + "."); } command_Target.action = delegate(Thing target) { foreach (Pawn item in Find.Selector.SelectedObjects.Where(delegate(object x) { Pawn pawn2 = x as Pawn; return(pawn2 != null && pawn2.IsColonistPlayerControlled && pawn2.Drafted); }).Cast <Pawn>()) { string failStr2; Action meleeAttackAction = FloatMenuUtility.GetMeleeAttackAction(item, target, out failStr2); if (meleeAttackAction != null) { meleeAttackAction(); } else if (!failStr2.NullOrEmpty()) { Messages.Message(failStr2, target, MessageTypeDefOf.RejectInput, historical: false); } } }; return(command_Target); }
protected override TargetingParameters GetTargetingParameters() { TargetingParameters targetingParameters = new TargetingParameters(); targetingParameters.canTargetPawns = true; targetingParameters.canTargetBuildings = false; targetingParameters.validator = ((TargetInfo x) => base.BaseTargetValidator(x.Thing)); return(targetingParameters); }
public static TargetingParameters ForRescue(Pawn p) { TargetingParameters targetingParameters = new TargetingParameters(); targetingParameters.canTargetPawns = true; targetingParameters.onlyTargetIncapacitatedPawns = true; targetingParameters.canTargetBuildings = false; targetingParameters.mapObjectTargetsMustBeAutoAttackable = false; return(targetingParameters); }
public static TargetingParameters ForOpen(Pawn p) { TargetingParameters targetingParameters = new TargetingParameters(); targetingParameters.canTargetPawns = false; targetingParameters.canTargetBuildings = true; targetingParameters.mapObjectTargetsMustBeAutoAttackable = false; targetingParameters.validator = ((TargetInfo x) => (x.Thing as IOpenable)?.CanOpen ?? false); return(targetingParameters); }
public static TargetingParameters ForStrip(Pawn p) { TargetingParameters targetingParameters = new TargetingParameters(); targetingParameters.canTargetPawns = true; targetingParameters.canTargetItems = true; targetingParameters.mapObjectTargetsMustBeAutoAttackable = false; targetingParameters.validator = ((TargetInfo targ) => targ.HasThing && StrippableUtility.CanBeStrippedByColony(targ.Thing)); return(targetingParameters); }
public static TargetingParameters ForAttackAny() { TargetingParameters targetingParameters = new TargetingParameters(); targetingParameters.canTargetPawns = true; targetingParameters.canTargetBuildings = true; targetingParameters.canTargetItems = true; targetingParameters.mapObjectTargetsMustBeAutoAttackable = true; return(targetingParameters); }
public void BeginTargeting(TargetingParameters targetParams, Action <LocalTargetInfo> action, Pawn caster = null, Action actionWhenFinished = null, Texture2D mouseAttachment = null) { this.targetingVerb = null; this.targetingVerbAdditionalPawns = null; this.action = action; this.targetParams = targetParams; this.caster = caster; this.actionWhenFinished = actionWhenFinished; this.mouseAttachment = mouseAttachment; }
public static TargetingParameters ForSelf(Pawn p) { TargetingParameters targetingParameters = new TargetingParameters(); targetingParameters.targetSpecificThing = p; targetingParameters.canTargetPawns = false; targetingParameters.canTargetBuildings = false; targetingParameters.mapObjectTargetsMustBeAutoAttackable = false; return(targetingParameters); }
protected override TargetingParameters GetTargetingParameters() { TargetingParameters targetingParameters = new TargetingParameters(); targetingParameters.canTargetPawns = false; targetingParameters.canTargetBuildings = false; targetingParameters.canTargetItems = true; targetingParameters.mapObjectTargetsMustBeAutoAttackable = false; targetingParameters.validator = ((TargetInfo x) => x.Thing is Corpse && BaseTargetValidator(x.Thing)); return(targetingParameters); }
public void StopTargeting() { if (actionWhenFinished != null) { Action obj = actionWhenFinished; actionWhenFinished = null; obj(); } targetingSource = null; action = null; targetParams = null; }
public void BeginTargeting(TargetingParameters targetParams, Action <LocalTargetInfo> action, Pawn caster = null, Action actionWhenFinished = null, Texture2D mouseAttachment = null) { targetingSource = null; targetingSourceParent = null; targetingSourceAdditionalPawns = null; this.action = action; this.targetParams = targetParams; this.caster = caster; this.actionWhenFinished = actionWhenFinished; this.mouseAttachment = mouseAttachment; needsStopTargetingCall = false; }
public static TargetingParameters ForDropPodsDestination() { TargetingParameters targetingParameters = new TargetingParameters(); targetingParameters.canTargetLocations = true; targetingParameters.canTargetSelf = false; targetingParameters.canTargetPawns = false; targetingParameters.canTargetFires = false; targetingParameters.canTargetBuildings = false; targetingParameters.canTargetItems = false; targetingParameters.validator = ((TargetInfo x) => DropCellFinder.IsGoodDropSpot(x.Cell, x.Map, false, true)); return(targetingParameters); }
private IEnumerable <object> SelectableObjectsUnderMouse() { Vector2 mousePos = UI.MousePositionOnUIInverted; Thing colonistOrCorpse = Find.ColonistBar.ColonistOrCorpseAt(mousePos); if (colonistOrCorpse != null && colonistOrCorpse.Spawned) { yield return(colonistOrCorpse); yield break; } if (!UI.MouseCell().InBounds(Find.CurrentMap)) { yield break; } TargetingParameters selectParams = new TargetingParameters(); selectParams.mustBeSelectable = true; selectParams.canTargetPawns = true; selectParams.canTargetBuildings = true; selectParams.canTargetItems = true; selectParams.mapObjectTargetsMustBeAutoAttackable = false; List <Thing> selectableList = GenUI.ThingsUnderMouse(UI.MouseMapPosition(), 1f, selectParams); if (selectableList.Count > 0 && selectableList[0] is Pawn) { if ((selectableList[0].DrawPos - UI.MouseMapPosition()).MagnitudeHorizontal() < 0.4f) { for (int j = selectableList.Count - 1; j >= 0; j--) { Thing thing = selectableList[j]; if (thing.def.category == ThingCategory.Pawn && (thing.DrawPos - UI.MouseMapPosition()).MagnitudeHorizontal() > 0.4f) { selectableList.Remove(thing); } } } } for (int i = 0; i < selectableList.Count; i++) { yield return(selectableList[i]); } Zone z = Find.CurrentMap.zoneManager.ZoneAt(UI.MouseCell()); if (z != null) { yield return(z); } yield break; }
public static TargetingParameters ForOpen(Pawn p) { TargetingParameters targetingParameters = new TargetingParameters(); targetingParameters.canTargetPawns = false; targetingParameters.canTargetBuildings = true; targetingParameters.mapObjectTargetsMustBeAutoAttackable = false; targetingParameters.validator = delegate(TargetInfo x) { IOpenable openable = x.Thing as IOpenable; return(openable != null && openable.CanOpen); }; return(targetingParameters); }
protected override TargetingParameters GetTargetingParameters() { TargetingParameters targetingParameters = base.GetTargetingParameters(); targetingParameters.validator = delegate(TargetInfo targ) { if (!BaseTargetValidator(targ.Thing)) { return(false); } return((targ.Thing as Pawn)?.RaceProps.Animal ?? false); }; return(targetingParameters); }
public override IEnumerable <Thing> GetTargets(Thing targetChosenByPlayer = null) { if (this.parent.MapHeld != null) { TargetingParameters tp = this.GetTargetingParameters(); foreach (Pawn p in this.parent.MapHeld.mapPawns.AllPawnsSpawned) { if (tp.CanTarget(p)) { yield return(p); } } } }
private IEnumerable <object> SelectableObjectsUnderMouse() { Vector2 mousePos = UI.MousePositionOnUIInverted; Thing colonistOrCorpse = Find.ColonistBar.ColonistOrCorpseAt(mousePos); if (colonistOrCorpse != null && colonistOrCorpse.Spawned) { yield return((object)colonistOrCorpse); /*Error: Unable to find new state assignment for yield return*/; } if (UI.MouseCell().InBounds(Find.VisibleMap)) { TargetingParameters selectParams = new TargetingParameters { mustBeSelectable = true, canTargetPawns = true, canTargetBuildings = true, canTargetItems = true, mapObjectTargetsMustBeAutoAttackable = false }; List <Thing> selectableList = GenUI.ThingsUnderMouse(UI.MouseMapPosition(), 1f, selectParams); if (selectableList.Count > 0 && selectableList[0] is Pawn && (selectableList[0].DrawPos - UI.MouseMapPosition()).MagnitudeHorizontal() < 0.40000000596046448) { for (int num = selectableList.Count - 1; num >= 0; num--) { Thing thing = selectableList[num]; if (thing.def.category == ThingCategory.Pawn && (thing.DrawPos - UI.MouseMapPosition()).MagnitudeHorizontal() > 0.40000000596046448) { selectableList.Remove(thing); } } } int i = 0; if (i < selectableList.Count) { yield return((object)selectableList[i]); /*Error: Unable to find new state assignment for yield return*/; } Zone z = Find.VisibleMap.zoneManager.ZoneAt(UI.MouseCell()); if (z == null) { yield break; } yield return((object)z); /*Error: Unable to find new state assignment for yield return*/; } }
public static TargetingParameters ForQuestPawnsWhoWillJoinColony(Pawn p) { TargetingParameters targetingParameters = new TargetingParameters(); targetingParameters.canTargetPawns = true; targetingParameters.canTargetBuildings = false; targetingParameters.mapObjectTargetsMustBeAutoAttackable = false; targetingParameters.validator = delegate(TargetInfo x) { Pawn pawn = x.Thing as Pawn; return(pawn != null && !pawn.Dead && pawn.mindState.WillJoinColonyIfRescued); }; return(targetingParameters); }
public static TargetingParameters ForTrade() { TargetingParameters targetingParameters = new TargetingParameters(); targetingParameters.canTargetPawns = true; targetingParameters.canTargetBuildings = false; targetingParameters.mapObjectTargetsMustBeAutoAttackable = false; targetingParameters.validator = delegate(TargetInfo x) { ITrader trader = x.Thing as ITrader; return(trader != null && trader.CanTradeNow); }; return(targetingParameters); }
protected override TargetingParameters GetTargetingParameters() { TargetingParameters targetingParameters = base.GetTargetingParameters(); targetingParameters.validator = delegate(TargetInfo targ) { if (!base.BaseTargetValidator(targ.Thing)) { return(false); } Pawn pawn = targ.Thing as Pawn; return(pawn != null && pawn.RaceProps.Animal); }; return(targetingParameters); }
public void BeginTargeting(TargetingParameters targetParams, ITargetingSource ability, Action <LocalTargetInfo> action, Action actionWhenFinished = null, Texture2D mouseAttachment = null) { targetingSource = null; targetingSourceParent = null; targetingSourceAdditionalPawns = null; this.action = action; this.actionWhenFinished = actionWhenFinished; caster = null; this.targetParams = targetParams; this.mouseAttachment = mouseAttachment; targetingSource = ability; highlightAction = null; targetValidator = null; needsStopTargetingCall = false; }
private LocalTargetInfo CurrentTargetUnderMouse(bool mustBeHittableNowIfNotMelee) { LocalTargetInfo result; if (!this.IsTargeting) { result = LocalTargetInfo.Invalid; } else { TargetingParameters clickParams = (this.targetingVerb == null) ? this.targetParams : this.targetingVerb.verbProps.targetParams; LocalTargetInfo localTargetInfo = LocalTargetInfo.Invalid; using (IEnumerator <LocalTargetInfo> enumerator = GenUI.TargetsAtMouse(clickParams, false).GetEnumerator()) { if (enumerator.MoveNext()) { LocalTargetInfo localTargetInfo2 = enumerator.Current; localTargetInfo = localTargetInfo2; } } if (localTargetInfo.IsValid && mustBeHittableNowIfNotMelee && !(localTargetInfo.Thing is Pawn) && this.targetingVerb != null && !this.targetingVerb.verbProps.IsMeleeAttack) { if (this.targetingVerbAdditionalPawns != null && this.targetingVerbAdditionalPawns.Any <Pawn>()) { bool flag = false; for (int i = 0; i < this.targetingVerbAdditionalPawns.Count; i++) { Verb verb = this.GetTargetingVerb(this.targetingVerbAdditionalPawns[i]); if (verb != null && verb.CanHitTarget(localTargetInfo)) { flag = true; break; } } if (!flag) { localTargetInfo = LocalTargetInfo.Invalid; } } else if (!this.targetingVerb.CanHitTarget(localTargetInfo)) { localTargetInfo = LocalTargetInfo.Invalid; } } result = localTargetInfo; } return(result); }
private void BeginCallShuttle(Pawn caller, Map map, Faction faction, bool free) { targetingParameters = new TargetingParameters(); targetingParameters.canTargetLocations = true; targetingParameters.canTargetSelf = false; targetingParameters.canTargetPawns = false; targetingParameters.canTargetFires = false; targetingParameters.canTargetBuildings = true; targetingParameters.canTargetItems = true; targetingParameters.validator = (TargetInfo target) => (!(def.royalAid.targetingRange > 0f) || !(target.Cell.DistanceTo(caller.Position) > def.royalAid.targetingRange)) ? true : false; base.caller = caller; base.map = map; calledFaction = faction; base.free = free; Find.Targeter.BeginTargeting(this); }