// 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; }