コード例 #1
0
        public bool ChoseWorldTarget(GlobalTargetInfo target)
        {
            if (!target.IsValid)
            {
                Messages.Message("SWeaponTargetInvalid".Translate(), MessageTypeDefOf.RejectInput);
                return(false);
            }

            /*
             * int num = Find.WorldGrid.TraversalDistanceBetween(base.Map.Tile, target.Tile, true, int.MaxValue);
             * if (this.MaxLaunchDistance < 200 && num > this.MaxLaunchDistance)
             * {
             *  Messages.Message("MissileRangeBad".Translate(), MessageTypeDefOf.RejectInput, true);
             *  return false;
             * }
             */
            if (target.WorldObject is MapParent {
                HasMap : true
            } mapParent)
            {
                var map = mapParent.Map;
                Current.Game.CurrentMap = map;
                var targeter = Find.Targeter;

                void ActionWhenFinished()
                {
                    if (Find.Maps.Contains(Map))
                    {
                        Current.Game.CurrentMap = Map;
                    }
                }

                /*
                 * int range = 0;
                 * switch (getType()) {
                 *  case SuperWeaponType.Soviet:range = 56;break;
                 *  case SuperWeaponType.Allied: range = 30; break;
                 *  default:range=10;break;
                 * }
                 */

                var ic = ContentFinder <Texture2D> .Get("ra2/World/ra2_SuperWeaponIcon_" + getType());

                var tg = new TargetingParameters
                {
                    canTargetLocations = true,
                    canTargetItems     = true,
                    canTargetBuildings = true,
                    canTargetPawns     = true,
                    canTargetFires     = true
                };
                targeter.BeginTargeting(tg, delegate(LocalTargetInfo x)
                {
                    //GenDraw.DrawRadiusRing(UI.MouseCell(), range);
                    TryLaunch(x.ToGlobalTargetInfo(map));
                }, null, ActionWhenFinished, ic);
                return(true);
            }

            TryLaunch(target);
            return(true);
        }
コード例 #2
0
 public void AddQueuedTarget(TargetIndex ind, GlobalTargetInfo target)
 {
     GetTargetQueue(ind).Add(target);
 }
コード例 #3
0
 public CaravanJob(CaravanJobDef def, GlobalTargetInfo targetA) : this(def, targetA, default(GlobalTargetInfo))
 {
 }
コード例 #4
0
 public static void Look(ref GlobalTargetInfo value, string label, GlobalTargetInfo defaultValue)
 {
     Scribe_TargetInfo.Look(ref value, false, label, defaultValue);
 }
コード例 #5
0
        private bool ChooseWorldTarget(GlobalTargetInfo target)
        {
            if (!target.IsValid)
            {
                Messages.Message("TM_PortalDestinationInvalid".Translate(), MessageTypeDefOf.RejectInput);
                return(false);
            }
            int num = Find.WorldGrid.TraversalDistanceBetween(portalBldg.Map.Tile, target.Tile);

            if (num > portalBldg.MaxLaunchDistance)
            {
                Messages.Message("TM_PortalDestinationInvalid".Translate(), MessageTypeDefOf.RejectInput);
                return(false);
            }
            MapParent mapParent = target.WorldObject as MapParent;

            if (mapParent != null && mapParent.HasMap)
            {
                Map myMap = portalBldg.Map;
                Map map   = mapParent.Map;
                Current.Game.CurrentMap = map;
                comp = pawn.GetComp <CompAbilityUserMagic>();
                TargetingParameters portalTarget = new TargetingParameters();
                portalTarget.canTargetLocations = true;
                portalTarget.canTargetSelf      = false;
                portalTarget.canTargetPawns     = false;
                portalTarget.canTargetFires     = false;
                portalTarget.canTargetBuildings = false;
                portalTarget.canTargetItems     = false;
                portalTarget.validator          = (TargetInfo x) => x.IsValid && !x.Cell.Fogged(map) && x.Cell.InBounds(map) && x.Cell.Walkable(map); //TargetingParameters.ForDropPodsDestination()
                Find.Targeter.BeginTargeting(portalTarget, delegate(LocalTargetInfo x)
                {
                    portalBldg.PortalDestinationPosition = x.Cell;
                    portalBldg.PortalDestinationMap      = map;
                    comp.Mana.CurLevel = comp.Mana.CurLevel - .7f;
                    int xpnum          = Rand.Range(200, 230);
                    comp.MagicUserXP  += xpnum;
                    MoteMaker.ThrowText(pawn.DrawPos, pawn.MapHeld, "XP +" + xpnum, -1f);
                    portalBldg.IsPaired = true;
                }, null, delegate
                {
                    if (Find.Maps.Contains(myMap))
                    {
                        Current.Game.CurrentMap = myMap;
                    }
                }, JobDriver_PortalDestination.TargeterMouseAttachment);
                return(true);
            }
            bool flag;

            if (mapParent != null)
            {
                Settlement             settlement = mapParent as Settlement;
                List <FloatMenuOption> list       = new List <FloatMenuOption>();
                if (settlement != null && settlement.Faction == pawn.Faction)
                {
                    Messages.Message("TM_PortalDestinationInvalid".Translate(), MessageTypeDefOf.RejectInput);
                }
                //if (mapParent.HasMap)
                //{
                //    Messages.Message("TM_PortalDestinationInvalid".Translate(), MessageTypeDefOf.RejectInput);
                //    return false;
                //}
                flag = true;
            }
            else
            {
                flag = true;
            }
            if (!flag)
            {
                return(false);
            }
            if (Find.World.Impassable(target.Tile))
            {
                Messages.Message("TM_PortalDestinationInvalid".Translate(), MessageTypeDefOf.RejectInput);
                return(false);
            }
            //this.TryLaunch(target, PawnsArriveMode.Undecided, false);
            Messages.Message("TM_NoValidPortalDestination".Translate(), MessageTypeDefOf.RejectInput);
            return(false);
        }
コード例 #6
0
        private void StartRealAttack()
        {
            bool cast = true;
            if (globalTarget.IsValid)
            {
                Log.Message($"Using global target to create local target. ({globalTarget})");
                if (globalTarget.Map == null)
                {
                    if(globalTargetMapLastKnown != null)
                    {
                        Log.Warning($"Global target has null map (most likely missing pawn target). Falling back to last known map ({globalTargetMapLastKnown}).");
                        localTarget = new LocalTargetInfo(lastKnownThingLoc);
                        globalTarget = new GlobalTargetInfo(lastKnownThingLoc, globalTargetMapLastKnown);
                    }
                    else
                    {
                        Log.Error("Global target is valid, but has null map. Last known map is also null. Probably caused by map being unloaded prematurely, or immediately after the updated that added this feature. Strike cancelled to avoid damage to wrong map.");
                        cast = false;
                    }
                }
                else
                {
                    // Convert to local target. Note that Thing may be non-null be destroyed, that is handled below.
                    localTarget = globalTarget.HasThing ? new LocalTargetInfo(globalTarget.Thing) : new LocalTargetInfo(globalTarget.Cell);
                }
            }
            // Make sure that the local target is completely valid: it is possible that thing is destroyed and Target.IsValid is still true.
            if (localTarget.HasThing && localTarget.ThingDestroyed)
            {
                Log.Warning($"M3G_UMIN appears to have been targeting a Thing but that Thing was destroyed. Using last known location: {lastKnownThingLoc}");
                localTarget = new LocalTargetInfo(lastKnownThingLoc);
            }

            // Spawn sky beam of death.
            if (cast)
            {
                bool worked = AttackVerb.TryStartCastOn(localTarget);
                if (!worked)
                {
                    Log.Error("Megumin verb cast failed!");
                    cast = false;
                }
            }

            if (!cast)
            {
                // Cast failed. Stop be beam effect immediately.
                OnStrikeEnd(null);
            }
            

            chargeEffect?.Stop(true, ParticleSystemStopBehavior.StopEmitting);

            // Put on cooldown.
            CooldownTicks = COOLDOWN_TICKS;

            // Delete target position.
            localTarget = LocalTargetInfo.Invalid;
            globalTarget = GlobalTargetInfo.Invalid;
            lastKnownThingLoc = IntVec3.Invalid;
            globalTargetMapLastKnown = null;

            // Spawn a solar flare event on the map that it was fired from.
            if (DoSolarFlare && cast)
            {
                IncidentParms param = new IncidentParms();
                param.forced = true;
                param.target = this.Map;

                bool canFire = AADefOf.SolarFlare.Worker.CanFireNow(param);
                if (!canFire)
                    Log.Warning("SolarFare Worker says that it cannot fire under the current conditions - forcing it to anyway, from M3G_UMIN.");

                bool worked = AADefOf.SolarFlare.Worker.TryExecute(param);
                if (!worked)
                    Log.Error("SolarFare Worker failed to execute (returned false), from M3G_UMIN.");
            }
        }
