Ejemplo n.º 1
0
 private void InitializeLoading()
 {
     if (!shuttle.TryGetComp <CompTransporter>().LoadingInProgressOrReadyToLaunch)
     {
         TransporterUtility.InitiateLoading(Gen.YieldSingle(shuttle.TryGetComp <CompTransporter>()));
     }
 }
        private void LoadInstantly()
        {
            TransporterUtility.InitiateLoading(transporters);
            int i;

            for (i = 0; i < transferables.Count; i++)
            {
                TransferableUtility.Transfer(transferables[i].things, transferables[i].CountToTransfer, delegate(Thing splitPiece, IThingHolder originalThing)
                {
                    transporters[i % transporters.Count].GetDirectlyHeldThings().TryAdd(splitPiece);
                });
            }
        }
Ejemplo n.º 3
0
 public override IEnumerable <Gizmo> CompGetGizmosExtra()
 {
     foreach (Gizmo item in base.CompGetGizmosExtra())
     {
         yield return(item);
     }
     if (ShowLoadingGizmos)
     {
         if (Autoloadable)
         {
             Command_Toggle command_Toggle = new Command_Toggle();
             command_Toggle.defaultLabel = "CommandAutoloadTransporters".Translate();
             command_Toggle.defaultDesc  = "CommandAutoloadTransportersDesc".Translate();
             command_Toggle.icon         = AutoloadToggleTex;
             command_Toggle.isActive     = () => autoload;
             command_Toggle.toggleAction = delegate
             {
                 autoload = !autoload;
                 if (autoload && !LoadingInProgressOrReadyToLaunch)
                 {
                     TransporterUtility.InitiateLoading(Gen.YieldSingle(Transporter));
                 }
                 CheckAutoload();
             };
             yield return(command_Toggle);
         }
         if (!IsMissionShuttle)
         {
             Command_Action command_Action = new Command_Action();
             command_Action.defaultLabel = "CommandSendShuttle".Translate();
             command_Action.defaultDesc  = "CommandSendShuttleDesc".Translate();
             command_Action.icon         = SendCommandTex;
             command_Action.alsoClickIfOtherInGroupClicked = false;
             command_Action.action = delegate
             {
                 Send();
             };
             if (!LoadingInProgressOrReadyToLaunch || !AllRequiredThingsLoaded)
             {
                 command_Action.Disable("CommandSendShuttleFailMissingRequiredThing".Translate());
             }
             yield return(command_Action);
         }
     }
     foreach (Gizmo questRelatedGizmo in QuestUtility.GetQuestRelatedGizmos(parent))
     {
         yield return(questRelatedGizmo);
     }
 }
Ejemplo n.º 4
0
        public override IEnumerable <FloatMenuOption> CompMultiSelectFloatMenuOptions(List <Pawn> selPawns)
        {
            tmpAllowedPawns.Clear();
            string text = "EnterShuttle".Translate();

            for (int i = 0; i < selPawns.Count; i++)
            {
                if (selPawns[i].CanReach(parent, PathEndMode.Touch, Danger.Deadly))
                {
                    tmpAllowedPawns.Add(selPawns[i]);
                }
            }
            if (!tmpAllowedPawns.Any())
            {
                yield return(new FloatMenuOption(text + " (" + "NoPath".Translate() + ")", null));

                yield break;
            }
            for (int num = tmpAllowedPawns.Count - 1; num >= 0; num--)
            {
                if (!IsAllowedNow(tmpAllowedPawns[num]))
                {
                    tmpAllowedPawns.RemoveAt(num);
                }
            }
            if (!tmpAllowedPawns.Any())
            {
                yield return(new FloatMenuOption(text + " (" + "NotAllowed".Translate() + ")", null));

                yield break;
            }
            yield return(new FloatMenuOption(text, delegate
            {
                if (!LoadingInProgressOrReadyToLaunch)
                {
                    TransporterUtility.InitiateLoading(Gen.YieldSingle(Transporter));
                }
                for (int j = 0; j < tmpAllowedPawns.Count; j++)
                {
                    Pawn pawn = tmpAllowedPawns[j];
                    if (pawn.CanReach(parent, PathEndMode.Touch, Danger.Deadly) && !pawn.Downed && !pawn.Dead && pawn.Spawned)
                    {
                        Job job = JobMaker.MakeJob(JobDefOf.EnterTransporter, parent);
                        tmpAllowedPawns[j].jobs.TryTakeOrderedJob(job);
                    }
                }
            }));
        }
        public static void SendAway(Thing shuttle, bool dropEverything)
        {
            CompShuttle     compShuttle     = shuttle.TryGetComp <CompShuttle>();
            CompTransporter compTransporter = shuttle.TryGetComp <CompTransporter>();

            if (shuttle.Spawned)
            {
                if (dropEverything && compTransporter.LoadingInProgressOrReadyToLaunch)
                {
                    compTransporter.CancelLoad();
                }
                if (!compTransporter.LoadingInProgressOrReadyToLaunch)
                {
                    TransporterUtility.InitiateLoading(Gen.YieldSingle(compTransporter));
                }
                compShuttle.Send();
            }
            else if (shuttle.ParentHolder is Thing && ((Thing)shuttle.ParentHolder).def == ThingDefOf.ShuttleIncoming)
            {
                compShuttle.leaveASAP = true;
            }
        }
