From c14654fc6c0858f2c58ee925055c160194dc5039 Mon Sep 17 00:00:00 2001 From: Chris Forbes Date: Mon, 5 Apr 2010 12:41:16 +1200 Subject: [PATCH] #87 CNC buildings should show Critical anim while dying --- OpenRA.Mods.Cnc/CriticalBuildingState.cs | 38 ++++++++++++++++++++++++ OpenRA.Mods.Cnc/OpenRA.Mods.Cnc.csproj | 1 + mods/cnc/defaults.yaml | 1 + mods/cnc/mod.yaml | 2 +- mods/cnc/weapons.yaml | 2 +- 5 files changed, 42 insertions(+), 2 deletions(-) create mode 100644 OpenRA.Mods.Cnc/CriticalBuildingState.cs diff --git a/OpenRA.Mods.Cnc/CriticalBuildingState.cs b/OpenRA.Mods.Cnc/CriticalBuildingState.cs new file mode 100644 index 0000000000..bb9783c7d1 --- /dev/null +++ b/OpenRA.Mods.Cnc/CriticalBuildingState.cs @@ -0,0 +1,38 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using OpenRA.Traits; +using OpenRA.Effects; + +namespace OpenRA.Mods.Cnc +{ + class CriticalBuildingStateInfo : ITraitInfo + { + public readonly int LingerTime = 20; + public object Create(Actor self) { return new CriticalBuildingState(self, this); } + } + + class CriticalBuildingState : INotifyDamage + { + CriticalBuildingStateInfo info; + + public CriticalBuildingState(Actor self, CriticalBuildingStateInfo info) + { + this.info = info; + self.RemoveOnDeath = false; + } + + public void Damaged(Actor self, AttackInfo e) + { + if (e.DamageStateChanged && e.DamageState == DamageState.Dead) + { + self.traits.Get().anim.PlayRepeating("critical-idle"); + self.World.AddFrameEndTask( + w => w.Add( + new DelayedAction(info.LingerTime, + () => w.Remove(self)))); + } + } + } +} diff --git a/OpenRA.Mods.Cnc/OpenRA.Mods.Cnc.csproj b/OpenRA.Mods.Cnc/OpenRA.Mods.Cnc.csproj index 359a56950f..ee510261e8 100644 --- a/OpenRA.Mods.Cnc/OpenRA.Mods.Cnc.csproj +++ b/OpenRA.Mods.Cnc/OpenRA.Mods.Cnc.csproj @@ -45,6 +45,7 @@ + diff --git a/mods/cnc/defaults.yaml b/mods/cnc/defaults.yaml index 58e271ac70..dc2b08d64c 100644 --- a/mods/cnc/defaults.yaml +++ b/mods/cnc/defaults.yaml @@ -52,6 +52,7 @@ DamagedSound: xplos.aud DestroyedSound: xplobig4.aud RenderBuilding: + CriticalBuildingState: ^Tree: Category: Building diff --git a/mods/cnc/mod.yaml b/mods/cnc/mod.yaml index f1f1ba4e25..04ab128763 100644 --- a/mods/cnc/mod.yaml +++ b/mods/cnc/mod.yaml @@ -37,8 +37,8 @@ Chrome: mods/cnc/chrome.xml: Assemblies: - mods/cnc/OpenRA.Mods.Cnc.dll: Cnc mod traits mods/ra/OpenRA.Mods.RA.dll: Red alert mod traits + mods/cnc/OpenRA.Mods.Cnc.dll: Cnc mod traits ChromeLayout: mods/cnc/menus.yaml: diff --git a/mods/cnc/weapons.yaml b/mods/cnc/weapons.yaml index eb012b7d64..b46053fcc4 100644 --- a/mods/cnc/weapons.yaml +++ b/mods/cnc/weapons.yaml @@ -42,7 +42,7 @@ IonCannon: Verses: 100%,100%,100%,100%,100% InfDeath: 4 Warhead@area: - DamageMode: PerCell + DamageModel: PerCell Damage: 200 SmudgeType: Scorch Size: 2,1