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;
|
}
|
}
|
}
|
|