51 lines
1.5 KiB
C#
51 lines
1.5 KiB
C#
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
using TMPro;
|
|
|
|
/// <summary>
|
|
/// Показывает join-код текущей сессии в игровой сцене и позволяет скопировать
|
|
/// его в буфер обмена. Код берётся из SessionInfo (переживает загрузку сцены).
|
|
/// Если кода нет (например, запуск через Play Mode без сессии) — прячет себя.
|
|
/// </summary>
|
|
public class SessionCodeView : MonoBehaviour
|
|
{
|
|
[SerializeField] private TMP_Text codeText;
|
|
[SerializeField] private Button copyButton;
|
|
[SerializeField] private GameObject root; // что скрывать, если кода нет (по умолчанию — этот объект)
|
|
|
|
private void Awake()
|
|
{
|
|
if (root == null) root = gameObject;
|
|
|
|
if (copyButton != null)
|
|
copyButton.onClick.AddListener(CopyCode);
|
|
}
|
|
|
|
private void OnEnable()
|
|
{
|
|
Refresh();
|
|
}
|
|
|
|
private void OnDestroy()
|
|
{
|
|
if (copyButton != null)
|
|
copyButton.onClick.RemoveListener(CopyCode);
|
|
}
|
|
|
|
private void Refresh()
|
|
{
|
|
bool _hasCode = !string.IsNullOrEmpty(SessionInfo.JoinCode);
|
|
root.SetActive(_hasCode);
|
|
|
|
if (_hasCode && codeText != null)
|
|
codeText.text = SessionInfo.JoinCode;
|
|
}
|
|
|
|
private void CopyCode()
|
|
{
|
|
if (string.IsNullOrEmpty(SessionInfo.JoinCode)) return;
|
|
|
|
GUIUtility.systemCopyBuffer = SessionInfo.JoinCode;
|
|
}
|
|
}
|