Cost Gameplay Effect On Max Values

Hello there,
As all the people around I’m using Cost GE to check the cost of my ability. Everything works fine when I’m SUBSTRACTING certain attribute from the ability set.

But what I’m trying to do is different.
I have a set which is actually having MAX logic, like you are charging something and if it hits the max value, my cost value should check it that I can no longer charge.

Scenario :
Charge Supply 100/100
Battery 0/50

Charge Done In a 50 Units
Charge Supply 50/100
Battery 50/50

**Problem starts here.

It goes like
Charge Supply 30/100
Battery 50/50

How can I make the cost GE also checks the MAX value of attribute to evaluate cost!

bool FActiveGameplayEffectsContainer::CanApplyAttributeModifiers(const UGameplayEffect* GameplayEffect, float Level, const FGameplayEffectContextHandle& EffectContext)
{
	SCOPE_CYCLE_COUNTER(STAT_GameplayEffectsCanApplyAttributeModifiers);

	FGameplayEffectSpec	Spec(GameplayEffect, EffectContext, Level);

	Spec.CalculateModifierMagnitudes();
	
	for(int32 ModIdx = 0; ModIdx < Spec.Modifiers.Num(); ++ModIdx)
	{
		const FGameplayModifierInfo& ModDef = Spec.Def->Modifiers[ModIdx];
		const FModifierSpec& ModSpec = Spec.Modifiers[ModIdx];
	
		// It only makes sense to check additive operators
		if (ModDef.ModifierOp == EGameplayModOp::Additive)
		{
			if (!ModDef.Attribute.IsValid())
			{
				continue;
			}
			const UAttributeSet* Set = Owner->GetAttributeSubobject(ModDef.Attribute.GetAttributeSetClass());
			float CurrentValue = ModDef.Attribute.GetNumericValueChecked(Set);
			float CostValue = ModSpec.GetEvaluatedMagnitude();

			if (CurrentValue + CostValue < 0.f)
			{
				return false;
			}
		}
	}
	return true;
}

Yea we have only check for under 0. So what will be best practice here.