using System.Collections; using System.Collections.Generic; using UnityEngine; namespace Snxxz.UI { public class DungeonNuwaModel : Model, IBeforePlayerDataInitialize, IPlayerLoginOk { Dictionary> floorRewardDict = new Dictionary>(); public Dictionary floorFightPowerDict { get; private set; } public int floorCount { get; private set; } public const int DATAMAPID = 51010; DungeonModel dungeonModel { get { return ModelCenter.Instance.GetModel(); } } public override void Init() { ParseConfig(); } public void OnBeforePlayerDataInitialize() { } public void OnPlayerLoginOk() { } public override void UnInit() { } void ParseConfig() { floorFightPowerDict = new Dictionary(); 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(json[floorKey].ToJson()); if (rewardArray != null) { List items = new List(); 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 items) { return floorRewardDict.TryGetValue(floor, out items); } public bool IsNewComparePreFloor(int floor, int itemId) { List 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 < 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 >= floorFightPowerDict[1]; } if (fightPoint < 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; } } }