ui/HealthBar.razor
@using Sandbox;
@using Sandbox.UI;
@inherits Panel
@attribute [StyleSheet("HealthBar.razor.scss")]
<root>
@{
var manager = Manager.Instance;
var hpPercent = Math.Clamp(manager.HP / (float)manager.MaxHP, 0f, 1f);
var barColor = (manager.HP == 1 ? Color.Lerp(new Color(1f, 0f, 0f), new Color(1f, 1f, 0f), 0.5f + Utils.FastSin(Time.Now * 8f) * 0.5f) : new Color(1f, 0.2f, 0.2f));
var borderColor = (manager.HP == 1 ? Color.Lerp(new Color(1f, 0f, 0f), new Color(0f, 0f, 0f), 0.5f + Utils.FastSin(Time.Now * 8f) * 0.5f) : new Color(0f, 0f, 0f));
}
<div class="hp_bar">
<div class="hp_bar_delta" style="height:@(hpPercent * 100f)%;"></div>
<div class="hp_bar_overlay" style="height:@(hpPercent * 100f)%; background-color:@( barColor.Rgba );"></div>
</div>
<div class="hp_bar_border" style="border: 6px solid @( borderColor.Rgba );"></div>
<HealthBarHeart />
</root>
@code
{
protected override int BuildHash()
{
var manager = Manager.Instance;
if(manager.HP == 1)
{
return HashCode.Combine(
Time.Now
);
}
float hpChangedHash = Manager.Instance.TimeSinceHPChanged < 1f ? Time.Now : 0f;
return HashCode.Combine(
manager.HP,
manager.MaxHP,
hpChangedHash
);
}
}