I’m trying to detect when a class inherited from ADestructibleActor has been destroyed. I couldn’t find any clues on how to implement the OnActorFracture or OnComponentFracture events in C++ so I decided to hack it by overriding TakeDamage(). Unfortunately, nothing I’ve tried has called my override function. I know it’s doing something because the projectile registers a hit and the mesh fractures.
This code is based on the First Person C++ template and I’ve left the projectile class alone except for modifying OnHit().
Anyone know how to override TakeDamage() for a destructible actor or how to get the OnActorFracture or OnComponentFracture events in my class?
In MyActor’s header file:
float TakeDamage(float DamageAmount, struct FDamageEvent const & DamageEvent, class AController * EventInstigator, AActor * DamageCauser) override;
Side note, I’ve tried every combination of the UFUNCTION()
, override
, virtual
keywords I could think of.
In MyActor’s source file:
float AMyActor::TakeDamage(float DamageAmount, struct FDamageEvent const & DamageEvent, class AController * EventInstigator, AActor * DamageCauser)
{
float returnVal = Super::TakeDamage(DamageAmount, DamageEvent, EventInstigator, DamageCauser);
if (GEngine)
{
GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Green, "Damage");
}
// More stuff
return returnVal;
}
In my projectile’s OnHit function:
AMyActor* pTarget(Cast<AMyActor>(OtherActor));
if (pTarget)
{
if (GEngine)
{
GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Green, "Hit");
}
pTarget->GetDestructibleComponent()->ApplyDamage(100.0f, pTarget->GetActorLocation(), NormalImpulse, 0.0f);
}