Files
UnrealEngine/Engine/Source/Developer/AITestSuite/Private/BehaviorTree/TestBTService_Log.cpp
2025-05-18 13:04:45 +08:00

80 lines
2.2 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#include "BehaviorTree/TestBTService_Log.h"
#include "BehaviorTree/BlackboardComponent.h"
#include "MockAI_BT.h"
#include UE_INLINE_GENERATED_CPP_BY_NAME(TestBTService_Log)
UTestBTService_Log::UTestBTService_Log(const FObjectInitializer& ObjectInitializer) : Super(ObjectInitializer)
{
NodeName = "LogService";
INIT_SERVICE_NODE_NOTIFY_FLAGS();
LogActivation = INDEX_NONE;
LogDeactivation = INDEX_NONE;
KeyNameTick = NAME_None;
LogTick = INDEX_NONE;
KeyNameBecomeRelevant = NAME_None;
KeyNameCeaseRelevant = NAME_None;
bToggleValue = false;
// Force the service to tick every frame
Interval = 0.0f;
RandomDeviation = 0.0f;
}
void UTestBTService_Log::OnBecomeRelevant(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory)
{
Super::OnBecomeRelevant(OwnerComp, NodeMemory);
if (KeyNameBecomeRelevant != NAME_None)
{
OwnerComp.GetBlackboardComponent()->SetValueAsBool(KeyNameBecomeRelevant, bToggleValue ? !OwnerComp.GetBlackboardComponent()->GetValueAsBool(KeyNameBecomeRelevant) : true);
}
if (LogActivation >= 0)
{
UMockAI_BT::ExecutionLog.Add(LogActivation);
}
}
void UTestBTService_Log::OnCeaseRelevant(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory)
{
Super::OnCeaseRelevant(OwnerComp, NodeMemory);
if (KeyNameCeaseRelevant != NAME_None)
{
OwnerComp.GetBlackboardComponent()->SetValueAsBool(KeyNameCeaseRelevant, bToggleValue ? !OwnerComp.GetBlackboardComponent()->GetValueAsBool(KeyNameCeaseRelevant) : true);
}
if (LogDeactivation >= 0)
{
UMockAI_BT::ExecutionLog.Add(LogDeactivation);
}
}
void UTestBTService_Log::TickNode(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory, float DeltaSeconds)
{
Super::TickNode(OwnerComp, NodeMemory, DeltaSeconds);
if (KeyNameTick != NAME_None && NumTicks >= TicksDelaySetKeyNameTick)
{
OwnerComp.GetBlackboardComponent()->SetValueAsBool(KeyNameTick, bToggleValue ? !OwnerComp.GetBlackboardComponent()->GetValueAsBool(KeyNameTick) : true);
}
if (LogTick >= 0)
{
UMockAI_BT::ExecutionLog.Add(LogTick);
}
++NumTicks;
}
void UTestBTService_Log::SetFlagOnTick(FName InKeyNameTick, bool bInCallTickOnSearchStart /* = false */)
{
KeyNameTick = InKeyNameTick;
bCallTickOnSearchStart = bInCallTickOnSearchStart;
}