//-------------------------------------------------------- 
 | 
//    [Author]:           第二世界 
 | 
//    [  Date ]:           Tuesday, October 31, 2017 
 | 
//-------------------------------------------------------- 
 | 
using UnityEngine; 
 | 
using System.Collections; 
 | 
using UnityEngine.UI; 
 | 
using UnityEngine.Events; 
 | 
using UnityEngine.EventSystems; 
 | 
  
 | 
using System; 
 | 
  
 | 
  
 | 
     
 | 
    public class FunctionButton : Button 
 | 
    { 
 | 
        [SerializeField] int m_Order = 0; 
 | 
        public int order { 
 | 
            get { return m_Order; } 
 | 
            set { 
 | 
                m_Order = value; 
 | 
            } 
 | 
        } 
 | 
  
 | 
        [SerializeField] int m_FunctionId = -1; 
 | 
        public int functionId { 
 | 
            get { return m_FunctionId; } 
 | 
            set { 
 | 
                m_FunctionId = value; 
 | 
                OnFunctionUnLockStateChange(); 
 | 
            } 
 | 
        } 
 | 
  
 | 
        [SerializeField] TitleBtnState m_State = TitleBtnState.Normal; 
 | 
        public TitleBtnState state { 
 | 
            get { return m_State; } 
 | 
            set { 
 | 
                if (m_State != value) 
 | 
                { 
 | 
                    m_State = value; 
 | 
                    OnStateChange(); 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
  
 | 
        [SerializeField] Button m_Button; 
 | 
        public Button button { 
 | 
            get { return m_Button; } 
 | 
            set { m_Button = value; } 
 | 
        } 
 | 
  
 | 
        [SerializeField] ImageEx m_Icon; 
 | 
        public ImageEx icon { 
 | 
            get { return this.m_Icon; } 
 | 
            set { this.m_Icon = value; } 
 | 
        } 
 | 
  
 | 
        [SerializeField] TextEx m_Title; 
 | 
        public TextEx title { 
 | 
            get { return this.m_Title; } 
 | 
            set { this.m_Title = value; } 
 | 
        } 
 | 
  
 | 
        [SerializeField] RedpointBehaviour m_Redpoint; 
 | 
        public RedpointBehaviour redpoint { 
 | 
            get { return m_Redpoint; } 
 | 
            set { m_Redpoint = value; } 
 | 
        } 
 | 
  
 | 
        [SerializeField] Shadow m_Shadow; 
 | 
        public Shadow shadow { 
 | 
            get { return this.m_Shadow; } 
 | 
            set { this.m_Shadow = value; } 
 | 
        } 
 | 
  
 | 
        [SerializeField] Transform m_Locked; 
 | 
        public Transform locked { 
 | 
            get { return this.m_Locked; } 
 | 
            set { this.m_Locked = value; } 
 | 
        } 
 | 
  
 | 
        [SerializeField] int m_Audio = 1; 
 | 
        public int clickAudio { 
 | 
            get { return this.m_Audio; } 
 | 
            set { this.m_Audio = value; } 
 | 
        } 
 | 
  
 | 
        [SerializeField] bool m_UseDefaultConfig = true; 
 | 
        public bool useDefaultConfig { 
 | 
            get { return this.m_UseDefaultConfig; } 
 | 
            set { this.m_UseDefaultConfig = value; } 
 | 
        } 
 | 
  
 | 
        [SerializeField] FunctionButtonConfig m_AlternativeConfig; 
 | 
        public FunctionButtonConfig alternativeConfig { get { return m_AlternativeConfig; } set { m_AlternativeConfig = value; } } 
 | 
  
 | 
        [SerializeField] 
 | 
        FunctionButtonGroup m_Group; 
 | 
        public FunctionButtonGroup group { 
 | 
            get { return m_Group; } 
 | 
            set { 
 | 
                if (m_Group != null) 
 | 
                { 
 | 
                    m_Group.UnRegister(this); 
 | 
                } 
 | 
                m_Group = value; 
 | 
                if (m_Group != null) 
 | 
                { 
 | 
                    m_Group.Register(this); 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
  
 | 
        public event Action<string> OnPointClickLockFunc; 
 | 
        public event Action repeatClickFunc; 
 | 
  
 | 
        protected override void Awake() 
 | 
        { 
 | 
#if UNITY_EDITOR 
 | 
            if (!Application.isPlaying) return; 
 | 
#endif 
 | 
            OnFunctionUnLockStateChange(); 
 | 
            FuncOpen.Instance.OnFuncStateChangeEvent += OnFunctionUnLockStateChange; 
 | 
        } 
 | 
  
 | 
        protected override void OnEnable() 
 | 
        { 
 | 
            base.OnEnable(); 
 | 
  
 | 
            if (group != null) 
 | 
            { 
 | 
                group.Register(this); 
 | 
            } 
 | 
  
 | 
            OnStateChange(); 
 | 
        } 
 | 
  
 | 
        protected override void OnDisable() 
 | 
        { 
 | 
            base.OnDisable(); 
 | 
  
 | 
            if (group != null) 
 | 
            { 
 | 
                group.UnRegister(this); 
 | 
            } 
 | 
        } 
 | 
  
 | 
        protected override void OnDestroy() 
 | 
        { 
 | 
#if UNITY_EDITOR 
 | 
            if (!Application.isPlaying) return; 
 | 
#endif 
 | 
            FuncOpen.Instance.OnFuncStateChangeEvent -= OnFunctionUnLockStateChange; 
 | 
        } 
 | 
  
 | 
        bool invokeForce = false; 
 | 
  
 | 
        public void Invoke(bool _force) 
 | 
        { 
 | 
            invokeForce = _force; 
 | 
            OnPointerClick(null); 
 | 
            invokeForce = false; 
 | 
        } 
 | 
  
 | 
        public override void OnPointerClick(PointerEventData eventData) 
 | 
        { 
 | 
            if (state == TitleBtnState.Locked) 
 | 
            { 
 | 
                if (OnPointClickLockFunc != null) 
 | 
                { 
 | 
                    OnPointClickLockFunc(this.gameObject.name); 
 | 
                } 
 | 
                else 
 | 
                { 
 | 
                    FuncOpen.Instance.ProcessorFuncErrorTip(functionId); 
 | 
                } 
 | 
                return; 
 | 
            } 
 | 
  
 | 
            if (!invokeForce && state == TitleBtnState.Click) 
 | 
            { 
 | 
                if (repeatClickFunc != null) 
 | 
                { 
 | 
                    repeatClickFunc(); 
 | 
                } 
 | 
                return; 
 | 
            } 
 | 
  
 | 
            if (base.onClick != null) 
 | 
            { 
 | 
                base.onClick.Invoke(); 
 | 
                if (eventData != null) 
 | 
                { 
 | 
                    SoundPlayer.Instance.PlayUIAudio(clickAudio); 
 | 
                } 
 | 
            } 
 | 
  
 | 
            state = TitleBtnState.Click; 
 | 
        } 
 | 
  
 | 
        private void OnStateChange() 
 | 
        { 
 | 
            var config = useDefaultConfig ? FunctionButtonConfig.GetDefault() : m_AlternativeConfig; 
 | 
            if (Application.isPlaying) 
 | 
            { 
 | 
                icon.SetSprite(config.GetIconKey(state)); 
 | 
            } 
 | 
  
 | 
            title.color = config.GetFontColor(state); 
 | 
            title.fontSize = config.GetFontSize(state); 
 | 
  
 | 
            if (shadow != null) 
 | 
            { 
 | 
                shadow.enabled = state == TitleBtnState.Locked || state == TitleBtnState.Normal; 
 | 
            } 
 | 
  
 | 
            if (locked != null) 
 | 
            { 
 | 
                locked.SetActive(state == TitleBtnState.Locked); 
 | 
            } 
 | 
  
 | 
            if (group != null && state == TitleBtnState.Click) 
 | 
            { 
 | 
                group.NotifyToggleOn(this); 
 | 
            } 
 | 
        } 
 | 
  
 | 
        private void OnFunctionUnLockStateChange(int _functionId) 
 | 
        { 
 | 
            if (m_FunctionId == _functionId) 
 | 
            { 
 | 
                OnFunctionUnLockStateChange(); 
 | 
            } 
 | 
        } 
 | 
  
 | 
        private void OnFunctionUnLockStateChange() 
 | 
        { 
 | 
            if (m_FunctionId == 0) 
 | 
            { 
 | 
                return; 
 | 
            } 
 | 
  
 | 
            var isOpen = m_FunctionId == -1 || FuncOpen.Instance.IsFuncOpen(m_FunctionId); 
 | 
            state = isOpen ? state == TitleBtnState.Click ? TitleBtnState.Click : TitleBtnState.Normal : TitleBtnState.Locked; 
 | 
        } 
 | 
  
 | 
#if UNITY_EDITOR 
 | 
        protected override void OnValidate() 
 | 
        { 
 | 
            base.OnValidate(); 
 | 
            OnStateChange(); 
 | 
        } 
 | 
#endif 
 | 
  
 | 
    } 
 |