From 13e6711a3b679a8522de76d2724c70798b3f40cb Mon Sep 17 00:00:00 2001 From: Chris Forbes Date: Sat, 27 Mar 2010 10:11:24 +1300 Subject: [PATCH] further unhacking to localise extended damage state stuff to JUST WALLS --- OpenRA.Game/Actor.cs | 21 ------------- OpenRA.Game/Traits/Attack/AttackInfo.cs | 2 -- .../Traits/Render/RenderBuildingWall.cs | 30 +++++++++++++++++-- OpenRA.Game/Traits/TraitsInterfaces.cs | 1 - 4 files changed, 27 insertions(+), 27 deletions(-) diff --git a/OpenRA.Game/Actor.cs b/OpenRA.Game/Actor.cs index 878b6d251c..8820ceecf6 100755 --- a/OpenRA.Game/Actor.cs +++ b/OpenRA.Game/Actor.cs @@ -152,29 +152,11 @@ namespace OpenRA return DamageState.Normal; } - public ExtendedDamageState GetExtendedDamageState() - { - if (Health <= 0) - return ExtendedDamageState.Dead; - - if (Health < this.GetMaxHP() * Rules.General.ConditionRed) - return ExtendedDamageState.Quarter; - - if (Health < this.GetMaxHP() * Rules.General.ConditionYellow) - return ExtendedDamageState.Half; - - if (Health < this.GetMaxHP() * 0.75) - return ExtendedDamageState.ThreeQuarter; - - return ExtendedDamageState.Normal; - } - public void InflictDamage(Actor attacker, int damage, WarheadInfo warhead) { if (IsDead) return; /* overkill! don't count extra hits as more kills! */ var oldState = GetDamageState(); - var oldExtendedState = GetExtendedDamageState(); /* apply the damage modifiers, if we have any. */ damage = (int)traits.WithInterface().Aggregate( @@ -196,7 +178,6 @@ namespace OpenRA if (Health > maxHP) Health = maxHP; var newState = GetDamageState(); - var newExtendedState = GetExtendedDamageState(); foreach (var nd in traits.WithInterface()) nd.Damaged(this, new AttackInfo @@ -205,8 +186,6 @@ namespace OpenRA Damage = damage, DamageState = newState, DamageStateChanged = newState != oldState, - ExtendedDamageState = newExtendedState, - ExtendedDamageStateChanged = newExtendedState != oldExtendedState, Warhead = warhead }); } diff --git a/OpenRA.Game/Traits/Attack/AttackInfo.cs b/OpenRA.Game/Traits/Attack/AttackInfo.cs index d002fef864..90cbdf2877 100644 --- a/OpenRA.Game/Traits/Attack/AttackInfo.cs +++ b/OpenRA.Game/Traits/Attack/AttackInfo.cs @@ -28,8 +28,6 @@ namespace OpenRA.Traits public WarheadInfo Warhead; public int Damage; public DamageState DamageState; - public ExtendedDamageState ExtendedDamageState; // for 3,4-state stuff public bool DamageStateChanged; - public bool ExtendedDamageStateChanged; } } diff --git a/OpenRA.Game/Traits/Render/RenderBuildingWall.cs b/OpenRA.Game/Traits/Render/RenderBuildingWall.cs index ff6b9a4b3d..8084c8c3ae 100644 --- a/OpenRA.Game/Traits/Render/RenderBuildingWall.cs +++ b/OpenRA.Game/Traits/Render/RenderBuildingWall.cs @@ -41,12 +41,36 @@ namespace OpenRA.Traits this.self = self; this.damageStates = self.Info.Traits.Get().DamageStates; } - + + enum ExtendedDamageState { Normal, ThreeQuarter, Half, Quarter, Dead }; + + ExtendedDamageState GetExtendedState( Actor self, int damage ) + { + var effectiveHealth = self.Health + damage; + + if (effectiveHealth <= 0) + return ExtendedDamageState.Dead; + + if (effectiveHealth < self.GetMaxHP() * Rules.General.ConditionRed) + return ExtendedDamageState.Quarter; + + if (effectiveHealth < self.GetMaxHP() * Rules.General.ConditionYellow) + return ExtendedDamageState.Half; + + if (effectiveHealth < self.GetMaxHP() * 0.75) + return ExtendedDamageState.ThreeQuarter; + + return ExtendedDamageState.Normal; + } + public override void Damaged(Actor self, AttackInfo e) { - if (!e.ExtendedDamageStateChanged) return; + var oldState = GetExtendedState(self, e.Damage); + var newState = GetExtendedState(self, 0); - switch (e.ExtendedDamageState) + if (oldState == newState) return; + + switch (newState) { case ExtendedDamageState.Normal: seqName = "idle"; diff --git a/OpenRA.Game/Traits/TraitsInterfaces.cs b/OpenRA.Game/Traits/TraitsInterfaces.cs index 8d229530d1..90839dab3a 100644 --- a/OpenRA.Game/Traits/TraitsInterfaces.cs +++ b/OpenRA.Game/Traits/TraitsInterfaces.cs @@ -28,7 +28,6 @@ using OpenRA.Traits.Activities; namespace OpenRA.Traits { public enum DamageState { Normal, Half, Dead }; - public enum ExtendedDamageState { Normal, ThreeQuarter, Half, Quarter, Dead }; // depends on the order of pips in WorldRenderer.cs! public enum PipType { Transparent, Green, Yellow, Red, Gray };