using System; using System.Collections.Generic; using System.Linq; using UnityEditor; using UnityEngine; public class EquipmentPanelController : DraggablePanelController { [SerializeField] protected GameObject _panelAdditionalSlotsContent; protected override UIBaseManager<IndexValuePair<int, EquippableItem>> FetchUiManager() { return GameObject.FindObjectOfType<EquipmentUIManager>(); } private void Start() { AllowToUseItemInPanel = false; Type = PanelTypeEnum.Shop; } public override void BuildPanelSlots() { InitSlotsList(); } public void InitSlotsList() { _panelContent.transform.Find("equipment_slot_helmet").GetComponent<EquipmentSlot>()._PanelController = this; _panelContent.transform.Find("equipment_slot_armor").GetComponent<EquipmentSlot>()._PanelController = this; _panelContent.transform.Find("equipment_slot_weapon").GetComponent<EquipmentSlot>()._PanelController = this; _panelContent.transform.Find("equipment_slot_boots").GetComponent<EquipmentSlot>()._PanelController = this; _panelAdditionalSlotsContent.transform.Find("equipment_slot_ring_i").GetComponent<EquipmentSlot>()._PanelController = this; _panelAdditionalSlotsContent.transform.Find("equipment_slot_necklace_i").GetComponent<EquipmentSlot>()._PanelController = this; _panelAdditionalSlotsContent.transform.Find("equipment_slot_necklace_ii").GetComponent<EquipmentSlot>()._PanelController = this; _panelAdditionalSlotsContent.transform.Find("equipment_slot_ring_ii").GetComponent<EquipmentSlot>()._PanelController = this; _panelAdditionalSlotsContent.transform.Find("equipment_slot_ring_iii").GetComponent<EquipmentSlot>()._PanelController = this; ChildBoxList.Add(SetupDragAndDropToSlot(_panelContent.transform.Find("equipment_slot_helmet").GetComponent<EquipmentSlot>())); ChildBoxList.Add(SetupDragAndDropToSlot(_panelContent.transform.Find("equipment_slot_armor").GetComponent<EquipmentSlot>())); ChildBoxList.Add(SetupDragAndDropToSlot(_panelContent.transform.Find("equipment_slot_weapon").GetComponent<EquipmentSlot>())); ChildBoxList.Add(SetupDragAndDropToSlot(_panelContent.transform.Find("equipment_slot_boots").GetComponent<EquipmentSlot>())); ChildBoxList.Add(SetupDragAndDropToSlot(_panelAdditionalSlotsContent.transform.Find("equipment_slot_ring_i").GetComponent<EquipmentSlot>())); ChildBoxList.Add(SetupDragAndDropToSlot(_panelAdditionalSlotsContent.transform.Find("equipment_slot_necklace_i").GetComponent<EquipmentSlot>())); ChildBoxList.Add(SetupDragAndDropToSlot(_panelAdditionalSlotsContent.transform.Find("equipment_slot_necklace_ii").GetComponent<EquipmentSlot>())); ChildBoxList.Add(SetupDragAndDropToSlot(_panelAdditionalSlotsContent.transform.Find("equipment_slot_ring_ii").GetComponent<EquipmentSlot>())); ChildBoxList.Add(SetupDragAndDropToSlot(_panelAdditionalSlotsContent.transform.Find("equipment_slot_ring_iii").GetComponent<EquipmentSlot>())); } public override GameObject BuildSlot(int key, GameObject _parent) { throw new NotImplementedException(); } // 2. Set up panel additn items to it //public void SetUp - in parent /// <summary> /// elements: List< /// IndexValuePair< /// int: dropped slot number, /// EquippableItem: dragged item /// > /// > /// </summary> /// <param name="elements"></param> public override void BuildPanelContent(List<IndexValuePair<int, EquippableItem>> elements) { base.BuildPanelContent(elements); foreach (IndexValuePair<int, EquippableItem> element in elements) { //Debug.Log($"key: {element.Key} - {(EquipmentPanelSlotsTypeEnum)element.Key}"); if (element.Value != null) { // slot type != element.key // element.Key IS DROPPED SLOT number // ChildBoxList order IS CONSTANT // elements HAVE mixed order // there is error - ChildBoxList.Where(slot => ((EquipmentSlot)slot).type == (EquipmentPanelSlotsTypeEnum)element.Key).ToList().ForEach(slot => slot.SetItem((EquippableItem)element.Value)); // FIX ChildBoxList[element.Key].SetItem((EquippableItem)element.Value); } } } public override void ClearSlots() { foreach (ItemSlot ChestSlot in ChildBoxList) { ChestSlot.ResetSlot(); } } public override void EndDrag(ItemSlot itemSlot) { if (!DraggedSlotController.Instance.IsDragged()) // if there was nothing dragged - ignore event return; DraggedSlotController.Instance.RemoveDraggedSlot(); if (!itemSlot.Item) ((ItemSlot)ChildBoxList.Where(slot => slot.Number == itemSlot.Number).First()).ResetSlot(); else ((ItemSlot)ChildBoxList.Where(slot => slot.Number == itemSlot.Number).First()).SetItem(itemSlot.Item); var ChildBoxListCopy = new List<IndexValuePair<int, EquippableItem>>(ChildBoxList.Where(slot => slot.Item != null).Select(slot => new IndexValuePair<int, EquippableItem>(slot.Number, slot.Item)).ToList()); UiManager.RemoveAll(); foreach (IndexValuePair<int, EquippableItem> slot in ChildBoxListCopy) { if (slot.Value != null) { // Debug.Log($"Slot nr: {slot.Key} with item: {slot.Value}"); UiManager.Add(new IndexValuePair<int, EquippableItem>(slot.Key, slot.Value)); } else { UiManager.Add(new IndexValuePair<int, EquippableItem>(slot.Key, null)); // ONLY DIFFERENCE BETWEEN UpdatePanelContent() } } } }