// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "AudioMixerBlueprintLibrary.h" #include "CommonLocalPlayer.h" #include "Containers/UnrealString.h" #include "GenericTeamAgentInterface.h" #include "HAL/Platform.h" #include "Teams/LyraTeamAgentInterface.h" #include "UObject/UObjectGlobals.h" #include "UObject/WeakObjectPtrTemplates.h" #include "LyraLocalPlayer.generated.h" class APlayerController; class UInputMappingContext; class ULyraSettingsLocal; class ULyraSettingsShared; class UObject; class UWorld; struct FFrame; struct FSwapAudioOutputResult; /** * ULyraLocalPlayer */ UCLASS() class LYRAGAME_API ULyraLocalPlayer : public UCommonLocalPlayer, public ILyraTeamAgentInterface { GENERATED_BODY() public: ULyraLocalPlayer(); //~UObject interface virtual void PostInitProperties() override; //~End of UObject interface //~UPlayer interface virtual void SwitchController(class APlayerController* PC) override; //~End of UPlayer interface //~ULocalPlayer interface virtual bool SpawnPlayActor(const FString& URL, FString& OutError, UWorld* InWorld) override; virtual void InitOnlineSession() override; //~End of ULocalPlayer interface //~ILyraTeamAgentInterface interface virtual void SetGenericTeamId(const FGenericTeamId& NewTeamID) override; virtual FGenericTeamId GetGenericTeamId() const override; virtual FOnLyraTeamIndexChangedDelegate* GetOnTeamIndexChangedDelegate() override; //~End of ILyraTeamAgentInterface interface public: UFUNCTION() ULyraSettingsLocal* GetLocalSettings() const; UFUNCTION() ULyraSettingsShared* GetSharedSettings() const; protected: void OnAudioOutputDeviceChanged(const FString& InAudioOutputDeviceId); UFUNCTION() void OnCompletedAudioDeviceSwap(const FSwapAudioOutputResult& SwapResult); private: void OnPlayerControllerChanged(APlayerController* NewController); UFUNCTION() void OnControllerChangedTeam(UObject* TeamAgent, int32 OldTeam, int32 NewTeam); private: UPROPERTY(Transient) mutable TObjectPtr SharedSettings; UPROPERTY(Transient) mutable TObjectPtr InputMappingContext; UPROPERTY() FOnLyraTeamIndexChangedDelegate OnTeamChangedDelegate; UPROPERTY() TWeakObjectPtr LastBoundPC; };