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); }
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); }
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); }