yyl
2025-05-23 0eea7395cb35402248d0707be44bbfedea75e5f6
Main/Component/UI/Common/FunctionButtonGroup.cs
@@ -1,269 +1,269 @@
// //--------------------------------------------------------
// //    [Author]:           第二世界
// //    [  Date ]:           Tuesday, October 31, 2017
// //--------------------------------------------------------
// using UnityEngine;
// using System.Collections;
// using System.Collections.Generic;
// using UnityEngine.UI;
// using UnityEngine.Events;
//--------------------------------------------------------
//    [Author]:           第二世界
//    [  Date ]:           Tuesday, October 31, 2017
//--------------------------------------------------------
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using UnityEngine.UI;
using UnityEngine.Events;
// namespace vnxbqy.UI
// {
namespace vnxbqy.UI
{
//     public class FunctionButtonGroup : MonoBehaviour
//     {
//         [SerializeField] ScrollRect m_ScrollRect;
//         [SerializeField] RectTransform m_Container;
    public class FunctionButtonGroup : MonoBehaviour
    {
        [SerializeField] ScrollRect m_ScrollRect;
        [SerializeField] RectTransform m_Container;
//         public int unLockedCount {
//             get {
//                 var count = 0;
//                 foreach (var button in functionButtons.Values)
//                 {
//                     if (button.state != TitleBtnState.Locked)
//                     {
//                         count++;
//                     }
//                 }
        public int unLockedCount {
            get {
                var count = 0;
                foreach (var button in functionButtons.Values)
                {
                    if (button.state != TitleBtnState.Locked)
                    {
                        count++;
                    }
                }
//                 return count;
//             }
//         }
                return count;
            }
        }
//         int currentOrder = 0;
//         List<int> orders = new List<int>();
//         Dictionary<int, FunctionButton> functionButtons = new Dictionary<int, FunctionButton>();
        int currentOrder = 0;
        List<int> orders = new List<int>();
        Dictionary<int, FunctionButton> functionButtons = new Dictionary<int, FunctionButton>();
//         public void Register(FunctionButton button)
//         {
//             functionButtons[button.order] = button;
//             if (!orders.Contains(button.order))
//             {
//                 orders.Add(button.order);
//                 orders.Sort(OrderCompare);
//             }
        public void Register(FunctionButton button)
        {
            functionButtons[button.order] = button;
            if (!orders.Contains(button.order))
            {
                orders.Add(button.order);
                orders.Sort(OrderCompare);
            }
//             if (m_ScrollRect != null)
//             {
//                 m_ScrollRect.horizontal = functionButtons.Count > 5;
//             }
//         }
            if (m_ScrollRect != null)
            {
                m_ScrollRect.horizontal = functionButtons.Count > 5;
            }
        }
//         public void ChangeHorizontal(bool move)
//         {
//             if (m_ScrollRect != null)
//             {
//                 m_ScrollRect.horizontal = move;
//             }
//         }
        public void ChangeHorizontal(bool move)
        {
            if (m_ScrollRect != null)
            {
                m_ScrollRect.horizontal = move;
            }
        }
//         public void ChangeHorizontalPos(float index)
//         {
//             if (m_ScrollRect != null)
//             {
//                 m_ScrollRect.horizontalNormalizedPosition = index;
//             }
//         }
//         public void UnRegister(FunctionButton button)
//         {
//             if (functionButtons.ContainsKey(button.order))
//             {
//                 functionButtons.Remove(button.order);
//             }
        public void ChangeHorizontalPos(float index)
        {
            if (m_ScrollRect != null)
            {
                m_ScrollRect.horizontalNormalizedPosition = index;
            }
        }
        public void UnRegister(FunctionButton button)
        {
            if (functionButtons.ContainsKey(button.order))
            {
                functionButtons.Remove(button.order);
            }
//             if (orders.Contains(button.order))
//             {
//                 orders.Remove(button.order);
//                 orders.Sort(OrderCompare);
//             }
            if (orders.Contains(button.order))
            {
                orders.Remove(button.order);
                orders.Sort(OrderCompare);
            }
//             if (m_ScrollRect != null)
//             {
//                 m_ScrollRect.horizontal = functionButtons.Count > 5;
//             }
//         }
            if (m_ScrollRect != null)
            {
                m_ScrollRect.horizontal = functionButtons.Count > 5;
            }
        }
//         public void NotifyToggleOn(FunctionButton button)
//         {
        public void NotifyToggleOn(FunctionButton button)
        {
//             if (button.state == TitleBtnState.Click)
//             {
//                 currentOrder = button.order;
//                 for (int i = 0; i < orders.Count; i++)
//                 {
//                     if (!functionButtons.ContainsKey(orders[i]))
//                     {
//                         Debug.LogFormat("<color=#ff0000ff>{0} {1}</color>", orders[i], button.name);
//                     }
//                     var functionButton = functionButtons[orders[i]];
//                     if (functionButton != button && functionButton.state != TitleBtnState.Locked)
//                     {
//                         functionButton.state = TitleBtnState.Normal;
//                     }
//                 }
//             }
//         }
            if (button.state == TitleBtnState.Click)
            {
                currentOrder = button.order;
                for (int i = 0; i < orders.Count; i++)
                {
                    if (!functionButtons.ContainsKey(orders[i]))
                    {
                        Debug.LogFormat("<color=#ff0000ff>{0} {1}</color>", orders[i], button.name);
                    }
                    var functionButton = functionButtons[orders[i]];
                    if (functionButton != button && functionButton.state != TitleBtnState.Locked)
                    {
                        functionButton.state = TitleBtnState.Normal;
                    }
                }
            }
        }
//         public void TriggerByOrder(int targetOrder)
//         {
//             for (int i = 0; i < orders.Count; i++)
//             {
//                 var order = orders[i];
//                 if (order == targetOrder)
//                 {
//                     functionButtons[order].Invoke(true);
//                     break;
//                 }
//             }
//         }
        public void TriggerByOrder(int targetOrder)
        {
            for (int i = 0; i < orders.Count; i++)
            {
                var order = orders[i];
                if (order == targetOrder)
                {
                    functionButtons[order].Invoke(true);
                    break;
                }
            }
        }
//         public void TriggerLast()
//         {
//             var index = orders.IndexOf(currentOrder);
//             if (index < 0)
//             {
//                 return;
//             }
        public void TriggerLast()
        {
            var index = orders.IndexOf(currentOrder);
            if (index < 0)
            {
                return;
            }
//             var loopTimes = 0;
//             while (loopTimes < 2)
//             {
//                 index--;
//                 if (index < 0)
//                 {
//                     index = orders.Count - 1;
//                     loopTimes++;
//                 }
            var loopTimes = 0;
            while (loopTimes < 2)
            {
                index--;
                if (index < 0)
                {
                    index = orders.Count - 1;
                    loopTimes++;
                }
//                 var next = orders[index];
//                 if (functionButtons[next].state != TitleBtnState.Locked)
//                 {
//                     functionButtons[next].Invoke(false);
//                     break;
//                 }
//             }
                var next = orders[index];
                if (functionButtons[next].state != TitleBtnState.Locked)
                {
                    functionButtons[next].Invoke(false);
                    break;
                }
            }
//         }
        }
//         public void TriggerNext()
//         {
//             var index = orders.IndexOf(currentOrder);
//             if (index < 0)
//             {
//                 return;
//             }
        public void TriggerNext()
        {
            var index = orders.IndexOf(currentOrder);
            if (index < 0)
            {
                return;
            }
//             var loopTimes = 0;
//             while (loopTimes < 2)
//             {
//                 index++;
//                 if (index > orders.Count - 1)
//                 {
//                     index = 0;
//                     loopTimes++;
//                 }
            var loopTimes = 0;
            while (loopTimes < 2)
            {
                index++;
                if (index > orders.Count - 1)
                {
                    index = 0;
                    loopTimes++;
                }
//                 var next = orders[index];
//                 if (functionButtons[next].state != TitleBtnState.Locked)
//                 {
//                     functionButtons[next].Invoke(false);
//                     break;
//                 }
//             }
//         }
                var next = orders[index];
                if (functionButtons[next].state != TitleBtnState.Locked)
                {
                    functionButtons[next].Invoke(false);
                    break;
                }
            }
        }
//         public bool IsFirst()
//         {
//             return orders.Count > 0 && currentOrder == orders[0];
//         }
        public bool IsFirst()
        {
            return orders.Count > 0 && currentOrder == orders[0];
        }
//         public bool IsLast()
//         {
//             return orders.Count > 0 && currentOrder == orders[orders.Count - 1];
//         }
        public bool IsLast()
        {
            return orders.Count > 0 && currentOrder == orders[orders.Count - 1];
        }
//         public void GotoOrder(int order)
//         {
//             if (m_ScrollRect != null)
//             {
//                 var index = orders.IndexOf(order);
//                 if (m_ScrollRect.horizontal)
//                 {
//                     m_ScrollRect.horizontalNormalizedPosition = (float)index / orders.Count;
//                 }
//                 else if (m_ScrollRect.vertical)
//                 {
//                     m_ScrollRect.verticalNormalizedPosition = (float)index / orders.Count;
//                 }
//             }
//         }
        public void GotoOrder(int order)
        {
            if (m_ScrollRect != null)
            {
                var index = orders.IndexOf(order);
                if (m_ScrollRect.horizontal)
                {
                    m_ScrollRect.horizontalNormalizedPosition = (float)index / orders.Count;
                }
                else if (m_ScrollRect.vertical)
                {
                    m_ScrollRect.verticalNormalizedPosition = (float)index / orders.Count;
                }
            }
        }
//         private int OrderCompare(int a, int b)
//         {
//             return a < b ? -1 : 1;
//         }
        private int OrderCompare(int a, int b)
        {
            return a < b ? -1 : 1;
        }
//         public FunctionButton AddFunction(string pattern, int order, int functionId, string title, int redpointId)
//         {
//             if (m_Container == null)
//             {
//                 return null;
//             }
        public FunctionButton AddFunction(string pattern, int order, int functionId, string title, int redpointId)
        {
            if (m_Container == null)
            {
                return null;
            }
//             var instance = UIUtility.CreateWidget(pattern, string.Concat("Function_", order));
//             instance.transform.SetParentEx(this.m_Container, Vector3.zero, Quaternion.identity, Vector3.one);
            var instance = UIUtility.CreateWidget(pattern, string.Concat("Function_", order));
            instance.transform.SetParentEx(this.m_Container, Vector3.zero, Quaternion.identity, Vector3.one);
//             var functionButton = instance.GetComponent<FunctionButton>();
//             functionButton.functionId = functionId;
//             functionButton.order = order;
//             functionButton.title.text = title;
            var functionButton = instance.GetComponent<FunctionButton>();
            functionButton.functionId = functionId;
            functionButton.order = order;
            functionButton.title.text = title;
//             functionButton.group = this;
//             functionButton.redpoint.redpointId = redpointId;
//             functionButtons[order] = functionButton;
            functionButton.group = this;
            functionButton.redpoint.redpointId = redpointId;
            functionButtons[order] = functionButton;
//             functionButton.SetActive(functionButton.functionId != -1);
//             return functionButton;
//         }
            functionButton.SetActive(functionButton.functionId != -1);
            return functionButton;
        }
//         public void SetFunctionListener(int order, UnityAction callBack)
//         {
//             if (functionButtons.ContainsKey(order))
//             {
//                 functionButtons[order].SetListener(callBack);
//             }
//         }
        public void SetFunctionListener(int order, UnityAction callBack)
        {
            if (functionButtons.ContainsKey(order))
            {
                functionButtons[order].SetListener(callBack);
            }
        }
//         public void SetFunctionButtonActive(int order, bool isShow)
//         {
//             if (functionButtons.ContainsKey(order))
//             {
//                 functionButtons[order].SetActive(isShow);
//             }
//         }
        public void SetFunctionButtonActive(int order, bool isShow)
        {
            if (functionButtons.ContainsKey(order))
            {
                functionButtons[order].SetActive(isShow);
            }
        }
//         public RedPointState GetFunctionButtonRedPointState(int order)
//         {
//             if (functionButtons.ContainsKey(order))
//             {
//                 return RedpointCenter.Instance.GetRedpointState(functionButtons[order].redpoint.redpointId);
//             }
        public RedPointState GetFunctionButtonRedPointState(int order)
        {
            if (functionButtons.ContainsKey(order))
            {
                return RedpointCenter.Instance.GetRedpointState(functionButtons[order].redpoint.redpointId);
            }
//             return RedPointState.None;
//         }
            return RedPointState.None;
        }
//         public FunctionButton GetFunctionBtn(int order)
//         {
//             if (functionButtons.ContainsKey(order))
//             {
//                 return functionButtons[order];
//             }
//             return null;
//         }
//     }
        public FunctionButton GetFunctionBtn(int order)
        {
            if (functionButtons.ContainsKey(order))
            {
                return functionButtons[order];
            }
            return null;
        }
    }
// }
}