//--------------------------------------------------------
|
// [Author]: 第二世界
|
// [ Date ]: Monday, August 27, 2018
|
//--------------------------------------------------------
|
|
using System;
|
using System.Collections;
|
using System.Collections.Generic;
|
using TableConfig;
|
using UnityEngine;
|
using UnityEngine.UI;
|
|
namespace Snxxz.UI {
|
|
public class FairyGrabBossWin : Window
|
{
|
[SerializeField] CyclicScroll m_Bosses;
|
[SerializeField] Text m_FairyName;
|
[SerializeField] Text m_NoneFairy;
|
[SerializeField] ItemCell[] m_DropItems;
|
[SerializeField] Button m_KillRecord;
|
[SerializeField] Button m_Goto;
|
[SerializeField] RectTransform m_ContainerUnOpen;
|
[SerializeField] RectTransform m_ContainerOpen;
|
[SerializeField] Text m_SurplusTime;
|
|
FairyGrabBossModel model { get { return ModelCenter.Instance.GetModel<FairyGrabBossModel>(); } }
|
DungeonModel dungeonModel { get { return ModelCenter.Instance.GetModel<DungeonModel>(); } }
|
BossHomeModel bossHomeModel { get { return ModelCenter.Instance.GetModel<BossHomeModel>(); } }
|
FindPreciousModel findPreciousModel { get { return ModelCenter.Instance.GetModel<FindPreciousModel>(); } }
|
|
float m_Timer = 0f;
|
const float Interval = 10f;
|
|
#region Built-in
|
protected override void BindController()
|
{
|
}
|
|
protected override void AddListeners()
|
{
|
m_KillRecord.onClick.AddListener(KillRecord);
|
m_Goto.onClick.AddListener(Goto);
|
}
|
|
protected override void OnPreOpen()
|
{
|
DisplaySurplusTime();
|
DisplayBossInfo();
|
DisplayHighestFairy();
|
model.QueryGrabBossProgress(true);
|
GlobalTimeEvent.Instance.secondEvent += SecondEvent;
|
model.bossSelectedEvent += BossSelectedEvent;
|
model.bossProgressUpdate += BossProgressUpdate;
|
model.stateUpdate += StateUpdate;
|
m_Timer = 0;
|
}
|
|
protected override void OnActived()
|
{
|
base.OnActived();
|
DisplayBosses();
|
}
|
|
protected override void OnAfterOpen()
|
{
|
}
|
|
protected override void OnPreClose()
|
{
|
GlobalTimeEvent.Instance.secondEvent -= SecondEvent;
|
model.bossSelectedEvent -= BossSelectedEvent;
|
model.bossProgressUpdate -= BossProgressUpdate;
|
model.stateUpdate -= StateUpdate;
|
}
|
|
protected override void OnAfterClose()
|
{
|
}
|
|
protected override void LateUpdate()
|
{
|
base.LateUpdate();
|
m_Timer += Time.deltaTime;
|
if (m_Timer >= Interval)
|
{
|
m_Timer = 0;
|
model.QueryGrabBossProgress();
|
}
|
}
|
#endregion
|
|
void DisplayBosses()
|
{
|
var bosses = new List<int>();
|
bosses.AddRange(model.bosses);
|
model.selectBoss = DefaultSelect();
|
m_Bosses.Init(bosses);
|
m_Bosses.MoveToCenter(bosses.IndexOf(model.selectBoss));
|
}
|
|
void DisplayBossInfo()
|
{
|
List<Item> dropItems;
|
model.TryGetDropItems(model.selectBoss, out dropItems);
|
for (int i = 0; i < m_DropItems.Length; i++)
|
{
|
m_DropItems[i].cellBtn.RemoveAllListeners();
|
if (dropItems != null && i < dropItems.Count)
|
{
|
m_DropItems[i].gameObject.SetActive(true);
|
var item = dropItems[i];
|
ItemCellModel itemCellModel = new ItemCellModel(item.id, true, (ulong)item.count, item.bind ? 1 : 0);
|
m_DropItems[i].Init(itemCellModel);
|
m_DropItems[i].cellBtn.AddListener(() =>
|
{
|
ItemAttrData itemAttrData = new ItemAttrData(item.id, true, (ulong)item.count, -1, item.bind ? 1 : 0);
|
ModelCenter.Instance.GetModel<ItemTipsModel>().SetItemTipsModel(itemAttrData);
|
});
|
}
|
else
|
{
|
m_DropItems[i].gameObject.SetActive(false);
|
}
|
}
|
}
|
|
void DisplayHighestFairy()
|
{
|
m_FairyName.text = string.Empty;
|
m_NoneFairy.gameObject.SetActive(true);
|
if (!model.IsOpen)
|
{
|
return;
|
}
|
FairyGrabBossModel.BossProgressInfo bossProgress;
|
if (model.TryGetBossProgress(model.selectBoss, out bossProgress))
|
{
|
m_FairyName.text = bossProgress.FamilyName;
|
m_NoneFairy.gameObject.SetActive(string.IsNullOrEmpty(bossProgress.FamilyName));
|
}
|
}
|
|
int DefaultSelect()
|
{
|
return model.bosses[0];
|
}
|
|
void DisplaySurplusTime()
|
{
|
var seconds = model.surplusSeconds;
|
if (seconds > 0)
|
{
|
if (!m_ContainerOpen.gameObject.activeSelf || m_ContainerUnOpen.gameObject.activeSelf)
|
{
|
m_ContainerOpen.gameObject.SetActive(true);
|
m_ContainerUnOpen.gameObject.SetActive(false);
|
}
|
m_SurplusTime.text = TimeUtility.SecondsToDHMSCHS(seconds);
|
}
|
else
|
{
|
if (!m_ContainerUnOpen.gameObject.activeSelf || m_ContainerOpen.gameObject.activeSelf)
|
{
|
m_ContainerUnOpen.gameObject.SetActive(true);
|
m_ContainerOpen.gameObject.SetActive(false);
|
}
|
}
|
}
|
|
private void Goto()
|
{
|
var error = 0;
|
if (TestEnterDungeon(out error))
|
{
|
WindowJumpMgr.Instance.ClearJumpData();
|
WindowCenter.Instance.Close<LootPreciousFrameWin>();
|
MapTransferUtility.Instance.MoveToNPC(model.selectBoss);
|
}
|
else
|
{
|
switch (error)
|
{
|
case 1:
|
SysNotifyMgr.Instance.ShowTip("FairyGrabBossNoFairy");
|
break;
|
case 3:
|
SysNotifyMgr.Instance.ShowTip("FairyGrabBossUnOpen");
|
break;
|
case 2:
|
FuncOpen.Instance.ProcessorFuncErrorTip(139);
|
break;
|
case 4:
|
var dataMapId = dungeonModel.GetDungeonDataIdByMapId(PlayerDatas.Instance.baseData.MapID);
|
var config = Config.Instance.Get<DungeonOpenTimeConfig>(dataMapId);
|
var tip = string.Empty;
|
|
if (dataMapId == BossHomeModel.BOSSHOME_MAPID)
|
{
|
var vipLevel = PlayerDatas.Instance.baseData.VIPLv;
|
var vipNeed = bossHomeModel.GetFloorVipRequirement(PlayerDatas.Instance.baseData.dungeonLineId + 1);
|
if (vipLevel < vipNeed)
|
{
|
var moneyNeed = bossHomeModel.GetVipLackCost(PlayerDatas.Instance.baseData.dungeonLineId + 1);
|
var dungeonId = dungeonModel.DungeonMap(BossHomeModel.BOSSHOME_MAPID, PlayerDatas.Instance.baseData.dungeonLineId);
|
var dungeonConfig = Config.Instance.Get<DungeonConfig>(dungeonId);
|
tip = Language.Get("QuitRemindBossHome", dungeonConfig.FBName, vipNeed, moneyNeed);
|
}
|
else
|
{
|
tip = Language.Get(config.ExitDescription);
|
}
|
}
|
else
|
{
|
tip = Language.Get(config.ExitDescription);
|
}
|
|
ConfirmCancel.ShowPopConfirm(
|
Language.Get("Mail101"),
|
tip,
|
(bool _ok) =>
|
{
|
if (_ok)
|
{
|
WindowCenter.Instance.Close<LootPreciousFrameWin>();
|
MapTransferUtility.Instance.MoveToNPC(model.selectBoss);
|
}
|
}
|
);
|
break;
|
case 5:
|
SysNotifyMgr.Instance.ShowTip("InDungeon_CantGo");
|
break;
|
}
|
}
|
}
|
|
private bool TestEnterDungeon(out int _error)
|
{
|
if (!model.InActivityTime)
|
{
|
_error = 3;
|
return false;
|
}
|
if (!PlayerDatas.Instance.fairyData.HasFairy)
|
{
|
_error = 1;
|
return false;
|
}
|
if (!FuncOpen.Instance.IsFuncOpen(139))
|
{
|
_error = 2;
|
return false;
|
}
|
var mapId = PlayerDatas.Instance.baseData.MapID;
|
var dataMapId = dungeonModel.GetDungeonDataIdByMapId(mapId);
|
|
if (dataMapId == BossHomeModel.BOSSHOME_MAPID || dataMapId == ElderGodAreaModel.ELDERGODAREA_MAPID)
|
{
|
_error = 4;
|
return false;
|
}
|
|
var mapConfig = Config.Instance.Get<MapConfig>(mapId);
|
if (mapConfig.MapFBType != (int)MapType.OpenCountry)
|
{
|
_error = 5;
|
return false;
|
}
|
|
_error = 0;
|
return true;
|
}
|
|
private void KillRecord()
|
{
|
findPreciousModel.ViewKillRecordsBoss = model.selectBoss;
|
WindowCenter.Instance.Open<KillRecordsWin>();
|
}
|
|
private void SecondEvent()
|
{
|
DisplaySurplusTime();
|
}
|
|
private void BossSelectedEvent(int bossId)
|
{
|
DisplayBossInfo();
|
DisplayHighestFairy();
|
}
|
|
private void BossProgressUpdate(int bossId)
|
{
|
if (bossId == model.selectBoss)
|
{
|
DisplayHighestFairy();
|
}
|
}
|
private void StateUpdate()
|
{
|
DisplayHighestFairy();
|
}
|
|
}
|
|
}
|
|
|
|
|