Correct the ordering on DamageState

This commit is contained in:
Paul Chote
2010-07-30 22:02:19 +12:00
parent 4cf0610fd9
commit 8528c5d3a3
12 changed files with 28 additions and 40 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 DamageState { Dead, Critical, Heavy, Medium, Light, Undamaged }; public enum DamageState { Undamaged, Light, Medium, Heavy, Critical, Dead };
public class Health public class 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.Heavy ? "damaged-" : ""; return self.GetDamageState() >= DamageState.Heavy ? "damaged-" : "";
} }
public void PlayCustomAnim(Actor self, string name) public void PlayCustomAnim(Actor self, string name)

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 => !a.IsDead()) .Where(a => !a.IsDead())
.Where(a => a.traits.Contains<Health>() && a.GetDamageState() < DamageState.Undamaged) .Where(a => a.traits.Contains<Health>() && a.GetDamageState() > DamageState.Undamaged)
.Where(a => Combat.HasAnyValidWeapons(self, Target.FromActor(a))) .Where(a => Combat.HasAnyValidWeapons(self, Target.FromActor(a)))
.OrderBy(a => (a.Location - self.Location).LengthSquared) .OrderBy(a => (a.Location - self.Location).LengthSquared)
.FirstOrDefault(); .FirstOrDefault();

View File

@@ -168,8 +168,8 @@ namespace OpenRA.Mods.RA
} }
var ds = Health.DamageState; var ds = Health.DamageState;
currentTemplate = (ds == DamageState.Heavy && Info.DamagedTemplate > 0) ? Info.DamagedTemplate : currentTemplate = (ds == DamageState.Dead && Info.DestroyedTemplate > 0) ? Info.DestroyedTemplate :
(ds == DamageState.Dead && Info.DestroyedTemplate > 0) ? Info.DestroyedTemplate : Info.Template; (ds >= DamageState.Heavy && Info.DamagedTemplate > 0) ? Info.DamagedTemplate : Info.Template;
if (Info.Long && ds == DamageState.Dead) if (Info.Long && ds == DamageState.Dead)
{ {

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.GetDamageState() < DamageState.Undamaged) ? "Attack" : null; && order.TargetActor.GetDamageState() > DamageState.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.GetDamageState() < DamageState.Undamaged) && order.TargetActor.GetDamageState() > DamageState.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.GetDamageState() < DamageState.Undamaged) && underCursor.GetDamageState() > DamageState.Undamaged)
yield return new Order("Repair", underCursor); yield return new Order("Repair", underCursor);
} }
} }

View File

@@ -61,19 +61,15 @@ namespace OpenRA.Mods.RA.Render
if (!e.DamageStateChanged) if (!e.DamageStateChanged)
return; return;
switch( e.DamageState ) if (e.DamageState == DamageState.Dead)
self.World.AddFrameEndTask(w => w.Add(new Explosion(w, self.CenterLocation.ToInt2(), "building", false)));
else if (e.DamageState >= DamageState.Heavy)
{ {
case DamageState.Medium: case DamageState.Light: case DamageState.Undamaged: anim.ReplaceAnim("damaged-idle");
anim.ReplaceAnim("idle"); Sound.Play(self.Info.Traits.Get<BuildingInfo>().DamagedSound, self.CenterLocation);
break;
case DamageState.Heavy: case DamageState.Critical:
anim.ReplaceAnim("damaged-idle");
Sound.Play(self.Info.Traits.Get<BuildingInfo>().DamagedSound, self.CenterLocation);
break;
case DamageState.Dead:
self.World.AddFrameEndTask(w => w.Add(new Explosion(w, self.CenterLocation.ToInt2(), "building", false)));
break;
} }
else
anim.ReplaceAnim("idle");
} }
public void Selling( Actor self ) public void Selling( Actor self )

View File

@@ -33,16 +33,13 @@ namespace OpenRA.Mods.RA.Render
{ {
if (!e.DamageStateChanged) return; if (!e.DamageStateChanged) return;
switch( e.DamageState ) if (e.DamageState >= DamageState.Heavy)
{ {
case DamageState.Medium: case DamageState.Light: case DamageState.Undamaged: anim.ReplaceAnim("damaged-idle");
anim.ReplaceAnim("idle"); Sound.Play(self.Info.Traits.Get<BuildingInfo>().DamagedSound, self.CenterLocation);
break;
case DamageState.Heavy: case DamageState.Critical:
anim.ReplaceAnim("damaged-idle");
Sound.Play(self.Info.Traits.Get<BuildingInfo>().DamagedSound, self.CenterLocation);
break;
} }
else
anim.ReplaceAnim("idle");
} }
} }
} }

View File

@@ -27,7 +27,7 @@ namespace OpenRA.Mods.RA.Render
string GetPrefix(Actor self) string GetPrefix(Actor self)
{ {
return self.GetDamageState() <= DamageState.Heavy ? "damaged-" : ""; return self.GetDamageState() >= DamageState.Heavy ? "damaged-" : "";
} }
public RenderWarFactory(Actor self) public RenderWarFactory(Actor self)
@@ -55,15 +55,10 @@ namespace OpenRA.Mods.RA.Render
{ {
if (!e.DamageStateChanged) return; if (!e.DamageStateChanged) return;
switch( e.DamageState ) if (e.DamageState >= DamageState.Heavy)
{ roof.ReplaceAnim("damaged-" + roof.CurrentSequence.Name);
case DamageState.Medium: case DamageState.Light: case DamageState.Undamaged: else
roof.ReplaceAnim(roof.CurrentSequence.Name.Replace("damaged-","")); roof.ReplaceAnim(roof.CurrentSequence.Name.Replace("damaged-",""));
break;
case DamageState.Heavy: case DamageState.Critical:
roof.ReplaceAnim("damaged-" + roof.CurrentSequence.Name);
break;
}
} }
public void UnitProduced(Actor self, Actor other) public void UnitProduced(Actor self, Actor other)

View File

@@ -37,7 +37,7 @@ namespace OpenRA.Mods.RA.Render
public void Damaged(Actor self, AttackInfo e) public void Damaged(Actor self, AttackInfo e)
{ {
if (e.DamageState > DamageState.Heavy) return; if (e.DamageState < DamageState.Heavy) return;
if (isSmoking) return; if (isSmoking) return;
isSmoking = true; isSmoking = true;

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.DamageState < DamageState.Undamaged || (li != null && !li.FullAmmo()) ); return (Health.DamageState > DamageState.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.GetDamageState() < DamageState.Undamaged) self.GetDamageState() > DamageState.Undamaged)
return new Order("Enter", self, underCursor); return new Order("Enter", self, underCursor);
return null; return null;