// 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() : nullptr); } void SetAbilityCameraMode(TSubclassOf 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 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 DefaultInputConfigs; // Camera mode set by an ability. TSubclassOf 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; };