52 lines
1.5 KiB
C++
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;
|
|
}
|
|
|
|
|