Scriptum/Assets/Scripts/REFACTORING/Application/UI/Panel/EquipmentPanelController.cs
2023-01-03 22:48:05 +01:00

136 lines
5.8 KiB
C#

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()
}
}
}
}