diff --git a/EndlessVendetta/Source/EndlessVendetta/AI/CompanionCharacter.cpp b/EndlessVendetta/Source/EndlessVendetta/AI/CompanionCharacter.cpp index 5475ee04..a21f7ebd 100644 --- a/EndlessVendetta/Source/EndlessVendetta/AI/CompanionCharacter.cpp +++ b/EndlessVendetta/Source/EndlessVendetta/AI/CompanionCharacter.cpp @@ -3,6 +3,7 @@ #include "CompanionCharacter.h" +#include "AI_CompanionController.h" #include "Perception/AIPerceptionStimuliSourceComponent.h" #include "Perception/AISense_Sight.h" @@ -38,6 +39,19 @@ UBehaviorTree* ACompanionCharacter::GetBehaviorTree() const return BehaviorTree; } +void ACompanionCharacter::TakeDamage(float DamageAmount) +{ + CurrentHealth -= DamageAmount; + if (CurrentHealth <= 0) + { + CurrentHealth = 0; + UE_LOG(LogTemp, Warning, TEXT("Companion is dead")); + + const AAI_CompanionController* AIController = Cast(GetController()); + AIController->GetBrainComponent()->StopLogic("Companion is dead"); + } +} + void ACompanionCharacter::SetupStimuliSourceComponent() { StimuliSourceComponent = CreateDefaultSubobject(TEXT("Stimuli Source Component")); diff --git a/EndlessVendetta/Source/EndlessVendetta/AI/CompanionCharacter.h b/EndlessVendetta/Source/EndlessVendetta/AI/CompanionCharacter.h index 0a484bbc..cc6fccce 100644 --- a/EndlessVendetta/Source/EndlessVendetta/AI/CompanionCharacter.h +++ b/EndlessVendetta/Source/EndlessVendetta/AI/CompanionCharacter.h @@ -16,6 +16,13 @@ public: // Sets default values for this character's properties ACompanionCharacter(); + UPROPERTY(EditDefaultsOnly, Category = "Stats") + float CurrentHealth = 100.0f; + UPROPERTY(EditDefaultsOnly, Category = "Stats") + float MaxHealth = 100.0f; + UPROPERTY(EditDefaultsOnly, Category = "Stats") + float DefaultHealth = 100.0f; + protected: // Called when the game starts or when spawned virtual void BeginPlay() override; @@ -32,6 +39,9 @@ public: UFUNCTION(BlueprintCallable, Category = "AI") UBehaviorTree* GetBehaviorTree() const; + UFUNCTION(BlueprintCallable, Category = "Damage Control") + void TakeDamage(float DamageAmount); + private: class UAIPerceptionStimuliSourceComponent* StimuliSourceComponent; void SetupStimuliSourceComponent(); diff --git a/EndlessVendetta/Source/EndlessVendetta/AI/EnemyCharacter.cpp b/EndlessVendetta/Source/EndlessVendetta/AI/EnemyCharacter.cpp index 14827c11..feda4730 100644 --- a/EndlessVendetta/Source/EndlessVendetta/AI/EnemyCharacter.cpp +++ b/EndlessVendetta/Source/EndlessVendetta/AI/EnemyCharacter.cpp @@ -3,6 +3,7 @@ #include "EnemyCharacter.h" +#include "AI_EnemyController.h" #include "Perception/AIPerceptionStimuliSourceComponent.h" #include "Perception/AISense_Sight.h" @@ -40,6 +41,19 @@ UBehaviorTree* AEnemyCharacter::GetBehaviorTree() const return BehaviorTree; } +void AEnemyCharacter::TakeDamage(float DamageAmount) +{ + CurrentHealth -= DamageAmount; + if (CurrentHealth <= 0) + { + CurrentHealth = 0; + UE_LOG(LogTemp, Warning, TEXT("Enemy is dead")); + + const AAI_EnemyController* AIController = Cast(GetController()); + AIController->GetBrainComponent()->StopLogic("Enemy is dead"); + } +} + void AEnemyCharacter::SetupStimuliSourceComponent() { StimuliSourceComponent = CreateDefaultSubobject(TEXT("Stimuli Source Component")); diff --git a/EndlessVendetta/Source/EndlessVendetta/AI/EnemyCharacter.h b/EndlessVendetta/Source/EndlessVendetta/AI/EnemyCharacter.h index 23e7e3be..0344fa15 100644 --- a/EndlessVendetta/Source/EndlessVendetta/AI/EnemyCharacter.h +++ b/EndlessVendetta/Source/EndlessVendetta/AI/EnemyCharacter.h @@ -16,12 +16,20 @@ public: // Sets default values for this character's properties AEnemyCharacter(); + UPROPERTY(EditDefaultsOnly, Category = "Stats") + float CurrentHealth = 100.0f; + UPROPERTY(EditDefaultsOnly, Category = "Stats") + float MaxHealth = 100.0f; + UPROPERTY(EditDefaultsOnly, Category = "Stats") + float DefaultHealth = 100.0f; + protected: // Called when the game starts or when spawned virtual void BeginPlay() override; UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "AI") UBehaviorTree* BehaviorTree; + public: // Called every frame virtual void Tick(float DeltaTime) override; @@ -32,6 +40,9 @@ public: UFUNCTION(BlueprintCallable, Category = "AI") UBehaviorTree* GetBehaviorTree() const; + UFUNCTION(BlueprintCallable, Category = "Damage Control") + void TakeDamage(float DamageAmount); + private: class UAIPerceptionStimuliSourceComponent* StimuliSourceComponent; void SetupStimuliSourceComponent(); diff --git a/EndlessVendetta/Source/EndlessVendetta/EndlessVendettaCharacter.cpp b/EndlessVendetta/Source/EndlessVendetta/EndlessVendettaCharacter.cpp index 2c982762..17beee4a 100644 --- a/EndlessVendetta/Source/EndlessVendetta/EndlessVendettaCharacter.cpp +++ b/EndlessVendetta/Source/EndlessVendetta/EndlessVendettaCharacter.cpp @@ -100,13 +100,21 @@ void AEndlessVendettaCharacter::SetupPlayerInputComponent(class UInputComponent* void AEndlessVendettaCharacter::SetCrouch() { Crouch(); - GLog->Log("Crouching"); } void AEndlessVendettaCharacter::SetUnCrouch() { UnCrouch(); - GLog->Log("UnCrouching"); +} + +void AEndlessVendettaCharacter::TakeDamage(float DamageAmount) +{ + CurrentHealth -= DamageAmount; + if (CurrentHealth <= 0) + { + CurrentHealth = 0; + UE_LOG(LogTemp, Warning, TEXT("Player is dead")); + } } void AEndlessVendettaCharacter::ToggleRecon() diff --git a/EndlessVendetta/Source/EndlessVendetta/EndlessVendettaCharacter.h b/EndlessVendetta/Source/EndlessVendetta/EndlessVendettaCharacter.h index 00f93ad3..8b690da9 100644 --- a/EndlessVendetta/Source/EndlessVendetta/EndlessVendettaCharacter.h +++ b/EndlessVendetta/Source/EndlessVendetta/EndlessVendettaCharacter.h @@ -68,6 +68,13 @@ class AEndlessVendettaCharacter : public ACharacter public: AEndlessVendettaCharacter(); + UPROPERTY(EditDefaultsOnly, Category = "Stats") + float CurrentHealth = 100.0f; + UPROPERTY(EditDefaultsOnly, Category = "Stats") + float MaxHealth = 100.0f; + UPROPERTY(EditDefaultsOnly, Category = "Stats") + float DefaultHealth = 100.0f; + protected: virtual void BeginPlay(); @@ -99,7 +106,6 @@ public: TSubclassOf SecondaryWeaponClass; ABaseWeaponClass* PrimaryWeapon; - ABaseWeaponClass* SecondaryWeapon; UFUNCTION(BlueprintCallable, Category = "Weapons") @@ -113,11 +119,9 @@ protected: void Look(const FInputActionValue& Value); void ToggleRecon(); - void ToggleCombat(); void EquipPrimary(); - void EquipSecondary(); //Called from Player BluePrints @@ -138,4 +142,7 @@ public: USkeletalMeshComponent* GetMesh1P() const { return Mesh1P; } /** Returns FirstPersonCameraComponent Sub-object **/ UCameraComponent* GetFirstPersonCameraComponent() const { return FirstPersonCameraComponent; } + + UFUNCTION(BlueprintCallable, Category = "Damage Control") + void TakeDamage(float DamageAmount); };