Move more viewport lookups to WorldRenderer.

This commit is contained in:
Paul Chote
2013-09-27 17:53:34 +12:00
parent f575c20d38
commit 0b560bfc6e
13 changed files with 37 additions and 38 deletions

View File

@@ -161,7 +161,7 @@ namespace OpenRA.Graphics
GenerateSprites(shroud); GenerateSprites(shroud);
var clipRect = Game.viewport.WorldBounds(wr.world); var clipRect = wr.Viewport.WorldBounds(wr.world);
// We draw the shroud when disabled to hide the sharp map edges // We draw the shroud when disabled to hide the sharp map edges
DrawShroud(wr, clipRect, sprites, shroudPalette); DrawShroud(wr, clipRect, sprites, shroudPalette);

View File

@@ -46,7 +46,7 @@ namespace OpenRA.Graphics
public void BeforeRender(WorldRenderer wr) {} public void BeforeRender(WorldRenderer wr) {}
public void Render(WorldRenderer wr) public void Render(WorldRenderer wr)
{ {
var screenPos = Game.viewport.Zoom*(wr.ScreenPosition(pos) - Game.viewport.Location) - 0.5f*font.Measure(text).ToFloat2(); var screenPos = wr.Viewport.Zoom*(wr.ScreenPosition(pos) - wr.Viewport.Location) - 0.5f*font.Measure(text).ToFloat2();
var screenPxPos = new float2((float)Math.Round(screenPos.X), (float)Math.Round(screenPos.Y)); var screenPxPos = new float2((float)Math.Round(screenPos.X), (float)Math.Round(screenPos.Y));
font.DrawTextWithContrast(text, screenPxPos, color, Color.Black, 1); font.DrawTextWithContrast(text, screenPxPos, color, Color.Black, 1);
} }

View File

