| using System.Collections;  | 
| using System.Collections.Generic;  | 
| using UnityEngine;  | 
| namespace vnxbqy.UI  | 
| {  | 
|       | 
|     public class DungeonNuwaModel : Model, IBeforePlayerDataInitialize, IPlayerLoginOk  | 
|     {  | 
|         Dictionary<int, List<Item>> floorRewardDict = new Dictionary<int, List<Item>>();  | 
|   | 
|         public Dictionary<int, int> floorFightPowerDict { get; private set; }  | 
|   | 
|         public int floorCount { get; private set; }  | 
|   | 
|         public const int DATAMAPID = 51010;  | 
|   | 
|         DungeonModel dungeonModel { get { return ModelCenter.Instance.GetModel<DungeonModel>(); } }  | 
|   | 
|         public override void Init()  | 
|         {  | 
|             ParseConfig();  | 
|         }  | 
|   | 
|         public void OnBeforePlayerDataInitialize()  | 
|         {  | 
|   | 
|         }  | 
|   | 
|         public void OnPlayerLoginOk()  | 
|         {  | 
|   | 
|         }  | 
|   | 
|         public override void UnInit()  | 
|         {  | 
|   | 
|         }  | 
|   | 
|         void ParseConfig()  | 
|         {  | 
|             floorFightPowerDict = new Dictionary<int, int>();  | 
|             var configs = DungeonHelpBattleConfig.GetValues();  | 
|             foreach (var config in configs)  | 
|             {  | 
|                 if (config.DataMapID == DATAMAPID)  | 
|                 {  | 
|                     floorFightPowerDict.Add(config.LineID + 1, config.RobotFightPower);  | 
|                 }  | 
|             }  | 
|             floorFightPowerDict[1] = 0;  | 
|   | 
|             floorCount = floorFightPowerDict.Count;  | 
|   | 
|             var funcConfig = FuncConfigConfig.Get("WHFloorChoose");  | 
|             var json = LitJson.JsonMapper.ToObject(funcConfig.Numerical2);  | 
|             foreach (var floorKey in json.Keys)  | 
|             {  | 
|                 var floor = int.Parse(floorKey);  | 
|                 var rewardArray = LitJson.JsonMapper.ToObject<int[][]>(json[floorKey].ToJson());  | 
|                 if (rewardArray != null)  | 
|                 {  | 
|                     List<Item> items = new List<Item>();  | 
|                     floorRewardDict.Add(floor, items);  | 
|                     for (int i = 0; i < rewardArray.Length; i++)  | 
|                     {  | 
|                         items.Add(new Item()  | 
|                         {  | 
|                             id = rewardArray[i][0],  | 
|                             count = rewardArray[i][1],  | 
|                         });  | 
|                     }  | 
|                 }  | 
|             }  | 
|         }  | 
|   | 
|         public bool TryGetFloorReward(int floor, out List<Item> items)  | 
|         {  | 
|             return floorRewardDict.TryGetValue(floor, out items);  | 
|         }  | 
|   | 
|         public bool IsNewComparePreFloor(int floor, int itemId)  | 
|         {  | 
|             List<Item> items;  | 
|             if (TryGetFloorReward(floor - 1, out items))  | 
|             {  | 
|                 return items.FindIndex((x) =>  | 
|                 {  | 
|                     return x.id == itemId;  | 
|                 }) == -1;  | 
|             }  | 
|             return false;  | 
|         }  | 
|   | 
|         public int GetChallengeFloor()  | 
|         {  | 
|             DungeonRecord dungeonRecord;  | 
|             if (!dungeonModel.TryGetRecord(DATAMAPID, out dungeonRecord)  | 
|                 || dungeonRecord.lineGrades == null)  | 
|             {  | 
|                 return 1;  | 
|             }  | 
|   | 
|             var lineDatas = dungeonRecord.lineGrades;  | 
|   | 
|             var floor = 1;  | 
|             var fightPoint = PlayerDatas.Instance.baseData.FightPoint;  | 
|   | 
|             for (int i = 2; i <= floorCount; i++)  | 
|             {  | 
|                 var line = i - 1;  | 
|                 if (!lineDatas.ContainsKey(line - 1)  | 
|                     || lineDatas[line - 1] < 5)  | 
|                 {  | 
|                     break;  | 
|                 }  | 
|                 if (fightPoint < (ulong)floorFightPowerDict[i])  | 
|                 {  | 
|                     break;  | 
|                 }  | 
|                 floor = i;  | 
|             }  | 
|             return Mathf.Min(floor, floorCount);  | 
|         }  | 
|   | 
|         public bool SatisfyChallengeFloor(int floor)  | 
|         {  | 
|             if (floor > floorCount)  | 
|             {  | 
|                 return false;  | 
|             }  | 
|   | 
|             var fightPoint = PlayerDatas.Instance.baseData.FightPoint;  | 
|             if (floor == 1)  | 
|             {  | 
|                 return fightPoint >= (ulong)floorFightPowerDict[1];  | 
|             }  | 
|   | 
|             if (fightPoint < (ulong)floorFightPowerDict[floor])  | 
|             {  | 
|                 return false;  | 
|             }  | 
|   | 
|             var line = floor - 1;  | 
|             DungeonRecord dungeonRecord;  | 
|             if (dungeonModel.TryGetRecord(DATAMAPID, out dungeonRecord))  | 
|             {  | 
|                 if (dungeonRecord.lineGrades != null  | 
|                     && dungeonRecord.lineGrades.ContainsKey(line - 1)  | 
|                     && dungeonRecord.lineGrades[line - 1] == 5)  | 
|                 {  | 
|                     return true;  | 
|                 }  | 
|             }  | 
|   | 
|             return false;  | 
|         }  | 
|     }  | 
| }  | 
|   |