diff --git a/OpenRa.Game/MainWindow.cs b/OpenRa.Game/MainWindow.cs index dbd76aacf4..665f3501a2 100755 --- a/OpenRa.Game/MainWindow.cs +++ b/OpenRa.Game/MainWindow.cs @@ -5,6 +5,7 @@ using System.Runtime.InteropServices; using System.Windows.Forms; using OpenRa.FileFormats; using OpenRa.Game.Graphics; +using OpenRa.Game.Orders; namespace OpenRa.Game { @@ -132,6 +133,8 @@ namespace OpenRa.Game /* temporary hack: DO NOT LEAVE IN */ if (e.KeyCode == Keys.F2) Game.LocalPlayer = Game.players[(Game.LocalPlayer.Index + 1) % 4]; + if (e.KeyCode == Keys.F3) + Game.controller.orderGenerator = new SellOrderGenerator(); if (!Game.chat.isChatting) if (e.KeyCode >= Keys.D0 && e.KeyCode <= Keys.D9) diff --git a/OpenRa.Game/Orders/SellOrderGenerator.cs b/OpenRa.Game/Orders/SellOrderGenerator.cs index 2d6c6274d5..2734438ce0 100644 --- a/OpenRa.Game/Orders/SellOrderGenerator.cs +++ b/OpenRa.Game/Orders/SellOrderGenerator.cs @@ -13,10 +13,9 @@ namespace OpenRa.Game.Orders { var loc = mi.Location + Game.viewport.Location; var underCursor = Game.FindUnits(loc, loc) - .Where( a => a.traits.Contains() ).FirstOrDefault(); - - if (underCursor != null && !underCursor.Info.Selectable) - underCursor = null; + .Where(a => a.Owner == Game.LocalPlayer + && a.traits.Contains() + && a.Info.Selectable).FirstOrDefault(); if (underCursor == null) yield break; @@ -25,9 +24,6 @@ namespace OpenRa.Game.Orders if (building.unitInfo.Unsellable) yield break; - if (underCursor.Owner != Game.LocalPlayer) - yield break; - yield return new Order("Sell", underCursor, null, int2.Zero, null); } diff --git a/OpenRa.Game/Traits/Activities/Sell.cs b/OpenRa.Game/Traits/Activities/Sell.cs index d0dac1d145..109d93785a 100644 --- a/OpenRa.Game/Traits/Activities/Sell.cs +++ b/OpenRa.Game/Traits/Activities/Sell.cs @@ -18,7 +18,11 @@ namespace OpenRa.Game.Traits.Activities self.Owner.GiveCash((int)refund); self.Health = 0; + foreach (var ns in self.traits.WithInterface()) + ns.Sold(self); Game.world.Remove(self); + + // todo: give dudes } public IActivity Tick(Actor self) diff --git a/OpenRa.Game/Traits/RenderBuilding.cs b/OpenRa.Game/Traits/RenderBuilding.cs index 24830e0a67..d5291d0b59 100644 --- a/OpenRa.Game/Traits/RenderBuilding.cs +++ b/OpenRa.Game/Traits/RenderBuilding.cs @@ -5,7 +5,7 @@ using OpenRa.Game.Effects; namespace OpenRa.Game.Traits { - class RenderBuilding : RenderSimple, INotifyDamage + class RenderBuilding : RenderSimple, INotifyDamage, INotifySold { const int SmallBibStart = 1; const int LargeBibStart = 5; @@ -88,5 +88,7 @@ namespace OpenRa.Game.Traits break; } } + + public void Sold(Actor self) { DoBib(self, true); } } } diff --git a/OpenRa.Game/Traits/TraitsInterfaces.cs b/OpenRa.Game/Traits/TraitsInterfaces.cs index 9485b850d2..e66744cb4e 100644 --- a/OpenRa.Game/Traits/TraitsInterfaces.cs +++ b/OpenRa.Game/Traits/TraitsInterfaces.cs @@ -13,6 +13,7 @@ namespace OpenRa.Game.Traits interface ITick { void Tick(Actor self); } interface IRender { IEnumerable Render(Actor self); } + interface INotifySold { void Sold(Actor self); } interface INotifyDamage { void Damaged(Actor self, AttackInfo e); } interface INotifyBuildComplete { void BuildingComplete (Actor self); } interface INotifyProduction { void UnitProduced(Actor self, Actor other); }