Ejemplo n.º 1
0
        public static IEnumerable <FloatMenuOption> GetATKFloatMenuOptions(
            CompLaunchableHelicopter representative,
            IEnumerable <IThingHolder> pods,
            SettlementBase settlement,
            Caravan car)
        {
            Func <FloatMenuAcceptanceReport> acceptanceReportGetter1 = (Func <FloatMenuAcceptanceReport>)(() => TransportPodsArrivalAction_AttackSettlement.CanAttack(pods, settlement));
            Func <TransportPodsArrivalAction_AttackSettlement> arrivalActionGetter1 = (Func <TransportPodsArrivalAction_AttackSettlement>)(() => new TransportPodsArrivalAction_AttackSettlement(settlement, PawnsArrivalModeDefOf.EdgeDrop));

            object[] objArray1 = new object[1]
            {
                (object)settlement.Label
            };
            foreach (FloatMenuOption floatMenuOption in HelicoptersArrivalActionUtility.GetFloatMenuOptions <TransportPodsArrivalAction_AttackSettlement>(acceptanceReportGetter1, arrivalActionGetter1, "AttackAndDropAtEdge".Translate(objArray1), representative, settlement.Tile, car))
            {
                FloatMenuOption f = floatMenuOption;
                yield return(f);

                f = (FloatMenuOption)null;
            }
            Func <FloatMenuAcceptanceReport> acceptanceReportGetter2 = (Func <FloatMenuAcceptanceReport>)(() => TransportPodsArrivalAction_AttackSettlement.CanAttack(pods, settlement));
            Func <TransportPodsArrivalAction_AttackSettlement> arrivalActionGetter2 = (Func <TransportPodsArrivalAction_AttackSettlement>)(() => new TransportPodsArrivalAction_AttackSettlement(settlement, PawnsArrivalModeDefOf.CenterDrop));

            object[] objArray2 = new object[1]
            {
                (object)settlement.Label
            };
            foreach (FloatMenuOption floatMenuOption in HelicoptersArrivalActionUtility.GetFloatMenuOptions <TransportPodsArrivalAction_AttackSettlement>(acceptanceReportGetter2, arrivalActionGetter2, "AttackAndDropInCenter".Translate(objArray2), representative, settlement.Tile, car))
            {
                FloatMenuOption f2 = floatMenuOption;
                yield return(f2);

                f2 = (FloatMenuOption)null;
            }
        }
Ejemplo n.º 2
0
        public static IEnumerable <FloatMenuOption> GetSettle(
            SettlementBase bs,
            IEnumerable <IThingHolder> pods,
            CompLaunchableHelicopter representative,
            Caravan car)
        {
            foreach (FloatMenuOption floatMenuOption in HelicopterStatic.GetMapParent((MapParent)bs, pods, representative, car))
            {
                FloatMenuOption o = floatMenuOption;
                yield return(o);

                o = (FloatMenuOption)null;
            }
            foreach (FloatMenuOption visitFloatMenuOption in HelicoptersArrivalActionUtility.GetVisitFloatMenuOptions(representative, pods, bs, car))
            {
                FloatMenuOption f = visitFloatMenuOption;
                yield return(f);

                f = (FloatMenuOption)null;
            }
            foreach (FloatMenuOption giftFloatMenuOption in HelicoptersArrivalActionUtility.GetGIFTFloatMenuOptions(representative, pods, bs, car))
            {
                FloatMenuOption f2 = giftFloatMenuOption;
                yield return(f2);

                f2 = (FloatMenuOption)null;
            }
            foreach (FloatMenuOption atkFloatMenuOption in HelicoptersArrivalActionUtility.GetATKFloatMenuOptions(representative, pods, bs, car))
            {
                FloatMenuOption f3 = atkFloatMenuOption;
                yield return(f3);

                f3 = (FloatMenuOption)null;
            }
        }
Ejemplo n.º 3
0
 public static IEnumerable <FloatMenuOption> GetVisitFloatMenuOptions(CompLaunchableHelicopter representative, IEnumerable <IThingHolder> pods, SettlementBase settlement, Caravan car)
 {
     return(HelicoptersArrivalActionUtility.GetFloatMenuOptions <TransportPodsArrivalAction_VisitSettlement>(() => TransportPodsArrivalAction_VisitSettlement.CanVisit(pods, settlement), () => new TransportPodsArrivalAction_VisitSettlement(settlement), "VisitSettlement".Translate(new object[]
     {
         settlement.Label
     }), representative, settlement.Tile, car));
 }
