// Todo: Move to callsite? public static MaybeNull <ResourceType> GetRandomApplicableCraftable(Faction faction, WorldManager World) { const int maxIters = 100; for (int i = 0; i < maxIters; i++) { var item = Datastructures.SelectRandom(Library.EnumerateResourceTypes().Where(r => r.Craft_Craftable)); if (!World.HasResourcesWithTags(item.Craft_Ingredients)) { continue; } if (!faction.OwnedObjects.Any(o => o.Tags.Contains(item.Craft_Location))) { continue; } return(item); } return(null); }
public static MaybeNull <CraftItem> GetRandomApplicableCraftable(Faction faction, WorldManager World) { InitializeCraftLibrary(); const int maxIters = 100; for (int i = 0; i < maxIters; i++) { var item = Datastructures.SelectRandom(CraftItems); if (!World.HasResourcesWithTags(item.Value.RequiredResources)) { continue; } if (!faction.OwnedObjects.Any(o => o.Tags.Contains(item.Value.CraftLocation))) { continue; } return(item.Value); } return(null); }