コード例 #7
0
 public static void Look(ref GlobalTargetInfo value, string label)
 {
     Scribe_TargetInfo.Look(ref value, false, label, GlobalTargetInfo.Invalid);
 }
コード例 #8
0
        private bool ChoseWorldTarget(GlobalTargetInfo target)
        {
            if (!this.LoadingInProgressOrReadyToLaunch)
            {
                return(true);
            }
            if (!target.IsValid)
            {
                Messages.Message("MessageTransportPodsDestinationIsInvalid".Translate(), MessageTypeDefOf.RejectInput);
                return(false);
            }
            int num = Find.WorldGrid.TraversalDistanceBetween(this.parent.Map.Tile, target.Tile);

            if (num > this.MaxLaunchDistance)
            {
                Messages.Message("MessageTransportPodsDestinationIsTooFar".Translate(new object[]
                {
                    CompLaunchable.FuelNeededToLaunchAtDist((float)num).ToString("0.#")
                }), MessageTypeDefOf.RejectInput);
                return(false);
            }
            MapParent mapParent = target.WorldObject as MapParent;

            if (mapParent != null && mapParent.HasMap)
            {
                Map myMap = this.parent.Map;
                Map map   = mapParent.Map;
                Current.Game.VisibleMap = map;
                Find.Targeter.BeginTargeting(TargetingParameters.ForDropPodsDestination(), delegate(LocalTargetInfo x)
                {
                    if (!this.LoadingInProgressOrReadyToLaunch)
                    {
                        return;
                    }
                    this.TryLaunch(x.ToGlobalTargetInfo(map), PawnsArriveMode.Undecided, false);
                }, null, delegate
                {
                    if (Find.Maps.Contains(myMap))
                    {
                        Current.Game.VisibleMap = myMap;
                    }
                }, CompLaunchable.TargeterMouseAttachment);
                return(true);
            }
            bool flag;

            if (mapParent != null)
            {
                Settlement             settlement = mapParent as Settlement;
                List <FloatMenuOption> list       = new List <FloatMenuOption>();
                if (settlement != null && settlement.Visitable)
                {
                    list.Add(new FloatMenuOption("VisitSettlement".Translate(new object[]
                    {
                        target.WorldObject.Label
                    }), delegate
                    {
                        if (!this.LoadingInProgressOrReadyToLaunch)
                        {
                            return;
                        }
                        this.TryLaunch(target, PawnsArriveMode.Undecided, false);
                        CameraJumper.TryHideWorld();
                    }, MenuOptionPriority.Default, null, null, 0f, null, null));
                }
                if (mapParent.TransportPodsCanLandAndGenerateMap)
                {
                    list.Add(new FloatMenuOption("DropAtEdge".Translate(), delegate
                    {
                        if (!this.LoadingInProgressOrReadyToLaunch)
                        {
                            return;
                        }
                        this.TryLaunch(target, PawnsArriveMode.EdgeDrop, true);
                        CameraJumper.TryHideWorld();
                    }, MenuOptionPriority.Default, null, null, 0f, null, null));
                    list.Add(new FloatMenuOption("DropInCenter".Translate(), delegate
                    {
                        if (!this.LoadingInProgressOrReadyToLaunch)
                        {
                            return;
                        }
                        this.TryLaunch(target, PawnsArriveMode.CenterDrop, true);
                        CameraJumper.TryHideWorld();
                    }, MenuOptionPriority.Default, null, null, 0f, null, null));
                }
                if (list.Any <FloatMenuOption>())
                {
                    Find.WorldTargeter.closeWorldTabWhenFinished = false;
                    Find.WindowStack.Add(new FloatMenu(list));
                    return(true);
                }
                flag = true;
            }
            else
            {
                flag = true;
            }
            if (!flag)
            {
                return(false);
            }
            if (Find.World.Impassable(target.Tile))
            {
                Messages.Message("MessageTransportPodsDestinationIsInvalid".Translate(), MessageTypeDefOf.RejectInput);
                return(false);
            }
            this.TryLaunch(target, PawnsArriveMode.Undecided, false);
            return(true);
        }
コード例 #9
0
        public override bool ChoseWorldTarget(GlobalTargetInfo target)
        {
            int tile = caravan.Tile;

            return(CompLaunchable.ChoseWorldTarget(target, tile, Gen.YieldSingle(caravan), ShuttleRange, Launch, null));
        }
コード例 #10
0
 public virtual bool CanHitTarget(GlobalTargetInfo target)
 {
     return(caster != null && caster.Spawned && !ApparelPreventsShooting(caster.Position, currentTarget));
 }
