// 클릭해서 탭 변경하기 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); } } } }
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(); }