Ejemplo n.º 1
0
        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> >();
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
 public bool CanBeContained(ItemPrefab itemPrefab)
 {
     if (ContainableItems.Count == 0)
     {
         return(true);
     }
     return(ContainableItems.Find(c => c.MatchesItem(itemPrefab)) != null);
 }
Ejemplo n.º 4
0
 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)));
 }
Ejemplo n.º 5
0
 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)));
 }
Ejemplo n.º 6
0
        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);
        }
Ejemplo n.º 7
0
        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);
        }