コード例 #1
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();
     }
 }
コード例 #2
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);
            }
        }