// 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 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); } } }