Ejemplo n.º 4
0
 public static IEnumerable <FloatMenuOption> GetGIFTFloatMenuOptions(CompLaunchableHelicopter representative, IEnumerable <IThingHolder> pods, Settlement settlement, Caravan car)
 {
     if (settlement.Faction == Faction.OfPlayer)
     {
         return(Enumerable.Empty <FloatMenuOption>());
     }
     return(HelicoptersArrivalActionUtility.GetFloatMenuOptions <TransportPodsArrivalAction_GiveGift>(() => TransportPodsArrivalAction_GiveGift.CanGiveGiftTo(pods, settlement),
                                                                                                      () => new TransportPodsArrivalAction_GiveGift(settlement), "GiveGiftViaTransportPods".Translate(settlement.Faction.Name,
                                                                                                                                                                                                      FactionGiftUtility.GetGoodwillChange(pods, settlement).ToStringWithSign()), representative, settlement.Tile, car));
 }
Ejemplo n.º 5
0
 public static IEnumerable <FloatMenuOption> GetATKFloatMenuOptions(CompLaunchableHelicopter representative, IEnumerable <IThingHolder> pods, Settlement settlement, Caravan car)
 {
     foreach (FloatMenuOption f in HelicoptersArrivalActionUtility.GetFloatMenuOptions <TransportPodsArrivalAction_AttackSettlement>(() => TransportPodsArrivalAction_AttackSettlement.CanAttack(pods, settlement), () => new TransportPodsArrivalAction_AttackSettlement(settlement, PawnsArrivalModeDefOf.EdgeDrop), "AttackAndDropAtEdge".Translate(settlement.Label), representative, settlement.Tile, car))
     {
         yield return(f);
     }
     foreach (FloatMenuOption f2 in HelicoptersArrivalActionUtility.GetFloatMenuOptions <TransportPodsArrivalAction_AttackSettlement>(() => TransportPodsArrivalAction_AttackSettlement.CanAttack(pods, settlement), () => new TransportPodsArrivalAction_AttackSettlement(settlement, PawnsArrivalModeDefOf.CenterDrop), "AttackAndDropInCenter".Translate(settlement.Label), representative, settlement.Tile, car))
     {
         yield return(f2);
     }
     yield break;
 }
Ejemplo n.º 6
0
 public static IEnumerable <FloatMenuOption> GetVisitSite(CompLaunchableHelicopter representative, IEnumerable <IThingHolder> pods, Site site, Caravan car)
 {
     foreach (FloatMenuOption f in HelicoptersArrivalActionUtility.GetFloatMenuOptions <TransportPodsArrivalAction_VisitSite>(() => TransportPodsArrivalAction_VisitSite.CanVisit(pods, site), () => new TransportPodsArrivalAction_VisitSite(site, PawnsArrivalModeDefOf.EdgeDrop), "DropAtEdge".Translate(), representative, site.Tile, car))
     {
         yield return(f);
     }
     foreach (FloatMenuOption f2 in HelicoptersArrivalActionUtility.GetFloatMenuOptions <TransportPodsArrivalAction_VisitSite>(() => TransportPodsArrivalAction_VisitSite.CanVisit(pods, site), () => new TransportPodsArrivalAction_VisitSite(site, PawnsArrivalModeDefOf.CenterDrop), "DropInCenter".Translate(), representative, site.Tile, car))
     {
         yield return(f2);
     }
     yield break;
 }
Ejemplo n.º 7
0
        public static IEnumerable <FloatMenuOption> GetVisitSite(
            CompLaunchableHelicopter representative,
            IEnumerable <IThingHolder> pods,
            Site site,
            Caravan car)
        {
            foreach (FloatMenuOption floatMenuOption in HelicoptersArrivalActionUtility.GetFloatMenuOptions <TransportPodsArrivalAction_VisitSite>((Func <FloatMenuAcceptanceReport>)(() => TransportPodsArrivalAction_VisitSite.CanVisit(pods, site)), (Func <TransportPodsArrivalAction_VisitSite>)(() => new TransportPodsArrivalAction_VisitSite(site, PawnsArrivalModeDefOf.EdgeDrop)), "DropAtEdge".Translate(), representative, site.Tile, car))
            {
                FloatMenuOption f = floatMenuOption;
                yield return(f);

                f = (FloatMenuOption)null;
            }
            foreach (FloatMenuOption floatMenuOption in HelicoptersArrivalActionUtility.GetFloatMenuOptions <TransportPodsArrivalAction_VisitSite>((Func <FloatMenuAcceptanceReport>)(() => TransportPodsArrivalAction_VisitSite.CanVisit(pods, site)), (Func <TransportPodsArrivalAction_VisitSite>)(() => new TransportPodsArrivalAction_VisitSite(site, PawnsArrivalModeDefOf.CenterDrop)), "DropInCenter".Translate(), representative, site.Tile, car))
            {
                FloatMenuOption f2 = floatMenuOption;
                yield return(f2);

                f2 = (FloatMenuOption)null;
            }
        }
