using System; using TMPro; using UnityEngine; using UnityEngine.UI; namespace XGame { public class MatchWaitingController : MonoBehaviour { private RectTransform spinnerRect; private TMP_Text titleText; private TMP_Text gameText; private TMP_Text statusText; private TMP_Text elapsedText; private TMP_Text closeText; private Button closeButton; private string luaModule = "client/baseworld"; private string currentGameId = string.Empty; private float startedAt; public Action OnCloseRequested; private void Awake() { CacheControls(); WireEvents(); startedAt = Time.realtimeSinceStartup; UpdateElapsedText(); } private void Update() { if (spinnerRect != null) { spinnerRect.Rotate(0f, 0f, -180f * Time.unscaledDeltaTime); } if (elapsedText != null && startedAt > 0f) { UpdateElapsedText(); } } public void Bind(string module) { if (!string.IsNullOrEmpty(module)) { luaModule = module; } } public void SetWaiting(string gameId, string message) { CacheControls(); currentGameId = gameId ?? string.Empty; startedAt = Time.realtimeSinceStartup; SetText(titleText, "匹配等待"); SetText(gameText, string.IsNullOrEmpty(currentGameId) ? "正在寻找对局" : currentGameId); UpdateElapsedText(); SetStatus(string.IsNullOrEmpty(message) ? "正在匹配,请稍候..." : message, false); } public void SetStatus(string message) { SetStatus(message, false); } public void SetStatus(string message, bool canClose) { CacheControls(); SetText(statusText, message); if (closeText != null) { closeText.text = canClose ? "返回大厅" : "退出匹配"; } } public void Close() { Destroy(gameObject); } private void CacheControls() { spinnerRect = spinnerRect ? spinnerRect : Find("Img_Spinner"); titleText = titleText ? titleText : Find("Txt_Title"); gameText = gameText ? gameText : Find("Txt_Game"); statusText = statusText ? statusText : Find("Txt_Status"); elapsedText = elapsedText ? elapsedText : Find("Txt_Elapsed"); closeButton = closeButton ? closeButton : Find