hch
2025-09-11 aa72688fbfcba5cf8d90a7b34700bbe1f9ebee12
Main/Component/UI/Common/FunctionButton.cs
@@ -1,262 +1,259 @@
// //--------------------------------------------------------
// //    [Author]:           第二世界
// //    [  Date ]:           Tuesday, October 31, 2017
// //--------------------------------------------------------
// using UnityEngine;
// using System.Collections;
// using UnityEngine.UI;
// using UnityEngine.Events;
// using UnityEngine.EventSystems;
//--------------------------------------------------------
//    [Author]:           玩个游戏
//    [  Date ]:           Tuesday, October 31, 2017
//--------------------------------------------------------
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using UnityEngine.Events;
using UnityEngine.EventSystems;
// using System;
using System;
// namespace vnxbqy.UI
// {
//     public class FunctionButton : Button
//     {
//         [SerializeField] int m_Order = 0;
//         public int order {
//             get { return m_Order; }
//             set {
//                 m_Order = value;
//             }
//         }
//关联游戏玩法功能按钮,如升星功能
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] 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] 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] 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] 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] 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] 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] 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] 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] 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] 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] 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);
//                 }
//             }
//         }
    [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;
    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 Awake()
    {
#if UNITY_EDITOR
        if (!Application.isPlaying) return;
#endif
        OnFunctionUnLockStateChange();
        FuncOpen.Instance.OnFuncStateChangeEvent += OnFunctionUnLockStateChange;
    }
//         protected override void OnEnable()
//         {
//             base.OnEnable();
    protected override void OnEnable()
    {
        base.OnEnable();
//             if (group != null)
//             {
//                 group.Register(this);
//             }
        if (group != null)
        {
            group.Register(this);
        }
//             OnStateChange();
//         }
        OnStateChange();
    }
//         protected override void OnDisable()
//         {
//             base.OnDisable();
    protected override void OnDisable()
    {
        base.OnDisable();
//             if (group != null)
//             {
//                 group.UnRegister(this);
//             }
//         }
        if (group != null)
        {
            group.UnRegister(this);
        }
    }
//         protected override void OnDestroy()
//         {
// #if UNITY_EDITOR
//             if (!Application.isPlaying) return;
// #endif
//             FuncOpen.Instance.OnFuncStateChangeEvent -= OnFunctionUnLockStateChange;
//         }
    protected override void OnDestroy()
    {
#if UNITY_EDITOR
        if (!Application.isPlaying) return;
#endif
        FuncOpen.Instance.OnFuncStateChangeEvent -= OnFunctionUnLockStateChange;
    }
//         bool invokeForce = false;
    bool invokeForce = false;
//         public void Invoke(bool _force)
//         {
//             invokeForce = _force;
//             OnPointerClick(null);
//             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;
//             }
    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 (!invokeForce && state == TitleBtnState.Click)
        {
            if (repeatClickFunc != null)
            {
                repeatClickFunc();
            }
            return;
        }
//             if (base.onClick != null)
//             {
//                 base.onClick.Invoke();
//                 if (eventData != null)
//                 {
//                     SoundPlayer.Instance.PlayUIAudio(clickAudio);
//                 }
//             }
        if (base.onClick != null)
        {
            base.onClick.Invoke();
            if (eventData != null)
            {
                SoundPlayer.Instance.PlayUIAudio(clickAudio);
            }
        }
//             state = TitleBtnState.Click;
//         }
        state = TitleBtnState.Click;
    }
//         private void OnStateChange()
//         {
//             var config = useDefaultConfig ? FunctionButtonConfig.GetDefault() : m_AlternativeConfig;
//             if (Application.isPlaying)
//             {
//                 icon.SetSprite(config.GetIconKey(state));
//             }
    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);
        title.color = config.GetFontColor(state);
        title.fontSize = config.GetFontSize(state);
//             if (shadow != null)
//             {
//                 shadow.enabled = state == TitleBtnState.Locked || state == TitleBtnState.Normal;
//             }
        if (shadow != null)
        {
            shadow.enabled = state == TitleBtnState.Locked || state == TitleBtnState.Normal;
        }
//             if (locked != null)
//             {
//                 locked.SetActive(state == TitleBtnState.Locked);
//             }
        if (locked != null)
        {
            locked.SetActive(state == TitleBtnState.Locked);
        }
//             if (group != null && state == TitleBtnState.Click)
//             {
//                 group.NotifyToggleOn(this);
//             }
//         }
        if (group != null && state == TitleBtnState.Click)
        {
            group.NotifyToggleOn(this);
        }
    }
//         private void OnFunctionUnLockStateChange(int _functionId)
//         {
//             if (m_FunctionId == _functionId)
//             {
//                 OnFunctionUnLockStateChange();
//             }
//         }
    private void OnFunctionUnLockStateChange(int _functionId)
    {
        if (m_FunctionId == _functionId)
        {
            OnFunctionUnLockStateChange();
        }
    }
//         private void OnFunctionUnLockStateChange()
//         {
//             if (m_FunctionId == 0)
//             {
//                 return;
//             }
    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;
//         }
        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
#if UNITY_EDITOR
    protected override void OnValidate()
    {
        base.OnValidate();
        OnStateChange();
    }
#endif
//     }
}
// }