Ejemplo n.º 8
0
        public static IEnumerable <FloatMenuOption> GetSite(
            Site site,
            IEnumerable <IThingHolder> pods,
            CompLaunchableHelicopter representative,
            Caravan car)
        {
            foreach (FloatMenuOption floatMenuOption in HelicopterStatic.GetMapParent((MapParent)site, pods, representative, car))
            {
                FloatMenuOption o = floatMenuOption;
                yield return(o);

                o = (FloatMenuOption)null;
            }
            foreach (FloatMenuOption floatMenuOption in HelicopterStatic.GetVisitSite(representative, pods, site, car))
            {
                FloatMenuOption o2 = floatMenuOption;
                yield return(o2);

                o2 = (FloatMenuOption)null;
            }
        }
Ejemplo n.º 9
0
        public static IEnumerable <FloatMenuOption> GetFloatMenuOptions <T>(
            Func <FloatMenuAcceptanceReport> acceptanceReportGetter,
            Func <T> arrivalActionGetter,
            string label,
            CompLaunchableHelicopter representative,
            int destinationTile,
            Caravan car)
            where T : TransportPodsArrivalAction
        {
            FloatMenuAcceptanceReport rep = acceptanceReportGetter();

            if (rep.Accepted || !rep.FailReason.NullOrEmpty() || !rep.FailMessage.NullOrEmpty())
            {
                if (!rep.FailReason.NullOrEmpty())
                {
                    yield return(new FloatMenuOption(label + " (" + rep.FailReason + ")", (Action)null, MenuOptionPriority.Default, (Action)null, (Thing)null, 0.0f, (Func <Rect, bool>)null, (WorldObject)null));
                }
                else
                {
                    yield return(new FloatMenuOption(label, (Action)(() =>
                    {
                        FloatMenuAcceptanceReport acceptanceReport = acceptanceReportGetter();
                        if (acceptanceReport.Accepted)
                        {
                            representative.TryLaunch(destinationTile, (TransportPodsArrivalAction)arrivalActionGetter(), car);
                        }
                        else
                        {
                            if (acceptanceReport.FailMessage.NullOrEmpty())
                            {
                                return;
                            }
                            Messages.Message(acceptanceReport.FailMessage, (LookTargets) new GlobalTargetInfo(destinationTile), MessageTypeDefOf.RejectInput, false);
                        }
                    }), MenuOptionPriority.Default, (Action)null, (Thing)null, 0.0f, (Func <Rect, bool>)null, (WorldObject)null));
                }
            }
        }
Ejemplo n.º 10
0
 public static IEnumerable <FloatMenuOption> GetMapParent(
     MapParent mapparent,
     IEnumerable <IThingHolder> pods,
     CompLaunchableHelicopter representative,
     Caravan car)
 {
     if (TransportPodsArrivalAction_LandInSpecificCell.CanLandInSpecificCell(pods, mapparent))
     {
         yield return(new FloatMenuOption("LandInExistingMap".Translate((object)mapparent.Label), (Action)(() =>
         {
             Map myMap = car != null ? (Map)null : representative.parent.Map;
             Current.Game.CurrentMap = mapparent.Map;
             CameraJumper.TryHideWorld();
             Find.Targeter.BeginTargeting(TargetingParameters.ForDropPodsDestination(), (Action <LocalTargetInfo>)(x => representative.TryLaunch(mapparent.Tile, (TransportPodsArrivalAction) new TransportPodsArrivalAction_LandInSpecificCell(mapparent, x.Cell), car)), (Pawn)null, (Action)(() =>
             {
                 if (myMap == null || !Find.Maps.Contains(myMap))
                 {
                     return;
                 }
                 Current.Game.CurrentMap = myMap;
             }), CompLaunchable.TargeterMouseAttachment);
         }), MenuOptionPriority.Default, (Action)null, (Thing)null, 0.0f, (Func <Rect, bool>)null, (WorldObject)null));
     }
 }
