From 5cec1fe4fb112bb2c78fd2ee7ea580e13b031d6e Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Sat, 9 Nov 2013 17:07:32 +1300 Subject: [PATCH] Support custom helicopter rotors. Fixes #4072. --- OpenRA.Mods.RA/Render/WithRotor.cs | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/OpenRA.Mods.RA/Render/WithRotor.cs b/OpenRA.Mods.RA/Render/WithRotor.cs index 9a7202a23a..c5110777d3 100755 --- a/OpenRA.Mods.RA/Render/WithRotor.cs +++ b/OpenRA.Mods.RA/Render/WithRotor.cs @@ -1,6 +1,6 @@ #region Copyright & License Information /* - * Copyright 2007-2011 The OpenRA Developers (see AUTHORS) + * Copyright 2007-2013 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, @@ -16,23 +16,33 @@ namespace OpenRA.Mods.RA.Render { public class WithRotorInfo : ITraitInfo, Requires, Requires { + [Desc("Sequence name to use when flying")] + public readonly string Sequence = "rotor"; + + [Desc("Sequence name to use when landed")] + public readonly string GroundSequence = "slow-rotor"; + [Desc("Position relative to body")] public readonly WVec Offset = WVec.Zero; public readonly string Id = "rotor"; + public object Create(ActorInitializer init) { return new WithRotor(init.self, this); } } public class WithRotor : ITick { - public Animation rotorAnim; + WithRotorInfo info; + Animation rotorAnim; + public WithRotor(Actor self, WithRotorInfo info) { + this.info = info; var rs = self.Trait(); var body = self.Trait(); rotorAnim = new Animation(rs.GetImage(self)); - rotorAnim.PlayRepeating("rotor"); + rotorAnim.PlayRepeating(info.Sequence); rs.anims.Add(info.Id, new AnimationWithOffset(rotorAnim, () => body.LocalToWorld(info.Offset.Rotate(body.QuantizeOrientation(self, self.Orientation))), null, p => WithTurret.ZOffsetFromCenter(self, p, 1))); @@ -41,10 +51,10 @@ namespace OpenRA.Mods.RA.Render public void Tick(Actor self) { var isFlying = self.CenterPosition.Z > 0 && !self.IsDead(); - if (isFlying ^ (rotorAnim.CurrentSequence.Name != "rotor")) + if (isFlying ^ (rotorAnim.CurrentSequence.Name != info.Sequence)) return; - rotorAnim.ReplaceAnim(isFlying ? "rotor" : "slow-rotor"); + rotorAnim.ReplaceAnim(isFlying ? info.Sequence : info.GroundSequence); } } }