Table of Contents

Class LobbyPlayerStore<TPayload>

Namespace
Wyn.Lobby
Assembly
Wyn.Lobby.Runtime.dll

Manages a NetworkList of LobbyPlayerState for lobby-phase synchronization. This is a NetworkBehaviour — attach it to the same NetworkObject as your NetworkManager or a dedicated lobby prefab spawned at session start.

Subclass this with your specific TPayload to use it:

public class MyLobbyPlayerStore : LobbyPlayerStore<MyPayload> { }
public abstract class LobbyPlayerStore<TPayload> : NetworkBehaviour where TPayload : unmanaged, INetworkSerializable, IEquatable<TPayload>

Type Parameters

TPayload

Game-specific player data type.

Inheritance
Object
Component
Behaviour
MonoBehaviour
NetworkBehaviour
LobbyPlayerStore<TPayload>
Inherited Members
NetworkBehaviour.__rpc_func_table
NetworkBehaviour.__rpc_name_table
NetworkBehaviour.__rpc_exec_stage
NetworkBehaviour.NetworkVariableFields
NetworkBehaviour.__getTypeName()
NetworkBehaviour.__createNativeList<T>()
NetworkBehaviour.OnNetworkPreSpawn(ref NetworkManager)
NetworkBehaviour.OnNetworkPostSpawn()
NetworkBehaviour.InternalOnNetworkPostSpawn()
NetworkBehaviour.OnNetworkSessionSynchronized()
NetworkBehaviour.InternalOnNetworkSessionSynchronized()
NetworkBehaviour.OnInSceneObjectsSpawned()
NetworkBehaviour.OnNetworkPreDespawn()
NetworkBehaviour.OnGainedOwnership()
NetworkBehaviour.OnLostOwnership()
NetworkBehaviour.OnNetworkObjectParentChanged(NetworkObject)
NetworkBehaviour.__initializeVariables()
NetworkBehaviour.__initializeRpcs()
NetworkBehaviour.OnSynchronize<T>(ref BufferSerializer<T>)
NetworkBehaviour.OnDestroy()
NetworkBehaviour.NetworkManager
NetworkBehaviour.RpcTarget
NetworkBehaviour.IsLocalPlayer
NetworkBehaviour.IsOwner
NetworkBehaviour.IsServer
NetworkBehaviour.HasAuthority
NetworkBehaviour.IsSessionOwner
NetworkBehaviour.ServerIsHost
NetworkBehaviour.IsClient
NetworkBehaviour.IsHost
NetworkBehaviour.IsOwnedByServer
NetworkBehaviour.IsSpawned
NetworkBehaviour.NetworkObject
NetworkBehaviour.HasNetworkObject
NetworkBehaviour.NetworkObjectId
NetworkBehaviour.NetworkBehaviourId
NetworkBehaviour.OwnerClientId
NetworkBehaviour.m_TargetIdBeingSynchronized
MonoBehaviour.IsInvoking()
MonoBehaviour.CancelInvoke()
MonoBehaviour.StopCoroutine(Coroutine)
MonoBehaviour.StopAllCoroutines()
MonoBehaviour.destroyCancellationToken
MonoBehaviour.useGUILayout
MonoBehaviour.didStart
MonoBehaviour.didAwake
MonoBehaviour.runInEditMode
Behaviour.enabled
Behaviour.isActiveAndEnabled
Component.GetComponent<T>()
Component.TryGetComponent<T>(out T)
Component.GetComponentInChildren<T>()
Component.GetComponentsInChildren<T>()
Component.GetComponentInParent<T>()
Component.GetComponentsInParent<T>()
Component.GetComponents<T>()
Component.GetComponentIndex()
Component.CompareTag(TagHandle)
Component.transform
Component.transformHandle
Component.gameObject
Component.tag
Object.GetEntityId()
Object.GetInstanceID()
Object.GetHashCode()
Object.InstantiateAsync<T>(T)
Object.InstantiateAsync<T>(T, Transform)
Object.InstantiateAsync<T>(T, Vector3, Quaternion)
Object.InstantiateAsync<T>(T, Transform, Vector3, Quaternion)
Object.Instantiate(Object, Vector3, Quaternion)
Object.Instantiate(Object, Vector3, Quaternion, Transform)
Object.Instantiate(Object)
Object.Instantiate(Object, Scene)
Object.Instantiate<T>(T, InstantiateParameters)
Object.Instantiate<T>(T, Vector3, Quaternion, InstantiateParameters)
Object.Instantiate(Object, Transform)
Object.Instantiate<T>(T)
Object.Instantiate<T>(T, Vector3, Quaternion)
Object.Instantiate<T>(T, Vector3, Quaternion, Transform)
Object.Instantiate<T>(T, Transform)
Object.Destroy(Object)
Object.DestroyImmediate(Object)
Object.DontDestroyOnLoad(Object)
Object.DestroyObject(Object)
Object.FindObjectsOfType<T>()
Object.FindObjectsByType<T>(FindObjectsSortMode)
Object.FindObjectsByType<T>(FindObjectsInactive, FindObjectsSortMode)
Object.FindObjectOfType<T>()
Object.FindFirstObjectByType<T>()
Object.FindAnyObjectByType<T>()
Object.FindFirstObjectByType<T>(FindObjectsInactive)
Object.FindAnyObjectByType<T>(FindObjectsInactive)
Object.ToString()
Object.name
Object.hideFlags

Properties

PlayerCount

Number of players currently in the lobby.

public int PlayerCount { get; }

Property Value

int

Players

protected abstract NetworkList<LobbyPlayerState<TPayload>> Players { get; }

Property Value

NetworkList<LobbyPlayerState<TPayload>>

ReadyCount

Number of players who are ready.

public int ReadyCount { get; }

Property Value

int

Methods

CanStartGame(out string)

Check if all players are ready and the game can start. Uses the IPlayerRule if available.

public bool CanStartGame(out string reason)

Parameters

reason string

Returns

bool

GetAllPlayers()

Get a copy of all player states as an array.

public LobbyPlayerState<TPayload>[] GetAllPlayers()

Returns

LobbyPlayerState<TPayload>[]

GetPlayerRule()

Override this to provide a custom rule for payload validation and start conditions. Return null to use default behavior (all players must be ready).

protected virtual IPlayerRule<TPayload> GetPlayerRule()

Returns

IPlayerRule<TPayload>

OnNetworkDespawn()

public override void OnNetworkDespawn()

OnNetworkSpawn()

public override void OnNetworkSpawn()

SetReadyRpc(bool, RpcParams)

[ServerRpc] Set the ready state for the calling player.

[Rpc(SendTo.Server, InvokePermission = RpcInvokePermission.Everyone)]
public void SetReadyRpc(bool isReady, RpcParams rpcParams = default)

Parameters

isReady bool
rpcParams RpcParams

UpdatePayloadRpc(TPayload, RpcParams)

[ServerRpc] Update the payload for the calling player. Override GetPlayerRule() to provide validation logic.

[Rpc(SendTo.Server, InvokePermission = RpcInvokePermission.Everyone)]
public void UpdatePayloadRpc(TPayload payload, RpcParams rpcParams = default)

Parameters

payload TPayload
rpcParams RpcParams

Events

OnPlayersUpdated

Fired when the players list changes. Provides a snapshot array.

public event Action<LobbyPlayerState<TPayload>[]> OnPlayersUpdated

Event Type

Action<LobbyPlayerState<TPayload>[]>