|  |  | 
 |  |  | using System; | 
 |  |  | using UnityEngine.EventSystems; | 
 |  |  |  | 
 |  |  |     public class UIFuncOpen : MonoBehaviour, IPointerClickHandler | 
 |  |  | public class UIFuncOpen : MonoBehaviour, IPointerClickHandler | 
 |  |  | { | 
 |  |  |     [SerializeField] int funcOpenKey; | 
 |  |  |     [SerializeField] GameObject LockImg; | 
 |  |  |     [SerializeField] bool active = true; | 
 |  |  |     public int id { get { return funcOpenKey; } } | 
 |  |  |  | 
 |  |  |     private Button funcBtn; | 
 |  |  |  | 
 |  |  |     private void Awake() | 
 |  |  |     { | 
 |  |  |         [SerializeField] int funcOpenKey; | 
 |  |  |         [SerializeField] GameObject LockImg; | 
 |  |  |         [SerializeField] bool active = true; | 
 |  |  |         public int id { get { return funcOpenKey; } } | 
 |  |  |         funcBtn = GetComponent<Button>(); | 
 |  |  |  | 
 |  |  |         private Button funcBtn; | 
 |  |  |         FuncOpen.Instance.OnFuncStateChangeEvent += OnFuncStateChangeEvent; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |         private void Awake() | 
 |  |  |     public void OnPointerClick(PointerEventData eventData) | 
 |  |  |     { | 
 |  |  |         if (!FuncOpen.Instance.IsFuncOpen(funcOpenKey)) | 
 |  |  |         { | 
 |  |  |             funcBtn = GetComponent<Button>(); | 
 |  |  |  | 
 |  |  |             FuncOpen.Instance.OnFuncStateChangeEvent += OnFuncStateChangeEvent; | 
 |  |  |             FuncOpen.Instance.ProcessorFuncErrorTip(funcOpenKey); | 
 |  |  |             return; | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |         public void OnPointerClick(PointerEventData eventData) | 
 |  |  |         { | 
 |  |  |             if (!FuncOpen.Instance.IsFuncOpen(funcOpenKey)) | 
 |  |  |             { | 
 |  |  |                 FuncOpen.Instance.ProcessorFuncErrorTip(funcOpenKey); | 
 |  |  |                 return; | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |     private void OnEnable() | 
 |  |  |     { | 
 |  |  |         SetState(); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |         private void OnEnable() | 
 |  |  |     private void OnFuncStateChangeEvent(int func) | 
 |  |  |     { | 
 |  |  |         if (funcOpenKey == func) | 
 |  |  |         { | 
 |  |  |             SetState(); | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |         private void OnFuncStateChangeEvent(int func) | 
 |  |  |     private void OnDestroy() | 
 |  |  |     { | 
 |  |  |         FuncOpen.Instance.OnFuncStateChangeEvent -= OnFuncStateChangeEvent; | 
 |  |  |     } | 
 |  |  |     private void SetState() | 
 |  |  |     { | 
 |  |  |         var IsOpen = FuncOpen.Instance.IsFuncOpen(funcOpenKey); | 
 |  |  |         var _funcOpenCfg = FuncOpenLVConfig.Get(funcOpenKey); | 
 |  |  |  | 
 |  |  |         if (_funcOpenCfg == null) | 
 |  |  |         { | 
 |  |  |             if (funcOpenKey == func) | 
 |  |  |             { | 
 |  |  |                 SetState(); | 
 |  |  |             } | 
 |  |  |             IsOpen = true; | 
 |  |  |             active = true; | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         private void OnDestroy() | 
 |  |  |         if (funcBtn != null) | 
 |  |  |         { | 
 |  |  |             FuncOpen.Instance.OnFuncStateChangeEvent -= OnFuncStateChangeEvent; | 
 |  |  |             // 禁用按钮的点击事件,但不改变透明度 | 
 |  |  |             funcBtn.enabled = IsOpen; | 
 |  |  |         } | 
 |  |  |         private void SetState() | 
 |  |  |          | 
 |  |  |          | 
 |  |  |         if (LockImg != null) | 
 |  |  |         { | 
 |  |  |             var IsOpen = FuncOpen.Instance.IsFuncOpen(funcOpenKey); | 
 |  |  |             var _funcOpenCfg = FuncOpenLVConfig.Get(funcOpenKey); | 
 |  |  |             LockImg.SetActive(!IsOpen); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |             if (_funcOpenCfg == null) | 
 |  |  |             { | 
 |  |  |                 IsOpen = true; | 
 |  |  |                 active = true; | 
 |  |  |             } | 
 |  |  |         // 未开启是否显示的配置 | 
 |  |  |         // if (_funcOpenCfg != null && _funcOpenCfg.open == 0) | 
 |  |  |         // { | 
 |  |  |         //     gameObject.SetActive(false); | 
 |  |  |         //     return; | 
 |  |  |         // } | 
 |  |  |  | 
 |  |  |             if (funcBtn != null) | 
 |  |  |         if (!active) | 
 |  |  |         { | 
 |  |  |             gameObject.SetActive(IsOpen); | 
 |  |  |         } | 
 |  |  |         else | 
 |  |  |         { | 
 |  |  |             if (!gameObject.activeSelf) | 
 |  |  |             { | 
 |  |  |                 funcBtn.interactable = IsOpen; | 
 |  |  |             } | 
 |  |  |              | 
 |  |  |             | 
 |  |  |             if (LockImg != null) | 
 |  |  |             { | 
 |  |  |                 LockImg.SetActive(!IsOpen); | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |             if (_funcOpenCfg != null && _funcOpenCfg.open == 0) | 
 |  |  |             { | 
 |  |  |                 gameObject.SetActive(false); | 
 |  |  |                 return; | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |             if (!active) | 
 |  |  |             { | 
 |  |  |                 gameObject.SetActive(IsOpen); | 
 |  |  |             } | 
 |  |  |             else | 
 |  |  |             { | 
 |  |  |                 if (!gameObject.activeSelf) | 
 |  |  |                 { | 
 |  |  |                     gameObject.SetActive(true); | 
 |  |  |                 } | 
 |  |  |                 gameObject.SetActive(true); | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |     } | 
 |  |  | } |