Ejemplo n.º 6
0
 public override void CompTick()
 {
     base.CompTick();
     if (parent.IsHashIntervalTick(120))
     {
         CheckAutoload();
     }
     if (parent.Spawned && dropEverythingOnArrival && parent.IsHashIntervalTick(60))
     {
         if (Transporter.innerContainer.Any())
         {
             Thing   thing   = Transporter.innerContainer[0];
             IntVec3 dropLoc = parent.Position + IntVec3.South;
             Pawn    pawn;
             if (Transporter.innerContainer.TryDrop_NewTmp(thing, dropLoc, parent.Map, ThingPlaceMode.Near, out Thing _, null, (IntVec3 c) => ((pawn = (Transporter.innerContainer[0] as Pawn)) == null || !pawn.Downed || c.GetFirstPawn(parent.Map) == null) ? true : false, playDropSound: false))
             {
                 Transporter.Notify_ThingRemoved(thing);
             }
         }
         else
         {
             TransporterUtility.InitiateLoading(Gen.YieldSingle(Transporter));
             Send();
         }
     }
     if (leaveASAP && parent.Spawned)
     {
         if (!LoadingInProgressOrReadyToLaunch)
         {
             TransporterUtility.InitiateLoading(Gen.YieldSingle(Transporter));
         }
         Send();
     }
     if (leaveImmediatelyWhenSatisfied && AllRequiredThingsLoaded)
     {
         Send();
     }
 }
Ejemplo n.º 7
0
        public override void CompTick()
        {
            base.CompTick();
            if (parent.IsHashIntervalTick(120))
            {
                CheckAutoload();
            }
            if (parent.Spawned && (dropEverythingOnArrival || (sendAwayIfQuestFinished != null && sendAwayIfQuestFinished.Historical)) && parent.IsHashIntervalTick(60))
            {
                OffloadShuttleOrSend();
            }
            if (leaveASAP && parent.Spawned)
            {
                if (!LoadingInProgressOrReadyToLaunch)
                {
                    TransporterUtility.InitiateLoading(Gen.YieldSingle(Transporter));
                }
                Send();
            }
            if (leaveAfterTicks > 0 && parent.Spawned && !IsMissionShuttle)
            {
                leaveAfterTicks--;
                if (leaveAfterTicks == 0)
                {
                    if (!LoadingInProgressOrReadyToLaunch)
                    {
                        TransporterUtility.InitiateLoading(Gen.YieldSingle(Transporter));
                    }
                    Send();
                }
            }
            Pawn pawn;

            if (!IsMissionShuttle && !dropEverythingOnArrival && ((leaveImmediatelyWhenSatisfied && AllRequiredThingsLoaded) || (!sendAwayIfAllDespawned.NullOrEmpty() && sendAwayIfAllDespawned.All((Thing p) => !p.Spawned && ((pawn = p as Pawn) == null || pawn.CarriedBy == null))) || (sendAwayIfAllPawnsLeftToLoadAreNotOfFaction != null && requiredPawns.All((Pawn p) => Transporter.innerContainer.Contains(p) || p.Faction != sendAwayIfAllPawnsLeftToLoadAreNotOfFaction))))
            {
                Send();
            }
        }
