diff --git a/Source/Nakatomi/EPatrolMovementEnum.h b/Source/Nakatomi/EPatrolMovementEnum.h index e044459..86797f1 100644 --- a/Source/Nakatomi/EPatrolMovementEnum.h +++ b/Source/Nakatomi/EPatrolMovementEnum.h @@ -12,4 +12,5 @@ enum class EPatrolMovementEnum : uint8 { SLOWWALK UMETA(DisplayName = "Slow Walk"), WALK UMETA(DisplayName = "Walk"), + SPRINT UMETA(DisplayName = "Sprint"), }; diff --git a/Source/Nakatomi/EnemyAIController.cpp b/Source/Nakatomi/EnemyAIController.cpp index f7a37d3..259e413 100644 --- a/Source/Nakatomi/EnemyAIController.cpp +++ b/Source/Nakatomi/EnemyAIController.cpp @@ -63,6 +63,9 @@ void AEnemyAIController::OnPossess(APawn* InPawn) } Blackboard->SetValueAsEnum("State", static_cast(EAIState::PASSIVE)); + + Blackboard->SetValueAsFloat("AttackRadius", enemy->AttackRadius); + Blackboard->SetValueAsFloat("DefendRadius", enemy->DefendRadius); //ensure(enemy->GetMovementComponent()->UseAccelerationForPathFollowing()); } @@ -149,9 +152,24 @@ void AEnemyAIController::OnPerceptionUpdated(const TArray& actors) continue; } - FAISenseID SightID = SightConfig->GetSenseID(); - FAISenseID HearingID = HearingConfig->GetSenseID(); - FAISenseID DamageID = DamageConfig->GetSenseID(); + FAISenseID SightID; + FAISenseID HearingID; + FAISenseID DamageID; + + if (SightConfig) + { + SightID = SightConfig->GetSenseID(); + } + + if (HearingConfig) + { + HearingID = HearingConfig->GetSenseID(); + } + + if (DamageConfig) + { + DamageID = DamageConfig->GetSenseID(); + } if (stimulus.Type == SightID) { @@ -229,6 +247,11 @@ void AEnemyAIController::SetStateAsAttacking(AActor* target) SetState(EAIState::ATTACKING); } +AActor* AEnemyAIController::GetTargetActor() +{ + return Cast(Blackboard->GetValueAsObject("TargetActor")); +} + void AEnemyAIController::SensedSight(AActor* actor, FAIStimulus& stimulus) { EAIState CurrentState = static_cast(Blackboard->GetValueAsEnum("State")); diff --git a/Source/Nakatomi/EnemyAIController.h b/Source/Nakatomi/EnemyAIController.h index d14f019..2e46abd 100644 --- a/Source/Nakatomi/EnemyAIController.h +++ b/Source/Nakatomi/EnemyAIController.h @@ -76,6 +76,9 @@ public: UFUNCTION() void SetStateAsAttacking(AActor* target); + UFUNCTION(BlueprintCallable) + AActor* GetTargetActor(); + private: void SensedSight(AActor* actor, FAIStimulus& stimulus); diff --git a/Source/Nakatomi/EnemyCharacter.h b/Source/Nakatomi/EnemyCharacter.h index c596ec2..2f7bbc3 100644 --- a/Source/Nakatomi/EnemyCharacter.h +++ b/Source/Nakatomi/EnemyCharacter.h @@ -21,6 +21,12 @@ class NAKATOMI_API AEnemyCharacter : public ANakatomiCharacter public: UPROPERTY(EditAnywhere, Meta = (AllowPrivateAccess = "true")) APatrolRoute* CurrentPatrolRoute; + + UPROPERTY(EditAnywhere) + float AttackRadius = 300.0; + + UPROPERTY(EditAnywhere) + float DefendRadius = 500.0f; private: UPROPERTY(EditDefaultsOnly, Meta = (AllowPrivateAccess = "true"))