Ejemplo n.º 11
0
 public static IEnumerable <FloatMenuOption> getFM(
     WorldObject wobj,
     IEnumerable <IThingHolder> ih,
     CompLaunchableHelicopter comp,
     Caravan car)
 {
     if (wobj is Caravan)
     {
         return(Enumerable.Empty <FloatMenuOption>());
     }
     if (wobj is Site)
     {
         return(HelicopterStatic.GetSite(wobj as Site, ih, comp, car));
     }
     if (wobj is SettlementBase)
     {
         return(HelicopterStatic.GetSettle(wobj as SettlementBase, ih, comp, car));
     }
     if (wobj is MapParent)
     {
         return(HelicopterStatic.GetMapParent(wobj as MapParent, ih, comp, car));
     }
     return(Enumerable.Empty <FloatMenuOption>());
 }
        // Token: 0x060028DA RID: 10458 RVA: 0x001352F0 File Offset: 0x001336F0
        public void TryLaunch(int destinationTile, TransportPodsArrivalAction arrivalAction, Caravan cafr = null)
        {
            //Log.Warning("CARR:" + this.carr+"/"+cafr);
            if (cafr == null)
            {
                if (!this.parent.Spawned)
                {
                    Log.Error("Tried to launch " + this.parent + ", but it's unspawned.", false);
                    return;
                }
            }

            /*
             * List<CompTransporter> transportersInGroup = this.TransportersInGroup;
             * if (transportersInGroup == null)
             * {
             *  Log.Error("Tried to launch " + this.parent + ", but it's not in any group.", false);
             *  return;
             * }
             */
            if (this.parent.Spawned)
            {
                if (!this.LoadingInProgressOrReadyToLaunch)
                {
                    return;
                }
            }
            if (!this.AllInGroupConnectedToFuelingPort || !this.AllFuelingPortSourcesInGroupHaveAnyFuel)
            {
                return;
            }
            if (cafr == null)
            {
                Map map = this.parent.Map;
                int num = Find.WorldGrid.TraversalDistanceBetween(map.Tile, destinationTile, true, int.MaxValue);
                if (num > this.MaxLaunchDistance)
                {
                    return;
                }
                this.Transporter.TryRemoveLord(map);
                int   groupID = this.Transporter.groupID;
                float amount  = Mathf.Max(CompLaunchableHelicopter.FuelNeededToLaunchAtDist((float)num), 1f);
                //for (int i = 0; i < transportersInGroup.Count; i++)

                CompTransporter compTransporter   = this.FuelingPortSource.TryGetComp <CompTransporter>(); //transportersInGroup[i];
                Building        fuelingPortSource = this.FuelingPortSource;                                //compTransporter.Launchable.FuelingPortSource;
                if (fuelingPortSource != null)
                {
                    fuelingPortSource.TryGetComp <CompRefuelable>().ConsumeFuel(amount);
                }
                ThingOwner directlyHeldThings = compTransporter.GetDirectlyHeldThings();

                Thing helicopter = ThingMaker.MakeThing(ThingDef.Named("Building_Helicopter"));
                helicopter.SetFactionDirect(Faction.OfPlayer);

                CompRefuelable compr  = helicopter.TryGetComp <CompRefuelable>();
                Type           tcr    = compr.GetType();
                FieldInfo      finfos = tcr.GetField("fuel", BindingFlags.NonPublic | BindingFlags.Instance);
                finfos.SetValue(compr, fuelingPortSource.TryGetComp <CompRefuelable>().Fuel);

                compr.TargetFuelLevel = fuelingPortSource.TryGetComp <CompRefuelable>().TargetFuelLevel;

                helicopter.stackCount = 1;
                directlyHeldThings.TryAddOrTransfer(helicopter);

                ActiveDropPod activeDropPod = (ActiveDropPod)ThingMaker.MakeThing(ThingDef.Named("ActiveHelicopter"), null);
                activeDropPod.Contents = new ActiveDropPodInfo();
                activeDropPod.Contents.innerContainer.TryAddRangeOrTransfer(directlyHeldThings, true, true);
                HelicopterLeaving dropPodLeaving = (HelicopterLeaving)SkyfallerMaker.MakeSkyfaller(ThingDef.Named("HelicopterLeaving"), activeDropPod);
                dropPodLeaving.groupID         = groupID;
                dropPodLeaving.destinationTile = destinationTile;
                dropPodLeaving.arrivalAction   = arrivalAction;
                compTransporter.CleanUpLoadingVars(map);
                //compTransporter.parent
                IntVec3 poc = fuelingPortSource.Position;
                // fuelingPortSource.Destroy(DestroyMode.Vanish);
                HelicopterStatic.HelicopterDestroy(fuelingPortSource, DestroyMode.Vanish);
                GenSpawn.Spawn(dropPodLeaving, poc, map, WipeMode.Vanish);

                CameraJumper.TryHideWorld();
            }
            else
            {
                int num = Find.WorldGrid.TraversalDistanceBetween(carr.Tile, destinationTile, true, int.MaxValue);
                if (num > this.MaxLaunchDistance)
                {
                    return;
                }
                float amount = Mathf.Max(CompLaunchableHelicopter.FuelNeededToLaunchAtDist((float)num), 1f);
                if (FuelingPortSource != null)
                {
                    FuelingPortSource.TryGetComp <CompRefuelable>().ConsumeFuel(amount);
                }


                ThingOwner <Pawn> directlyHeldThings = (ThingOwner <Pawn>)cafr.GetDirectlyHeldThings();
                Thing             helicopter         = null;
                foreach (Pawn pawn in directlyHeldThings.InnerListForReading)
                {
                    Pawn_InventoryTracker pinv = pawn.inventory;
                    for (int i = 0; i < pinv.innerContainer.Count; i++)
                    {
                        if (pinv.innerContainer[i].def.defName == ("Building_Helicopter"))
                        {
                            helicopter = pinv.innerContainer[i];
                            pinv.innerContainer[i].holdingOwner.Remove(pinv.innerContainer[i]);

                            break;
                        }
                    }
                }

                ThingOwner <Thing> finalto = new ThingOwner <Thing>();
                List <Pawn>        lpto    = directlyHeldThings.AsEnumerable <Pawn>().ToList();
                foreach (Pawn p in lpto)
                {
                    finalto.TryAddOrTransfer(p);
                }


                if (helicopter != null)
                {
                    // Log.Warning("TRY ADD"+helicopter);
                    if (helicopter.holdingOwner == null)
                    {
                        //Log.Warning("NULL");
                        //directlyHeldThings.
                        finalto.TryAddOrTransfer(helicopter, false);
                    }
                }


                ActiveDropPod activeDropPod = (ActiveDropPod)ThingMaker.MakeThing(ThingDef.Named("ActiveHelicopter"), null);
                activeDropPod.Contents = new ActiveDropPodInfo();
                activeDropPod.Contents.innerContainer.TryAddRangeOrTransfer(
                    //directlyHeldThings
                    finalto, true, true);

                cafr.RemoveAllPawns();
                if (cafr.Spawned)
                {
                    Find.WorldObjects.Remove(cafr);
                }

                TravelingTransportPods travelingTransportPods = (TravelingTransportPods)WorldObjectMaker.MakeWorldObject(DefDatabase <WorldObjectDef> .GetNamed("TravelingHelicopters", true));
                travelingTransportPods.Tile = cafr.Tile;
                travelingTransportPods.SetFaction(Faction.OfPlayer);
                travelingTransportPods.destinationTile = destinationTile;
                travelingTransportPods.arrivalAction   = arrivalAction;
                Find.WorldObjects.Add(travelingTransportPods);
                travelingTransportPods.AddPod(activeDropPod.Contents, true);
                activeDropPod.Contents = null;
                activeDropPod.Destroy(DestroyMode.Vanish);
                // CameraJumper.TryHideWorld();
                Find.WorldTargeter.StopTargeting();
            }
        }
        // Token: 0x060028D9 RID: 10457 RVA: 0x001351B0 File Offset: 0x001335B0
        private bool ChoseWorldTarget(GlobalTargetInfo target)
        {
            if (this.carr == null)
            {
                if (!this.LoadingInProgressOrReadyToLaunch)
                {
                    return(true);
                }
            }

            if (!target.IsValid)
            {
                Messages.Message("MessageTransportPodsDestinationIsInvalid".Translate(), MessageTypeDefOf.RejectInput, false);
                return(false);
            }

            /*
             * if (!target.HasWorldObject)
             * {
             *  Messages.Message("MessageTransportPodsDestinationIsInvalid".Translate(), MessageTypeDefOf.RejectInput, false);
             *  return false;
             * }
             */


            int myTile = -2;

            if (this.carr == null)
            {
                myTile = this.parent.Map.Tile;
            }
            else
            {
                myTile = carr.Tile;
            }

            int num = Find.WorldGrid.TraversalDistanceBetween(myTile, target.Tile, true, int.MaxValue);

            if (num > this.MaxLaunchDistance)
            {
                Messages.Message("MessageTransportPodsDestinationIsTooFar".Translate(new object[]
                {
                    CompLaunchableHelicopter.FuelNeededToLaunchAtDist((float)num).ToString("0.#")
                }), MessageTypeDefOf.RejectInput, false);
                return(false);
            }
            if (Find.WorldGrid[target.Tile].biome.impassable || Find.World.Impassable(target.Tile))
            {
                Messages.Message("MessageTransportPodsDestinationIsInvalid".Translate(), MessageTypeDefOf.RejectInput, false);
                return(false);
            }

            MapParent mapParent = Find.WorldObjects.MapParentAt(target.Tile);


            IEnumerable <FloatMenuOption> transportPodsFloatMenuOptionsAt = this.GetTransportPodsFloatMenuOptionsAt(target.Tile, carr);


            if (!transportPodsFloatMenuOptionsAt.Any <FloatMenuOption>())
            {
                if (Find.WorldGrid[target.Tile].biome.impassable || Find.World.Impassable(target.Tile))
                {
                    Messages.Message("MessageTransportPodsDestinationIsInvalid".Translate(), MessageTypeDefOf.RejectInput, false);
                    return(false);
                }
                this.TryLaunch(target.Tile, null, null);
                return(true);
            }
            else
            {
                if (transportPodsFloatMenuOptionsAt.Count <FloatMenuOption>() == 1)
                {
                    if (!transportPodsFloatMenuOptionsAt.First <FloatMenuOption>().Disabled)
                    {
                        transportPodsFloatMenuOptionsAt.First <FloatMenuOption>().action();
                    }
                    return(false);
                }
                Find.WindowStack.Add(new FloatMenu(transportPodsFloatMenuOptionsAt.ToList <FloatMenuOption>()));
                return(false);
            }
        }
 public void TryLaunch(
     int destinationTile,
     TransportPodsArrivalAction arrivalAction,
     Caravan cafr = null)
 {
     if (cafr == null && !this.parent.Spawned)
     {
         Log.Error("Tried to launch " + (object)this.parent + ", but it's unspawned.", false);
     }
     else
     {
         if (this.parent.Spawned && !this.LoadingInProgressOrReadyToLaunch || (!this.AllInGroupConnectedToFuelingPort || !this.AllFuelingPortSourcesInGroupHaveAnyFuel))
         {
             return;
         }
         if (cafr == null)
         {
             Map map = this.parent.Map;
             int num = Find.WorldGrid.TraversalDistanceBetween(map.Tile, destinationTile, true, int.MaxValue);
             if (num > this.MaxLaunchDistance)
             {
                 return;
             }
             this.Transporter.TryRemoveLord(map);
             int             groupId           = this.Transporter.groupID;
             float           amount            = Mathf.Max(CompLaunchableHelicopter.FuelNeededToLaunchAtDist((float)num), 1f);
             CompTransporter comp1             = this.FuelingPortSource.TryGetComp <CompTransporter>();
             Building        fuelingPortSource = this.FuelingPortSource;
             if (fuelingPortSource != null)
             {
                 fuelingPortSource.TryGetComp <CompRefuelable>().ConsumeFuel(amount);
             }
             ThingOwner directlyHeldThings = comp1.GetDirectlyHeldThings();
             Thing      thing = ThingMaker.MakeThing(ThingDef.Named("Building_Helicopter"), (ThingDef)null);
             thing.SetFactionDirect(Faction.OfPlayer);
             CompRefuelable comp2 = thing.TryGetComp <CompRefuelable>();
             comp2.GetType().GetField("fuel", BindingFlags.Instance | BindingFlags.NonPublic).SetValue((object)comp2, (object)fuelingPortSource.TryGetComp <CompRefuelable>().Fuel);
             comp2.TargetFuelLevel = fuelingPortSource.TryGetComp <CompRefuelable>().TargetFuelLevel;
             thing.stackCount      = 1;
             directlyHeldThings.TryAddOrTransfer(thing, true);
             ActiveDropPod activeDropPod = (ActiveDropPod)ThingMaker.MakeThing(ThingDef.Named("ActiveHelicopter"), (ThingDef)null);
             activeDropPod.Contents = new ActiveDropPodInfo();
             activeDropPod.Contents.innerContainer.TryAddRangeOrTransfer((IEnumerable <Thing>)directlyHeldThings, true, true);
             HelicopterLeaving helicopterLeaving = (HelicopterLeaving)SkyfallerMaker.MakeSkyfaller(ThingDef.Named("HelicopterLeaving"), (Thing)activeDropPod);
             helicopterLeaving.groupID         = groupId;
             helicopterLeaving.destinationTile = destinationTile;
             helicopterLeaving.arrivalAction   = arrivalAction;
             comp1.CleanUpLoadingVars(map);
             IntVec3 position = fuelingPortSource.Position;
             HelicopterStatic.HelicopterDestroy((Thing)fuelingPortSource, DestroyMode.Vanish);
             GenSpawn.Spawn((Thing)helicopterLeaving, position, map, WipeMode.Vanish);
             CameraJumper.TryHideWorld();
         }
         else
         {
             int num = Find.WorldGrid.TraversalDistanceBetween(this.carr.Tile, destinationTile, true, int.MaxValue);
             if (num > this.MaxLaunchDistance)
             {
                 return;
             }
             float amount = Mathf.Max(CompLaunchableHelicopter.FuelNeededToLaunchAtDist((float)num), 1f);
             if (this.FuelingPortSource != null)
             {
                 this.FuelingPortSource.TryGetComp <CompRefuelable>().ConsumeFuel(amount);
             }
             ThingOwner <Pawn> directlyHeldThings = (ThingOwner <Pawn>)cafr.GetDirectlyHeldThings();
             Thing             thing = (Thing)null;
             foreach (Pawn pawn in directlyHeldThings.InnerListForReading)
             {
                 Pawn_InventoryTracker inventory = pawn.inventory;
                 for (int index = 0; index < inventory.innerContainer.Count; ++index)
                 {
                     if (inventory.innerContainer[index].def.defName == "Building_Helicopter")
                     {
                         thing = inventory.innerContainer[index];
                         inventory.innerContainer[index].holdingOwner.Remove(inventory.innerContainer[index]);
                         break;
                     }
                 }
             }
             ThingOwner <Thing> thingOwner = new ThingOwner <Thing>();
             foreach (Pawn pawn in directlyHeldThings.AsEnumerable <Pawn>().ToList <Pawn>())
             {
                 thingOwner.TryAddOrTransfer((Thing)pawn, true);
             }
             if (thing != null && thing.holdingOwner == null)
             {
                 thingOwner.TryAddOrTransfer(thing, false);
             }
             ActiveDropPod activeDropPod = (ActiveDropPod)ThingMaker.MakeThing(ThingDef.Named("ActiveHelicopter"), (ThingDef)null);
             activeDropPod.Contents = new ActiveDropPodInfo();
             activeDropPod.Contents.innerContainer.TryAddRangeOrTransfer((IEnumerable <Thing>)thingOwner, true, true);
             cafr.RemoveAllPawns();
             if (cafr.Spawned)
             {
                 Find.WorldObjects.Remove((WorldObject)cafr);
             }
             TravelingTransportPods travelingTransportPods = (TravelingTransportPods)WorldObjectMaker.MakeWorldObject(DefDatabase <WorldObjectDef> .GetNamed("TravelingHelicopters", true));
             travelingTransportPods.Tile = cafr.Tile;
             travelingTransportPods.SetFaction(Faction.OfPlayer);
             travelingTransportPods.destinationTile = destinationTile;
             travelingTransportPods.arrivalAction   = arrivalAction;
             Find.WorldObjects.Add((WorldObject)travelingTransportPods);
             travelingTransportPods.AddPod(activeDropPod.Contents, true);
             activeDropPod.Contents = (ActiveDropPodInfo)null;
             activeDropPod.Destroy(DestroyMode.Vanish);
             Find.WorldTargeter.StopTargeting();
         }
     }
 }
        private bool ChoseWorldTarget(GlobalTargetInfo target)
        {
            if (this.carr == null && !this.LoadingInProgressOrReadyToLaunch)
            {
                return(true);
            }
            if (!target.IsValid)
            {
                Messages.Message("MessageTransportPodsDestinationIsInvalid".Translate(), MessageTypeDefOf.RejectInput, false);
                return(false);
            }
            int num = Find.WorldGrid.TraversalDistanceBetween(this.carr != null ? this.carr.Tile : this.parent.Map.Tile, target.Tile, true, int.MaxValue);

            if (num > this.MaxLaunchDistance)
            {
                Messages.Message("MessageTransportPodsDestinationIsTooFar".Translate((object)CompLaunchableHelicopter.FuelNeededToLaunchAtDist((float)num).ToString("0.#")), MessageTypeDefOf.RejectInput, false);
                return(false);
            }
            if (Find.WorldGrid[target.Tile].biome.impassable || Find.World.Impassable(target.Tile))
            {
                Messages.Message("MessageTransportPodsDestinationIsInvalid".Translate(), MessageTypeDefOf.RejectInput, false);
                return(false);
            }
            Find.WorldObjects.MapParentAt(target.Tile);
            IEnumerable <FloatMenuOption> floatMenuOptionsAt = this.GetTransportPodsFloatMenuOptionsAt(target.Tile, this.carr);

            if (!floatMenuOptionsAt.Any <FloatMenuOption>())
            {
                if (Find.WorldGrid[target.Tile].biome.impassable || Find.World.Impassable(target.Tile))
                {
                    Messages.Message("MessageTransportPodsDestinationIsInvalid".Translate(), MessageTypeDefOf.RejectInput, false);
                    return(false);
                }
                this.TryLaunch(target.Tile, (TransportPodsArrivalAction)null, (Caravan)null);
                return(true);
            }
            if (floatMenuOptionsAt.Count <FloatMenuOption>() == 1)
            {
                if (!floatMenuOptionsAt.First <FloatMenuOption>().Disabled)
                {
                    floatMenuOptionsAt.First <FloatMenuOption>().action();
                }
                return(false);
            }
            Find.WindowStack.Add((Window) new FloatMenu(floatMenuOptionsAt.ToList <FloatMenuOption>()));
            return(false);
        }
