LobbyHandler

 avatar
unknown
csharp
a year ago
3.8 kB
5
Indexable
using UnityEngine;
using UnityEngine.UI;
using TMPro;
using System.Collections;
using Unity.Netcode;

public class LobbyRoomUIManager : NetworkBehaviour
{
    //Deck Select Menu
    public bool IsDeckMenuDisplayed { get; private set; } = false;
    public float TimePassedDisplayed { get; private set; }
    [SerializeField] Button _deckMenuButton;
    [SerializeField] Button _settingsButton;
    [SerializeField] Animator _deckMenuAnimator;
    [SerializeField] TextMeshProUGUI _lobbyNameText;
    [SerializeField] TextMeshProUGUI _lobbyRoomCode;
    [SerializeField] TextMeshProUGUI _relayJoinCode;
    [SerializeField] TextMeshProUGUI _hostName;
    [SerializeField] TextMeshProUGUI _guestName;
    [SerializeField] Image _hostImage;
    [SerializeField] Image _guestImage;

    [SerializeField] public DeckSO SelectedDeck { get; private set; }
    [SerializeField] public DeckSO GuestSelectedDeck { get; private set; }
    [SerializeField] TextMeshProUGUI _selectedDeckName;
    [SerializeField] Image _selectedDeckImage;

    void Start()
    {
        LoadAllButtonListeners();
        LoadComponents();
        StartCoroutine(SetLobbyRoomCodeDisplay());
    }

    void Update()
    {
        if (IsDeckMenuDisplayed)
        {
            if (Input.GetKeyDown(KeyCode.Escape))
                HideDeckSelectMenu();

            TimePassedDisplayed += Time.deltaTime;
        }
    }

    void OnApplicationQuit()
    {
        LobbyHandler.Instance.DeleteLobby(LobbyHandler.Instance.LobbyID);
    }

    void LoadComponents()
    {
        if (IsHost)
            _hostName.text = SecurePlayerPrefs.GetString("_displayName");

        if (IsClient)
            _guestName.text = SecurePlayerPrefs.GetString("_displayName");
    }

    void LoadAllButtonListeners()
    {
        _deckMenuButton.onClick.AddListener(ShowDeckSelectMenu);
        _settingsButton.onClick.AddListener(ReturnToHomeMenu);
    }

    public void ShowDeckSelectMenu()
    {
        IsDeckMenuDisplayed = true;
        _deckMenuAnimator.Play("Show");
    }

    public void HideDeckSelectMenu()
    {
        TimePassedDisplayed = 0;
        IsDeckMenuDisplayed = false;
        _deckMenuAnimator.Play("Hide");
    }

    public void SelectDeck(DeckSO selectedDeck)
    {
        StartCoroutine(PerformDeckSelect(selectedDeck));
    }

    public IEnumerator PerformDeckSelect(DeckSO selectedDeck)
    {
        HideDeckSelectMenu();
        if (selectedDeck == SelectedDeck) yield return null;

        SelectedDeck = selectedDeck;

        yield return new WaitForSeconds(0.1f);

        ChangeLeaderImageClientRpc();

        _selectedDeckName.text = SelectedDeck.NombreDelMazo;
        _selectedDeckImage.sprite = SelectedDeck.Lider.Ilustracion;
    }

    [ClientRpc]
    void ChangeLeaderImageClientRpc()
    {
        Debug.Log("Client Rpc is being called");
        ChangeLeaderImageServerRpc();
    }

    [ServerRpc]
    void ChangeLeaderImageServerRpc()
    {
        if (NetworkManager.Singleton.IsHost)
            _hostImage.sprite = SelectedDeck.Lider.Ilustracion;

        else
            _guestImage.sprite = SelectedDeck.Lider.Ilustracion;
    }

    IEnumerator SetLobbyRoomCodeDisplay()
    {
        yield return new WaitForSeconds(0.3f);
        _lobbyRoomCode.text = LobbyHandler.Instance.RoomCode;
        _lobbyNameText.text = LobbyHandler.Instance.LobbyName;
        _relayJoinCode.text = LobbyHandler.Instance.RelayCode;
    }

    void ReturnToHomeMenu()
    {
        LobbyHandler.Instance.DeleteLobby(LobbyHandler.Instance.LobbyID);
        SceneTransitionManager.Instance.LoadSceneTransition(SceneTransitionManager.Instance.Wipe, "MainMenu");
    }
}
Editor is loading...
Leave a Comment