yyl
2025-05-30 0c3a0519a0f526fd67ac3df22fe801c51a81c5e7
18 子 2D卡牌客户端搭建 / 2D卡牌客户端搭建
3个文件已修改
2个文件已添加
229 ■■■■■ 已修改文件
Main/Component/UI/Common/FunctionButtonGroup.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Login/ServerListCenter.cs 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/UI/OneLevelWin.cs 155 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/UI/OneLevelWin.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/UI/UIBase.cs 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Component/UI/Common/FunctionButtonGroup.cs
@@ -7,7 +7,7 @@
using System.Collections.Generic;
using UnityEngine.UI;
using UnityEngine.Events;
using System;
    public class FunctionButtonGroup : MonoBehaviour
    {
@@ -225,11 +225,11 @@
            return functionButton;
        }
        public void SetFunctionListener(int order, UnityAction callBack)
        public void SetFunctionListener(int order, Action callBack)
        {
            if (functionButtons.ContainsKey(order))
            {
                functionButtons[order].SetListener(callBack);
                functionButtons[order].SetListener(() => callBack?.Invoke());
            }
        }
Main/Login/ServerListCenter.cs
@@ -234,7 +234,6 @@
    {
        if (_ok)
        {
            Debug.LogError(" OnGetServerList " + _result);
            ServerListParser.Instance.PushCommonServerListRawData(_result);
            NetLinkWin.Hide();
        }
@@ -263,12 +262,12 @@
            }
        }
        List<string> prints = FieldPrint.PrintFieldsExpand(serverInfoCommon.common[0], true);
        // List<string> prints = FieldPrint.PrintFieldsExpand(serverInfoCommon.common[0], true);
        for (int i = 0; i < prints.Count; i++)
        {
            Debug.LogError($"index : {i} " + prints[i]);
        }
        // for (int i = 0; i < prints.Count; i++)
        // {
        //     Debug.Log($"index : {i} " + prints[i]);
        // }
        serverInfoCommon.recommend.group_list = recommendServers.ToArray();
        FiltrateDefaultServerAndServerGroup();
