mirror of
https://github.com/Facepunch/Facepunch.Steamworks.git
synced 2024-12-28 15:45:29 +03:00
95% bound SteamParties, even though I am doubting its usefulness
This commit is contained in:
parent
93c4de7eda
commit
068beddc04
@ -42,6 +42,7 @@ public static void Init( uint appid )
|
|||||||
SteamInventory.InstallEvents();
|
SteamInventory.InstallEvents();
|
||||||
SteamNetworking.InstallEvents();
|
SteamNetworking.InstallEvents();
|
||||||
SteamMatchmaking.InstallEvents();
|
SteamMatchmaking.InstallEvents();
|
||||||
|
SteamParties.InstallEvents();
|
||||||
|
|
||||||
RunCallbacksAsync();
|
RunCallbacksAsync();
|
||||||
}
|
}
|
||||||
@ -82,6 +83,7 @@ public static void Shutdown()
|
|||||||
SteamInventory.Shutdown();
|
SteamInventory.Shutdown();
|
||||||
SteamNetworking.Shutdown();
|
SteamNetworking.Shutdown();
|
||||||
SteamMatchmaking.Shutdown();
|
SteamMatchmaking.Shutdown();
|
||||||
|
SteamParties.Shutdown();
|
||||||
|
|
||||||
SteamAPI.Shutdown();
|
SteamAPI.Shutdown();
|
||||||
}
|
}
|
||||||
|
74
Facepunch.Steamworks/SteamParties.cs
Normal file
74
Facepunch.Steamworks/SteamParties.cs
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Steamworks.Data;
|
||||||
|
|
||||||
|
namespace Steamworks
|
||||||
|
{
|
||||||
|
public static class SteamParties
|
||||||
|
{
|
||||||
|
static ISteamParties _internal;
|
||||||
|
internal static ISteamParties Internal
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if ( _internal == null )
|
||||||
|
_internal = new ISteamParties();
|
||||||
|
|
||||||
|
return _internal;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
internal static void Shutdown()
|
||||||
|
{
|
||||||
|
_internal = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
internal static void InstallEvents()
|
||||||
|
{
|
||||||
|
AvailableBeaconLocationsUpdated_t.Install( x => OnBeaconLocationsUpdated?.Invoke() );
|
||||||
|
ActiveBeaconsUpdated_t.Install( x => OnBeaconLocationsUpdated?.Invoke() );
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The list of possible Party beacon locations has changed
|
||||||
|
/// </summary>
|
||||||
|
public static event Action OnBeaconLocationsUpdated;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The list of active beacons may have changed
|
||||||
|
/// </summary>
|
||||||
|
public static event Action OnActiveBeaconsUpdated;
|
||||||
|
|
||||||
|
|
||||||
|
public static int ActiveBeaconCount => (int) Internal.GetNumActiveBeacons();
|
||||||
|
|
||||||
|
public static IEnumerable<PartyBeacon> ActiveBeacons
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
for ( uint i = 0; i < ActiveBeaconCount; i++ )
|
||||||
|
{
|
||||||
|
yield return new PartyBeacon
|
||||||
|
{
|
||||||
|
Id = Internal.GetBeaconByIndex( i )
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Create a new party beacon and activate it in the selected location.
|
||||||
|
/// When people begin responding to your beacon, Steam will send you
|
||||||
|
/// OnPartyReservation callbacks to let you know who is on the way.
|
||||||
|
/// </summary>
|
||||||
|
//public async Task<PartyBeacon?> CreateBeacon( int slots, string connectString, string meta )
|
||||||
|
//{
|
||||||
|
// var result = await Internal.CreateBeacon( (uint)slots, null, connectString, meta );
|
||||||
|
// if ( !result.HasValue ) return null;
|
||||||
|
//}
|
||||||
|
|
||||||
|
// TODO - is this useful to anyone, or is it a load of shit?
|
||||||
|
}
|
||||||
|
}
|
82
Facepunch.Steamworks/Structs/PartyBeacon.cs
Normal file
82
Facepunch.Steamworks/Structs/PartyBeacon.cs
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
using System.Threading.Tasks;
|
||||||
|
using Steamworks.Data;
|
||||||
|
|
||||||
|
namespace Steamworks
|
||||||
|
{
|
||||||
|
public struct PartyBeacon
|
||||||
|
{
|
||||||
|
static ISteamParties Internal => SteamParties.Internal;
|
||||||
|
|
||||||
|
internal PartyBeaconID_t Id;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Creator of the beacon
|
||||||
|
/// </summary>
|
||||||
|
public SteamId Owner
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
var owner = default( SteamId );
|
||||||
|
var location = default( SteamPartyBeaconLocation_t );
|
||||||
|
var sb = Helpers.TakeStringBuilder();
|
||||||
|
Internal.GetBeaconDetails( Id, ref owner, ref location, sb, sb.Capacity );
|
||||||
|
return owner;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Creator of the beacon
|
||||||
|
/// </summary>
|
||||||
|
public string MetaData
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
var owner = default( SteamId );
|
||||||
|
var location = default( SteamPartyBeaconLocation_t );
|
||||||
|
var sb = Helpers.TakeStringBuilder();
|
||||||
|
Internal.GetBeaconDetails( Id, ref owner, ref location, sb, sb.Capacity );
|
||||||
|
return sb.ToString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Will attempt to join the party. If successful will return a connection string.
|
||||||
|
/// If failed, will return null
|
||||||
|
/// </summary>
|
||||||
|
public async Task<string> JoinAsync()
|
||||||
|
{
|
||||||
|
var result = await Internal.JoinParty( Id );
|
||||||
|
if ( !result.HasValue || result.Value.Result != Result.OK )
|
||||||
|
return null;
|
||||||
|
|
||||||
|
return result.Value.ConnectString;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// When a user follows your beacon, Steam will reserve one of the open party slots for them, and send your game a ReservationNotification callback.
|
||||||
|
/// When that user joins your party, call OnReservationCompleted to notify Steam that the user has joined successfully
|
||||||
|
/// </summary>
|
||||||
|
public void OnReservationCompleted( SteamId steamid )
|
||||||
|
{
|
||||||
|
Internal.OnReservationCompleted( Id, steamid );
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// To cancel a reservation (due to timeout or user input), call this.
|
||||||
|
/// Steam will open a new reservation slot.
|
||||||
|
/// Note: The user may already be in-flight to your game, so it's possible they will still connect and try to join your party.
|
||||||
|
/// </summary>
|
||||||
|
public void CancelReservation( SteamId steamid )
|
||||||
|
{
|
||||||
|
Internal.CancelReservation( Id, steamid );
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Turn off the beacon
|
||||||
|
/// </summary>
|
||||||
|
public bool Destroy()
|
||||||
|
{
|
||||||
|
return Internal.DestroyBeacon( Id );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user