コード例 #11
0
        public static void Look <T>(ref List <T> list, bool saveDestroyedThings, string label, LookMode lookMode = LookMode.Undefined, params object[] ctorArgs)
        {
            if (lookMode == LookMode.Undefined && !Scribe_Universal.TryResolveLookMode(typeof(T), out lookMode))
            {
                Log.Error("LookList call with a list of " + typeof(T) + " must have lookMode set explicitly.");
            }
            else if (Scribe.EnterNode(label))
            {
                try
                {
                    if (Scribe.mode == LoadSaveMode.Saving)
                    {
                        if (list == null)
                        {
                            Scribe.saver.WriteAttribute("IsNull", "True");
                        }
                        else
                        {
                            foreach (T item8 in list)
                            {
                                switch (lookMode)
                                {
                                case LookMode.Value:
                                {
                                    T value5 = item8;
                                    Scribe_Values.Look(ref value5, "li", default(T), forceSave: true);
                                    break;
                                }

                                case LookMode.LocalTargetInfo:
                                {
                                    LocalTargetInfo value4 = (LocalTargetInfo)(object)item8;
                                    Scribe_TargetInfo.Look(ref value4, saveDestroyedThings, "li");
                                    break;
                                }

                                case LookMode.TargetInfo:
                                {
                                    TargetInfo value3 = (TargetInfo)(object)item8;
                                    Scribe_TargetInfo.Look(ref value3, saveDestroyedThings, "li");
                                    break;
                                }

                                case LookMode.GlobalTargetInfo:
                                {
                                    GlobalTargetInfo value2 = (GlobalTargetInfo)(object)item8;
                                    Scribe_TargetInfo.Look(ref value2, saveDestroyedThings, "li");
                                    break;
                                }

                                case LookMode.Def:
                                {
                                    Def value = (Def)(object)item8;
                                    Scribe_Defs.Look(ref value, "li");
                                    break;
                                }

                                case LookMode.BodyPart:
                                {
                                    BodyPartRecord part = (BodyPartRecord)(object)item8;
                                    Scribe_BodyParts.Look(ref part, "li");
                                    break;
                                }

                                case LookMode.Deep:
                                {
                                    T target = item8;
                                    Scribe_Deep.Look(ref target, saveDestroyedThings, "li", ctorArgs);
                                    break;
                                }

                                case LookMode.Reference:
                                {
                                    ILoadReferenceable refee = (ILoadReferenceable)(object)item8;
                                    Scribe_References.Look(ref refee, "li", saveDestroyedThings);
                                    break;
                                }
                                }
                            }
                        }
                    }
                    else if (Scribe.mode == LoadSaveMode.LoadingVars)
                    {
                        XmlNode      curXmlParent = Scribe.loader.curXmlParent;
                        XmlAttribute xmlAttribute = curXmlParent.Attributes["IsNull"];
                        if (xmlAttribute != null && xmlAttribute.Value.ToLower() == "true")
                        {
                            if (lookMode == LookMode.Reference)
                            {
                                Scribe.loader.crossRefs.loadIDs.RegisterLoadIDListReadFromXml(null, null);
                            }
                            list = null;
                        }
                        else
                        {
                            switch (lookMode)
                            {
                            case LookMode.Value:
                                list = new List <T>(curXmlParent.ChildNodes.Count);
                                foreach (XmlNode childNode in curXmlParent.ChildNodes)
                                {
                                    T item = ScribeExtractor.ValueFromNode(childNode, default(T));
                                    list.Add(item);
                                }
                                break;

                            case LookMode.Deep:
                                list = new List <T>(curXmlParent.ChildNodes.Count);
                                foreach (XmlNode childNode2 in curXmlParent.ChildNodes)
                                {
                                    T item7 = ScribeExtractor.SaveableFromNode <T>(childNode2, ctorArgs);
                                    list.Add(item7);
                                }
                                break;

                            case LookMode.Def:
                                list = new List <T>(curXmlParent.ChildNodes.Count);
                                foreach (XmlNode childNode3 in curXmlParent.ChildNodes)
                                {
                                    T item6 = ScribeExtractor.DefFromNodeUnsafe <T>(childNode3);
                                    list.Add(item6);
                                }
                                break;

                            case LookMode.BodyPart:
                            {
                                list = new List <T>(curXmlParent.ChildNodes.Count);
                                int num4 = 0;
                                foreach (XmlNode childNode4 in curXmlParent.ChildNodes)
                                {
                                    T item5 = (T)(object)ScribeExtractor.BodyPartFromNode(childNode4, num4.ToString(), null);
                                    list.Add(item5);
                                    num4++;
                                }
                                break;
                            }

                            case LookMode.LocalTargetInfo:
                            {
                                list = new List <T>(curXmlParent.ChildNodes.Count);
                                int num3 = 0;
                                foreach (XmlNode childNode5 in curXmlParent.ChildNodes)
                                {
                                    T item4 = (T)(object)ScribeExtractor.LocalTargetInfoFromNode(childNode5, num3.ToString(), LocalTargetInfo.Invalid);
                                    list.Add(item4);
                                    num3++;
                                }
                                break;
                            }

                            case LookMode.TargetInfo:
                            {
                                list = new List <T>(curXmlParent.ChildNodes.Count);
                                int num2 = 0;
                                foreach (XmlNode childNode6 in curXmlParent.ChildNodes)
                                {
                                    T item3 = (T)(object)ScribeExtractor.TargetInfoFromNode(childNode6, num2.ToString(), TargetInfo.Invalid);
                                    list.Add(item3);
                                    num2++;
                                }
                                break;
                            }

                            case LookMode.GlobalTargetInfo:
                            {
                                list = new List <T>(curXmlParent.ChildNodes.Count);
                                int num = 0;
                                foreach (XmlNode childNode7 in curXmlParent.ChildNodes)
                                {
                                    T item2 = (T)(object)ScribeExtractor.GlobalTargetInfoFromNode(childNode7, num.ToString(), GlobalTargetInfo.Invalid);
                                    list.Add(item2);
                                    num++;
                                }
                                break;
                            }

                            case LookMode.Reference:
                            {
                                List <string> list2 = new List <string>(curXmlParent.ChildNodes.Count);
                                foreach (XmlNode childNode8 in curXmlParent.ChildNodes)
                                {
                                    list2.Add(childNode8.InnerText);
                                }
                                Scribe.loader.crossRefs.loadIDs.RegisterLoadIDListReadFromXml(list2, "");
                                break;
                            }
                            }
                        }
                    }
                    else if (Scribe.mode == LoadSaveMode.ResolvingCrossRefs)
                    {
                        switch (lookMode)
                        {
                        case LookMode.Reference:
                            list = Scribe.loader.crossRefs.TakeResolvedRefList <T>("");
                            break;

                        case LookMode.LocalTargetInfo:
                            if (list != null)
                            {
                                for (int j = 0; j < list.Count; j++)
                                {
                                    list[j] = (T)(object)ScribeExtractor.ResolveLocalTargetInfo((LocalTargetInfo)(object)list[j], j.ToString());
                                }
                            }
                            break;

                        case LookMode.TargetInfo:
                            if (list != null)
                            {
                                for (int k = 0; k < list.Count; k++)
                                {
                                    list[k] = (T)(object)ScribeExtractor.ResolveTargetInfo((TargetInfo)(object)list[k], k.ToString());
                                }
                            }
                            break;

                        case LookMode.GlobalTargetInfo:
                            if (list != null)
                            {
                                for (int i = 0; i < list.Count; i++)
                                {
                                    list[i] = (T)(object)ScribeExtractor.ResolveGlobalTargetInfo((GlobalTargetInfo)(object)list[i], i.ToString());
                                }
                            }
                            break;
                        }
                    }
                }
                finally
                {
                    Scribe.ExitNode();
                }
            }
            else if (Scribe.mode == LoadSaveMode.LoadingVars)
            {
                if (lookMode == LookMode.Reference)
                {
                    Scribe.loader.crossRefs.loadIDs.RegisterLoadIDListReadFromXml(null, label);
                }
                list = null;
            }
        }
コード例 #12
0
 public void ResetWorldTarget()
 {
     target = GlobalTargetInfo.Invalid;
 }
コード例 #13
0
        private bool ChoseWorldTarget(GlobalTargetInfo target)
        {
            if (!target.IsValid)
            {
                Messages.Message("TM_InvalidGatewaySelection".Translate(), MessageTypeDefOf.RejectInput);
                return(false);
            }
            int num = Find.WorldGrid.TraversalDistanceBetween(base.CasterPawn.Map.Tile, target.Tile);

            if (num > this.MaxLaunchDistance)
            {
                Messages.Message("TM_GatewayBeyondMaximumRange".Translate(), MessageTypeDefOf.RejectInput);
                return(false);
            }
            MapParent mapParent = target.WorldObject as MapParent;

            if (mapParent != null && mapParent.HasMap)
            {
                Map myMap = base.CasterPawn.Map;
                Map map   = mapParent.Map;
                Current.Game.CurrentMap = map;
                TargetingParameters portalTarget = new TargetingParameters();
                portalTarget.canTargetLocations = true;
                portalTarget.canTargetSelf      = false;
                portalTarget.canTargetPawns     = false;
                portalTarget.canTargetFires     = false;
                portalTarget.canTargetBuildings = false;
                portalTarget.canTargetItems     = false;
                portalTarget.validator          = ((TargetInfo x) => x.IsValid && !x.Cell.Fogged(map) && x.Cell.InBounds(map) && x.Cell.Walkable(map));
                Find.Targeter.BeginTargeting(portalTarget, delegate(LocalTargetInfo x)
                {
                    InitiateMassSummon(map, x);
                }, null, delegate
                {
                    if (Find.Maps.Contains(myMap))
                    {
                        Current.Game.CurrentMap = myMap;
                    }
                }, Verb_FoldReality.TargeterMouseAttachment);
                return(true);
            }
            bool flag;

            if (mapParent != null)
            {
                Settlement             settlement = mapParent as Settlement;
                List <FloatMenuOption> list       = new List <FloatMenuOption>();
                if (settlement != null && settlement.Visitable)
                {
                    Messages.Message("TM_InvalidGatewayNotOccupied".Translate(), MessageTypeDefOf.RejectInput);
                    return(false);
                }
                //if (mapParent.TransportPodsCanLandAndGenerateMap)
                //{
                //    Messages.Message("TM_InvalidGatewayNotOccupied".Translate(), MessageTypeDefOf.RejectInput);
                //    return false;
                //}
                if (list.Any <FloatMenuOption>())
                {
                    Find.WorldTargeter.closeWorldTabWhenFinished = false;
                    Find.WindowStack.Add(new FloatMenu(list));
                    return(true);
                }
                flag = true;
            }
            else
            {
                flag = true;
            }
            if (!flag)
            {
                return(false);
            }
            if (Find.World.Impassable(target.Tile))
            {
                Messages.Message("TM_InvalidGatewaySelection".Translate(), MessageTypeDefOf.RejectInput);
                return(false);
            }
            comp.Mana.CurLevel += comp.ActualManaCost(TorannMagicDefOf.TM_FoldReality);
            Messages.Message("TM_InvalidGatewayNotOccupied".Translate(), MessageTypeDefOf.RejectInput);
            return(false);
        }
