EBTNodeResult::Type UChooseNextWaypoint::ExecuteTask(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory) { // Get the patrol route auto ControlledPawn = OwnerComp.GetAIOwner()->GetPawn(); auto PatrolRoute = ControlledPawn->FindComponentByClass<UPatrolRoute>(); if (!ensure(PatrolRoute)) { return EBTNodeResult::Failed; } // Warn about empty patrol routes auto PatrolPoints = PatrolRoute->GetPatrolPoints(); if (PatrolPoints.Num() == 0) { UE_LOG(LogTemp, Warning, TEXT("A guard is missing patrol points.")); return EBTNodeResult::Failed; } // Set the next waypoint auto BlackboardComp = OwnerComp.GetBlackboardComponent(); auto Index = BlackboardComp->GetValueAsInt(IndexKey.SelectedKeyName); BlackboardComp->SetValueAsObject(WaypointKey.SelectedKeyName, PatrolPoints[Index]); // Cycle the index auto NextIndex = (Index + 1) % PatrolPoints.Num(); BlackboardComp->SetValueAsInt(IndexKey.SelectedKeyName, NextIndex); // UE_LOG(LogTemp, Warning, TEXT("Waypoint index: %i"), Index); return EBTNodeResult::Succeeded; }
clocktype STAT_Statistic::GetValueAsClocktype(clocktype now) { return GetValueAsInt(now); }