using System.Collections.Generic; 
 | 
using UnityEngine; 
 | 
public class BoneFieldWin : UIBase 
 | 
{ 
 | 
    [SerializeField] TextEx txtDifficulty; 
 | 
    [SerializeField] TextEx txtBossName; 
 | 
    [SerializeField] TextEx txtTodaySweepCount; 
 | 
    [SerializeField] TextEx txtTodayAdsCount; 
 | 
    [SerializeField] TextEx txtFirstFree; 
 | 
    [SerializeField] TextEx txtFightPower; 
 | 
    [SerializeField] ImageEx imgMaxLineID; 
 | 
    [SerializeField] Transform transChallengeItemCells; 
 | 
    [SerializeField] List<ItemCell> challengeItemCells1; 
 | 
    [SerializeField] List<ItemCell> challengeItemCells2; 
 | 
    [SerializeField] List<ItemCell> sweepItemCells; 
 | 
    [SerializeField] List<SkillWordCell> skillWords; 
 | 
    [SerializeField] ButtonEx btnClose; 
 | 
    [SerializeField] Transform transNoChallenge; 
 | 
    [SerializeField] Transform transHasChallenge; 
 | 
    [SerializeField] BoneFieldChallengeButton btnChallenge1; 
 | 
    [SerializeField] BoneFieldChallengeButton btnChallenge2; 
 | 
    [SerializeField] ButtonEx btnSweep; 
 | 
    [SerializeField] ImageEx imgSweepNo; 
 | 
    [SerializeField] ButtonEx btnAds; 
 | 
    [SerializeField] ImageEx imgSweepRed; 
 | 
    bool isHasNextLineID; 
 | 
    int adID; 
 | 
  
 | 
    int showSweepMaxCount; 
 | 
    int showrealRemainSweepCount; 
 | 
    protected override void InitComponent() 
 | 
    { 
 | 
        base.InitComponent(); 
 | 
        btnClose.SetListener(OnClickClose); 
 | 
        btnSweep.SetListener(OnClickSweep); 
 | 
        btnAds.SetListener(OnClickAds); 
 | 
    } 
 | 
  
 | 
    protected override void OnPreOpen() 
 | 
    { 
 | 
        base.OnPreOpen(); 
 | 
        DungeonManager.Instance.UpdateFBInfoChangeEvent += OnUpdateFBInfoChangeEvent; 
 | 
        AdsManager.Instance.OnAdsInfoListUpdateEvent += OnAdsInfoListUpdateEvent; 
 | 
        TimeMgr.Instance.OnDayEvent += OnDayEvent; 
 | 
        Display(); 
 | 
    } 
 | 
  
 | 
    protected override void OnPreClose() 
 | 
    { 
 | 
        base.OnPreClose(); 
 | 
        DungeonManager.Instance.UpdateFBInfoChangeEvent -= OnUpdateFBInfoChangeEvent; 
 | 
        AdsManager.Instance.OnAdsInfoListUpdateEvent -= OnAdsInfoListUpdateEvent; 
 | 
        TimeMgr.Instance.OnDayEvent -= OnDayEvent; 
 | 
    } 
 | 
  
 | 
    private void OnUpdateFBInfoChangeEvent(int mapID, bool isADAddCntChange, bool isBuyAddCntChange, bool isItemAddCntChange) 
 | 
    { 
 | 
        int dataMapID = BoneFieldManager.Instance.DataMapID; 
 | 
        if (mapID != dataMapID) 
 | 
            return; 
 | 
        if (!ADAwardConfig.TryGetADIDByADMapID(BoneFieldManager.Instance.DataMapID, out adID) || !ADAwardConfig.HasKey(adID)) 
 | 
            return; 
 | 
        ADAwardConfig aDAwardConfig = ADAwardConfig.Get(adID); 
 | 
        if (isADAddCntChange) 
 | 
        { 
 | 
            DisplayAdsButton(aDAwardConfig); 
 | 
        } 
 | 
        else 
 | 
        { 
 | 
            Display(); 
 | 
        } 
 | 
    } 
 | 
  
 | 
    private void OnAdsInfoListUpdateEvent(int id, int mapId) 
 | 
    { 
 | 
        if (mapId != BoneFieldManager.Instance.DataMapID) 
 | 
            return; 
 | 
        if (!ADAwardConfig.TryGetADIDByADMapID(BoneFieldManager.Instance.DataMapID, out adID) || !ADAwardConfig.HasKey(adID)) 
 | 
            return; 
 | 
        ADAwardConfig aDAwardConfig = ADAwardConfig.Get(adID); 
 | 
        DisplayAdsButton(aDAwardConfig); 
 | 
    } 
 | 
  
 | 
  
 | 
    private void OnDayEvent() 
 | 
    { 
 | 
        Display(); 
 | 
    } 
 | 
  
 | 
    private void OnClickClose() 
 | 
    { 
 | 
        UIManager.Instance.CloseWindow<BoneFieldWin>(); 
 | 
    } 
 | 
  
 | 
    private void OnClickSweep() 
 | 
    { 
 | 
        int dataMapID = BoneFieldManager.Instance.DataMapID; 
 | 
        if (!DungeonManager.Instance.TryGetFBInfoByMapID(dataMapID, out var fbInfo)) 
 | 
            return; 
 | 
        if (!DungeonOpenTimeConfig.HasKey(dataMapID)) 
 | 
            return; 
 | 
        DungeonOpenTimeConfig config = DungeonOpenTimeConfig.Get(dataMapID); 
 | 
  
 | 
        if (showrealRemainSweepCount == showSweepMaxCount) 
 | 
        { 
 | 
            BoneFieldManager.Instance.SendBBeginFBWipeOut(dataMapID, (int)fbInfo.PassLineID); 
 | 
            return; 
 | 
        } 
 | 
  
 | 
        int index = Mathf.Min(Mathf.Max(0, showSweepMaxCount - showrealRemainSweepCount - 1), config.PayMoneyValues.Length - 1); 
 | 
        int payMoneyValue = config.PayMoneyValues[index]; 
 | 
        int payMoneyType = config.PayMoneyType; 
 | 
        ConfirmCancel.MoneyIconToggleConfirmByType(ToggleCheckType.BoneField, payMoneyValue, payMoneyType, 
 | 
                    Language.Get("BoneField11", UIHelper.GetIconNameWithMoneyType(payMoneyType), payMoneyValue), () => 
 | 
                        { 
 | 
                            if (!UIHelper.CheckMoneyCount(payMoneyType, payMoneyValue, 2)) 
 | 
                                return; 
 | 
                            BoneFieldManager.Instance.SendBuyEnterCount(dataMapID); 
 | 
                            BoneFieldManager.Instance.SendBBeginFBWipeOut(dataMapID, (int)fbInfo.PassLineID); 
 | 
                        }); 
 | 
  
 | 
  
 | 
    } 
 | 
  
 | 
    private void OnClickAds() 
 | 
    { 
 | 
        AdsManager.Instance.PlayAds(adID); 
 | 
    } 
 | 
    public void Display() 
 | 
    { 
 | 
        int dataMapID = BoneFieldManager.Instance.DataMapID; 
 | 
        if (!DungeonManager.Instance.TryGetFBInfoByMapID(dataMapID, out var fbInfo)) 
 | 
            return; 
 | 
  
 | 
        int nowPassLineID = BoneFieldManager.Instance.GetNowPassLineID(fbInfo); 
 | 
        isHasNextLineID = BoneFieldManager.Instance.IsHasNextLineID(fbInfo); 
 | 
        DungeonConfig.TryGetDungeonID(dataMapID, nowPassLineID, out int dungeonID); 
 | 
        if (!DungeonConfig.HasKey(dungeonID)) 
 | 
            return; 
 | 
        DungeonConfig dungeonConfig = DungeonConfig.Get(dungeonID); 
 | 
        int[] lineupIDList = dungeonConfig.LineupIDList; 
 | 
        if (lineupIDList.IsNullOrEmpty()) 
 | 
            return; 
 | 
        int LineupID = lineupIDList[0]; 
 | 
        if (!NPCLineupConfig.HasKey(LineupID)) 
 | 
            return; 
 | 
        NPCLineupConfig lineupConfig = NPCLineupConfig.Get(LineupID); 
 | 
        int bossId = lineupConfig.BossID; 
 | 
        if (bossId == 0 || !NPCConfig.HasKey(bossId)) 
 | 
            return; 
 | 
        NPCConfig nPCConfig = NPCConfig.Get(bossId); 
 | 
        if (!ADAwardConfig.TryGetADIDByADMapID(dataMapID, out adID) || !ADAwardConfig.HasKey(adID)) 
 | 
            return; 
 | 
        ADAwardConfig aDAwardConfig = ADAwardConfig.Get(adID); 
 | 
  
 | 
  
 | 
        DisplayFBInfo(nPCConfig, dungeonConfig, nowPassLineID); 
 | 
        DisplayChallengeButton(dungeonConfig, fbInfo); 
 | 
        DisplaySweepButton(dungeonConfig); 
 | 
        DisplayAdsButton(aDAwardConfig); 
 | 
        DisplaySkillWordsList(lineupConfig); 
 | 
        DisplayItemCellList(challengeItemCells1, dungeonConfig.PassAwardList); 
 | 
        DisplayItemCellList(challengeItemCells2, dungeonConfig.PassAwardList); 
 | 
  
 | 
        if (fbInfo.PassLineID > 0) 
 | 
        { 
 | 
            DungeonConfig.TryGetDungeonID(dataMapID, (int)fbInfo.PassLineID, out int sweepDungeonID); 
 | 
            if (!DungeonConfig.HasKey(dungeonID)) 
 | 
                return; 
 | 
            DungeonConfig sweepDungeonConfig = DungeonConfig.Get(sweepDungeonID); 
 | 
            DisplayItemCellList(sweepItemCells, sweepDungeonConfig.SweepAwardList); 
 | 
        } 
 | 
  
 | 
    } 
 | 
  
 | 
    public void DisplayFBInfo(NPCConfig nPCConfig, DungeonConfig dungeonConfig, int nowPassLineID) 
 | 
    { 
 | 
        imgMaxLineID.SetActive(!isHasNextLineID); 
 | 
        transChallengeItemCells.SetActive(isHasNextLineID); 
 | 
        txtBossName.text = nPCConfig.NPCName; 
 | 
        txtDifficulty.text = nowPassLineID.ToString(); 
 | 
        txtFightPower.text = UIHelper.ReplaceLargeArtNum(dungeonConfig.FightPower); 
 | 
    } 
 | 
  
 | 
    public void DisplayChallengeButton(DungeonConfig dungeonConfig, FBInfo fBInfo) 
 | 
    { 
 | 
        transNoChallenge.SetActive(fBInfo.PassLineID <= 0); 
 | 
        transHasChallenge.SetActive(fBInfo.PassLineID > 0); 
 | 
        btnChallenge1.Display(dungeonConfig.LVLimitMin, isHasNextLineID, dungeonConfig.FightPower); 
 | 
        btnChallenge2.Display(dungeonConfig.LVLimitMin, isHasNextLineID, dungeonConfig.FightPower); 
 | 
    } 
 | 
  
 | 
  
 | 
  
 | 
    public void DisplaySweepButton(DungeonConfig dungeonConfig) 
 | 
    { 
 | 
        if (!BoneFieldManager.Instance.TryGetShowSweepCount(out showSweepMaxCount, out showrealRemainSweepCount)) 
 | 
            return; 
 | 
        bool isSweepCountOk = showrealRemainSweepCount > 0; 
 | 
        imgSweepNo.SetActive(!isSweepCountOk); 
 | 
        btnSweep.interactable = isSweepCountOk; 
 | 
        long myFightPower = PlayerDatas.Instance.baseData.FightPower; 
 | 
        imgSweepRed.SetActive(isSweepCountOk && myFightPower < dungeonConfig.FightPower); 
 | 
        txtFirstFree.SetActive(showSweepMaxCount == showrealRemainSweepCount); 
 | 
        txtTodaySweepCount.SetActive(showSweepMaxCount > showrealRemainSweepCount); 
 | 
        txtTodaySweepCount.text = UIHelper.AppendColor(isSweepCountOk ? TextColType.Green : TextColType.Red, Language.Get("BoneField08", showrealRemainSweepCount, showSweepMaxCount)); 
 | 
    } 
 | 
  
 | 
    public void DisplayAdsButton(ADAwardConfig aDAwardConfig) 
 | 
    { 
 | 
        int adsCnt = AdsManager.Instance.GetADCntByADID(adID); 
 | 
        bool isShowAds = adsCnt < aDAwardConfig.ADCntMax; 
 | 
        int remainAdsCount = aDAwardConfig.ADCntMax - adsCnt; 
 | 
        btnAds.SetActive(isShowAds); 
 | 
        txtTodayAdsCount.text = UIHelper.AppendColor(isShowAds ? TextColType.Green : TextColType.Red, Language.Get("BoneField09", remainAdsCount, aDAwardConfig.ADCntMax)); ; 
 | 
    } 
 | 
  
 | 
    public void DisplayItemCellList(List<ItemCell> itemCells, int[][] items) 
 | 
    { 
 | 
        if (itemCells.IsNullOrEmpty() || items.IsNullOrEmpty()) 
 | 
            return; 
 | 
        for (int i = 0; i < itemCells.Count; i++) 
 | 
        { 
 | 
            if (i < items.Length) 
 | 
            { 
 | 
                int index = i; 
 | 
                itemCells[i].SetActive(true); 
 | 
                itemCells[i].Init(new ItemCellModel(items[i][0], true, items[i][1])); 
 | 
                itemCells[i].button.SetListener(() => 
 | 
                { 
 | 
                    ItemTipUtility.Show(items[index][0], true); 
 | 
                }); 
 | 
            } 
 | 
            else 
 | 
            { 
 | 
                itemCells[i].SetActive(false); 
 | 
            } 
 | 
        } 
 | 
    } 
 | 
  
 | 
    public void DisplaySkillWordsList(NPCLineupConfig lineUPConfig) 
 | 
    { 
 | 
        if (skillWords.IsNullOrEmpty()) 
 | 
            return; 
 | 
        for (int i = 0; i < skillWords.Count; i++) 
 | 
        { 
 | 
            if (i < lineUPConfig.SkillIDExList.Length) 
 | 
            { 
 | 
                skillWords[i].SetActive(true); 
 | 
                int skillID = lineUPConfig.SkillIDExList[i]; 
 | 
                skillWords[i].Init(skillID, () => 
 | 
                { 
 | 
                    SmallTipWin.showText = Language.Get("SmallTipFomat", SkillConfig.Get(skillID)?.SkillName, SkillConfig.Get(skillID)?.Description); 
 | 
                    SmallTipWin.worldPos = CameraManager.uiCamera.ScreenToWorldPoint(Input.mousePosition); 
 | 
                    SmallTipWin.isDownShow = true; 
 | 
                    UIManager.Instance.OpenWindow<SmallTipWin>(); 
 | 
                }); 
 | 
            } 
 | 
            else 
 | 
            { 
 | 
                skillWords[i].SetActive(false); 
 | 
            } 
 | 
        } 
 | 
    } 
 | 
  
 | 
  
 | 
} 
 |