diff --git a/EndlessVendetta/Content/AI/Enemy/Basic/BB_BasicEnemy.uasset b/EndlessVendetta/Content/AI/Enemy/Basic/BB_BasicEnemy.uasset index 95232d5a..fa4a57b9 100644 --- a/EndlessVendetta/Content/AI/Enemy/Basic/BB_BasicEnemy.uasset +++ b/EndlessVendetta/Content/AI/Enemy/Basic/BB_BasicEnemy.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ae9dfbea15f5153c414b37908abba881d284122cc7084c860c337a10bbe56072 -size 6944 +oid sha256:9ccc06fcb9db350ed1c04f1f36302a72d1e2d124756adb3a3a296e505f82bf77 +size 7246 diff --git a/EndlessVendetta/Content/AI/Enemy/Basic/BT_BasicEnemy.uasset b/EndlessVendetta/Content/AI/Enemy/Basic/BT_BasicEnemy.uasset index 60762ea3..41ed7e5f 100644 --- a/EndlessVendetta/Content/AI/Enemy/Basic/BT_BasicEnemy.uasset +++ b/EndlessVendetta/Content/AI/Enemy/Basic/BT_BasicEnemy.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4f56cf78481c0fc10f209dd2c01ac7b71ae072415e08d1e355244f69fada4076 -size 83617 +oid sha256:197a9f39b0e53e46b30bc79e91e9cdf711fbea5903619628073b1bd34fe2a270 +size 85921 diff --git a/EndlessVendetta/Content/Audio/Music/Combat_track_1/Combat_start__808s_.uasset b/EndlessVendetta/Content/Audio/Music/Combat_track_1/Combat_start__808s_.uasset new file mode 100644 index 00000000..414a13e5 --- /dev/null +++ b/EndlessVendetta/Content/Audio/Music/Combat_track_1/Combat_start__808s_.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0b1cae3585fbf0552b1330523e44133f71cbcb4da2d13cb35f269b5940dc12db +size 890695 diff --git a/EndlessVendetta/Content/Audio/Music/Combat_track_1/Drums.uasset b/EndlessVendetta/Content/Audio/Music/Combat_track_1/Drums.uasset index 90d587e6..fb36c37b 100644 --- a/EndlessVendetta/Content/Audio/Music/Combat_track_1/Drums.uasset +++ b/EndlessVendetta/Content/Audio/Music/Combat_track_1/Drums.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d3e771a9dc3e18398e031abc49b4676364e07cdaedf4ff877221ff914bd753fd -size 359591 +oid sha256:bc27e362ee8d62313b888c06ba033700aa650800124e5bf1a2565f7ec42a5c22 +size 359535 diff --git a/EndlessVendetta/Content/Audio/Music/Combat_track_1/Guitar.uasset b/EndlessVendetta/Content/Audio/Music/Combat_track_1/Guitar.uasset new file mode 100644 index 00000000..735fb58b --- /dev/null +++ b/EndlessVendetta/Content/Audio/Music/Combat_track_1/Guitar.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2158d24dee22d93dd286be9b8d55bd7fda7463094d15a7d7e93ab266e24a51d4 +size 598324 diff --git a/EndlessVendetta/Content/Audio/Music/Combat_track_1/Hats_and_clap.uasset b/EndlessVendetta/Content/Audio/Music/Combat_track_1/Hats_and_clap.uasset index 84227ac2..7440e544 100644 --- a/EndlessVendetta/Content/Audio/Music/Combat_track_1/Hats_and_clap.uasset +++ b/EndlessVendetta/Content/Audio/Music/Combat_track_1/Hats_and_clap.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7163166e07477a7969ed6189d668bd5d0cafd3fd29fedb66e2d2fa7ca9ba0c1f -size 141494 +oid sha256:d8f06f8282c229dd55c5326f512ecd33cabf3563b79475b89ace020ae0130312 +size 141396 diff --git a/EndlessVendetta/Content/Audio/Music/Combat_track_1/Sound_effect.uasset b/EndlessVendetta/Content/Audio/Music/Combat_track_1/Sound_effect.uasset new file mode 100644 index 00000000..dc721629 --- /dev/null +++ b/EndlessVendetta/Content/Audio/Music/Combat_track_1/Sound_effect.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8e6f1f4d0c719a037a81223e9d88674d195c9a5d097f1a6d46643b65dccf2ecd +size 245165 diff --git a/EndlessVendetta/Content/Audio/Music/Combat_track_1/combat_Continuous.uasset b/EndlessVendetta/Content/Audio/Music/Combat_track_1/combat_Continuous.uasset index 0853c520..0c01c6cb 100644 --- a/EndlessVendetta/Content/Audio/Music/Combat_track_1/combat_Continuous.uasset +++ b/EndlessVendetta/Content/Audio/Music/Combat_track_1/combat_Continuous.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:85501512de2f1d2bd3e0bb2b012e2f73086e9a28245e6f3f538b3d969d4b51cf -size 878633 +oid sha256:f1cc5d62dac13697c6d360ea63b0c2a60f9792a5b00fc2a1d21cc7d5f70b48b5 +size 879560 diff --git a/EndlessVendetta/Source/EndlessVendetta/AI/AICharacter.cpp b/EndlessVendetta/Source/EndlessVendetta/AI/AICharacter.cpp index be8f7e62..828aed18 100644 --- a/EndlessVendetta/Source/EndlessVendetta/AI/AICharacter.cpp +++ b/EndlessVendetta/Source/EndlessVendetta/AI/AICharacter.cpp @@ -10,6 +10,9 @@ #include "BehaviorTree/BlackboardComponent.h" #include +#include "AI_EnemyController.h" +#include "EndlessVendetta/EndlessVendettaCharacter.h" + // Sets default values AAICharacter::AAICharacter() @@ -73,8 +76,13 @@ void AAICharacter::SetupStimuliSourceComponent() void AAICharacter::OnDeath() { - /*const AAI_EnemyController* AIController = Cast(GetController()); - AIController->GetBrainComponent()->StopLogic(" is dead");*/ + AAI_EnemyController* AIController = Cast(GetController()); + if (UBlackboardComponent* Blackboard = AIController->GetBlackboardComponent(); Blackboard->GetValueAsBool("SeenWithHostilities")) + { + AEndlessVendettaCharacter* PlayerCharacter = Cast(GetWorld()->GetFirstPlayerController()->GetPawn()); + PlayerCharacter->DecrementSeenHostileCount(); + } + this->Tags.Add(FName("Dead")); //Ragdoll DetachFromControllerPendingDestroy(); diff --git a/EndlessVendetta/Source/EndlessVendetta/AI/AI_EnemyController.cpp b/EndlessVendetta/Source/EndlessVendetta/AI/AI_EnemyController.cpp index 5e89212f..dc0daed6 100644 --- a/EndlessVendetta/Source/EndlessVendetta/AI/AI_EnemyController.cpp +++ b/EndlessVendetta/Source/EndlessVendetta/AI/AI_EnemyController.cpp @@ -105,17 +105,19 @@ void AAI_EnemyController::OnTargetPerceptionUpdated(AActor* Actor, FAIStimulus c { GetBlackboardComponent()->SetValueAsObject("TargetPlayer", Actor); GetBlackboardComponent()->SetValueAsVector("TargetLocation", Stimulus.StimulusLocation); - GetBlackboardComponent()->SetValueAsBool("CanSeePlayer", true); if (PlayerCharacter->CurrentOverlayState != EOverlayState::Default) { GetBlackboardComponent()->SetValueAsBool("IsHostile", true); } + GetBlackboardComponent()->SetValueAsBool("CanSeePlayer", true); } else if (!Stimulus.WasSuccessfullySensed() && Stimulus.Type == SightConfig->GetSenseID()) { GetBlackboardComponent()->ClearValue("TargetActor"); GetBlackboardComponent()->ClearValue("TargetLocation"); GetBlackboardComponent()->SetValueAsBool("CanSeePlayer", false); + GetBlackboardComponent()->SetValueAsBool("SeenWithHostilities", false); + PlayerCharacter->DecrementSeenHostileCount(); } if (Stimulus.WasSuccessfullySensed() && Stimulus.Type == HearingConfig->GetSenseID()) diff --git a/EndlessVendetta/Source/EndlessVendetta/AI/Tasks/BTTask_SetSeenWithHostilities.cpp b/EndlessVendetta/Source/EndlessVendetta/AI/Tasks/BTTask_SetSeenWithHostilities.cpp new file mode 100644 index 00000000..0526ccd1 --- /dev/null +++ b/EndlessVendetta/Source/EndlessVendetta/AI/Tasks/BTTask_SetSeenWithHostilities.cpp @@ -0,0 +1,31 @@ +// Fill out your copyright notice in the Description page of Project Settings. + + +#include "BTTask_SetSeenWithHostilities.h" + +#include "EndlessVendetta/EndlessVendettaCharacter.h" +#include "BehaviorTree/BlackboardComponent.h" + +UBTTask_SetSeenWithHostilities::UBTTask_SetSeenWithHostilities() +{ + NodeName = "Set Seen With Hostilities"; +} + +EBTNodeResult::Type UBTTask_SetSeenWithHostilities::ExecuteTask(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory) +{ + if (AEndlessVendettaCharacter* Player = Cast(GetWorld()->GetFirstPlayerController()->GetPawn())) + { + if (UBlackboardComponent* const Blackboard = OwnerComp.GetBlackboardComponent()) + { + if (!Blackboard->GetValueAsBool("SeenWithHostilities") && Blackboard->GetValueAsBool("IsHostile")) + { + Blackboard->SetValueAsBool("SeenWithHostilities", true); + Player->IncrementSeenHostileCount(); + } + FinishLatentTask(OwnerComp, EBTNodeResult::Succeeded); + return EBTNodeResult::Succeeded; + } + } + + return EBTNodeResult::Failed; +} diff --git a/EndlessVendetta/Source/EndlessVendetta/AI/Tasks/BTTask_SetSeenWithHostilities.h b/EndlessVendetta/Source/EndlessVendetta/AI/Tasks/BTTask_SetSeenWithHostilities.h new file mode 100644 index 00000000..5f6ba493 --- /dev/null +++ b/EndlessVendetta/Source/EndlessVendetta/AI/Tasks/BTTask_SetSeenWithHostilities.h @@ -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_SetSeenWithHostilities.generated.h" + +/** + * + */ +UCLASS() +class ENDLESSVENDETTA_API UBTTask_SetSeenWithHostilities : public UBTTask_BlackboardBase +{ + GENERATED_BODY() + +public: + UBTTask_SetSeenWithHostilities(); + virtual EBTNodeResult::Type ExecuteTask(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory) override; +}; diff --git a/EndlessVendetta/Source/EndlessVendetta/EndlessVendettaCharacter.cpp b/EndlessVendetta/Source/EndlessVendetta/EndlessVendettaCharacter.cpp index 5de27d68..1937ebf7 100644 --- a/EndlessVendetta/Source/EndlessVendetta/EndlessVendettaCharacter.cpp +++ b/EndlessVendetta/Source/EndlessVendetta/EndlessVendettaCharacter.cpp @@ -53,6 +53,30 @@ void AEndlessVendettaCharacter::DecrementRestrictedBoundsCount() } } +void AEndlessVendettaCharacter::IncrementSeenHostileCount() +{ + SeenHostileCount++; + if (GetWorld()->GetTimerManager().IsTimerActive(NotInCombatTimerHandle)) + { + GetWorld()->GetTimerManager().ClearTimer(NotInCombatTimerHandle); + } + bIsInCombat = true; +} + +void AEndlessVendettaCharacter::DecrementSeenHostileCount() +{ + SeenHostileCount--; + if (SeenHostileCount <= 0) + { + if (GetWorld()->GetTimerManager().IsTimerActive(NotInCombatTimerHandle)) + { + GetWorld()->GetTimerManager().ClearTimer(NotInCombatTimerHandle); + } + GetWorld()->GetTimerManager().SetTimer(NotInCombatTimerHandle, this, &AEndlessVendettaCharacter::NotInCombat, + 5.0f, false); + } +} + void AEndlessVendettaCharacter::ReloadAnimationComplete() { if (IsValid(PrimaryWeapon)) @@ -189,6 +213,12 @@ void AEndlessVendettaCharacter::Heal(const float Amount) CurrentHealth = FMath::Clamp(Amount + CurrentHealth, 0, MaxHealth); } +void AEndlessVendettaCharacter::NotInCombat() +{ + bIsInCombat = false; + GEngine->AddOnScreenDebugMessage(-1, 15.f, FColor::Green, TEXT("Not In Combat")); +} + void AEndlessVendettaCharacter::WeaponPickUpSystem() { FHitResult OutHit; diff --git a/EndlessVendetta/Source/EndlessVendetta/EndlessVendettaCharacter.h b/EndlessVendetta/Source/EndlessVendetta/EndlessVendettaCharacter.h index 8255dd6d..cf47b207 100644 --- a/EndlessVendetta/Source/EndlessVendetta/EndlessVendettaCharacter.h +++ b/EndlessVendetta/Source/EndlessVendetta/EndlessVendettaCharacter.h @@ -163,10 +163,16 @@ public: bool bIsInDialogue = false; UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Stats") bool bIsInRestrictedArea = false; + UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Stats") + bool bIsInCombat = false; UFUNCTION(BlueprintCallable) void IncrementRestrictedBoundsCount(); UFUNCTION(BlueprintCallable) void DecrementRestrictedBoundsCount(); + UFUNCTION(BlueprintCallable) + void IncrementSeenHostileCount(); + UFUNCTION(BlueprintCallable) + void DecrementSeenHostileCount(); DECLARE_DYNAMIC_MULTICAST_DELEGATE(FStartReload); UPROPERTY(BlueprintAssignable, Category = "Weapon") @@ -214,6 +220,11 @@ protected: UPROPERTY() int RestrictedBoundsCount = 0; + UPROPERTY() + int SeenHostileCount = 0; + UPROPERTY() + FTimerHandle NotInCombatTimerHandle; + void NotInCombat(); public: AGadgetManager* GadgetManager;