|  |  |  | 
|---|
|  |  |  | //-------------------------------------------------------- | 
|---|
|  |  |  | //    [Author]:           第二世界 | 
|---|
|  |  |  | //    [Author]:           玩个游戏 | 
|---|
|  |  |  | //    [  Date ]:           Friday, September 29, 2017 | 
|---|
|  |  |  | //-------------------------------------------------------- | 
|---|
|  |  |  | using UnityEngine; | 
|---|
|  |  |  | 
|---|
|  |  |  | 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); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|