EBTNodeResult::Type URandomWander::ExecuteTask(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory) { UBlackboardComponent* Blackboard = OwnerComp.GetBlackboardComponent(); if (!GetWorld()) { return EBTNodeResult::Failed; } FVector NewWaypoint = FVector::ZeroVector; FVector CurrentPos = Blackboard->GetOwner()->GetActorLocation(); NewWaypoint.X = CurrentPos.X + FMath::FRandRange(-5000, 5000); NewWaypoint.Y = CurrentPos.Y + FMath::FRandRange(-5000, 5000); while (FVector::Dist(NewWaypoint, Blackboard->GetOwner()->GetActorLocation()) <= 2000.f && TraceFromPosition(OutResult, 100.f, ECollisionChannel::ECC_EngineTraceChannel1, NewWaypoint, OwnerComp) == false) { NewWaypoint.X = CurrentPos.X + FMath::FRandRange(-5000, 5000); NewWaypoint.Y = CurrentPos.Y + FMath::FRandRange(-5000, 5000); } if (!NewWaypoint.IsZero()) { Blackboard->SetValue<UBlackboardKeyType_Vector>(BlackboardKey.GetSelectedKeyID(), NewWaypoint); return EBTNodeResult::Succeeded; } return EBTNodeResult::Failed; }
bool AAIController::InitializeBlackboard(UBlackboardComponent& BlackboardComp, UBlackboardData& BlackboardAsset) { check(BlackboardComp.GetOwner() == this); if (BlackboardComp.InitializeBlackboard(BlackboardAsset)) { OnUsingBlackBoard(&BlackboardComp, &BlackboardAsset); return true; } return false; }
bool AAIController::InitializeBlackboard(UBlackboardComponent& BlackboardComp, UBlackboardData& BlackboardAsset) { check(BlackboardComp.GetOwner() == this); if (BlackboardComp.InitializeBlackboard(BlackboardAsset)) { // find the "self" key and set it to our pawn const FBlackboard::FKey SelfKey = BlackboardAsset.GetKeyID(FBlackboard::KeySelf); if (SelfKey != FBlackboard::InvalidKey) { BlackboardComp.SetValue<UBlackboardKeyType_Object>(SelfKey, GetPawn()); } OnUsingBlackBoard(&BlackboardComp, &BlackboardAsset); return true; } return false; }
void UDistanceToGhost::TickNode(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory, float DeltaSeconds) { Super::TickNode(OwnerComp, NodeMemory, DeltaSeconds); UBlackboardComponent* Blackboard = OwnerComp.GetBlackboardComponent(); UObject* TargetObject = Blackboard->GetValue<UBlackboardKeyType_Object>(TargetName); AGGJ16_AIController* AIController = Cast<AGGJ16_AIController>(Blackboard->GetOwner()); AGGJ16_Vani* VaniCharacter = Cast<AGGJ16_Vani>(TargetObject); if (AIController && VaniCharacter) { Distance = FVector::Dist(VaniCharacter->GetActorLocation(), AIController->GetPawn()->GetActorLocation()); Blackboard->SetValue<UBlackboardKeyType_Float>(BlackboardKey.GetSelectedKeyID(), Distance); } GEngine->AddOnScreenDebugMessage(4, 1, FColor::Blue, TEXT("Ding")); }
void UCheckDistanceService::TickNode(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory, float DeltaSeconds) { Super::TickNode(OwnerComp, NodeMemory, DeltaSeconds); UBlackboardComponent* Blackboard = OwnerComp.GetBlackboardComponent(); UObject* TargetObject = Blackboard->GetValue<UBlackboardKeyType_Object>(TargetName); AArin* PlayerCharacter = Cast<AArin>(UGameplayStatics::GetPlayerCharacter(GetWorld(), 0)); ABaseAIController* AIController = Cast<ABaseAIController>(Blackboard->GetOwner()); if (AIController && PlayerCharacter) { Distance = FVector::Dist(PlayerCharacter->GetActorLocation(), AIController->GetPawn()->GetActorLocation()); Blackboard->SetValue<UBlackboardKeyType_Float>(BlackboardKey.GetSelectedKeyID(), Distance); } GEngine->AddOnScreenDebugMessage(4, 1, FColor::Blue, TEXT("Ding")); }