//--------------------------------------------------------
|
// [Author]: 第二世界
|
// [ Date ]: Thursday, January 17, 2019
|
//--------------------------------------------------------
|
|
using System;
|
using System.Collections;
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
using UnityEngine.UI;
|
|
namespace vnxbqy.UI
|
{
|
|
public class JadeDynastyBossWin : Window
|
{
|
[SerializeField] CyclicScroll m_Bosses;
|
[SerializeField] NewDropItemTrigger m_NewDrop;
|
[SerializeField] ItemCell[] m_Items;
|
[SerializeField] Text m_ChallengeTimes;
|
[SerializeField] Text m_JadeDynastyScore;
|
[SerializeField] Button m_BuyTimes;
|
[SerializeField] Transform m_SurpassLevel;
|
[SerializeField] ToggleButton m_Subscribe;
|
[SerializeField] Button m_Goto;
|
[SerializeField] Button m_KillRecord;
|
[SerializeField] Transform m_ContainerKillRecord;
|
[SerializeField] Transform m_ContainerNoneRecord;
|
[SerializeField] Transform m_ContainerExistRecord;
|
[SerializeField] JadeDynastyBossKillRecord[] m_KillRecords;
|
[SerializeField] Transform m_ContainerBelongTo;
|
[SerializeField] Text m_BelongToPlayerName;
|
[SerializeField] Text m_BelongToNonePlayer;
|
|
JadeDynastyBossModel model { get { return ModelCenter.Instance.GetModel<JadeDynastyBossModel>(); } }
|
DungeonModel dungeonModel { get { return ModelCenter.Instance.GetModel<DungeonModel>(); } }
|
FindPreciousModel findPreciousModel { get { return ModelCenter.Instance.GetModel<FindPreciousModel>(); } }
|
MapModel mapModel { get { return ModelCenter.Instance.GetModel<MapModel>(); } }
|
|
|
float refreshBossStateTime = 0f;
|
DateTime lastRequestMapStateTime = DateTime.Now;
|
#region Built-in
|
protected override void BindController()
|
{
|
}
|
|
protected override void AddListeners()
|
{
|
m_BuyTimes.AddListener(BuyTimes);
|
m_Subscribe.AddListener(SwitchSubscribeBoss);
|
m_Goto.AddListener(GotoKillBoss);
|
m_KillRecord.AddListener(ShowSkillRecord);
|
}
|
|
protected override void OnPreOpen()
|
{
|
SetDefaultSelectBoss();
|
|
refreshBossStateTime = -1f;
|
|
FindPreciousModel.BossInfo bossInfo;
|
if (findPreciousModel.TryGetBossInfo(model.selectBossId, out bossInfo) && !bossInfo.IsBossAlive())
|
{
|
if (TimeUtility.ServerNow <= bossInfo.refreshTime)
|
{
|
var seconds = (int)(bossInfo.refreshTime - TimeUtility.ServerNow).TotalSeconds + 1;
|
refreshBossStateTime = Time.realtimeSinceStartup + seconds;
|
}
|
}
|
|
lastRequestMapStateTime = DateTime.Now;
|
mapModel.RequestQueryMapLineState(JadeDynastyBossModel.JADEDYNASTY_MAP);
|
|
model.assginSelectBossId = 0;
|
}
|
|
protected override void OnActived()
|
{
|
base.OnActived();
|
Display();
|
}
|
|
protected override void OnAfterOpen()
|
{
|
model.selectBossRefresh += SelectBossRefresh;
|
dungeonModel.updateDungeonBuyCnt += ChallengeTimesRefresh;
|
dungeonModel.dungeonRecordChangeEvent += ChallengeTimesRefresh;
|
findPreciousModel.bossSubscribeChangeEvent += DisplaySubscribe;
|
findPreciousModel.bossInfoUpdateEvent += BossInfoUpdateEvent;
|
model.bossLineRefresh += BossLineRefresh;
|
model.jadeDynastyScoreRefresh += JadeDynastyScoreRefresh;
|
}
|
|
protected override void OnPreClose()
|
{
|
model.selectBossRefresh -= SelectBossRefresh;
|
dungeonModel.updateDungeonBuyCnt -= ChallengeTimesRefresh;
|
dungeonModel.dungeonRecordChangeEvent -= ChallengeTimesRefresh;
|
findPreciousModel.bossSubscribeChangeEvent -= DisplaySubscribe;
|
findPreciousModel.bossInfoUpdateEvent -= BossInfoUpdateEvent;
|
model.bossLineRefresh -= BossLineRefresh;
|
model.jadeDynastyScoreRefresh -= JadeDynastyScoreRefresh;
|
|
refreshBossStateTime = -1f;
|
}
|
|
protected override void OnAfterClose()
|
{
|
}
|
|
protected override void LateUpdate()
|
{
|
base.LateUpdate();
|
if (refreshBossStateTime > 0)
|
{
|
if (Time.realtimeSinceStartup > refreshBossStateTime)
|
{
|
DisplayKillRecord();
|
DisplayBelongTo();
|
refreshBossStateTime = -1f;
|
}
|
}
|
|
if ((DateTime.Now - lastRequestMapStateTime).TotalSeconds >= 5f)
|
{
|
lastRequestMapStateTime = DateTime.Now;
|
mapModel.RequestQueryMapLineState(JadeDynastyBossModel.JADEDYNASTY_MAP);
|
}
|
}
|
#endregion
|
|
public void SetDefaultSelectBoss()
|
{
|
if (model.assginSelectBossId != 0
|
&& model.IsJadeDynastyBoss(model.assginSelectBossId))
|
{
|
model.selectBossId = model.assginSelectBossId;
|
}
|
else
|
{
|
model.selectBossId = model.GetRecommandBoss();
|
}
|
}
|
|
public void Display()
|
{
|
DisplayBosses();
|
DisplayChallengeTimes();
|
DisplayDropItems();
|
DisplaySubscribe(model.selectBossId);
|
DisplayKillRecord();
|
DisplayBelongTo();
|
DisplayJadeDynastyScore();
|
}
|
|
public void DisplayBosses()
|
{
|
var bosses = model.GetJadeDynastyBosses();
|
m_Bosses.Init(bosses);
|
m_Bosses.MoveToCenter(bosses.IndexOf(model.selectBossId));
|
}
|
|
public void DisplayChallengeTimes()
|
{
|
var totalTimes = dungeonModel.GetTotalTimes(JadeDynastyBossModel.JADEDYNASTY_MAP);
|
var enterTimes = dungeonModel.GetEnterTimes(JadeDynastyBossModel.JADEDYNASTY_MAP);
|
|
m_ChallengeTimes.text = StringUtility.Contact(totalTimes - enterTimes, "/", model.challengeLimitCount);
|
}
|
|
void DisplayDropItems()
|
{
|
List<Item> dropItems = null;
|
model.TryGetDropItems(model.selectBossId, out dropItems);
|
for (int i = 0; i < m_Items.Length; i++)
|
{
|
m_Items[i].button.RemoveAllListeners();
|
if (dropItems != null && i < dropItems.Count)
|
{
|
m_Items[i].SetActive(true);
|
var item = dropItems[i];
|
ItemCellModel itemCellModel = new ItemCellModel(item.id, true, (ulong)item.count);
|
m_Items[i].Init(itemCellModel);
|
m_Items[i].button.AddListener(() =>
|
{
|
ItemTipUtility.Show(item.id);
|
});
|
}
|
else
|
{
|
m_Items[i].SetActive(false);
|
}
|
}
|
|
var config = JadeDynastyBossConfig.Get(model.selectBossId);
|
m_NewDrop.SetActive(config.newDropId != 0);
|
if (config.newDropId != 0)
|
{
|
m_NewDrop.Display(config.newDropId);
|
}
|
|
var npcDropConfig = NPCDropItemConfig.Get(model.selectBossId);
|
var dropMaxLevel = 0;
|
if (npcDropConfig != null)
|
{
|
dropMaxLevel = npcDropConfig.MaxLV;
|
}
|
m_SurpassLevel.SetActive(dropMaxLevel != 0
|
&& PlayerDatas.Instance.baseData.LV > dropMaxLevel);
|
}
|
|
private void DisplaySubscribe(int _bossId)
|
{
|
m_Subscribe.isOn = findPreciousModel.IsBossSubscribed(model.selectBossId);
|
}
|
|
private void DisplayKillRecord()
|
{
|
var alive = findPreciousModel.IsBossAlive(model.selectBossId);
|
m_ContainerKillRecord.SetActive(!alive);
|
if (!alive)
|
{
|
var killRecords = findPreciousModel.GetBossKillRecords(model.selectBossId);
|
if (killRecords != null)
|
{
|
killRecords.Sort(KillRecordSort);
|
}
|
m_ContainerExistRecord.SetActive(killRecords != null && killRecords.Count > 0);
|
m_ContainerNoneRecord.SetActive(killRecords == null || killRecords.Count == 0);
|
if (killRecords != null && killRecords.Count > 0)
|
{
|
for (int i = 0; i < m_KillRecords.Length; i++)
|
{
|
if (killRecords != null && i < killRecords.Count)
|
{
|
m_KillRecords[i].SetActive(true);
|
m_KillRecords[i].Display(killRecords[i].killTime, killRecords[i].playerName);
|
}
|
else
|
{
|
m_KillRecords[i].SetActive(false);
|
}
|
}
|
}
|
}
|
}
|
|
private void DisplayBelongTo()
|
{
|
var alive = findPreciousModel.IsBossAlive(model.selectBossId);
|
m_ContainerBelongTo.SetActive(alive);
|
if (alive)
|
{
|
var belongToPlayer = false;
|
JadeDynastyBossLine jadeDynastyBossLine;
|
if (model.TryGetBossLine(model.selectBossId, out jadeDynastyBossLine))
|
{
|
if (!string.IsNullOrEmpty(jadeDynastyBossLine.belongToPlayerName))
|
{
|
belongToPlayer = true;
|
}
|
}
|
m_BelongToNonePlayer.SetActive(!belongToPlayer);
|
m_BelongToPlayerName.SetActive(belongToPlayer);
|
if (belongToPlayer)
|
{
|
m_BelongToPlayerName.text = jadeDynastyBossLine.belongToPlayerName;
|
}
|
}
|
}
|
|
private void DisplayJadeDynastyScore()
|
{
|
m_JadeDynastyScore.SetActive(false);
|
}
|
|
private void SelectBossRefresh(int bossId)
|
{
|
DisplayDropItems();
|
DisplaySubscribe(model.selectBossId);
|
DisplayKillRecord();
|
DisplayBelongTo();
|
|
FindPreciousModel.BossInfo bossInfo;
|
if (findPreciousModel.TryGetBossInfo(model.selectBossId, out bossInfo) && !bossInfo.IsBossAlive())
|
{
|
if (TimeUtility.ServerNow <= bossInfo.refreshTime)
|
{
|
var seconds = (int)(bossInfo.refreshTime - TimeUtility.ServerNow).TotalSeconds + 1;
|
refreshBossStateTime = Time.realtimeSinceStartup + seconds;
|
}
|
}
|
}
|
|
private void BossLineRefresh()
|
{
|
DisplayBelongTo();
|
}
|
|
private void ChallengeTimesRefresh()
|
{
|
DisplayChallengeTimes();
|
}
|
|
private void ChallengeTimesRefresh(int mapId)
|
{
|
if (JadeDynastyBossModel.JADEDYNASTY_MAP != mapId)
|
{
|
return;
|
}
|
DisplayChallengeTimes();
|
}
|
|
private void JadeDynastyScoreRefresh()
|
{
|
DisplayJadeDynastyScore();
|
}
|
|
private void BuyTimes()
|
{
|
var totalTimes = dungeonModel.GetTotalTimes(JadeDynastyBossModel.JADEDYNASTY_MAP);
|
var enterTimes = dungeonModel.GetEnterTimes(JadeDynastyBossModel.JADEDYNASTY_MAP);
|
if ((totalTimes - enterTimes) >= model.challengeLimitCount)
|
{
|
ServerTipDetails.DisplayNormalTip(Language.Get("DemonJar18"));
|
return;
|
}
|
var mapId = PlayerDatas.Instance.baseData.MapID;
|
var dataMapId = dungeonModel.GetDataMapIdByMapId(mapId);
|
if (dataMapId == JadeDynastyBossModel.JADEDYNASTY_MAP)
|
{
|
SysNotifyMgr.Instance.ShowTip("JadeDynastyBossBuyTimesError");
|
return;
|
}
|
else
|
{
|
dungeonModel.currentDungeon = new Dungeon(JadeDynastyBossModel.JADEDYNASTY_MAP, 0);
|
WindowCenter.Instance.Open<DungeonBuyTimesWin>();
|
}
|
}
|
|
private void ShowSkillRecord()
|
{
|
findPreciousModel.ViewKillRecordsBoss = model.selectBossId;
|
WindowCenter.Instance.Open<DemonJarKillRecordWin>();
|
}
|
|
private void SwitchSubscribeBoss()
|
{
|
if (findPreciousModel.IsBossSubscribed(model.selectBossId))
|
{
|
findPreciousModel.RequestDeSubscribeBoss(model.selectBossId);
|
}
|
else
|
{
|
findPreciousModel.RequestSubscribeBoss(model.selectBossId, false);
|
}
|
}
|
|
private void BossInfoUpdateEvent(int bossId)
|
{
|
if (bossId == model.selectBossId)
|
{
|
DisplayKillRecord();
|
DisplayBelongTo();
|
}
|
}
|
|
private void GotoKillBoss()
|
{
|
var error = 0;
|
if (model.TryEnterDungeon(model.selectBossId, out error))
|
{
|
var config = JadeDynastyBossConfig.Get(model.selectBossId);
|
dungeonModel.SingleChallenge(JadeDynastyBossModel.JADEDYNASTY_MAP, config.LineID);
|
}
|
else
|
{
|
model.DisplayErrorTip(error);
|
}
|
}
|
|
private int KillRecordSort(FindPreciousModel.BossKillRecord lhs, FindPreciousModel.BossKillRecord rhs)
|
{
|
return -lhs.killTime.CompareTo(rhs.killTime);
|
}
|
}
|
|
}
|
|
|
|
|