diff --git a/OpenRa.Game/OpenRa.Game.csproj b/OpenRa.Game/OpenRa.Game.csproj index c57308d299..a287dcbac4 100644 --- a/OpenRa.Game/OpenRa.Game.csproj +++ b/OpenRa.Game/OpenRa.Game.csproj @@ -229,6 +229,7 @@ + diff --git a/OpenRa.Game/Orders/UnitOrders.cs b/OpenRa.Game/Orders/UnitOrders.cs index 353be5be0b..85041a34b0 100644 --- a/OpenRa.Game/Orders/UnitOrders.cs +++ b/OpenRa.Game/Orders/UnitOrders.cs @@ -12,27 +12,6 @@ namespace OpenRa.Orders { switch( order.OrderString ) { - case "PlaceBuilding": - { - Game.world.AddFrameEndTask( _ => - { - var queue = order.Player.PlayerActor.traits.Get(); - var unit = Rules.ActorInfo[ order.TargetString ]; - var producing = queue.CurrentItem(unit.Category); - if( producing == null || producing.Item != order.TargetString || producing.RemainingTime != 0 ) - return; - - Game.world.CreateActor( order.TargetString, order.TargetLocation - Footprint.AdjustForBuildingSize( unit.Traits.Get() ), order.Player ); - if (order.Player == Game.LocalPlayer) - { - Sound.Play("placbldg.aud"); - Sound.Play("build5.aud"); - } - - queue.FinishProduction(unit.Category); - } ); - break; - } case "Chat": { Game.chat.AddLine(order.Player, order.TargetString); diff --git a/OpenRa.Game/Traits/PlaceBuilding.cs b/OpenRa.Game/Traits/PlaceBuilding.cs new file mode 100755 index 0000000000..fb64d0b23a --- /dev/null +++ b/OpenRa.Game/Traits/PlaceBuilding.cs @@ -0,0 +1,37 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using OpenRa.GameRules; + +namespace OpenRa.Traits +{ + class PlaceBuildingInfo : StatelessTraitInfo { } + + class PlaceBuilding : IResolveOrder + { + public void ResolveOrder( Actor self, Order order ) + { + if( order.OrderString == "PlaceBuilding" ) + { + Game.world.AddFrameEndTask( _ => + { + var queue = self.traits.Get(); + var unit = Rules.ActorInfo[ order.TargetString ]; + var producing = queue.CurrentItem(unit.Category); + if( producing == null || producing.Item != order.TargetString || producing.RemainingTime != 0 ) + return; + + Game.world.CreateActor( order.TargetString, order.TargetLocation - Footprint.AdjustForBuildingSize( unit.Traits.Get() ), order.Player ); + if (order.Player == Game.LocalPlayer) + { + Sound.Play("placbldg.aud"); + Sound.Play("build5.aud"); + } + + queue.FinishProduction(unit.Category); + } ); + } + } + } +} diff --git a/merge-ra.yaml b/merge-ra.yaml index 5932bea2f4..91a72aedc9 100644 --- a/merge-ra.yaml +++ b/merge-ra.yaml @@ -1,29 +1,30 @@ Player: ProductionQueue: + PlaceBuilding: World: WaterPaletteRotation: ChronoshiftPaletteEffect: LightPaletteRotator: - + MGG: GeneratesGap: Range: 10 GAP: GeneratesGap: - Range: 10 - -MINP: - Mine: - Damage: 1000 - Warhead: APMine - TriggeredBy: Foot, Wheel, Track - AvoidFriendly: yes - -MINV: - Mine: - Damage: 1200 - Warhead: ATMine - TriggeredBy: Wheel, Track - AvoidFriendly: yes \ No newline at end of file + Range: 10 + +MINP: + Mine: + Damage: 1000 + Warhead: APMine + TriggeredBy: Foot, Wheel, Track + AvoidFriendly: yes + +MINV: + Mine: + Damage: 1200 + Warhead: ATMine + TriggeredBy: Wheel, Track + AvoidFriendly: yes diff --git a/ra.yaml b/ra.yaml index af4429a58f..fc8c476214 100644 --- a/ra.yaml +++ b/ra.yaml @@ -1,5 +1,6 @@ Player: ProductionQueue: + PlaceBuilding: World: WaterPaletteRotation: