lcy
2025-11-06 09bc892c7283df8757a07b646d5af21ddaa263d1
Main/System/HappyXB/HeroCallResultWin.cs
@@ -1,3 +1,4 @@
using System;
using System.Collections;
using System.Collections.Generic;
using Cysharp.Threading.Tasks;
@@ -21,6 +22,9 @@
    [SerializeField] GameObject result10LihuiObj; //十连立绘展示
    [SerializeField] UIHeroController roleLHModel;
    [SerializeField] PositionTween roleLHModelTween;
    [SerializeField] UIAlphaTween roleLHModelTween2;
    [SerializeField] RawImage bgTexture;
    [SerializeField] Image qualityImg;
    [SerializeField] HeroCallResultCell showLHResultCell;
    [SerializeField] Image newMarkLHImg;
@@ -42,8 +46,17 @@
    [SerializeField] Text call10Text;
    [SerializeField] Button okBtn;
    [SerializeField] Text callTip;
    int resultState = 0; //0单抽展示 1十连展示 2 十连开始展示 3 十连立绘展示
    public enum ResultState
    {
        single = 0, //单抽展示
        singleStart = 1,    //单抽展示开始
        ten = 2,    //十连展示
        tenStart = 3,   //十连开始展示
        Lihui = 4,  //立绘展示
    }
    ResultState resultState = ResultState.single;
    bool isSkip = false;
    List<int> showLHHeroIDList = new List<int>();
@@ -58,13 +71,20 @@
            HeroUIManager.Instance.selectCallIndex = 1;
            HappyXBModel.Instance.SendXBManyQuest((int)HeroUIManager.Instance.selectCallType);
        });
        showNextlhOrCloseBtn.AddListener(RefreshLihui);
        showNextlhOrCloseBtn.AddListener(()=>
        {
            if (Time.time - lastShowLHTime < 0.5f)
            {
                return;
            }
            RefreshLihui();
        });
    }
    protected override void OnPreOpen()
    {
        isSkip = LocalSave.GetBool(HeroUIManager.skipKey, false);
        isSkip = LocalSave.GetBool(HeroUIManager.skipKey + PlayerDatas.Instance.baseData.PlayerID, false);
        HappyXBModel.Instance.RefreshXBResultAct += UpdateState;
        HappyXBModel.Instance.RefreshXBTypeInfoAct += RefreshBtn;
        InitMoney();
@@ -78,37 +98,36 @@
        HappyXBModel.Instance.RefreshXBTypeInfoAct -= RefreshBtn;
    }
    void UpdateState()
    {
        if (HeroUIManager.Instance.selectCallIndex == 0)
        if (isSkip)
        {
            resultState = 0;
        }
        else if (isSkip)
        {
            resultState = 1;
            resultState = HeroUIManager.Instance.selectCallIndex == 0 ? ResultState.single : ResultState.ten;
            RefreshState();
        }
        else
        {
            resultState = 2;
            resultState = HeroUIManager.Instance.selectCallIndex == 0 ? ResultState.singleStart : ResultState.tenStart;
            RefreshState();
            MoveToNextState().Forget();
        }
        RefreshState();
    }
    async UniTask MoveToNextState()
    {
        await UniTask.Delay(1500);
        showLHHeroIDList.Clear();
        for (int i = 0; i < HappyXBModel.Instance.xbResultDict.Count; i++)
        {
            var heroID = HappyXBModel.Instance.xbResultDict[i].itemId;
            if (HeroConfig.Get(heroID).Quality >= 4)
            if (HeroConfig.Get(heroID).Quality >= HappyXBModel.Instance.lhQuality)
                showLHHeroIDList.Add(HappyXBModel.Instance.xbResultDict[i].itemId);
        }
        resultState = 3;
        await UniTask.Delay(resultState == ResultState.singleStart ? 800 : 1500);
        resultState = ResultState.Lihui;
        try
        {
            RefreshState();
@@ -121,11 +140,12 @@
    void RefreshState()
    {
        if (resultState == 0)
        if (resultState == ResultState.single)
        {
            btnsObj.SetActive(true);
            call1Btn.SetActive(HeroUIManager.Instance.selectCallType != HappXBTitle.HeroCallScore ? true : false);
            call10Btn.SetActive(false);
            callTip.SetActive(true);
            result1Obj.SetActive(true);
            result10Obj.SetActive(false);
@@ -133,14 +153,32 @@
            ShowMoney(true);
            heroInfoObj.SetActive(true);
            result1Cell.Display(HappyXBModel.Instance.xbResultDict[0].itemId, 0);
            if (isSkip)
                result1Cell.Display(HappyXBModel.Instance.xbResultDict[0].itemId, 0, true);
            RefreshHeroInfo(HappyXBModel.Instance.xbResultDict[0].itemId);
            RefreshLuck();
        }
        else if (resultState == 1)
        else if (resultState == ResultState.singleStart)
        {
            btnsObj.SetActive(false);
            callTip.SetActive(false);
            result1Obj.SetActive(true);
            result10Obj.SetActive(false);
            result10LihuiObj.SetActive(false);
            ShowMoney(false);
            heroInfoObj.SetActive(false);
            result1Cell.Display(HappyXBModel.Instance.xbResultDict[0].itemId, 0);
            RefreshLuck();
        }
        else if (resultState == ResultState.ten)
        {
            btnsObj.SetActive(true);
            call1Btn.SetActive(false);
            call10Btn.SetActive(true);
            callTip.SetActive(true);
            result1Obj.SetActive(false);
            result10Obj.SetActive(true);
@@ -149,10 +187,12 @@
            heroInfoObj.SetActive(false);
            if (isSkip)
                Refresh10Result();
        }
        else if (resultState == 2)
        else if (resultState == ResultState.tenStart)
        {
            btnsObj.SetActive(false);
            callTip.SetActive(false);
            result1Obj.SetActive(false);
            result10Obj.SetActive(true);
@@ -161,10 +201,11 @@
            heroInfoObj.SetActive(false);
            Refresh10Result();
        }
        else if (resultState == 3)
        else if (resultState == ResultState.Lihui)
        {
            btnsObj.SetActive(false);
            callTip.SetActive(false);
            result1Obj.SetActive(false);
            result10Obj.SetActive(false);
            result10LihuiObj.SetActive(true);
@@ -196,9 +237,11 @@
        call1ItemIcon.SetOrgSprite(IconKey);
        var itemCount = PackManager.Instance.GetItemCountByID(PackType.Item, funcSet.CostItemID);
        if (HappyXBModel.Instance.IsHaveFreeXB((int)HeroUIManager.Instance.selectCallType))
        int todayFreeCount = HappyXBModel.Instance.GetFreeCountToday((int)HeroUIManager.Instance.selectCallType);
        int dayMaxCount = HappyXBModel.Instance.GetDailyFreeCount((int)HeroUIManager.Instance.selectCallType);
        if (todayFreeCount < dayMaxCount)
        {
            call1Text.text = Language.Get("L1127");
            call1Text.text = Language.Get("L1127") + (dayMaxCount - todayFreeCount) + "/" + dayMaxCount;
        }
        else
        {
@@ -208,7 +251,7 @@
        call10ItemIcon.SetOrgSprite(IconKey);
        call10Text.text = Language.Get("L1100", item.ItemName, UIHelper.AppendColor(funcSet.CostItemCountList[1] > itemCount ? TextColType.Red : TextColType.LightWhite, funcSet.CostItemCountList[1].ToString()));
        RefreshLuck();
    }
    void ShowMoney(bool show)
@@ -249,8 +292,10 @@
        }
    }
    float lastShowLHTime = 0;   //上次显示立绘的时间 设置点击间隔
    void RefreshLihui()
    {
        lastShowLHTime = Time.time;
        //汇总品质传说及以上的立绘
        int heroID = 0;
        if (showLHHeroIDList.Count > 0)
@@ -260,7 +305,7 @@
        }
        else
        {
            resultState = 1;
            resultState = HeroUIManager.Instance.selectCallIndex == 0 ? ResultState.single : ResultState.ten;
            RefreshState();
            return;
        }
@@ -270,6 +315,12 @@
        newMarkLHImg.SetActive(HeroUIManager.Instance.IsNewHero(heroID));
        showLHResultCell.Display(heroID, 0, true);
        RefreshHeroInfo(heroID);
        roleLHModelTween.SetStartState();
        roleLHModelTween.Play();
        roleLHModelTween2.SetStartState();
        roleLHModelTween2.Play();
        bgTexture.SetTexture2D("countryBG" + hero.Country);
    }
    void RefreshHeroInfo(int heroID)
@@ -282,4 +333,18 @@
        heroJobImg.SetSprite(HeroUIManager.Instance.GetJobIconName(heroConfig.Class));
        jobPosNameText.text = HeroUIManager.Instance.GetJobName(heroConfig.Class) + "  " + heroConfig.Desc;
    }
    void RefreshLuck()
    {
        //再招募{0}次后必得{1}武将
        List<int> qualityList = new List<int>();
        var needCount = HappyXBModel.Instance.GetNextXBCountForBigAward((int)HappXBTitle.HeroCallAdvanced, out qualityList);
        List<string> qualityStrList = new List<string>();
        for (int i = 0; i < qualityList.Count; i++)
        {
            qualityStrList.Add(UIHelper.AppendColor(qualityList[i], Language.Get("L1039", Language.Get("CommonQuality" + qualityList[i]))));
        }
        callTip.text = Language.Get("HeroCall6", needCount, string.Join(Language.Get("L1130"), qualityStrList.ToArray()));
    }
}