public static int ProgressiveItemsAquired(this LogicObjects.LogicEntry entry, LogicObjects.TrackerInstance Instance, bool Unique = true)
        {
            var set    = entry.ProgressiveItemSet(Instance).Where(x => x.LogicItemAquired()).ToList();
            var setIDs = set.Select(x => x.ID);

            if (Unique)
            {
                return(set.Where(x => x.LogicItemAquired()).Count());
            }
            return(Instance.Logic.Where(x => setIDs.Contains(x.RandomizedItem) && x.Checked).Count());
        }
        public static int ProgressiveItemsNeeded(this LogicObjects.LogicEntry entry, LogicObjects.TrackerInstance Instance, bool IndexValue = false)
        {
            var set = entry.ProgressiveItemSet(Instance);

            if (set == null)
            {
                return(0);
            }
            int offset = (IndexValue) ? 0 : 1;

            return(set.IndexOf(entry) + offset);
        }
        public static bool ItemUseable(this LogicObjects.LogicEntry entry, LogicObjects.TrackerInstance Instance, List <int> usedItems = null)
        {
            if (usedItems == null)
            {
                usedItems = new List <int>();
            }
            var Set = entry.ProgressiveItemSet(Instance);

            if (Set == null)
            {
                return(NonProgressiveItemUseable());
            }

            var AquiredSet  = Set.Where(x => x.LogicItemAquired()).ToList();
            var ItemsNeeded = entry.ProgressiveItemsNeeded(Instance);

            if (AquiredSet.Count() >= ItemsNeeded)
            {
                for (var i = 0; i < ItemsNeeded; i++)
                {
                    usedItems.Add(AquiredSet[i].ID);
                }
                return(true);
            }
            return(false);

            bool NonProgressiveItemUseable()
            {
                if (entry.LogicItemAquired())
                {
                    usedItems.Add(entry.ID);
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
        }
 public static bool IsProgressiveItem(this LogicObjects.LogicEntry entry, LogicObjects.TrackerInstance Instance)
 {
     return(entry.ProgressiveItemSet(Instance) != null);
 }