Correct the ordering on DamageState
This commit is contained in:
@@ -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
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -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)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -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 =>
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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 )
|
||||||
|
|||||||
@@ -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");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user