void ACosmicBlasterCharacter::ScanForInteractables()
{
FHitResult HitResult;
`FVector Start = FollowCamera->GetComponentLocation();`
`FVector End = Start + (FollowCamera->GetComponentRotation().Vector() * 400.F);`
`TArray<TEnumAsByte<EObjectTypeQuery>> TraceObjects;`
`TArray<AActor*> ActorsToIgnore;`
`ActorsToIgnore.Add(this);`
`ActorsToIgnore.Add(Combat->EquippedWeapon);`
`ActorsToIgnore.Add(Combat->SecondaryWeapon);`
`TraceObjects.Add(UEngineTypes::ConvertToObjectType(ECC_WorldStatic));`
TraceObjects.Add(UEngineTypes::ConvertToObjectType(ECC_WorldDynamic));
`const bool bIsInteractable = UKismetSystemLibrary::LineTraceSingleForObjects(`
`GetWorld(),`
`Start,`
`End,`
`TraceObjects,`
`true,`
`ActorsToIgnore,`
`EDrawDebugTrace::ForDuration,`
`HitResult,`
`true`
);
if (bIsInteractable)
{
if (HitResult.GetActor())
{
if (HitResult.GetActor()->GetClass()->ImplementsInterface(UInteractInterface::StaticClass()))
{
IInteractInterface::Execute_InteractableFound(HitResult.GetActor());
}
}
}
else
{
Clear.Broadcast();
}
}
void ACosmicBlasterCharacter::EndPlay(const EEndPlayReason::Type EndPlayReason)
{
Super::EndPlay(EndPlayReason);
`GetWorldTimerManager().ClearAllTimersForObject(this);`
`UKismetSystemLibrary::QuitGame(GetWorld(), 0, EQuitPreference::Quit, false);`
}