@@ -75,9 +75,9 @@ namespace OpenRA.Graphics
List<IRenderable> GenerateRenderables() List<IRenderable> GenerateRenderables()
{ {
var comparer = new RenderableComparer(this); var comparer = new RenderableComparer(this);
var vb = Game.viewport.ViewBounds(world); var vb = Viewport.ViewBounds(world);
var tl = Game.viewport.ViewToWorldPx(new int2(vb.Left, vb.Top)); var tl = Viewport.ViewToWorldPx(new int2(vb.Left, vb.Top));
var br = Game.viewport.ViewToWorldPx(new int2(vb.Right, vb.Bottom)); var br = Viewport.ViewToWorldPx(new int2(vb.Right, vb.Bottom));
var actors = world.ScreenMap.ActorsInBox(tl, br) var actors = world.ScreenMap.ActorsInBox(tl, br)
.Append(world.WorldActor) .Append(world.WorldActor)
.ToList(); .ToList();
@@ -116,10 +116,10 @@ namespace OpenRA.Graphics
return; return;
var renderables = GenerateRenderables(); var renderables = GenerateRenderables();
var bounds = Game.viewport.ViewBounds(world); var bounds = Viewport.ViewBounds(world);
Game.Renderer.EnableScissor(bounds.Left, bounds.Top, bounds.Width, bounds.Height); Game.Renderer.EnableScissor(bounds.Left, bounds.Top, bounds.Width, bounds.Height);
terrainRenderer.Draw(this, Game.viewport); terrainRenderer.Draw(this, Viewport);
Game.Renderer.Flush(); Game.Renderer.Flush();
for (var i = 0; i < renderables.Count; i++) for (var i = 0; i < renderables.Count; i++)

View File

@@ -37,7 +37,7 @@ namespace OpenRA.Traits
rt.info.PaletteRef = wr.Palette(rt.info.Palette); rt.info.PaletteRef = wr.Palette(rt.info.Palette);
} }
var clip = Game.viewport.WorldBounds(world); var clip = wr.Viewport.WorldBounds(world);
for (var x = clip.Left; x < clip.Right; x++) for (var x = clip.Left; x < clip.Right; x++)
{ {
for (var y = clip.Top; y < clip.Bottom; y++) for (var y = clip.Top; y < clip.Bottom; y++)

View File

@@ -29,7 +29,7 @@ namespace OpenRA.Traits
{ {
if (shakeEffects.Any()) if (shakeEffects.Any())
{ {
Game.viewport.Scroll(GetScrollOffset(), true); worldRenderer.Viewport.Scroll(GetScrollOffset(), true);
shakeEffects.RemoveAll(t => t.ExpiryTime == ticks); shakeEffects.RemoveAll(t => t.ExpiryTime == ticks);
} }
@@ -50,7 +50,7 @@ namespace OpenRA.Traits
float GetIntensity() float GetIntensity()
{ {
var cp = worldRenderer.Position(Game.viewport.CenterLocation.ToInt2()); var cp = worldRenderer.Position(worldRenderer.Viewport.CenterLocation.ToInt2());
var intensity = 100 * 1024 * 1024 * shakeEffects.Sum( var intensity = 100 * 1024 * 1024 * shakeEffects.Sum(
e => (float)e.Intensity / (e.Position - cp).LengthSquared); e => (float)e.Intensity / (e.Position - cp).LengthSquared);

View File

@@ -57,12 +57,14 @@ namespace OpenRA.Widgets
ScrollDirection keyboardDirections; ScrollDirection keyboardDirections;
ScrollDirection edgeDirections; ScrollDirection edgeDirections;
World world; World world;
WorldRenderer worldRenderer;
[ObjectCreator.UseCtor] [ObjectCreator.UseCtor]
public ViewportControllerWidget(World world, WorldRenderer worldRenderer) public ViewportControllerWidget(World world, WorldRenderer worldRenderer)
: base() : base()
{ {
this.world = world; this.world = world;
this.worldRenderer = worldRenderer;
tooltipContainer = Lazy.New(() => tooltipContainer = Lazy.New(() =>
Ui.Root.Get<TooltipContainerWidget>(TooltipContainer)); Ui.Root.Get<TooltipContainerWidget>(TooltipContainer));
} }
@@ -93,7 +95,7 @@ namespace OpenRA.Widgets
public void UpdateMouseover() public void UpdateMouseover()
{ {
TooltipType = WorldTooltipType.None; TooltipType = WorldTooltipType.None;
var cell = Game.viewport.ViewToWorld(Viewport.LastMousePos); var cell = worldRenderer.Viewport.ViewToWorld(Viewport.LastMousePos);
if (!world.Map.IsInMap(cell)) if (!world.Map.IsInMap(cell))
return; return;
@@ -103,7 +105,7 @@ namespace OpenRA.Widgets
return; return;
} }
var underCursor = world.ScreenMap.ActorsAt(Game.viewport.ViewToWorldPx(Viewport.LastMousePos)) var underCursor = world.ScreenMap.ActorsAt(worldRenderer.Viewport.ViewToWorldPx(Viewport.LastMousePos))
.Where(a => !world.FogObscures(a) && a.HasTrait<IToolTip>()) .Where(a => !world.FogObscures(a) && a.HasTrait<IToolTip>())
.OrderByDescending(a => a.Info.SelectionPriority()) .OrderByDescending(a => a.Info.SelectionPriority())
.FirstOrDefault(); .FirstOrDefault();
@@ -127,14 +129,14 @@ namespace OpenRA.Widgets
} }
} }
public static string GetScrollCursor(Widget w, ScrollDirection edge, int2 pos) public override string GetCursor(int2 pos)
{ {
if (!Game.Settings.Game.ViewportEdgeScroll || Ui.MouseOverWidget != w) if (!Game.Settings.Game.ViewportEdgeScroll || Ui.MouseOverWidget != this)
return null; return null;
var blockedDirections = Game.viewport.GetBlockedDirections(); var blockedDirections = worldRenderer.Viewport.GetBlockedDirections();
foreach (var dir in ScrollCursors) foreach (var dir in ScrollCursors)
if (edge.Includes(dir.Key)) if (edgeDirections.Includes(dir.Key))
return dir.Value + (blockedDirections.Includes(dir.Key) ? "-blocked" : ""); return dir.Value + (blockedDirections.Includes(dir.Key) ? "-blocked" : "");
return null; return null;
@@ -150,15 +152,13 @@ namespace OpenRA.Widgets
(mi.Button == MouseButton.Middle || mi.Button == (MouseButton.Left | MouseButton.Right))) (mi.Button == MouseButton.Middle || mi.Button == (MouseButton.Left | MouseButton.Right)))
{ {
var d = scrolltype == MouseScrollType.Inverted ? -1 : 1; var d = scrolltype == MouseScrollType.Inverted ? -1 : 1;
Game.viewport.Scroll((Viewport.LastMousePos - mi.Location) * d); worldRenderer.Viewport.Scroll((Viewport.LastMousePos - mi.Location) * d);
return true; return true;
} }
return false; return false;
} }
public override string GetCursor(int2 pos) { return GetScrollCursor(this, edgeDirections, pos); }
public override bool YieldKeyboardFocus() public override bool YieldKeyboardFocus()
{ {
keyboardDirections = ScrollDirection.None; keyboardDirections = ScrollDirection.None;
@@ -195,7 +195,7 @@ namespace OpenRA.Widgets
var length = Math.Max(1, scroll.Length); var length = Math.Max(1, scroll.Length);
scroll *= (1f / length) * Game.Settings.Game.ViewportEdgeScrollStep; scroll *= (1f / length) * Game.Settings.Game.ViewportEdgeScrollStep;
Game.viewport.Scroll(scroll); worldRenderer.Viewport.Scroll(scroll);
} }
} }

