using System.Collections;
|
using System.Collections.Generic;
|
using UnityEngine;
|
using System;
|
using TableConfig;
|
|
namespace Snxxz.UI
|
{
|
public class ElderGodAreaModel : Model, IMapInitOk
|
{
|
|
public const int ELDERGODAREA_MAPID = 31150;
|
|
int m_SelectedBoss = 0;
|
public int selectedBoss {
|
get {
|
return this.m_SelectedBoss;
|
}
|
set {
|
if (this.m_SelectedBoss != value)
|
{
|
this.m_SelectedBoss = value;
|
if (bossSelectedEvent != null)
|
{
|
bossSelectedEvent(value);
|
}
|
}
|
}
|
}
|
|
int baseTimes = 0;
|
public int totalTimes {
|
get {
|
var times = ModelCenter.Instance.GetModel<VipModel>().GetVipPrivilegeCnt(VipPrivilegeType.ForbiddenArea);
|
return times + baseTimes;
|
}
|
}
|
|
public event Action<int> bossSelectedEvent;
|
public event Action<int> surplusTimesChangeEvent;
|
|
List<int> sortedBossIds = new List<int>();
|
Dictionary<int, ElderGodBossData> elderGodBosses = new Dictionary<int, ElderGodBossData>();
|
Dictionary<int, int> npcAngers = new Dictionary<int, int>();
|
|
DungeonModel dungeonModel;
|
FindPreciousModel findPreciousModel;
|
|
public override void Init()
|
{
|
dungeonModel = ModelCenter.Instance.GetModel<DungeonModel>();
|
findPreciousModel = ModelCenter.Instance.GetModel<FindPreciousModel>();
|
ParseConfig();
|
baseTimes = Config.Instance.Get<DungeonOpenTimeConfig>(31150).DayTimes;
|
}
|
|
public override void UnInit()
|
{
|
}
|
|
public bool TryGetBossData(int _bossId, out ElderGodBossData _data)
|
{
|
return elderGodBosses.TryGetValue(_bossId, out _data);
|
}
|
|
public bool IsElderGodAreaNPC(int _npcId)
|
{
|
return npcAngers.ContainsKey(_npcId);
|
}
|
|
public int GetElderGodAreaNPCAnger(int _npcId)
|
{
|
if (npcAngers.ContainsKey(_npcId))
|
{
|
return npcAngers[_npcId];
|
}
|
else
|
{
|
return 0;
|
}
|
}
|
|
public bool IsBossUnLocked(int _bossId)
|
{
|
var playerLevel = PlayerDatas.Instance.baseData.LV;
|
return elderGodBosses.ContainsKey(_bossId) && playerLevel >= elderGodBosses[_bossId].unLockLevel;
|
}
|
|
public List<int> GetElderGodBosses()
|
{
|
return new List<int>(sortedBossIds);
|
}
|
|
public int GetLatestUnLockBoss()
|
{
|
for (int i = 0; i < sortedBossIds.Count; i++)
|
{
|
var bossId = sortedBossIds[i];
|
if (findPreciousModel.IsBossAlive(bossId))
|
{
|
return bossId;
|
}
|
}
|
|
return sortedBossIds[0];
|
}
|
|
private void ParseConfig()
|
{
|
var bossConfigs = Config.Instance.GetAllValues<ElderGodAreaConfig>();
|
for (int i = 0; i < bossConfigs.Count; i++)
|
{
|
var config = bossConfigs[i];
|
if (config.MonsterType == 2)
|
{
|
elderGodBosses[config.NPCID] = new ElderGodBossData(config.NPCID);
|
}
|
|
npcAngers[config.NPCID] = config.MonsterAnger;
|
}
|
|
sortedBossIds.AddRange(elderGodBosses.Keys);
|
sortedBossIds.Sort(ElderGodBossData.LevelCompare);
|
}
|
|
public void OnMapInitOk()
|
{
|
var dataMapId = dungeonModel.GetDataMapIdByMapId(PlayerDatas.Instance.baseData.MapID);
|
if (dataMapId == ELDERGODAREA_MAPID)
|
{
|
MapTransferUtility.Instance.MoveToNPC(selectedBoss);
|
}
|
}
|
}
|
|
public class ElderGodBossData
|
{
|
public int id { get; private set; }
|
public int unLockLevel { get; set; }
|
|
public ElderGodBossData(int _id)
|
{
|
this.id = _id;
|
}
|
|
public static int LevelCompare(int _lhs, int _rhs)
|
{
|
var configA = Config.Instance.Get<NPCConfig>(_lhs);
|
var configB = Config.Instance.Get<NPCConfig>(_rhs);
|
|
return configA.NPCLV < configB.NPCLV ? -1 : 1;
|
}
|
|
}
|
|
}
|