RealtimeStyleTransferRuntime/Source/LyraGame/Interaction/Abilities/GameplayAbilityTargetActor_...

53 lines
2.1 KiB
C++
Raw Normal View History

2022-05-23 18:41:30 +00:00
// Copyright Epic Games, Inc. All Rights Reserved.
#include "GameplayAbilityTargetActor_Interact.h"
#include "DrawDebugHelpers.h"
#include "GameFramework/LightWeightInstanceSubsystem.h"
AGameplayAbilityTargetActor_Interact::AGameplayAbilityTargetActor_Interact(const FObjectInitializer& ObjectInitializer)
: Super(ObjectInitializer)
{
}
FHitResult AGameplayAbilityTargetActor_Interact::PerformTrace(AActor* InSourceActor)
{
bool bTraceComplex = false;
TArray<AActor*> ActorsToIgnore;
ActorsToIgnore.Add(InSourceActor);
FCollisionQueryParams Params(SCENE_QUERY_STAT(AGameplayAbilityTargetActor_SingleLineTrace), bTraceComplex);
Params.bReturnPhysicalMaterial = true;
Params.AddIgnoredActors(ActorsToIgnore);
FVector TraceStart = StartLocation.GetTargetingTransform().GetLocation();// InSourceActor->GetActorLocation();
FVector TraceEnd;
AimWithPlayerController(InSourceActor, Params, TraceStart, TraceEnd); //Effective on server and launching client only
// ------------------------------------------------------
FHitResult ReturnHitResult;
LineTraceWithFilter(ReturnHitResult, InSourceActor->GetWorld(), Filter, TraceStart, TraceEnd, TraceProfile.Name, Params);
//Default to end of trace line if we don't hit anything.
if (!ReturnHitResult.bBlockingHit)
{
ReturnHitResult.Location = TraceEnd;
}
if (AGameplayAbilityWorldReticle* LocalReticleActor = ReticleActor.Get())
{
const bool bHitActor = (ReturnHitResult.bBlockingHit && (ReturnHitResult.HitObjectHandle.IsValid()));
const FVector ReticleLocation = (bHitActor && LocalReticleActor->bSnapToTargetedActor) ? FLightWeightInstanceSubsystem::Get().GetLocation(ReturnHitResult.HitObjectHandle) : ReturnHitResult.Location;
LocalReticleActor->SetActorLocation(ReticleLocation);
LocalReticleActor->SetIsTargetAnActor(bHitActor);
}
#if ENABLE_DRAW_DEBUG
if (bDebug)
{
DrawDebugLine(GetWorld(), TraceStart, TraceEnd, FColor::Green);
DrawDebugSphere(GetWorld(), TraceEnd, 100.0f, 16, FColor::Green);
}
#endif // ENABLE_DRAW_DEBUG
return ReturnHitResult;
}