Fix damaged-building artwork and don't show healthbar for dead units (cnc critical-building state)

This commit is contained in:
Paul Chote
2010-07-30 10:06:11 +12:00
parent 98ac5a036f
commit 0580dc4adf
9 changed files with 11 additions and 23 deletions

View File

@@ -26,7 +26,7 @@ namespace OpenRA.Traits
public virtual object Create(ActorInitializer init) { return new Health(init, this); } public virtual object Create(ActorInitializer init) { return new Health(init, this); }
} }
public enum ExtendedDamageState { Undamaged, Normal, ThreeQuarter, Half, Quarter, Dead }; public enum ExtendedDamageState { Dead, Quarter, Half, ThreeQuarter, Normal, Undamaged };
public class Health public class Health
{ {
@@ -140,24 +140,12 @@ namespace OpenRA.Traits
public static class HealthExts public static class HealthExts
{ {
public static int Health(this Actor self)
{
var health = self.traits.GetOrDefault<Health>();
return (health == null) ? 0 : health.HP;
}
public static bool IsDead(this Actor self) public static bool IsDead(this Actor self)
{ {
var health = self.traits.GetOrDefault<Health>(); var health = self.traits.GetOrDefault<Health>();
return (health == null) ? true : health.IsDead; return (health == null) ? true : health.IsDead;
} }
public static DamageState GetDamageState(this Actor self)
{
var health = self.traits.GetOrDefault<Health>();
return (health == null) ? DamageState.Normal : health.DamageState;
}
public static ExtendedDamageState GetExtendedDamageState(this Actor self) public static ExtendedDamageState GetExtendedDamageState(this Actor self)
{ {
var health = self.traits.GetOrDefault<Health>(); var health = self.traits.GetOrDefault<Health>();

View File

@@ -64,7 +64,7 @@ namespace OpenRA.Traits
protected virtual string GetPrefix(Actor self) protected virtual string GetPrefix(Actor self)
{ {
return self.GetDamageState() == DamageState.Half ? "damaged-" : ""; return self.GetExtendedDamageState() <= ExtendedDamageState.Half ? "damaged-" : "";
} }
public void PlayCustomAnim(Actor self, string name) public void PlayCustomAnim(Actor self, string name)

View File

@@ -62,7 +62,7 @@ namespace OpenRA.Traits
void DrawHealthBar(Actor self, float2 xy, float2 Xy) void DrawHealthBar(Actor self, float2 xy, float2 Xy)
{ {
var health = self.traits.GetOrDefault<Health>(); var health = self.traits.GetOrDefault<Health>();
if (health == null) if (self.IsDead() || health == null)
return; return;
var c = Color.Gray; var c = Color.Gray;

View File

@@ -60,7 +60,7 @@ namespace OpenRA.Mods.RA
return inRange return inRange
.Where(a => a != self && self.Owner.Stances[ a.Owner ] == Stance.Ally) .Where(a => a != self && self.Owner.Stances[ a.Owner ] == Stance.Ally)
.Where(a => Combat.HasAnyValidWeapons(self, Target.FromActor(a))) .Where(a => Combat.HasAnyValidWeapons(self, Target.FromActor(a)))
.Where(a => a.traits.Contains<Health>() && a.GetExtendedDamageState() != ExtendedDamageState.Undamaged) .Where(a => a.traits.Contains<Health>() && a.GetExtendedDamageState() < ExtendedDamageState.Undamaged)
.OrderBy(a => (a.Location - self.Location).LengthSquared) .OrderBy(a => (a.Location - self.Location).LengthSquared)
.FirstOrDefault(); .FirstOrDefault();
} }

View File

@@ -45,13 +45,13 @@ namespace OpenRA.Mods.RA
public string VoicePhraseForOrder(Actor self, Order order) public string VoicePhraseForOrder(Actor self, Order order)
{ {
return (order.OrderString == "EngineerRepair" return (order.OrderString == "EngineerRepair"
&& order.TargetActor.GetExtendedDamageState() != ExtendedDamageState.Undamaged) ? "Attack" : null; && order.TargetActor.GetExtendedDamageState() < ExtendedDamageState.Undamaged) ? "Attack" : null;
} }
public void ResolveOrder(Actor self, Order order) public void ResolveOrder(Actor self, Order order)
{ {
if (order.OrderString == "EngineerRepair" if (order.OrderString == "EngineerRepair"
&& order.TargetActor.GetExtendedDamageState() != ExtendedDamageState.Undamaged) && order.TargetActor.GetExtendedDamageState() < ExtendedDamageState.Undamaged)
{ {
if (self.Owner == self.World.LocalPlayer) if (self.Owner == self.World.LocalPlayer)
self.World.AddFrameEndTask(w => self.World.AddFrameEndTask(w =>

View File

@@ -35,7 +35,7 @@ namespace OpenRA.Mods.RA.Orders
yield break; yield break;
if (underCursor.Info.Traits.Contains<RepairableBuildingInfo>() if (underCursor.Info.Traits.Contains<RepairableBuildingInfo>()
&& underCursor.GetExtendedDamageState() != ExtendedDamageState.Undamaged) && underCursor.GetExtendedDamageState() < ExtendedDamageState.Undamaged)
yield return new Order("Repair", underCursor); yield return new Order("Repair", underCursor);
} }
} }

View File

@@ -27,7 +27,7 @@ namespace OpenRA.Mods.RA.Render
string GetPrefix(Actor self) string GetPrefix(Actor self)
{ {
return self.GetDamageState() == DamageState.Half ? "damaged-" : ""; return self.GetExtendedDamageState() <= ExtendedDamageState.Half ? "damaged-" : "";
} }
public RenderWarFactory(Actor self) public RenderWarFactory(Actor self)

View File

@@ -46,7 +46,7 @@ namespace OpenRA.Mods.RA
bool CanRepair(Actor self) bool CanRepair(Actor self)
{ {
var li = self.traits.GetOrDefault<LimitedAmmo>(); var li = self.traits.GetOrDefault<LimitedAmmo>();
return (Health.ExtendedDamageState != ExtendedDamageState.Undamaged || (li != null && !li.FullAmmo()) ); return (Health.ExtendedDamageState < ExtendedDamageState.Undamaged || (li != null && !li.FullAmmo()) );
} }
public string CursorForOrder(Actor self, Order order) public string CursorForOrder(Actor self, Order order)

View File

@@ -31,7 +31,7 @@ namespace OpenRA.Mods.RA
if (underCursor.Owner == self.Owner && if (underCursor.Owner == self.Owner &&
self.Info.Traits.Get<RepairableNearInfo>().Buildings.Contains( underCursor.Info.Name ) && self.Info.Traits.Get<RepairableNearInfo>().Buildings.Contains( underCursor.Info.Name ) &&
self.GetExtendedDamageState() != ExtendedDamageState.Undamaged) self.GetExtendedDamageState() < ExtendedDamageState.Undamaged)
return new Order("Enter", self, underCursor); return new Order("Enter", self, underCursor);
return null; return null;