From e59a491c1bd3365f81973c9f5eed9a3c1ef87fd5 Mon Sep 17 00:00:00 2001 From: reaperrr Date: Sun, 5 Jun 2016 19:20:10 +0200 Subject: [PATCH] Allow UpgradeOnDamage to grant permanent upgrades Needed to properly implement things like permanently crippled weapons or limbs. --- OpenRA.Mods.Common/Traits/Upgrades/UpgradeOnDamage.cs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/OpenRA.Mods.Common/Traits/Upgrades/UpgradeOnDamage.cs b/OpenRA.Mods.Common/Traits/Upgrades/UpgradeOnDamage.cs index c058fcaa07..fb5df922e2 100644 --- a/OpenRA.Mods.Common/Traits/Upgrades/UpgradeOnDamage.cs +++ b/OpenRA.Mods.Common/Traits/Upgrades/UpgradeOnDamage.cs @@ -29,6 +29,9 @@ namespace OpenRA.Mods.Common.Traits [Desc("Levels of damage at which to grant upgrades.")] public readonly DamageState ValidDamageStates = DamageState.Heavy | DamageState.Critical; + [Desc("Are upgrades irrevocable once the conditions have been met?")] + public readonly bool GrantPermanently = false; + public object Create(ActorInitializer init) { return new UpgradeOnDamage(init.Self, this); } } @@ -36,6 +39,7 @@ namespace OpenRA.Mods.Common.Traits { readonly UpgradeOnDamageInfo info; readonly UpgradeManager um; + bool granted; public UpgradeOnDamage(Actor self, UpgradeOnDamageInfo info) { @@ -43,12 +47,14 @@ namespace OpenRA.Mods.Common.Traits um = self.TraitOrDefault(); } - bool granted; void INotifyDamageStateChanged.DamageStateChanged(Actor self, AttackInfo e) { if (um == null) return; + if (granted && info.GrantPermanently) + return; + var rand = Game.CosmeticRandom; if (!granted && info.ValidDamageStates.HasFlag(e.DamageState) && !info.ValidDamageStates.HasFlag(e.PreviousDamageState)) {