コード例 #1
0
 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;
 }
コード例 #2
0
        protected override TargetingParameters GetTargetingParameters()
        {
            TargetingParameters targetingParameters = base.GetTargetingParameters();

            targetingParameters.validator = ((TargetInfo targ) => BaseTargetValidator(targ.Thing) && ((targ.Thing as Pawn)?.RaceProps.Animal ?? false));
            return(targetingParameters);
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        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);
        }
コード例 #6
0
        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);
        }
コード例 #7
0
 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);
 }
コード例 #8
0
        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);
        }
コード例 #9
0
        protected override TargetingParameters GetTargetingParameters()
        {
            TargetingParameters targetingParameters = new TargetingParameters();

            targetingParameters.canTargetPawns     = true;
            targetingParameters.canTargetBuildings = false;
            targetingParameters.validator          = ((TargetInfo x) => base.BaseTargetValidator(x.Thing));
            return(targetingParameters);
        }
コード例 #10
0
        public static TargetingParameters ForRescue(Pawn p)
        {
            TargetingParameters targetingParameters = new TargetingParameters();

            targetingParameters.canTargetPawns = true;
            targetingParameters.onlyTargetIncapacitatedPawns         = true;
            targetingParameters.canTargetBuildings                   = false;
            targetingParameters.mapObjectTargetsMustBeAutoAttackable = false;
            return(targetingParameters);
        }
コード例 #11
0
        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);
        }
コード例 #12
0
        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);
        }
コード例 #13
0
        public static TargetingParameters ForAttackAny()
        {
            TargetingParameters targetingParameters = new TargetingParameters();

            targetingParameters.canTargetPawns     = true;
            targetingParameters.canTargetBuildings = true;
            targetingParameters.canTargetItems     = true;
            targetingParameters.mapObjectTargetsMustBeAutoAttackable = true;
            return(targetingParameters);
        }
コード例 #14
0
 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;
 }
コード例 #15
0
        public static TargetingParameters ForSelf(Pawn p)
        {
            TargetingParameters targetingParameters = new TargetingParameters();

            targetingParameters.targetSpecificThing = p;
            targetingParameters.canTargetPawns      = false;
            targetingParameters.canTargetBuildings  = false;
            targetingParameters.mapObjectTargetsMustBeAutoAttackable = false;
            return(targetingParameters);
        }
コード例 #16
0
        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);
        }
コード例 #17
0
ファイル: Targeter.cs プロジェクト: KraigXu/GameProject
 public void StopTargeting()
 {
     if (actionWhenFinished != null)
     {
         Action obj = actionWhenFinished;
         actionWhenFinished = null;
         obj();
     }
     targetingSource = null;
     action          = null;
     targetParams    = null;
 }
コード例 #18
0
ファイル: Targeter.cs プロジェクト: KraigXu/GameProject
 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;
 }
コード例 #19
0
        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);
        }
コード例 #20
0
        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;
        }
コード例 #21
0
        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);
        }
コード例 #22
0
        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);
        }
コード例 #23
0
 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);
             }
         }
     }
 }
コード例 #24
0
        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*/;
            }
        }
コード例 #25
0
        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);
        }
コード例 #26
0
        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);
        }
コード例 #27
0
        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);
        }
コード例 #28
0
 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;
 }
コード例 #29
0
        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);
 }