コード例 #14
0
        private bool ChoseWorldTarget(GlobalTargetInfo target)
        {
            Cthulhu.Utility.DebugReport("ChooseWorldTarget Called");
            if (!this.LoadingInProgressOrReadyToLaunch)
            {
                return(true);
            }
            if (!target.IsValid)
            {
                Messages.Message("MessageTransportPodsDestinationIsInvalid".Translate(), MessageTypeDefOf.RejectInput);
                return(false);
            }
            int num = Find.WorldGrid.TraversalDistanceBetween(this.parent.Map.Tile, target.Tile);

            if (num > this.MaxLaunchDistance)
            {
                //Messages.Message("MessageTransportPodsDestinationIsTooFar".Translate(new object[]
                //{
                //    CompLaunchable.FuelNeededToLaunchAtDist((float)num).ToString("0.#")
                //}), MessageTypeDefOf.RejectInput);
                return(false);
            }
            MapParent mapParent = target.WorldObject as MapParent;

            if (mapParent != null && mapParent.HasMap)
            {
                Map myMap = this.parent.Map;
                Map map   = mapParent.Map;
                Current.Game.CurrentMap = map;
                Targeter arg_139_0 = Find.Targeter;

                void ActionWhenFinished()
                {
                    if (Find.Maps.Contains(myMap))
                    {
                        Current.Game.CurrentMap = myMap;
                    }
                }

                arg_139_0.BeginTargeting(TargetingParameters.ForDropPodsDestination(), delegate(LocalTargetInfo x)
                {
                    if (!this.LoadingInProgressOrReadyToLaunch)
                    {
                        Cthulhu.Utility.DebugReport("ChooseTarget Exited - LoadingInProgressOrReadyToLaunch");
                        return;
                    }
                    this.TryLaunch(x.ToGlobalTargetInfo(map), PawnsArrivalModeDefOf.EdgeDrop, false);
                }, null, ActionWhenFinished, CompLaunchablePawn.TargeterMouseAttachment);
                return(true);
            }
            if (target.WorldObject is Settlement && target.WorldObject.Faction != Faction.OfPlayer)
            {
                Find.WorldTargeter.closeWorldTabWhenFinished = false;
                List <FloatMenuOption> list = new List <FloatMenuOption>();
                if (!target.WorldObject.Faction.HostileTo(Faction.OfPlayer))
                {
                    list.Add(new FloatMenuOption("VisitFactionBase".Translate(
                                                     target.WorldObject.Label
                                                     ), delegate
                    {
                        if (!this.LoadingInProgressOrReadyToLaunch)
                        {
                            return;
                        }
                        this.TryLaunch(target, PawnsArrivalModeDefOf.EdgeDrop, false);
                        CameraJumper.TryHideWorld();
                    }, MenuOptionPriority.Default, null, null, 0f, null, null));
                }
                list.Add(new FloatMenuOption("DropAtEdge".Translate(), delegate
                {
                    if (!this.LoadingInProgressOrReadyToLaunch)
                    {
                        return;
                    }
                    this.TryLaunch(target, PawnsArrivalModeDefOf.EdgeDrop, true);
                    CameraJumper.TryHideWorld();
                }, MenuOptionPriority.Default, null, null, 0f, null, null));
                list.Add(new FloatMenuOption("DropInCenter".Translate(), delegate
                {
                    if (!this.LoadingInProgressOrReadyToLaunch)
                    {
                        return;
                    }
                    this.TryLaunch(target, PawnsArrivalModeDefOf.CenterDrop, true);
                    CameraJumper.TryHideWorld();
                }, MenuOptionPriority.Default, null, null, 0f, null, null));
                Find.WindowStack.Add(new FloatMenu(list));
                return(true);
            }
            else // if (Find.World.Impassable(target.Tile))
            {
                Messages.Message("MessageTransportPodsDestinationIsInvalid".Translate(), MessageTypeDefOf.RejectInput);
                return(false);
            }
            //this.TryLaunch(target, PawnsArrivalModeDefOf.Undecided, false);
            //return true;
        }
コード例 #15
0
        public IEnumerable <FloatMenuOption> GetTransportPodsFloatMenuOptionsAt(int tile, GlobalTargetInfo target)
        {
            MapParent mapParent = target.WorldObject as MapParent;

            if (mapParent != null && mapParent.HasMap)
            {
                yield return(new FloatMenuOption("TM_SelectTargetOnMap".Translate(mapParent.LabelCap), delegate
                {
                    Map map = mapParent.Map;
                    Current.Game.CurrentMap = map;
                    CameraJumper.TryHideWorld();
                    Find.Targeter.BeginTargeting(TargetingParameters.ForDropPodsDestination(), delegate(LocalTargetInfo x)
                    {
                        destCell = x.Cell;
                        destTile = map.Tile;
                        LaunchLightPod(destTile, destCell, null);
                    }, null);
                }));
            }

            if (!Find.World.Impassable(tile))
            {
                yield return(new FloatMenuOption("FormCaravanHere".Translate(), delegate
                {
                    LaunchLightPod(target.Tile, default(IntVec3), new TransportPodsArrivalAction_FormCaravan());
                }));
            }
        }
コード例 #16
0
ファイル: SuperWeaponAction.cs プロジェクト: AKreedz/ra2inRW
 public static void Allied(GlobalTargetInfo target, IntVec3 pos, Map map, int tile)
 {
     // map.GameConditionManager.ConditionIsActive(GameConditionDef.Named("ra2_AlliedStorm"));
     AlliedBooom(tile, target.Cell);
 }
