public ItemContainer(Item item, XElement element) : base(item, element) { Inventory = new ItemInventory(item, this, capacity, SlotsPerRow); foreach (XElement subElement in element.Elements()) { switch (subElement.Name.ToString().ToLowerInvariant()) { case "containable": RelatedItem containable = RelatedItem.Load(subElement, returnEmpty: false, parentDebugName: item.Name); if (containable == null) { DebugConsole.ThrowError("Error in item config \"" + item.ConfigFile + "\" - containable with no identifiers."); continue; } ContainableItems.Add(containable); break; } } InitProjSpecific(element); itemsWithStatusEffects = new List <Pair <Item, StatusEffect> >(); }
public override bool Combine(Item item, Character user) { if (!AllowDragAndDrop && user != null) { return(false); } if (!ContainableItems.Any(x => x.MatchesItem(item))) { return(false); } if (user != null && !user.CanAccessInventory(Inventory)) { return(false); } if (Inventory.TryPutItem(item, null)) { IsActive = true; if (hideItems && item.body != null) { item.body.Enabled = false; } return(true); } return(false); }
public bool CanBeContained(ItemPrefab itemPrefab) { if (ContainableItems.Count == 0) { return(true); } return(ContainableItems.Find(c => c.MatchesItem(itemPrefab)) != null); }
public bool ShouldBeContained(string[] identifiersOrTags, out bool isRestrictionsDefined) { isRestrictionsDefined = containableRestrictions.Any(); if (ContainableItems.None(ri => ri.MatchesItem(item))) { return(false); } if (!isRestrictionsDefined) { return(true); } return(identifiersOrTags.Any(id => containableRestrictions.Any(r => r == id))); }
public bool ShouldBeContained(Item item, out bool isRestrictionsDefined) { isRestrictionsDefined = containableRestrictions.Any(); if (ContainableItems.None(ri => ri.MatchesItem(item))) { return(false); } if (!isRestrictionsDefined) { return(true); } return(containableRestrictions.Any(id => item.Prefab.Identifier == id || item.HasTag(id))); }
public void OnItemContained(Item containedItem) { item.SetContainedItemPositions(); RelatedItem ri = ContainableItems.Find(x => x.MatchesItem(containedItem)); if (ri != null) { itemsWithStatusEffects.RemoveAll(i => i.First == containedItem); foreach (StatusEffect effect in ri.statusEffects) { itemsWithStatusEffects.Add(new Pair <Item, StatusEffect>(containedItem, effect)); } } //no need to Update() if this item has no statuseffects and no physics body IsActive = itemsWithStatusEffects.Count > 0 || Inventory.Items.Any(it => it?.body != null); }
public void OnItemContained(Item containedItem) { item.SetContainedItemPositions(); RelatedItem ri = ContainableItems.Find(x => x.MatchesItem(containedItem)); if (ri != null) { activeContainedItems.RemoveAll(i => i.Item == containedItem); foreach (StatusEffect effect in ri.statusEffects) { activeContainedItems.Add(new ActiveContainedItem(containedItem, effect, ri.ExcludeBroken)); } } //no need to Update() if this item has no statuseffects and no physics body IsActive = activeContainedItems.Count > 0 || Inventory.AllItems.Any(it => it.body != null); }