View File

@@ -48,10 +48,9 @@ namespace OpenRA.Widgets
worldRenderer.DrawRollover(u); worldRenderer.DrawRollover(u);
} }
public override bool HandleMouseInput(MouseInput mi) public override bool HandleMouseInput(MouseInput mi)
{ {
var xy = Game.viewport.ViewToWorldPx(mi.Location); var xy = worldRenderer.Viewport.ViewToWorldPx(mi.Location);
var UseClassicMouseStyle = Game.Settings.Game.UseClassicMouseStyle; var UseClassicMouseStyle = Game.Settings.Game.UseClassicMouseStyle;
@@ -92,9 +91,9 @@ namespace OpenRA.Widgets
{ {
var unit = world.ScreenMap.ActorsAt(xy).FirstOrDefault(); var unit = world.ScreenMap.ActorsAt(xy).FirstOrDefault();
var visibleWorld = Game.viewport.ViewBounds(world); var visibleWorld = worldRenderer.Viewport.ViewBounds(world);
var topLeft = Game.viewport.ViewToWorldPx(new int2(visibleWorld.Left, visibleWorld.Top)); var topLeft = worldRenderer.Viewport.ViewToWorldPx(new int2(visibleWorld.Left, visibleWorld.Top));
var bottomRight = Game.viewport.ViewToWorldPx(new int2(visibleWorld.Right, visibleWorld.Bottom)); var bottomRight = worldRenderer.Viewport.ViewToWorldPx(new int2(visibleWorld.Right, visibleWorld.Bottom));
var newSelection2= SelectActorsInBox(world, topLeft, bottomRight, var newSelection2= SelectActorsInBox(world, topLeft, bottomRight,
a => unit != null && a.Info.Name == unit.Info.Name && a.Owner == unit.Owner); a => unit != null && a.Info.Name == unit.Info.Name && a.Owner == unit.Owner);
@@ -155,7 +154,7 @@ namespace OpenRA.Widgets
if (SelectionBox != null) if (SelectionBox != null)
return null; return null;
var xy = Game.viewport.ViewToWorldPx(screenPos); var xy = worldRenderer.Viewport.ViewToWorldPx(screenPos);
var pos = worldRenderer.Position(xy); var pos = worldRenderer.Position(xy);
var cell = pos.ToCPos(); var cell = pos.ToCPos();

View File

@@ -71,7 +71,7 @@ namespace OpenRA.Mods.RA.Orders
public IEnumerable<IRenderable> Render(WorldRenderer wr, World world) { yield break; } public IEnumerable<IRenderable> Render(WorldRenderer wr, World world) { yield break; }
public void RenderAfterWorld(WorldRenderer wr, World world) public void RenderAfterWorld(WorldRenderer wr, World world)
{ {
var position = Game.viewport.ViewToWorld(Viewport.LastMousePos); var position = wr.Viewport.ViewToWorld(Viewport.LastMousePos);
var topLeft = position - FootprintUtils.AdjustForBuildingSize(BuildingInfo); var topLeft = position - FootprintUtils.AdjustForBuildingSize(BuildingInfo);
var actorInfo = Rules.Info[Building]; var actorInfo = Rules.Info[Building];

View File

@@ -138,7 +138,7 @@ namespace OpenRA.Mods.RA
public void RenderAfterWorld(WorldRenderer wr, World world) public void RenderAfterWorld(WorldRenderer wr, World world)
{ {
var xy = Game.viewport.ViewToWorld(Viewport.LastMousePos); var xy = wr.Viewport.ViewToWorld(Viewport.LastMousePos);
var targetUnits = power.UnitsInRange(xy); var targetUnits = power.UnitsInRange(xy);
foreach (var unit in targetUnits) foreach (var unit in targetUnits)
if (manager.self.Owner.Shroud.IsTargetable(unit) || manager.self.Owner.HasFogVisibility()) if (manager.self.Owner.Shroud.IsTargetable(unit) || manager.self.Owner.HasFogVisibility())
@@ -147,7 +147,7 @@ namespace OpenRA.Mods.RA
public IEnumerable<IRenderable> Render(WorldRenderer wr, World world) public IEnumerable<IRenderable> Render(WorldRenderer wr, World world)
{ {
var xy = Game.viewport.ViewToWorld(Viewport.LastMousePos); var xy = wr.Viewport.ViewToWorld(Viewport.LastMousePos);
var tiles = world.FindTilesInCircle(xy, range); var tiles = world.FindTilesInCircle(xy, range);
var pal = wr.Palette("terrain"); var pal = wr.Palette("terrain");
foreach (var t in tiles) foreach (var t in tiles)
@@ -226,7 +226,7 @@ namespace OpenRA.Mods.RA
public IEnumerable<IRenderable> Render(WorldRenderer wr, World world) public IEnumerable<IRenderable> Render(WorldRenderer wr, World world)
{ {
var xy = Game.viewport.ViewToWorld(Viewport.LastMousePos); var xy = wr.Viewport.ViewToWorld(Viewport.LastMousePos);
var pal = wr.Palette("terrain"); var pal = wr.Palette("terrain");
// Source tiles // Source tiles

View File

@@ -90,14 +90,14 @@ namespace OpenRA.Mods.RA
public void RenderAfterWorld(WorldRenderer wr, World world) public void RenderAfterWorld(WorldRenderer wr, World world)
{ {
var xy = Game.viewport.ViewToWorld(Viewport.LastMousePos); var xy = wr.Viewport.ViewToWorld(Viewport.LastMousePos);
foreach (var unit in power.UnitsInRange(xy)) foreach (var unit in power.UnitsInRange(xy))
wr.DrawSelectionBox(unit, Color.Red); wr.DrawSelectionBox(unit, Color.Red);
} }
public IEnumerable<IRenderable> Render(WorldRenderer wr, World world) public IEnumerable<IRenderable> Render(WorldRenderer wr, World world)
{ {
var xy = Game.viewport.ViewToWorld(Viewport.LastMousePos); var xy = wr.Viewport.ViewToWorld(Viewport.LastMousePos);
var pal = wr.Palette("terrain"); var pal = wr.Palette("terrain");
foreach (var t in world.FindTilesInCircle(xy, range)) foreach (var t in world.FindTilesInCircle(xy, range))
yield return new SpriteRenderable(tile, t.CenterPosition, WVec.Zero, -511, pal, 1f, true); yield return new SpriteRenderable(tile, t.CenterPosition, WVec.Zero, -511, pal, 1f, true);

View File

@@ -83,7 +83,7 @@ namespace OpenRA.Mods.RA.Widgets
return null; return null;
var cell = MinimapPixelToCell(pos); var cell = MinimapPixelToCell(pos);
var location = Game.viewport.WorldToViewPx(worldRenderer.ScreenPxPosition(cell.CenterPosition)); var location = worldRenderer.Viewport.WorldToViewPx(worldRenderer.ScreenPxPosition(cell.CenterPosition));
var mi = new MouseInput var mi = new MouseInput
{ {
@@ -110,12 +110,12 @@ namespace OpenRA.Mods.RA.Widgets
var cell = MinimapPixelToCell(mi.Location); var cell = MinimapPixelToCell(mi.Location);
var pos = cell.CenterPosition; var pos = cell.CenterPosition;
if ((mi.Event == MouseInputEvent.Down || mi.Event == MouseInputEvent.Move) && mi.Button == MouseButton.Left) if ((mi.Event == MouseInputEvent.Down || mi.Event == MouseInputEvent.Move) && mi.Button == MouseButton.Left)
Game.viewport.Center(cell.ToFloat2()); worldRenderer.Viewport.Center(cell.ToFloat2());
if (mi.Event == MouseInputEvent.Down && mi.Button == MouseButton.Right) if (mi.Event == MouseInputEvent.Down && mi.Button == MouseButton.Right)
{ {
// fake a mousedown/mouseup here // fake a mousedown/mouseup here
var location = Game.viewport.WorldToViewPx(worldRenderer.ScreenPxPosition(pos)); var location = worldRenderer.Viewport.WorldToViewPx(worldRenderer.ScreenPxPosition(pos));
var fakemi = new MouseInput var fakemi = new MouseInput
{ {
Event = MouseInputEvent.Down, Event = MouseInputEvent.Down,
@@ -153,7 +153,7 @@ namespace OpenRA.Mods.RA.Widgets
// Draw viewport rect // Draw viewport rect
if (hasRadar) if (hasRadar)
{ {
var wr = Game.viewport.WorldRect; var wr = worldRenderer.Viewport.WorldRect;
var wro = new CPos(wr.X, wr.Y); var wro = new CPos(wr.X, wr.Y);
var tl = CellToMinimapPixel(wro); var tl = CellToMinimapPixel(wro);
var br = CellToMinimapPixel(wro + new CVec(wr.Width, wr.Height)); var br = CellToMinimapPixel(wro + new CVec(wr.Width, wr.Height));

View File

@@ -53,7 +53,7 @@ namespace OpenRA.Mods.RA
var doDim = refreshTick - world.FrameNumber <= 0; var doDim = refreshTick - world.FrameNumber <= 0;
if (doDim) refreshTick = world.FrameNumber + 20; if (doDim) refreshTick = world.FrameNumber + 20;
var viewBounds = Game.viewport.WorldBounds(world); var viewBounds = wr.Viewport.WorldBounds(world);
foreach (var pair in layers) foreach (var pair in layers)
{ {

View File

@@ -95,7 +95,7 @@ namespace OpenRA.Mods.RA
public void Render(WorldRenderer wr) public void Render(WorldRenderer wr)
{ {
var cliprect = Game.viewport.WorldBounds(world); var cliprect = wr.Viewport.WorldBounds(world);
var pal = wr.Palette("terrain"); var pal = wr.Palette("terrain");
foreach (var kv in tiles) foreach (var kv in tiles)