コード例 #17
0
        private static void DropToWorldObjectDo(WorldObject place, List <ThingEntry> things, string from, string text)
        {
            GlobalTargetInfo ti = new GlobalTargetInfo(place);
            var factionPirate   = SessionClientController.Data.FactionPirate;

            if (MainHelper.DebugMode)
            {
                Loger.Log("Mail================================================= {");
            }

            if (place is Settlement && ((Settlement)place).Map != null)
            {
                var map  = ((Settlement)place).Map;
                var cell = GameUtils.GetTradeCell(map);
                ti = new GlobalTargetInfo(cell, map);
                Thing thinXZ;
                foreach (var thing in things)
                {
                    if (MainHelper.DebugMode)
                    {
                        Loger.Log("Mail------------------------------------------------- {" + Environment.NewLine
                                  + thing.Data + Environment.NewLine
                                  + "Mail------------------------------------------------- }" + Environment.NewLine);
                    }
                    var thin = PrepareSpawnThingEntry(thing, factionPirate);

                    if (MainHelper.DebugMode)
                    {
                        Loger.Log("Spawn...");
                    }
                    if (thin is Pawn)
                    {
                        GenSpawn.Spawn((Pawn)thin, cell, map);
                    }
                    else
                    {
                        GenDrop.TryDropSpawn(thin, cell, map, ThingPlaceMode.Near, out thinXZ, null);
                    }
                    if (MainHelper.DebugMode)
                    {
                        Loger.Log("Spawn...OK");
                    }
                }
            }
            else if (place is Caravan)
            {
                var pawns = (place as Caravan).PawnsListForReading;
                foreach (var thing in things)
                {
                    /*
                     * thing.SetFaction(factionColonistLoadID, factionPirateLoadID);
                     * var thin = thing.CreateThing(false);
                     */
                    var thin = PrepareSpawnThingEntry(thing, factionPirate);

                    if (thin is Pawn)
                    {
                        (place as Caravan).AddPawn(thin as Pawn, true);
                        GameUtils.SpawnSetupOnCaravan(thin as Pawn);
                    }
                    else
                    {
                        var p = CaravanInventoryUtility.FindPawnToMoveInventoryTo(thin, pawns, null);
                        if (p != null)
                        {
                            p.inventory.innerContainer.TryAdd(thin, true);
                        }
                    }
                }
            }

            if (MainHelper.DebugMode)
            {
                Loger.Log("Mail================================================= }");
            }

            Find.LetterStack.ReceiveLetter("OCity_UpdateWorld_Trade".Translate()
                                           , text
                                           , LetterDefOf.PositiveEvent
                                           , ti
                                           , null);
        }
コード例 #18
0
 protected bool ChoseWorldTarget(GlobalTargetInfo target, float fuelCost)
 {
     return(ChoseWorldTarget(target, Find.WorldGrid.GetTileCenter(vehicle.Map.Tile), fuelCost, new Action <int, AerialVehicleArrivalAction, bool>(vehicle.CompVehicleLauncher.TryLaunch)));
 }
コード例 #19
0
 public static void Look(ref GlobalTargetInfo value, bool saveDestroyedThings, string label, GlobalTargetInfo defaultValue)
 {
     if (Scribe.mode == LoadSaveMode.Saving)
     {
         if (!value.Equals(defaultValue))
         {
             if (value.Thing != null && Scribe_References.CheckSaveReferenceToDestroyedThing(value.Thing, label, saveDestroyedThings))
             {
                 return;
             }
             if (value.WorldObject != null && !value.WorldObject.Spawned)
             {
                 Scribe.saver.WriteElement(label, "null");
             }
             else if (!value.HasThing && !value.HasWorldObject && value.Cell.IsValid && (value.Map == null || !Find.Maps.Contains(value.Map)))
             {
                 Scribe.saver.WriteElement(label, "null");
             }
             else
             {
                 Scribe.saver.WriteElement(label, value.ToString());
             }
         }
     }
     else if (Scribe.mode == LoadSaveMode.LoadingVars)
     {
         value = ScribeExtractor.GlobalTargetInfoFromNode(Scribe.loader.curXmlParent[label], label, defaultValue);
     }
     else if (Scribe.mode == LoadSaveMode.ResolvingCrossRefs)
     {
         value = ScribeExtractor.ResolveGlobalTargetInfo(value, label);
     }
 }
