Move more viewport lookups to WorldRenderer.
This commit is contained in:
@@ -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);
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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++)
|
||||||
|
|||||||
@@ -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++)
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|
||||||
|
|||||||
@@ -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];
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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));
|
||||||
|
|||||||
@@ -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)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user