Create TaskIsWithinRange
This commit is contained in:
		
							parent
							
								
									bc0138251a
								
							
						
					
					
						commit
						969ecbebc8
					
				
							
								
								
									
										34
									
								
								Source/Nakatomi/TaskIsWithinRange.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								Source/Nakatomi/TaskIsWithinRange.cpp
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,34 @@ | |||||||
|  | // Fill out your copyright notice in the Description page of Project Settings.
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | #include "TaskIsWithinRange.h" | ||||||
|  | #include "EnemyAIController.h" | ||||||
|  | #include <NavigationSystem.h> | ||||||
|  | #include <BehaviorTree/BlackboardComponent.h> | ||||||
|  | 
 | ||||||
|  | EBTNodeResult::Type UTaskIsWithinRange::ExecuteTask(UBehaviorTreeComponent& owner, uint8* memory) | ||||||
|  | { | ||||||
|  | 	auto BlackboardComponent = owner.GetBlackboardComponent(); | ||||||
|  | 
 | ||||||
|  | 	if (!BlackboardComponent) | ||||||
|  | 	{ | ||||||
|  | 		return EBTNodeResult::Failed; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	auto NavigationSystem = FNavigationSystem::GetCurrent<UNavigationSystemV1>(GetWorld()); | ||||||
|  | 	FVector SourceLocation = BlackboardComponent->GetValueAsVector(SourceLocationKey.SelectedKeyName); | ||||||
|  | 	ANakatomiCharacter* selfActor = Cast<ANakatomiCharacter>( | ||||||
|  | 		BlackboardComponent->GetValueAsObject(SelfActorKey.SelectedKeyName)); | ||||||
|  | 
 | ||||||
|  | 	if (NavigationSystem && SourceLocation != FVector::ZeroVector) | ||||||
|  | 	{ | ||||||
|  | 		double Distance = -1.0; | ||||||
|  | 		FNavLocation NavLocation; | ||||||
|  | 
 | ||||||
|  | 		NavigationSystem->GetPathLength(SourceLocation, selfActor->GetTransform().GetLocation(), Distance); | ||||||
|  | 
 | ||||||
|  | 		return Distance <= MaximumDistance ? EBTNodeResult::Succeeded : EBTNodeResult::Failed; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	return EBTNodeResult::Failed; | ||||||
|  | } | ||||||
							
								
								
									
										35
									
								
								Source/Nakatomi/TaskIsWithinRange.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								Source/Nakatomi/TaskIsWithinRange.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,35 @@ | |||||||
|  | // Fill out your copyright notice in the Description page of Project Settings.
 | ||||||
|  | 
 | ||||||
|  | #pragma once | ||||||
|  | 
 | ||||||
|  | #include "CoreMinimal.h" | ||||||
|  | #include "BehaviorTree/BTTaskNode.h" | ||||||
|  | #include "TaskIsWithinRange.generated.h" | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  *  | ||||||
|  |  */ | ||||||
|  | UCLASS() | ||||||
|  | class NAKATOMI_API UTaskIsWithinRange : public UBTTaskNode | ||||||
|  | { | ||||||
|  | 	GENERATED_BODY() | ||||||
|  | 
 | ||||||
|  | public: | ||||||
|  | 
 | ||||||
|  | 	UPROPERTY(EditAnywhere, Category = "Options", | ||||||
|  | 		Meta = (AllowPrivateAccess = "true", DisplayName = "Source Location Key")) | ||||||
|  | 	FBlackboardKeySelector SourceLocationKey; | ||||||
|  | 
 | ||||||
|  | 	UPROPERTY(EditAnywhere, Category = "Options", | ||||||
|  | 		Meta = (AllowPrivateAccess = "true", DisplayName = "Self Actor Key")) | ||||||
|  | 	FBlackboardKeySelector SelfActorKey; | ||||||
|  | 	 | ||||||
|  | 	UPROPERTY(EditAnywhere, Category = "Options", | ||||||
|  | 	Meta = (AllowPrivateAccess = "true", DisplayName = "Maximum Distance")) | ||||||
|  | 	float MaximumDistance = 500.0f; | ||||||
|  | 
 | ||||||
|  | public: | ||||||
|  | 	virtual EBTNodeResult::Type ExecuteTask(UBehaviorTreeComponent& owner, uint8* memory) override; | ||||||
|  | 
 | ||||||
|  | 	 | ||||||
|  | }; | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user