//--------------------------------------------------------
|
// [Author]: 第二世界
|
// [ Date ]: Tuesday, October 31, 2017
|
//--------------------------------------------------------
|
|
using System;
|
using System.Collections;
|
using System.Collections.Generic;
|
using UnityEngine;
|
using UnityEngine.UI;
|
|
|
namespace vnxbqy.UI
|
{
|
|
public class BossHomeWin : Window
|
{
|
[SerializeField] CyclicScroll m_Bosses;
|
[SerializeField] Transform m_ContainerMonster;
|
[SerializeField] Text m_MonsterLevel;
|
[SerializeField] RawImage m_MonsterPortrait;
|
[SerializeField] BossIntroduceBehaviour m_BossIntroduce;
|
[SerializeField] BossHomeFloorGroup m_FloorGroup;
|
[SerializeField] Text m_Vip;
|
[SerializeField] Text m_VipLackTip;
|
[SerializeField] Button m_Goto;
|
[SerializeField] Button m_KillRecord;
|
[SerializeField] Transform m_SurpassLevel;
|
[SerializeField] RectTransform m_NoDamageTip;
|
[SerializeField] ToggleButton m_Subscribe;
|
[SerializeField] RectTransform m_WearyContainer;
|
[SerializeField] TextEx m_WearyValue;
|
|
BossHomeModel model { get { return ModelCenter.Instance.GetModel<BossHomeModel>(); } }
|
FindPreciousModel findPreciousModel { get { return ModelCenter.Instance.GetModel<FindPreciousModel>(); } }
|
DungeonModel dungeonModel { get { return ModelCenter.Instance.GetModel<DungeonModel>(); } }
|
VipModel vipModel { get { return ModelCenter.Instance.GetModel<VipModel>(); } }
|
|
#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()
|
{
|
model.selectedFloor = model.GetRecommendFloor();
|
m_FloorGroup.Init();
|
m_Vip.text = StringUtility.Contact("V", model.GetFloorVipRequirement(model.selectedFloor));
|
|
DisplayRemindTimes();
|
}
|
|
protected override void OnAfterOpen()
|
{
|
model.bossSelectedEvent += OnBossSelected;
|
model.bossHomeFloorSelectedEvent += OnFloorSelected;
|
model.boughtTimeChangeEvent += DisplayRemindTimes;
|
findPreciousModel.bossSubscribeChangeEvent += OnSubscribeBoss;
|
}
|
|
protected override void OnPreClose()
|
{
|
StopAllCoroutines();
|
m_FloorGroup.UnInit();
|
model.bossSelectedEvent -= OnBossSelected;
|
model.bossHomeFloorSelectedEvent -= OnFloorSelected;
|
model.boughtTimeChangeEvent -= DisplayRemindTimes;
|
findPreciousModel.bossSubscribeChangeEvent -= OnSubscribeBoss;
|
}
|
|
protected override void OnAfterClose()
|
{
|
}
|
|
protected override void OnActived()
|
{
|
base.OnActived();
|
OnFloorSelected(model.selectedFloor);
|
}
|
#endregion
|
|
private void ShowBosses()
|
{
|
BossHomeData bossHomeData;
|
if (model.TryGetBossHomeData(model.selectedFloor, out bossHomeData))
|
{
|
var bosses = new List<int>();
|
bosses.AddRange(bossHomeData.GetShowBosses());
|
model.selectedBoss = bossHomeData.GetRecommendNpc();
|
m_Bosses.Init(bosses);
|
m_Bosses.MoveToCenter(bosses.IndexOf(model.selectedBoss));
|
|
var config = BossHomeConfig.Get(model.selectedBoss);
|
var npcConfig = NPCConfig.Get(model.selectedBoss);
|
switch (config.MonsterType)
|
{
|
case 1:
|
m_KillRecord.SetActive(false);
|
m_BossIntroduce.SetActive(false);
|
m_ContainerMonster.SetActive(true);
|
m_BossIntroduce.Dispose();
|
UI3DModelExhibition.Instance.ShowNPC(model.selectedBoss, npcConfig.UIModeLOffset, npcConfig.UIModelRotation, m_MonsterPortrait);
|
m_MonsterLevel.text = Language.Get("Z1024", npcConfig.NPCLV);
|
break;
|
case 2:
|
m_KillRecord.SetActive(true);
|
m_BossIntroduce.SetActive(true);
|
m_BossIntroduce.Display(model.selectedBoss, true);
|
m_ContainerMonster.SetActive(false);
|
m_Subscribe.isOn = findPreciousModel.IsBossSubscribed(model.selectedBoss);
|
break;
|
}
|
|
DisplayTip(model.selectedBoss);
|
DisplayGotoKillButton(model.selectedBoss);
|
DisplaySubscribe(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);
|
}
|
}
|
|
//进入boss之家之前需要VIP,现通过VIP全配权限控制实现不提示需要vip进入地图的逻辑
|
//boss之家也从副本改成普通地图,部分逻辑依然保留,代码会比较混乱,需小心修改
|
private void GotoKillBoss()
|
{
|
var config = BossHomeConfig.Get(model.selectedBoss);
|
if (config.MonsterType == 2 && !findPreciousModel.IsBossUnlock(model.selectedBoss))
|
{
|
SysNotifyMgr.Instance.ShowTip("BossRealmHint2", RealmConfig.Get(NPCConfig.Get(model.selectedBoss).Realm).LvLarge);
|
return;
|
}
|
|
var dataMapId = dungeonModel.GetDataMapIdByMapId(PlayerDatas.Instance.baseData.MapID);
|
if (dataMapId != BossHomeModel.BOSSHOME_MAPID)
|
{
|
EnterBossHome();
|
return;
|
}
|
|
if (PlayerDatas.Instance.baseData.dungeonLineId + 1 == config.FloorNum)
|
{
|
WindowCenter.Instance.Close<FindPreciousFrameWin>();
|
MapTransferUtility.Instance.MoveToNPC(model.selectedBoss);
|
return;
|
}
|
|
var vipLevel = PlayerDatas.Instance.baseData.VIPLv;
|
var vipNeed = model.GetFloorVipRequirement(PlayerDatas.Instance.baseData.dungeonLineId + 1);
|
if (vipLevel >= vipNeed)
|
{
|
EnterBossHome();
|
return;
|
}
|
|
var moneyNeed = model.GetVipLackCost(PlayerDatas.Instance.baseData.dungeonLineId + 1);
|
var dungeonId = dungeonModel.GetDungeonId(BossHomeModel.BOSSHOME_MAPID, PlayerDatas.Instance.baseData.dungeonLineId);
|
var dungeonConfig = DungeonConfig.Get(dungeonId);
|
ConfirmCancel.ShowPopConfirm(
|
Language.Get("Mail101"),
|
Language.Get("QuitRemindBossHome", dungeonConfig.FBName, vipNeed, moneyNeed),
|
(bool _ok) =>
|
{
|
if (_ok)
|
{
|
EnterBossHome();
|
}
|
}
|
);
|
}
|
|
private void OnSubscribeBoss(int _bossId)
|
{
|
m_Subscribe.isOn = findPreciousModel.IsBossSubscribed(model.selectedBoss);
|
}
|
|
private void OnBossSelected(int bossId)
|
{
|
StopCoroutine("Co_DelayDisplayNpcBaseInfo");
|
StartCoroutine("Co_DelayDisplayNpcBaseInfo");
|
}
|
|
IEnumerator Co_DelayDisplayNpcBaseInfo()
|
{
|
yield return WaitingForSecondConst.WaitMS300;
|
var bossId = model.selectedBoss;
|
var config = BossHomeConfig.Get(bossId);
|
|
DisplayTip(model.selectedBoss);
|
DisplayGotoKillButton(model.selectedBoss);
|
DisplaySubscribe(model.selectedBoss);
|
|
switch (config.MonsterType)
|
{
|
case 1:
|
m_KillRecord.SetActive(false);
|
m_BossIntroduce.SetActive(false);
|
m_ContainerMonster.SetActive(true);
|
m_BossIntroduce.Dispose();
|
var npcConfig = NPCConfig.Get(bossId);
|
UI3DModelExhibition.Instance.ShowNPC(bossId, npcConfig.UIModeLOffset, npcConfig.UIModelRotation, m_MonsterPortrait);
|
m_MonsterLevel.text = Language.Get("Z1024", npcConfig.NPCLV);
|
break;
|
case 2:
|
if (!m_BossIntroduce.gameObject.activeInHierarchy)
|
{
|
m_BossIntroduce.SetActive(true);
|
}
|
m_BossIntroduce.Display(bossId, true);
|
|
m_KillRecord.SetActive(true);
|
m_ContainerMonster.SetActive(false);
|
m_Subscribe.isOn = findPreciousModel.IsBossSubscribed(bossId);
|
break;
|
}
|
}
|
|
private void OnFloorSelected(int _floor)
|
{
|
ShowBosses();
|
|
var vipNeedFloor1 = model.GetFloorVipRequirement(1);
|
var vipNeed = model.GetFloorVipRequirement(model.selectedFloor);
|
m_Vip.text = StringUtility.Contact("V", vipNeed);
|
|
if (PlayerDatas.Instance.baseData.VIPLv < vipNeedFloor1)
|
{
|
m_VipLackTip.SetActive(true);
|
m_VipLackTip.text = Language.Get("BossHome_VipNoMeet");
|
}
|
else
|
{
|
if (_floor != 1)
|
{
|
if (vipNeed > PlayerDatas.Instance.baseData.VIPLv)
|
{
|
m_VipLackTip.SetActive(true);
|
var moneyNeed = model.GetVipLackCost(model.selectedFloor);
|
m_VipLackTip.text = Language.Get("FightTreasure_BossHome", moneyNeed);
|
}
|
else
|
{
|
m_VipLackTip.SetActive(false);
|
}
|
}
|
else
|
{
|
m_VipLackTip.SetActive(false);
|
}
|
}
|
|
}
|
|
private void EnterBossHome()
|
{
|
var error = 0;
|
if (TestEnterDungeon(out error))
|
{
|
//dungeonModel.SingleChallenge(BossHomeModel.BOSSHOME_MAPID, model.selectedFloor - 1);
|
WindowCenter.Instance.Close<FindPreciousFrameWin>();
|
MapTransferUtility.Instance.MoveToNPC(model.selectedBoss);
|
}
|
else
|
{
|
ProcessEnterDungeonError(error);
|
}
|
}
|
|
private bool TestEnterDungeon(out int _error)
|
{
|
var vipLevel = PlayerDatas.Instance.baseData.VIPLv;
|
if (vipLevel < model.GetFloorVipRequirement(1))
|
{
|
_error = 1;
|
return false;
|
}
|
|
var vipNeed = model.GetFloorVipRequirement(model.selectedFloor);
|
if (vipLevel < vipNeed)
|
{
|
_error = 2;
|
return false;
|
}
|
|
var mapConfig = MapConfig.Get(PlayerDatas.Instance.baseData.MapID);
|
if (mapConfig.MapFBType != (int)MapType.OpenCountry)
|
{
|
_error = 4;
|
return false;
|
}
|
|
_error = 0;
|
return true;
|
}
|
|
private void ProcessEnterDungeonError(int _error)
|
{
|
switch (_error)
|
{
|
case 1:
|
WindowCenter.Instance.Open<BossHomeVipLackWin>();
|
break;
|
case 2:
|
var moneyNeed = model.GetVipLackCost(model.selectedFloor);
|
var title = Language.Get("Mail101");
|
var tip = Language.Get("FightTreasure_BossHome", moneyNeed);
|
ConfirmCancel.ShowPopConfirm(
|
title,
|
tip,
|
(bool _ok) =>
|
{
|
if (_ok)
|
{
|
var moneyOwn = PlayerDatas.Instance.baseData.diamond;
|
if (moneyOwn < moneyNeed)
|
{
|
if (VersionConfig.Get().isBanShu)
|
{
|
SysNotifyMgr.Instance.ShowTip("GoldErr");
|
return;
|
}
|
WindowCenter.Instance.Open<RechargeTipWin>();
|
}
|
else
|
{
|
var dungeonModel = ModelCenter.Instance.GetModel<DungeonModel>();
|
dungeonModel.SingleChallenge(BossHomeModel.BOSSHOME_MAPID, model.selectedFloor - 1);
|
}
|
}
|
}
|
);
|
break;
|
case 3:
|
WindowCenter.Instance.Close<FindPreciousFrameWin>();
|
MapTransferUtility.Instance.MoveToNPC(model.selectedBoss);
|
break;
|
case 4:
|
SysNotifyMgr.Instance.ShowTip("DungeonNoGO");
|
break;
|
}
|
}
|
|
private void DisplayTip(int bossId)
|
{
|
if (!findPreciousModel.IsBossUnlock(bossId))
|
{
|
m_NoDamageTip.SetActive(true);
|
m_SurpassLevel.SetActive(false);
|
}
|
else
|
{
|
m_NoDamageTip.SetActive(false);
|
var dropConfig = NPCDropItemConfig.Get(bossId);
|
var noDrop = dropConfig == null || (dropConfig.MaxLV != 0 && PlayerDatas.Instance.baseData.LV > dropConfig.MaxLV);
|
m_SurpassLevel.SetActive(noDrop);
|
}
|
}
|
|
private void DisplayRemindTimes()
|
{
|
var wearyValueLimit = vipModel.GetVipPrivilegeCnt(VipPrivilegeType.BossHomeAwardLimit);
|
m_WearyContainer.SetActive(wearyValueLimit > 0);
|
if (wearyValueLimit > 0)
|
{
|
var countInfo = string.Format("{0}/{1}", model.remindTimes, wearyValueLimit);
|
m_WearyValue.text = countInfo;
|
m_WearyValue.colorType = model.remindTimes <= 0 ? TextColType.Red : TextColType.DarkGreen;
|
}
|
}
|
|
private void DisplayGotoKillButton(int bossId)
|
{
|
}
|
|
private void DisplaySubscribe(int bossId)
|
{
|
var isUnLocked = findPreciousModel.IsBossUnlock(bossId);
|
m_Subscribe.SetActive(isUnLocked);
|
if (isUnLocked)
|
{
|
m_Subscribe.isOn = findPreciousModel.IsBossSubscribed(bossId);
|
}
|
}
|
}
|
|
}
|
|
|
|