Here are the examples of the csharp api System.Collections.Generic.HashSet.Contains(Thing) taken from open source projects. By voting up you can indicate which examples are most useful and appropriate.
15 Examples
19
Source : HaulingCache.cs
with MIT License
from cseelhoff
with MIT License
from cseelhoff
public static IEnumerable<Thing> GetClosestHaulableItems(Pawn pawn, Map map)
{
int jumboCellWidth;
int XposOfJumboCell;
int ZposOfJumboCell;
int cellIndex;
int mapSizeX = map.Size.x;
HashSet<Thing> thingsAtCellCopy;
retrunedThings.Clear(); //hashset used to ensure same item is not retured twice
List<HashSet<Thing>[]> awaitingHaulingZoomLevels = GetAwaitingHauling(map);
IntVec3 position = pawn.Position;
Area effectiveAreaRestrictionInPawnCurrentMap = pawn.playerSettings.EffectiveAreaRestrictionInPawnCurrentMap;
Range2D areaRange = GetCorners(effectiveAreaRestrictionInPawnCurrentMap);
Range2D scannedRange = new Range2D(position.x, position.z, position.x, position.z);
for (int zoomLevel = 0; zoomLevel < awaitingHaulingZoomLevels.Count; zoomLevel++)
{
HashSet<Thing>[] thingsGrid = awaitingHaulingZoomLevels[zoomLevel];
jumboCellWidth = getJumboCellWidth(zoomLevel);
//Log.Message("Searching with jumboCellSize of: " + jumboCellWidth.ToString());
int jumboCellColumnsInMap = GetJumboCellColumnsInMap(mapSizeX, jumboCellWidth);
XposOfJumboCell = position.x / jumboCellWidth;
ZposOfJumboCell = position.z / jumboCellWidth; //replaceduming square map
if (zoomLevel == 0)
{
cellIndex = CellToIndexCustom(XposOfJumboCell, ZposOfJumboCell, jumboCellWidth);
HashSet<Thing> thingsAtCell = thingsGrid[cellIndex];
if (thingsAtCell != null && thingsAtCell.Count > 0)
{
thingsAtCellCopy = new HashSet<Thing>(thingsAtCell);
foreach (Thing haulableThing in thingsAtCellCopy)
{
if (!retrunedThings.Contains(haulableThing)) {
yield return haulableThing;
retrunedThings.Add(haulableThing);
}
}
}
}
IEnumerable<IntVec3> offsetOrder = GetOffsetOrder(position, zoomLevel, scannedRange, areaRange);
foreach(IntVec3 offset in offsetOrder)
{
int newXposOfJumboCell = XposOfJumboCell + offset.x;
int newZposOfJumboCell = ZposOfJumboCell + offset.z;
if (newXposOfJumboCell >= 0 && newXposOfJumboCell < jumboCellColumnsInMap && newZposOfJumboCell >= 0 && newZposOfJumboCell < jumboCellColumnsInMap) { //replaceduming square map
HashSet<Thing> thingsAtCell = thingsGrid[CellToIndexCustom(newXposOfJumboCell, newZposOfJumboCell, jumboCellColumnsInMap)];
if (thingsAtCell != null && thingsAtCell.Count > 0)
{
thingsAtCellCopy = new HashSet<Thing>(thingsAtCell);
foreach (Thing haulableThing in thingsAtCellCopy)
{
if (!retrunedThings.Contains(haulableThing))
{
yield return haulableThing;
retrunedThings.Add(haulableThing);
}
}
}
}
}
scannedRange.minX = Math.Min(scannedRange.minX, (XposOfJumboCell - 1) * jumboCellWidth);
scannedRange.minZ = Math.Min(scannedRange.minZ, (ZposOfJumboCell - 1) * jumboCellWidth);
scannedRange.maxX = Math.Max(scannedRange.maxX, ((XposOfJumboCell + 2) * jumboCellWidth) - 1);
scannedRange.maxZ = Math.Max(scannedRange.maxZ, ((ZposOfJumboCell + 2) * jumboCellWidth) - 1);
}
}
19
Source : WorkGiver_DoBill.cs
with MIT License
from cseelhoff
with MIT License
from cseelhoff
public bool Get_RegionProcessor(Region r)
{
List<Thing> thingList = r.ListerThings.ThingsMatching(ThingRequest.ForGroup(ThingRequestGroup.HaulableEver));
for (int index = 0; index < thingList.Count; ++index)
{
Thing thing = thingList[index];
if (!processedThings.Contains(thing) && ReachabilityWithinRegion.ThingFromRegionListerReachable(
thing, r, PathEndMode.ClosestTouch, pawn) && (baseValidator(thing) && !(thing.def.IsMedicine & billGiverIsPawn)))
{
newRelevantThings.Add(thing);
processedThings.Add(thing);
}
}
++regionsProcessed;
if (newRelevantThings.Count > 0 && regionsProcessed > adjacentRegionsAvailable)
{
relevantThings.AddRange(newRelevantThings);
newRelevantThings.Clear();
if (WorkGiver_DoBill_Patch.TryFindBestBillIngredientsInSet2(relevantThings, bill, chosen, rootCell, billGiverIsPawn, ingredientsOrdered))
{
foundAll = true;
return true;
}
}
return false;
}
19
Source : WorkGiver_Scanner_Patch.cs
with MIT License
from cseelhoff
with MIT License
from cseelhoff
private static bool TryFindAnyBillIngredients(WorkGiver_DoBill __instance, Bill bill, Pawn pawn, Thing billGiver, List<ThingCount> chosen)
{
chosen.Clear();
List<Thing> relevantThings = new List<Thing>();
if (bill.recipe.ingredients.Count == 0)
{
return true;
}
IntVec3 rootCell = WorkGiver_DoBill.GetBillGiverRootCell(billGiver, pawn);
Region rootReg = rootCell.GetRegion(pawn.Map);
if (rootReg == null)
{
return false;
}
List<IngredientCount> ingredientsOrdered = new List<IngredientCount>();
WorkGiver_DoBill.MakeIngredientsListInProcessingOrder(ingredientsOrdered, bill);
relevantThings.Clear();
HashSet<Thing> processedThings = new HashSet<Thing>();
bool foundAll = false;
Predicate<Thing> baseValidator = (Thing t) => t.Spawned && !t.IsForbidden(pawn) && (float)(t.Position - billGiver.Position).LengthHorizontalSquared < bill.ingredientSearchRadius * bill.ingredientSearchRadius && bill.IsFixedOrAllowedIngredient(t) && bill.recipe.ingredients.Any((IngredientCount ingNeed) => ingNeed.filter.Allows(t)) && pawn.CanReserve(t);
bool billGiverIsPawn = billGiver is Pawn;
if (billGiverIsPawn)
{
WorkGiver_DoBill.AddEveryMedicineToRelevantThings(pawn, billGiver, relevantThings, baseValidator, pawn.Map);
if (TryFindAnyBillIngredientsInSet(relevantThings, bill, chosen, rootCell, billGiverIsPawn, ingredientsOrdered))
{
relevantThings.Clear();
ingredientsOrdered.Clear();
return true;
}
}
TraverseParms traverseParams = TraverseParms.For(pawn);
RegionEntryPredicate entryCondition = null;
if (Math.Abs(999f - bill.ingredientSearchRadius) >= 1f)
{
float radiusSq = bill.ingredientSearchRadius * bill.ingredientSearchRadius;
entryCondition = delegate (Region from, Region r)
{
if (!r.Allows(traverseParams, isDestination: false))
{
return false;
}
CellRect extentsClose = r.extentsClose;
int num = Math.Abs(billGiver.Position.x - Math.Max(extentsClose.minX, Math.Min(billGiver.Position.x, extentsClose.maxX)));
if ((float)num > bill.ingredientSearchRadius)
{
return false;
}
int num2 = Math.Abs(billGiver.Position.z - Math.Max(extentsClose.minZ, Math.Min(billGiver.Position.z, extentsClose.maxZ)));
return !((float)num2 > bill.ingredientSearchRadius) && (float)(num * num + num2 * num2) <= radiusSq;
};
}
else
{
entryCondition = ((Region from, Region r) => r.Allows(traverseParams, isDestination: false));
}
int adjacentRegionsAvailable = rootReg.Neighbors.Count((Region region) => entryCondition(rootReg, region));
int regionsProcessed = 0;
processedThings.AddRange(relevantThings);
List<Thing> newRelevantThings = new List<Thing>();
RegionProcessor regionProcessor = delegate (Region r)
{
List<Thing> list = r.ListerThings.ThingsMatching(ThingRequest.ForGroup(ThingRequestGroup.HaulableEver));
for (int i = 0; i < list.Count; i++)
{
Thing thing = list[i];
if (!processedThings.Contains(thing) && ReachabilityWithinRegion.ThingFromRegionListerReachable(thing, r, PathEndMode.ClosestTouch, pawn) && baseValidator(thing) && !(thing.def.IsMedicine && billGiverIsPawn))
{
newRelevantThings.Add(thing);
processedThings.Add(thing);
}
}
regionsProcessed++;
if (newRelevantThings.Count > 0 && regionsProcessed > adjacentRegionsAvailable)
{
relevantThings.AddRange(newRelevantThings);
newRelevantThings.Clear();
if (TryFindAnyBillIngredientsInSet(relevantThings, bill, chosen, rootCell, billGiverIsPawn, ingredientsOrdered))
{
foundAll = true;
return true;
}
}
return false;
};
RegionTraverser.BreadthFirstTraverse(rootReg, entryCondition, regionProcessor, 99999);
relevantThings.Clear();
newRelevantThings.Clear();
processedThings.Clear();
ingredientsOrdered.Clear();
return foundAll;
}
19
Source : WorkGiver_CraftPokemon.cs
with MIT License
from Gargamiel
with MIT License
from Gargamiel
private static bool TryFindBestIngredientsHelper(Predicate<Thing> thingValidator, Predicate<List<Thing>> foundAllIngredientsAndChoose, List<IngredientCount> ingredients, Pawn pawn, Thing billGiver, List<ThingCount> chosen, float searchRadius)
{
chosen.Clear();
newRelevantThings.Clear();
if (ingredients.Count == 0)
{
return true;
}
IntVec3 billGiverRootCell = GetBillGiverRootCell(billGiver, pawn);
Region rootReg = billGiverRootCell.GetRegion(pawn.Map);
if (rootReg == null)
{
return false;
}
relevantThings.Clear();
processedThings.Clear();
bool foundAll = false;
float radiusSq = searchRadius * searchRadius;
Predicate<Thing> baseValidator = (Thing t) => t.Spawned && !t.IsForbidden(pawn) && (float)(t.Position - billGiver.Position).LengthHorizontalSquared < radiusSq && thingValidator(t) && pawn.CanReserve(t);
bool billGiverIsPawn = billGiver is Pawn;
if (billGiverIsPawn)
{
AddEveryMedicineToRelevantThings(pawn, billGiver, relevantThings, baseValidator, pawn.Map);
if (foundAllIngredientsAndChoose(relevantThings))
{
relevantThings.Clear();
return true;
}
}
TraverseParms traverseParams = TraverseParms.For(pawn);
RegionEntryPredicate entryCondition = null;
if (Math.Abs(999f - searchRadius) >= 1f)
{
entryCondition = delegate (Region from, Region r)
{
if (!r.Allows(traverseParams, isDestination: false))
{
return false;
}
CellRect extentsClose = r.extentsClose;
int num = Math.Abs(billGiver.Position.x - Math.Max(extentsClose.minX, Math.Min(billGiver.Position.x, extentsClose.maxX)));
if ((float)num > searchRadius)
{
return false;
}
int num2 = Math.Abs(billGiver.Position.z - Math.Max(extentsClose.minZ, Math.Min(billGiver.Position.z, extentsClose.maxZ)));
return !((float)num2 > searchRadius) && (float)(num * num + num2 * num2) <= radiusSq;
};
}
else
{
entryCondition = (Region from, Region r) => r.Allows(traverseParams, isDestination: false);
}
int adjacentRegionsAvailable = rootReg.Neighbors.Count((Region region) => entryCondition(rootReg, region));
int regionsProcessed = 0;
processedThings.AddRange(relevantThings);
RegionProcessor regionProcessor = delegate (Region r)
{
List<Thing> list = r.ListerThings.ThingsMatching(ThingRequest.ForGroup(ThingRequestGroup.HaulableEver));
for (int i = 0; i < list.Count; i++)
{
Thing thing = list[i];
if (!processedThings.Contains(thing) && ReachabilityWithinRegion.ThingFromRegionListerReachable(thing, r, PathEndMode.ClosestTouch, pawn) && baseValidator(thing) && !(thing.def.IsMedicine && billGiverIsPawn))
{
newRelevantThings.Add(thing);
processedThings.Add(thing);
}
}
regionsProcessed++;
if (newRelevantThings.Count > 0 && regionsProcessed > adjacentRegionsAvailable)
{
relevantThings.AddRange(newRelevantThings);
newRelevantThings.Clear();
if (foundAllIngredientsAndChoose(relevantThings))
{
foundAll = true;
return true;
}
}
return false;
};
RegionTraverser.BreadthFirstTraverse(rootReg, entryCondition, regionProcessor, 99999);
relevantThings.Clear();
newRelevantThings.Clear();
processedThings.Clear();
return foundAll;
}
19
Source : HarmonyPatches.cs
with MIT License
from Mehni
with MIT License
from Mehni
private static bool Drop_Prefix(Pawn pawn, Thing thing)
{
CompHauledToInventory takenToInventory = pawn.TryGetComp<CompHauledToInventory>();
if (takenToInventory == null)
{
return true;
}
HashSet<Thing> carriedThing = takenToInventory.GetHashSet();
return !carriedThing.Contains(thing);
}
19
Source : HarmonyPatches.cs
with MIT License
from Mehni
with MIT License
from Mehni
private static void Pawn_InventoryTracker_PostFix(Pawn_InventoryTracker __instance, Thing item)
{
CompHauledToInventory takenToInventory = __instance.pawn.TryGetComp<CompHauledToInventory>();
if (takenToInventory == null)
{
return;
}
HashSet<Thing> carriedThing = takenToInventory.GetHashSet();
if (carriedThing?.Count > 0)
{
if (carriedThing.Contains(item))
{
carriedThing.Remove(item);
}
}
}
19
Source : JobDriver_UnloadYourHauledInventory.cs
with MIT License
from Mehni
with MIT License
from Mehni
private static ThingCount FirstUnloadableThing(Pawn pawn)
{
CompHauledToInventory itemsTakenToInventory = pawn.TryGetComp<CompHauledToInventory>();
HashSet<Thing> carriedThings = itemsTakenToInventory.GetHashSet();
//find the overlap.
IEnumerable<Thing> potentialThingsToUnload =
from t in pawn.inventory.innerContainer
where carriedThings.Contains(t)
select t;
foreach (Thing thing in carriedThings.OrderBy(t => t.def.FirstThingCategory?.index).ThenBy(x => x.def.defName))
{
//merged partially picked up stacks get a different thingID in inventory
if (!potentialThingsToUnload.Contains(thing))
{
ThingDef stragglerDef = thing.def;
//we have no method of grabbing the newly generated thingID. This is the solution to that.
IEnumerable<Thing> dirtyStragglers =
from straggler in pawn.inventory.innerContainer
where straggler.def == stragglerDef
select straggler;
carriedThings.Remove(thing);
foreach (Thing dirtyStraggler in dirtyStragglers)
{
return new ThingCount(dirtyStraggler, dirtyStraggler.stackCount);
}
}
return new ThingCount(thing, thing.stackCount);
}
return default;
}
19
Source : HarmonyPatches.cs
with MIT License
from Mehni
with MIT License
from Mehni
private static bool Drop_Prefix(Pawn pawn, Thing thing)
{
CompHauledToInventory takenToInventory = pawn.TryGetComp<CompHauledToInventory>();
if (takenToInventory == null)
return true;
HashSet<Thing> carriedThing = takenToInventory.GetHashSet();
return !carriedThing.Contains(thing);
}
19
Source : HarmonyPatches.cs
with MIT License
from Mehni
with MIT License
from Mehni
private static void Pawn_InventoryTracker_PostFix(Pawn_InventoryTracker __instance, Thing item)
{
CompHauledToInventory takenToInventory = __instance.pawn.TryGetComp<CompHauledToInventory>();
if (takenToInventory == null)
return;
HashSet<Thing> carriedThing = takenToInventory.GetHashSet();
if (carriedThing?.Count > 0)
{
if (carriedThing.Contains(item))
{
carriedThing.Remove(item);
}
}
}
19
Source : JobDriver_UnloadYourHauledInventory.cs
with MIT License
from Mehni
with MIT License
from Mehni
private static ThingCount FirstUnloadableThing(Pawn pawn)
{
CompHauledToInventory itemsTakenToInventory = pawn.TryGetComp<CompHauledToInventory>();
HashSet<Thing> carriedThings = itemsTakenToInventory.GetHashSet();
//find the overlap.
IEnumerable<Thing> potentialThingsToUnload =
from t in pawn.inventory.innerContainer
where carriedThings.Contains(t)
select t;
foreach (Thing thing in carriedThings.OrderBy(t => t.def.FirstThingCategory?.index))
{
//merged partially picked up stacks get a different thingID in inventory
if (!potentialThingsToUnload.Contains(thing))
{
ThingDef stragglerDef = thing.def;
//we have no method of grabbing the newly generated thingID. This is the solution to that.
IEnumerable<Thing> dirtyStragglers =
from straggler in pawn.inventory.innerContainer
where straggler.def == stragglerDef
select straggler;
carriedThings.Remove(thing);
foreach (Thing dirtyStraggler in dirtyStragglers)
return new ThingCount(dirtyStraggler, dirtyStraggler.stackCount);
}
return new ThingCount(thing, thing.stackCount);
}
return default(ThingCount);
}
19
Source : Trading.cs
with MIT License
from rwmt
with MIT License
from rwmt
private void CheckAddRemoveColony()
{
foreach (Thing t in session.trader.ColonyThingsWillingToBuy(session.playerNegotiator))
newThings.Add(t);
for (int i = tradeables.Count - 1; i >= 0; i--)
{
Tradeable tradeable = tradeables[i];
int toRemove = 0;
for (int j = tradeable.thingsColony.Count - 1; j >= 0; j--)
{
Thing thingColony = tradeable.thingsColony[j];
if (!newThings.Contains(thingColony))
toRemove++;
else
oldThings.Add(thingColony);
}
if (toRemove == 0) continue;
if (toRemove == tradeable.thingsColony.Count + tradeable.thingsTrader.Count)
tradeables.RemoveAt(i);
else
tradeable.thingsColony.RemoveAll(t => !newThings.Contains(t));
}
foreach (Thing newThing in newThings)
if (!oldThings.Contains(newThing))
AddToTradeables(newThing, Transactor.Colony);
newThings.Clear();
oldThings.Clear();
}
19
Source : Trading.cs
with MIT License
from rwmt
with MIT License
from rwmt
private void CheckRereplacedign(Tradeable tradeable, Transactor side)
{
List<Thing> things = side == Transactor.Colony ? tradeable.thingsColony : tradeable.thingsTrader;
for (int j = things.Count - 1; j >= 1; j--)
{
Thing thing = things[j];
TransferAsOneMode mode = tradeable.TraderWillTrade ? TransferAsOneMode.Normal : TransferAsOneMode.InactiveTradeable;
if (recacheThings.Contains(thing))
{
if (!TransferableUtility.TransferAsOne(tradeable.AnyThing, thing, mode))
things.RemoveAt(j);
else
AddToTradeables(thing, side);
}
}
}
19
Source : Trading.cs
with MIT License
from rwmt
with MIT License
from rwmt
private void CheckAddRemoveColony()
{
foreach (Thing t in session.trader.ColonyThingsWillingToBuy(session.playerNegotiator))
newThings.Add(t);
for (int i = tradeables.Count - 1; i >= 0; i--)
{
Tradeable tradeable = tradeables[i];
int toRemove = 0;
for (int j = tradeable.thingsColony.Count - 1; j >= 0; j--)
{
Thing thingColony = tradeable.thingsColony[j];
if (!newThings.Contains(thingColony))
toRemove++;
else
oldThings.Add(thingColony);
}
if (toRemove == 0) continue;
if (toRemove == tradeable.thingsColony.Count + tradeable.thingsTrader.Count)
tradeables.RemoveAt(i);
else
tradeable.thingsColony.RemoveAll(t => !newThings.Contains(t));
}
foreach (Thing newThing in newThings)
if (!oldThings.Contains(newThing))
AddToTradeables(newThing, Transactor.Colony);
newThings.Clear();
oldThings.Clear();
}
19
Source : Trading.cs
with MIT License
from rwmt
with MIT License
from rwmt
private void CheckAddRemoveTrader()
{
newThings.Add(permanentSilver);
foreach (Thing t in session.trader.Goods)
newThings.Add(t);
for (int i = tradeables.Count - 1; i >= 0; i--)
{
Tradeable tradeable = tradeables[i];
int toRemove = 0;
for (int j = tradeable.thingsTrader.Count - 1; j >= 0; j--)
{
Thing thingTrader = tradeable.thingsTrader[j];
if (!newThings.Contains(thingTrader))
toRemove++;
else
oldThings.Add(thingTrader);
}
if (toRemove == 0) continue;
if (toRemove == tradeable.thingsColony.Count + tradeable.thingsTrader.Count)
tradeables.RemoveAt(i);
else
tradeable.thingsTrader.RemoveAll(t => !newThings.Contains(t));
}
foreach (Thing newThing in newThings)
if (!oldThings.Contains(newThing))
AddToTradeables(newThing, Transactor.Trader);
newThings.Clear();
oldThings.Clear();
}
19
Source : Trading.cs
with MIT License
from rwmt
with MIT License
from rwmt
private void CheckAddRemoveTrader()
{
newThings.Add(permanentSilver);
foreach (Thing t in session.trader.Goods)
newThings.Add(t);
for (int i = tradeables.Count - 1; i >= 0; i--)
{
Tradeable tradeable = tradeables[i];
int toRemove = 0;
for (int j = tradeable.thingsTrader.Count - 1; j >= 0; j--)
{
Thing thingTrader = tradeable.thingsTrader[j];
if (!newThings.Contains(thingTrader))
toRemove++;
else
oldThings.Add(thingTrader);
}
if (toRemove == 0) continue;
if (toRemove == tradeable.thingsColony.Count + tradeable.thingsTrader.Count)
tradeables.RemoveAt(i);
else
tradeable.thingsTrader.RemoveAll(t => !newThings.Contains(t));
}
foreach (Thing newThing in newThings)
if (!oldThings.Contains(newThing))
AddToTradeables(newThing, Transactor.Trader);
newThings.Clear();
oldThings.Clear();
}