72 lines
2.1 KiB
C++
72 lines
2.1 KiB
C++
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
|
|
#pragma once
|
|
|
|
#include "CoreMinimal.h"
|
|
#include "GameFramework/Actor.h"
|
|
#include "CombatDamageable.h"
|
|
#include "CombatDamageableBox.generated.h"
|
|
|
|
/**
|
|
* A simple physics box that reacts to damage through the ICombatDamageable interface
|
|
*/
|
|
UCLASS(abstract)
|
|
class ACombatDamageableBox : public AActor, public ICombatDamageable
|
|
{
|
|
GENERATED_BODY()
|
|
|
|
/** Damageable box mesh */
|
|
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Components", meta = (AllowPrivateAccess = "true"))
|
|
UStaticMeshComponent* Mesh;
|
|
|
|
public:
|
|
|
|
/** Constructor */
|
|
ACombatDamageableBox();
|
|
|
|
protected:
|
|
|
|
/** Amount of HP this box starts with. */
|
|
UPROPERTY(EditAnywhere, Category="Damage")
|
|
float CurrentHP = 3.0f;
|
|
|
|
/** Time to wait before we remove this box from the level. */
|
|
UPROPERTY(EditAnywhere, Category="Damage", meta = (ClampMin = 0, ClampMax = 10, Units = "s"))
|
|
float DeathDelayTime = 6.0f;
|
|
|
|
/** Timer to defer destruction of this box after its HP are depleted */
|
|
FTimerHandle DeathTimer;
|
|
|
|
/** Blueprint damage handler for effect playback */
|
|
UFUNCTION(BlueprintImplementableEvent, Category="Damage")
|
|
void OnBoxDamaged(const FVector& DamageLocation, const FVector& DamageImpulse);
|
|
|
|
/** Blueprint destruction handler for effect playback */
|
|
UFUNCTION(BlueprintImplementableEvent, Category="Damage")
|
|
void OnBoxDestroyed();
|
|
|
|
/** Timer callback to remove the box from the level after it dies */
|
|
void RemoveFromLevel();
|
|
|
|
public:
|
|
|
|
/** EndPlay cleanup */
|
|
void EndPlay(EEndPlayReason::Type EndPlayReason) override;
|
|
|
|
// ~Begin CombatDamageable interface
|
|
|
|
/** Handles damage and knockback events */
|
|
virtual void ApplyDamage(float Damage, AActor* DamageCauser, const FVector& DamageLocation, const FVector& DamageImpulse) override;
|
|
|
|
/** Handles death events */
|
|
virtual void HandleDeath() override;
|
|
|
|
/** Handles healing events */
|
|
virtual void ApplyHealing(float Healing, AActor* Healer) override;
|
|
|
|
/** Allows reaction to incoming attacks */
|
|
virtual void NotifyDanger(const FVector& DangerLocation, AActor* DangerSource) override;
|
|
|
|
// ~End CombatDamageable interface
|
|
};
|