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); }); } }
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); } }
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; } }
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(); } }
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(); } }
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); })); } } }
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); }
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(); } }); }
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); } }