94 lines
2.7 KiB
C++
94 lines
2.7 KiB
C++
// Copyright 2025 https://yuewu.dev/en All Rights Reserved.
|
|
|
|
|
|
#include "Collision/DEPRECATED_GCS_CollisionTraceInstance.h"
|
|
|
|
#include "GCS_LogChannels.h"
|
|
#include "Collision/GCS_TraceSystemComponent.h"
|
|
#include "Components/PrimitiveComponent.h"
|
|
|
|
void UDEPRECATED_GCS_CollisionTraceInstance::OnTraceBeginPlay_Implementation()
|
|
{
|
|
ActiveTime = 0.0f;
|
|
HitActors.Empty();
|
|
}
|
|
|
|
void UDEPRECATED_GCS_CollisionTraceInstance::OnTraceEndPlay_Implementation()
|
|
{
|
|
ActiveTime = 0.0f;
|
|
bTraceActive = false;
|
|
TracePrimitiveComponent = nullptr;
|
|
TracePrimitiveComponentSocketNames.Empty();
|
|
HitActors.Empty();
|
|
}
|
|
|
|
void UDEPRECATED_GCS_CollisionTraceInstance::BroadcastHit(const FHitResult& HitResult)
|
|
{
|
|
if (!bTraceActive)
|
|
{
|
|
UE_LOG(LogGCS_Collision, Warning, TEXT("Hit while inactive,%s"), *TraceOwner->GetName());
|
|
}
|
|
}
|
|
|
|
void UDEPRECATED_GCS_CollisionTraceInstance::BroadcastStateChanged(bool bNewState)
|
|
{
|
|
OnTraceStateChanged(bNewState);
|
|
}
|
|
|
|
void UDEPRECATED_GCS_CollisionTraceInstance::OnTraceTick_Implementation(float DeltaSeconds)
|
|
{
|
|
ActiveTime += DeltaSeconds;
|
|
}
|
|
|
|
void UDEPRECATED_GCS_CollisionTraceInstance::OnTraceStateChanged_Implementation(bool bNewState)
|
|
{
|
|
bTraceActive = bNewState;
|
|
HitActors.Empty();
|
|
}
|
|
|
|
void UDEPRECATED_GCS_CollisionTraceInstance::SetTraceMeshInfo(UPrimitiveComponent* NewPrimitiveComponent, TArray<FName> PrimitiveComponentSocketNames)
|
|
{
|
|
TracePrimitiveComponent = NewPrimitiveComponent;
|
|
TracePrimitiveComponentSocketNames = PrimitiveComponentSocketNames;
|
|
}
|
|
|
|
bool UDEPRECATED_GCS_CollisionTraceInstance::CanHitActor_Implementation(const AActor* ActorToCheck) const
|
|
{
|
|
//in active trace can not hit anything. TODO make it checkf?
|
|
if (!bTraceActive)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
return ActorToCheck != GetTraceSourceActor() && ActorToCheck != TraceOwner && !HitActors.Contains(ActorToCheck);
|
|
}
|
|
|
|
AActor* UDEPRECATED_GCS_CollisionTraceInstance::GetTraceSourceActor() const
|
|
{
|
|
return TracePrimitiveComponent->GetOwner();
|
|
}
|
|
|
|
void UDEPRECATED_GCS_CollisionTraceInstance::ToggleTraceState(bool bNewState)
|
|
{
|
|
if (TraceOwner && bTraceActive != bNewState)
|
|
{
|
|
BroadcastStateChanged(bNewState);
|
|
}
|
|
}
|
|
|
|
void UDEPRECATED_GCS_CollisionTraceInstance::OnTraceHit_Implementation(const FHitResult& HitResult)
|
|
{
|
|
if (HitResult.GetHitObjectHandle().IsValid())
|
|
{
|
|
if (CanHitActor(HitResult.GetActor()))
|
|
{
|
|
UE_LOG(LogGCS_Collision, VeryVerbose, TEXT("%s's Trace(%s, SourceActor:%s) hit actor(%s,Comp:%s)"), *TraceOwner->GetName(),
|
|
*(TraceGameplayTag.IsValid()?TraceGameplayTag.ToString():GetClass()->GetName()),
|
|
*GetTraceSourceActor()->GetName(),
|
|
*HitResult.GetActor()->GetName(), *(HitResult.Component.IsValid()?HitResult.GetComponent()->GetName():TEXT("Null")));
|
|
HitActors.Add(HitResult.GetActor());
|
|
BroadcastHit(HitResult);
|
|
}
|
|
}
|
|
}
|