Ejemplo n.º 16
0
        public static IEnumerable <FloatMenuOption> GetSettle(Settlement bs, IEnumerable <IThingHolder> pods, CompLaunchableHelicopter representative, Caravan car)
        {
            foreach (FloatMenuOption o in GetMapParent(bs, pods, representative, car))
            {
                yield return(o);
            }

            foreach (FloatMenuOption f in HelicoptersArrivalActionUtility.GetVisitFloatMenuOptions(representative, pods, bs, car))
            {
                yield return(f);
            }

            foreach (FloatMenuOption f2 in HelicoptersArrivalActionUtility.GetGIFTFloatMenuOptions(representative, pods, bs, car))
            {
                yield return(f2);
            }
            foreach (FloatMenuOption f3 in HelicoptersArrivalActionUtility.GetATKFloatMenuOptions(representative, pods, bs, car))
            {
                yield return(f3);
            }
            yield break;
        }
Ejemplo n.º 17
0
        public static IEnumerable <FloatMenuOption> GetFloatMenuOptions <T>(Func <FloatMenuAcceptanceReport> acceptanceReportGetter, Func <T> arrivalActionGetter, string label, CompLaunchableHelicopter representative, int destinationTile, Caravan car) where T : TransportPodsArrivalAction
        {
            FloatMenuAcceptanceReport rep = acceptanceReportGetter();

            if (rep.Accepted || !rep.FailReason.NullOrEmpty() || !rep.FailMessage.NullOrEmpty())
            {
                if (!rep.FailReason.NullOrEmpty())
                {
                    yield return(new FloatMenuOption(label + " (" + rep.FailReason + ")", null, MenuOptionPriority.Default, null, null, 0f, null, null));
                }
                else
                {
                    yield return(new FloatMenuOption(label, delegate
                    {
                        FloatMenuAcceptanceReport floatMenuAcceptanceReport = acceptanceReportGetter();
                        if (floatMenuAcceptanceReport.Accepted)
                        {
                            representative.TryLaunch(destinationTile, arrivalActionGetter(), car);
                        }
                        else if (!floatMenuAcceptanceReport.FailMessage.NullOrEmpty())
                        {
                            Messages.Message(floatMenuAcceptanceReport.FailMessage, new GlobalTargetInfo(destinationTile), MessageTypeDefOf.RejectInput, false);
                        }
                    }, MenuOptionPriority.Default, null, null, 0f, null, null));
                }
            }
            yield break;
        }