Main/UI/OneLevelWin.cs
New file
@@ -0,0 +1,155 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using DG.Tweening;
using UnityEngine.UI; // DOTween 插件引用
using Cysharp.Threading.Tasks;
using System;
public class OneLevelWin : UIBase
{
    protected Image m_TitleIcon;
    protected FunctionButtonGroup m_Group;
    protected Button m_Left;
    protected Button m_Right;
    protected Button m_Close;
    protected Text m_Copper;
    protected Text m_Diamond;
    protected Text m_BindDiamond;
    protected RectTransform m_SubWindowContainer;
    public RectTransform subWindowContainer { get { return m_SubWindowContainer; } }
    private UIBase subWindow = null;
    //  init once
    protected override void InitComponent()
    {
        base.InitComponent();
        m_TitleIcon = this.GetComponent<Image>("Pivot/Container_BackGround/Img_Title");
        m_Group = this.GetComponent<FunctionButtonGroup>("Pivot/Container_Functions");
        m_Left = this.GetComponent<Button>("Pivot/Container_Buttons/Btn_Left");
        m_Right = this.GetComponent<Button>("Pivot/Container_Buttons/Btn_Right");
        m_Close = this.GetComponent<Button>("Pivot/Container_Buttons/Btn_Close");
        m_Copper = this.GetComponent<Text>("Pivot/Container_BackGround/FollowStoreBottom/SilverCountBG/CountText");
        if (m_Copper != null)
            m_Diamond = this.GetComponent<Text>("Pivot/Container_BackGround/FollowStoreBottom/GoldCountBG/CountText");
            m_BindDiamond = this.GetComponent<Text>("Pivot/Container_BackGround/FollowStoreBottom/GoldPaperCountBG/CountText");
        m_SubWindowContainer = this.GetComponent<RectTransform>("Pivot/Container_SubWindow");
        var name = this.gameObject.name;
        var infos = WindowConfig.GetWindowFunctionInfos(name);
        foreach (var info in infos)
        {
            var title = Language.Get(info.titleKey);
            if (title.Length == 2)
            {
                title = title.Insert(1, " ");
            }
            m_Group.AddFunction("FunctionButton_Pattern_1", info.order, info.functionId, title, info.redPointId);
        }
        m_TitleIcon.SetSprite(WindowConfig.GetTitleIconKey(name));
        m_TitleIcon.SetNativeSize();
        m_Close.SetListener(CloseWindow);
        m_Left.SetListener(() => { m_Group.TriggerLast(); });
        m_Right.SetListener(() => { m_Group.TriggerNext(); });
    }
    protected override void OnPreOpen()
    {
        base.OnPreOpen();
        if (m_Copper == null)
            m_Copper = this.GetComponent<Text>("Pivot/Container_BackGround/FollowStoreBottom/SilverCountBG/CountText");
            m_Diamond = this.GetComponent<Text>("Pivot/Container_BackGround/FollowStoreBottom/GoldCountBG/CountText");
            m_BindDiamond = this.GetComponent<Text>("Pivot/Container_BackGround/FollowStoreBottom/GoldPaperCountBG/CountText");
        UpdateMoney();
    }
    protected override void OnPreClose()
    {
        base.OnPreClose();
        CloseSubWindows();
    }
    protected override void OnOpen()
    {
        base.OnOpen();
        PlayerDatas.Instance.playerDataRefreshEvent += OnPlayerDataUpdate;
        ExecuteNextFrame(() => {
            m_Group.TriggerByOrder(functionOrder);
            m_Group.GotoOrder(functionOrder);
        });
        m_Left.SetActive(m_Group.unLockedCount > 1);
        m_Right.SetActive(m_Group.unLockedCount > 1);
    }
    protected virtual void CloseSubWindows()
    {
        if (null != subWindow)
        {
            subWindow.CloseWindow();
        }
        subWindow = null;
    }
    public void SetFunctionListener(int order, Action callBack)
    {
        m_Group.SetFunctionListener(order, callBack);
    }
    public void SetFunctionButtonActive(int order, bool isShow)
    {
        m_Group.SetFunctionButtonActive(order, isShow);
    }
    public RedPointState GetFunctionButtonRedPointState(int order)
    {
        return m_Group.GetFunctionButtonRedPointState(order);
    }
    public void FunctionButtonInvoke(int order)
    {
        m_Group.TriggerByOrder(order);
        m_Group.GotoOrder(order);
    }
    private void OnPlayerDataUpdate(PlayerDataType type)
    {
        switch (type)
        {
            case PlayerDataType.Gold:
            case PlayerDataType.GoldPaper:
            case PlayerDataType.Silver:
            case PlayerDataType.ExAttr6:
            case PlayerDataType.default5:
            case PlayerDataType.default6:
                UpdateMoney();
                break;
        }
    }
    void UpdateMoney()
    {
        if (m_Copper == null)
            return;
        m_Copper.text = ItemLogicUtility.Instance.OnChangeCoinsUnit(PlayerDatas.Instance.baseData.allCopper);
        m_Diamond.text = UIHelper.GetMoneyCntEx(1).ToString();
        if (PlayerDatas.Instance.baseData.bindDiamond > 0)
            m_BindDiamond.text = ItemLogicUtility.Instance.OnChangeCoinsUnit(PlayerDatas.Instance.baseData.bindDiamond);
        else
            m_BindDiamond.text = UIHelper.GetMoneyCntEx(2).ToString();
    }
}
Main/UI/OneLevelWin.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 3439b4ac79c53fc44a7417ab90b5c18d
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Main/UI/UIBase.cs
@@ -4,6 +4,7 @@
using DG.Tweening;
using UnityEngine.UI; // DOTween 插件引用
using Cysharp.Threading.Tasks;
using System;
public enum UILayer
{
@@ -55,6 +56,18 @@
    // 子UI管理
    [HideInInspector] public List<UIBase> childrenUI = new List<UIBase>();
    //  打开遮罩
    [SerializeField] public bool openMask = false;
    //  点击空白区域关闭界面
    [SerializeField] public bool clickEmptySpaceClose = false;
    private GameObject screenMask = null;
    private Button btnClickEmptyClose;
    protected int functionOrder = 0;
    // 内部状态
    protected bool isActive = false;
    protected bool isAnimating = false;
@@ -88,6 +101,16 @@
            originalScale = rectTransform.localScale;
            originalPosition = rectTransform.anchoredPosition;
        }
        ApplySettings();
        if (openMask)
        {
            screenMask = GameObject.Instantiate(Resources.Load<GameObject>("Prefabs/ScreenMask"), transform);
            screenMask.transform.localScale = Vector3.one;
            screenMask.transform.localPosition = Vector3.zero;
            screenMask.transform.SetAsFirstSibling();
        }
    }
    protected virtual void Start()
@@ -95,6 +118,29 @@
        // 子类可以重写此方法进行额外初始化
    }
    protected async UniTask ApplySettings()
    {
        await UniTask.DelayFrame(5);
        if (null != transform)
        {
            if (clickEmptySpaceClose)
            {
                GameObject goBtnESC = GameObject.Instantiate(Resources.Load<GameObject>("Prefabs/ClickEmptyCloseMask"), transform);
                //  Load
                btnClickEmptyClose = goBtnESC.GetComponent<Button>();
                btnClickEmptyClose.AddListener(CloseWindow);
                btnClickEmptyClose.transform.SetAsFirstSibling();
            }
        }
    }
    protected async void ExecuteNextFrame(Action _action)
    {
        await UniTask.DelayFrame(1);
        _action?.Invoke();
    }
    protected virtual void OnDestroy()
    {
        // 确保动画被正确清理