예제 #1
0
        // 클릭해서 탭 변경하기
        public void TabChangeWithClick(GameObject tabObject)
        {
            List <GameObject> TabList = new List <GameObject>();


            // 변경된 탭으로 아이템창 변경
            // 클릭한탭이 인벤토리 일 때
            if (InvenTabList.Contains(tabObject))
            {
                TabList = InvenTabList;
                invenSlotManager.Refresh(TabManager.GetTab(tabObject.name));
            }
            // 클릭한탭이 상점탭 일 때
            else if (ShopTabList.Contains(tabObject))
            {
                TabList = ShopTabList;
                shopSlotManager.Refresh(TabManager.GetTab(tabObject.name));
            }
            else if (QuickTabList.Contains(tabObject))
            {
                TabList = QuickTabList;
                quickSlotManager.Refresh(TabManager.GetTab(tabObject.name));
            }
            else
            {
                Debug.Log("탭 리스트에 추가 되어있지 않는 탭입니다. 탭 리스트에 추가하세요");
                return;
            }


            // Quick Widget처럼 바꿀 탭이 없고 1개뿐일경우 예외
            if (TabList.Count > 1)
            {
                //클릭시 색깔 바꾸기
                for (int i = 0; i < TabList.Count; i++)
                {
                    if (tabObject != TabList[i].gameObject)
                    {
                        TabList[i].GetComponent <Button>().interactable = true;
                        TabList[i].GetComponent <Image>().color         = new Color32(240, 240, 240, 255);
                    }
                    else
                    {
                        TabList[i].GetComponent <Button>().interactable = false;
                        TabList[i].GetComponent <Image>().color         = new Color32(255, 255, 255, 255);
                    }
                }
            }
        }
예제 #2
0
        void IPointerUpHandler.OnPointerUp(PointerEventData eventData)
        {
            itemHandler.OnSlotUp?.Invoke(eventData, this);

            //좌클릭 이벤트
            if (eventData.button == PointerEventData.InputButton.Left)
            {
                //이동 활성화 및 선택된 아이템 존재시 이벤트 발생
                if (itemHandler.movable && itemHandler.SelectedItem != null)
                {
                    InventorySlot targetSlot = null;
                    GameObject    lastObject = null;


                    //대상 아이템 등록
                    try
                    {
                        eventData.position = GetPointerPosition();
                        List <RaycastResult> results = new List <RaycastResult>();
                        itemHandler.gr.Raycast(eventData, results);
                        if (results.Count > 0)
                        {
                            lastObject = results[0].gameObject;
                        }


                        if ((targetSlot = lastObject.GetComponent <InventorySlot>()) != null)    // 예외처리 안할시 에러나는 부분
                        {
                            itemHandler.TargetItem = targetSlot.Item;
                        }
                    }
                    // 인벤토리 외부로 드랍됨
                    catch (Exception)
                    {
                        itemHandler.DragOutEvent?.Invoke(itemHandler.SelectedItem);
                        itemHandler.ResetItems();

                        return;
                    }

                    // 슬롯의 Slot Manager가 다를 경우 이벤트 ( 옮길수 없을 때 이벤트 )
                    if (targetSlot != null && this.slotManager != targetSlot.slotManager)
                    {
                        if (!itemHandler.moveToOtherSlot || !targetSlot.itemHandler.moveToOtherSlot)
                        {
                            itemHandler.SlotMoveFailEvent?.Invoke(itemHandler.SelectedItem);
                            itemHandler.ResetItems();
                            return;
                        }
                    }

                    /*
                     *  순서도 *
                     * 타깃이 없다 -> 이동
                     * 타깃이 있다
                     *  if (merging, allow type)
                     *      { Merge }
                     *  else if ( switching )
                     *      {Switch}
                     */

                    // 선택아이템 != 타겟아이템 일 경우 이벤트
                    if (itemHandler.SelectedItem != itemHandler.TargetItem)
                    {
                        //드랍된 곳이 슬롯일 때 이벤트
                        if (targetSlot != null)
                        {
                            InventoryTab tab = targetSlot.slotManager.LastRefreshedTab;

                            // 타겟이 없을 경우 아이템 이동
                            if (itemHandler.TargetItem == null)
                            {
                                // 타겟 슬롯에 타입이 없거나 두 타입이 일치할 경우 실행
                                if (targetSlot.allowType == "" || itemHandler.SelectedItem.Type == targetSlot.allowType)
                                {
                                    itemHandler.Move(itemHandler.SelectedItem, targetSlot);
                                    slotManager.Refresh(slotManager.LastRefreshedTab);
                                    targetSlot.slotManager.Refresh(tab);
                                }
                                else
                                {
                                    itemHandler.TypeNotMatchEvent?.Invoke(itemHandler.SelectedItem, targetSlot);
                                }
                            }
                            // 타겟이 있을 경우
                            else
                            {
                                //아이템 병합이 활성화 일 때 이벤트 실행
                                if (itemHandler.merging && (itemHandler.SelectedItem.Name == itemHandler.TargetItem.Name))
                                {
                                    itemHandler.Merge(itemHandler.SelectedItem, itemHandler.TargetItem);
                                    slotManager.Refresh(slotManager.LastRefreshedTab);
                                    targetSlot.slotManager.Refresh(tab);
                                }
                                else if (itemHandler.switching)
                                {
                                    if (targetSlot.allowType == "" || itemHandler.SelectedItem.Type == targetSlot.allowType)
                                    {
                                        itemHandler.Switch(itemHandler.SelectedItem, itemHandler.TargetItem);
                                        slotManager.Refresh(slotManager.LastRefreshedTab);
                                        targetSlot.slotManager.Refresh(tab);
                                    }
                                    else
                                    {
                                        itemHandler.TypeNotMatchEvent?.Invoke(itemHandler.SelectedItem, targetSlot);
                                    }
                                }
                            }
                        }
                    }
                }
            }
            itemHandler.ResetItems();
        }