64 lines
1.9 KiB
C++
64 lines
1.9 KiB
C++
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
|
|
#pragma once
|
|
|
|
#include "CoreMinimal.h"
|
|
#include "GameFramework/Actor.h"
|
|
#include "CombatDamageable.h"
|
|
#include "CombatDummy.generated.h"
|
|
|
|
class UStaticMeshComponent;
|
|
class UPhysicsConstraintComponent;
|
|
|
|
/**
|
|
* A simple invincible combat training dummy
|
|
*/
|
|
UCLASS(abstract)
|
|
class ACombatDummy : public AActor, public ICombatDamageable
|
|
{
|
|
GENERATED_BODY()
|
|
|
|
/** Root component */
|
|
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Components", meta = (AllowPrivateAccess = "true"))
|
|
USceneComponent* Root;
|
|
|
|
/** Static base plate */
|
|
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Components", meta = (AllowPrivateAccess = "true"))
|
|
UStaticMeshComponent* BasePlate;
|
|
|
|
/** Physics enabled dummy mesh */
|
|
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Components", meta = (AllowPrivateAccess = "true"))
|
|
UStaticMeshComponent* Dummy;
|
|
|
|
/** Physics constraint holding the dummy and base plate together */
|
|
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Components", meta = (AllowPrivateAccess = "true"))
|
|
UPhysicsConstraintComponent* PhysicsConstraint;
|
|
|
|
public:
|
|
|
|
/** Constructor */
|
|
ACombatDummy();
|
|
|
|
// ~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
|
|
|
|
protected:
|
|
|
|
/** Blueprint handle to apply damage effects */
|
|
UFUNCTION(BlueprintImplementableEvent, Category="Combat", meta = (DisplayName = "On Dummy Damaged"))
|
|
void BP_OnDummyDamaged(const FVector& Location, const FVector& Direction);
|
|
};
|