Files

135 lines
3.7 KiB
C#

using System;
using System.Collections.Generic;
using GameServer.Client;
using UnityEngine;
using UnityEngine.UI;
public class roomPrefab : MonoBehaviour
{
public Image btmImg;
public Text roommateID;
public Image ownerImage;
public Text roommateUsername;
public Text playMode_inRoom;
public Dropdown usercando;
public Image roommate_readyStatus;
private Action<string> _onKick;
private string _targetSteamId;
private bool _dropdownBound;
public void Bind(ArenaRoomParticipant participant, int displayIndex, bool localIsHost,
string localSteamId, Sprite backgroundSprite, Action<string> onKick)
{
_onKick = onKick;
_targetSteamId = participant != null ? participant.steam_id : null;
if (btmImg != null)
{
btmImg.sprite = backgroundSprite;
}
if (roommateID != null)
{
roommateID.text = displayIndex.ToString();
}
if (ownerImage != null)
{
ownerImage.gameObject.SetActive(participant != null && participant.is_host);
}
if (roommateUsername != null)
{
roommateUsername.text = participant != null
? GameServer.Client.NetworkManager.ResolveDisplayName(
participant.display_name,
participant.steam_id,
false)
: string.Empty;
}
if (playMode_inRoom != null)
{
playMode_inRoom.text = "游玩";
}
if (roommate_readyStatus != null)
{
bool isReady = participant != null && participant.is_ready;
roommate_readyStatus.enabled = isReady;
roommate_readyStatus.gameObject.SetActive(isReady);
}
ConfigureDropdown(participant, localIsHost, localSteamId);
}
private void OnDestroy()
{
if (usercando != null && _dropdownBound)
{
usercando.onValueChanged.RemoveListener(OnDropdownValueChanged);
_dropdownBound = false;
}
}
private void ConfigureDropdown(ArenaRoomParticipant participant, bool localIsHost, string localSteamId)
{
if (usercando == null)
{
return;
}
if (_dropdownBound)
{
usercando.onValueChanged.RemoveListener(OnDropdownValueChanged);
_dropdownBound = false;
}
usercando.ClearOptions();
bool canKick = participant != null
&& localIsHost
&& !participant.is_host
&& !string.Equals(participant.steam_id, localSteamId, StringComparison.Ordinal);
if (canKick)
{
usercando.interactable = true;
usercando.AddOptions(new List<string> { "操作", "Kick" });
usercando.value = 0;
usercando.RefreshShownValue();
usercando.onValueChanged.AddListener(OnDropdownValueChanged);
_dropdownBound = true;
return;
}
usercando.interactable = false;
if (participant != null && participant.is_host)
{
usercando.AddOptions(new List<string> { "房主" });
}
else
{
usercando.AddOptions(new List<string> { "无权限" });
}
usercando.value = 0;
usercando.RefreshShownValue();
}
private void OnDropdownValueChanged(int index)
{
if (index != 1 || string.IsNullOrWhiteSpace(_targetSteamId))
{
return;
}
_onKick?.Invoke(_targetSteamId);
if (usercando != null)
{
usercando.value = 0;
usercando.RefreshShownValue();
}
}
}