using System;
|
using System.Collections;
|
using System.Collections.Generic;
|
using System.Linq;
|
using UnityEngine;
|
using UnityEngine.UI;
|
|
namespace vnxbqy.UI
|
{
|
public class AllianceBossBehaviour : MonoBehaviour
|
{
|
[SerializeField] Text m_BossName;
|
[SerializeField] Text m_BossState;
|
[SerializeField] RawImage m_RawBoss;
|
[SerializeField] ItemCell[] m_Items;
|
[SerializeField] Button m_Goto;
|
[SerializeField] Text m_GotoLabel;
|
|
int index = 0;
|
|
int m_State = 0;
|
int state
|
{
|
get { return m_State; }
|
set
|
{
|
if (m_State != value)
|
{
|
m_State = value;
|
DisplayState();
|
}
|
}
|
}
|
|
float timer = 0f;
|
|
AllianceBossModel model { get { return ModelCenter.Instance.GetModel<AllianceBossModel>(); } }
|
DailyQuestModel dailyQuestModel { get { return ModelCenter.Instance.GetModel<DailyQuestModel>(); } }
|
DungeonModel dungeonModel { get { return ModelCenter.Instance.GetModel<DungeonModel>(); } }
|
|
public void Display(int index)
|
{
|
this.index = index;
|
|
DisplayBase();
|
DisplayItems();
|
RefreshState();
|
DisplayState();
|
|
m_Goto.SetListener(Goto);
|
|
model.allianceBossStateRefresh += AllianceBossStateRefresh;
|
model.allianceBossLineRefresh += AllianceBossLineRefresh;
|
|
WindowCenter.Instance.windowBeforeCloseEvent += WindowBeforeCloseEvent;
|
}
|
|
void DisplayBase()
|
{
|
var npcId = model.GetBossNpcId(index);
|
var npcConfig = NPCConfig.Get(npcId);
|
m_BossName.text = npcConfig.charName;
|
DisplayBossModel();
|
}
|
|
void DisplayItems()
|
{
|
List<Item> items;
|
model.TryGetItems(index, out items);
|
for (int i = 0; i < m_Items.Length; i++)
|
{
|
if (items != null && i < items.Count)
|
{
|
var item = items[i];
|
m_Items[i].SetActive(true);
|
var itemModel = new ItemCellModel(item.id, true, (ulong)item.count);
|
m_Items[i].Init(itemModel);
|
m_Items[i].button.SetListener(() =>
|
{
|
ItemTipUtility.Show(item.id);
|
});
|
}
|
else
|
{
|
m_Items[i].SetActive(false);
|
}
|
}
|
}
|
|
void RefreshState()
|
{
|
DailyQuestOpenTime dailyQuestOpenTime;
|
if (dailyQuestModel.TryGetOpenTime((int)DailyQuestType.AllianceBoss, out dailyQuestOpenTime))
|
{
|
if (!dailyQuestOpenTime.InOpenTime())
|
{
|
state = 0;
|
return;
|
}
|
else
|
{
|
var hourMinutes = dailyQuestOpenTime.NormalOpenTimes.Values.First();
|
if (index < hourMinutes.Count)
|
{
|
if (!hourMinutes[index].InOpenTime())
|
{
|
state = 0;
|
return;
|
}
|
if (model.isActivityOver)
|
{
|
state = 2;
|
}
|
else
|
{
|
state = 1;
|
}
|
}
|
}
|
}
|
}
|
|
void DisplayBossModel()
|
{
|
m_RawBoss.SetActive(true);
|
|
var npcId = model.GetBossNpcId(index);
|
|
var npcConifg = NPCConfig.Get(npcId);
|
|
if (index == 0)
|
{
|
UI3DModelExhibition.Instance.ShowNPC(npcId, npcConifg.UIModeLOffset,
|
npcConifg.UIModelRotation, m_RawBoss);
|
}
|
else
|
{
|
UI3DModelExhibition.InstanceClone1.ShowNPC(npcId, npcConifg.UIModeLOffset,
|
npcConifg.UIModelRotation, m_RawBoss);
|
}
|
}
|
|
void DisplayState()
|
{
|
m_Goto.SetInteractable(m_GotoLabel, state != 0);
|
|
switch (state)
|
{
|
case 0:
|
DailyQuestOpenTime dailyQuestOpenTime;
|
if (dailyQuestModel.TryGetOpenTime((int)DailyQuestType.AllianceBoss, out dailyQuestOpenTime))
|
{
|
var hourMinutes = dailyQuestOpenTime.NormalOpenTimes.Values.First();
|
if (index < hourMinutes.Count)
|
{
|
var timeLabel = UIHelper.AppendColor(TextColType.Red, hourMinutes[index].ToOpenTime());
|
m_BossState.text = StringUtility.Contact(Language.Get("ActivityTime"), timeLabel);
|
}
|
}
|
m_BossState.color = UIHelper.GetUIColor(TextColType.White);
|
break;
|
case 1:
|
DisplayNpcHp();
|
m_BossState.color = UIHelper.GetUIColor(TextColType.White);
|
break;
|
case 2:
|
m_BossState.text = Language.Get("AllianceBoss_1");
|
m_BossState.color = UIHelper.GetUIColor(TextColType.Red);
|
break;
|
}
|
}
|
|
void DisplayNpcHp()
|
{
|
if (state != 1)
|
{
|
return;
|
}
|
|
AllianceBossModel.AllianceBossLine bossLine;
|
var hp = 100;
|
if (model.TryGetBossLine(index, out bossLine))
|
{
|
hp = bossLine.hp;
|
}
|
m_BossState.text = Language.Get("RidingPetBossRemainHP", hp);
|
}
|
|
private void LateUpdate()
|
{
|
timer += Time.deltaTime;
|
if (timer >= 1f)
|
{
|
timer = 0f;
|
RefreshState();
|
}
|
}
|
|
private void Goto()
|
{
|
var error = 0;
|
if (TestEnterAllianceBoss(out error))
|
{
|
dungeonModel.SingleChallenge(AllianceBossModel.DATAMAPID, index);
|
}
|
else
|
{
|
DisplayErrorTip(error);
|
}
|
}
|
|
bool TestEnterAllianceBoss(out int error)
|
{
|
error = 0;
|
|
if (PlayerDatas.Instance.baseData.FamilyId == 0)
|
{
|
error = 6;
|
return false;
|
}
|
|
var dungeonId = dungeonModel.GetDungeonId(AllianceBossModel.DATAMAPID, index);
|
|
var dungeonConfig = DungeonConfig.Get(dungeonId);
|
if (dungeonConfig != null)
|
{
|
var playerLevel = PlayerDatas.Instance.baseData.LV;
|
if (playerLevel < dungeonConfig.LVLimitMin)
|
{
|
error = 1;
|
return false;
|
}
|
}
|
|
if (CrossServerUtility.IsCrossServerBoss())
|
{
|
error = 3;
|
return false;
|
}
|
|
if (model.isActivityOver)
|
{
|
error = 4;
|
return false;
|
}
|
|
var dailyQuestState = dailyQuestModel.GetQuestState((int)DailyQuestType.AllianceBoss);
|
if (dailyQuestState != DailyQuestModel.DailyQuestState.Normal)
|
{
|
error = 5;
|
return false;
|
}
|
|
return true;
|
}
|
|
void DisplayErrorTip(int error)
|
{
|
switch (error)
|
{
|
case 1:
|
SysNotifyMgr.Instance.ShowTip("DemonJar_Text2");
|
break;
|
case 2:
|
SysNotifyMgr.Instance.ShowTip("GeRen_chenxin_268121", AllianceBossModel.DATAMAPID);
|
break;
|
case 3:
|
SysNotifyMgr.Instance.ShowTip("CrossMap10");
|
break;
|
case 4:
|
SysNotifyMgr.Instance.ShowTip("AllianceBossDead");
|
break;
|
case 5:
|
SysNotifyMgr.Instance.ShowTip("Join_Space_Lost");
|
break;
|
case 6:
|
SysNotifyMgr.Instance.ShowTip("DailyQuestwinUnionLimit");
|
break;
|
}
|
}
|
|
private void AllianceBossStateRefresh()
|
{
|
RefreshState();
|
}
|
|
private void AllianceBossLineRefresh()
|
{
|
if (state == 1)
|
{
|
DisplayNpcHp();
|
}
|
}
|
|
private void WindowBeforeCloseEvent(Window window)
|
{
|
if (window is PetMountTipWin)
|
{
|
DisplayBossModel();
|
}
|
}
|
|
public void Dispose()
|
{
|
model.allianceBossStateRefresh -= AllianceBossStateRefresh;
|
model.allianceBossLineRefresh -= AllianceBossLineRefresh;
|
WindowCenter.Instance.windowBeforeCloseEvent -= WindowBeforeCloseEvent;
|
|
UI3DModelExhibition.Instance.StopShow();
|
UI3DModelExhibition.InstanceClone1.StopShow();
|
}
|
}
|
}
|
|