Exemple #1
0
        public int GetQuantity(Container cont, Type[] types)
        {
            Item[] items = cont.FindItemsByType(types, true);

            int amount = 0;

            for (int i = 0; i < items.Length; ++i)
            {
                IHasQuantity hq = items[i] as IHasQuantity;

                if (hq == null)
                {
                    amount += items[i].Amount;
                }
                else
                {
                    if (hq is BaseBeverage && ((BaseBeverage)hq).Content != m_RequiredBeverage)
                    {
                        continue;
                    }

                    amount += hq.Quantity;
                }
            }

            return(amount);
        }
Exemple #2
0
 public static double GetFillState(this IHasQuantity obj, List <ClilocItemRec> properties)
 {
     if (ClilocHelper.Contains(properties, 1042974)) // It's nearly empty.
     {
         return(33.33);
     }
     if (ClilocHelper.Contains(properties, 1042973)) // It's half full.
     {
         return(66.66);
     }
     return(ClilocHelper.Contains(properties, 1042972) ? 100.0 : 0.0);
 }
Exemple #3
0
        public int ConsumeQuantity(Container cont, Type[][] types, int[] amounts)
        {
            if (types.Length != amounts.Length)
            {
                throw new ArgumentException();
            }

            Item[][] items  = new Item[types.Length][];
            int[]    totals = new int[types.Length];

            for (int i = 0; i < types.Length; ++i)
            {
                items[i] = cont.FindItemsByType(types[i], true);

                for (int j = 0; j < items[i].Length; ++j)
                {
                    IHasQuantity hq = items[i][j] as IHasQuantity;

                    if (hq == null)
                    {
                        totals[i] += items[i][j].Amount;
                    }
                    else
                    {
                        if (hq is BaseBeverage && ((BaseBeverage)hq).Content != m_RequiredBeverage)
                        {
                            continue;
                        }

                        totals[i] += hq.Quantity;
                    }
                }

                if (totals[i] < amounts[i])
                {
                    return(i);
                }
            }

            for (int i = 0; i < types.Length; ++i)
            {
                int need = amounts[i];

                for (int j = 0; j < items[i].Length; ++j)
                {
                    Item         item = items[i][j];
                    IHasQuantity hq   = item as IHasQuantity;

                    if (hq == null)
                    {
                        int theirAmount = item.Amount;

                        if (theirAmount < need)
                        {
                            item.Delete();
                            need -= theirAmount;
                        }
                        else
                        {
                            item.Consume(need);
                            break;
                        }
                    }
                    else
                    {
                        if (hq is BaseBeverage && ((BaseBeverage)hq).Content != m_RequiredBeverage)
                        {
                            continue;
                        }

                        int theirAmount = hq.Quantity;

                        if (theirAmount < need)
                        {
                            hq.Quantity -= theirAmount;
                            need        -= theirAmount;
                        }
                        else
                        {
                            hq.Quantity -= need;
                            break;
                        }
                    }
                }
            }

            return(-1);
        }