コード例 #20
0
 public static void Look <T>(ref List <T> list, bool saveDestroyedThings, string label, LookMode lookMode = LookMode.Undefined, params object[] ctorArgs)
 {
     if (lookMode == LookMode.Undefined)
     {
         if (ParseHelper.HandlesType(typeof(T)))
         {
             lookMode = LookMode.Value;
         }
         else if (typeof(T) == typeof(LocalTargetInfo))
         {
             lookMode = LookMode.LocalTargetInfo;
         }
         else if (typeof(T) == typeof(TargetInfo))
         {
             lookMode = LookMode.TargetInfo;
         }
         else if (typeof(T) == typeof(GlobalTargetInfo))
         {
             lookMode = LookMode.GlobalTargetInfo;
         }
         else if (typeof(Def).IsAssignableFrom(typeof(T)))
         {
             lookMode = LookMode.Def;
         }
         else if (typeof(T) == typeof(BodyPartRecord))
         {
             lookMode = LookMode.BodyPart;
         }
         else
         {
             if (!typeof(IExposable).IsAssignableFrom(typeof(T)) || typeof(ILoadReferenceable).IsAssignableFrom(typeof(T)))
             {
                 Log.Error("LookList call with a list of " + typeof(T) + " must have lookMode set explicitly.", false);
                 return;
             }
             lookMode = LookMode.Deep;
         }
     }
     if (Scribe.EnterNode(label))
     {
         try
         {
             if (Scribe.mode == LoadSaveMode.Saving)
             {
                 if (list == null)
                 {
                     Scribe.saver.WriteAttribute("IsNull", "True");
                 }
                 else
                 {
                     foreach (T current in list)
                     {
                         if (lookMode == LookMode.Value)
                         {
                             T t = current;
                             Scribe_Values.Look <T>(ref t, "li", default(T), true);
                         }
                         else if (lookMode == LookMode.LocalTargetInfo)
                         {
                             LocalTargetInfo localTargetInfo = (LocalTargetInfo)((object)current);
                             Scribe_TargetInfo.Look(ref localTargetInfo, saveDestroyedThings, "li");
                         }
                         else if (lookMode == LookMode.TargetInfo)
                         {
                             TargetInfo targetInfo = (TargetInfo)((object)current);
                             Scribe_TargetInfo.Look(ref targetInfo, saveDestroyedThings, "li");
                         }
                         else if (lookMode == LookMode.GlobalTargetInfo)
                         {
                             GlobalTargetInfo globalTargetInfo = (GlobalTargetInfo)((object)current);
                             Scribe_TargetInfo.Look(ref globalTargetInfo, saveDestroyedThings, "li");
                         }
                         else if (lookMode == LookMode.Def)
                         {
                             Def def = (Def)((object)current);
                             Scribe_Defs.Look <Def>(ref def, "li");
                         }
                         else if (lookMode == LookMode.BodyPart)
                         {
                             BodyPartRecord bodyPartRecord = (BodyPartRecord)((object)current);
                             Scribe_BodyParts.Look(ref bodyPartRecord, "li", null);
                         }
                         else if (lookMode == LookMode.Deep)
                         {
                             T t2 = current;
                             Scribe_Deep.Look <T>(ref t2, saveDestroyedThings, "li", ctorArgs);
                         }
                         else if (lookMode == LookMode.Reference)
                         {
                             ILoadReferenceable loadReferenceable = (ILoadReferenceable)((object)current);
                             Scribe_References.Look <ILoadReferenceable>(ref loadReferenceable, "li", saveDestroyedThings);
                         }
                     }
                 }
             }
             else if (Scribe.mode == LoadSaveMode.LoadingVars)
             {
                 XmlNode      curXmlParent = Scribe.loader.curXmlParent;
                 XmlAttribute xmlAttribute = curXmlParent.Attributes["IsNull"];
                 if (xmlAttribute != null && xmlAttribute.Value.ToLower() == "true")
                 {
                     list = null;
                 }
                 else if (lookMode == LookMode.Value)
                 {
                     list = new List <T>(curXmlParent.ChildNodes.Count);
                     foreach (XmlNode subNode in curXmlParent.ChildNodes)
                     {
                         T item = ScribeExtractor.ValueFromNode <T>(subNode, default(T));
                         list.Add(item);
                     }
                 }
                 else if (lookMode == LookMode.Deep)
                 {
                     list = new List <T>(curXmlParent.ChildNodes.Count);
                     foreach (XmlNode subNode2 in curXmlParent.ChildNodes)
                     {
                         T item2 = ScribeExtractor.SaveableFromNode <T>(subNode2, ctorArgs);
                         list.Add(item2);
                     }
                 }
                 else if (lookMode == LookMode.Def)
                 {
                     list = new List <T>(curXmlParent.ChildNodes.Count);
                     foreach (XmlNode subNode3 in curXmlParent.ChildNodes)
                     {
                         T item3 = ScribeExtractor.DefFromNodeUnsafe <T>(subNode3);
                         list.Add(item3);
                     }
                 }
                 else if (lookMode == LookMode.BodyPart)
                 {
                     list = new List <T>(curXmlParent.ChildNodes.Count);
                     int num = 0;
                     foreach (XmlNode node in curXmlParent.ChildNodes)
                     {
                         T item4 = (T)((object)ScribeExtractor.BodyPartFromNode(node, num.ToString(), null));
                         list.Add(item4);
                         num++;
                     }
                 }
                 else if (lookMode == LookMode.LocalTargetInfo)
                 {
                     list = new List <T>(curXmlParent.ChildNodes.Count);
                     int num2 = 0;
                     foreach (XmlNode node2 in curXmlParent.ChildNodes)
                     {
                         LocalTargetInfo localTargetInfo2 = ScribeExtractor.LocalTargetInfoFromNode(node2, num2.ToString(), LocalTargetInfo.Invalid);
                         T item5 = (T)((object)localTargetInfo2);
                         list.Add(item5);
                         num2++;
                     }
                 }
                 else if (lookMode == LookMode.TargetInfo)
                 {
                     list = new List <T>(curXmlParent.ChildNodes.Count);
                     int num3 = 0;
                     foreach (XmlNode node3 in curXmlParent.ChildNodes)
                     {
                         TargetInfo targetInfo2 = ScribeExtractor.TargetInfoFromNode(node3, num3.ToString(), TargetInfo.Invalid);
                         T          item6       = (T)((object)targetInfo2);
                         list.Add(item6);
                         num3++;
                     }
                 }
                 else if (lookMode == LookMode.GlobalTargetInfo)
                 {
                     list = new List <T>(curXmlParent.ChildNodes.Count);
                     int num4 = 0;
                     foreach (XmlNode node4 in curXmlParent.ChildNodes)
                     {
                         GlobalTargetInfo globalTargetInfo2 = ScribeExtractor.GlobalTargetInfoFromNode(node4, num4.ToString(), GlobalTargetInfo.Invalid);
                         T item7 = (T)((object)globalTargetInfo2);
                         list.Add(item7);
                         num4++;
                     }
                 }
                 else if (lookMode == LookMode.Reference)
                 {
                     List <string> list2 = new List <string>(curXmlParent.ChildNodes.Count);
                     foreach (XmlNode xmlNode in curXmlParent.ChildNodes)
                     {
                         list2.Add(xmlNode.InnerText);
                     }
                     Scribe.loader.crossRefs.loadIDs.RegisterLoadIDListReadFromXml(list2, string.Empty);
                 }
             }
             else if (Scribe.mode == LoadSaveMode.ResolvingCrossRefs)
             {
                 if (lookMode == LookMode.Reference)
                 {
                     list = Scribe.loader.crossRefs.TakeResolvedRefList <T>(string.Empty);
                 }
                 else if (lookMode == LookMode.LocalTargetInfo)
                 {
                     if (list != null)
                     {
                         for (int i = 0; i < list.Count; i++)
                         {
                             list[i] = (T)((object)ScribeExtractor.ResolveLocalTargetInfo((LocalTargetInfo)((object)list[i]), i.ToString()));
                         }
                     }
                 }
                 else if (lookMode == LookMode.TargetInfo)
                 {
                     if (list != null)
                     {
                         for (int j = 0; j < list.Count; j++)
                         {
                             list[j] = (T)((object)ScribeExtractor.ResolveTargetInfo((TargetInfo)((object)list[j]), j.ToString()));
                         }
                     }
                 }
                 else if (lookMode == LookMode.GlobalTargetInfo && list != null)
                 {
                     for (int k = 0; k < list.Count; k++)
                     {
                         list[k] = (T)((object)ScribeExtractor.ResolveGlobalTargetInfo((GlobalTargetInfo)((object)list[k]), k.ToString()));
                     }
                 }
             }
         }
         finally
         {
             Scribe.ExitNode();
         }
     }
     else if (Scribe.mode == LoadSaveMode.LoadingVars)
     {
         if (lookMode == LookMode.Reference)
         {
             Scribe.loader.crossRefs.loadIDs.RegisterLoadIDListReadFromXml(null, label);
         }
         list = null;
     }
 }
コード例 #21
0
 public static void Look(ref GlobalTargetInfo value, bool saveDestroyedThings, string label)
 {
     Scribe_TargetInfo.Look(ref value, saveDestroyedThings, label, GlobalTargetInfo.Invalid);
 }
コード例 #22
0
 public static GlobalTargetInfo GetAdjustedTarget(GlobalTargetInfo target)
 {
     if (target.HasThing)
     {
         Thing thing = target.Thing;
         if (thing.Spawned)
         {
             return(thing);
         }
         GlobalTargetInfo result = GlobalTargetInfo.Invalid;
         for (IThingHolder parentHolder = thing.ParentHolder; parentHolder != null; parentHolder = parentHolder.ParentHolder)
         {
             Thing thing2 = parentHolder as Thing;
             if (thing2 != null && thing2.Spawned)
             {
                 result = thing2;
                 break;
             }
             ThingComp thingComp = parentHolder as ThingComp;
             if (thingComp != null && thingComp.parent.Spawned)
             {
                 result = thingComp.parent;
                 break;
             }
             WorldObject worldObject = parentHolder as WorldObject;
             if (worldObject != null && worldObject.Spawned)
             {
                 result = worldObject;
                 break;
             }
         }
         if (result.IsValid)
         {
             return(result);
         }
         if (thing.Tile >= 0)
         {
             return(new GlobalTargetInfo(thing.Tile));
         }
     }
     else
     {
         if (target.Cell.IsValid && target.Tile >= 0 && target.Map != null && !Find.Maps.Contains(target.Map))
         {
             MapParent parent = target.Map.info.parent;
             if (parent != null && parent.Spawned)
             {
                 return(parent);
             }
             if (parent != null && parent.Tile >= 0)
             {
                 return(new GlobalTargetInfo(target.Map.Tile));
             }
             return(GlobalTargetInfo.Invalid);
         }
         if (target.HasWorldObject && !target.WorldObject.Spawned && target.WorldObject.Tile >= 0)
         {
             return(new GlobalTargetInfo(target.WorldObject.Tile));
         }
     }
     return(target);
 }
