public static bool ReleaseAllClaimedBy(PhysicalInteractionReservationManager __instance, Pawn claimant) { if (instancePawnToTargetToJob.TryGetValue(__instance, out Dictionary <Pawn, Dictionary <LocalTargetInfo, Job> > pawnToTargetToJob)) { if (pawnToTargetToJob.TryGetValue(claimant, out Dictionary <LocalTargetInfo, Job> targetToJob) && targetToJob.Count > 0) { lock (__instance) { foreach (KeyValuePair <LocalTargetInfo, Job> kvp in targetToJob) { LocalTargetInfo localTargetInfo = kvp.Key; if (instanceTargetToPawnToJob.TryGetValue(__instance, out Dictionary <LocalTargetInfo, Dictionary <Pawn, Job> > targetToPawnToJob)) { if (targetToPawnToJob.TryGetValue(localTargetInfo, out Dictionary <Pawn, Job> pawnToJob)) { if (pawnToJob.TryGetValue(claimant, out _)) { pawnToJob.Remove(claimant); PlantHarvest_Cache.ReregisterObject(claimant.Map, localTargetInfo.Cell, PlantHarvest_Cache.awaitingHarvestCellsMapDict); } } } } pawnToTargetToJob.Remove(claimant); } } } return(false); }
public static bool ReleaseAllForTarget(PhysicalInteractionReservationManager __instance, LocalTargetInfo target) { if (instanceTargetToPawnToJob.TryGetValue(__instance, out Dictionary <LocalTargetInfo, Dictionary <Pawn, Job> > targetToPawnToJob)) { if (targetToPawnToJob.TryGetValue(target, out _)) { lock (__instance) { if (targetToPawnToJob.TryGetValue(target, out Dictionary <Pawn, Job> pawnToJob)) { foreach (KeyValuePair <Pawn, Job> kvp in pawnToJob) { if (instancePawnToTargetToJob.TryGetValue(__instance, out Dictionary <Pawn, Dictionary <LocalTargetInfo, Job> > pawnToTargetToJob)) { Pawn pawn = kvp.Key; if (pawnToTargetToJob.TryGetValue(pawn, out Dictionary <LocalTargetInfo, Job> targetToJob)) { if (targetToJob.TryGetValue(target, out _)) { targetToJob.Remove(target); } } } } targetToPawnToJob.Remove(target); if (target != null && target.Thing != null && target.Thing.Map != null) { PlantHarvest_Cache.ReregisterObject(target.Thing.Map, target.Cell, PlantHarvest_Cache.awaitingHarvestCellsMapDict); } } } } } return(false); }
public static bool ReleaseAllForTarget(PhysicalInteractionReservationManager __instance, LocalTargetInfo target) { ConcurrentDictionary <LocalTargetInfo, ConcurrentDictionary <Pawn, Job> > targetToPawnToJob = instanceTargetToPawnToJob.GetOrAdd(__instance, new ConcurrentDictionary <LocalTargetInfo, ConcurrentDictionary <Pawn, Job> >()); targetToPawnToJob.TryRemove(target, out _); return(false); }
public static bool Reserve(PhysicalInteractionReservationManager __instance, Pawn claimant, Job job, LocalTargetInfo target) { if (!instanceTargetToPawnToJob.TryGetValue(__instance, out Dictionary <LocalTargetInfo, Dictionary <Pawn, Job> > targetToPawnToJob)) { lock (__instance) { if (!instanceTargetToPawnToJob.TryGetValue(__instance, out Dictionary <LocalTargetInfo, Dictionary <Pawn, Job> > targetToPawnToJob2)) { targetToPawnToJob2 = new Dictionary <LocalTargetInfo, Dictionary <Pawn, Job> >(); instanceTargetToPawnToJob.Add(__instance, targetToPawnToJob2); } targetToPawnToJob = targetToPawnToJob2; } } if (!targetToPawnToJob.TryGetValue(target, out Dictionary <Pawn, Job> pawnToJob)) { lock (__instance) { if (!targetToPawnToJob.TryGetValue(target, out Dictionary <Pawn, Job> pawnToJob2)) { pawnToJob2 = new Dictionary <Pawn, Job>(); targetToPawnToJob.Add(target, pawnToJob2); } pawnToJob = pawnToJob2; } } if (!instancePawnToTargetToJob.TryGetValue(__instance, out Dictionary <Pawn, Dictionary <LocalTargetInfo, Job> > pawnToTargetToJob)) { lock (__instance) { if (!instancePawnToTargetToJob.TryGetValue(__instance, out Dictionary <Pawn, Dictionary <LocalTargetInfo, Job> > pawnToTargetToJob2)) { pawnToTargetToJob2 = new Dictionary <Pawn, Dictionary <LocalTargetInfo, Job> >(); instancePawnToTargetToJob.Add(__instance, pawnToTargetToJob2); } pawnToTargetToJob = pawnToTargetToJob2; } } if (!pawnToTargetToJob.TryGetValue(claimant, out Dictionary <LocalTargetInfo, Job> targetToJob)) { lock (__instance) { if (!pawnToTargetToJob.TryGetValue(claimant, out Dictionary <LocalTargetInfo, Job> targetToJob2)) { targetToJob2 = new Dictionary <LocalTargetInfo, Job>(); pawnToTargetToJob.Add(claimant, targetToJob2); } targetToJob = targetToJob2; } } lock (__instance) { pawnToJob.Add(claimant, job); targetToJob.Add(target, job); } return(false); }
public static bool IsReservedBy(PhysicalInteractionReservationManager __instance, ref bool __result, Pawn claimant, LocalTargetInfo target) { __result = false; if (instanceTargetToPawnToJob.TryGetValue(__instance, out Dictionary <LocalTargetInfo, Dictionary <Pawn, Job> > targetToPawnToJob)) { if (targetToPawnToJob.TryGetValue(target, out Dictionary <Pawn, Job> pawnToJob)) { __result = pawnToJob.ContainsKey(claimant); } } return(false); }
public static bool FirstReserverOf(PhysicalInteractionReservationManager __instance, ref Pawn __result, LocalTargetInfo target) { __result = null; ConcurrentDictionary <LocalTargetInfo, ConcurrentDictionary <Pawn, Job> > targetToPawnToJob = instanceTargetToPawnToJob.GetOrAdd(__instance, new ConcurrentDictionary <LocalTargetInfo, ConcurrentDictionary <Pawn, Job> >()); if (targetToPawnToJob.TryGetValue(target, out ConcurrentDictionary <Pawn, Job> pawnToJob)) { __result = pawnToJob.First().Key; } return(false); }
public static bool Reserve(PhysicalInteractionReservationManager __instance, Pawn claimant, Job job, LocalTargetInfo target) { ConcurrentDictionary <LocalTargetInfo, ConcurrentDictionary <Pawn, Job> > targetToPawnToJob = instanceTargetToPawnToJob.GetOrAdd(__instance, new ConcurrentDictionary <LocalTargetInfo, ConcurrentDictionary <Pawn, Job> >()); ConcurrentDictionary <Pawn, Job> pawnToJob = targetToPawnToJob.GetOrAdd(target, new ConcurrentDictionary <Pawn, Job>()); if (!pawnToJob.TryAdd(claimant, job)) { //Log.Warning(claimant.ToString() + " tried to reserve job " + job.ToString() + " on target " + target + ", but it's already reserved by him.", false); //uncomment } return(false); }
public static bool IsReservedBy(PhysicalInteractionReservationManager __instance, ref bool __result, Pawn claimant, LocalTargetInfo target) { __result = false; ConcurrentDictionary <LocalTargetInfo, ConcurrentDictionary <Pawn, Job> > targetToPawnToJob = instanceTargetToPawnToJob.GetOrAdd(__instance, new ConcurrentDictionary <LocalTargetInfo, ConcurrentDictionary <Pawn, Job> >()); if (targetToPawnToJob.TryGetValue(target, out ConcurrentDictionary <Pawn, Job> pawnToJob)) { __result = pawnToJob.ContainsKey(claimant); } return(__result); }
public Pawn PawnToUpload() { ThingWithComps parent = this.parent; List <Pawn> pawns = RimValiUtility.CheckAllPawnsInMapAndFaction(parent.Map, parent.Faction).ToList <Pawn>(); foreach (Pawn pawn in pawns) { PhysicalInteractionReservationManager physicalInteractionReservationManager = new PhysicalInteractionReservationManager(); if (physicalInteractionReservationManager.IsReservedBy(pawn, this.parent) == true) { return(pawn); } } return(null); }
public static bool ReleaseAllClaimedBy(PhysicalInteractionReservationManager __instance, Pawn claimant) { ConcurrentDictionary <LocalTargetInfo, ConcurrentDictionary <Pawn, Job> > targetToPawnToJob = instanceTargetToPawnToJob.GetOrAdd(__instance, new ConcurrentDictionary <LocalTargetInfo, ConcurrentDictionary <Pawn, Job> >()); foreach (LocalTargetInfo key in targetToPawnToJob.Keys.ToList()) { targetToPawnToJob.TryGetValue(key, out ConcurrentDictionary <Pawn, Job> pawnToJob); if (pawnToJob.ContainsKey(claimant)) { pawnToJob.TryRemove(claimant, out _); targetToPawnToJob.TryRemove(key, out _); } } return(false); }
public static bool FirstReservationFor(PhysicalInteractionReservationManager __instance, ref LocalTargetInfo __result, Pawn claimant) { ConcurrentDictionary <LocalTargetInfo, ConcurrentDictionary <Pawn, Job> > targetToPawnToJob = instanceTargetToPawnToJob.GetOrAdd(__instance, new ConcurrentDictionary <LocalTargetInfo, ConcurrentDictionary <Pawn, Job> >()); __result = LocalTargetInfo.Invalid; foreach (KeyValuePair <LocalTargetInfo, ConcurrentDictionary <Pawn, Job> > pair in targetToPawnToJob) { if (pair.Value.ContainsKey(claimant)) { __result = pair.Key; break; } } return(false); }
public static bool FirstReservationFor(PhysicalInteractionReservationManager __instance, ref LocalTargetInfo __result, Pawn claimant) { __result = LocalTargetInfo.Invalid; if (instancePawnToTargetToJob.TryGetValue(__instance, out Dictionary <Pawn, Dictionary <LocalTargetInfo, Job> > pawnToTargetToJob)) { if (pawnToTargetToJob.TryGetValue(claimant, out Dictionary <LocalTargetInfo, Job> targetToJob) && targetToJob.Count > 0) { try { __result = targetToJob.First().Key; } catch (InvalidOperationException) { } } } return(false); }
public static bool FirstReserverOf(PhysicalInteractionReservationManager __instance, ref Pawn __result, LocalTargetInfo target) { __result = null; if (instanceTargetToPawnToJob.TryGetValue(__instance, out Dictionary <LocalTargetInfo, Dictionary <Pawn, Job> > targetToPawnToJob)) { if (targetToPawnToJob.TryGetValue(target, out Dictionary <Pawn, Job> pawnToJob) && pawnToJob.Count > 0) { try { __result = pawnToJob.First().Key; } catch (InvalidOperationException) { } } } return(false); }
public static bool Release(PhysicalInteractionReservationManager __instance, Pawn claimant, Job job, LocalTargetInfo target) { ConcurrentDictionary <LocalTargetInfo, ConcurrentDictionary <Pawn, Job> > targetToPawnToJob = instanceTargetToPawnToJob.GetOrAdd(__instance, new ConcurrentDictionary <LocalTargetInfo, ConcurrentDictionary <Pawn, Job> >()); if (targetToPawnToJob.TryGetValue(target, out ConcurrentDictionary <Pawn, Job> pawnToJob)) { if (pawnToJob.TryGetValue(claimant, out Job outJob)) { if (outJob == job) { if (pawnToJob.TryRemove(claimant, out _)) { /* * if (pawnToJob.Count == 0) * { * if (!targetToPawnToJob.TryRemove(target, out _)) * { * Log.Warning("Failed to release target " + (object)target + ", from targetToPawnToJob Dictionary.", false); * } * } */ } else { Log.Warning(claimant.ToString() + " tried to release reservation on target " + target + ", but it failed.", false); } } else { Log.Warning(claimant.ToString() + " tried to release reservation on target " + target + ", but job was different.", false); } } else { Log.Warning(claimant.ToString() + " tried to release reservation on target " + target + ", but claimant was not found.", false); } } else { Log.Warning(claimant.ToString() + " tried to release reservation on target " + target + ", but target had no physical reservations.", false); } return(false); }
public static bool Release(PhysicalInteractionReservationManager __instance, Pawn claimant, Job job, LocalTargetInfo target) { bool plantReregistered = false; lock (__instance) { if (instanceTargetToPawnToJob.TryGetValue(__instance, out Dictionary <LocalTargetInfo, Dictionary <Pawn, Job> > targetToPawnToJob)) { if (targetToPawnToJob.TryGetValue(target, out Dictionary <Pawn, Job> pawnToJob)) { if (pawnToJob.TryGetValue(claimant, out Job outJob)) { if (outJob == job) { pawnToJob.Remove(claimant); plantReregistered = true; PlantHarvest_Cache.ReregisterObject(claimant.Map, target.Cell, PlantHarvest_Cache.awaitingHarvestCellsMapDict); } else { Log.Warning(claimant.ToString() + " tried to release reservation on target " + target + ", but job was different."); } } else { Log.Warning(claimant.ToString() + " tried to release reservation on target " + target + ", but job was different."); } } else { Log.Warning(claimant.ToString() + " tried to release reservation on target " + target + ", but claimant was not found."); } } else { Log.Warning(claimant.ToString() + " tried to release reservation on target " + target + ", but target had no physical reservations."); } if (instancePawnToTargetToJob.TryGetValue(__instance, out Dictionary <Pawn, Dictionary <LocalTargetInfo, Job> > pawnToTargetToJob)) { if (pawnToTargetToJob.TryGetValue(claimant, out Dictionary <LocalTargetInfo, Job> targetToJob)) { if (targetToJob.TryGetValue(target, out Job outJob2)) { if (outJob2 == job) { bool targetToJobResult = targetToJob.Remove(target); if (!plantReregistered) { PlantHarvest_Cache.ReregisterObject(claimant.Map, target.Cell, PlantHarvest_Cache.awaitingHarvestCellsMapDict); } } else { Log.Warning(claimant.ToString() + " tried to release reservation on target " + target + ", but job was different."); } } else { Log.Warning(claimant.ToString() + " tried to release reservation on target " + target + ", but job was different."); } } else { Log.Warning(claimant.ToString() + " tried to release reservation on target " + target + ", but claimant was not found."); } } else { Log.Warning(claimant.ToString() + " tried to release reservation on target " + target + ", but target had no physical reservations."); } } return(false); }