KitchenChaos/Assets/Scripts/CharacterSelectPlayer.cs

50 lines
2.0 KiB
C#

using System;
using TMPro;
using Unity.Netcode;
using UnityEngine;
using UnityEngine.UI;
public class CharacterSelectPlayer : MonoBehaviour {
[SerializeField] private int PlayerIndex;
[SerializeField] private GameObject ReadyText;
[SerializeField] private PlayerColor PlayerColor;
[SerializeField] private Button KickButton;
[SerializeField] private TextMeshProUGUI PlayerName;
private void Awake() {
KickButton.onClick.AddListener(() => {
PlayerData playerData = KitchenGameMultiplayer.Instance.GetPlayerDataFromPlayerIndex(PlayerIndex);
KitchenGameMultiplayer.Instance.KickPlayer(playerData.ClientId);
KitchenGameLobby.Instance.KickPlayer(playerData.PlayerId.ToString());
});
}
private void Start() {
KitchenGameMultiplayer.Instance.OnPlayerDataNetworkListChanged += KitchenGameMultiplayer_OnPlayerDataNetworkListChanged;
CharacterSelectReady.Instance.OnReadyChanged += CharacterSelectReady_OnReadyChanged;
KickButton.gameObject.SetActive(NetworkManager.Singleton.IsServer);
UpdatePlayer();
}
private void CharacterSelectReady_OnReadyChanged(object sender, EventArgs e) => UpdatePlayer();
private void KitchenGameMultiplayer_OnPlayerDataNetworkListChanged(object sender, EventArgs e) => UpdatePlayer();
private void UpdatePlayer() {
if (KitchenGameMultiplayer.Instance.IsPlayerIndexConnected(PlayerIndex)) {
Show();
PlayerData playerData = KitchenGameMultiplayer.Instance.GetPlayerDataFromPlayerIndex(PlayerIndex);
ReadyText.SetActive(CharacterSelectReady.Instance.IsPlayerReady(playerData.ClientId));
PlayerName.text = playerData.PlayerName.ToString();
PlayerColor.SetPlayerColor(KitchenGameMultiplayer.Instance.GetPlayerColor(playerData.ColorId));
}
else {
Hide();
}
}
private void Hide() => gameObject.SetActive(false);
private void Show() => gameObject.SetActive(true);
private void OnDestroy() => KitchenGameMultiplayer.Instance.OnPlayerDataNetworkListChanged -= KitchenGameMultiplayer_OnPlayerDataNetworkListChanged;
}