From faa8f54e7cd71ef3dcc4c526baa8b6639e1a49ed Mon Sep 17 00:00:00 2001 From: Chris Forbes Date: Sat, 27 Mar 2010 10:05:01 +1300 Subject: [PATCH] impose the hack on WALLs, not everything-else --- OpenRA.Game/Actor.cs | 29 ++++++++++++++----- OpenRA.Game/Traits/Attack/AttackInfo.cs | 2 ++ OpenRA.Game/Traits/Bridge.cs | 21 +------------- .../Traits/Render/RenderBuildingWall.cs | 12 ++++---- OpenRA.Game/Traits/TraitsInterfaces.cs | 3 +- OpenRA.Game/Traits/Wall.cs | 7 ----- 6 files changed, 33 insertions(+), 41 deletions(-) diff --git a/OpenRA.Game/Actor.cs b/OpenRA.Game/Actor.cs index a23929d4dc..878b6d251c 100755 --- a/OpenRA.Game/Actor.cs +++ b/OpenRA.Game/Actor.cs @@ -146,23 +146,35 @@ namespace OpenRA if (Health <= 0) return DamageState.Dead; - if (Health < this.GetMaxHP() * Rules.General.ConditionRed) - return DamageState.Quarter; - if (Health < this.GetMaxHP() * Rules.General.ConditionYellow) return DamageState.Half; - - if (Health < this.GetMaxHP() * 0.75) - return DamageState.ThreeQuarter; - + 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( @@ -184,6 +196,7 @@ namespace OpenRA if (Health > maxHP) Health = maxHP; var newState = GetDamageState(); + var newExtendedState = GetExtendedDamageState(); foreach (var nd in traits.WithInterface()) nd.Damaged(this, new AttackInfo @@ -192,6 +205,8 @@ 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 90cbdf2877..d002fef864 100644 --- a/OpenRA.Game/Traits/Attack/AttackInfo.cs +++ b/OpenRA.Game/Traits/Attack/AttackInfo.cs @@ -28,6 +28,8 @@ 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/Bridge.cs b/OpenRA.Game/Traits/Bridge.cs index 8561d0f10e..95ecacb038 100644 --- a/OpenRA.Game/Traits/Bridge.cs +++ b/OpenRA.Game/Traits/Bridge.cs @@ -144,28 +144,9 @@ namespace OpenRA.Traits return b != null && b.self.IsInWorld && b.self.Info.Traits.Get().Long; } - // HACK because paul broke the world with his extended damage states... :( - static DamageState MapDamageState(DamageState ds) - { - switch (ds) - { - case DamageState.Normal: - case DamageState.ThreeQuarter: - return DamageState.Normal; - - case DamageState.Half: - case DamageState.Quarter: - return DamageState.Half; - - case DamageState.Dead: - default: - return DamageState.Dead; - } - } - void UpdateState() { - var ds = MapDamageState(self.GetDamageState()); + var ds = self.GetDamageState(); if (!self.Info.Traits.Get().Long) { state = (int)ds; diff --git a/OpenRA.Game/Traits/Render/RenderBuildingWall.cs b/OpenRA.Game/Traits/Render/RenderBuildingWall.cs index 2535c90f5c..ff6b9a4b3d 100644 --- a/OpenRA.Game/Traits/Render/RenderBuildingWall.cs +++ b/OpenRA.Game/Traits/Render/RenderBuildingWall.cs @@ -44,22 +44,22 @@ namespace OpenRA.Traits public override void Damaged(Actor self, AttackInfo e) { - if (!e.DamageStateChanged) return; + if (!e.ExtendedDamageStateChanged) return; - switch (e.DamageState) + switch (e.ExtendedDamageState) { - case DamageState.Normal: + case ExtendedDamageState.Normal: seqName = "idle"; break; - case DamageState.ThreeQuarter: + case ExtendedDamageState.ThreeQuarter: if (damageStates >= 4) seqName = "minor-damaged-idle"; break; - case DamageState.Half: + case ExtendedDamageState.Half: seqName = "damaged-idle"; Sound.Play(self.Info.Traits.Get().DamagedSound); break; - case DamageState.Quarter: + case ExtendedDamageState.Quarter: if (damageStates >= 3) { seqName = "critical-idle"; diff --git a/OpenRA.Game/Traits/TraitsInterfaces.cs b/OpenRA.Game/Traits/TraitsInterfaces.cs index 524262a40d..8d229530d1 100644 --- a/OpenRA.Game/Traits/TraitsInterfaces.cs +++ b/OpenRA.Game/Traits/TraitsInterfaces.cs @@ -27,7 +27,8 @@ using OpenRA.Traits.Activities; namespace OpenRA.Traits { - public enum DamageState { Normal, ThreeQuarter, Half, Quarter, Dead }; + 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 }; diff --git a/OpenRA.Game/Traits/Wall.cs b/OpenRA.Game/Traits/Wall.cs index ca73d5d60a..43081e57f9 100644 --- a/OpenRA.Game/Traits/Wall.cs +++ b/OpenRA.Game/Traits/Wall.cs @@ -18,13 +18,6 @@ */ #endregion -using System; -using System.Collections.Generic; -using System.Linq; -using OpenRA.Effects; -using OpenRA.GameRules; -using OpenRA.Traits.Activities; - namespace OpenRA.Traits { public class WallInfo : StatelessTraitInfo {}