status/LowHealthDamageStatus.cs
using System;
using System.Collections.Generic;
using System.Linq;
using Sandbox;
[Status(5, 0, 1f, 0, false )]
public class LowHealthDamageStatus : Status
{
public LowHealthDamageStatus()
{
Title = "Bloody Rage";
IconPath = "textures/icons/low_health_damage.png";
}
public override void Init(Player player)
{
base.Init(player);
ShouldUpdate = true;
}
public override void Refresh()
{
Description = GetDescription(Level);
Player.Modify(this, PlayerStat.LowHealthDamageMultiplier, GetMultForLevel(Level), ModifierType.Mult);
}
public override void Update( float dt )
{
base.Update( dt );
var multiplier = Utils.Map( Player.Health, Player.Stats[PlayerStat.MaxHp], 0f, 1f, Player.Stats[PlayerStat.LowHealthDamageMultiplier] );
if ( multiplier > 1f )
DataString = $"+{Math.Ceiling( (multiplier - 1f) * 100f )}%";
else
DataString = "";
}
public override string GetDescription(int newLevel)
{
return string.Format("Deal up to {0}% more damage when you have less HP", GetPercentForLevel(Level));
}
public override string GetUpgradeDescription(int newLevel)
{
return newLevel > 1 ? string.Format("Deal up to {0}%→{1}% more damage when you have less HP", GetPercentForLevel(newLevel - 1), GetPercentForLevel(newLevel)) : GetDescription(newLevel);
}
public float GetMultForLevel(int level)
{
return 1f + 0.35f * level + (level == 5 ? 0.05f : 0f);
}
public float GetPercentForLevel(int level)
{
return 35 * level + (level == 5 ? 5 : 0);
}
}