From ef8becb5de5f962dedcb9b2b3c4f33c82a9b7d26 Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Sat, 9 Jan 2010 12:28:39 +1300 Subject: [PATCH] Sync superweapon activate animation --- OpenRa.Game/Orders/Order.cs | 5 +++++ OpenRa.Game/SupportPowers/ChronospherePower.cs | 10 +++++----- OpenRa.Game/SupportPowers/IronCurtainPower.cs | 3 ++- OpenRa.Game/Traits/Chronosphere.cs | 12 +++++++++++- OpenRa.Game/Traits/IronCurtain.cs | 12 +++++++++++- 5 files changed, 34 insertions(+), 8 deletions(-) diff --git a/OpenRa.Game/Orders/Order.cs b/OpenRa.Game/Orders/Order.cs index 754207101b..1bbf98ef94 100644 --- a/OpenRa.Game/Orders/Order.cs +++ b/OpenRa.Game/Orders/Order.cs @@ -154,5 +154,10 @@ namespace OpenRa.Game { return new Order("CancelProduction", subject.PlayerActor, null, int2.Zero, item); } + + public static Order PlayAnimation(Actor actor, string animationString) + { + return new Order("PlayAnimation", actor, null, int2.Zero, animationString); + } } } diff --git a/OpenRa.Game/SupportPowers/ChronospherePower.cs b/OpenRa.Game/SupportPowers/ChronospherePower.cs index e3355fb771..0e860b987f 100644 --- a/OpenRa.Game/SupportPowers/ChronospherePower.cs +++ b/OpenRa.Game/SupportPowers/ChronospherePower.cs @@ -19,14 +19,14 @@ namespace OpenRa.Game.SupportPowers Sound.Play("chrono2.aud"); - foreach (var a in Game.world.Actors.Where(a => a.traits.Contains())) - a.traits.Get().DoChronoshift(); - // Play chronosphere active anim var chronosphere = Game.world.Actors.Where(a => a.Owner == p.Owner && a.traits.Contains()).FirstOrDefault(); - if (chronosphere != null) - chronosphere.traits.Get().PlayCustomAnim(chronosphere, "active"); + Game.controller.AddOrder(Order.PlayAnimation(chronosphere, "active")); + + // Trigger screen desaturate effect + foreach (var a in Game.world.Actors.Where(a => a.traits.Contains())) + a.traits.Get().DoChronoshift(); } SupportPower p; public void Activate(SupportPower p) diff --git a/OpenRa.Game/SupportPowers/IronCurtainPower.cs b/OpenRa.Game/SupportPowers/IronCurtainPower.cs index 6b69cd0278..65c50320ea 100644 --- a/OpenRa.Game/SupportPowers/IronCurtainPower.cs +++ b/OpenRa.Game/SupportPowers/IronCurtainPower.cs @@ -29,7 +29,8 @@ namespace OpenRa.Game.SupportPowers .Where(a => a.Owner == p.Owner && a.traits.Contains()) .FirstOrDefault(); if (ironCurtain != null) - ironCurtain.traits.Get().PlayCustomAnim(ironCurtain, "active"); + Game.controller.AddOrder(Order.PlayAnimation(ironCurtain, "active")); + } SupportPower p; public void Activate(SupportPower p) diff --git a/OpenRa.Game/Traits/Chronosphere.cs b/OpenRa.Game/Traits/Chronosphere.cs index cad8a1cf13..771cc8f4b4 100644 --- a/OpenRa.Game/Traits/Chronosphere.cs +++ b/OpenRa.Game/Traits/Chronosphere.cs @@ -5,8 +5,18 @@ using System.Text; namespace OpenRa.Game.Traits { - class Chronosphere + class Chronosphere : IResolveOrder { public Chronosphere(Actor self) { } + + public void ResolveOrder(Actor self, Order order) + { + if (order.OrderString == "PlayAnimation") + { + var rb = self.traits.Get(); + if (rb != null) + rb.PlayCustomAnim(self, order.TargetString); + } + } } } diff --git a/OpenRa.Game/Traits/IronCurtain.cs b/OpenRa.Game/Traits/IronCurtain.cs index 668b469bd1..995af17d38 100644 --- a/OpenRa.Game/Traits/IronCurtain.cs +++ b/OpenRa.Game/Traits/IronCurtain.cs @@ -5,8 +5,18 @@ using System.Text; namespace OpenRa.Game.Traits { - class IronCurtain + class IronCurtain : IResolveOrder { public IronCurtain(Actor self) {} + + public void ResolveOrder(Actor self, Order order) + { + if (order.OrderString == "PlayAnimation") + { + var rb = self.traits.Get(); + if (rb != null) + rb.PlayCustomAnim(self, order.TargetString); + } + } } }