// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "CoreMinimal.h" #include "UObject/ObjectMacros.h" #include "Abilities/Tasks/AbilityTask.h" #include "Engine/EngineTypes.h" #include "CollisionQueryParams.h" #include "WorldCollision.h" #include "Engine/CollisionProfile.h" #include "Abilities/GameplayAbilityTargetDataFilter.h" #include "Interaction/InteractionOption.h" #include "Interaction/InteractionQuery.h" #include "Interaction/IInteractableTarget.h" #include "AbilityTask_WaitForInteractableTargets.generated.h" class AActor; class UPrimitiveComponent; class UGameplayAbility; 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; };