Ejemplo n.º 18
0
 public static IEnumerable <FloatMenuOption> GetSite(Site site, IEnumerable <IThingHolder> pods, CompLaunchableHelicopter representative, Caravan car)
 {
     foreach (FloatMenuOption o in GetMapParent(site, pods, representative, car))
     {
         yield return(o);
     }
     foreach (FloatMenuOption o2 in GetVisitSite(representative, pods, site, car))
     {
         yield return(o2);
     }
     yield break;
 }
Ejemplo n.º 19
0
        public static IEnumerable <FloatMenuOption> GetMapParent(MapParent mapparent, IEnumerable <IThingHolder> pods, CompLaunchableHelicopter representative, Caravan car)
        {
            /*
             * foreach (FloatMenuOption o in mapparent.GetFloatMenuOptions())
             * {
             *  yield return o;
             * }
             */

            if (TransportPodsArrivalAction_LandInSpecificCell.CanLandInSpecificCell(pods, mapparent))
            {
                yield return(new FloatMenuOption("LandInExistingMap".Translate(mapparent.Label), delegate
                {
                    Map myMap;
                    if (car == null)
                    {
                        myMap = representative.parent.Map;
                    }
                    else
                    {
                        myMap = null;
                    }

                    Map map = mapparent.Map;
                    Current.Game.CurrentMap = map;
                    CameraJumper.TryHideWorld();
                    Find.Targeter.BeginTargeting(TargetingParameters.ForDropPodsDestination(), delegate(LocalTargetInfo x)
                    {
                        representative.TryLaunch(mapparent.Tile, new TransportPodsArrivalAction_LandInSpecificCell(mapparent, x.Cell), car);
                    }, null, delegate
                    {
                        if (myMap != null && Find.Maps.Contains(myMap))
                        {
                            Current.Game.CurrentMap = myMap;
                        }
                    }, CompLaunchable.TargeterMouseAttachment);
                }, MenuOptionPriority.Default, null, null, 0f, null, null));
            }
            yield break;
        }