// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "CoreMinimal.h" #include "GameFramework/PlayerController.h" #include "CommonPlayerController.h" #include "Camera/LyraCameraAssistInterface.h" #include "Teams/LyraTeamAgentInterface.h" #include "LyraPlayerController.generated.h" class ULyraSettingsShared; class ALyraPlayerState; class ULyraAbilitySystemComponent; class ALyraHUD; class APawn; /** * ALyraPlayerController * * The base player controller class used by this project. */ UCLASS(Config = Game, Meta = (ShortTooltip = "The base player controller class used by this project.")) class ALyraPlayerController : public ACommonPlayerController, public ILyraCameraAssistInterface, public ILyraTeamAgentInterface { GENERATED_BODY() public: ALyraPlayerController(const FObjectInitializer& ObjectInitializer = FObjectInitializer::Get()); UFUNCTION(BlueprintCallable, Category = "Lyra|PlayerController") ALyraPlayerState* GetLyraPlayerState() const; UFUNCTION(BlueprintCallable, Category = "Lyra|PlayerController") ULyraAbilitySystemComponent* GetLyraAbilitySystemComponent() const; UFUNCTION(BlueprintCallable, Category = "Lyra|PlayerController") ALyraHUD* GetLyraHUD() const; // Run a cheat command on the server. UFUNCTION(Reliable, Server, WithValidation) void ServerCheat(const FString& Msg); // Run a cheat command on the server for all players. UFUNCTION(Reliable, Server, WithValidation) void ServerCheatAll(const FString& Msg); //~AActor interface virtual void PreInitializeComponents() override; virtual void BeginPlay() override; virtual void EndPlay(const EEndPlayReason::Type EndPlayReason) override; //~End of AActor interface //~AController interface virtual void OnUnPossess() override; //~End of AController interface //~APlayerController interface virtual void ReceivedPlayer() override; virtual void PlayerTick(float DeltaTime) override; //~End of APlayerController interface //~ILyraCameraAssistInterface interface virtual void OnCameraPenetratingTarget() override; //~End of ILyraCameraAssistInterface interface //~ACommonPlayerController interface virtual void OnPossess(APawn* InPawn) override; //~End of ACommonPlayerController interface //~ILyraTeamAgentInterface interface virtual void SetGenericTeamId(const FGenericTeamId& NewTeamID) override; virtual FGenericTeamId GetGenericTeamId() const override; virtual FOnLyraTeamIndexChangedDelegate* GetOnTeamIndexChangedDelegate() override; //~End of ILyraTeamAgentInterface interface UFUNCTION(BlueprintCallable, Category = "Lyra|Character") void SetIsAutoRunning(const bool bEnabled); UFUNCTION(BlueprintCallable, Category = "Lyra|Character") bool GetIsAutoRunning() const; private: UPROPERTY() FOnLyraTeamIndexChangedDelegate OnTeamChangedDelegate; UPROPERTY() APlayerState* LastSeenPlayerState; private: UFUNCTION() void OnPlayerStateChangedTeam(UObject* TeamAgent, int32 OldTeam, int32 NewTeam); protected: // Called when the player state is set or cleared virtual void OnPlayerStateChanged(); private: void BroadcastOnPlayerStateChanged(); protected: //~AController interface virtual void InitPlayerState() override; virtual void CleanupPlayerState() override; virtual void OnRep_PlayerState() override; //~End of AController interface //~APlayerController interface virtual void SetPlayer(UPlayer* InPlayer) override; virtual void AddCheats(bool bForce) override; virtual void UpdateForceFeedback(IInputInterface* InputInterface, const int32 ControllerId) override; virtual void UpdateHiddenComponents(const FVector& ViewLocation, TSet& OutHiddenComponents) override; virtual void PreProcessInput(const float DeltaTime, const bool bGamePaused) override; virtual void PostProcessInput(const float DeltaTime, const bool bGamePaused) override; //~End of APlayerController interface void OnSettingsChanged(ULyraSettingsShared* Settings); void OnStartAutoRun(); void OnEndAutoRun(); UFUNCTION(BlueprintImplementableEvent, meta=(DisplayName="OnStartAutoRun")) void K2_OnStartAutoRun(); UFUNCTION(BlueprintImplementableEvent, meta=(DisplayName="OnEndAutoRun")) void K2_OnEndAutoRun(); bool bHideViewTargetPawnNextFrame = false; }; // A player controller used for replay capture and playback UCLASS() class ALyraReplayPlayerController : public ALyraPlayerController { GENERATED_BODY() virtual void SetPlayer(UPlayer* InPlayer) override; };