#include “Explosive_Barrael.h”
#include “BarrelHealthComponent.h”
#include “Kismet/GameplayStatics.h”
#include “PhysicsEngine/RadialForceComponent.h”
#include “Components/StaticMeshComponent.h”
// Sets default values
AExplosive_Barrael::AExplosive_Barrael()
{
HealthComp = CreateDefaultSubobject(TEXT(“HealthComp”));
HealthComp->OnHealthChangedOfBarrel.AddDynamic(this, &AExplosive_Barrael::OnHealthChanged);
MeshComp = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("MeshComp"));
MeshComp->SetSimulatePhysics(true);
MeshComp->SetCollisionObjectType(ECC_PhysicsBody);
RootComponent = MeshComp;
RadialForceComp = CreateDefaultSubobject<URadialForceComponent>("RadialForceComponent");
RadialForceComp->SetupAttachment(MeshComp);
RadialForceComp->Radius = 250;
RadialForceComp->bImpulseVelChange = true;
RadialForceComp->bAutoActivate = false;
RadialForceComp->bIgnoreOwningActor = true;
ExplosionImpulse = 400;
}
void AExplosive_Barrael::OnHealthChanged(UBarrelHealthComponent* HealthComp_2, float Health, float HealthDeltaorDamage, const UDamageType* DamageType, AController* InstigatedBy, AActor* DamageCauser)
{
if (bExploded)
{
return;
}
if (Health <= 0.0f)
{
bExploded = true;
FVector BoosIntensity = FVector::UpVector * ExplosionImpulse;
MeshComp->AddImpulse(BoosIntensity, NAME_None, true);
if (ExplosionEffect)
{
UGameplayStatics::SpawnEmitterAtLocation(GetWorld(), ExplosionEffect, GetActorLocation());
}
if (ExplodedMaterial)
{
MeshComp->SetMaterial(0, ExplodedMaterial);
}
RadialForceComp->FireImpulse();
}
}
/////////////////////////////////////////////////////////////////.h file/////////////////////////////////////////////////////////////////////////////////////////////////////
#include “CoreMinimal.h”
#include “GameFramework/Actor.h”
#include “Explosive_Barrael.generated.h”
class UBarrelHealthComponent;
class UStaticMeshComponent;
class URadialForceComponent;
class UParticleSystem;
class UMaterialInterface;
UCLASS()
class PROJECT2NDSEMISTER_API AExplosive_Barrael : public AActor
{
GENERATED_BODY()
public:
// Sets default values for this actor’s properties
AExplosive_Barrael();
protected:
//health component is Kept in Barrel
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = “Components”)
UBarrelHealthComponent* HealthComp;
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Components")
UStaticMeshComponent* MeshComp;
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Components")
URadialForceComponent* RadialForceComp;
UFUNCTION()
void OnHealthChanged(UBarrelHealthComponent* HealthComp_1, float Health, float HealthDeltaorDamage, const class UDamageType* DamageType, class AController* InstigatedBy, AActor* DamageCauser);
UPROPERTY(EditDefaultsOnly, Category = "FX")
float ExplosionImpulse;
UPROPERTY(EditDefaultsOnly, Category = "FX")
UParticleSystem* ExplosionEffect;
UPROPERTY(EditDefaultsOnly, Category = "FX")
UMaterialInterface* ExplodedMaterial;
bool bExploded;
};