// © 2025 Naked People Team. All Rights Reserved. #include "NPCAIController.h" #include "NavigationSystem.h" #include "NPCTargetLocation.h" #include "AI/NavigationSystemBase.h" #include "BehaviorTree/BlackboardComponent.h" #include "Kismet/GameplayStatics.h" #include "NakedDesire/Global/NakedDesireGameMode.h" #include "NakedDesire/Player/NakedDesireCharacter.h" void ANPCAIController::SetShouldReactToPlayer(const bool Value) { Blackboard->SetValueAsBool(FName(TEXT("ShouldReactToPlayer")), Value); } void ANPCAIController::OnPossess(APawn* InPawn) { Super::OnPossess(InPawn); NavigationSystem = FNavigationSystem::GetCurrent(GetWorld()); GameMode = Cast(UGameplayStatics::GetGameMode(GetWorld())); RunBehaviorTree(BehaviorTreeAsset); const FVector SpawnLocation = InPawn->GetActorLocation(); TArray TargetActors; UGameplayStatics::GetAllActorsOfClass(GetWorld(), ANPCTargetLocation::StaticClass(), TargetActors); const int RandomIndex = FMath::RandRange(0, TargetActors.Num() - 1); Blackboard->SetValueAsVector("TargetLocation", TargetActors[RandomIndex]->GetActorLocation()); Blackboard->SetValueAsVector("SpawnLocation", SpawnLocation); PlayerCharacter = Cast(UGameplayStatics::GetPlayerCharacter(GetWorld(), 0)); Blackboard->SetValueAsObject("Player", PlayerCharacter); }