107 lines
3.9 KiB
C++
107 lines
3.9 KiB
C++
// 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;
|
|
};
|