RealtimeStyleTransferRuntime/Source/LyraGame/Character/LyraHeroComponent.h

100 lines
3.4 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "CoreMinimal.h"
#include "Character/LyraPawnComponent.h"
#include "Camera/LyraCameraMode.h"
#include "GameplayTagContainer.h"
#include "GameplayAbilitySpec.h"
#include "Input/LyraMappableConfigPair.h"
#include "LyraHeroComponent.generated.h"
class ALyraPlayerState;
class UInputComponent;
struct FInputActionValue;
class ULyraInputConfig;
/**
* ULyraHeroComponent
*
* A component used to create a player controlled pawns (characters, vehicles, etc..).
*/
UCLASS(Blueprintable, Meta=(BlueprintSpawnableComponent))
class ULyraHeroComponent : public ULyraPawnComponent
{
GENERATED_BODY()
public:
ULyraHeroComponent(const FObjectInitializer& ObjectInitializer);
// Returns the hero component if one exists on the specified actor.
UFUNCTION(BlueprintPure, Category = "Lyra|Hero")
static ULyraHeroComponent* FindHeroComponent(const AActor* Actor) { return (Actor ? Actor->FindComponentByClass<ULyraHeroComponent>() : nullptr); }
void SetAbilityCameraMode(TSubclassOf<ULyraCameraMode> CameraMode, const FGameplayAbilitySpecHandle& OwningSpecHandle);
void ClearAbilityCameraMode(const FGameplayAbilitySpecHandle& OwningSpecHandle);
void AddAdditionalInputConfig(const ULyraInputConfig* InputConfig);
void RemoveAdditionalInputConfig(const ULyraInputConfig* InputConfig);
/** True if this has completed OnPawnReadyToInitialize so is prepared for late-added features */
bool HasPawnInitialized() const;
/** True if this player has sent the BindInputsNow event and is prepared for bindings */
bool IsReadyToBindInputs() const;
static const FName NAME_BindInputsNow;
protected:
virtual void OnRegister() override;
virtual bool IsPawnComponentReadyToInitialize() const override;
void OnPawnReadyToInitialize();
virtual void BeginPlay() override;
virtual void EndPlay(const EEndPlayReason::Type EndPlayReason) override;
virtual void InitializePlayerInput(UInputComponent* PlayerInputComponent);
void Input_AbilityInputTagPressed(FGameplayTag InputTag);
void Input_AbilityInputTagReleased(FGameplayTag InputTag);
void Input_Move(const FInputActionValue& InputActionValue);
void Input_LookMouse(const FInputActionValue& InputActionValue);
void Input_LookStick(const FInputActionValue& InputActionValue);
void Input_Crouch(const FInputActionValue& InputActionValue);
void Input_AutoRun(const FInputActionValue& InputActionValue);
TSubclassOf<ULyraCameraMode> DetermineCameraMode() const;
void OnInputConfigActivated(const FLoadedMappableConfigPair& ConfigPair);
void OnInputConfigDeactivated(const FLoadedMappableConfigPair& ConfigPair);
protected:
/**
* Input Configs that should be added to this player when initalizing the input.
*
* NOTE: You should only add to this if you do not have a game feature plugin accessible to you.
* If you do, then use the GameFeatureAction_AddInputConfig instead.
*/
UPROPERTY(EditAnywhere)
TArray<FMappableConfigPair> DefaultInputConfigs;
// Camera mode set by an ability.
TSubclassOf<ULyraCameraMode> AbilityCameraMode;
// Spec handle for the last ability to set a camera mode.
FGameplayAbilitySpecHandle AbilityCameraModeOwningSpecHandle;
// True when the pawn has fully finished initialization
bool bPawnHasInitialized;
// True when player input bindings have been applyed, will never be true for non-players
bool bReadyToBindInputs;
};