コード例 #23
0
        public override bool TryExecute(IncidentParms parms)
        {
            if (GenDate.DaysPassedFloat < ZombieSettings.Values.daysBeforeZombiesCome)
            {
                return(false);
            }

            var map         = (Map)parms.target;
            var zombieCount = (int)(zombieCountFactor * ZombieSettings.Values.baseNumberOfZombiesinEvent) + 1;

            zombieCount *= Math.Max(1, map.mapPawns.FreeColonists.Count());

            var spotValidator = SpotValidator(map);

            IntVec3 spot     = IntVec3.Invalid;
            string  headline = "";
            string  text     = "";

            for (int counter = 1; counter <= 10; counter++)
            {
                if (ZombieSettings.Values.spawnHowType == SpawnHowType.AllOverTheMap)
                {
                    RCellFinder.TryFindRandomSpotJustOutsideColony(Tools.CenterOfInterest(map), map, null, out spot, spotValidator);
                    headline = "LetterLabelZombiesRisingNearYourBase".Translate();
                    text     = "ZombiesRisingNearYourBase".Translate();
                }
                else
                {
                    RCellFinder.TryFindRandomPawnEntryCell(out spot, map, 0.5f, spotValidator);
                    headline = "LetterLabelZombiesRising".Translate();
                    text     = "ZombiesRising".Translate();
                }

                if (spot.IsValid)
                {
                    break;
                }
            }
            if (spot.IsValid == false)
            {
                return(false);
            }

            var cellValidator = Tools.ZombieSpawnLocator(map);

            while (zombieCount > 0)
            {
                Tools.GetCircle(Constants.SPAWN_INCIDENT_RADIUS)
                .Select(vec => spot + vec)
                .Where(vec => cellValidator(vec))
                .InRandomOrder()
                .Take(zombieCount)
                .Do(cell =>
                {
                    Tools.generator.SpawnZombieAt(map, cell);
                    zombieCount--;
                });
            }

            var location = new GlobalTargetInfo(spot, map);

            Find.LetterStack.ReceiveLetter(headline, text, LetterDefOf.BadUrgent, location);

            SoundDef.Named("ZombiesRising").PlayOneShotOnCamera(null);
            return(true);
        }
コード例 #24
0
        public void CheckKindThresholds(Faction faction, bool canSendLetter, string reason, GlobalTargetInfo lookTarget, out bool sentLetter)
        {
            FactionRelationKind previousKind = kind;

            sentLetter = false;
            if (kind != 0 && goodwill <= -75)
            {
                kind = FactionRelationKind.Hostile;
                faction.Notify_RelationKindChanged(other, previousKind, canSendLetter, reason, lookTarget, out sentLetter);
            }
            if (kind != FactionRelationKind.Ally && goodwill >= 75)
            {
                kind = FactionRelationKind.Ally;
                faction.Notify_RelationKindChanged(other, previousKind, canSendLetter, reason, lookTarget, out sentLetter);
            }
            if (kind == FactionRelationKind.Hostile && goodwill >= 0)
            {
                kind = FactionRelationKind.Neutral;
                faction.Notify_RelationKindChanged(other, previousKind, canSendLetter, reason, lookTarget, out sentLetter);
            }
            if (kind == FactionRelationKind.Ally && goodwill <= 0)
            {
                kind = FactionRelationKind.Neutral;
                faction.Notify_RelationKindChanged(other, previousKind, canSendLetter, reason, lookTarget, out sentLetter);
            }
        }
コード例 #25
0
        private bool ChoseWorldTarget(GlobalTargetInfo target)
        {
            if (this.parentLandedShip != null)
            {
                this.parentLandedShip.isTargeting = true;
            }
            this.isTargeting = true;
            int tile;

            if (this.parentLandedShip != null)
            {
                tile = this.parentLandedShip.Tile;
            }
            else
            {
                tile = this.Map.Tile;
            }
            bool canBomb = true;

            if (!target.IsValid)
            {
                Messages.Message("MessageTransportPodsDestinationIsInvalid".Translate(), MessageSound.RejectInput);
                return(false);
            }
            if (this.LaunchAsFleet)
            {
                List <int> distances = new List <int>();
                for (int i = 0; i < DropShipUtility.currentShipTracker.ShipsInFleet(this.fleetID).Count; i++)
                {
                    ShipBase ship = DropShipUtility.currentShipTracker.ShipsInFleet(this.fleetID)[i];
                    if (ship.compShip.cargoLoadingActive)
                    {
                        Messages.Message("MessageFleetLaunchImpossible".Translate(), MessageSound.RejectInput);
                        return(false);
                    }
                    int num = (Find.WorldGrid.TraversalDistanceBetween(tile, target.Tile));
                    if (num > ship.MaxLaunchDistanceEverPossible(true))
                    {
                        Messages.Message("MessageFleetLaunchImpossible".Translate(), MessageSound.RejectInput);
                        return(false);
                    }
                    if (!(2 * num > ship.MaxLaunchDistanceEverPossible(true)))
                    {
                        canBomb = false;
                    }
                }
            }
            else
            {
                int num = Find.WorldGrid.TraversalDistanceBetween(tile, target.Tile);

                if (num > this.MaxLaunchDistanceEverPossible(this.LaunchAsFleet))
                {
                    Messages.Message("MessageTransportPodsDestinationIsTooFar".Translate(new object[]
                    {
                        CompLaunchable.FuelNeededToLaunchAtDist((float)num).ToString("0.#")
                    }), MessageSound.RejectInput);
                    return(false);
                }
                if (!(2 * num > this.MaxLaunchDistanceEverPossible(true)))
                {
                    canBomb = false;
                }
            }

            MapParent mapParent = target.WorldObject as MapParent;

            if (mapParent != null && mapParent.HasMap)
            {
                Map myMap = this.Map;
                Map map   = mapParent.Map;
                Current.Game.VisibleMap = map;
                Targeter targeter           = Find.Targeter;
                Action   actionWhenFinished = delegate
                {
                    if (Find.Maps.Contains(myMap))
                    {
                        Current.Game.VisibleMap = myMap;
                    }
                };
                targeter.BeginTargeting(TargetingParameters.ForDropPodsDestination(), delegate(LocalTargetInfo x)
                {
                    if (!this.ReadyForTakeoff || this.LaunchAsFleet && DropShipUtility.currentShipTracker.ShipsInFleet(this.fleetID).Any(s => !s.ReadyForTakeoff))
                    {
                        return;
                    }
                    this.TryLaunch(x.ToGlobalTargetInfo(map), PawnsArriveMode.Undecided, TravelingShipArrivalAction.EnterMapFriendly);
                }, null, actionWhenFinished, DropShipUtility.TargeterShipAttachment);
                return(true);
            }

            if (target.WorldObject is Settlement || target.WorldObject is Site)
            {
                Find.WorldTargeter.closeWorldTabWhenFinished = false;
                MapParent localMapParent    = target.WorldObject as MapParent;
                List <FloatMenuOption> list = new List <FloatMenuOption>();
                if (!target.WorldObject.Faction.HostileTo(Faction.OfPlayer))
                {
                    list.Add(new FloatMenuOption("VisitSettlement".Translate(new object[]
                    {
                        target.WorldObject.Label
                    }), delegate
                    {
                        if (!this.ReadyForTakeoff || this.LaunchAsFleet && DropShipUtility.currentShipTracker.ShipsInFleet(this.fleetID).Any(s => !s.ReadyForTakeoff))
                        {
                            return;
                        }
                        this.TryLaunch(target, PawnsArriveMode.Undecided, TravelingShipArrivalAction.StayOnWorldMap);
                        CameraJumper.TryHideWorld();
                    }, MenuOptionPriority.Default, null, null, 0f, null, null));
                }
                list.Add(new FloatMenuOption("DropAtEdge".Translate(), delegate
                {
                    if (!this.ReadyForTakeoff || this.LaunchAsFleet && DropShipUtility.currentShipTracker.ShipsInFleet(this.fleetID).Any(s => !s.ReadyForTakeoff))
                    {
                        return;
                    }
                    this.TryLaunch(target, PawnsArriveMode.EdgeDrop, TravelingShipArrivalAction.EnterMapFriendly);
                    CameraJumper.TryHideWorld();
                }, MenuOptionPriority.Default, null, null, 0f, null, null));
                //list.Add(new FloatMenuOption("DropInCenter".Translate(), delegate
                //{
                //    if (!this.ReadyForTakeoff || this.LaunchAsFleet && DropShipUtility.currentShipTracker.ShipsInFleet(this.fleetID).Any(s => !s.ReadyForTakeoff))
                //    {
                //        return;
                //    }
                //    this.TryLaunch(target, PawnsArriveMode.CenterDrop, TravelingShipArrivalAction.EnterMapFriendly);
                //    CameraJumper.TryHideWorld();
                //}, MenuOptionPriority.Default, null, null, 0f, null, null));

                list.Add(new FloatMenuOption("AttackFactionBaseAerial".Translate(), delegate
                {
                    if (!this.ReadyForTakeoff || this.LaunchAsFleet && DropShipUtility.currentShipTracker.ShipsInFleet(this.fleetID).Any(s => !s.ReadyForTakeoff))
                    {
                        return;
                    }
                    this.TryLaunch(target, PawnsArriveMode.CenterDrop, TravelingShipArrivalAction.EnterMapAssault);
                    CameraJumper.TryHideWorld();
                }, MenuOptionPriority.Default, null, null, 0f, null, null));


                if (canBomb && (DropShipUtility.currentShipTracker.ShipsInFleet(this.fleetID).Any(x => x.installedTurrets.Any(y => y.Key.slotType == WeaponSystemType.Bombing && y.Value != null))) || this.loadedBombs.Any())
                {
                    list.Add(new FloatMenuOption("BombFactionBase".Translate(), delegate
                    {
                        if (!this.ReadyForTakeoff || this.LaunchAsFleet && DropShipUtility.currentShipTracker.ShipsInFleet(this.fleetID).Any(s => !s.ReadyForTakeoff))
                        {
                            return;
                        }
                        this.performBombingRun = true;
                        this.TryLaunch(target, PawnsArriveMode.CenterDrop, TravelingShipArrivalAction.BombingRun);
                        CameraJumper.TryHideWorld();
                    }, MenuOptionPriority.Default, null, null, 0f, null, null));
                }


                Find.WindowStack.Add(new FloatMenu(list));
                return(true);
            }
            if (Find.World.Impassable(target.Tile))
            {
                Messages.Message("MessageTransportPodsDestinationIsInvalid".Translate(), MessageSound.RejectInput);
                return(false);
            }

            this.TryLaunch(target, PawnsArriveMode.Undecided, TravelingShipArrivalAction.StayOnWorldMap);
            return(true);
        }
