diff --git a/OpenRA.Game/Traits/Production.cs b/OpenRA.Game/Traits/Production.cs index 1c24094ce7..62ebcb57f4 100755 --- a/OpenRA.Game/Traits/Production.cs +++ b/OpenRA.Game/Traits/Production.cs @@ -20,6 +20,7 @@ namespace OpenRA.Traits public readonly int[] SpawnOffset = null; public readonly int[] ProductionOffset = null; public readonly int[] ExitOffset = null; + public readonly bool EnablePrimary = true; public readonly string[] Produces = { }; } @@ -111,20 +112,20 @@ namespace OpenRA.Traits } public Order IssueOrder(Actor self, int2 xy, MouseInput mi, Actor underCursor) - { - if (mi.Button == MouseButton.Right && underCursor == self) - return new Order("Deploy", self); + { + if (mi.Button == MouseButton.Right && underCursor == self && self.Info.Traits.Get().EnablePrimary) + return new Order("PrimaryProducer", self); return null; } public string CursorForOrder(Actor self, Order order) { - return (order.OrderString == "Deploy") ? "deploy" : null; + return (order.OrderString == "PrimaryProducer") ? "deploy" : null; } public void ResolveOrder(Actor self, Order order) { - if (order.OrderString == "Deploy") + if (order.OrderString == "PrimaryProducer") SetPrimaryProducer(self, !isPrimary); } diff --git a/OpenRA.Mods.RA/Activities/TransformIntoActor.cs b/OpenRA.Mods.RA/Activities/Transform.cs similarity index 61% rename from OpenRA.Mods.RA/Activities/TransformIntoActor.cs rename to OpenRA.Mods.RA/Activities/Transform.cs index 555d24e4e3..5319dc451e 100644 --- a/OpenRA.Mods.RA/Activities/TransformIntoActor.cs +++ b/OpenRA.Mods.RA/Activities/Transform.cs @@ -12,29 +12,33 @@ using System; using System.Linq; using System.Collections.Generic; using OpenRA.Traits; +using OpenRA.Mods.RA.Render; namespace OpenRA.Mods.RA.Activities { - class TransformIntoActor : IActivity + class Transform : IActivity { string actor = null; int2 offset; string[] sounds = null; bool isCanceled; + int facing; - public TransformIntoActor(string actor, int2 offset, string[] sounds) + RenderBuilding rb; + public Transform(Actor self, string toActor, int2 offset, int facing, string[] sounds) { - this.actor = actor; + this.actor = toActor; this.offset = offset; this.sounds = sounds; + this.facing = facing; + rb = self.traits.GetOrDefault(); } public IActivity NextActivity { get; set; } - public IActivity Tick( Actor self ) + + void DoTransform(Actor self) { - if (isCanceled) return NextActivity; - self.World.AddFrameEndTask(w => { var selected = w.Selection.Contains(self); @@ -48,10 +52,33 @@ namespace OpenRA.Mods.RA.Activities var newHealth = a.traits.GetOrDefault(); if (oldHealth != null && newHealth != null) newHealth.HPFraction = oldHealth.HPFraction; - + + var unit = a.traits.GetOrDefault(); + if (unit != null) + unit.Facing = facing; + if (selected) w.Selection.Add(w, a); }); + } + + bool started = false; + public IActivity Tick( Actor self ) + { + if (isCanceled) return NextActivity; + if (started) return this; + + if (rb == null) + DoTransform(self); + else + { + rb.PlayCustomAnimBackwards(self, "make", () => DoTransform(self)); + + foreach (var s in self.Info.Traits.Get().SellSounds) + Sound.PlayToPlayer(self.Owner, s, self.CenterLocation); + + started = true; + } return this; } diff --git a/OpenRA.Mods.RA/Activities/UndeployMcv.cs b/OpenRA.Mods.RA/Activities/UndeployMcv.cs deleted file mode 100755 index f508aa81b9..0000000000 --- a/OpenRA.Mods.RA/Activities/UndeployMcv.cs +++ /dev/null @@ -1,58 +0,0 @@ -#region Copyright & License Information -/* - * Copyright 2007-2010 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 LICENSE. - */ -#endregion - -using OpenRA.Mods.RA.Render; -using OpenRA.Traits; - -namespace OpenRA.Mods.RA.Activities -{ - public class UndeployMcv : IActivity - { - public IActivity NextActivity { get; set; } - bool started; - - void DoUndeploy(World w, Actor self) - { - var selected = w.Selection.Contains(self); - w.Remove(self); - - var mcv = w.CreateActor("mcv", self.Location + new int2(1, 1), self.Owner); - - var oldHealth = self.traits.GetOrDefault(); - var newHealth = mcv.traits.GetOrDefault(); - if (oldHealth != null && newHealth != null) - newHealth.HPFraction = oldHealth.HPFraction; - - mcv.traits.Get().Facing = 96; - - if (selected) - w.Selection.Add(w, mcv); - } - - public IActivity Tick(Actor self) - { - if (!started) - { - var rb = self.traits.Get(); - rb.PlayCustomAnimBackwards(self, "make", - () => self.World.AddFrameEndTask(w => DoUndeploy(w,self))); - - foreach (var s in self.Info.Traits.Get().SellSounds) - Sound.PlayToPlayer(self.Owner, s, self.CenterLocation); - - started = true; - } - - return this; - } - - public void Cancel(Actor self) {} - } -} diff --git a/OpenRA.Mods.RA/ConstructionYard.cs b/OpenRA.Mods.RA/ConstructionYard.cs deleted file mode 100755 index d953e339b9..0000000000 --- a/OpenRA.Mods.RA/ConstructionYard.cs +++ /dev/null @@ -1,44 +0,0 @@ -#region Copyright & License Information -/* - * Copyright 2007-2010 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 LICENSE. - */ -#endregion - -using OpenRA.Mods.RA.Activities; -using OpenRA.Traits; - -namespace OpenRA.Mods.RA -{ - class ConstructionYardInfo : TraitInfo { } - - public class ConstructionYard : IIssueOrder, IResolveOrder, IOrderCursor - { - public Order IssueOrder(Actor self, int2 xy, MouseInput mi, Actor underCursor) - { - if (mi.Button == MouseButton.Left) return null; - - if (underCursor == self) - return new Order("Deploy", self); - - return null; - } - - public string CursorForOrder(Actor self, Order order) - { - return (order.OrderString == "Deploy") ? "deploy" : null; - } - - public void ResolveOrder(Actor self, Order order) - { - if (order.OrderString == "Deploy") - { - self.CancelActivity(); - self.QueueActivity(new UndeployMcv()); - } - } - } -} diff --git a/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj b/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj index 40360f7428..0d685cf81f 100644 --- a/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj +++ b/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj @@ -74,12 +74,10 @@ - - @@ -218,7 +216,6 @@ - @@ -233,6 +230,7 @@ + diff --git a/OpenRA.Mods.RA/Transforms.cs b/OpenRA.Mods.RA/Transforms.cs index f9be3d9418..5a77396594 100644 --- a/OpenRA.Mods.RA/Transforms.cs +++ b/OpenRA.Mods.RA/Transforms.cs @@ -71,7 +71,7 @@ namespace OpenRA.Mods.RA if (self.traits.Contains()) self.QueueActivity(new Turn(Info.Facing)); - self.QueueActivity(new TransformIntoActor(Info.IntoActor, Info.Offset, Info.TransformSounds)); + self.QueueActivity(new Transform(self, Info.IntoActor, Info.Offset, Info.Facing, Info.TransformSounds)); } } diff --git a/mods/cnc/structures.yaml b/mods/cnc/structures.yaml index 8596d1c689..0e6a3ccfd2 100644 --- a/mods/cnc/structures.yaml +++ b/mods/cnc/structures.yaml @@ -17,8 +17,11 @@ FACT: AllowsBuildingRepair: Production: Produces: Building,Defense - ConstructionYard: - + EnablePrimary: false + Transforms: + IntoActor: mcv + Offset:1,1 + Facing: 96 NUKE: Inherits: ^Building Buildable: diff --git a/mods/ra/structures.yaml b/mods/ra/structures.yaml index f6ca9b6e2d..ebbeaba08b 100644 --- a/mods/ra/structures.yaml +++ b/mods/ra/structures.yaml @@ -461,7 +461,7 @@ FACT: Bib: Production: Produces: Building,Defense - ConstructionYard: + EnablePrimary: false IronCurtainable: Valued: Cost: 2500 @@ -470,7 +470,10 @@ FACT: Value: 2500 BaseBuilding: AllowsBuildingRepair: - + Transforms: + IntoActor: mcv + Offset:1,1 + Facing: 96 PROC: Inherits: ^Building Buildable: