コード例 #1
0
        void AddItemToPlayer(ItemUISystem itemUI, int slotNumber)
        {
            ItemsUI.Add(itemUI);
            itemUI.DraggedFrom = DraggedFrom.PlayerInventory;
            itemUI.SlotNumber  = slotNumber;
            Slots[slotNumber].SetActive(false);
            isSlotEmpty[slotNumber] = false;

            ItemAddedToPlayer?.Invoke(itemUI);
        }
コード例 #2
0
        public void SetSystem(PlayerSystem player)
        {
            Owner = player;
            Owner.ItemDropSystem.ItemCreated      += OnItemCreated;
            Owner.ItemDropSystem.ItemUICreated    += OnItemUICreated;
            Owner.SpiritUISystem.MoveItemToPlayer += OnItemMovedToPlayer;

            void OnItemUICreated(ItemUISystem itemUI)
            {
                itemUI.DoubleClickedInPlayerInventory += OnItemDoubleClicked;
                ApplyConsumable += itemUI.System.OnConsumableApplied;
            }

            void OnItemMovedToPlayer(ItemUISystem itemUI)
            {
                if (CheckHaveFreeSlot(out var freeSlotIndex))
                {
                    var freeSlot = Slots[freeSlotIndex];

                    itemUI.transform.position = freeSlot.transform.position;
                    itemUI.transform.SetParent(freeSlot.transform.parent);

                    AddItemToPlayer(itemUI, freeSlotIndex);
                }
            }

            void OnItemCreated(ItemSystem item)
            {
                if (CheckHaveFreeSlot(out var freeSlotIndex))
                {
                    ItemsUI.Add(
                        Owner.ItemDropSystem.CreateItemUI(item.Data, freeSlotIndex, Slots[freeSlotIndex].transform, Owner));

                    isSlotEmpty[freeSlotIndex] = false;
                    Slots[freeSlotIndex].SetActive(false);

                    ItemAddedToPlayer?.Invoke(ItemsUI[ItemsUI.Count - 1]);
                    return;
                }
            }

            bool CheckHaveFreeSlot(out int freeSlotIndex)
            {
                freeSlotIndex = isSlotEmpty.IndexOf(true);
                return(freeSlotIndex != -1);
            }
        }