Route viewport centering via WorldRenderer.

This commit is contained in:
Paul Chote
2013-09-27 17:13:54 +12:00
parent b3d608092c
commit f575c20d38
21 changed files with 77 additions and 70 deletions

View File

@@ -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,

View File

@@ -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<Actor> 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

View File

@@ -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;

View File

@@ -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<int, List<Actor>> controlGroups = new Cache<int, List<Actor>>(_ => new List<Actor>());
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;
}

View File

@@ -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;
}