RealtimeStyleTransferRuntime/Source/LyraGame/Character/LyraPawnExtensionComponent.h

107 lines
3.9 KiB
C
Raw Normal View History

2022-05-23 18:41:30 +00:00
// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "CoreMinimal.h"
#include "LyraPawnComponent.h"
#include "LyraPawnExtensionComponent.generated.h"
class ULyraPawnData;
class ULyraAbilitySystemComponent;
DECLARE_DYNAMIC_MULTICAST_DELEGATE(FLyraDynamicMulticastDelegate);
/**
* ULyraPawnExtensionComponent
*
* Component used to add functionality to all Pawn classes.
*/
UCLASS()
class ULyraPawnExtensionComponent : public ULyraPawnComponent
{
GENERATED_BODY()
public:
ULyraPawnExtensionComponent(const FObjectInitializer& ObjectInitializer);
// Returns the pawn extension component if one exists on the specified actor.
UFUNCTION(BlueprintPure, Category = "Lyra|Pawn")
static ULyraPawnExtensionComponent* FindPawnExtensionComponent(const AActor* Actor) { return (Actor ? Actor->FindComponentByClass<ULyraPawnExtensionComponent>() : nullptr); }
template <class T>
const T* GetPawnData() const { return Cast<T>(PawnData); }
void SetPawnData(const ULyraPawnData* InPawnData);
UFUNCTION(BlueprintPure, Category = "Lyra|Pawn")
ULyraAbilitySystemComponent* GetLyraAbilitySystemComponent() const { return AbilitySystemComponent; }
// Should be called by the owning pawn to become the avatar of the ability system.
void InitializeAbilitySystem(ULyraAbilitySystemComponent* InASC, AActor* InOwnerActor);
// Should be called by the owning pawn to remove itself as the avatar of the ability system.
void UninitializeAbilitySystem();
// Should be called by the owning pawn when the pawn's controller changes.
void HandleControllerChanged();
// Should be called by the owning pawn when the player state has been replicated.
void HandlePlayerStateReplicated();
// Should be called by the owning pawn when the input component is setup.
void SetupPlayerInputComponent();
// Call this anytime the pawn needs to check if it's ready to be initialized (pawn data assigned, possessed, etc..).
bool CheckPawnReadyToInitialize();
// Returns true if the pawn is ready to be initialized.
UFUNCTION(BlueprintCallable, BlueprintPure = false, Category = "Lyra|Pawn", Meta = (ExpandBoolAsExecs = "ReturnValue"))
bool IsPawnReadyToInitialize() const { return bPawnReadyToInitialize; }
// Register with the OnPawnReadyToInitialize delegate and broadcast if condition is already met.
void OnPawnReadyToInitialize_RegisterAndCall(FSimpleMulticastDelegate::FDelegate Delegate);
// Register with the OnAbilitySystemInitialized delegate and broadcast if condition is already met.
void OnAbilitySystemInitialized_RegisterAndCall(FSimpleMulticastDelegate::FDelegate Delegate);
// Register with the OnAbilitySystemUninitialized delegate.
void OnAbilitySystemUninitialized_Register(FSimpleMulticastDelegate::FDelegate Delegate);
protected:
virtual void OnRegister() override;
UFUNCTION()
void OnRep_PawnData();
// Delegate fired when pawn has everything needed for initialization.
FSimpleMulticastDelegate OnPawnReadyToInitialize;
UPROPERTY(BlueprintAssignable, Meta = (DisplayName = "On Pawn Ready To Initialize"))
FLyraDynamicMulticastDelegate BP_OnPawnReadyToInitialize;
// Delegate fired when our pawn becomes the ability system's avatar actor
FSimpleMulticastDelegate OnAbilitySystemInitialized;
// Delegate fired when our pawn is removed as the ability system's avatar actor
FSimpleMulticastDelegate OnAbilitySystemUninitialized;
protected:
// Pawn data used to create the pawn. Specified from a spawn function or on a placed instance.
UPROPERTY(EditInstanceOnly, ReplicatedUsing = OnRep_PawnData, Category = "Lyra|Pawn")
const ULyraPawnData* PawnData;
// Pointer to the ability system component that is cached for convenience.
UPROPERTY()
ULyraAbilitySystemComponent* AbilitySystemComponent;
// True when the pawn has everything needed for initialization.
int32 bPawnReadyToInitialize : 1;
};