| 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; | 
|             } | 
|             if (m_FreeTimeCnt < dayFreeMaxTimes && GetFreeRemainTime() <= 0) | 
|             { | 
|                 redpointTreeFree.state = RedPointState.Simple; | 
|             } | 
|   | 
|   | 
|         } | 
|     } | 
|   | 
|     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; | 
|     } | 
|   | 
|   | 
| } |