This repository has been archived on 2025-04-18. You can view files and clone it, but cannot push or open issues or pull requests.
TjgL fdac89c84c Updated hitboxes OnHit signature
Signed-off-by: TjgL <lithmoneo@gmail.com>
2025-03-14 15:31:45 +01:00

52 lines
1.5 KiB
C++

// Fill out your copyright notice in the Description page of Project Settings.
#include "Player/LMHitBox.h"
#include "Player/LMBulletInfo.h"
#include "Player/LMHealthComponent.h"
ULMHitBox::ULMHitBox()
{
PrimaryComponentTick.bCanEverTick = true;
}
void ULMHitBox::OnHit(const FLMBulletInfo& BulletInfo, const FHitResult& Hit)
{
const double Distance = FVector::Distance(BulletInfo.Origin, GetComponentLocation());
const float TotalDamage = CalculateDamage(BulletInfo.Damage, Distance, BulletInfo.Falloff, BulletInfo.MaxDistance);
OnHitSimple(TotalDamage, BulletInfo.Origin, Hit);
}
void ULMHitBox::OnHitSimple(float const Damage, FVector const Origin, const FHitResult& Hit)
{
OnHitBoxHit.Broadcast(this, Damage, Origin, Hit);
}
bool ULMHitBox::CanBeHitByTeam(const ETeam Team) const
{
if (!HealthComponent)
return false;
return HealthComponent->CanBeHurtByTeam(Team);
}
float ULMHitBox::CalculateDamage_Implementation(const float Damage, const float Distance, UCurveFloat* Falloff, const float MaxDistance)
{
const float Absorption = Damage - FlatDamageAbsorption;
const float FalloffModifier = Falloff->GetFloatValue(Distance / MaxDistance);
UE_LOG(LogTemp, Display, TEXT("Falloff : %f"), FalloffModifier);
const float FalloffDamage = Absorption * FalloffModifier;
UE_LOG(LogTemp, Display, TEXT("Damage With Fallof: %f"), FalloffDamage)
const float FinalDamage = FalloffDamage * DamageModifier;
UE_LOG(LogTemp, Display, TEXT("Final Damages: %f"), FinalDamage)
return FinalDamage;
}