This repository has been archived on 2025-06-18. You can view files and clone it, but cannot push or open issues or pull requests.
Files
skolavdf/phr/StickGame/Assets/SteamIntegration/BootstrapManager.cs
2024-03-24 22:21:16 +01:00

82 lines
3.0 KiB
C#

using FishNet.Managing;
using Steamworks;
using UnityEngine;
using UnityEngine.SceneManagement;
public class BootstrapManager : MonoBehaviour
{
private static BootstrapManager instance;
private void Awake() => instance = this;
[SerializeField] private string menuName = "MenuSceneSteam";
[SerializeField] private NetworkManager _networkManager;
[SerializeField] private FishySteamworks.FishySteamworks _fishySteamworks;
protected Callback<LobbyCreated_t> LobbyCreated;
protected Callback<GameLobbyJoinRequested_t> JoinRequest;
protected Callback<LobbyEnter_t> LobbyEntered;
public static ulong CurrentLobbyID;
private void Start()
{
LobbyCreated = Callback<LobbyCreated_t>.Create(OnLobbyCreated);
JoinRequest = Callback<GameLobbyJoinRequested_t>.Create(OnJoinRequest);
LobbyEntered = Callback<LobbyEnter_t>.Create(OnLobbyEntered);
}
public static void CreateLobby()
{
SteamMatchmaking.CreateLobby(ELobbyType.k_ELobbyTypeFriendsOnly, 4);
}
private void OnLobbyCreated(LobbyCreated_t callback)
{
Debug.Log("Starting lobby creation: " + callback.m_eResult.ToString());
if (callback.m_eResult != EResult.k_EResultOK)
return;
CurrentLobbyID = callback.m_ulSteamIDLobby;
SteamMatchmaking.SetLobbyData(new CSteamID(CurrentLobbyID), "HostAddress", SteamUser.GetSteamID().ToString());
SteamMatchmaking.SetLobbyData(new CSteamID(CurrentLobbyID), "name", SteamFriends.GetPersonaName().ToString() + "'s lobby");
_fishySteamworks.SetClientAddress(SteamUser.GetSteamID().ToString());
_fishySteamworks.StartConnection(true);
Debug.Log("Lobby creation was successful");
}
private void OnJoinRequest(GameLobbyJoinRequested_t callback)
{
SteamMatchmaking.JoinLobby(callback.m_steamIDLobby);
}
private void OnLobbyEntered(LobbyEnter_t callback)
{
CurrentLobbyID = callback.m_ulSteamIDLobby;
// MainMenuManager.LobbyEntered(SteamMatchmaking.GetLobbyData(new CSteamID(CurrentLobbyID), "name"), _networkManager.IsServer);
_fishySteamworks.SetClientAddress(SteamMatchmaking.GetLobbyData(new CSteamID(CurrentLobbyID), "HostAddress"));
_fishySteamworks.StartConnection(false);
}
public static void JoinByID(CSteamID steamID)
{
Debug.Log("Attempting to join lobby with ID: " + steamID.m_SteamID);
if (SteamMatchmaking.RequestLobbyData(steamID))
SteamMatchmaking.JoinLobby(steamID);
else
Debug.Log("Failed to join lobby with ID: " + steamID.m_SteamID);
}
public static void LeaveLobby()
{
SteamMatchmaking.LeaveLobby(new CSteamID(CurrentLobbyID));
CurrentLobbyID = 0;
instance._fishySteamworks.StopConnection(false);
if (instance._networkManager.IsServer)
instance._fishySteamworks.StopConnection(true);
}
}