From f575c20d387b7a3415739f192fac598b535e7fc7 Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Fri, 27 Sep 2013 17:13:54 +1200 Subject: [PATCH] Route viewport centering via WorldRenderer. --- OpenRA.Game/Game.cs | 5 --- OpenRA.Game/Graphics/Viewport.cs | 7 +++- OpenRA.Game/Graphics/WorldRenderer.cs | 1 + OpenRA.Game/Selection.cs | 5 +-- .../WorldInteractionControllerWidget.cs | 2 +- OpenRA.Mods.Cnc/Missions/CncShellmapScript.cs | 12 ++++--- OpenRA.Mods.Cnc/Missions/Gdi01Script.cs | 2 +- OpenRA.Mods.Cnc/Missions/Nod01Script.cs | 9 ++---- OpenRA.Mods.RA/MPStartLocations.cs | 2 +- OpenRA.Mods.RA/Missions/Allies01Script.cs | 2 +- OpenRA.Mods.RA/Missions/Allies02Script.cs | 5 ++- OpenRA.Mods.RA/Missions/Allies03Script.cs | 5 ++- OpenRA.Mods.RA/Missions/Allies04Script.cs | 6 ++-- .../Missions/DefaultShellmapScript.cs | 18 +++++------ .../Missions/DesertShellmapScript.cs | 32 ++++++++++--------- .../Missions/MonsterTankMadnessScript.cs | 2 +- .../Missions/Soviet01ClassicScript.cs | 2 +- OpenRA.Mods.RA/Missions/Survival01Script.cs | 2 +- OpenRA.Mods.RA/Missions/Survival02Script.cs | 9 ++++-- .../Widgets/Logic/ObserverStatsLogic.cs | 9 +++--- OpenRA.Mods.RA/Widgets/WorldCommandWidget.cs | 10 +++--- 21 files changed, 77 insertions(+), 70 deletions(-) diff --git a/OpenRA.Game/Game.cs b/OpenRA.Game/Game.cs index ab0add25df..b56ccfd9a6 100644 --- a/OpenRA.Game/Game.cs +++ b/OpenRA.Game/Game.cs @@ -45,11 +45,6 @@ namespace OpenRA public static Renderer Renderer; public static bool HasInputFocus = false; - public static void MoveViewport(float2 loc) - { - viewport.Center(loc); - } - public static void JoinServer(string host, int port) { JoinInner(new OrderManager(host, port, diff --git a/OpenRA.Game/Graphics/Viewport.cs b/OpenRA.Game/Graphics/Viewport.cs index 5dbb2f7b74..6c9cb28431 100755 --- a/OpenRA.Game/Graphics/Viewport.cs +++ b/OpenRA.Game/Graphics/Viewport.cs @@ -150,12 +150,17 @@ namespace OpenRA.Graphics scrollPosition = NormalizeScrollPosition((Game.CellSize * loc - 1f/(2*Zoom)*new float2(Game.Renderer.Resolution)).ToInt2()); } + public void Center(WPos pos) + { + Center(new float2(pos.X / 1024f, (pos.Y + pos.Z) / 1024f)); + } + public void Center(IEnumerable actors) { if (!actors.Any()) return; - Center(actors.Select(a => a.CenterPosition).Average().ToCPos().ToFloat2()); + Center(actors.Select(a => a.CenterPosition).Average()); } // Rectangle (in viewport coords) that contains things to be drawn diff --git a/OpenRA.Game/Graphics/WorldRenderer.cs b/OpenRA.Game/Graphics/WorldRenderer.cs index ef588be876..d30163784c 100644 --- a/OpenRA.Game/Graphics/WorldRenderer.cs +++ b/OpenRA.Game/Graphics/WorldRenderer.cs @@ -34,6 +34,7 @@ namespace OpenRA.Graphics { public readonly World world; public readonly Theater Theater; + public Viewport Viewport { get { return Game.viewport; } } internal readonly TerrainRenderer terrainRenderer; internal readonly ShroudRenderer shroudRenderer; diff --git a/OpenRA.Game/Selection.cs b/OpenRA.Game/Selection.cs index 66248cb4c5..c25b237104 100644 --- a/OpenRA.Game/Selection.cs +++ b/OpenRA.Game/Selection.cs @@ -11,6 +11,7 @@ using System.Collections.Generic; using System.Linq; using OpenRA.FileFormats; +using OpenRA.Graphics; using OpenRA.Traits; namespace OpenRA @@ -64,7 +65,7 @@ namespace OpenRA Cache> controlGroups = new Cache>(_ => new List()); - public void DoControlGroup(World world, int group, Modifiers mods, int MultiTapCount) + public void DoControlGroup(World world, WorldRenderer worldRenderer, int group, Modifiers mods, int MultiTapCount) { var addModifier = Platform.CurrentPlatform == PlatformType.OSX ? Modifiers.Meta : Modifiers.Ctrl; if (mods.HasModifier(addModifier)) @@ -84,7 +85,7 @@ namespace OpenRA if (mods.HasModifier(Modifiers.Alt) || MultiTapCount >= 2) { - Game.viewport.Center(controlGroups[group]); + worldRenderer.Viewport.Center(controlGroups[group]); return; } diff --git a/OpenRA.Game/Widgets/WorldInteractionControllerWidget.cs b/OpenRA.Game/Widgets/WorldInteractionControllerWidget.cs index 407fff9394..11edac85db 100644 --- a/OpenRA.Game/Widgets/WorldInteractionControllerWidget.cs +++ b/OpenRA.Game/Widgets/WorldInteractionControllerWidget.cs @@ -176,7 +176,7 @@ namespace OpenRA.Widgets { if (e.KeyName.Length == 1 && char.IsDigit(e.KeyName[0])) { - world.Selection.DoControlGroup(world, e.KeyName[0] - '0', e.Modifiers, e.MultiTapCount); + world.Selection.DoControlGroup(world, worldRenderer, e.KeyName[0] - '0', e.Modifiers, e.MultiTapCount); return true; } diff --git a/OpenRA.Mods.Cnc/Missions/CncShellmapScript.cs b/OpenRA.Mods.Cnc/Missions/CncShellmapScript.cs index 5e2e1041c5..76ca04846a 100755 --- a/OpenRA.Mods.Cnc/Missions/CncShellmapScript.cs +++ b/OpenRA.Mods.Cnc/Missions/CncShellmapScript.cs @@ -22,14 +22,16 @@ namespace OpenRA.Mods.RA class CncShellmapScript : IWorldLoaded, ITick { - static CPos viewportOrigin; + WPos viewportOrigin; Dictionary actors; + WorldRenderer worldRenderer; public void WorldLoaded(World w, WorldRenderer wr) { + worldRenderer = wr; var b = w.Map.Bounds; - viewportOrigin = new CPos(b.Left + b.Width / 2, b.Top + b.Height / 2); - Game.MoveViewport(viewportOrigin.ToFloat2()); + viewportOrigin = new CPos(b.Left + b.Width / 2, b.Top + b.Height / 2).CenterPosition; + worldRenderer.Viewport.Center(viewportOrigin); actors = w.WorldActor.Trait().Actors; @@ -39,8 +41,8 @@ namespace OpenRA.Mods.RA void SetViewport() { var t = (ticks + 45) % (360f * speed) * (Math.PI / 180) * 1f / speed; - var loc = viewportOrigin.ToFloat2() + (new float2(-15, 4) * float2.FromAngle((float)t)); - Game.viewport.Center(loc); + var offset = new float2(-15360, 4096) * float2.FromAngle((float)t); + worldRenderer.Viewport.Center(viewportOrigin + new WVec((int)offset.X, (int)offset.Y, 0)); } int ticks = 0; diff --git a/OpenRA.Mods.Cnc/Missions/Gdi01Script.cs b/OpenRA.Mods.Cnc/Missions/Gdi01Script.cs index 627f4224eb..b990eb7f8a 100644 --- a/OpenRA.Mods.Cnc/Missions/Gdi01Script.cs +++ b/OpenRA.Mods.Cnc/Missions/Gdi01Script.cs @@ -34,7 +34,7 @@ namespace OpenRA.Mods.Cnc.Missions players = w.Players.ToDictionary(p => p.InternalName); actors = w.WorldActor.Trait().Actors; var b = w.Map.Bounds; - Game.MoveViewport(new CPos(b.Left + b.Width / 2, b.Top + b.Height / 2).ToFloat2()); + wr.Viewport.Center(new CPos(b.Left + b.Width / 2, b.Top + b.Height / 2).CenterPosition); Action afterFMV = () => { diff --git a/OpenRA.Mods.Cnc/Missions/Nod01Script.cs b/OpenRA.Mods.Cnc/Missions/Nod01Script.cs index 607acb2a16..b9768b8721 100644 --- a/OpenRA.Mods.Cnc/Missions/Nod01Script.cs +++ b/OpenRA.Mods.Cnc/Missions/Nod01Script.cs @@ -193,13 +193,10 @@ namespace OpenRA.Mods.Cnc.Missions nr1 = actors["NODReinforceNthA"]; nr2 = actors["NODReinforceNthB"]; nr3 = actors["NODReinforceNWstA"]; - Game.MoveViewport(nr1.Location.ToFloat2()); - Action afterFMV = () => - { - MissionUtils.PlayMissionMusic(); - }; + + wr.Viewport.Center(nr1.Location.CenterPosition); Game.RunAfterDelay(0, () => Media.PlayFMVFullscreen(w, "nod1pre.vqa", () => - Media.PlayFMVFullscreen(w, "nod1.vqa", afterFMV))); + Media.PlayFMVFullscreen(w, "nod1.vqa", MissionUtils.PlayMissionMusic))); } } } diff --git a/OpenRA.Mods.RA/MPStartLocations.cs b/OpenRA.Mods.RA/MPStartLocations.cs index 2597fce1ad..c88680f966 100755 --- a/OpenRA.Mods.RA/MPStartLocations.cs +++ b/OpenRA.Mods.RA/MPStartLocations.cs @@ -56,7 +56,7 @@ namespace OpenRA.Mods.RA // Set viewport if (world.LocalPlayer != null && Start.ContainsKey(world.LocalPlayer)) - Game.viewport.Center(Start[world.LocalPlayer].ToFloat2()); + wr.Viewport.Center(Start[world.LocalPlayer].CenterPosition); } static Player FindPlayerInSlot(World world, string pr) diff --git a/OpenRA.Mods.RA/Missions/Allies01Script.cs b/OpenRA.Mods.RA/Missions/Allies01Script.cs index 4f80c447f6..010cdc8a0d 100644 --- a/OpenRA.Mods.RA/Missions/Allies01Script.cs +++ b/OpenRA.Mods.RA/Missions/Allies01Script.cs @@ -300,7 +300,7 @@ namespace OpenRA.Mods.RA.Missions attackEntryPoint2 = actors["SovietAttackEntryPoint2"]; SetAlliedUnitsToDefensiveStance(); - Game.MoveViewport(insertionLZ.Location.ToFloat2()); + wr.Viewport.Center(insertionLZ.CenterPosition); if (w.LobbyInfo.IsSinglePlayer) Media.PlayFMVFullscreen(w, "ally1.vqa", () => diff --git a/OpenRA.Mods.RA/Missions/Allies02Script.cs b/OpenRA.Mods.RA/Missions/Allies02Script.cs index 5a281de234..aa8755faab 100644 --- a/OpenRA.Mods.RA/Missions/Allies02Script.cs +++ b/OpenRA.Mods.RA/Missions/Allies02Script.cs @@ -468,10 +468,9 @@ namespace OpenRA.Mods.RA.Missions shroud.Explore(w, sam4.Location, 2); if (w.LocalPlayer == null || w.LocalPlayer == allies1) - Game.MoveViewport(chinookHusk.Location.ToFloat2()); - + wr.Viewport.Center(chinookHusk.CenterPosition); else - Game.MoveViewport(allies2BasePoint.Location.ToFloat2()); + wr.Viewport.Center(allies2BasePoint.CenterPosition); MissionUtils.PlayMissionMusic(); } diff --git a/OpenRA.Mods.RA/Missions/Allies03Script.cs b/OpenRA.Mods.RA/Missions/Allies03Script.cs index b471b023d3..501765bf88 100644 --- a/OpenRA.Mods.RA/Missions/Allies03Script.cs +++ b/OpenRA.Mods.RA/Missions/Allies03Script.cs @@ -448,10 +448,9 @@ namespace OpenRA.Mods.RA.Missions paradropBox = new Rectangle(topLeft.Location.X, topLeft.Location.Y, bottomRight.Location.X - topLeft.Location.X, bottomRight.Location.Y - topLeft.Location.Y); if (w.LocalPlayer == null || w.LocalPlayer == allies1) - Game.MoveViewport(allies1EntryPoint.Location.ToFloat2()); - + wr.Viewport.Center(allies1EntryPoint.CenterPosition); else - Game.MoveViewport(allies2EntryPoint.Location.ToFloat2()); + wr.Viewport.Center(allies2EntryPoint.CenterPosition); OnObjectivesUpdated(false); MissionUtils.PlayMissionMusic(); diff --git a/OpenRA.Mods.RA/Missions/Allies04Script.cs b/OpenRA.Mods.RA/Missions/Allies04Script.cs index b880170720..a52787084d 100644 --- a/OpenRA.Mods.RA/Missions/Allies04Script.cs +++ b/OpenRA.Mods.RA/Missions/Allies04Script.cs @@ -60,6 +60,7 @@ namespace OpenRA.Mods.RA.Missions Player soviets; Player creeps; World world; + WorldRenderer worldRenderer; List patrols; CPos[] patrolPoints1; @@ -110,7 +111,7 @@ namespace OpenRA.Mods.RA.Missions if (world.FrameNumber == frameInfiltrated + 100) { Sound.Play("aarrivs1.aud"); - Game.MoveViewport(reinforcementsUnloadPoint.Location.ToFloat2()); + worldRenderer.Viewport.Center(reinforcementsUnloadPoint.CenterPosition); world.AddFrameEndTask(w => SendReinforcements()); } if (world.FrameNumber == frameInfiltrated + 200) @@ -354,6 +355,7 @@ namespace OpenRA.Mods.RA.Missions public void WorldLoaded(World w, WorldRenderer wr) { world = w; + worldRenderer = wr; difficulty = w.LobbyInfo.GlobalSettings.Difficulty; Game.Debug("{0} difficulty selected".F(difficulty)); @@ -453,7 +455,7 @@ namespace OpenRA.Mods.RA.Missions OnObjectivesUpdated(false); SetupSubStances(); - Game.MoveViewport(spyReinforcementsEntryPoint.Location.ToFloat2()); + worldRenderer.Viewport.Center(spyReinforcementsEntryPoint.CenterPosition); MissionUtils.PlayMissionMusic(); } } diff --git a/OpenRA.Mods.RA/Missions/DefaultShellmapScript.cs b/OpenRA.Mods.RA/Missions/DefaultShellmapScript.cs index 9114b90693..9ce3ee9cef 100644 --- a/OpenRA.Mods.RA/Missions/DefaultShellmapScript.cs +++ b/OpenRA.Mods.RA/Missions/DefaultShellmapScript.cs @@ -22,13 +22,15 @@ namespace OpenRA.Mods.RA class DefaultShellmapScript: IWorldLoaded, ITick { Dictionary Actors; - static CPos ViewportOrigin; + static WPos ViewportOrigin; + WorldRenderer worldRenderer; public void WorldLoaded(World w, WorldRenderer wr) { + worldRenderer = wr; var b = w.Map.Bounds; - ViewportOrigin = new CPos(b.Left + b.Width/2, b.Top + b.Height/2); - Game.MoveViewport(ViewportOrigin.ToFloat2()); + ViewportOrigin = new CPos(b.Left + b.Width/2, b.Top + b.Height/2).CenterPosition; + worldRenderer.Viewport.Center(ViewportOrigin); Actors = w.WorldActor.Trait().Actors; Sound.SoundVolumeModifier = 0.25f; @@ -38,12 +40,9 @@ namespace OpenRA.Mods.RA float speed = 4f; public void Tick(Actor self) { - var loc = new float2( - (float)(System.Math.Sin((ticks + 45) % (360f * speed) * (Math.PI / 180) * 1f / speed) * 15f + ViewportOrigin.X), - (float)(System.Math.Cos((ticks + 45) % (360f * speed) * (Math.PI / 180) * 1f / speed) * 10f + ViewportOrigin.Y) - ); - - Game.MoveViewport(loc); + var t = (ticks + 45) % (360f * speed) * (Math.PI / 180) * 1f / speed; + var offset = new float2(15360, 10240) * float2.FromAngle((float)t); + worldRenderer.Viewport.Center(ViewportOrigin + new WVec((int)offset.X, (int)offset.Y, 0)); if (ticks == 50) { @@ -54,7 +53,6 @@ namespace OpenRA.Mods.RA }, Actors["pdox"], -1, false); } - if (ticks == 100) Actors["mslo1"].Trait().Activate(Actors["mslo1"], new Order() { TargetLocation = new CPos(98, 52) }); if (ticks == 140) diff --git a/OpenRA.Mods.RA/Missions/DesertShellmapScript.cs b/OpenRA.Mods.RA/Missions/DesertShellmapScript.cs index 05e9d85525..e457896675 100644 --- a/OpenRA.Mods.RA/Missions/DesertShellmapScript.cs +++ b/OpenRA.Mods.RA/Missions/DesertShellmapScript.cs @@ -26,16 +26,17 @@ namespace OpenRA.Mods.RA.Missions class DesertShellmapScript : ITick, IWorldLoaded { World world; + WorldRenderer worldRenderer; Player allies; Player soviets; Player neutral; - List viewportTargets = new List(); - int2 viewportTarget; + WPos[] viewportTargets; + WPos viewportTarget; int viewportTargetNumber; - int2 viewportOrigin; - float mul; - float div = 400; + WPos viewportOrigin; + int mul; + int div = 400; int waitTicks = 0; int nextCivilianMove = 1; @@ -138,12 +139,12 @@ namespace OpenRA.Mods.RA.Missions if (--waitTicks <= 0) { if (++mul <= div) - Game.MoveViewport(float2.Lerp(viewportOrigin, viewportTarget, mul / div)); + worldRenderer.Viewport.Center(WPos.Lerp(viewportOrigin, viewportTarget, mul, div)); else { mul = 0; viewportOrigin = viewportTarget; - viewportTarget = viewportTargets[(viewportTargetNumber = (viewportTargetNumber + 1) % viewportTargets.Count)]; + viewportTarget = viewportTargets[(viewportTargetNumber = (viewportTargetNumber + 1) % viewportTargets.Length)]; waitTicks = 100; if (viewportTargetNumber == 0) @@ -238,7 +239,7 @@ namespace OpenRA.Mods.RA.Missions public void WorldLoaded(World w, WorldRenderer wr) { world = w; - + worldRenderer = wr; allies = w.Players.Single(p => p.InternalName == "Allies"); soviets = w.Players.Single(p => p.InternalName == "Soviets"); neutral = w.Players.Single(p => p.InternalName == "Neutral"); @@ -254,12 +255,12 @@ namespace OpenRA.Mods.RA.Missions paradrop2LZ = actors["Paradrop2LZ"]; paradrop2Entry = actors["Paradrop2Entry"]; - var t1 = actors["ViewportTarget1"]; - var t2 = actors["ViewportTarget2"]; - var t3 = actors["ViewportTarget3"]; - var t4 = actors["ViewportTarget4"]; - var t5 = actors["ViewportTarget5"]; - viewportTargets = new[] { t1, t2, t3, t4, t5 }.Select(t => t.Location.ToInt2()).ToList(); + var t1 = actors["ViewportTarget1"].CenterPosition; + var t2 = actors["ViewportTarget2"].CenterPosition; + var t3 = actors["ViewportTarget3"].CenterPosition; + var t4 = actors["ViewportTarget4"].CenterPosition; + var t5 = actors["ViewportTarget5"].CenterPosition; + viewportTargets = new[] { t1, t2, t3, t4, t5 }; offmapAttackerSpawn1 = actors["OffmapAttackerSpawn1"]; offmapAttackerSpawn2 = actors["OffmapAttackerSpawn2"]; @@ -298,7 +299,8 @@ namespace OpenRA.Mods.RA.Missions viewportOrigin = viewportTargets[0]; viewportTargetNumber = 1; viewportTarget = viewportTargets[1]; - Game.viewport.Center(viewportOrigin); + + wr.Viewport.Center(viewportOrigin); Sound.SoundVolumeModifier = 0.1f; } } diff --git a/OpenRA.Mods.RA/Missions/MonsterTankMadnessScript.cs b/OpenRA.Mods.RA/Missions/MonsterTankMadnessScript.cs index 78793f84e8..bc1c5431b1 100644 --- a/OpenRA.Mods.RA/Missions/MonsterTankMadnessScript.cs +++ b/OpenRA.Mods.RA/Missions/MonsterTankMadnessScript.cs @@ -335,7 +335,7 @@ namespace OpenRA.Mods.RA.Missions superTankDome.AddTrait(new InfiltrateAction(OnSuperTankDomeInfiltrated)); superTankDome.AddTrait(new TransformedAction(self => superTankDome = self)); - Game.MoveViewport(startEntryPoint.Location.ToFloat2()); + wr.Viewport.Center(startEntryPoint.CenterPosition); MissionUtils.PlayMissionMusic(); } } diff --git a/OpenRA.Mods.RA/Missions/Soviet01ClassicScript.cs b/OpenRA.Mods.RA/Missions/Soviet01ClassicScript.cs index 257221e235..e180621abb 100644 --- a/OpenRA.Mods.RA/Missions/Soviet01ClassicScript.cs +++ b/OpenRA.Mods.RA/Missions/Soviet01ClassicScript.cs @@ -154,7 +154,7 @@ namespace OpenRA.Mods.RA.Missions airfield3 = actors["Airfield3"]; airfields = new[] { airfield1, airfield2, airfield3 }; - Game.MoveViewport(startJeep.Location.ToFloat2()); + wr.Viewport.Center(startJeep.CenterPosition); if (w.LobbyInfo.IsSinglePlayer) { diff --git a/OpenRA.Mods.RA/Missions/Survival01Script.cs b/OpenRA.Mods.RA/Missions/Survival01Script.cs index f4365ead65..52a33c97be 100644 --- a/OpenRA.Mods.RA/Missions/Survival01Script.cs +++ b/OpenRA.Mods.RA/Missions/Survival01Script.cs @@ -336,7 +336,7 @@ namespace OpenRA.Mods.RA.Missions shroud.Explore(w, sam1.Location, 4); shroud.Explore(w, sam2.Location, 4); - Game.MoveViewport(alliesbase.Location.ToFloat2()); + wr.Viewport.Center(alliesbase.CenterPosition); StartCountDownTimer(); SendSquad1(); SendSquad2(); diff --git a/OpenRA.Mods.RA/Missions/Survival02Script.cs b/OpenRA.Mods.RA/Missions/Survival02Script.cs index d8180c21ab..7ee72cef8d 100644 --- a/OpenRA.Mods.RA/Missions/Survival02Script.cs +++ b/OpenRA.Mods.RA/Missions/Survival02Script.cs @@ -80,8 +80,8 @@ namespace OpenRA.Mods.RA.Missions Actor FranceparaEntry2; Actor FranceparaEntry3; - World world; + WorldRenderer worldRenderer; CountdownTimer survivalTimer; CountdownTimerWidget survivalTimerWidget; @@ -168,7 +168,7 @@ namespace OpenRA.Mods.RA.Missions void FrenchReinforcements() { - Game.MoveViewport(sovietrally1.Location.ToFloat2()); + worldRenderer.Viewport.Center(sovietrally1.CenterPosition); MissionUtils.Parabomb(world, allies, FranceparaEntry1.Location, drum3.Location); MissionUtils.Parabomb(world, allies, FranceparaEntry3.Location, drum2.Location); MissionUtils.Parabomb(world, allies, FranceparaEntry2.Location, drum1.Location); @@ -355,6 +355,8 @@ namespace OpenRA.Mods.RA.Missions public void WorldLoaded(World w, WorldRenderer wr) { world = w; + worldRenderer = wr; + allies = w.Players.SingleOrDefault(p => p.InternalName == "Allies"); if (allies != null) { @@ -395,7 +397,8 @@ namespace OpenRA.Mods.RA.Missions FranceparaEntry3 = actors["FranceparaEntry3"]; newsovietentrypoints = new[] { sovietparadropEntry, sovietEntry3 }.Select(p => p.Location).ToArray(); newsovietrallypoints = new[] { sovietrally3, sovietrally4, sovietrally8 }.Select(p => p.Location).ToArray(); - Game.MoveViewport(alliesbase.Location.ToFloat2()); + + worldRenderer.Viewport.Center(alliesbase.CenterPosition); StartCountDownTimer(); SetSovietUnitsToDefensiveStance(); world.CreateActor(Camera, new TypeDictionary diff --git a/OpenRA.Mods.RA/Widgets/Logic/ObserverStatsLogic.cs b/OpenRA.Mods.RA/Widgets/Logic/ObserverStatsLogic.cs index 57fa13c1a1..5e10fe1483 100644 --- a/OpenRA.Mods.RA/Widgets/Logic/ObserverStatsLogic.cs +++ b/OpenRA.Mods.RA/Widgets/Logic/ObserverStatsLogic.cs @@ -13,6 +13,7 @@ using System.Collections.Generic; using System.Drawing; using System.Linq; using OpenRA.FileFormats; +using OpenRA.Graphics; using OpenRA.Mods.RA.Buildings; using OpenRA.Network; using OpenRA.Traits; @@ -37,11 +38,13 @@ namespace OpenRA.Mods.RA.Widgets.Logic DropDownButtonWidget statsDropDown; IEnumerable players; World world; + WorldRenderer worldRenderer; [ObjectCreator.UseCtor] - public ObserverStatsLogic(World world, Widget widget) + public ObserverStatsLogic(World world, WorldRenderer worldRenderer, Widget widget) { this.world = world; + this.worldRenderer = worldRenderer; players = world.Players.Where(p => !p.NonCombatant); basicStatsHeaders = widget.Get("BASIC_STATS_HEADERS"); @@ -272,9 +275,7 @@ namespace OpenRA.Mods.RA.Widgets.Logic { var playerBase = world.Actors.FirstOrDefault(a => !a.IsDead() && a.HasTrait() && a.Owner == player); if (playerBase != null) - { - Game.MoveViewport(playerBase.Location.ToFloat2()); - } + worldRenderer.Viewport.Center(playerBase.CenterPosition); }); } diff --git a/OpenRA.Mods.RA/Widgets/WorldCommandWidget.cs b/OpenRA.Mods.RA/Widgets/WorldCommandWidget.cs index fe60497476..0e301778cd 100644 --- a/OpenRA.Mods.RA/Widgets/WorldCommandWidget.cs +++ b/OpenRA.Mods.RA/Widgets/WorldCommandWidget.cs @@ -22,12 +22,14 @@ namespace OpenRA.Mods.RA.Widgets { public class WorldCommandWidget : Widget { - World world; + readonly World world; + readonly WorldRenderer worldRenderer; [ObjectCreator.UseCtor] - public WorldCommandWidget(World world) + public WorldCommandWidget(World world, WorldRenderer worldRenderer) { this.world = world; + this.worldRenderer = worldRenderer; } public override string GetCursor(int2 pos) { return null; } @@ -207,13 +209,13 @@ namespace OpenRA.Mods.RA.Widgets if (eventNotifier.lastAttackTime < 0) return true; - Game.viewport.Center(eventNotifier.lastAttackLocation.ToFloat2()); + worldRenderer.Viewport.Center(eventNotifier.lastAttackLocation.CenterPosition); return true; } bool ToSelection() { - Game.viewport.Center(world.Selection.Actors); + worldRenderer.Viewport.Center(world.Selection.Actors); return true; } }