第一次提交
This commit is contained in:
@@ -0,0 +1,93 @@
|
||||
// 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user