From 715425d821be8b5b677a3681c18506cbc760f2ec Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Sun, 10 Apr 2011 13:07:37 +1200 Subject: [PATCH] Capturable husks for cnc --- OpenRA.Mods.RA/Activities/Transform.cs | 13 +++++--- OpenRA.Mods.RA/OpenRA.Mods.RA.csproj | 1 + OpenRA.Mods.RA/TransformOnCapture.cs | 41 ++++++++++++++++++++++++++ mods/cnc/rules/defaults.yaml | 8 +++++ mods/cnc/rules/infantry.yaml | 1 + mods/cnc/rules/vehicles.yaml | 10 +++++++ 6 files changed, 70 insertions(+), 4 deletions(-) create mode 100644 OpenRA.Mods.RA/TransformOnCapture.cs diff --git a/OpenRA.Mods.RA/Activities/Transform.cs b/OpenRA.Mods.RA/Activities/Transform.cs index f36a8987d9..4b91112f87 100644 --- a/OpenRA.Mods.RA/Activities/Transform.cs +++ b/OpenRA.Mods.RA/Activities/Transform.cs @@ -21,7 +21,8 @@ namespace OpenRA.Mods.RA.Activities public readonly string ToActor = null; public int2 Offset = new int2(0,0); public int Facing = 96; - public string[] Sounds = {}; + public string[] Sounds = {}; + public int ForceHealthPercentage = 0; public Transform(Actor self, string toActor) { @@ -47,10 +48,14 @@ namespace OpenRA.Mods.RA.Activities new FacingInit( Facing ), }; var health = self.TraitOrDefault(); - // TODO: fix potential desync from HPFraction if (health != null) - init.Add( new HealthInit( health.HPFraction )); - + { + // TODO: Fix bogus health init + if (ForceHealthPercentage > 0) + init.Add( new HealthInit( ForceHealthPercentage * 1f / 100 )); + else + init.Add( new HealthInit( health.HPFraction )); + } var a = w.CreateActor( ToActor, init ); if (selected) diff --git a/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj b/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj index 7e464f398d..92be21f30b 100644 --- a/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj +++ b/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj @@ -337,6 +337,7 @@ + diff --git a/OpenRA.Mods.RA/TransformOnCapture.cs b/OpenRA.Mods.RA/TransformOnCapture.cs new file mode 100644 index 0000000000..d60d2d90cb --- /dev/null +++ b/OpenRA.Mods.RA/TransformOnCapture.cs @@ -0,0 +1,41 @@ +#region Copyright & License Information +/* + * Copyright 2007-2011 The OpenRA Developers (see AUTHORS) + * This file is part of OpenRA, which is free software. It is made + * available to you under the terms of the GNU General Public License + * as published by the Free Software Foundation. For more information, + * see COPYING. + */ +#endregion + +using System.Collections.Generic; +using OpenRA.Mods.RA.Activities; +using OpenRA.Mods.RA.Buildings; +using OpenRA.Mods.RA.Orders; +using OpenRA.Traits; + +namespace OpenRA.Mods.RA +{ + class TransformOnCaptureInfo : ITraitInfo + { + [ActorReference] + public readonly string IntoActor = null; + public readonly int ForceHealthPercentage = 0; + public virtual object Create(ActorInitializer init) { return new TransformOnCapture(this); } + } + + class TransformOnCapture : INotifyCapture + { + TransformOnCaptureInfo Info; + + public TransformOnCapture(TransformOnCaptureInfo info) + { + Info = info; + } + + public void OnCapture (Actor self, Actor captor, Player oldOwner, Player newOwner) + { + self.QueueActivity(new Transform(self, Info.IntoActor) {ForceHealthPercentage = Info.ForceHealthPercentage, Facing = self.Trait().Facing}); + } + } +} diff --git a/mods/cnc/rules/defaults.yaml b/mods/cnc/rules/defaults.yaml index 27d5f0f75b..c08441fad4 100644 --- a/mods/cnc/rules/defaults.yaml +++ b/mods/cnc/rules/defaults.yaml @@ -313,6 +313,14 @@ HiddenUnderFog: AppearsOnRadar: Burns: + TargetableUnit: + TransformOnCapture: + ForceHealthPercentage: 25 + Capturable: + Type: husk + AllowAllies: true + AllowNeutral: true + AllowEnemies: true ^Bridge: Tooltip: diff --git a/mods/cnc/rules/infantry.yaml b/mods/cnc/rules/infantry.yaml index e61ce40343..a22ef37362 100644 --- a/mods/cnc/rules/infantry.yaml +++ b/mods/cnc/rules/infantry.yaml @@ -145,6 +145,7 @@ E6: PipType: Yellow EngineerRepair: Captures: + CaptureTypes: building, husk -AutoTarget: AttackMove: JustMove: true diff --git a/mods/cnc/rules/vehicles.yaml b/mods/cnc/rules/vehicles.yaml index b005c92f0e..74334ec4c7 100644 --- a/mods/cnc/rules/vehicles.yaml +++ b/mods/cnc/rules/vehicles.yaml @@ -675,6 +675,8 @@ LTNK.Husk: Spread: 3,3 Speed: 6 AnimKey: turret + TransformOnCapture: + IntoActor: ltnk MTNK.Husk: Inherits: ^Husk @@ -688,6 +690,8 @@ MTNK.Husk: Spread: 3,3 Speed: 6 AnimKey: turret + TransformOnCapture: + IntoActor: mtnk HTNK.Husk: Inherits: ^Husk @@ -701,6 +705,8 @@ HTNK.Husk: Spread: 3,3 Speed: 6 AnimKey: turret + TransformOnCapture: + IntoActor: htnk MSAM.Husk: Inherits: ^Husk @@ -714,6 +720,8 @@ MSAM.Husk: Spread: 3,3 Speed: 6 AnimKey: turret + TransformOnCapture: + IntoActor: msam MLRS.Husk: Inherits: ^Husk @@ -727,3 +735,5 @@ MLRS.Husk: Spread: 3,3 Speed: 6 AnimKey: turret + TransformOnCapture: + IntoActor: mlrs