using Photon.Pun;
using Photon.Realtime;
using TMPro;
using UnityEngine;
public class FindOpponentManager : MonoBehaviourPunCallbacks
{
#region Zmienne / Variables
public TMP_Text waitingStatusText = null;
public Animator _animator;
private bool isConnecting = false;
private const string GameVersion = "1.6";
private const int maxPlayersPerRoom = 2;
public GameObject _storeIcons;
private int _countdown = 3;
public EnergyManager _energy;
public LoadSceneScript _loadSceneScript;
public ConnectToServer _connectToServer;
public TMP_Text _ownerNickname;
public TMP_Text _opponentNickname;
#endregion
private void Awake() => PhotonNetwork.AutomaticallySyncScene = true;
public void FindOpponent()
{
isConnecting = true;
if (_energy.totalEnergy > 0)
{
_energy.UseEnergy();
_animator.Play("findopponent_open");
_connectToServer.enabled = true;
PhotonNetwork.LocalPlayer.NickName = PlayerPrefs.GetString("username");
waitingStatusText.text = "Searching ...";
if (PhotonNetwork.IsConnected)
{
PhotonNetwork.JoinRandomRoom();
}
else
{
PhotonNetwork.GameVersion = GameVersion;
PhotonNetwork.ConnectUsingSettings();
}
}
else if( _energy.totalEnergy == 0)
{
isConnecting = false;
_animator.Play("store_open_noEnergy");
return;
}
}
public void OnClick_LeaveTheRoom()
{
PhotonNetwork.LeaveRoom(true);
_animator.Play("findopponent_close");
_energy.totalEnergy += 1;
}
public override void OnConnectedToMaster()
{
Debug.Log("Connected To Master");
if(isConnecting)
{
PhotonNetwork.JoinRandomRoom();
}
}
public override void OnDisconnected(DisconnectCause cause)
{
_animator.Play("findopponent_close");
_energy.totalEnergy += 1;
Debug.Log($"Disconnect due to: {cause}");
}
public override void OnJoinRandomFailed(short returnCode, string message)
{
Debug.Log("No clients are waiting for an opponent, creating new room");
PhotonNetwork.CreateRoom(null, new RoomOptions { MaxPlayers = maxPlayersPerRoom });
}
public override void OnJoinedRoom()
{
Debug.Log("Client successfully joined a room");
int playerCount = PhotonNetwork.CurrentRoom.PlayerCount;
//_ownerNickname.text = PlayerPrefs.GetString("username").ToString();
PhotonNetwork.LocalPlayer.NickName = PlayerPrefs.GetString("username").ToString();
_ownerNickname.text = PhotonNetwork.LocalPlayer.NickName.ToString();
if (playerCount != maxPlayersPerRoom)
{
waitingStatusText.text = "Waiting for opponent";
Debug.Log("Client is waiting for an opponent");
}
else
{
waitingStatusText.text = "Opponent Found";
photonView.RPC("OpponentNickname", RpcTarget.Others);
Debug.Log("Matching is ready to begin");
}
}
public override void OnPlayerEnteredRoom(Player newPlayer)
{
if (PhotonNetwork.CurrentRoom.PlayerCount == maxPlayersPerRoom)
{
PhotonNetwork.CurrentRoom.IsOpen = false;
Debug.Log("Match is ready to begin");
waitingStatusText.text = "Opponent Found";
Debug.Log("Match is ready begin");
_loadSceneScript.StartCoroutine("StartGlobalGameScene");
}
}
public override void OnLeftRoom()
{
Debug.Log("Player left the photon room");
}
[PunRPC]
private void OpponentNickname()
{
PhotonNetwork.LocalPlayer.NickName = PlayerPrefs.GetString("username").ToString();
_opponentNickname.text = PlayerPrefs.GetString("username").ToString();
}
}