Files
JJBB/Assets/Project/Script/GUI/WorldBoss/CrossServerBossInfo.cs
2024-08-23 15:49:34 +08:00

282 lines
9.0 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using GCGame.Table;
using Games.Mission;
using Module.Log;
//世界BOSS和BOSS之家的副本也用这个UI显示
public class CrossServerBossInfo : MonoBehaviour {
public static CrossServerBossInfo Instance;
private void Awake()
{
Instance = this;
}
private void OnDestroy()
{
Instance = null;
}
public UIContainerBase _BossContainer;
public Text Title;
//oneboss 信息
public GameObject ExitBtn;
public GameObject BossDetialObj;
public Text BossDetialName;
public TimeDownText TimeDown;
public Text[] ServerAttackText; //天 地 人
private void OnEnable()
{
OnBtnShow();
GCGame.Table.Tab_SceneClass sceneClass = GCGame.Table.TableManager.GetSceneClassByID(GameManager.gameManager.RunningScene, 0);
if (sceneClass == null)
{
UIManager.CloseUI(UIInfo.CrossServerBossInfo);
return;
}
WorldBossData.Instance.InitSceneBossList();
if(WorldBossData.Instance.SceneBossCount()<=0)
{
UIManager.CloseUI(UIInfo.CrossServerBossInfo);
return;
}
if (WorldBossData.Instance.BossSceneType == 1)
{
//世界BOSS
Title.text = StrDictionary.GetClientDictionaryString("#{49145}");
}
else if(WorldBossData.Instance.BossSceneType == 2)
{
//BOSS之家
Title.text = StrDictionary.GetClientDictionaryString("#{49146}");
}
else if(WorldBossData.Instance.BossSceneType == 3)
{
// 跨服BOSS
Title.text = StrDictionary.GetClientDictionaryString("#{49115}");
_LastFreshTime = Time.time;
//左侧界面显示跨服BOSS位置
if(CrossServerMap.Instance!=null)
{
CrossServerMap.Instance.InitCrossServerBoss();
}
}
Close_Detial();
InitList();
ReqBossHomeBossState cmd = new ReqBossHomeBossState();
cmd.fubenid = GameManager.gameManager.PlayerDataPool.EnterSceneCache.EnterCopySceneID;
cmd.SendMsg();
}
float _LastFreshTime = 0;
private void Update()
{
if(WorldBossData.Instance.BossSceneType == 3)
{
if (_LastFreshTime <= 0 || Time.time - _LastFreshTime >= 1)
{
_LastFreshTime = Time.time;
ReqBossHomeBossState cmd = new ReqBossHomeBossState();
cmd.fubenid = GameManager.gameManager.PlayerDataPool.EnterSceneCache.EnterCopySceneID;
cmd.SendMsg();
if(m_CurrentShowDetial!=null)
{
ReqCrossWBGroupList cmdc = new ReqCrossWBGroupList();
cmdc.fubenid = GameManager.gameManager.PlayerDataPool.EnterSceneCache.EnterCopySceneID;
cmdc.bossid = m_CurrentShowDetial.BossID;
cmdc.SendMsg();
}
}
}
}
//BOSS之家和世界BOSS信息 跨服BOSS
public void HomeBossInfo()
{
_BossContainer.RefreshItems();
if(m_CurrentShowDetial!=null)
BossDetialName.text = string.Format("{0} {1}%", m_CurrentShowDetial.BossName, m_CurrentShowDetial.LeaveBlood);
}
private void InitList()
{
if (_BossContainer.gameObject.activeInHierarchy == false)
return;
List<WorldBossData.SceneBossInfo> bossInfos = WorldBossData.Instance.GetSceneBossList();
_BossContainer.InitContentItem(bossInfos, OnSelectBoss);
}
private WorldBossData.SceneBossInfo m_CurrentShowDetial;
public void OnSelectBoss(object obj)
{
m_CurrentShowDetial = (WorldBossData.SceneBossInfo)obj;
if (m_CurrentShowDetial == null)
return;
if(m_CurrentShowDetial.BossType == 3)
{
ReqCrossWBGroupList cmdc = new ReqCrossWBGroupList();
cmdc.fubenid = GameManager.gameManager.PlayerDataPool.EnterSceneCache.EnterCopySceneID;
cmdc.bossid = m_CurrentShowDetial.BossID;
cmdc.SendMsg();
_BossContainer.gameObject.SetActive(false);
BossDetialObj.SetActive(true);
BossDetialName.text = string.Format("{0} {1}%", m_CurrentShowDetial.BossName, m_CurrentShowDetial.LeaveBlood);
int OverTime = ActivityDataManager.Instance.GetActivityOverTime((int)ActivityDataManager.Activity_Type.ACTIVITY_TYPE_CROSSSERVERBOSS);
if (OverTime > 0)
TimeDown.Init("",Time.realtimeSinceStartup + OverTime, 0, -1, null, TimeDownText.TimeFormat.english);
else
TimeDown.Init(StrDictionary.GetClientDictionaryString("#{27025}"));
ServerAttackValue();
}
else
{
Tab_WorldBoss worldBoss = TableManager.GetWorldBossByID(m_CurrentShowDetial.BossID, 0);
if(worldBoss!=null)
{
AutoSearchPoint point = new AutoSearchPoint(worldBoss.SceneID, worldBoss.PosX, worldBoss.PosZ, -1, AutoSearchPoint.ChangeMap_Type.WORLDMAP);
if (GameManager.gameManager && GameManager.gameManager.AutoSearch)
{
GameManager.gameManager.AutoSearch.BuildPath(point);
GameManager.gameManager.AutoSearch.Path.autoSearchRadius = 1.5f;
GameManager.gameManager.AutoSearch.Path.AutoSearchTargetName = m_CurrentShowDetial.BossName;
}
}
}
}
public void Close_Detial()
{
_BossContainer.gameObject.SetActive(true);
BossDetialObj.SetActive(false);
InitList();
m_CurrentShowDetial = null;
}
public void ServerAttackData(RetCrossWBGroupList binaryMsg)
{
if (binaryMsg.fubenid != GameManager.gameManager.PlayerDataPool.EnterSceneCache.EnterCopySceneID)
return;
ServerAttackValue();
}
private void ServerAttackValue()
{
if (m_CurrentShowDetial == null || BossDetialObj.activeSelf == false)
return;
List<int> indexs = new List<int>();
Dictionary<long, List<Text>> valueTexts = new Dictionary<long, List<Text>>();
for(int i=0;i<m_CurrentShowDetial.ServerAttacksValue.Count;i++)
{
if(ServerAttackText.Length > i)
{
ServerAttackText[i].text = m_CurrentShowDetial.ServerAttacksValue[i].ToString();
}
if (valueTexts.ContainsKey(m_CurrentShowDetial.ServerAttacksValue[i]))
valueTexts[m_CurrentShowDetial.ServerAttacksValue[i]].Add(ServerAttackText[i]);
else
{
valueTexts[m_CurrentShowDetial.ServerAttacksValue[i]] = new List<Text>();
valueTexts[m_CurrentShowDetial.ServerAttacksValue[i]].Add(ServerAttackText[i]);
}
}
List<long> keys = new List<long>(valueTexts.Keys);
keys.Sort();
for(int i=0;i<keys.Count;i++)
{
for(int j=0;j<valueTexts[keys[i]].Count;j++)
{
valueTexts[keys[i]][j].transform.parent.SetAsFirstSibling();
}
}
}
public ObjectTween _MoveTo;
public RectTransform _TitleBGRec;
public GameObject _ShowBtn;
public GameObject _HideBtn;
public GameObject _InfoPanel;
private bool isShow = false;
public void OnBtnShow()
{
ShowPanel();
_ShowBtn.SetActive(false);
_HideBtn.SetActive(true);
isShow = true;
}
public void OnBtnHide()
{
HidePanel();
_ShowBtn.SetActive(true);
_HideBtn.SetActive(false);
isShow = false;
}
public void OnTitleBtn()
{
if (isShow)
{
OnBtnHide();
}
else
{
OnBtnShow();
}
}
public void ShowPanel()
{
_MoveTo.Reset();
_MoveTo.destantPos = new Vector3(0, 0, 0);
GCGame.Utils.HideMainTopRightUI();
_TitleBGRec.sizeDelta = new Vector2(300, _TitleBGRec.sizeDelta.y);
_InfoPanel.gameObject.SetActive(true);
}
public void HidePanel()
{
_MoveTo.Reset();
_MoveTo.destantPos = new Vector3(0, -192, 0);
GCGame.Utils.ShowMainTopRightUI();
_TitleBGRec.sizeDelta = new Vector2(240, _TitleBGRec.sizeDelta.y);
_InfoPanel.gameObject.SetActive(false);
}
public void Click_Exit()
{
Tab_SceneClass tabSceneClass = TableManager.GetSceneClassByID(Games.GlobeDefine.GlobeVar.MAIN_SCNENE_ID, 0);
if (null == tabSceneClass)
{
return;
}
// 传送时,停止主角移动并停止自动寻路
var mainPlayer = ObjManager.Instance.MainPlayer;
if (mainPlayer != null)
mainPlayer.StopMove();
GameManager.gameManager.AutoSearch.Stop();
SceneData.RequestChangeScene((int)CG_REQ_CHANGE_SCENE.CHANGETYPE.WORLDMAP, 0, Games.GlobeDefine.GlobeVar.MAIN_SCNENE_ID, -1, (int)tabSceneClass.SafeX, (int)tabSceneClass.SafeZ);
}
}