using System.Collections;
|
using System.Collections.Generic;
|
using UnityEngine;
|
using System;
|
|
namespace Snxxz.UI
|
{
|
[XLua.LuaCallCSharp]
|
public class WorldBossModel : Model, IBeforePlayerDataInitialize, IPlayerLoginOk
|
{
|
public const int WORLDBOSS_REDPOINT = 76001;
|
|
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);
|
}
|
}
|
}
|
}
|
|
public event Action<int> bossSelectedEvent;
|
public event Action bossWearyValueChangeEvent;
|
|
int m_WearyValue = 0;
|
public int wearyValue {
|
get { return m_WearyValue; }
|
set {
|
m_WearyValue = value;
|
UpdateRedpoint();
|
if (bossWearyValueChangeEvent != null)
|
{
|
bossWearyValueChangeEvent();
|
}
|
}
|
}
|
|
int m_ExtraBossWearyValue = 0;
|
public int extraBossWearyValue {
|
get { return m_ExtraBossWearyValue; }
|
set {
|
m_ExtraBossWearyValue = value;
|
if (bossWearyValueChangeEvent != null)
|
{
|
bossWearyValueChangeEvent();
|
}
|
}
|
}
|
|
public bool funcOpenClickSymbol
|
{
|
get { return LocalSave.GetBool("WorldBossClickSymbol_" + PlayerDatas.Instance.PlayerId); }
|
set
|
{
|
LocalSave.SetBool("WorldBossClickSymbol_" + PlayerDatas.Instance.PlayerId, value);
|
}
|
}
|
|
bool isServerPrepare = false;
|
|
List<int> sortedBossIds = new List<int>();
|
Dictionary<int, WorldBossData> worldBosses = new Dictionary<int, WorldBossData>();
|
|
public Redpoint worldBossRedPoint = new Redpoint(FindPreciousModel.FINDPRECIOUS_REDPOINTID, WORLDBOSS_REDPOINT);
|
FindPreciousModel findPreciousModel { get { return ModelCenter.Instance.GetModel<FindPreciousModel>(); } }
|
RealmModel realmModel { get { return ModelCenter.Instance.GetModel<RealmModel>(); } }
|
|
public override void Init()
|
{
|
ParseConfig();
|
FuncOpen.Instance.OnFuncStateChangeEvent += OnFunctionChange;
|
}
|
|
public override void UnInit()
|
{
|
FuncOpen.Instance.OnFuncStateChangeEvent -= OnFunctionChange;
|
}
|
|
|
public void OnBeforePlayerDataInitialize()
|
{
|
isServerPrepare = false;
|
}
|
|
public void OnPlayerLoginOk()
|
{
|
isServerPrepare = true;
|
}
|
|
public bool TryGetBossData(int _bossId, out WorldBossData _data)
|
{
|
return worldBosses.TryGetValue(_bossId, out _data);
|
}
|
|
public List<int> GetWorldBosses()
|
{
|
var activedBossIds = new List<int>();
|
var lockedCount = 0;
|
for (int i = 0; i < sortedBossIds.Count; i++)
|
{
|
var bossId = sortedBossIds[i];
|
if (findPreciousModel.IsBossUnlock(bossId))
|
{
|
activedBossIds.Add(bossId);
|
}
|
else
|
{
|
if (lockedCount < 2)
|
{
|
activedBossIds.Add(bossId);
|
lockedCount++;
|
}
|
}
|
}
|
|
return activedBossIds;
|
}
|
|
public List<int> GetWorldBosses(int _mapId)
|
{
|
var bosses = new List<int>();
|
for (int i = 0; i < sortedBossIds.Count; i++)
|
{
|
var bossId = sortedBossIds[i];
|
var config = WorldBossConfig.Get(bossId);
|
var mapId = config.MapID;
|
if (mapId == _mapId)
|
{
|
bosses.Add(bossId);
|
}
|
}
|
|
return bosses;
|
}
|
|
public int GetRecommendBoss()
|
{
|
var preferBoss = 0;
|
for (int i = sortedBossIds.Count - 1; i >= 0; i--)
|
{
|
var bossId = sortedBossIds[i];
|
if (findPreciousModel.IsBossUnlock(bossId))
|
{
|
if (preferBoss == 0)
|
{
|
preferBoss = bossId;
|
}
|
|
if (findPreciousModel.IsBossAlive(bossId) && findPreciousModel.IsSameBigRealmStageBoss(bossId))
|
{
|
return bossId;
|
}
|
}
|
}
|
|
if (preferBoss == 0)
|
{
|
preferBoss = sortedBossIds[0];
|
}
|
|
return preferBoss;
|
}
|
|
private void OnFunctionChange(int id)
|
{
|
if (id == 21)
|
{
|
UpdateRedpoint();
|
|
if (isServerPrepare && FuncOpen.Instance.IsFuncOpen(21))
|
{
|
funcOpenClickSymbol = true;
|
}
|
}
|
}
|
|
private void UpdateRedpoint()
|
{
|
if (FuncOpen.Instance.IsFuncOpen(21))
|
{
|
var count = GeneralDefine.bossWearyValues[0] + extraBossWearyValue - m_WearyValue;
|
worldBossRedPoint.count = count;
|
worldBossRedPoint.state = count > 0 ? RedPointState.Quantity : RedPointState.None;
|
}
|
else
|
{
|
worldBossRedPoint.state = RedPointState.None;
|
}
|
}
|
|
private void ParseConfig()
|
{
|
var worldBossConfigs = WorldBossConfig.GetValues();
|
foreach (var config in worldBossConfigs)
|
{
|
var bossData = worldBosses[config.NPCID] = new WorldBossData(config.NPCID);
|
}
|
|
sortedBossIds.AddRange(worldBosses.Keys);
|
sortedBossIds.Sort(WorldBossData.LevelCompare);
|
}
|
}
|
|
public class WorldBossData
|
{
|
public int id { get; private set; }
|
public WorldBossData(int _id)
|
{
|
this.id = _id;
|
}
|
|
public static int LevelCompare(int a, int b)
|
{
|
var configA = NPCConfig.Get(a);
|
var configB = NPCConfig.Get(b);
|
|
return configA.NPCLV < configB.NPCLV ? -1 : 1;
|
}
|
|
}
|
|
}
|