aha
This commit is contained in:
71
Assets/Scripts/LobbyHandle.cs
Normal file
71
Assets/Scripts/LobbyHandle.cs
Normal file
@ -0,0 +1,71 @@
|
||||
using UnityEngine;
|
||||
using Mirror;
|
||||
using Steamworks;
|
||||
|
||||
public class LobbyHandle : MonoBehaviour
|
||||
{
|
||||
private NetworkManager networkManager;
|
||||
public GameObject hostButton;
|
||||
protected Callback<LobbyCreated_t> lobbyCreated;
|
||||
protected Callback<GameLobbyJoinRequested_t> gameLobbyJoinRequested;
|
||||
protected Callback<LobbyEnter_t> lobbyEnter;
|
||||
private const string hostAddressKey = "hostAddress";
|
||||
|
||||
private void Start()
|
||||
{
|
||||
networkManager = GetComponent<NetworkManager>();
|
||||
|
||||
if (!SteamManager.Initialized)
|
||||
{
|
||||
Debug.LogError("Steamworks not initialized");
|
||||
return;
|
||||
}
|
||||
|
||||
lobbyCreated = Callback<LobbyCreated_t>.Create(OnLobbyCreated);
|
||||
gameLobbyJoinRequested = Callback<GameLobbyJoinRequested_t>.Create(OnGameLobbyJoinRequested);
|
||||
lobbyEnter = Callback<LobbyEnter_t>.Create(OnLobbyEnter);
|
||||
}
|
||||
|
||||
public void HostLobby()
|
||||
{
|
||||
hostButton.SetActive(false);
|
||||
|
||||
SteamMatchmaking.CreateLobby(ELobbyType.k_ELobbyTypeFriendsOnly, networkManager.maxConnections);
|
||||
}
|
||||
|
||||
private void OnLobbyCreated(LobbyCreated_t callback)
|
||||
{
|
||||
if (callback.m_eResult != EResult.k_EResultOK)
|
||||
{
|
||||
Debug.LogError("Failed to create lobby");
|
||||
hostButton.SetActive(true);
|
||||
return;
|
||||
}
|
||||
|
||||
SteamMatchmaking.SetLobbyData(new CSteamID(callback.m_ulSteamIDLobby), hostAddressKey, SteamUser.GetSteamID().ToString());
|
||||
|
||||
networkManager.StartHost();
|
||||
NetworkServer.SpawnObjects();
|
||||
networkManager.ServerChangeScene("Game");
|
||||
}
|
||||
|
||||
|
||||
private void OnGameLobbyJoinRequested(GameLobbyJoinRequested_t callback)
|
||||
{
|
||||
SteamMatchmaking.JoinLobby(callback.m_steamIDLobby);
|
||||
}
|
||||
|
||||
private void OnLobbyEnter(LobbyEnter_t callback)
|
||||
{
|
||||
if (NetworkServer.active)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
string hostAddress = SteamMatchmaking.GetLobbyData(new CSteamID(callback.m_ulSteamIDLobby), hostAddressKey);
|
||||
networkManager.networkAddress = hostAddress;
|
||||
networkManager.StartClient();
|
||||
|
||||
hostButton.SetActive(false);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user