#include "UnrealProject.h" #include "NetworkCharacter.h" #include "DealDamageProxy.h" #include "DefaultPlayerState.h" #include "ScalingGraph.h" #include "AbilityInfo.h" float ADealDamageProxy::GetAbilityPowerScale() const { if(!character) return 0.0f; AAbilityState* state = character->GetAbilityState(abilityInfo); if(!state) return 0.0f; return state->power; } float ADealDamageProxy::ScaleGraphCurve(const UCurveFloat* val) { if (!IsValid(val)) { GEngine->AddOnScreenDebugMessage((int32)abilityInfo->GetUniqueID(), 2.0f, FColor(255, 20, 20, 255), FString("Invalid curve argument in ") + GetName() + " [" + abilityInfo->GetName() + "]"); JERROR("Invalid curve argument in " + GetName() + " [" + abilityInfo->GetName() + "]"); return 0; } if(abilityInfo->abilityType == EAbilityType::Basic) { return ScaleGraphCurveByLevel(val); } float f = GetAbilityPowerScale(); f = FMath::Clamp(f, 0.0f, 1.0f); return val->GetFloatValue(f); } float ADealDamageProxy::ScaleGraphCurveByLevel(const UCurveFloat* val) { if(!IsValid(val)) { GEngine->AddOnScreenDebugMessage((int32)abilityInfo->GetUniqueID(), 2.0f, FColor(255, 20, 20, 255), FString("Invalid curve argument in ") + GetName() + " [" + abilityInfo->GetName() + "]"); JERROR("Invalid curve argument in " + GetName() + " [" + abilityInfo->GetName() + "]"); return 0; } float f = 0.0f; if(character) { ADefaultPlayerState* ps = Cast(character->PlayerState); if(ps) { f = FMath::Clamp((float)ps->GetLevel() / (float)ps->GetMaxLevel(), 0.0f, 1.0f); } } return val->GetFloatValue(f); } float ULevelScaleLibrary::ScaleGraphCurveFloat(float in, const UCurveFloat* val) { if (!IsValid(val)) { JERROR("Invalid curve argument"); return 0; } in = FMath::Clamp(in, 0.0f, 1.0f); return val->GetFloatValue(in); }