Ejemplo n.º 8
0
 public override IEnumerable <FloatMenuOption> CompFloatMenuOptions(Pawn selPawn)
 {
     if (selPawn.CanReach(parent, PathEndMode.Touch, Danger.Deadly))
     {
         string text = "EnterShuttle".Translate();
         if (!IsAllowed(selPawn))
         {
             yield return(new FloatMenuOption(text + " (" + "NotAllowed".Translate() + ")", null));
         }
         else
         {
             yield return(new FloatMenuOption(text, delegate
             {
                 if (!LoadingInProgressOrReadyToLaunch)
                 {
                     TransporterUtility.InitiateLoading(Gen.YieldSingle(Transporter));
                 }
                 Job job = JobMaker.MakeJob(JobDefOf.EnterTransporter, parent);
                 selPawn.jobs.TryTakeOrderedJob(job);
             }));
         }
     }
 }
Ejemplo n.º 9
0
        private bool TryAccept()
        {
            List <Pawn> pawnsFromTransferables = TransferableUtility.GetPawnsFromTransferables(transferables);

            if (!CheckForErrors(pawnsFromTransferables))
            {
                return(false);
            }
            if (LoadingInProgressOrReadyToLaunch)
            {
                AssignTransferablesToRandomTransporters();
                TransporterUtility.MakeLordsAsAppropriate(pawnsFromTransferables, transporters, map);
                List <Pawn> allPawnsSpawned = map.mapPawns.AllPawnsSpawned;
                for (int i = 0; i < allPawnsSpawned.Count; i++)
                {
                    if (allPawnsSpawned[i].CurJobDef == JobDefOf.HaulToTransporter && transporters.Contains(((JobDriver_HaulToTransporter)allPawnsSpawned[i].jobs.curDriver).Transporter))
                    {
                        allPawnsSpawned[i].jobs.EndCurrentJob(JobCondition.InterruptForced);
                    }
                }
            }
            else
            {
                TransporterUtility.InitiateLoading(transporters);
                AssignTransferablesToRandomTransporters();
                TransporterUtility.MakeLordsAsAppropriate(pawnsFromTransferables, transporters, map);
                if (transporters[0].Props.max1PerGroup)
                {
                    Messages.Message("MessageTransporterSingleLoadingProcessStarted".Translate(), transporters[0].parent, MessageTypeDefOf.TaskCompletion, historical: false);
                }
                else
                {
                    Messages.Message("MessageTransportersLoadingProcessStarted".Translate(), transporters[0].parent, MessageTypeDefOf.TaskCompletion, historical: false);
                }
            }
            return(true);
        }
Ejemplo n.º 10
0
        public override IEnumerable <Gizmo> CompGetGizmosExtra()
        {
            foreach (Gizmo item in base.CompGetGizmosExtra())
            {
                yield return(item);
            }
            CompShuttle shuttleComp = parent.TryGetComp <CompShuttle>();

            if (LoadingInProgressOrReadyToLaunch && CanTryLaunch)
            {
                Command_Action command_Action = new Command_Action();
                command_Action.defaultLabel = "CommandLaunchGroup".Translate();
                command_Action.defaultDesc  = "CommandLaunchGroupDesc".Translate();
                command_Action.icon         = LaunchCommandTex;
                command_Action.alsoClickIfOtherInGroupClicked = false;
                if (shuttleComp != null && shuttleComp.IsMissionShuttle && !shuttleComp.AllRequiredThingsLoaded)
                {
                    command_Action.Disable("ShuttleRequiredItemsNotSatisfied".Translate());
                }
                command_Action.action = delegate
                {
                    if (AnyInGroupHasAnythingLeftToLoad)
                    {
                        Find.WindowStack.Add(Dialog_MessageBox.CreateConfirmation("ConfirmSendNotCompletelyLoadedPods".Translate(FirstThingLeftToLoadInGroup.LabelCapNoCount, FirstThingLeftToLoadInGroup), StartChoosingDestination));
                    }
                    else if (shuttleComp != null && shuttleComp.IsMissionShuttle)
                    {
                        TransportPodsArrivalAction_Shuttle arrivalAction = new TransportPodsArrivalAction_Shuttle((MapParent)shuttleComp.missionShuttleTarget)
                        {
                            missionShuttleHome      = shuttleComp.missionShuttleHome,
                            missionShuttleTarget    = shuttleComp.missionShuttleTarget,
                            sendAwayIfQuestFinished = shuttleComp.sendAwayIfQuestFinished,
                            questTags = parent.questTags
                        };
                        TryLaunch((parent.Tile == shuttleComp.missionShuttleTarget.Tile) ? shuttleComp.missionShuttleHome.Tile : shuttleComp.missionShuttleTarget.Tile, arrivalAction);
                    }
                    else
                    {
                        StartChoosingDestination();
                    }
                };
                if (!AllInGroupConnectedToFuelingPort)
                {
                    command_Action.Disable("CommandLaunchGroupFailNotConnectedToFuelingPort".Translate());
                }
                else if (!AllFuelingPortSourcesInGroupHaveAnyFuel)
                {
                    command_Action.Disable("CommandLaunchGroupFailNoFuel".Translate());
                }
                else if (AnyInGroupIsUnderRoof)
                {
                    command_Action.Disable("CommandLaunchGroupFailUnderRoof".Translate());
                }
                yield return(command_Action);
            }
            if (shuttleComp == null || !shuttleComp.permitShuttle)
            {
                yield break;
            }
            yield return(new Command_Action
            {
                defaultLabel = "CommandShuttleDismiss".Translate(),
                defaultDesc = "CommandShuttleDismissDesc".Translate(),
                icon = DismissTex,
                alsoClickIfOtherInGroupClicked = false,
                action = delegate
                {
                    Transporter.innerContainer.TryDropAll(parent.Position, parent.Map, ThingPlaceMode.Near);
                    if (!LoadingInProgressOrReadyToLaunch)
                    {
                        TransporterUtility.InitiateLoading(Gen.YieldSingle(Transporter));
                    }
                    shuttleComp.Send();
                }
            });
        }
