205 lines
6.7 KiB
C#
205 lines
6.7 KiB
C#
using System.Collections.Generic;
|
||
using System.Runtime.InteropServices.WindowsRuntime;
|
||
using Animancer;
|
||
using UnityEngine;
|
||
using Logic;
|
||
using Logic.Multilingual;
|
||
using MongoDB.Driver;
|
||
using RuntimeData;
|
||
using TH1_Core.Events;
|
||
using TH1_Core.Managers;
|
||
using TH1_Logic.Core;
|
||
using TH1_Logic.Net;
|
||
using TH1_Logic.Steam;
|
||
using TH1Renderer;
|
||
using TH1Resource;
|
||
using TMPro;
|
||
using UI;
|
||
using UI.HintUI;
|
||
using UnityEngine.UI;
|
||
using Unity.VisualScripting;
|
||
using UnityEditor;
|
||
|
||
public class BottomBarUI
|
||
{
|
||
public GameObject ROBottomBarUI;
|
||
|
||
// 在NetInfo临时使用
|
||
public Transform NetInfo;
|
||
public struct BottomBarNetInfoRow
|
||
{
|
||
//memberId
|
||
public ulong uid;
|
||
public TextMeshProUGUI Name;
|
||
public TextMeshProUGUI Prop;
|
||
public TextMeshProUGUI Status;
|
||
}
|
||
public List<BottomBarNetInfoRow> NetInfoRow;
|
||
|
||
|
||
|
||
|
||
private GiantType _chooseFirstHeroType;
|
||
|
||
private Main _main;
|
||
|
||
//-------- UI表现层RenderData --------//
|
||
public bool UIBottomBarStatus = true;
|
||
|
||
//------- 动画数据 ---------//
|
||
private bool _isAnimating = false;
|
||
private float _fadeTime = 0f;
|
||
private bool _isShow = false;
|
||
|
||
private float _fadeDuration = 0.2f;
|
||
|
||
public BottomBarUI(Main main)
|
||
{
|
||
_main = main;
|
||
ROBottomBarUI = UIManager.Instance.ROUIManager.transform.Find("BottomBarPanel").gameObject;
|
||
NetInfo = ROBottomBarUI.transform.Find("NetInfo");
|
||
GameStartInit();
|
||
|
||
}
|
||
|
||
public void GameStartInit()
|
||
{
|
||
if (Main.MapData != null && Main.MapData.Net.Mode == NetMode.Single)
|
||
{
|
||
NetInfo.gameObject.SetActive(true);
|
||
}
|
||
|
||
NetInfo.gameObject.SetActive(false);
|
||
if (Main.MapData != null && Main.MapData.Net.Mode == NetMode.Multi)
|
||
{
|
||
NetInfoRow = new List<BottomBarNetInfoRow>();
|
||
var lobbyInfo = LobbyManager.Instance.Lobby as SteamLobbyManager;
|
||
var mids = lobbyInfo.GetAllMemberInfo();
|
||
|
||
int ct = 0;
|
||
int maxRow = 2;
|
||
//关联每个有人的玩家的行的相关组件
|
||
foreach(var pair in mids)
|
||
{
|
||
var t = new BottomBarNetInfoRow();
|
||
t.uid = pair.Key;
|
||
t.Name = NetInfo.Find("Row" + ct + "/Name")?.GetComponent<TextMeshProUGUI>();
|
||
if (t.Name != null)
|
||
t.Name.text = pair.Value.Name;
|
||
|
||
//设置房主还是客人信息
|
||
t.Prop = NetInfo.Find("Row" + ct + "/Prop")?.GetComponent<TextMeshProUGUI>();
|
||
if (pair.Key == lobbyInfo.GetLobbyOwnerId())
|
||
MultilingualManager.Instance.SetUIText(t.Prop,Table.Instance.TextDataAssets.MultiplayRoomOwnerTitle);
|
||
else
|
||
MultilingualManager.Instance.SetUIText(t.Prop,Table.Instance.TextDataAssets.MultiplayRoomGuestTitle);
|
||
|
||
//设置联网状态信息
|
||
t.Status = NetInfo.Find("Row" + ct + "/Status")?.GetComponent<TextMeshProUGUI>();
|
||
MultilingualManager.Instance.SetUIText(t.Status,Table.Instance.TextDataAssets.MultiplayNetOkTitle);
|
||
NetInfoRow.Add(t);
|
||
ct++;
|
||
if (ct >= maxRow) break;
|
||
}
|
||
for(;ct < maxRow;ct ++)
|
||
NetInfo.Find("Row" + ct + "/Prop")?.gameObject.SetActive(false);
|
||
}
|
||
|
||
_isAnimating = false;
|
||
_isShow = true;
|
||
ROBottomBarUI.transform.GetComponent<CanvasGroup>().alpha = 1;
|
||
|
||
|
||
}
|
||
|
||
|
||
public void Update()
|
||
{
|
||
if (Main.MapData == null) return;
|
||
UpdateNetInfo();
|
||
if (_isAnimating)
|
||
{
|
||
_fadeTime += Time.deltaTime / _fadeDuration;
|
||
if(_isShow)
|
||
ROBottomBarUI.transform.GetComponent<CanvasGroup>().alpha = Mathf.Lerp(0f, 1f, _fadeTime);
|
||
else
|
||
ROBottomBarUI.transform.GetComponent<CanvasGroup>().alpha = Mathf.Lerp(1f, 0f, _fadeTime);
|
||
|
||
if (_fadeTime >= 1f)
|
||
{
|
||
_isAnimating = false;
|
||
_fadeTime = 0f;
|
||
if (!_isShow)
|
||
ROBottomBarUI.SetActive(false);
|
||
}
|
||
return;
|
||
}
|
||
|
||
if (UIBottomBarStatus)
|
||
{
|
||
if (!ROBottomBarUI.activeSelf)
|
||
{
|
||
ROBottomBarUI.SetActive(true);
|
||
_isAnimating = true;
|
||
_isShow = true;
|
||
_fadeTime = 0f;
|
||
UIBottomBarStatus = true;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
if (ROBottomBarUI.activeSelf)
|
||
{
|
||
_isAnimating = true;
|
||
_isShow = false;
|
||
_fadeTime = 0f;
|
||
UIBottomBarStatus = false;
|
||
}
|
||
}
|
||
}
|
||
|
||
public void UpdateNetInfo()
|
||
{
|
||
if(Main.MapData == null)return;
|
||
if (Main.MapData.Net.Mode != NetMode.Multi) return;
|
||
|
||
NetInfo.gameObject.SetActive(true);
|
||
if (Main.MapData != null && Main.MapData.Net.Mode == NetMode.Multi)
|
||
{
|
||
var lobbyInfo = LobbyManager.Instance.Lobby as SteamLobbyManager;
|
||
var mids = lobbyInfo.GetAllMemberInfo();
|
||
int maxRow = 2;
|
||
//遍历所有行
|
||
for (int i = 0; i < maxRow; i++)
|
||
{
|
||
if (i >= NetInfoRow.Count) continue;
|
||
//如果开局init的时候,就没有给他init上,那么跳过 ,否则不管玩家是不是掉线,都要显示计算的
|
||
if (NetInfo.Find("Row" + i)?.gameObject.activeSelf != true) continue;
|
||
|
||
//判断是不是已经掉线
|
||
var confirmData = Main.Instance.ConfirmMap.GetPlayerConfirm(NetInfoRow[i].uid);
|
||
if (confirmData.State != MemberNetState.OK)
|
||
{
|
||
MultilingualManager.Instance.SetUIText(NetInfoRow[i].Prop,Table.Instance.TextDataAssets.MultiplayRoomGuestTitle);
|
||
MultilingualManager.Instance.SetUIText(NetInfoRow[i].Status,Table.Instance.TextDataAssets.MultiplayNetAIPlayTitle);
|
||
}
|
||
else
|
||
{
|
||
if(NetInfoRow[i].uid == lobbyInfo.GetLobbyOwnerId())
|
||
MultilingualManager.Instance.SetUIText(NetInfoRow[i].Prop,Table.Instance.TextDataAssets.MultiplayRoomOwnerTitle);
|
||
else
|
||
MultilingualManager.Instance.SetUIText(NetInfoRow[i].Prop,Table.Instance.TextDataAssets.MultiplayRoomGuestTitle);
|
||
MultilingualManager.Instance.SetUIText(NetInfoRow[i].Status,Table.Instance.TextDataAssets.MultiplayNetOkTitle);
|
||
}
|
||
|
||
}
|
||
|
||
}
|
||
|
||
|
||
}
|
||
|
||
|
||
|
||
}
|