282 lines
9.0 KiB
C#
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);
|
|||
|
}
|
|||
|
|
|||
|
}
|