Files
2026-03-04 10:03:45 +08:00

100 lines
2.5 KiB
C#

using HeathenEngineering.SteamApi.Foundation;
using Steamworks;
using UnityEngine;
using UnityEngine.Serialization;
using UnityEngine.UI;
namespace HeathenEngineering.SteamApi.Networking.Demo
{
public class FindMatchButton : MonoBehaviour
{
[FormerlySerializedAs("SteamSettings")]
public SteamSettings steamSettings;
[FormerlySerializedAs("LobbySettings")]
public SteamworksLobbySettings lobbySettings;
[FormerlySerializedAs("QuickMatchFilter")]
public LobbyHunterFilter quickMatchFilter;
public Button quickMatchButton;
public Text quickMatchLabel;
private void Update()
{
quickMatchButton.interactable = !lobbySettings.Manager.IsSearching && !lobbySettings.Manager.IsQuickSearching;
if (quickMatchButton.interactable)
{
if (!lobbySettings.InLobby)
{
quickMatchLabel.text = "Quick Match";
}
else
{
quickMatchLabel.text = "Leave Lobby";
}
}
else
{
quickMatchLabel.text = "Searching";
}
}
public void SimpleFindMatch()
{
if (!lobbySettings.InLobby)
{
Debug.Log("[FindMatchButton.SimpleFindMatch] Startomg a quickmatch search for a lobby that matches the filter defined in [FindMatchButton.quickMatchFilter].");
lobbySettings.Manager.QuickMatch(quickMatchFilter);
}
else
{
lobbySettings.LeaveAllLobbies();
}
}
public void CreateMatch()
{
Debug.Log("[FindMatchButton.CreateMatch] Quick match found 0 matches, creating a new lobby with 4 slots.");
lobbySettings.CreateLobby(ELobbyType.k_ELobbyTypePublic, 4);
}
public void GetHelp()
{
Application.OpenURL("https://partner.steamgames.com/doc/features/multiplayer/matchmaking");
}
public void KickMember(string id)
{
lobbySettings.KickMember(new CSteamID(ulong.Parse(id)));
}
public void OnEnterLobby(SteamLobby lobby)
{
if (lobby.IsHost)
{
lobby.Name = steamSettings.client.user.DisplayName + "'s Lobby";
foreach (LobbyHunterStringFilter stringValue in quickMatchFilter.stringValues)
{
lobby[stringValue.key] = stringValue.value;
}
foreach (LobbyHunterNumericFilter numberValue in quickMatchFilter.numberValues)
{
lobby[numberValue.key] = numberValue.value.ToString();
}
foreach (LobbyHunterNearFilter nearValue in quickMatchFilter.nearValues)
{
lobby[nearValue.key] = nearValue.value.ToString();
}
}
Debug.Log("Entered lobby: " + lobby.Name);
}
public void OnExitLobby(SteamLobby lobby)
{
Debug.Log("Exiting lobby: " + lobby.Name);
}
}
}