This commit is contained in:
2025-06-16 15:14:23 +02:00
commit 074e590073
3174 changed files with 428263 additions and 0 deletions

View 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);
}
}