shiny healthbars

This commit is contained in:
Chris Forbes
2011-03-02 22:03:10 +13:00
parent 4a71672a5f
commit 0da7009eea
2 changed files with 42 additions and 11 deletions

View File

@@ -23,12 +23,14 @@ namespace OpenRA.Traits
public enum DamageState { Undamaged, Light, Medium, Heavy, Critical, Dead }; public enum DamageState { Undamaged, Light, Medium, Heavy, Critical, Dead };
public class Health : ISync public class Health : ISync, ITick
{ {
public readonly HealthInfo Info; public readonly HealthInfo Info;
[Sync] [Sync]
int hp; int hp;
public int DisplayHp { get; private set; }
public Health(ActorInitializer init, HealthInfo info) public Health(ActorInitializer init, HealthInfo info)
{ {
@@ -111,7 +113,16 @@ namespace OpenRA.Traits
} }
if (hp > MaxHP) hp = MaxHP; if (hp > MaxHP) hp = MaxHP;
} }
public void Tick(Actor self)
{
if (hp > DisplayHp)
DisplayHp = hp;
if (DisplayHp > hp)
DisplayHp = (DisplayHp + 2 * hp) / 3;
}
} }

View File

@@ -72,9 +72,10 @@ namespace OpenRA.Traits
var health = self.TraitOrDefault<Health>(); var health = self.TraitOrDefault<Health>();
if (health == null || health.IsDead) return; if (health == null || health.IsDead) return;
var c = Color.Gray; var c = Color.FromArgb(128, 30, 30, 30);
Game.Renderer.LineRenderer.DrawLine(xy + new float2(0, -2), xy + new float2(0, -4), c, c); var c2 = Color.FromArgb(128, 10, 10, 10);
Game.Renderer.LineRenderer.DrawLine(Xy + new float2(0, -2), Xy + new float2(0, -4), c, c); // Game.Renderer.LineRenderer.DrawLine(xy + new float2(0, -2), xy + new float2(0, -4), c, c);
// Game.Renderer.LineRenderer.DrawLine(Xy + new float2(0, -2), Xy + new float2(0, -4), c, c);
var healthColor = (health.DamageState == DamageState.Critical) ? Color.Red : var healthColor = (health.DamageState == DamageState.Critical) ? Color.Red :
(health.DamageState == DamageState.Heavy) ? Color.Yellow : Color.LimeGreen; (health.DamageState == DamageState.Heavy) ? Color.Yellow : Color.LimeGreen;
@@ -85,14 +86,33 @@ namespace OpenRA.Traits
healthColor.G / 2, healthColor.G / 2,
healthColor.B / 2); healthColor.B / 2);
var z = float2.Lerp(xy, Xy, health.HPFraction); var z = float2.Lerp(xy, Xy, health.HPFraction);
Game.Renderer.LineRenderer.DrawLine(z + new float2(0, -4), Xy + new float2(0, -4), c, c);
Game.Renderer.LineRenderer.DrawLine(z + new float2(0, -2), Xy + new float2(0, -2), c, c); Game.Renderer.LineRenderer.DrawLine(xy + new float2(0, -4), Xy + new float2(0, -4), c, c);
Game.Renderer.LineRenderer.DrawLine(xy + new float2(0, -3), Xy + new float2(0, -3), c2, c2);
Game.Renderer.LineRenderer.DrawLine(xy + new float2(0, -2), Xy + new float2(0, -2), c, c);
// Game.Renderer.LineRenderer.DrawLine(z + new float2(0, -4), Xy + new float2(0, -4), c, c);
// Game.Renderer.LineRenderer.DrawLine(z + new float2(0, -2), Xy + new float2(0, -2), c, c);
Game.Renderer.LineRenderer.DrawLine(xy + new float2(0, -3), z + new float2(0, -3), healthColor, healthColor); Game.Renderer.LineRenderer.DrawLine(xy + new float2(0, -3), z + new float2(0, -3), healthColor, healthColor);
Game.Renderer.LineRenderer.DrawLine(xy + new float2(0, -2), z + new float2(0, -2), healthColor2, healthColor2); Game.Renderer.LineRenderer.DrawLine(xy + new float2(0, -2), z + new float2(0, -2), healthColor2, healthColor2);
Game.Renderer.LineRenderer.DrawLine(xy + new float2(0, -4), z + new float2(0, -4), healthColor2, healthColor2); Game.Renderer.LineRenderer.DrawLine(xy + new float2(0, -4), z + new float2(0, -4), healthColor2, healthColor2);
if (health.DisplayHp != health.HP)
{
var deltaColor = Color.OrangeRed;
var deltaColor2 = Color.FromArgb(
255,
deltaColor.R / 2,
deltaColor.G / 2,
deltaColor.B / 2);
var zz = float2.Lerp(xy, Xy, (float)health.DisplayHp / health.MaxHP);
Game.Renderer.LineRenderer.DrawLine(z + new float2(0, -3), zz + new float2(0, -3), deltaColor, deltaColor);
Game.Renderer.LineRenderer.DrawLine(z + new float2(0, -2), zz + new float2(0, -2), deltaColor2, deltaColor2);
Game.Renderer.LineRenderer.DrawLine(z + new float2(0, -4), zz + new float2(0, -4), deltaColor2, deltaColor2);
}
} }
void DrawControlGroup(WorldRenderer wr, Actor self, float2 basePosition) void DrawControlGroup(WorldRenderer wr, Actor self, float2 basePosition)