diff --git a/OpenRA.Game/Controller.cs b/OpenRA.Game/Controller.cs deleted file mode 100644 index 2816a62cd4..0000000000 --- a/OpenRA.Game/Controller.cs +++ /dev/null @@ -1,74 +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 System; -using System.Linq; -using OpenRA.FileFormats; -using OpenRA.Graphics; -using OpenRA.Orders; -using OpenRA.Traits; - -namespace OpenRA -{ - public class Controller - { - public IOrderGenerator orderGenerator = new UnitOrderGenerator(); - public Selection selection = new Selection(); - - public void CancelInputMode() { orderGenerator = new UnitOrderGenerator(); } - - public bool ToggleInputMode() where T : IOrderGenerator, new() - { - if (orderGenerator is T) - { - CancelInputMode(); - return false; - } - else - { - orderGenerator = new T(); - return true; - } - } - - public void ApplyOrders(World world, float2 xy, MouseInput mi) - { - if (orderGenerator == null) return; - - var orders = orderGenerator.Order(world, xy.ToInt2(), mi).ToArray(); - Game.orderManager.IssueOrders( orders ); - - // Find an actor with a phrase to say - var done = false; - foreach (var o in orders) - { - foreach (var v in o.Subject.traits.WithInterface()) - { - if (Sound.PlayVoice(v.VoicePhraseForOrder(o.Subject, o), o.Subject)) - { - done = true; - break; - } - } - if (done) break; - } - } - - public float2 dragStart, dragEnd; - public Pair? SelectionBox - { - get - { - if (dragStart == dragEnd) return null; - return Pair.New(Game.CellSize * dragStart, Game.CellSize * dragEnd); - } - } - } -} diff --git a/OpenRA.Game/Game.cs b/OpenRA.Game/Game.cs index 11fd8fd5fc..bdddf25f13 100644 --- a/OpenRA.Game/Game.cs +++ b/OpenRA.Game/Game.cs @@ -37,7 +37,6 @@ namespace OpenRA public static World world; internal static Viewport viewport; - public static Controller controller; internal static UserSettings Settings; internal static OrderManager orderManager; @@ -286,9 +285,8 @@ namespace OpenRA if (isNetTick) orderManager.Tick(world); - controller.orderGenerator.Tick(world); - controller.selection.Tick(world); - + world.OrderGenerator.Tick(world); + world.Selection.Tick(world); world.Tick(); PerfHistory.Tick(); @@ -501,8 +499,6 @@ namespace OpenRA var resolution = GetResolution(settings, Game.Settings.WindowMode); Renderer = new Renderer(resolution, Game.Settings.WindowMode); resolution = Renderer.Resolution; - - controller = new Controller(); clientSize = new int2(resolution); Sound.Initialize(); diff --git a/OpenRA.Game/Graphics/WorldRenderer.cs b/OpenRA.Game/Graphics/WorldRenderer.cs index 84e24bd260..7c3e809d93 100644 --- a/OpenRA.Game/Graphics/WorldRenderer.cs +++ b/OpenRA.Game/Graphics/WorldRenderer.cs @@ -99,8 +99,8 @@ namespace OpenRA.Graphics terrainRenderer.Draw(Game.viewport); - if (Game.controller.orderGenerator != null) - Game.controller.orderGenerator.RenderBeforeWorld(world); + if (world.OrderGenerator != null) + world.OrderGenerator.RenderBeforeWorld(world); Game.Renderer.SpriteRenderer.Flush(); Game.Renderer.LineRenderer.Flush(); @@ -109,10 +109,9 @@ namespace OpenRA.Graphics Game.Renderer.SpriteRenderer.DrawSprite(image.Sprite, image.Pos, image.Palette); uiOverlay.Draw(world); Game.Renderer.SpriteRenderer.Flush(); - DrawBandBox(); - if (Game.controller.orderGenerator != null) - Game.controller.orderGenerator.RenderAfterWorld(world); + if (world.OrderGenerator != null) + world.OrderGenerator.RenderAfterWorld(world); if (world.LocalPlayer != null) world.LocalPlayer.Shroud.Draw(); @@ -155,24 +154,6 @@ namespace OpenRA.Graphics } } - void DrawBandBox() - { - var selbox = Game.controller.SelectionBox; - if (selbox == null) return; - - var a = selbox.Value.First; - var b = new float2(selbox.Value.Second.X - a.X, 0); - var c = new float2(0, selbox.Value.Second.Y - a.Y); - - Game.Renderer.LineRenderer.DrawLine(a, a + b, Color.White, Color.White); - Game.Renderer.LineRenderer.DrawLine(a + b, a + b + c, Color.White, Color.White); - Game.Renderer.LineRenderer.DrawLine(a + b + c, a + c, Color.White, Color.White); - Game.Renderer.LineRenderer.DrawLine(a, a + c, Color.White, Color.White); - - foreach (var u in world.SelectActorsInBox(selbox.Value.First, selbox.Value.Second)) - DrawSelectionBox(u, Color.Yellow); - } - public void DrawSelectionBox(Actor selectedUnit, Color c) { var bounds = selectedUnit.GetBounds(true); diff --git a/OpenRA.Game/OpenRA.Game.csproj b/OpenRA.Game/OpenRA.Game.csproj index 457ad480f5..49444845f1 100755 --- a/OpenRA.Game/OpenRA.Game.csproj +++ b/OpenRA.Game/OpenRA.Game.csproj @@ -130,7 +130,6 @@ - diff --git a/OpenRA.Game/Orders/GenericSelectTarget.cs b/OpenRA.Game/Orders/GenericSelectTarget.cs index 14e458e370..2003a11604 100644 --- a/OpenRA.Game/Orders/GenericSelectTarget.cs +++ b/OpenRA.Game/Orders/GenericSelectTarget.cs @@ -29,7 +29,7 @@ namespace OpenRA.Orders public IEnumerable Order(World world, int2 xy, MouseInput mi) { if (mi.Button == MouseButton.Right) - Game.controller.CancelInputMode(); + world.CancelInputMode(); return OrderInner(world, xy, mi); } @@ -60,7 +60,7 @@ namespace OpenRA.Orders .Any(); if (!hasStructure) - Game.controller.CancelInputMode(); + world.CancelInputMode(); } } diff --git a/OpenRA.Game/Orders/PlaceBuildingOrderGenerator.cs b/OpenRA.Game/Orders/PlaceBuildingOrderGenerator.cs index bd27f7bfa6..0a6dac90a6 100644 --- a/OpenRA.Game/Orders/PlaceBuildingOrderGenerator.cs +++ b/OpenRA.Game/Orders/PlaceBuildingOrderGenerator.cs @@ -29,7 +29,7 @@ namespace OpenRA.Orders public IEnumerable Order(World world, int2 xy, MouseInput mi) { if (mi.Button == MouseButton.Right) - Game.controller.CancelInputMode(); + world.CancelInputMode(); return InnerOrder(world, xy, mi); } @@ -58,7 +58,7 @@ namespace OpenRA.Orders { var producing = Producer.traits.Get().CurrentItem( Rules.Info[ Building ].Category ); if (producing == null || producing.Item != Building || producing.RemainingTime != 0) - Game.controller.CancelInputMode(); + world.CancelInputMode(); } public void RenderAfterWorld( World world ) {} diff --git a/OpenRA.Game/Orders/UnitOrderGenerator.cs b/OpenRA.Game/Orders/UnitOrderGenerator.cs index cc79cc4428..5ee4a21b07 100644 --- a/OpenRA.Game/Orders/UnitOrderGenerator.cs +++ b/OpenRA.Game/Orders/UnitOrderGenerator.cs @@ -1,65 +1,65 @@ -#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 System.Collections.Generic; -using System.Drawing; -using System.Linq; -using OpenRA.Traits; - -namespace OpenRA.Orders -{ - class UnitOrderGenerator : IOrderGenerator - { - public IEnumerable Order( World world, int2 xy, MouseInput mi ) - { - var orders = Game.controller.selection.Actors - .Select(a => a.Order(xy, mi)) - .Where(o => o != null) - .ToArray(); - - var actorsInvolved = orders.Select(o => o.Subject).Distinct(); - if (actorsInvolved.Any()) - yield return new Order("CreateGroup", actorsInvolved.First().Owner.PlayerActor, - string.Join(",", actorsInvolved.Select(a => a.ActorID.ToString()).ToArray())); - - foreach (var o in orders) - yield return o; - } - - public void Tick( World world ) {} - - public void RenderBeforeWorld(World world) - { - foreach (var a in Game.controller.selection.Actors) - foreach (var t in a.traits.WithInterface()) - t.RenderBeforeWorld(a); - } - - public void RenderAfterWorld( World world ) - { - foreach (var a in Game.controller.selection.Actors) - foreach (var t in a.traits.WithInterface()) - t.RenderAfterWorld(a); - } - - public string GetCursor( World world, int2 xy, MouseInput mi ) - { - var c = Order(world, xy, mi) - .Select(o => o.Subject.traits.WithInterface() - .Select(pc => pc.CursorForOrder(o.Subject, o)).FirstOrDefault(a => a != null)) - .FirstOrDefault(a => a != null); - - return c ?? +#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 System.Collections.Generic; +using System.Drawing; +using System.Linq; +using OpenRA.Traits; + +namespace OpenRA.Orders +{ + class UnitOrderGenerator : IOrderGenerator + { + public IEnumerable Order( World world, int2 xy, MouseInput mi ) + { + var orders = world.Selection.Actors + .Select(a => a.Order(xy, mi)) + .Where(o => o != null) + .ToArray(); + + var actorsInvolved = orders.Select(o => o.Subject).Distinct(); + if (actorsInvolved.Any()) + yield return new Order("CreateGroup", actorsInvolved.First().Owner.PlayerActor, + string.Join(",", actorsInvolved.Select(a => a.ActorID.ToString()).ToArray())); + + foreach (var o in orders) + yield return o; + } + + public void Tick( World world ) {} + + public void RenderBeforeWorld(World world) + { + foreach (var a in world.Selection.Actors) + foreach (var t in a.traits.WithInterface()) + t.RenderBeforeWorld(a); + } + + public void RenderAfterWorld( World world ) + { + foreach (var a in world.Selection.Actors) + foreach (var t in a.traits.WithInterface()) + t.RenderAfterWorld(a); + } + + public string GetCursor( World world, int2 xy, MouseInput mi ) + { + var c = Order(world, xy, mi) + .Select(o => o.Subject.traits.WithInterface() + .Select(pc => pc.CursorForOrder(o.Subject, o)).FirstOrDefault(a => a != null)) + .FirstOrDefault(a => a != null); + + return c ?? (world.FindUnitsAtMouse(mi.Location) - .Any(a => a.Info.Traits.Contains()) - ? "select" : "default"); - } - } -} + .Any(a => a.Info.Traits.Contains()) + ? "select" : "default"); + } + } +} diff --git a/OpenRA.Game/Traits/DrawLineToTarget.cs b/OpenRA.Game/Traits/DrawLineToTarget.cs index 4d767f8994..91021d1acb 100644 --- a/OpenRA.Game/Traits/DrawLineToTarget.cs +++ b/OpenRA.Game/Traits/DrawLineToTarget.cs @@ -46,7 +46,7 @@ namespace OpenRA.Traits public void RenderAfterWorld (Actor self) { - var force = Game.controller.GetModifiers().HasModifier(Modifiers.Alt); + var force = Game.GetModifierKeys().HasModifier(Modifiers.Alt); if ((lifetime <= 0 || --lifetime <= 0) && !force) return; diff --git a/OpenRA.Game/Traits/RallyPoint.cs b/OpenRA.Game/Traits/RallyPoint.cs index a4d640c8ba..2d4affc5b2 100644 --- a/OpenRA.Game/Traits/RallyPoint.cs +++ b/OpenRA.Game/Traits/RallyPoint.cs @@ -37,7 +37,7 @@ namespace OpenRA.Traits public IEnumerable Render(Actor self) { - if (self.Owner == self.World.LocalPlayer && Game.controller.selection.Actors.Contains(self)) + if (self.Owner == self.World.LocalPlayer && self.World.Selection.Actors.Contains(self)) yield return Util.Centered(self, anim.Image, Util.CenterOfCell(rallyPoint)); } diff --git a/OpenRA.Game/Traits/Selectable.cs b/OpenRA.Game/Traits/Selectable.cs index 0364a07d8e..e8e3615138 100755 --- a/OpenRA.Game/Traits/Selectable.cs +++ b/OpenRA.Game/Traits/Selectable.cs @@ -88,7 +88,7 @@ namespace OpenRA.Traits void DrawControlGroup(Actor self, float2 basePosition) { - var group = Game.controller.selection.GetControlGroupForActor(self); + var group = self.World.Selection.GetControlGroupForActor(self); if (group == null) return; var pipImages = new Animation("pips"); diff --git a/OpenRA.Game/Traits/World/ChoosePaletteOnSelect.cs b/OpenRA.Game/Traits/World/ChoosePaletteOnSelect.cs index 0984591789..7cf0913dc9 100644 --- a/OpenRA.Game/Traits/World/ChoosePaletteOnSelect.cs +++ b/OpenRA.Game/Traits/World/ChoosePaletteOnSelect.cs @@ -19,7 +19,7 @@ namespace OpenRA.Traits { public void SelectionChanged() { - var firstItem = Game.controller.selection.Actors.FirstOrDefault( + var firstItem = Game.world.Selection.Actors.FirstOrDefault( a => a.World.LocalPlayer == a.Owner && a.traits.Contains()); if (firstItem == null) diff --git a/OpenRA.Game/Widgets/BuildPaletteWidget.cs b/OpenRA.Game/Widgets/BuildPaletteWidget.cs index 442e5d4145..e646bf321d 100644 --- a/OpenRA.Game/Widgets/BuildPaletteWidget.cs +++ b/OpenRA.Game/Widgets/BuildPaletteWidget.cs @@ -348,7 +348,7 @@ namespace OpenRA.Widgets if (producing.Done) { if (unit.Traits.Contains()) - Game.controller.orderGenerator = new PlaceBuildingOrderGenerator(player.PlayerActor, item); + world.OrderGenerator = new PlaceBuildingOrderGenerator(player.PlayerActor, item); return; } diff --git a/OpenRA.Game/Widgets/DefaultInputControllerWidget.cs b/OpenRA.Game/Widgets/DefaultInputControllerWidget.cs index e300401204..9c63e5bb58 100644 --- a/OpenRA.Game/Widgets/DefaultInputControllerWidget.cs +++ b/OpenRA.Game/Widgets/DefaultInputControllerWidget.cs @@ -9,9 +9,12 @@ #endregion using System; +using System.Collections.Generic; +using System.Drawing; using System.Linq; using OpenRA.Orders; using OpenRA.Traits; +using OpenRA.FileFormats; namespace OpenRA.Widgets { @@ -19,7 +22,26 @@ namespace OpenRA.Widgets { public DefaultInputControllerWidget() : base() {} protected DefaultInputControllerWidget(DefaultInputControllerWidget widget) : base(widget) {} - public override void DrawInner( World world ) { } + + public override void DrawInner( World world ) + { + var selbox = SelectionBox; + if (selbox == null) return; + + var a = selbox.Value.First; + var b = new float2(selbox.Value.Second.X - a.X, 0); + var c = new float2(0, selbox.Value.Second.Y - a.Y); + + Game.Renderer.LineRenderer.DrawLine(a, a + b, Color.White, Color.White); + Game.Renderer.LineRenderer.DrawLine(a + b, a + b + c, Color.White, Color.White); + Game.Renderer.LineRenderer.DrawLine(a + b + c, a + c, Color.White, Color.White); + Game.Renderer.LineRenderer.DrawLine(a, a + c, Color.White, Color.White); + + foreach (var u in world.SelectActorsInBox(selbox.Value.First, selbox.Value.Second)) + world.WorldRenderer.DrawSelectionBox(u, Color.Yellow); + + Game.Renderer.LineRenderer.Flush(); + } static internal bool scrollUp = false; static internal bool scrollDown = false; @@ -36,7 +58,7 @@ namespace OpenRA.Widgets if (mi.Button == MouseButton.Left && mi.Event == MouseInputEvent.Down) { dragStart = dragEnd = xy; - Game.controller.ApplyOrders(world, xy, mi); + ApplyOrders(world, xy, mi); } if (mi.Button == MouseButton.Left && mi.Event == MouseInputEvent.Move) @@ -44,10 +66,10 @@ namespace OpenRA.Widgets if (mi.Button == MouseButton.Left && mi.Event == MouseInputEvent.Up) { - if (Game.controller.orderGenerator is UnitOrderGenerator) + if (world.OrderGenerator is UnitOrderGenerator) { var newSelection = Game.world.SelectActorsInBox(Game.CellSize * dragStart, Game.CellSize * xy); - Game.controller.selection.Combine(world, newSelection, mi.Modifiers.HasModifier(Modifiers.Shift), dragStart == xy); + world.Selection.Combine(world, newSelection, mi.Modifiers.HasModifier(Modifiers.Shift), dragStart == xy); } dragStart = dragEnd = xy; @@ -62,13 +84,42 @@ namespace OpenRA.Widgets dragStart = dragEnd = xy; if (mi.Button == MouseButton.Right && mi.Event == MouseInputEvent.Down) - Game.controller.ApplyOrders(world, xy, mi); - - Game.controller.dragStart = dragStart; - Game.controller.dragEnd = dragEnd; + ApplyOrders(world, xy, mi); return true; } + public Pair? SelectionBox + { + get + { + if (dragStart == dragEnd) return null; + return Pair.New(Game.CellSize * dragStart, Game.CellSize * dragEnd); + } + } + + public void ApplyOrders(World world, float2 xy, MouseInput mi) + { + if (world.OrderGenerator == null) return; + + var orders = world.OrderGenerator.Order(world, xy.ToInt2(), mi).ToArray(); + Game.orderManager.IssueOrders( orders ); + + // Find an actor with a phrase to say + var done = false; + foreach (var o in orders) + { + foreach (var v in o.Subject.traits.WithInterface()) + { + if (Sound.PlayVoice(v.VoicePhraseForOrder(o.Subject, o), o.Subject)) + { + done = true; + break; + } + } + if (done) break; + } + } + public override string GetCursor(int2 pos) { var world = Game.world; @@ -85,7 +136,7 @@ namespace OpenRA.Widgets Modifiers = Game.GetModifierKeys() }; - return Game.controller.orderGenerator.GetCursor( world, Game.viewport.ViewToWorld(mi).ToInt2(), mi ); + return Game.world.OrderGenerator.GetCursor( world, Game.viewport.ViewToWorld(mi).ToInt2(), mi ); } finally { @@ -117,7 +168,7 @@ namespace OpenRA.Widgets } if (e.KeyName.Length == 1 && char.IsDigit(e.KeyName[0])) - Game.controller.selection.DoControlGroup(Game.world, e.KeyName[0] - '0', e.Modifiers); + Game.world.Selection.DoControlGroup(Game.world, e.KeyName[0] - '0', e.Modifiers); if (e.KeyChar == 08) GotoNextBase(); @@ -151,20 +202,21 @@ namespace OpenRA.Widgets public void GotoNextBase() { - var bases = Game.world.Queries.OwnedBy[Game.world.LocalPlayer].WithTrait().ToArray(); + var world = Game.world; + var bases = world.Queries.OwnedBy[world.LocalPlayer].WithTrait().ToArray(); if (!bases.Any()) return; var next = bases .Select( b => b.Actor ) - .SkipWhile(b => Game.controller.selection.Actors.Contains(b)) + .SkipWhile(b => world.Selection.Actors.Contains(b)) .Skip(1) .FirstOrDefault(); if (next == null) next = bases.Select(b => b.Actor).First(); - Game.controller.selection.Combine(Game.world, new Actor[] { next }, false, true); - Game.viewport.Center(Game.controller.selection.Actors); + world.Selection.Combine(world, new Actor[] { next }, false, true); + Game.viewport.Center(world.Selection.Actors); } public override Widget Clone() { return new DefaultInputControllerWidget(this); } diff --git a/OpenRA.Game/Widgets/RadarBinWidget.cs b/OpenRA.Game/Widgets/RadarBinWidget.cs index e10a6b514e..0a981595e1 100644 --- a/OpenRA.Game/Widgets/RadarBinWidget.cs +++ b/OpenRA.Game/Widgets/RadarBinWidget.cs @@ -74,7 +74,7 @@ namespace OpenRA.Widgets Modifiers = Game.GetModifierKeys() }; - var cursor = Game.controller.orderGenerator.GetCursor( world, loc, mi ); + var cursor = Game.world.OrderGenerator.GetCursor( world, loc, mi ); if (cursor == null) return "default"; diff --git a/OpenRA.Game/World.cs b/OpenRA.Game/World.cs index 8d2d3f03f4..c5b9284cf5 100644 --- a/OpenRA.Game/World.cs +++ b/OpenRA.Game/World.cs @@ -15,6 +15,7 @@ using OpenRA.Collections; using OpenRA.Effects; using OpenRA.FileFormats; using OpenRA.Graphics; +using OpenRA.Orders; using OpenRA.Support; using OpenRA.Traits; @@ -56,6 +57,25 @@ namespace OpenRA public readonly WorldRenderer WorldRenderer; + public IOrderGenerator OrderGenerator = new UnitOrderGenerator(); + public Selection Selection = new Selection(); + + public void CancelInputMode() { OrderGenerator = new UnitOrderGenerator(); } + + public bool ToggleInputMode() where T : IOrderGenerator, new() + { + if (OrderGenerator is T) + { + CancelInputMode(); + return false; + } + else + { + OrderGenerator = new T(); + return true; + } + } + public World(Manifest manifest, Map map) { Timer.Time( "----World.ctor" ); diff --git a/OpenRA.Mods.Cnc/IonCannonPower.cs b/OpenRA.Mods.Cnc/IonCannonPower.cs index cc88b84c77..051f68f8a3 100644 --- a/OpenRA.Mods.Cnc/IonCannonPower.cs +++ b/OpenRA.Mods.Cnc/IonCannonPower.cs @@ -34,7 +34,7 @@ namespace OpenRA.Mods.Cnc }); if (Owner == Owner.World.LocalPlayer) - Game.controller.CancelInputMode(); + self.World.CancelInputMode(); FinishActivate(); } @@ -42,7 +42,7 @@ namespace OpenRA.Mods.Cnc protected override void OnActivate() { - Game.controller.orderGenerator = + Game.world.OrderGenerator = new GenericSelectTargetWithBuilding(Owner.PlayerActor, "IonCannon", "ability"); } } diff --git a/OpenRA.Mods.RA/Activities/TransformIntoActor.cs b/OpenRA.Mods.RA/Activities/TransformIntoActor.cs index 4931e1d337..caad399e54 100644 --- a/OpenRA.Mods.RA/Activities/TransformIntoActor.cs +++ b/OpenRA.Mods.RA/Activities/TransformIntoActor.cs @@ -40,7 +40,7 @@ namespace OpenRA.Mods.RA.Activities self.World.AddFrameEndTask(w => { - var selected = Game.controller.selection.Contains(self); + var selected = w.Selection.Contains(self); self.World.Remove(self); foreach (var s in sounds) @@ -50,7 +50,7 @@ namespace OpenRA.Mods.RA.Activities a.Health = GetHealthToTransfer(self, a, transferPercentage); if (selected) - Game.controller.selection.Add(w, a); + w.Selection.Add(w, a); }); return this; } diff --git a/OpenRA.Mods.RA/Activities/UndeployMcv.cs b/OpenRA.Mods.RA/Activities/UndeployMcv.cs index 956ed784fb..0b78189d73 100755 --- a/OpenRA.Mods.RA/Activities/UndeployMcv.cs +++ b/OpenRA.Mods.RA/Activities/UndeployMcv.cs @@ -20,7 +20,7 @@ namespace OpenRA.Mods.RA.Activities void DoUndeploy(World w, Actor self) { - var selected = Game.controller.selection.Contains(self); + var selected = w.Selection.Contains(self); w.Remove(self); var mcv = w.CreateActor("mcv", self.Location + new int2(1, 1), self.Owner); @@ -28,7 +28,7 @@ namespace OpenRA.Mods.RA.Activities mcv.traits.Get().Facing = 96; if (selected) - Game.controller.selection.Add(w, mcv); + w.Selection.Add(w, mcv); } public IActivity Tick(Actor self) diff --git a/OpenRA.Mods.RA/ChronoshiftDeploy.cs b/OpenRA.Mods.RA/ChronoshiftDeploy.cs index 653e20e06d..c95d8f7041 100644 --- a/OpenRA.Mods.RA/ChronoshiftDeploy.cs +++ b/OpenRA.Mods.RA/ChronoshiftDeploy.cs @@ -46,7 +46,7 @@ namespace OpenRA.Mods.RA if (order.OrderString == "ChronoshiftDeploy") { if (self.Owner == self.World.LocalPlayer) - Game.controller.orderGenerator = new SetChronoTankDestination(self); + self.World.OrderGenerator = new SetChronoTankDestination(self); return; } @@ -55,7 +55,7 @@ namespace OpenRA.Mods.RA { if (self.Owner == self.World.LocalPlayer) { - Game.controller.CancelInputMode(); + self.World.CancelInputMode(); self.World.AddFrameEndTask(w => w.Add(new MoveFlash(self.World, order.TargetLocation))); } diff --git a/OpenRA.Mods.RA/Minelayer.cs b/OpenRA.Mods.RA/Minelayer.cs index 9607654613..d102ccf806 100644 --- a/OpenRA.Mods.RA/Minelayer.cs +++ b/OpenRA.Mods.RA/Minelayer.cs @@ -51,13 +51,13 @@ namespace OpenRA.Mods.RA { minefieldStart = order.TargetLocation; if (self.Owner == self.World.LocalPlayer) - Game.controller.orderGenerator = new MinefieldOrderGenerator(self); + self.World.OrderGenerator = new MinefieldOrderGenerator(self); } if (order.OrderString == "PlaceMinefield") { if (self.Owner == self.World.LocalPlayer) - Game.controller.CancelInputMode(); + self.World.CancelInputMode(); var movement = self.traits.Get(); @@ -100,7 +100,7 @@ namespace OpenRA.Mods.RA { if (mi.Button == MouseButton.Left) { - Game.controller.CancelInputMode(); + world.CancelInputMode(); yield break; } @@ -116,7 +116,7 @@ namespace OpenRA.Mods.RA public void Tick(World world) { if (minelayer.IsDead || !minelayer.IsInWorld) - Game.controller.CancelInputMode(); + world.CancelInputMode(); } int2 lastMousePos; diff --git a/OpenRA.Mods.RA/Orders/PowerDownOrderGenerator.cs b/OpenRA.Mods.RA/Orders/PowerDownOrderGenerator.cs index 06e1a1535d..b4a90dd7eb 100755 --- a/OpenRA.Mods.RA/Orders/PowerDownOrderGenerator.cs +++ b/OpenRA.Mods.RA/Orders/PowerDownOrderGenerator.cs @@ -18,7 +18,7 @@ namespace OpenRA.Mods.RA.Orders public IEnumerable Order(World world, int2 xy, MouseInput mi) { if (mi.Button == MouseButton.Right) - Game.controller.CancelInputMode(); + world.CancelInputMode(); return OrderInner(world, xy, mi); } diff --git a/OpenRA.Mods.RA/Orders/RepairOrderGenerator.cs b/OpenRA.Mods.RA/Orders/RepairOrderGenerator.cs index d9120daba3..826d6eec97 100755 --- a/OpenRA.Mods.RA/Orders/RepairOrderGenerator.cs +++ b/OpenRA.Mods.RA/Orders/RepairOrderGenerator.cs @@ -19,7 +19,7 @@ namespace OpenRA.Mods.RA.Orders public IEnumerable Order(World world, int2 xy, MouseInput mi) { if (mi.Button == MouseButton.Right) - Game.controller.CancelInputMode(); + world.CancelInputMode(); return OrderInner(world, xy, mi); } @@ -43,7 +43,7 @@ namespace OpenRA.Mods.RA.Orders public void Tick( World world ) { if( !PlayerIsAllowedToRepair( world ) ) - Game.controller.CancelInputMode(); + world.CancelInputMode(); } public static bool PlayerIsAllowedToRepair( World world ) diff --git a/OpenRA.Mods.RA/Orders/SellOrderGenerator.cs b/OpenRA.Mods.RA/Orders/SellOrderGenerator.cs index 258b0082ba..eeb601a886 100755 --- a/OpenRA.Mods.RA/Orders/SellOrderGenerator.cs +++ b/OpenRA.Mods.RA/Orders/SellOrderGenerator.cs @@ -19,7 +19,7 @@ namespace OpenRA.Mods.RA.Orders public IEnumerable Order(World world, int2 xy, MouseInput mi) { if (mi.Button == MouseButton.Right) - Game.controller.CancelInputMode(); + world.CancelInputMode(); return OrderInner(world, xy, mi); } diff --git a/OpenRA.Mods.RA/Orders/SetChronoTankDestination.cs b/OpenRA.Mods.RA/Orders/SetChronoTankDestination.cs index ee329be462..670048a77a 100644 --- a/OpenRA.Mods.RA/Orders/SetChronoTankDestination.cs +++ b/OpenRA.Mods.RA/Orders/SetChronoTankDestination.cs @@ -27,7 +27,7 @@ namespace OpenRA.Mods.RA.Orders { if (mi.Button == MouseButton.Left) { - Game.controller.CancelInputMode(); + world.CancelInputMode(); yield break; } diff --git a/OpenRA.Mods.RA/SupportPowers/AirstrikePower.cs b/OpenRA.Mods.RA/SupportPowers/AirstrikePower.cs index f7befc49b9..fde886673e 100755 --- a/OpenRA.Mods.RA/SupportPowers/AirstrikePower.cs +++ b/OpenRA.Mods.RA/SupportPowers/AirstrikePower.cs @@ -31,7 +31,7 @@ namespace OpenRA.Mods.RA protected override void OnActivate() { - Game.controller.orderGenerator = new GenericSelectTarget(Owner.PlayerActor, Info.OrderName, "ability"); + Game.world.OrderGenerator = new GenericSelectTarget(Owner.PlayerActor, Info.OrderName, "ability"); } public void ResolveOrder(Actor self, Order order) @@ -63,7 +63,7 @@ namespace OpenRA.Mods.RA }); if (Owner == Owner.World.LocalPlayer) - Game.controller.CancelInputMode(); + self.World.CancelInputMode(); FinishActivate(); } diff --git a/OpenRA.Mods.RA/SupportPowers/ChronoshiftPower.cs b/OpenRA.Mods.RA/SupportPowers/ChronoshiftPower.cs index 16710efe29..f8e2abf877 100755 --- a/OpenRA.Mods.RA/SupportPowers/ChronoshiftPower.cs +++ b/OpenRA.Mods.RA/SupportPowers/ChronoshiftPower.cs @@ -24,7 +24,7 @@ namespace OpenRA.Mods.RA class ChronoshiftPower : SupportPower, IResolveOrder { public ChronoshiftPower(Actor self, ChronoshiftPowerInfo info) : base(self, info) { } - protected override void OnActivate() { Game.controller.orderGenerator = new SelectTarget(); } + protected override void OnActivate() { Game.world.OrderGenerator = new SelectTarget(); } public void ResolveOrder(Actor self, Order order) { @@ -32,13 +32,13 @@ namespace OpenRA.Mods.RA if (order.OrderString == "ChronosphereSelect" && self.Owner == self.World.LocalPlayer) { - Game.controller.orderGenerator = new SelectDestination(order.TargetActor); + self.World.OrderGenerator = new SelectDestination(order.TargetActor); } if (order.OrderString == "ChronosphereActivate") { if (self.Owner == self.World.LocalPlayer) - Game.controller.CancelInputMode(); + self.World.CancelInputMode(); // Ensure the target cell is valid for the unit var movement = order.TargetActor.traits.GetOrDefault(); @@ -61,7 +61,7 @@ namespace OpenRA.Mods.RA public IEnumerable Order(World world, int2 xy, MouseInput mi) { if (mi.Button == MouseButton.Right) - Game.controller.CancelInputMode(); + world.CancelInputMode(); return OrderInner(world, xy, mi); } @@ -88,7 +88,7 @@ namespace OpenRA.Mods.RA .Any(); if (!hasChronosphere) - Game.controller.CancelInputMode(); + world.CancelInputMode(); // TODO: Check if the selected unit is still alive } @@ -113,7 +113,7 @@ namespace OpenRA.Mods.RA { if (mi.Button == MouseButton.Right) { - Game.controller.CancelInputMode(); + world.CancelInputMode(); yield break; } @@ -129,7 +129,7 @@ namespace OpenRA.Mods.RA .Any(); if (!hasChronosphere) - Game.controller.CancelInputMode(); + world.CancelInputMode(); // TODO: Check if the selected unit is still alive } diff --git a/OpenRA.Mods.RA/SupportPowers/IronCurtainPower.cs b/OpenRA.Mods.RA/SupportPowers/IronCurtainPower.cs index 0fb4974d1b..753bbd235e 100755 --- a/OpenRA.Mods.RA/SupportPowers/IronCurtainPower.cs +++ b/OpenRA.Mods.RA/SupportPowers/IronCurtainPower.cs @@ -29,7 +29,7 @@ namespace OpenRA.Mods.RA protected override void OnFinishCharging() { Sound.PlayToPlayer(Owner, "ironrdy1.aud"); } protected override void OnActivate() { - Game.controller.orderGenerator = new SelectTarget(); + Game.world.OrderGenerator = new SelectTarget(); Sound.Play("slcttgt1.aud"); } @@ -40,7 +40,7 @@ namespace OpenRA.Mods.RA if (order.OrderString == "IronCurtain") { if (self.Owner == self.World.LocalPlayer) - Game.controller.CancelInputMode(); + self.World.CancelInputMode(); var curtain = self.World.Queries.WithTrait() .Where(a => a.Actor.Owner != null) @@ -64,7 +64,7 @@ namespace OpenRA.Mods.RA public IEnumerable Order(World world, int2 xy, MouseInput mi) { if (mi.Button == MouseButton.Right) - Game.controller.CancelInputMode(); + world.CancelInputMode(); return OrderInner(world, xy, mi); } @@ -92,7 +92,7 @@ namespace OpenRA.Mods.RA .Any(); if (!hasStructure) - Game.controller.CancelInputMode(); + world.CancelInputMode(); } public void RenderAfterWorld(World world) { } diff --git a/OpenRA.Mods.RA/SupportPowers/NukePower.cs b/OpenRA.Mods.RA/SupportPowers/NukePower.cs index cd2fa77619..38d4844da3 100755 --- a/OpenRA.Mods.RA/SupportPowers/NukePower.cs +++ b/OpenRA.Mods.RA/SupportPowers/NukePower.cs @@ -27,7 +27,7 @@ namespace OpenRA.Mods.RA protected override void OnActivate() { - Game.controller.orderGenerator = + Game.world.OrderGenerator = new GenericSelectTargetWithBuilding(Owner.PlayerActor, "NuclearMissile", "nuke"); } @@ -49,7 +49,7 @@ namespace OpenRA.Mods.RA silo.traits.Get().Attack(order.TargetLocation); - Game.controller.CancelInputMode(); + self.World.CancelInputMode(); FinishActivate(); } } diff --git a/OpenRA.Mods.RA/SupportPowers/ParatroopersPower.cs b/OpenRA.Mods.RA/SupportPowers/ParatroopersPower.cs index 9e63ce9f47..022426b765 100755 --- a/OpenRA.Mods.RA/SupportPowers/ParatroopersPower.cs +++ b/OpenRA.Mods.RA/SupportPowers/ParatroopersPower.cs @@ -32,7 +32,7 @@ namespace OpenRA.Mods.RA protected override void OnActivate() { - Game.controller.orderGenerator = + Game.world.OrderGenerator = new GenericSelectTarget( Owner.PlayerActor, "ParatroopersActivate", "ability" ); } @@ -43,7 +43,7 @@ namespace OpenRA.Mods.RA if (order.OrderString == "ParatroopersActivate") { if (self.Owner == self.World.LocalPlayer) - Game.controller.CancelInputMode(); + self.World.CancelInputMode(); DoParadrop(Owner, order.TargetLocation, self.Info.Traits.Get().DropItems); diff --git a/OpenRA.Mods.RA/SupportPowers/SpyPlanePower.cs b/OpenRA.Mods.RA/SupportPowers/SpyPlanePower.cs index 12025f4101..29c982f7a3 100755 --- a/OpenRA.Mods.RA/SupportPowers/SpyPlanePower.cs +++ b/OpenRA.Mods.RA/SupportPowers/SpyPlanePower.cs @@ -28,7 +28,7 @@ namespace OpenRA.Mods.RA protected override void OnFinishCharging() { Sound.PlayToPlayer(Owner, "spypln1.aud"); } protected override void OnActivate() { - Game.controller.orderGenerator = new GenericSelectTarget(Owner.PlayerActor, "SpyPlane", "ability"); + Game.world.OrderGenerator = new GenericSelectTarget(Owner.PlayerActor, "SpyPlane", "ability"); Sound.Play("slcttgt1.aud"); } @@ -41,7 +41,7 @@ namespace OpenRA.Mods.RA FinishActivate(); if (order.Player == Owner.World.LocalPlayer) - Game.controller.CancelInputMode(); + self.World.CancelInputMode(); var enterCell = self.World.ChooseRandomEdgeCell(); diff --git a/OpenRA.Mods.RA/Widgets/Delegates/OrderButtonsChromeDelegate.cs b/OpenRA.Mods.RA/Widgets/Delegates/OrderButtonsChromeDelegate.cs index 7d0bc3d2d8..73299200c8 100644 --- a/OpenRA.Mods.RA/Widgets/Delegates/OrderButtonsChromeDelegate.cs +++ b/OpenRA.Mods.RA/Widgets/Delegates/OrderButtonsChromeDelegate.cs @@ -26,23 +26,23 @@ namespace OpenRA.Mods.RA.Widgets.Delegates var sell = moneybin.GetWidget("SELL"); if (sell != null) { - sell.Pressed = () => Game.controller.orderGenerator is SellOrderGenerator; - sell.OnMouseDown = mi => { Game.controller.ToggleInputMode(); return true; }; + sell.Pressed = () => Game.world.OrderGenerator is SellOrderGenerator; + sell.OnMouseDown = mi => { Game.world.ToggleInputMode(); return true; }; } var powerdown = moneybin.GetWidget("POWER_DOWN"); if (powerdown != null) { - powerdown.Pressed = () => Game.controller.orderGenerator is PowerDownOrderGenerator; - powerdown.OnMouseDown = mi => { Game.controller.ToggleInputMode(); return true; }; + powerdown.Pressed = () => Game.world.OrderGenerator is PowerDownOrderGenerator; + powerdown.OnMouseDown = mi => { Game.world.ToggleInputMode(); return true; }; } var repair = moneybin.GetWidget("REPAIR"); if (repair != null) { repair.Enabled = () => { return RepairOrderGenerator.PlayerIsAllowedToRepair( Game.world ); }; - repair.Pressed = () => Game.controller.orderGenerator is RepairOrderGenerator; - repair.OnMouseDown = mi => { Game.controller.ToggleInputMode(); return true; }; + repair.Pressed = () => Game.world.OrderGenerator is RepairOrderGenerator; + repair.OnMouseDown = mi => { Game.world.ToggleInputMode(); return true; }; repair.GetLongDesc = () => { return repair.Enabled() ? repair.LongDesc : repair.LongDesc + "\n\nRequires: Construction Yard"; }; } }