/
BindSpaceUsers (Unreal Engine)

BindSpaceUsers (Unreal Engine)

- Declaration

static UCavrnusBinding* BindSpaceUsers(FCavrnusSpaceConnection SpaceConnection, CavrnusSpaceUserEvent UserAdded, CavrnusSpaceUserEvent UserRemoved);

Delegates Options:

DECLARE_DYNAMIC_DELEGATE_OneParam(FCavrnusSpaceUserEvent, FCavrnusUser, User);

typedef TFunction<void(const FCavrnusUser&)> CavrnusSpaceUserEvent;

- Description

Throws events whenever FCavrnusUsers enter/exit the given space.

Note that UserAdded will be triggered immediately for every user that is already present.

This is the best way to maintain a list of users in, say, a UI panel. If you just want a snapshot of the current users for, say, debugging, consider calling GetCurrentSpaceUsers.

- Blueprint Sample

BindSpaceUsers.png
User List Widget

- Code Sample

The code used in the plugin by the CavrnusAvatarManager class.

CavrnusAvatarManager.h:

#pragma once #include "CoreMinimal.h" #include "CavrnusFunctionLibrary.h" #include "CavrnusAvatarManager.generated.h" // Class definition UCLASS(BlueprintType) class CAVRNUSCONNECTOR_API UCavrnusAvatarManager : public UObject { GENERATED_BODY() public: // Constructor UCavrnusAvatarManager(); UFUNCTION() void SpaceConnected(FCavrnusSpaceConnection SpaceConn); UFUNCTION() void OnUserJoined(FCavrnusUser User); UFUNCTION() void OnUserLeft(FCavrnusUser User); UFUNCTION(BlueprintCallable, Category="Cavrnus") void SwapAvatars(FCavrnusUser User, TSubclassOf<class AActor> AvatarClass); private: FString LocalUserConnectionId; FCavrnusSpaceConnected OnSpaceConnected; FCavrnusSpaceUserEvent UserAdded; FCavrnusSpaceUserEvent UserRemoved; TMap<FString, AActor*> UserMap; };

CavrnusAvatarManager.cpp:

#include "CavrnusAvatarManager.h" //=========================================================== UCavrnusAvatarManager::UCavrnusAvatarManager() { // Don't want to start relay client by loading CDO if (!IsTemplate()) { OnSpaceConnected.BindUFunction(this, GET_FUNCTION_NAME_CHECKED(UCavrnusAvatarManager, SpaceConnected)); UserAdded.BindUFunction(this, GET_FUNCTION_NAME_CHECKED(UCavrnusAvatarManager, OnUserJoined)); UserRemoved.BindUFunction(this, GET_FUNCTION_NAME_CHECKED(UCavrnusAvatarManager, OnUserLeft)); UCavrnusFunctionLibrary::AwaitAnySpaceConnection(OnSpaceConnected); } } void UCavrnusAvatarManager::SpaceConnected(FCavrnusSpaceConnection SpaceConn) { LocalUserConnectionId = SpaceConn.LocalUserConnectionId; UCavrnusFunctionLibrary::BindSpaceUsers(SpaceConn, UserAdded, UserRemoved); } void UCavrnusAvatarManager::OnUserJoined(FCavrnusUser User) { //Don't spawn an avatar for the local user if (User.UserConnectionId == LocalUserConnectionId) return; FActorSpawnParameters SpawnParams; UWorld* World = GetWorld(); if (!World) return; TSubclassOf<AActor> RemoteAvatarClass = GetRemoteAvatarClass(); if (!RemoteAvatarClass) { UE_LOG(LogCavrnusConnector, Error, TEXT("No RemoteAvatarClasses specified!")); return; } SwapAvatars(User, RemoteAvatarClass); } void UCavrnusAvatarManager::OnUserLeft(FCavrnusUser User) { AActor** FoundActor = UserMap.Find(User.UserConnectionId); if (FoundActor) { (*FoundActor)->Destroy(); } UserMap.Remove(User.UserConnectionId); }

Related content

GetCurrentSpaceUsers (Unreal Engine)
GetCurrentSpaceUsers (Unreal Engine)
More like this
AwaitLocalUser (Unreal Engine)
AwaitLocalUser (Unreal Engine)
More like this
BindSpaceUsers (.NET)
BindSpaceUsers (.NET)
More like this
GetCurrentSpaceUsers (Unity)
GetCurrentSpaceUsers (Unity)
More like this
BindSpaceUsers (Unity)
BindSpaceUsers (Unity)
More like this
BindJoinableSpaces (Unreal Engine)
BindJoinableSpaces (Unreal Engine)
More like this