using System.Collections; 
 | 
using System.Collections.Generic; 
 | 
using UnityEngine; 
 | 
using System; 
 | 
  
 | 
  
 | 
public class BlessLVManager : GameSystemManager<BlessLVManager> 
 | 
{ 
 | 
    public int m_TreeLV { get; private set; }    // 当前仙树等级 
 | 
    public int m_LVUPState { get; private set; } // 0-非升级中;1-升级中 
 | 
    public int m_LVUPRemainTime { get; private set; } // 升级剩余时间,秒;当升级中且倒计时为0时可发送B223执行升级包进行升级 
 | 
    public int m_FreeTimeCnt { get; private set; }    // 今日已免费减时次数 
 | 
    public int m_FreeTimeLast { get; private set; } // 上次免费减时时间戳 
 | 
    public event Action OnBlessLVUpdateEvent; 
 | 
    int m_LVPackTime; //收包时间用于计算剩余时间m_LVUPRemainTime 
 | 
  
 | 
    public int upgradeTreeMoneyType; //升级仙树消耗的货币类型 
 | 
    public int timeUpTreeItemID; //加速仙树升级的道具ID 
 | 
    public int timeUpTreeItemSubTime; //减少仙树升级时间的道具减少的时间 
 | 
    public int dayFreeMaxTimes; //每日免费升级次数 
 | 
    public int freeTimeCD; //免费减少时间的冷却CD 分 
 | 
    public int freeSubTime; //免费减少的时间 分 
 | 
  
 | 
    public int lastTreeLV; //上一次树的等级 用于打开界面的时候播放下升级特效 
 | 
  
 | 
    public override void Init() 
 | 
    { 
 | 
        m_TreeLV = 0; 
 | 
        m_LVUPState = 0; 
 | 
        m_LVUPRemainTime = 0; 
 | 
        m_LVPackTime = 0; 
 | 
        DTC0403_tagPlayerLoginLoadOK.playerLoginOkEvent += OnPlayerLoginOK; 
 | 
        GlobalTimeEvent.Instance.fiveSecondEvent += OnTimeEvent; 
 | 
  
 | 
        ParseConfig(); 
 | 
    } 
 | 
  
 | 
    public override void Release() 
 | 
    { 
 | 
        DTC0403_tagPlayerLoginLoadOK.playerLoginOkEvent -= OnPlayerLoginOK; 
 | 
        GlobalTimeEvent.Instance.fiveSecondEvent -= OnTimeEvent; 
 | 
    } 
 | 
  
 | 
    void OnPlayerLoginOK() 
 | 
    { 
 | 
        lastTreeLV = 0; 
 | 
        AutoUpgrade(); 
 | 
        UpdateTreeRedpoint(); 
 | 
    } 
 | 
  
 | 
  
 | 
    void ParseConfig() 
 | 
    { 
 | 
        var config = FuncConfigConfig.Get("TreeLVUP"); 
 | 
        upgradeTreeMoneyType = int.Parse(config.Numerical1); 
 | 
        var arr = config.Numerical2.Split('|'); 
 | 
        timeUpTreeItemID = int.Parse(arr[0]); 
 | 
        timeUpTreeItemSubTime = int.Parse(arr[1]); 
 | 
        dayFreeMaxTimes = int.Parse(config.Numerical3); 
 | 
        freeTimeCD = int.Parse(config.Numerical4); 
 | 
        freeSubTime = int.Parse(config.Numerical5); 
 | 
    } 
 | 
  
 | 
    public void UpdateBlessLVInfo(HB121_tagMCTreeInfo netPack) 
 | 
    { 
 | 
        m_TreeLV = netPack.TreeLV; 
 | 
        m_LVUPState = netPack.LVUPState; 
 | 
        m_LVUPRemainTime = (int)netPack.LVUPRemainTime; 
 | 
        m_FreeTimeCnt = netPack.FreeTimeCnt; 
 | 
        m_FreeTimeLast = (int)netPack.FreeTimeLast; 
 | 
        m_LVPackTime = TimeUtility.AllSeconds; 
 | 
        if (lastTreeLV == 0) 
 | 
        { 
 | 
            lastTreeLV = m_TreeLV; 
 | 
        } 
 | 
        OnBlessLVUpdateEvent?.Invoke(); 
 | 
        UpdateTreeRedpoint(); 
 | 
        AutoUpgrade(); 
 | 
    } 
 | 
  
 | 
    public int GetLVUPRemainTime() 
 | 
    { 
 | 
        if (m_LVUPState == 0) 
 | 
            return 0; 
 | 
        return m_LVUPRemainTime - (TimeUtility.AllSeconds - m_LVPackTime); 
 | 
    } 
 | 
  
 | 
    public int GetFreeRemainTime() 
 | 
    { 
 | 
        if (m_LVUPState == 0) 
 | 
            return 0; 
 | 
        return m_FreeTimeLast + freeTimeCD * 60 - TimeUtility.AllSeconds; 
 | 
    } 
 | 
  
 | 
    Redpoint redpointTree = new Redpoint(MainRedDot.BlessLVRedpoint); 
 | 
    Redpoint redpointTreeItem = new Redpoint(MainRedDot.BlessLVRedpoint, MainRedDot.BlessLVRedpoint * 10); 
 | 
    Redpoint redpointTreeFree = new Redpoint(MainRedDot.BlessLVRedpoint, MainRedDot.BlessLVRedpoint * 10 + 1); 
 | 
    void UpdateTreeRedpoint() 
 | 
    { 
 | 
        redpointTreeFree.state = RedPointState.None; 
 | 
        redpointTreeItem.state = RedPointState.None; 
 | 
        redpointTree.state = RedPointState.None; 
 | 
        var config = TreeLVConfig.Get(m_TreeLV); 
 | 
        if (config == null) return; 
 | 
        //非升级中检查升级材料 
 | 
        if (m_LVUPState == 0) 
 | 
        { 
 | 
  
 | 
            if (UIHelper.GetMoneyCnt(upgradeTreeMoneyType) >= config.LVUPNeedMoney) 
 | 
            { 
 | 
                redpointTree.state = RedPointState.Simple; 
 | 
            } 
 | 
        } 
 | 
        else 
 | 
        { 
 | 
            //检查时间道具 和 免费的时间 
 | 
            if (PackManager.Instance.GetSinglePack(PackType.Item).HasItem(timeUpTreeItemID)) 
 | 
            { 
 | 
                redpointTreeItem.state = RedPointState.Simple; 
 | 
                return; 
 | 
            } 
 | 
            if (m_FreeTimeCnt > 0 && GetFreeRemainTime() <= 0) 
 | 
            { 
 | 
                redpointTreeFree.state = RedPointState.Simple; 
 | 
                return; 
 | 
            } 
 | 
  
 | 
  
 | 
        } 
 | 
    } 
 | 
  
 | 
    public void AutoUpgrade() 
 | 
    { 
 | 
        //时间结束自动通知服务端升级,或者打开界面时,或者上线 都做检查 
 | 
        if (m_LVUPState == 0) 
 | 
        { 
 | 
            return; 
 | 
        } 
 | 
        if (GetLVUPRemainTime() > 0) 
 | 
        { 
 | 
            return; 
 | 
        } 
 | 
        var pack = new CB223_tagCMTreeLVUP(); 
 | 
        pack.Type = 1; 
 | 
        GameNetSystem.Instance.SendInfo(pack); 
 | 
    } 
 | 
  
 | 
    void OnTimeEvent() 
 | 
    { 
 | 
        //升级中检查 倒计时结束;非升级中检查免费次数时间 红点 
 | 
        if (m_LVUPState == 1) 
 | 
        { 
 | 
            //升级 
 | 
            AutoUpgrade(); 
 | 
        } 
 | 
  
 | 
        UpdateTreeRedpoint(); 
 | 
  
 | 
    } 
 | 
  
 | 
  
 | 
    //装备品质的起始表现,最小1 
 | 
    public int GetStartEquipQuality() 
 | 
    { 
 | 
        var rateList = TreeLVConfig.Get(m_TreeLV).EquipColorRateList; 
 | 
        for (int i = 0; i < rateList.Length; i++) 
 | 
        { 
 | 
            if (rateList[i] != 0) 
 | 
                return i + 1; 
 | 
        } 
 | 
        return 1; 
 | 
    } 
 | 
  
 | 
  
 | 
} 
 |