diff --git a/Source/Nakatomi/EnemyAIController.cpp b/Source/Nakatomi/EnemyAIController.cpp index 3527a63..0edf346 100644 --- a/Source/Nakatomi/EnemyAIController.cpp +++ b/Source/Nakatomi/EnemyAIController.cpp @@ -3,6 +3,8 @@ #include "EnemyAIController.h" #include "Engine/EngineTypes.h" #include "Components/CapsuleComponent.h" +#include "NakatomiGameInstance.h" +#include AEnemyAIController::AEnemyAIController(const FObjectInitializer& object_initializer) { @@ -135,3 +137,34 @@ void AEnemyAIController::OnPerceptionUpdated(const TArray& actors) } } } + +bool AEnemyAIController::TryObtainAttackToken() +{ + if (HasAttackToken) + { + return true; + } + + if (auto gameInstance = Cast(UGameplayStatics::GetGameInstance(GetWorld()))) + { + HasAttackToken = gameInstance->GetAIAttackTokenManager()->RequestToken(); + } + + return false; +} + +void AEnemyAIController::TryReleaseAttackToken() +{ + if (HasAttackToken) + { + if (auto gameInstance = Cast(UGameplayStatics::GetGameInstance(GetWorld()))) + { + HasAttackToken = gameInstance->GetAIAttackTokenManager()->ReleaseToken(); + } + } +} + +bool AEnemyAIController::GetHasAttackToken() +{ + return HasAttackToken; +} diff --git a/Source/Nakatomi/EnemyAIController.h b/Source/Nakatomi/EnemyAIController.h index 49022a4..f3a64cd 100644 --- a/Source/Nakatomi/EnemyAIController.h +++ b/Source/Nakatomi/EnemyAIController.h @@ -30,6 +30,8 @@ private: UPROPERTY(EditAnywhere, BlueprintReadWrite, Meta = (AllowPrivateAccess = "true")) UAIPerceptionComponent* AIPerception; + bool HasAttackToken = false; + public: AEnemyAIController(const FObjectInitializer& object_initializer); @@ -49,4 +51,13 @@ public: UFUNCTION() void OnPerceptionUpdated(const TArray& actors); + + UFUNCTION() + bool TryObtainAttackToken(); + + UFUNCTION() + void TryReleaseAttackToken(); + + UFUNCTION() + bool GetHasAttackToken(); };