Add BT Services and Tasks for Animation Triggers
This commit is contained in:
parent
7a9488e13a
commit
0fb24cd386
@ -63,6 +63,14 @@ void AEnemyCharacter::EquipWeapon_Implementation()
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AEnemyCharacter::DeEquipWeapon_Implementation()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void AEnemyCharacter::SetFiring_Implementation(bool IsFiring)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
void AEnemyCharacter::HuntPlayer(FVector PlayerLastKnownLocation)
|
void AEnemyCharacter::HuntPlayer(FVector PlayerLastKnownLocation)
|
||||||
{
|
{
|
||||||
if (!IsValid(this)) return;
|
if (!IsValid(this)) return;
|
||||||
|
@ -16,6 +16,8 @@ class ENDLESSVENDETTA_API AEnemyCharacter : public AAICharacter
|
|||||||
public:
|
public:
|
||||||
// Sets default values for this character's properties
|
// Sets default values for this character's properties
|
||||||
AEnemyCharacter();
|
AEnemyCharacter();
|
||||||
|
UPROPERTY(BlueprintReadWrite)
|
||||||
|
bool WeaponRaised = false;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
// Called when the game starts or when spawned
|
// Called when the game starts or when spawned
|
||||||
@ -29,9 +31,16 @@ public:
|
|||||||
void SubscribeToGroupAIEvents(class AAIControlHub* ControlHub);
|
void SubscribeToGroupAIEvents(class AAIControlHub* ControlHub);
|
||||||
void SetLocalAlertLevel(int NewAlertLevel) const;
|
void SetLocalAlertLevel(int NewAlertLevel) const;
|
||||||
|
|
||||||
|
//Animation Blueprint Triggers
|
||||||
UFUNCTION(BlueprintNativeEvent)
|
UFUNCTION(BlueprintNativeEvent)
|
||||||
void EquipWeapon();
|
void EquipWeapon();
|
||||||
virtual void EquipWeapon_Implementation();
|
virtual void EquipWeapon_Implementation();
|
||||||
|
UFUNCTION(BlueprintNativeEvent)
|
||||||
|
void DeEquipWeapon();
|
||||||
|
virtual void DeEquipWeapon_Implementation();
|
||||||
|
UFUNCTION(BlueprintNativeEvent)
|
||||||
|
void SetFiring(bool IsFiring);
|
||||||
|
virtual void SetFiring_Implementation(bool IsFiring);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
FDelegateHandle AlertLevelDelegateHandle;
|
FDelegateHandle AlertLevelDelegateHandle;
|
||||||
|
@ -0,0 +1,24 @@
|
|||||||
|
// Fill out your copyright notice in the Description page of Project Settings.
|
||||||
|
|
||||||
|
|
||||||
|
#include "BTService_StopAttack.h"
|
||||||
|
|
||||||
|
#include "EndlessVendetta/AI/AI_EnemyController.h"
|
||||||
|
#include "EndlessVendetta/AI/EnemyCharacter.h"
|
||||||
|
|
||||||
|
UBTService_StopAttack::UBTService_StopAttack()
|
||||||
|
{
|
||||||
|
NodeName = "Stop Attack";
|
||||||
|
}
|
||||||
|
|
||||||
|
void UBTService_StopAttack::OnBecomeRelevant(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory)
|
||||||
|
{
|
||||||
|
Super::OnBecomeRelevant(OwnerComp, NodeMemory);
|
||||||
|
if (const AAI_EnemyController* const EnemyController = Cast<AAI_EnemyController>(OwnerComp.GetAIOwner()))
|
||||||
|
{
|
||||||
|
if (AEnemyCharacter* const EnemyCharacter = Cast<AEnemyCharacter>(EnemyController->GetPawn()))
|
||||||
|
{
|
||||||
|
EnemyCharacter->SetFiring(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,20 @@
|
|||||||
|
// Fill out your copyright notice in the Description page of Project Settings.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "CoreMinimal.h"
|
||||||
|
#include "BehaviorTree/Services/BTService_BlackboardBase.h"
|
||||||
|
#include "BTService_StopAttack.generated.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
UCLASS()
|
||||||
|
class ENDLESSVENDETTA_API UBTService_StopAttack : public UBTService_BlackboardBase
|
||||||
|
{
|
||||||
|
GENERATED_BODY()
|
||||||
|
|
||||||
|
public:
|
||||||
|
UBTService_StopAttack();
|
||||||
|
virtual void OnBecomeRelevant(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory) override;
|
||||||
|
};
|
@ -5,6 +5,7 @@
|
|||||||
|
|
||||||
#include "EndlessVendetta/AI/AI_EnemyController.h"
|
#include "EndlessVendetta/AI/AI_EnemyController.h"
|
||||||
#include "BehaviorTree/BlackboardComponent.h"
|
#include "BehaviorTree/BlackboardComponent.h"
|
||||||
|
#include "EndlessVendetta/AI/EnemyCharacter.h"
|
||||||
|
|
||||||
UBTTask_AttackPlayer::UBTTask_AttackPlayer(FObjectInitializer const& ObjectInitializer)
|
UBTTask_AttackPlayer::UBTTask_AttackPlayer(FObjectInitializer const& ObjectInitializer)
|
||||||
{
|
{
|
||||||
@ -21,9 +22,14 @@ EBTNodeResult::Type UBTTask_AttackPlayer::ExecuteTask(UBehaviorTreeComponent& Ow
|
|||||||
FVector const PlayerLocation = Blackboard->GetValueAsVector("TargetLocation");
|
FVector const PlayerLocation = Blackboard->GetValueAsVector("TargetLocation");
|
||||||
DrawDebugLine(GetWorld(), Origin, PlayerLocation, FColor::Green, false, 1.f, 0, 1.f);
|
DrawDebugLine(GetWorld(), Origin, PlayerLocation, FColor::Green, false, 1.f, 0, 1.f);
|
||||||
|
|
||||||
|
if (AEnemyCharacter* const EnemyCharacter = Cast<AEnemyCharacter>(AIController->GetPawn()))
|
||||||
|
{
|
||||||
|
EnemyCharacter->SetFiring(true);
|
||||||
|
|
||||||
FinishLatentTask(OwnerComp, EBTNodeResult::Succeeded);
|
FinishLatentTask(OwnerComp, EBTNodeResult::Succeeded);
|
||||||
return EBTNodeResult::Succeeded;
|
return EBTNodeResult::Succeeded;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return EBTNodeResult::Failed;
|
return EBTNodeResult::Failed;
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,32 @@
|
|||||||
|
// Fill out your copyright notice in the Description page of PrBTTask_LowerWeapon.h"
|
||||||
|
|
||||||
|
#include "BTTask_LowerWeapon.h"
|
||||||
|
#include "EndlessVendetta/AI/AI_EnemyController.h"
|
||||||
|
#include "EndlessVendetta/AI/EnemyCharacter.h"
|
||||||
|
|
||||||
|
UBTTask_LowerWeapon::UBTTask_LowerWeapon()
|
||||||
|
{
|
||||||
|
NodeName = "Lower Weapon";
|
||||||
|
}
|
||||||
|
|
||||||
|
EBTNodeResult::Type UBTTask_LowerWeapon::ExecuteTask(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory)
|
||||||
|
{
|
||||||
|
if (const AAI_EnemyController* const AIEnemyController = Cast<AAI_EnemyController>(OwnerComp.GetAIOwner()))
|
||||||
|
{
|
||||||
|
if (AEnemyCharacter* const EnemyCharacter = Cast<AEnemyCharacter>(AIEnemyController->GetPawn()))
|
||||||
|
{
|
||||||
|
if (!EnemyCharacter->WeaponRaised)
|
||||||
|
{
|
||||||
|
FinishLatentTask(OwnerComp, EBTNodeResult::Succeeded);
|
||||||
|
return EBTNodeResult::Succeeded;
|
||||||
|
}
|
||||||
|
EnemyCharacter->DeEquipWeapon();
|
||||||
|
EnemyCharacter->WeaponRaised = false;
|
||||||
|
|
||||||
|
FinishLatentTask(OwnerComp, EBTNodeResult::Succeeded);
|
||||||
|
return EBTNodeResult::Succeeded;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return EBTNodeResult::Failed;
|
||||||
|
}
|
@ -0,0 +1,21 @@
|
|||||||
|
// Fill out your copyright notice in the Description page of Project Settings.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "CoreMinimal.h"
|
||||||
|
#include "BehaviorTree/Tasks/BTTask_BlackboardBase.h"
|
||||||
|
#include "BTTask_LowerWeapon.generated.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
UCLASS()
|
||||||
|
class ENDLESSVENDETTA_API UBTTask_LowerWeapon : public UBTTask_BlackboardBase
|
||||||
|
{
|
||||||
|
GENERATED_BODY()
|
||||||
|
|
||||||
|
public:
|
||||||
|
UBTTask_LowerWeapon();
|
||||||
|
virtual EBTNodeResult::Type ExecuteTask(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory) override;
|
||||||
|
|
||||||
|
};
|
@ -0,0 +1,34 @@
|
|||||||
|
// Fill out your copyright notice in the Description page of Project Settings.
|
||||||
|
|
||||||
|
|
||||||
|
#include "BTTask_RaiseWeapon.h"
|
||||||
|
#include "EndlessVendetta/AI/AI_EnemyController.h"
|
||||||
|
#include "EndlessVendetta/AI/EnemyCharacter.h"
|
||||||
|
|
||||||
|
UBTTask_RaiseWeapon::UBTTask_RaiseWeapon()
|
||||||
|
{
|
||||||
|
NodeName = "Raise Weapon";
|
||||||
|
}
|
||||||
|
|
||||||
|
EBTNodeResult::Type UBTTask_RaiseWeapon::ExecuteTask(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory)
|
||||||
|
{
|
||||||
|
if (const AAI_EnemyController* const AIEnemyController = Cast<AAI_EnemyController>(OwnerComp.GetAIOwner()))
|
||||||
|
{
|
||||||
|
if (AEnemyCharacter* const EnemyCharacter = Cast<AEnemyCharacter>(AIEnemyController->GetPawn()))
|
||||||
|
{
|
||||||
|
if (EnemyCharacter->WeaponRaised)
|
||||||
|
{
|
||||||
|
FinishLatentTask(OwnerComp, EBTNodeResult::Succeeded);
|
||||||
|
return EBTNodeResult::Succeeded;
|
||||||
|
}
|
||||||
|
|
||||||
|
EnemyCharacter->EquipWeapon();
|
||||||
|
EnemyCharacter->WeaponRaised = true;
|
||||||
|
|
||||||
|
FinishLatentTask(OwnerComp, EBTNodeResult::Succeeded);
|
||||||
|
return EBTNodeResult::Succeeded;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return EBTNodeResult::Failed;
|
||||||
|
}
|
@ -0,0 +1,20 @@
|
|||||||
|
// Fill out your copyright notice in the Description page of Project Settings.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "CoreMinimal.h"
|
||||||
|
#include "BehaviorTree/Tasks/BTTask_BlackboardBase.h"
|
||||||
|
#include "BTTask_RaiseWeapon.generated.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
UCLASS()
|
||||||
|
class ENDLESSVENDETTA_API UBTTask_RaiseWeapon : public UBTTask_BlackboardBase
|
||||||
|
{
|
||||||
|
GENERATED_BODY()
|
||||||
|
|
||||||
|
public:
|
||||||
|
UBTTask_RaiseWeapon();
|
||||||
|
virtual EBTNodeResult::Type ExecuteTask(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory) override;
|
||||||
|
};
|
@ -0,0 +1,26 @@
|
|||||||
|
// Fill out your copyright notice in the Description page of Project Settings.
|
||||||
|
|
||||||
|
|
||||||
|
#include "BTTask_StopAttack.h"
|
||||||
|
#include "EndlessVendetta/AI/AI_EnemyController.h"
|
||||||
|
#include "EndlessVendetta/AI/EnemyCharacter.h"
|
||||||
|
|
||||||
|
UBTTask_StopAttack::UBTTask_StopAttack()
|
||||||
|
{
|
||||||
|
NodeName = "Stop Attack";
|
||||||
|
}
|
||||||
|
|
||||||
|
EBTNodeResult::Type UBTTask_StopAttack::ExecuteTask(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory)
|
||||||
|
{
|
||||||
|
if (const AAI_EnemyController* const AIEnemyController = Cast<AAI_EnemyController>(OwnerComp.GetAIOwner()))
|
||||||
|
{
|
||||||
|
if (AEnemyCharacter* const EnemyCharacter = Cast<AEnemyCharacter>(AIEnemyController->GetPawn()))
|
||||||
|
{
|
||||||
|
EnemyCharacter->SetFiring(false);
|
||||||
|
|
||||||
|
FinishLatentTask(OwnerComp, EBTNodeResult::Succeeded);
|
||||||
|
return EBTNodeResult::Succeeded;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return EBTNodeResult::Failed;
|
||||||
|
}
|
@ -0,0 +1,20 @@
|
|||||||
|
// Fill out your copyright notice in the Description page of Project Settings.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "CoreMinimal.h"
|
||||||
|
#include "BehaviorTree/Tasks/BTTask_BlackboardBase.h"
|
||||||
|
#include "BTTask_StopAttack.generated.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
UCLASS()
|
||||||
|
class ENDLESSVENDETTA_API UBTTask_StopAttack : public UBTTask_BlackboardBase
|
||||||
|
{
|
||||||
|
GENERATED_BODY()
|
||||||
|
|
||||||
|
public:
|
||||||
|
UBTTask_StopAttack();
|
||||||
|
virtual EBTNodeResult::Type ExecuteTask(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory) override;
|
||||||
|
};
|
Loading…
Reference in New Issue
Block a user