示例#1
0
        public override void Update(float deltaTime, bool subInventory = false)
        {
            base.Update(deltaTime);

            if (doubleClickedItem != null)
            {
                if (doubleClickedItem.ParentInventory != this)
                {
                    TryPutItem(doubleClickedItem, doubleClickedItem.AllowedSlots, true);
                }
                else
                {
                    if (character.SelectedConstruction != null)
                    {
                        var selectedContainer = character.SelectedConstruction.GetComponent <ItemContainer>();
                        if (selectedContainer != null && selectedContainer.Inventory != null)
                        {
                            selectedContainer.Inventory.TryPutItem(doubleClickedItem, doubleClickedItem.AllowedSlots, true);
                        }
                    }
                    else if (character.SelectedCharacter != null && character.SelectedCharacter.Inventory != null)
                    {
                        character.SelectedCharacter.Inventory.TryPutItem(doubleClickedItem, doubleClickedItem.AllowedSlots, true);
                    }
                    else //doubleclicked and no other inventory is selected
                    {
                        //not equipped -> attempt to equip
                        if (IsInLimbSlot(doubleClickedItem, InvSlotType.Any))
                        {
                            TryPutItem(doubleClickedItem, doubleClickedItem.AllowedSlots.FindAll(i => i != InvSlotType.Any), true);
                        }
                        //equipped -> attempt to unequip
                        else if (doubleClickedItem.AllowedSlots.Contains(InvSlotType.Any))
                        {
                            TryPutItem(doubleClickedItem, new List <InvSlotType>()
                            {
                                InvSlotType.Any
                            }, true);
                        }
                    }
                }
            }

            if (selectedSlot > -1)
            {
                UpdateSubInventory(deltaTime, selectedSlot);
            }

            if (character == Character.Controlled)
            {
                for (int i = 0; i < capacity; i++)
                {
                    if (selectedSlot != i &&
                        Items[i] != null && Items[i].CanUseOnSelf && character.HasSelectedItem(Items[i]))
                    {
                        //-3 because selected items are in slots 3 and 4 (hands)
                        useOnSelfButton[i - 3].Update(deltaTime);
                    }
                }
            }

            //cancel dragging if too far away from the container of the dragged item
            if (draggingItem != null)
            {
                var rootContainer = draggingItem.GetRootContainer();
                var rootInventory = draggingItem.ParentInventory;

                if (rootContainer != null)
                {
                    rootInventory = rootContainer.ParentInventory != null ?
                                    rootContainer.ParentInventory : rootContainer.GetComponent <Items.Components.ItemContainer>().Inventory;
                }

                if (rootInventory != null &&
                    rootInventory.Owner != Character.Controlled &&
                    rootInventory.Owner != Character.Controlled.SelectedConstruction &&
                    rootInventory.Owner != Character.Controlled.SelectedCharacter)
                {
                    draggingItem = null;
                }
            }


            doubleClickedItem = null;
        }