diff --git a/OpenRA.Mods.RA/HasUnitOnBuild.cs b/OpenRA.Mods.RA/HasUnitOnBuild.cs index 02fa212578..642d845813 100644 --- a/OpenRA.Mods.RA/HasUnitOnBuild.cs +++ b/OpenRA.Mods.RA/HasUnitOnBuild.cs @@ -19,36 +19,35 @@ #endregion using OpenRA.Traits; - +using System.Linq; namespace OpenRA.Mods.RA { - class HasUnitOnBuildInfo : ITraitInfo + public class FreeActorInfo : ITraitInfo { - public readonly string Unit = null; + public readonly string Actor = null; public readonly string InitialActivity = null; public readonly int2 SpawnOffset = int2.Zero; public readonly int Facing = 0; - public object Create( Actor self ) { return new HasUnitOnBuild(self); } + public object Create( Actor self ) { return new FreeActor(self, this); } } - public class HasUnitOnBuild + public class FreeActor { - - public HasUnitOnBuild(Actor self) - { - var info = self.Info.Traits.Get(); - + public FreeActor(Actor self, FreeActorInfo info) + { self.World.AddFrameEndTask( w => { - var unit = w.CreateActor(info.Unit, self.Location + var a = w.CreateActor(info.Actor, self.Location + info.SpawnOffset, self.Owner); - var unitTrait = unit.traits.Get(); - unitTrait.Facing = info.Facing; + var unit = a.traits.WithInterface().FirstOrDefault(); + + if (unit != null) + unit.Facing = info.Facing; if (info.InitialActivity != null) - unit.QueueActivity(Game.CreateObject(info.InitialActivity)); + a.QueueActivity(Game.CreateObject(info.InitialActivity)); }); } } diff --git a/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj b/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj index 0fbb26ae27..1026237cec 100644 --- a/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj +++ b/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj @@ -179,6 +179,7 @@ + diff --git a/OpenRA.Mods.RA/ReplaceWithActor.cs b/OpenRA.Mods.RA/ReplaceWithActor.cs new file mode 100644 index 0000000000..26e65dbe6c --- /dev/null +++ b/OpenRA.Mods.RA/ReplaceWithActor.cs @@ -0,0 +1,43 @@ +#region Copyright & License Information +/* + * Copyright 2007,2009,2010 Chris Forbes, Robert Pepperell, Matthew Bowra-Dean, Paul Chote, Alli Witheford. + * This file is part of OpenRA. + * + * OpenRA is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * OpenRA is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with OpenRA. If not, see . + */ +#endregion + +using OpenRA.Graphics; +using OpenRA.Traits; + +namespace OpenRA.Mods.RA +{ + class ReplaceWithActorInfo : ITraitInfo + { + public readonly string Actor = null; + public object Create(Actor self) { return new ReplaceWithActor(self, this); } + } + + class ReplaceWithActor + { + public ReplaceWithActor(Actor self, ReplaceWithActorInfo info) + { + self.World.AddFrameEndTask(w => + { + w.Remove(self); + w.CreateActor(info.Actor, self.Location, self.Owner); + }); + } + } +} diff --git a/mods/cnc/sequences-structures.xml b/mods/cnc/sequences-structures.xml index 6ceef31843..69668b0404 100644 --- a/mods/cnc/sequences-structures.xml +++ b/mods/cnc/sequences-structures.xml @@ -18,6 +18,9 @@ + + + diff --git a/mods/cnc/structures.yaml b/mods/cnc/structures.yaml index 15a4ec250d..173a5b927f 100644 --- a/mods/cnc/structures.yaml +++ b/mods/cnc/structures.yaml @@ -36,14 +36,31 @@ NUKE: Crewed: yes Sight: 4 Bib: - -PROC: +PROC.proxy: Inherits: ^Building Buildable: Icon: procicnh BuildPaletteOrder: 30 - Prerequisites: silo + Prerequisites: nuke Owner: gdi,nod + Cost: 2300 + Description: Tiberium Refinery + LongDesc: Processes Tiberium into useable resources + Building: + Power: -50 + Footprint: ___xx xxxxx xxx__ xxx__ + Dimensions: 5,4 + Capturable: true + HP: 900 + Armor: wood + Crewed: yes + Sight: 6 + ReplaceWithActor: + Actor: proc + +PROC: + Inherits: ^Building + Valued: Cost: 2000 Description: Tiberium Refinery LongDesc: Processes Tiberium into useable resources @@ -65,18 +82,23 @@ PROC: ProcessAmount: 50 CustomSellValue: Value: 600 - HasUnitOnBuild: - Unit: HARV + FreeActor: + Actor: HARV InitialActivity: Harvest SpawnOffset: 1,2 Facing: 64 - + FreeActor@silo1: + Actor: silo + SpawnOffset: 3,0 + FreeActor@silo2: + Actor: silo + SpawnOffset: 3,1 SILO: Inherits: ^Building Buildable: Icon: siloicnh BuildPaletteOrder: 20 - Prerequisites: nuke + Prerequisites: proc Owner: gdi,nod Cost: 150 Description: Tiberium Silo diff --git a/mods/ra/structures.yaml b/mods/ra/structures.yaml index e3ff334221..c8e26c2d58 100644 --- a/mods/ra/structures.yaml +++ b/mods/ra/structures.yaml @@ -478,8 +478,8 @@ PROC: IronCurtainable: CustomSellValue: Value: 600 - HasUnitOnBuild: - Unit: HARV + FreeActor: + Actor: HARV InitialActivity: Harvest SpawnOffset: 1,2 Facing: 64