// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "Abilities/Tasks/AbilityTask.h" #include "Containers/Array.h" #include "Delegates/Delegate.h" #include "Engine/CollisionProfile.h" #include "Interaction/InteractionOption.h" #include "Math/MathFwd.h" #include "UObject/NameTypes.h" #include "UObject/UObjectGlobals.h" #include "AbilityTask_WaitForInteractableTargets.generated.h" class AActor; class IInteractableTarget; class UObject; class UWorld; struct FCollisionQueryParams; struct FHitResult; struct FInteractionQuery; template class TScriptInterface; DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FInteractableObjectsChangedEvent, const TArray&, InteractableOptions); UCLASS(Abstract) class UAbilityTask_WaitForInteractableTargets : public UAbilityTask { GENERATED_UCLASS_BODY() public: UPROPERTY(BlueprintAssignable) FInteractableObjectsChangedEvent InteractableObjectsChanged; protected: static void LineTrace(FHitResult& OutHitResult, const UWorld* World, const FVector& Start, const FVector& End, FName ProfileName, const FCollisionQueryParams Params); void AimWithPlayerController(const AActor* InSourceActor, FCollisionQueryParams Params, const FVector& TraceStart, float MaxRange, FVector& OutTraceEnd, bool bIgnorePitch = false) const; static bool ClipCameraRayToAbilityRange(FVector CameraLocation, FVector CameraDirection, FVector AbilityCenter, float AbilityRange, FVector& ClippedPosition); void UpdateInteractableOptions(const FInteractionQuery& InteractQuery, const TArray>& InteractableTargets); FCollisionProfileName TraceProfile; // Does the trace affect the aiming pitch bool bTraceAffectsAimPitch = true; TArray CurrentOptions; };