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

288 lines
9.8 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
using System.Collections;
using Games.GlobeDefine;
using Games.ImpactModle;
using GCGame;
using Games.LogicObj;
using GCGame.Table;
public class MemberUIInfo : MonoBehaviour, IPointerClickHandler
{
public Image m_HeadIcon; //头像
public Text m_MemberName; //名字
public Text m_LevelText; //等级
public Slider m_HPSlider;
public Text m_HPText; //生命值数值
public Image m_Captain; //队长图标
public GameObject _FollowObj; //跟随标志
public GameObject _ShowPopMenuPos;
public Text _Pos;
public Image _HPValueImg;
public GameObject _OffLineGO;
private Coroutine captainStopCount = null; // 队长未移动计时
private Vector2 captainPosCache = Vector2.zero; //
private float timeMark; // 开始停止移动的时间点
private TeamMember _TeamMember;
private ulong lastLeaderGuid = 0; // 上一个队长的GUID
public const float _UpdatePosInterval = 1.0f;
private float _LastUpdateTime = 0;
public void Update()
{
if (_TeamMember == null)
return;
if (Time.time - _LastUpdateTime > _UpdatePosInterval)
{
if (_TeamMember.IsOnline)
{
var sceneCopy = TableManager.GetFubenByID(_TeamMember.SceneClassID, 0);
if (sceneCopy == null)
{
_Pos.text = StrDictionary.GetClientDictionaryString("#{5160}");
}
else if (sceneCopy.GetSceneIdbyIndex(0) != GameManager.gameManager.RunningScene || _TeamMember.SceneInstID != SceneData.SceneInst)
{
var sceneTableRecord = TableManager.GetSceneClassByID(sceneCopy.GetSceneIdbyIndex(0), 0);
if (sceneTableRecord != null)
{
_Pos.text = sceneTableRecord.Name;
}
}
else
{
int dis = (int)Vector2.Distance(_TeamMember.ScenePos, new Vector2(Singleton<ObjManager>.GetInstance().MainPlayer.Position.x, Singleton<ObjManager>.GetInstance().MainPlayer.Position.z));
_Pos.text = StrDictionary.GetClientDictionaryString("#{5150}", dis);
}
}
else
{
_Pos.text = StrDictionary.GetClientDictionaryString("#{5151}");
}
_LastUpdateTime = Time.time;
}
}
private IEnumerator CountCaptainTime()
{
timeMark = Time.realtimeSinceStartup;
while (true)
{
if (!GameManager.gameManager.PlayerDataPool.IsHaveTeam())
{
TryCpatainCountTime(true);
yield break;
}
if (Vector2.Distance(_TeamMember.ScenePos, captainPosCache) > 0.0001f)
{
captainPosCache = _TeamMember.ScenePos;
timeMark = Time.realtimeSinceStartup;
}
if (Time.realtimeSinceStartup - timeMark > TeamList.Instance().changeCaptainTime)
{
string tip = StrDictionary.GetClientDictionaryString("#{52007}");
//MessageBoxLogic.OpenOKCancelBox(tip, null,
// () =>
// {
// if (null == Singleton<ObjManager>.GetInstance().MainPlayer)
// {
// return;
// }
// CG_REQ_BECOME_TEAM_LEADER packet = (CG_REQ_BECOME_TEAM_LEADER)PacketDistributed.CreatePacket(MessageID.PACKET_CG_REQ_BECOME_TEAM_LEADER);
// packet.Nilparam = 1;
// packet.SendPacket();
// },
// disableCallBack:() =>
// {
// TryCpatainCountTime(true);
// });
yield break;
}
yield return null;
}
}
public void StopCount()
{
if (captainStopCount != null)
{
StopCoroutine(captainStopCount);
captainStopCount = null;
}
}
// 尝试开始队长离开
public void TryCpatainCountTime(bool isRestart = false)
{
Obj_MainPlayer mainPlayer = null;
if (null != Singleton<ObjManager>.GetInstance().MainPlayer && null != m_Captain)
{
mainPlayer = ObjManager.Instance.MainPlayer;
}
//(AnimLogic.IsPlayAnim(idleAnimId) || AnimLogic.IsPlayAnim(fightIdleAnimId)
if (mainPlayer != null && mainPlayer.IsTeamLeader(_TeamMember.Guid)
&& _TeamMember.Guid == lastLeaderGuid)
{
if (isRestart == true || captainStopCount == null)
{
//放到GameManager.gameManager开启存在UI隐藏的情况会把计时暂停
captainStopCount = GameManager.gameManager.StartCoroutine(CountCaptainTime());
}
}
else
{
if (captainStopCount != null)
{
StopCoroutine(captainStopCount);
captainStopCount = null;
}
}
if (mainPlayer != null && mainPlayer.IsTeamLeader(_TeamMember.Guid))
{
lastLeaderGuid = _TeamMember.Guid;
}
}
public void UpdateInfo(TeamMember member)
{
if (member.Guid == GlobeVar.INVALID_GUID)
{
return;
}
Obj_MainPlayer mainPlayer = null;
if (null != Singleton<ObjManager>.GetInstance().MainPlayer && null != m_Captain)
{
mainPlayer = ObjManager.Instance.MainPlayer;
}
_TeamMember = member;
//TryCpatainCountTime();
if (null != m_HeadIcon)
{
if (member.Profession >= 0 && member.Profession < (int) CharacterDefine.PROFESSION.MAX)
{
LoadAssetBundle.Instance.SetImageSprite(m_HeadIcon, Utils.GetProfessionSpriteName(member.Profession));
}
if (member.IsOnline)
{
m_HeadIcon.material = null;
_HPValueImg.material = null;
_OffLineGO.gameObject.SetActive(false);
}
else
{
m_HeadIcon.material = FriendChatItem.ImageGrayMaterial;
_HPValueImg.material = FriendChatItem.ImageGrayMaterial;
_OffLineGO.gameObject.SetActive(true);
}
}
if (null != m_LevelText)
{
m_LevelText.text = member.Level.ToString();
}
if (null != m_MemberName)
{
m_MemberName.text = member.MemberName;
}
if (null != m_HPSlider && null != m_HPText)
{
if (member.MaxHP == 0)
{
m_HPSlider.value = 1;
}
else
{
m_HPSlider.value = (float) member.HP / (float) member.MaxHP;
}
m_HPText.text = member.HP.ToString() + '/' + member.MaxHP.ToString();
}
_FollowObj.SetActive(member.FollowLeader());
if (mainPlayer != null && null != m_Captain)
{
if (mainPlayer.IsTeamLeader(member.Guid))
{
_FollowObj.SetActive(false);
m_Captain.gameObject.SetActive(true);
}
else
{
m_Captain.gameObject.SetActive(false);
}
}
//if (Time.time - _LastUpdateTime > _UpdatePosInterval)
//{
// if (_TeamMember.IsOnline)
// {
// if (_TeamMember.SceneClassID != GameManager.gameManager.RunningScene || _TeamMember.SceneInstID != SceneData.SceneInst)
// {
// var sceneCopy = TableManager.GetFubenByID(_TeamMember.SceneClassID, 0);
// if (sceneCopy != null)
// {
// var sceneTableRecord = TableManager.GetSceneClassByID(sceneCopy.GetSceneIdbyIndex(0), 0);
// if (sceneTableRecord != null)
// {
// _Pos.text = sceneTableRecord.Name;
// }
// }
// else
// {
// _Pos.text = StrDictionary.GetClientDictionaryString("#{5160}");
// }
// }
// else
// {
// int dis = (int)Vector2.Distance(_TeamMember.ScenePos, new Vector2(Singleton<ObjManager>.GetInstance().MainPlayer.Position.x, Singleton<ObjManager>.GetInstance().MainPlayer.Position.z));
// _Pos.text = StrDictionary.GetClientDictionaryString("#{5150}", dis);
// }
// }
// else
// {
// _Pos.text = StrDictionary.GetClientDictionaryString("#{5151}");
// }
// _LastUpdateTime = Time.time;
//}
}
//打开组队界面
public void OpenTeamWindow()
{
UIManager.ShowUI(UIInfo.TeamInfoRoot);
}
public void OnPointerClick(PointerEventData eventData)
{
//if (Singleton<ObjManager>.GetInstance().MainPlayer.IsTeamLeader(GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.Guid))
PopMenuLogic.ShowMenu("TeamMemberPopMenu", _ShowPopMenuPos, _TeamMember.Guid, _TeamMember.MemberName);
var obj = Singleton<ObjManager>.GetInstance().FindOtherPlayerByGuid(_TeamMember.Guid);
if (obj == null)
GUIData.AddNotifyData(StrDictionary.GetClientDictionaryString("#{8021}", _TeamMember.MemberName));
else if (!obj.IsDisableState(DISABLESTATE.Disable_BeSelect))
Singleton<ObjManager>.GetInstance().MainPlayer.SetSelectTarget(obj);
}
}