コード例 #26
0
        public static GlobalTargetInfo GlobalTargetInfoFromNode(XmlNode node, string label, GlobalTargetInfo defaultValue)
        {
            LoadIDsWantedBank loadIDs = Scribe.loader.crossRefs.loadIDs;

            if (node != null && Scribe.EnterNode(label))
            {
                try
                {
                    string innerText = node.InnerText;
                    if (innerText.Length != 0 && innerText[0] == '(')
                    {
                        string str;
                        string targetLoadID;
                        ScribeExtractor.ExtractCellAndMapPairFromTargetInfo(innerText, out str, out targetLoadID);
                        loadIDs.RegisterLoadIDReadFromXml(null, typeof(Thing), "thing");
                        loadIDs.RegisterLoadIDReadFromXml(targetLoadID, typeof(Map), "map");
                        loadIDs.RegisterLoadIDReadFromXml(null, typeof(WorldObject), "worldObject");
                        return(new GlobalTargetInfo(IntVec3.FromString(str), null, true));
                    }
                    int tile;
                    if (int.TryParse(innerText, out tile))
                    {
                        loadIDs.RegisterLoadIDReadFromXml(null, typeof(Thing), "thing");
                        loadIDs.RegisterLoadIDReadFromXml(null, typeof(Map), "map");
                        loadIDs.RegisterLoadIDReadFromXml(null, typeof(WorldObject), "worldObject");
                        return(new GlobalTargetInfo(tile));
                    }
                    if (innerText.Length != 0 && innerText[0] == '@')
                    {
                        loadIDs.RegisterLoadIDReadFromXml(null, typeof(Thing), "thing");
                        loadIDs.RegisterLoadIDReadFromXml(null, typeof(Map), "map");
                        loadIDs.RegisterLoadIDReadFromXml(innerText.Substring(1), typeof(WorldObject), "worldObject");
                        return(GlobalTargetInfo.Invalid);
                    }
                    loadIDs.RegisterLoadIDReadFromXml(innerText, typeof(Thing), "thing");
                    loadIDs.RegisterLoadIDReadFromXml(null, typeof(Map), "map");
                    loadIDs.RegisterLoadIDReadFromXml(null, typeof(WorldObject), "worldObject");
                    return(GlobalTargetInfo.Invalid);
                }
                finally
                {
                    Scribe.ExitNode();
                }
            }
            loadIDs.RegisterLoadIDReadFromXml(null, typeof(Thing), label + "/thing");
            loadIDs.RegisterLoadIDReadFromXml(null, typeof(Map), label + "/map");
            loadIDs.RegisterLoadIDReadFromXml(null, typeof(WorldObject), label + "/worldObject");
            return(defaultValue);
        }
コード例 #27
0
 public bool AnyTargetIs(GlobalTargetInfo target)
 {
     return(target.IsValid && (targetA == target || targetB == target || targetC == target ||
                               targetQueueA != null && targetQueueA.Contains(target) ||
                               targetQueueB != null && targetQueueB.Contains(target)));
 }
コード例 #28
0
 public void AlertsReadoutUpdate()
 {
     if (Mathf.Max(Find.TickManager.TicksGame, Find.TutorialState.endTick) < 600)
     {
         return;
     }
     if (Find.Storyteller.def.disableAlerts)
     {
         this.activeAlerts.Clear();
         return;
     }
     this.curAlertIndex++;
     if (this.curAlertIndex >= AlertsReadout.AlertCycleLength)
     {
         this.curAlertIndex = 0;
     }
     for (int i = this.curAlertIndex; i < this.AllAlerts.Count; i += AlertsReadout.AlertCycleLength)
     {
         Alert alert = this.AllAlerts[i];
         try
         {
             if (alert.Active)
             {
                 if (!this.activeAlerts.Contains(alert))
                 {
                     this.activeAlerts.Add(alert);
                     alert.Notify_Started();
                 }
             }
             else
             {
                 for (int j = 0; j < this.activeAlerts.Count; j++)
                 {
                     if (this.activeAlerts[j] == alert)
                     {
                         this.activeAlerts.RemoveAt(j);
                         break;
                     }
                 }
             }
         }
         catch (Exception ex)
         {
             Log.ErrorOnce("Exception processing alert " + alert.ToString() + ": " + ex.ToString(), 743575);
             if (this.activeAlerts.Contains(alert))
             {
                 this.activeAlerts.Remove(alert);
             }
         }
     }
     for (int k = this.activeAlerts.Count - 1; k >= 0; k--)
     {
         Alert alert2 = this.activeAlerts[k];
         try
         {
             this.activeAlerts[k].AlertActiveUpdate();
         }
         catch (Exception ex2)
         {
             Log.ErrorOnce("Exception updating alert " + alert2.ToString() + ": " + ex2.ToString(), 743575);
             this.activeAlerts.RemoveAt(k);
         }
     }
     if (this.mouseoverAlertIndex >= 0 && this.mouseoverAlertIndex < this.activeAlerts.Count)
     {
         GlobalTargetInfo culprit = this.activeAlerts[this.mouseoverAlertIndex].GetReport().culprit;
         if (culprit.IsValid && culprit.IsMapTarget && Find.VisibleMap != null && culprit.Map == Find.VisibleMap)
         {
             GenDraw.DrawArrowPointingAt(((TargetInfo)culprit).CenterVector3, false);
         }
     }
     this.mouseoverAlertIndex = -1;
 }
コード例 #29
0
 public CaravanJob(CaravanJobDef def, GlobalTargetInfo targetA, GlobalTargetInfo targetB)
 {
     this.def     = def;
     this.targetA = targetA;
     this.targetB = targetB;
 }
コード例 #30
0
 public static void Look(ref GlobalTargetInfo value, string label, GlobalTargetInfo defaultValue)
 {
     Look(ref value, saveDestroyedThings: false, label, defaultValue);
 }