using System.Collections.Generic; 
 | 
using LitJson; 
 | 
public class BoneFieldManager : GameSystemManager<BoneFieldManager> 
 | 
{ 
 | 
  
 | 
    public readonly int DataMapID = 30010;  // 白骨盈野(战锤秘境) 
 | 
    public readonly int MinStartLineID = 1;    // funcLineID从1开始 
 | 
    public readonly int funcId = 9;  //功能ID  
 | 
    public Redpoint parentRedpoint = new Redpoint(MainRedDot.MainChallengeRedpoint, MainRedDot.BoneFieldRepoint); 
 | 
    public override void Init() 
 | 
    { 
 | 
        DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent += OnBeforePlayerDataInitializeEvent; 
 | 
        DungeonManager.Instance.UpdateFBInfoChangeEvent += OnUpdateFBInfoChangeEvent; 
 | 
        AdsManager.Instance.OnAdsInfoListUpdateEvent += OnAdsInfoListUpdateEvent; 
 | 
        FuncOpen.Instance.OnFuncStateChangeEvent += OnFuncStateChangeEvent; 
 | 
        TimeMgr.Instance.OnDayEvent += OnDayEvent; 
 | 
    } 
 | 
  
 | 
    public override void Release() 
 | 
    { 
 | 
        DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent -= OnBeforePlayerDataInitializeEvent; 
 | 
        DungeonManager.Instance.UpdateFBInfoChangeEvent -= OnUpdateFBInfoChangeEvent; 
 | 
        AdsManager.Instance.OnAdsInfoListUpdateEvent -= OnAdsInfoListUpdateEvent; 
 | 
        FuncOpen.Instance.OnFuncStateChangeEvent -= OnFuncStateChangeEvent; 
 | 
        TimeMgr.Instance.OnDayEvent -= OnDayEvent; 
 | 
    } 
 | 
  
 | 
    private void OnFuncStateChangeEvent(int obj) 
 | 
    { 
 | 
        if (obj != funcId) 
 | 
            return; 
 | 
        UpdateRedPoint(); 
 | 
    } 
 | 
  
 | 
    private void OnDayEvent() 
 | 
    { 
 | 
        UpdateRedPoint(); 
 | 
    } 
 | 
  
 | 
    private void OnUpdateFBInfoChangeEvent(int mapID, bool isADAddCntChange, bool isBuyAddCntChange, bool isItemAddCntChange) 
 | 
    { 
 | 
        int dataMapID = DataMapID; 
 | 
        if (mapID != dataMapID) 
 | 
            return; 
 | 
        if (isADAddCntChange) 
 | 
            return; 
 | 
        UpdateRedPoint(); 
 | 
    } 
 | 
  
 | 
    private void OnAdsInfoListUpdateEvent(int id, int mapId) 
 | 
    { 
 | 
        if (mapId != DataMapID) 
 | 
            return; 
 | 
        UpdateRedPoint(); 
 | 
    } 
 | 
  
 | 
    public void OnBeforePlayerDataInitializeEvent() 
 | 
    { 
 | 
        //mailDataDict.Clear(); 
 | 
    } 
 | 
  
 | 
    public void UpdateRedPoint() 
 | 
    { 
 | 
        parentRedpoint.state = RedPointState.None; 
 | 
        if (!FuncOpen.Instance.IsFuncOpen(funcId)) 
 | 
            return; 
 | 
        if (!DungeonManager.Instance.TryGetFBInfoByMapID(DataMapID, out var fbInfo)) 
 | 
            return; 
 | 
        bool isHasNextLineID = IsHasNextLineID(fbInfo); 
 | 
        int nowPassLineID = GetNowPassLineID(fbInfo); 
 | 
        DungeonConfig.TryGetDungeonID(DataMapID, nowPassLineID, out int dungeonID); 
 | 
        if (!DungeonConfig.HasKey(dungeonID)) 
 | 
            return; 
 | 
        DungeonConfig dungeonConfig = DungeonConfig.Get(dungeonID); 
 | 
        bool isLvOk = PlayerDatas.Instance.baseData.LV >= dungeonConfig.LVLimitMin; 
 | 
        long myFightPower = PlayerDatas.Instance.baseData.FightPower; 
 | 
        if (myFightPower >= dungeonConfig.FightPower) 
 | 
        { 
 | 
            if (isLvOk && isHasNextLineID) 
 | 
            { 
 | 
                parentRedpoint.state = RedPointState.Simple; 
 | 
            } 
 | 
        } 
 | 
        else 
 | 
        { 
 | 
            if (TryGetShowSweepCount(out int showSweepMaxCount, out int showrealRemainSweepCount)) 
 | 
            { 
 | 
                bool isSweepCountOk = showrealRemainSweepCount > 0; 
 | 
                if (isSweepCountOk) 
 | 
                { 
 | 
                    parentRedpoint.state = RedPointState.Simple; 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
    } 
 | 
  
 | 
    public bool IsHasNextLineID(FBInfo fBInfo) 
 | 
    { 
 | 
        int passLineID = (int)fBInfo.PassLineID; 
 | 
        int nextPassLineID = passLineID + 1; 
 | 
        return DungeonConfig.TryGetDungeonID(DataMapID, nextPassLineID, out int dungeonID); 
 | 
    } 
 | 
  
 | 
    public int GetNowPassLineID(FBInfo fBInfo) 
 | 
    { 
 | 
        int passLineID = (int)fBInfo.PassLineID; 
 | 
        if (passLineID < MinStartLineID) 
 | 
            return MinStartLineID; 
 | 
        int nextPassLineID = passLineID + 1; 
 | 
        if (!DungeonConfig.TryGetDungeonID(DataMapID, nextPassLineID, out int nextDungeonID)) 
 | 
            return passLineID; 
 | 
        return nextPassLineID; 
 | 
    } 
 | 
  
 | 
    public bool TryGetShowSweepCount(out int showSweepMaxCount, out int showrealRemainSweepCount) 
 | 
    { 
 | 
        showSweepMaxCount = 0; 
 | 
        showrealRemainSweepCount = 0; 
 | 
        int dataMapID = BoneFieldManager.Instance.DataMapID; 
 | 
        if (!DungeonOpenTimeConfig.HasKey(dataMapID)) 
 | 
            return false; 
 | 
        if (!DungeonManager.Instance.TryGetFBInfoByMapID(dataMapID, out FBInfo fbInfo)) 
 | 
            return false; 
 | 
        DungeonOpenTimeConfig dungeonOpenTimeConfig = DungeonOpenTimeConfig.Get(dataMapID); 
 | 
  
 | 
        int baseCount = dungeonOpenTimeConfig.DayTimes + dungeonOpenTimeConfig.PayCntMax; 
 | 
        int realMaxCount = baseCount + fbInfo.ADAddCnt + fbInfo.BuyAddCnt + fbInfo.ItemAddCnt; 
 | 
        int realRemainSweepCount = realMaxCount - fbInfo.EnterCnt; 
 | 
  
 | 
        showSweepMaxCount = realMaxCount - fbInfo.ADAddCnt - fbInfo.BuyAddCnt; 
 | 
        showrealRemainSweepCount = realRemainSweepCount - fbInfo.BuyAddCnt; 
 | 
        return true; 
 | 
    } 
 | 
  
 | 
    public void SendTurnFight(int mapID, int funcLineID) 
 | 
    { 
 | 
        CB410_tagCMTurnFight pack = new CB410_tagCMTurnFight(); 
 | 
        pack.MapID = (uint)mapID; 
 | 
        pack.FuncLineID = (uint)funcLineID; 
 | 
        GameNetSystem.Instance.SendInfo(pack); 
 | 
    } 
 | 
  
 | 
    public void SendBBeginFBWipeOut(int mapID, int lineID) 
 | 
    { 
 | 
        CA505_tagCMBeginFBWipeOut pack = new CA505_tagCMBeginFBWipeOut(); 
 | 
        pack.MapID = (uint)mapID; 
 | 
        pack.LineID = (ushort)lineID; 
 | 
        pack.Cnt = 1; 
 | 
        GameNetSystem.Instance.SendInfo(pack); 
 | 
    } 
 | 
  
 | 
  
 | 
  
 | 
    public void SendBuyEnterCount(int FBID) 
 | 
    { 
 | 
        var pack = new CA575_tagCMBuyEnterCount(); 
 | 
        pack.FBID = (uint)FBID;       // 副本ID 
 | 
        GameNetSystem.Instance.SendInfo(pack); 
 | 
    } 
 | 
  
 | 
    public void UpdateFBEnd(H0320_tagFBEnd vNetData) 
 | 
    { 
 | 
        if (vNetData.Msg == null) 
 | 
            return; 
 | 
        ChallengeResultData result = ChallengeResultData.FromJson(vNetData.Msg); 
 | 
        if (result == null || result.itemInfo.IsNullOrEmpty()) 
 | 
            return; 
 | 
        if (result.dataMapID != DataMapID) 
 | 
            return; 
 | 
        List<Item> showItems = new List<Item>(); 
 | 
        foreach (var item in result.itemInfo) 
 | 
        { 
 | 
            Item tempItem = new Item(item.ItemID, item.Count); 
 | 
            showItems.Add(tempItem); 
 | 
        } 
 | 
        ItemLogicUtility.Instance.ShowGetItem(showItems); 
 | 
    } 
 | 
  
 | 
    public class ItemInfo 
 | 
    { 
 | 
        public int ItemID { get; set; } 
 | 
        public int Count { get; set; } 
 | 
    } 
 | 
  
 | 
    public class ChallengeResultData 
 | 
    { 
 | 
        public int dataMapID { get; set; } 
 | 
        public List<ItemInfo> itemInfo { get; set; } 
 | 
        public int lineID { get; set; } 
 | 
        public int isPass { get; set; } 
 | 
        public int isSweep { get; set; } 
 | 
  
 | 
        public static ChallengeResultData FromJson(string json) 
 | 
        { 
 | 
            return JsonMapper.ToObject<ChallengeResultData>(json); 
 | 
        } 
 | 
    } 
 | 
} 
 |