コード例 #1
0
        public static bool ReleaseAllObsoleteClaimedBy(PawnDestinationReservationManager __instance, Pawn p)
        {
            if (p.Faction == null)
            {
                return(false);
            }
            PawnDestinationReservationManager.PawnDestinationSet destinationSet      = GetPawnDestinationSetFor2(p.Faction);
            List <PawnDestinationReservationManager.PawnDestinationReservation> list = destinationSet.list;
            int index = 0;

            lock (list)
            {
                while (index < list.Count)
                {
                    if (list[index].claimant == p && list[index].obsolete)
                    {
                        list[index] = list[list.Count - 1];
                        list.RemoveLast();
                    }
                    else
                    {
                        ++index;
                    }
                }
            }
            return(false);
        }
コード例 #2
0
        public static bool ObsoleteAllClaimedBy(PawnDestinationReservationManager __instance, Pawn p)
        {
            if (p.Faction == null)
            {
                return(false);
            }
            PawnDestinationReservationManager.PawnDestinationSet destinationSet      = GetPawnDestinationSetFor2(p.Faction);
            List <PawnDestinationReservationManager.PawnDestinationReservation> list = destinationSet.list;

            lock (list)
            {
                for (int index = 0; index < list.Count; ++index)
                {
                    if (list[index].claimant == p)
                    {
                        list[index].obsolete = true;
                        if (list[index].job == null)
                        {
                            list[index] = list[list.Count - 1];
                            list.RemoveLast();
                            --index;
                        }
                    }
                }
            }
            return(false);
        }
コード例 #3
0
        public static bool Reserve(PawnDestinationReservationManager __instance, Pawn p, Job job, IntVec3 loc)
        {
            if (p.Faction == null)
            {
                return(false);
            }
            Pawn claimant;

            if (p.Drafted && p.Faction == Faction.OfPlayer && (__instance.IsReserved(loc, out claimant) && claimant != p) && (!claimant.HostileTo((Thing)p) && claimant.Faction != p.Faction) && (claimant.mindState == null || claimant.mindState.mentalStateHandler == null || !claimant.mindState.mentalStateHandler.InMentalState || claimant.mindState.mentalStateHandler.CurStateDef.category != MentalStateCategory.Aggro && claimant.mindState.mentalStateHandler.CurStateDef.category != MentalStateCategory.Malicious))
            {
                claimant.jobs.EndCurrentJob(JobCondition.InterruptForced, true, true);
            }
            ObsoleteAllClaimedBy2(p);
            PawnDestinationReservationManager.PawnDestinationSet destinationSet      = GetPawnDestinationSetFor2(p.Faction);
            List <PawnDestinationReservationManager.PawnDestinationReservation> list = destinationSet.list;

            lock (list)
            {
                list.Add(new PawnDestinationReservationManager.PawnDestinationReservation()
                {
                    target   = loc,
                    claimant = p,
                    job      = job
                });
            }

            return(false);
        }
コード例 #4
0
 public static PawnDestinationReservationManager.PawnDestinationSet GetPawnDestinationSetFor2(Faction faction)
 {
     PawnDestinationReservationManager.PawnDestinationSet value = reservedDestinations.GetOrAdd(faction, new PawnDestinationReservationManager.PawnDestinationSet());
     return(value);
 }
コード例 #5
0
 public static bool GetPawnDestinationSetFor(PawnDestinationReservationManager __instance, ref PawnDestinationReservationManager.PawnDestinationSet __result, Faction faction)
 {
     PawnDestinationReservationManager.PawnDestinationSet value = reservedDestinations.GetOrAdd(faction, new PawnDestinationReservationManager.PawnDestinationSet());
     __result = value;
     return(false);
 }