Ejemplo n.º 11
0
        private void OffloadShuttleOrSend()
        {
            Thing thingToDrop = null;
            float num         = 0f;

            for (int i = 0; i < Transporter.innerContainer.Count; i++)
            {
                Thing thing = Transporter.innerContainer[i];
                float num2  = GetDropPriority(thing);
                if (num2 > num)
                {
                    thingToDrop = thing;
                    num         = num2;
                }
            }
            if (thingToDrop != null)
            {
                IntVec3 dropLoc = parent.Position + DropoffSpotOffset;
                if (!Transporter.innerContainer.TryDrop_NewTmp(thingToDrop, dropLoc, parent.Map, ThingPlaceMode.Near, out var _, null, delegate(IntVec3 c)
                {
                    if (c.Fogged(parent.Map))
                    {
                        return(false);
                    }
                    Pawn pawn2;
                    return(((pawn2 = thingToDrop as Pawn) == null || !pawn2.Downed || c.GetFirstPawn(parent.Map) == null) ? true : false);
                }, playDropSound: false))
                {
                    return;
                }
                Transporter.Notify_ThingRemoved(thingToDrop);
                droppedOnArrival.Add(thingToDrop);
                Pawn pawn;
                if ((pawn = thingToDrop as Pawn) != null)
                {
                    if (pawn.IsColonist && pawn.Spawned && !parent.Map.IsPlayerHome)
                    {
                        pawn.drafter.Drafted = true;
                    }
                    if (pawn.guest != null && pawn.guest.IsPrisoner)
                    {
                        pawn.guest.WaitInsteadOfEscapingForDefaultTicks();
                    }
                }
            }
            else
            {
                if (!Transporter.LoadingInProgressOrReadyToLaunch)
                {
                    TransporterUtility.InitiateLoading(Gen.YieldSingle(Transporter));
                }
                if (!stayAfterDroppedEverythingOnArrival || (sendAwayIfQuestFinished != null && sendAwayIfQuestFinished.Historical))
                {
                    Send();
                }
                else
                {
                    dropEverythingOnArrival = false;
                }
            }
            float GetDropPriority(Thing t)
            {
                if (droppedOnArrival.Contains(t))
                {
                    return(0f);
                }
                Pawn p;

                if ((p = t as Pawn) != null)
                {
                    Lord lord = p.GetLord();
                    LordToil_EnterShuttleOrLeave lordToil_EnterShuttleOrLeave;
                    if (lord?.CurLordToil != null && (lordToil_EnterShuttleOrLeave = lord.CurLordToil as LordToil_EnterShuttleOrLeave) != null && lordToil_EnterShuttleOrLeave.shuttle == parent)
                    {
                        return(0f);
                    }
                    LordToil_LoadAndEnterTransporters lordToil_LoadAndEnterTransporters;
                    if (lord?.CurLordToil != null && (lordToil_LoadAndEnterTransporters = lord.CurLordToil as LordToil_LoadAndEnterTransporters) != null && lordToil_LoadAndEnterTransporters.transportersGroup == parent.TryGetComp <CompTransporter>().groupID)
                    {
                        return(0f);
                    }
                    if (!p.AnimalOrWildMan())
                    {
                        return(1f);
                    }
                    return(0.5f);
                }
                return(0.25f);
            }
        }