using UnityEngine; using UnityEngine.UI; using UnityEngine.Events; public class UI_userBag : MonoBehaviour { /// /// 123前言: /// 装备升级、装备熔炼、装备幻化、装备属性转移 /// ——————————————————————————————————————— /// 升级,每5等级之间使用耗材升级,跨5倍数需要幻化而不是升级; /// 熔炼,消耗多余装备变为碎片,碎片可用于兑换新装备; /// 幻化,改变装备外观,保留原有属性并进行属性加强,消耗幻化材料; /// 属性转移,将一件装备的属性转移到另一件装备上,消耗转移材料; /// [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 action) { if (toggle == null) { return; } toggle.onValueChanged.RemoveListener(action); toggle.onValueChanged.AddListener(action); } private void UnbindToggle(Toggle toggle, UnityAction 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(); 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; } }