Add basic ai functionality
This commit is contained in:
parent
3bd49b0b90
commit
141ac232f0
|
@ -5,6 +5,8 @@
|
||||||
|
|
||||||
AEnemyCharacter::AEnemyCharacter(const FObjectInitializer& ObjectInitializer)
|
AEnemyCharacter::AEnemyCharacter(const FObjectInitializer& ObjectInitializer)
|
||||||
{
|
{
|
||||||
|
GetHealthComponent()->OnDamaged.BindUFunction(this, "OnDamaged");
|
||||||
|
GetHealthComponent()->OnDeath.BindUFunction(this, "OnDeath");
|
||||||
}
|
}
|
||||||
|
|
||||||
void AEnemyCharacter::BeginPlay()
|
void AEnemyCharacter::BeginPlay()
|
||||||
|
@ -16,3 +18,16 @@ void AEnemyCharacter::Tick(float DeltaTime)
|
||||||
{
|
{
|
||||||
Super::Tick(DeltaTime);
|
Super::Tick(DeltaTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
UBehaviorTree* AEnemyCharacter::GetBehaviorTree()
|
||||||
|
{
|
||||||
|
return BehaviorTree;
|
||||||
|
}
|
||||||
|
|
||||||
|
void AEnemyCharacter::OnDamaged()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void AEnemyCharacter::OnDeath()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
|
@ -18,7 +18,7 @@ class VAMPIRES_API AEnemyCharacter : public AVampireCharacter
|
||||||
private:
|
private:
|
||||||
|
|
||||||
UPROPERTY(EditDefaultsOnly, Meta = (AllowPrivateAccess = "true"))
|
UPROPERTY(EditDefaultsOnly, Meta = (AllowPrivateAccess = "true"))
|
||||||
UBehaviorTree* BehaviourTree;
|
UBehaviorTree* BehaviorTree;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
AEnemyCharacter(const FObjectInitializer& ObjectInitializer);
|
AEnemyCharacter(const FObjectInitializer& ObjectInitializer);
|
||||||
|
@ -28,4 +28,12 @@ protected:
|
||||||
|
|
||||||
public:
|
public:
|
||||||
virtual void Tick(float DeltaTime) override;
|
virtual void Tick(float DeltaTime) override;
|
||||||
|
|
||||||
|
UBehaviorTree* GetBehaviorTree();
|
||||||
|
|
||||||
|
UFUNCTION()
|
||||||
|
virtual void OnDamaged();
|
||||||
|
|
||||||
|
UFUNCTION()
|
||||||
|
virtual void OnDeath();
|
||||||
};
|
};
|
||||||
|
|
|
@ -3,8 +3,15 @@
|
||||||
|
|
||||||
#include "VampireAIController.h"
|
#include "VampireAIController.h"
|
||||||
|
|
||||||
|
#include "BehaviorTree/BlackboardComponent.h"
|
||||||
|
#include "Components/CapsuleComponent.h"
|
||||||
|
#include "GameFramework/PawnMovementComponent.h"
|
||||||
|
#include "Kismet/GameplayStatics.h"
|
||||||
|
|
||||||
AVampireAIController::AVampireAIController(const FObjectInitializer& object_initializer)
|
AVampireAIController::AVampireAIController(const FObjectInitializer& object_initializer)
|
||||||
{
|
{
|
||||||
|
Blackboard = CreateDefaultSubobject<UBlackboardComponent>(TEXT("Blackboard"));
|
||||||
|
BehaviorTree = CreateDefaultSubobject<UBehaviorTreeComponent>(TEXT("Behavior Tree"));
|
||||||
}
|
}
|
||||||
|
|
||||||
void AVampireAIController::BeginPlay()
|
void AVampireAIController::BeginPlay()
|
||||||
|
@ -20,12 +27,42 @@ void AVampireAIController::Tick(float DeltaTime)
|
||||||
void AVampireAIController::OnPossess(APawn* InPawn)
|
void AVampireAIController::OnPossess(APawn* InPawn)
|
||||||
{
|
{
|
||||||
Super::OnPossess(InPawn);
|
Super::OnPossess(InPawn);
|
||||||
|
|
||||||
|
EnemyCharacter = Cast<AEnemyCharacter>(InPawn);
|
||||||
|
check(EnemyCharacter);
|
||||||
|
EnemyCharacter->GetHealthComponent()->OnDamaged.BindUFunction(this, "OnDamaged");
|
||||||
|
EnemyCharacter->GetHealthComponent()->OnDeath.BindUFunction(this, "OnDeath");
|
||||||
|
|
||||||
|
if (UBehaviorTree* bt = EnemyCharacter->GetBehaviorTree())
|
||||||
|
{
|
||||||
|
Blackboard->InitializeBlackboard(*bt->BlackboardAsset);
|
||||||
|
BehaviorTree->StartTree(*bt);
|
||||||
|
Blackboard->SetValueAsObject("SelfActor", EnemyCharacter);
|
||||||
|
Blackboard->SetValueAsObject("Player", UGameplayStatics::GetPlayerCharacter(GetWorld(), 0));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void AVampireAIController::OnDamaged(FDamageInfo info)
|
void AVampireAIController::OnDamaged(FDamageInfo info)
|
||||||
{
|
{
|
||||||
|
if (EnemyCharacter->GetHealthComponent()->GetCurrentHealth() > 0.0f)
|
||||||
|
{
|
||||||
|
// TODO: Something
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void AVampireAIController::OnDeath(FDamageInfo info)
|
void AVampireAIController::OnDeath(FDamageInfo info)
|
||||||
{
|
{
|
||||||
|
// TODO: Do stuff here
|
||||||
|
EnemyCharacter->DetachFromControllerPendingDestroy();
|
||||||
|
EnemyCharacter->GetCapsuleComponent()->SetCollisionEnabled(ECollisionEnabled::NoCollision);
|
||||||
|
EnemyCharacter->GetCapsuleComponent()->SetCollisionResponseToAllChannels(ECR_Ignore);
|
||||||
|
|
||||||
|
if (UPawnMovementComponent* characterMovementComponent = EnemyCharacter->GetMovementComponent())
|
||||||
|
{
|
||||||
|
characterMovementComponent->StopMovementImmediately();
|
||||||
|
characterMovementComponent->StopActiveMovement();
|
||||||
|
characterMovementComponent->SetComponentTickEnabled(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
EnemyCharacter->SetLifeSpan(0.1f);
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
|
|
||||||
#include "CoreMinimal.h"
|
#include "CoreMinimal.h"
|
||||||
#include "AIController.h"
|
#include "AIController.h"
|
||||||
|
#include "EnemyCharacter.h"
|
||||||
#include "HealthComponent.h"
|
#include "HealthComponent.h"
|
||||||
#include "PlayerCharacter.h"
|
#include "PlayerCharacter.h"
|
||||||
#include "BehaviorTree/BehaviorTreeComponent.h"
|
#include "BehaviorTree/BehaviorTreeComponent.h"
|
||||||
|
@ -24,6 +25,8 @@ private:
|
||||||
|
|
||||||
APlayerCharacter* PlayerCharacter;
|
APlayerCharacter* PlayerCharacter;
|
||||||
|
|
||||||
|
AEnemyCharacter* EnemyCharacter;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
AVampireAIController(const FObjectInitializer& object_initializer);
|
AVampireAIController(const FObjectInitializer& object_initializer);
|
||||||
|
|
||||||
|
|
|
@ -34,3 +34,8 @@ void AVampireCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputCo
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
UHealthComponent* AVampireCharacter::GetHealthComponent()
|
||||||
|
{
|
||||||
|
return HealthComponent;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -32,4 +32,6 @@ public:
|
||||||
// Called to bind functionality to input
|
// Called to bind functionality to input
|
||||||
virtual void SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) override;
|
virtual void SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) override;
|
||||||
|
|
||||||
|
UHealthComponent* GetHealthComponent();
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue