TH1/Unity/Assets/Scripts/TH1_UI/BottomBarUI.cs
2025-12-28 00:40:29 +08:00

205 lines
6.7 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 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);
}
}
}
}
}