Files
bansonic_beta_main/Assets/playerBagSystem/UI_userBag.cs
T
2026-06-25 11:48:56 +08:00

237 lines
6.2 KiB
C#

using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Events;
public class UI_userBag : MonoBehaviour
{
/// <summary>
/// 123前言:
/// 装备升级、装备熔炼、装备幻化、装备属性转移
/// ———————————————————————————————————————
/// 升级,每5等级之间使用耗材升级,跨5倍数需要幻化而不是升级;
/// 熔炼,消耗多余装备变为碎片,碎片可用于兑换新装备;
/// 幻化,改变装备外观,保留原有属性并进行属性加强,消耗幻化材料;
/// 属性转移,将一件装备的属性转移到另一件装备上,消耗转移材料;
/// </summary>
[Header("weapon system")]
public ToggleGroup equip_tg;
public Toggle equipUpdate;
public Toggle equipSmelt;
public Toggle equipIllusion;
public Toggle equipAttributeTransfer;
public Toggle equipAwake;
public GameObject equipUpdateObj;
public GameObject equipSmeltObj;
public GameObject equipIllusionObj;
public GameObject equipAttributeTransferObj;
public GameObject equipAwakeObj;
[Header("filters")]
public Dropdown filterDropdown;
[Header("button")]
public Button closeBagButton;
private void Awake()
{
InitializeToggleGroup();
BindToggles();
BindCloseButton();
SelectDefaultPanel();
}
private void OnEnable()
{
InitializeToggleGroup();
BindToggles();
BindCloseButton();
SelectDefaultPanel();
}
private void OnDisable()
{
UnbindToggle(equipUpdate, HandleEquipUpdateChanged);
UnbindToggle(equipSmelt, HandleEquipSmeltChanged);
UnbindToggle(equipIllusion, HandleEquipIllusionChanged);
UnbindToggle(equipAttributeTransfer, HandleEquipAttributeTransferChanged);
UnbindToggle(equipAwake, HandleEquipAwakeChanged);
UnbindCloseButton();
}
private void InitializeToggleGroup()
{
if (equip_tg == null)
{
return;
}
equip_tg.allowSwitchOff = false;
AssignToggleGroup(equipUpdate);
AssignToggleGroup(equipSmelt);
AssignToggleGroup(equipIllusion);
AssignToggleGroup(equipAttributeTransfer);
AssignToggleGroup(equipAwake);
}
private void AssignToggleGroup(Toggle toggle)
{
if (toggle == null || equip_tg == null)
{
return;
}
toggle.group = equip_tg;
}
private void BindToggles()
{
RebindToggle(equipUpdate, HandleEquipUpdateChanged);
RebindToggle(equipSmelt, HandleEquipSmeltChanged);
RebindToggle(equipIllusion, HandleEquipIllusionChanged);
RebindToggle(equipAttributeTransfer, HandleEquipAttributeTransferChanged);
RebindToggle(equipAwake, HandleEquipAwakeChanged);
}
private void RebindToggle(Toggle toggle, UnityAction<bool> action)
{
if (toggle == null)
{
return;
}
toggle.onValueChanged.RemoveListener(action);
toggle.onValueChanged.AddListener(action);
}
private void UnbindToggle(Toggle toggle, UnityAction<bool> action)
{
if (toggle == null)
{
return;
}
toggle.onValueChanged.RemoveListener(action);
}
private void BindCloseButton()
{
if (closeBagButton == null)
{
return;
}
closeBagButton.onClick.RemoveListener(HandleCloseBagClicked);
closeBagButton.onClick.AddListener(HandleCloseBagClicked);
}
private void UnbindCloseButton()
{
if (closeBagButton == null)
{
return;
}
closeBagButton.onClick.RemoveListener(HandleCloseBagClicked);
}
private void SelectDefaultPanel()
{
if (equipUpdate != null)
{
equipUpdate.isOn = true;
ApplyPanelState(equipUpdateObj);
return;
}
ApplyPanelState(null);
}
private void HandleEquipUpdateChanged(bool isOn)
{
if (isOn)
{
ApplyPanelState(equipUpdateObj);
}
}
private void HandleEquipSmeltChanged(bool isOn)
{
if (isOn)
{
ApplyPanelState(equipSmeltObj);
}
}
private void HandleEquipIllusionChanged(bool isOn)
{
if (isOn)
{
ApplyPanelState(equipIllusionObj);
}
}
private void HandleEquipAttributeTransferChanged(bool isOn)
{
if (isOn)
{
ApplyPanelState(equipAttributeTransferObj);
}
}
private void HandleEquipAwakeChanged(bool isOn)
{
if (isOn)
{
ApplyPanelState(equipAwakeObj);
}
}
private void HandleCloseBagClicked()
{
uBag bagRoot = GetComponentInParent<uBag>();
if (bagRoot != null)
{
Destroy(bagRoot.gameObject);
return;
}
Destroy(gameObject);
}
private void ApplyPanelState(GameObject activeObject)
{
SetObjectActive(equipUpdateObj, activeObject == equipUpdateObj);
SetObjectActive(equipSmeltObj, activeObject == equipSmeltObj);
SetObjectActive(equipIllusionObj, activeObject == equipIllusionObj);
SetObjectActive(equipAttributeTransferObj, activeObject == equipAttributeTransferObj);
SetObjectActive(equipAwakeObj, activeObject == equipAwakeObj);
SetToggleInteractable(equipUpdate, activeObject != equipUpdateObj);
SetToggleInteractable(equipSmelt, activeObject != equipSmeltObj);
SetToggleInteractable(equipIllusion, activeObject != equipIllusionObj);
SetToggleInteractable(equipAttributeTransfer, activeObject != equipAttributeTransferObj);
SetToggleInteractable(equipAwake, activeObject != equipAwakeObj);
}
private void SetObjectActive(GameObject target, bool active)
{
if (target == null)
{
return;
}
target.SetActive(active);
}
private void SetToggleInteractable(Toggle toggle, bool interactable)
{
if (toggle == null)
{
return;
}
toggle.interactable = interactable;
}
}