//--------------------------------------------------------
|
// [Author]: 第二世界
|
// [ Date ]: Saturday, August 18, 2018
|
//--------------------------------------------------------
|
|
using System;
|
using System.Collections;
|
using System.Collections.Generic;
|
using UnityEngine;
|
using UnityEngine.UI;
|
|
|
namespace Snxxz.UI
|
{
|
[XLua.Hotfix]
|
public class CrossServerBossWin : Window
|
{
|
[SerializeField] CyclicScroll m_Bosses;
|
[SerializeField] CrossServerBossBoxBehaviour m_BoxBehaviour;
|
[SerializeField] CrossServerBossEliteMonsterBehaviour m_EliteMonsterBehaviour;
|
[SerializeField] BossIntroduceBehaviour m_BossIntroduce;
|
|
[SerializeField] Button m_Goto;
|
[SerializeField] Button m_KillRecord;
|
[SerializeField] Transform m_SurpassLevel;
|
[SerializeField] RectTransform m_NoDamageTip;
|
[SerializeField] ToggleButton m_Subscribe;
|
|
[SerializeField] RectTransform m_ContainerBoxCollectWeary;
|
[SerializeField] TextEx m_BoxCollectWearyValue;
|
[SerializeField] RectTransform m_ContainerBossKillWeary;
|
[SerializeField] TextEx m_BossKillWearyValue;
|
|
CrossServerBossModel model { get { return ModelCenter.Instance.GetModel<CrossServerBossModel>(); } }
|
FindPreciousModel findPreciousModel { get { return ModelCenter.Instance.GetModel<FindPreciousModel>(); } }
|
|
#region Built-in
|
protected override void BindController()
|
{
|
}
|
|
protected override void AddListeners()
|
{
|
m_Goto.AddListener(GotoKillBoss);
|
m_KillRecord.AddListener(ShowKillRecords);
|
m_Subscribe.AddListener(SwitchSubscribeBoss);
|
}
|
|
protected override void OnPreOpen()
|
{
|
}
|
|
protected override void OnAfterOpen()
|
{
|
model.bossSelectedEvent += OnBossSelected;
|
findPreciousModel.bossSubscribeChangeEvent += OnSubscribeBoss;
|
}
|
|
protected override void OnPreClose()
|
{
|
model.bossSelectedEvent -= OnBossSelected;
|
findPreciousModel.bossSubscribeChangeEvent -= OnSubscribeBoss;
|
}
|
|
protected override void OnAfterClose()
|
{
|
}
|
|
protected override void OnActived()
|
{
|
base.OnActived();
|
ShowBosses();
|
model.RequestBoxAndEliteSurplusInfo();
|
}
|
#endregion
|
|
private void ShowBosses()
|
{
|
var bosses = model.GetNpcIds();
|
model.selectedBoss = model.GetRecommendNpc();
|
m_Bosses.Init(bosses);
|
m_Bosses.MoveToCenter(bosses.IndexOf(model.selectedBoss));
|
|
DisplayItemDropTip(model.selectedBoss);
|
DisplayBossBaseInfo(model.selectedBoss);
|
DisplayTimes(model.selectedBoss);
|
}
|
|
private void ShowKillRecords()
|
{
|
findPreciousModel.ViewKillRecordsBoss = model.selectedBoss;
|
WindowCenter.Instance.Open<KillRecordsWin>();
|
}
|
|
private void SwitchSubscribeBoss()
|
{
|
if (findPreciousModel.IsBossSubscribed(model.selectedBoss))
|
{
|
findPreciousModel.RequestDeSubscribeBoss(model.selectedBoss);
|
}
|
else
|
{
|
findPreciousModel.RequestSubscribeBoss(model.selectedBoss, false);
|
}
|
}
|
|
private void GotoKillBoss()
|
{
|
var error = 0;
|
if (model.CanEnter(out error))
|
{
|
if (PlayerDatas.Instance.baseData.MapID == CrossServerBossModel.DATA_MAPID)
|
{
|
WindowJumpMgr.Instance.ClearJumpData();
|
WindowCenter.Instance.Close<CrossServerWin>();
|
WindowCenter.Instance.Open<MainInterfaceWin>();
|
|
var config = CrossServerBossConfig.Get(model.selectedBoss);
|
switch (config.MonsterType)
|
{
|
case 1:
|
case 2:
|
case 3:
|
break;
|
case 4:
|
MapTransferUtility.Instance.MoveToNPC(model.selectedBoss);
|
break;
|
}
|
}
|
else
|
{
|
model.RequestEnter();
|
}
|
}
|
else
|
{
|
model.ProcessEnterError(error);
|
}
|
}
|
|
private void OnSubscribeBoss(int _bossId)
|
{
|
m_Subscribe.isOn = findPreciousModel.IsBossSubscribed(model.selectedBoss);
|
}
|
|
private void OnBossSelected(int _bossId)
|
{
|
DisplayItemDropTip(_bossId);
|
DisplayBossBaseInfo(_bossId);
|
DisplayTimes(_bossId);
|
}
|
|
private void DisplayBossBaseInfo(int _bossId)
|
{
|
var config = CrossServerBossConfig.Get(_bossId);
|
switch (config.MonsterType)
|
{
|
case 1:
|
case 2:
|
m_KillRecord.gameObject.SetActive(false);
|
m_BossIntroduce.Dispose();
|
m_BossIntroduce.gameObject.SetActive(false);
|
m_EliteMonsterBehaviour.Dispose();
|
m_EliteMonsterBehaviour.gameObject.SetActive(false);
|
m_BoxBehaviour.gameObject.SetActive(true);
|
m_BoxBehaviour.Display();
|
break;
|
case 3:
|
m_KillRecord.gameObject.SetActive(false);
|
m_BossIntroduce.Dispose();
|
m_BossIntroduce.gameObject.SetActive(false);
|
m_BoxBehaviour.gameObject.SetActive(false);
|
m_BoxBehaviour.Dispose();
|
|
m_EliteMonsterBehaviour.gameObject.SetActive(true);
|
m_EliteMonsterBehaviour.Display();
|
break;
|
case 4:
|
m_KillRecord.gameObject.SetActive(true);
|
m_BoxBehaviour.Dispose();
|
m_BoxBehaviour.gameObject.SetActive(false);
|
m_EliteMonsterBehaviour.Dispose();
|
m_EliteMonsterBehaviour.gameObject.SetActive(false);
|
|
m_BossIntroduce.gameObject.SetActive(true);
|
m_BossIntroduce.Display(_bossId, true);
|
m_Subscribe.isOn = findPreciousModel.IsBossSubscribed(_bossId);
|
break;
|
}
|
|
DisplayGotoKillButton(model.selectedBoss);
|
DisplaySubscribe(model.selectedBoss);
|
}
|
|
private void DisplayItemDropTip(int bossId)
|
{
|
var config = CrossServerBossConfig.Get(bossId);
|
switch (config.MonsterType)
|
{
|
case 1:
|
case 2:
|
case 3:
|
m_NoDamageTip.gameObject.SetActive(false);
|
m_SurpassLevel.gameObject.SetActive(false);
|
break;
|
case 4:
|
if (!findPreciousModel.IsBossUnlock(bossId))
|
{
|
m_NoDamageTip.gameObject.SetActive(true);
|
m_SurpassLevel.gameObject.SetActive(false);
|
}
|
else
|
{
|
m_NoDamageTip.gameObject.SetActive(false);
|
var dropConfig = NPCDropItemConfig.Get(bossId);
|
var noDrop = dropConfig == null || (dropConfig.MaxLV != 0 && PlayerDatas.Instance.baseData.LV > dropConfig.MaxLV);
|
m_SurpassLevel.gameObject.SetActive(noDrop);
|
}
|
break;
|
}
|
}
|
|
private void DisplayTimes(int bossId)
|
{
|
var config = CrossServerBossConfig.Get(bossId);
|
switch (config.MonsterType)
|
{
|
case 1:
|
case 2:
|
m_ContainerBoxCollectWeary.gameObject.SetActive(true);
|
m_ContainerBossKillWeary.gameObject.SetActive(false);
|
var bigBoxCollectCountLimit = GeneralDefine.dogzBoxLimit;
|
m_BoxCollectWearyValue.text = StringUtility.Contact(model.bigBoxCollectCount, "/", bigBoxCollectCountLimit);
|
m_BoxCollectWearyValue.colorType = model.bigBoxCollectCount >= bigBoxCollectCountLimit ? TextColType.Red : TextColType.DarkGreen;
|
break;
|
case 3:
|
case 4:
|
m_ContainerBoxCollectWeary.gameObject.SetActive(false);
|
m_ContainerBossKillWeary.gameObject.SetActive(true);
|
var wearyValueLimit = GeneralDefine.bossWearyValues[2];
|
m_BossKillWearyValue.text = Language.Get("WorldBoss_Endurance0", wearyValueLimit - model.wearyValue);
|
m_BossKillWearyValue.colorType = model.wearyValue >= wearyValueLimit ? TextColType.Red : TextColType.DarkGreen;
|
break;
|
}
|
}
|
|
private void DisplayGotoKillButton(int bossId)
|
{
|
}
|
|
private void DisplaySubscribe(int bossId)
|
{
|
var isUnLocked = findPreciousModel.IsBossUnlock(bossId);
|
m_Subscribe.gameObject.SetActive(isUnLocked);
|
if (isUnLocked)
|
{
|
m_Subscribe.isOn = findPreciousModel.IsBossSubscribed(bossId);
|
}
|
}
|
}
|
|
}
|