Compare commits
6 Commits
a1832e352e
...
9e81450656
Author | SHA1 | Date |
---|---|---|
baz | 9e81450656 | |
baz | 7bb9c1ccee | |
baz | cc3b05d8b8 | |
baz | 6ef43d5fea | |
baz | 73581f3d41 | |
baz | 78d363bc09 |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
Content/Enemy/Worker/BB_Worker.uasset (Stored with Git LFS)
BIN
Content/Enemy/Worker/BB_Worker.uasset (Stored with Git LFS)
Binary file not shown.
BIN
Content/Enemy/Worker/BT_Worker.uasset (Stored with Git LFS)
BIN
Content/Enemy/Worker/BT_Worker.uasset (Stored with Git LFS)
Binary file not shown.
|
@ -0,0 +1,29 @@
|
||||||
|
// Fill out your copyright notice in the Description page of Project Settings.
|
||||||
|
|
||||||
|
|
||||||
|
#include "../Decorators/BTDIsWithinRange.h"
|
||||||
|
|
||||||
|
#include "AIController.h"
|
||||||
|
#include "navigationSystem.h"
|
||||||
|
#include "BehaviorTree/BlackboardComponent.h"
|
||||||
|
#include "Nakatomi/NakatomiCharacter.h"
|
||||||
|
|
||||||
|
bool UBTDIsWithinRange::CalculateRawConditionValue(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory) const
|
||||||
|
{
|
||||||
|
UBlackboardComponent* BlackboardComponent = OwnerComp.GetBlackboardComponent();
|
||||||
|
float Dist = BlackboardComponent->GetValueAsFloat(DistanceKey.SelectedKeyName);
|
||||||
|
UObject* Target = BlackboardComponent->GetValueAsObject(TargetActorKey.SelectedKeyName);
|
||||||
|
auto TargetLocation = Cast<AActor>(Target)->GetActorLocation();
|
||||||
|
UNavigationSystemV1* NavigationSystem = FNavigationSystem::GetCurrent<UNavigationSystemV1>(GetWorld());
|
||||||
|
|
||||||
|
APawn* pawn = OwnerComp.GetAIOwner()->GetPawn();
|
||||||
|
|
||||||
|
if (pawn && NavigationSystem && TargetLocation != FVector::ZeroVector)
|
||||||
|
{
|
||||||
|
double Distance = -1.0;
|
||||||
|
NavigationSystem->GetPathLength(TargetLocation, pawn->GetTransform().GetLocation(), Distance);
|
||||||
|
return Distance <= Dist ? true : false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
|
@ -0,0 +1,31 @@
|
||||||
|
// Fill out your copyright notice in the Description page of Project Settings.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "CoreMinimal.h"
|
||||||
|
#include "BehaviorTree/BTDecorator.h"
|
||||||
|
#include "BTDIsWithinRange.generated.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
UCLASS()
|
||||||
|
class NAKATOMI_API UBTDIsWithinRange : public UBTDecorator
|
||||||
|
{
|
||||||
|
GENERATED_BODY()
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
UPROPERTY(EditAnywhere, Category = "Options",
|
||||||
|
Meta = (AllowPrivateAccess = "true", DisplayName = "Target Actor Key"))
|
||||||
|
FBlackboardKeySelector TargetActorKey;
|
||||||
|
|
||||||
|
UPROPERTY(EditAnywhere, Category = "Options",
|
||||||
|
Meta = (AllowPrivateAccess = "true", DisplayName = "Distance Key"))
|
||||||
|
FBlackboardKeySelector DistanceKey;
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
virtual bool CalculateRawConditionValue(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory) const override;
|
||||||
|
|
||||||
|
};
|
|
@ -12,4 +12,5 @@ enum class EPatrolMovementEnum : uint8
|
||||||
{
|
{
|
||||||
SLOWWALK UMETA(DisplayName = "Slow Walk"),
|
SLOWWALK UMETA(DisplayName = "Slow Walk"),
|
||||||
WALK UMETA(DisplayName = "Walk"),
|
WALK UMETA(DisplayName = "Walk"),
|
||||||
|
SPRINT UMETA(DisplayName = "Sprint"),
|
||||||
};
|
};
|
||||||
|
|
|
@ -64,6 +64,9 @@ void AEnemyAIController::OnPossess(APawn* InPawn)
|
||||||
|
|
||||||
Blackboard->SetValueAsEnum("State", static_cast<uint8>(EAIState::PASSIVE));
|
Blackboard->SetValueAsEnum("State", static_cast<uint8>(EAIState::PASSIVE));
|
||||||
|
|
||||||
|
Blackboard->SetValueAsFloat("AttackRadius", enemy->AttackRadius);
|
||||||
|
Blackboard->SetValueAsFloat("DefendRadius", enemy->DefendRadius);
|
||||||
|
|
||||||
//ensure(enemy->GetMovementComponent()->UseAccelerationForPathFollowing());
|
//ensure(enemy->GetMovementComponent()->UseAccelerationForPathFollowing());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -149,9 +152,24 @@ void AEnemyAIController::OnPerceptionUpdated(const TArray<AActor*>& actors)
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
FAISenseID SightID = SightConfig->GetSenseID();
|
FAISenseID SightID;
|
||||||
FAISenseID HearingID = HearingConfig->GetSenseID();
|
FAISenseID HearingID;
|
||||||
FAISenseID DamageID = DamageConfig->GetSenseID();
|
FAISenseID DamageID;
|
||||||
|
|
||||||
|
if (SightConfig)
|
||||||
|
{
|
||||||
|
SightID = SightConfig->GetSenseID();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (HearingConfig)
|
||||||
|
{
|
||||||
|
HearingID = HearingConfig->GetSenseID();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (DamageConfig)
|
||||||
|
{
|
||||||
|
DamageID = DamageConfig->GetSenseID();
|
||||||
|
}
|
||||||
|
|
||||||
if (stimulus.Type == SightID)
|
if (stimulus.Type == SightID)
|
||||||
{
|
{
|
||||||
|
@ -229,6 +247,11 @@ void AEnemyAIController::SetStateAsAttacking(AActor* target)
|
||||||
SetState(EAIState::ATTACKING);
|
SetState(EAIState::ATTACKING);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
AActor* AEnemyAIController::GetTargetActor()
|
||||||
|
{
|
||||||
|
return Cast<AActor>(Blackboard->GetValueAsObject("TargetActor"));
|
||||||
|
}
|
||||||
|
|
||||||
void AEnemyAIController::SensedSight(AActor* actor, FAIStimulus& stimulus)
|
void AEnemyAIController::SensedSight(AActor* actor, FAIStimulus& stimulus)
|
||||||
{
|
{
|
||||||
EAIState CurrentState = static_cast<EAIState>(Blackboard->GetValueAsEnum("State"));
|
EAIState CurrentState = static_cast<EAIState>(Blackboard->GetValueAsEnum("State"));
|
||||||
|
|
|
@ -76,6 +76,9 @@ public:
|
||||||
UFUNCTION()
|
UFUNCTION()
|
||||||
void SetStateAsAttacking(AActor* target);
|
void SetStateAsAttacking(AActor* target);
|
||||||
|
|
||||||
|
UFUNCTION(BlueprintCallable)
|
||||||
|
AActor* GetTargetActor();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
void SensedSight(AActor* actor, FAIStimulus& stimulus);
|
void SensedSight(AActor* actor, FAIStimulus& stimulus);
|
||||||
|
|
|
@ -22,6 +22,12 @@ public:
|
||||||
UPROPERTY(EditAnywhere, Meta = (AllowPrivateAccess = "true"))
|
UPROPERTY(EditAnywhere, Meta = (AllowPrivateAccess = "true"))
|
||||||
APatrolRoute* CurrentPatrolRoute;
|
APatrolRoute* CurrentPatrolRoute;
|
||||||
|
|
||||||
|
UPROPERTY(EditAnywhere)
|
||||||
|
float AttackRadius = 300.0;
|
||||||
|
|
||||||
|
UPROPERTY(EditAnywhere)
|
||||||
|
float DefendRadius = 500.0f;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
UPROPERTY(EditDefaultsOnly, Meta = (AllowPrivateAccess = "true"))
|
UPROPERTY(EditDefaultsOnly, Meta = (AllowPrivateAccess = "true"))
|
||||||
UBehaviorTree* BehaviourTree;
|
UBehaviorTree* BehaviourTree;
|
||||||
|
|
|
@ -21,6 +21,9 @@ EBTNodeResult::Type UBTTSetMovementSpeed::ExecuteTask(UBehaviorTreeComponent& ow
|
||||||
case EPatrolMovementEnum::WALK:
|
case EPatrolMovementEnum::WALK:
|
||||||
enemyPawn->GetCharacterMovementComponent()->SetMaxWalkSpeed(walkSpeed);
|
enemyPawn->GetCharacterMovementComponent()->SetMaxWalkSpeed(walkSpeed);
|
||||||
break;
|
break;
|
||||||
|
case EPatrolMovementEnum::SPRINT:
|
||||||
|
enemyPawn->GetCharacterMovementComponent()->SetMaxWalkSpeed(sprintSpeed);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
enemyPawn->GetCharacterMovementComponent()->SetMaxWalkSpeedToDefault();
|
enemyPawn->GetCharacterMovementComponent()->SetMaxWalkSpeedToDefault();
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -26,6 +26,8 @@ private:
|
||||||
|
|
||||||
float walkSpeed = 500.0f;
|
float walkSpeed = 500.0f;
|
||||||
|
|
||||||
|
float sprintSpeed = 750.0f;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
virtual EBTNodeResult::Type ExecuteTask(UBehaviorTreeComponent& owner, uint8* memory) override;
|
virtual EBTNodeResult::Type ExecuteTask(UBehaviorTreeComponent& owner, uint8* memory) override;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue