Draw annotations using the UI renderers.

This commit is contained in:
Paul Chote
2019-09-15 12:20:08 +01:00
committed by abcdefg30
parent 8c1b0f1afe
commit e772adb0a9
13 changed files with 108 additions and 112 deletions

View File

@@ -64,8 +64,10 @@ namespace OpenRA.Graphics
public void RenderDebugGeometry(WorldRenderer wr) public void RenderDebugGeometry(WorldRenderer wr)
{ {
var screenOffset = ScreenPosition(wr) + sprite.Offset; var pos = ScreenPosition(wr) + sprite.Offset;
Game.Renderer.WorldRgbaColorRenderer.DrawRect(screenOffset, screenOffset + sprite.Size, 1 / wr.Viewport.Zoom, Color.Red); var tl = wr.Viewport.WorldToViewPx(pos);
var br = wr.Viewport.WorldToViewPx(pos + sprite.Size);
Game.Renderer.RgbaColorRenderer.DrawRect(tl, br, 1, Color.Red);
} }
public Rectangle ScreenBounds(WorldRenderer wr) public Rectangle ScreenBounds(WorldRenderer wr)

View File

@@ -46,12 +46,11 @@ namespace OpenRA.Graphics
if (!waypoints.Any()) if (!waypoints.Any())
return; return;
var sw = width / wr.Viewport.Zoom; var first = wr.Viewport.WorldToViewPx(wr.Screen3DPosition(waypoints.First()));
var first = wr.Screen3DPosition(waypoints.First());
var a = first; var a = first;
foreach (var b in waypoints.Skip(1).Select(pos => wr.Screen3DPosition(pos))) foreach (var b in waypoints.Skip(1).Select(pos => wr.Viewport.WorldToViewPx(wr.Screen3DPosition(pos))))
{ {
Game.Renderer.WorldRgbaColorRenderer.DrawLine(a, b, sw, color); Game.Renderer.RgbaColorRenderer.DrawLine(a, b, width, color);
DrawTargetMarker(wr, color, b, markerSize); DrawTargetMarker(wr, color, b, markerSize);
a = b; a = b;
} }
@@ -59,13 +58,12 @@ namespace OpenRA.Graphics
DrawTargetMarker(wr, color, first); DrawTargetMarker(wr, color, first);
} }
public static void DrawTargetMarker(WorldRenderer wr, Color color, float3 location, int size = 1) public static void DrawTargetMarker(WorldRenderer wr, Color color, int2 screenPos, int size = 1)
{ {
var sw = size / wr.Viewport.Zoom; var offset = new int2(size, size);
var offset = new float2(sw, sw); var tl = screenPos - offset;
var tl = location - offset; var br = screenPos + offset;
var br = location + offset; Game.Renderer.RgbaColorRenderer.FillRect(tl, br, color);
Game.Renderer.WorldRgbaColorRenderer.FillRect(tl, br, color);
} }
public void RenderDebugGeometry(WorldRenderer wr) { } public void RenderDebugGeometry(WorldRenderer wr) { }

View File

@@ -211,6 +211,7 @@ namespace OpenRA.Graphics
public int2 ViewToWorldPx(int2 view) { return (1f / Zoom * view.ToFloat2()).ToInt2() + TopLeft; } public int2 ViewToWorldPx(int2 view) { return (1f / Zoom * view.ToFloat2()).ToInt2() + TopLeft; }
public int2 WorldToViewPx(int2 world) { return (Zoom * (world - TopLeft).ToFloat2()).ToInt2(); } public int2 WorldToViewPx(int2 world) { return (Zoom * (world - TopLeft).ToFloat2()).ToInt2(); }
public int2 WorldToViewPx(float3 world) { return (Zoom * (world - TopLeft).XY).ToInt2(); }
public void Center(IEnumerable<Actor> actors) public void Center(IEnumerable<Actor> actors)
{ {

View File

@@ -247,39 +247,39 @@ namespace OpenRA.Graphics
foreach (var r in g) foreach (var r in g)
r.Render(this); r.Render(this);
if (debugVis.Value != null && debugVis.Value.RenderGeometry)
{
for (var i = 0; i < preparedRenderables.Count; i++)
preparedRenderables[i].RenderDebugGeometry(this);
foreach (var g in groupedOverlayRenderables)
foreach (var r in g)
r.RenderDebugGeometry(this);
}
if (debugVis.Value != null && debugVis.Value.ScreenMap)
{
foreach (var r in World.ScreenMap.RenderBounds(World.RenderPlayer))
Game.Renderer.WorldRgbaColorRenderer.DrawRect(
new float3(r.Left, r.Top, r.Bottom),
new float3(r.Right, r.Bottom, r.Bottom),
1 / Viewport.Zoom, Color.MediumSpringGreen);
foreach (var r in World.ScreenMap.MouseBounds(World.RenderPlayer))
Game.Renderer.WorldRgbaColorRenderer.DrawRect(
new float3(r.Left, r.Top, r.Bottom),
new float3(r.Right, r.Bottom, r.Bottom),
1 / Viewport.Zoom, Color.OrangeRed);
}
Game.Renderer.Flush(); Game.Renderer.Flush();
for (var i = 0; i < preparedAnnotationRenderables.Count; i++) for (var i = 0; i < preparedAnnotationRenderables.Count; i++)
preparedAnnotationRenderables[i].Render(this); preparedAnnotationRenderables[i].Render(this);
if (debugVis.Value != null && debugVis.Value.RenderGeometry) if (debugVis.Value != null && debugVis.Value.RenderGeometry)
{
for (var i = 0; i < preparedRenderables.Count; i++)
preparedRenderables[i].RenderDebugGeometry(this);
for (var i = 0; i < preparedOverlayRenderables.Count; i++)
preparedOverlayRenderables[i].RenderDebugGeometry(this);
for (var i = 0; i < preparedAnnotationRenderables.Count; i++) for (var i = 0; i < preparedAnnotationRenderables.Count; i++)
preparedAnnotationRenderables[i].RenderDebugGeometry(this); preparedAnnotationRenderables[i].RenderDebugGeometry(this);
}
if (debugVis.Value != null && debugVis.Value.ScreenMap)
{
foreach (var r in World.ScreenMap.RenderBounds(World.RenderPlayer))
{
var tl = Viewport.WorldToViewPx(new float2(r.Left, r.Top));
var br = Viewport.WorldToViewPx(new float2(r.Right, r.Bottom));
Game.Renderer.RgbaColorRenderer.DrawRect(tl, br, 1, Color.MediumSpringGreen);
}
foreach (var r in World.ScreenMap.MouseBounds(World.RenderPlayer))
{
var tl = Viewport.WorldToViewPx(new float2(r.Left, r.Top));
var br = Viewport.WorldToViewPx(new float2(r.Right, r.Bottom));
Game.Renderer.RgbaColorRenderer.DrawRect(tl, br, 1, Color.OrangeRed);
}
}
Game.Renderer.Flush(); Game.Renderer.Flush();
preparedRenderables.Clear(); preparedRenderables.Clear();

View File

@@ -52,8 +52,7 @@ namespace OpenRA.Mods.Common.Effects
if (wr.World.FogObscures(pos) || wr.World.ShroudObscures(pos)) if (wr.World.FogObscures(pos) || wr.World.ShroudObscures(pos))
yield break; yield break;
// Arbitrary large value used for the z-offset to try and ensure the text displays above everything else. yield return new TextRenderable(font, pos, 0, color, text);
yield return new TextRenderable(font, pos, 4096, color, text);
} }
public static string FormatCashTick(int cashAmount) public static string FormatCashTick(int cashAmount)

View File

@@ -47,23 +47,23 @@ namespace OpenRA.Mods.Common.Graphics
public IFinalizedRenderable PrepareRender(WorldRenderer wr) { return this; } public IFinalizedRenderable PrepareRender(WorldRenderer wr) { return this; }
public void Render(WorldRenderer wr) public void Render(WorldRenderer wr)
{ {
var wcr = Game.Renderer.WorldRgbaColorRenderer; var cr = Game.Renderer.RgbaColorRenderer;
if (filled) if (filled)
{ {
var offset = new WVec(radius.Length, radius.Length, 0); var offset = new WVec(radius.Length, radius.Length, 0);
var tl = wr.Screen3DPosition(centerPosition - offset); var tl = wr.Viewport.WorldToViewPx(wr.ScreenPosition(centerPosition - offset));
var br = wr.Screen3DPosition(centerPosition + offset); var br = wr.Viewport.WorldToViewPx(wr.ScreenPosition(centerPosition + offset));
wcr.FillEllipse(tl, br, color); cr.FillEllipse(tl, br, color);
} }
else else
{ {
var r = radius.Length; var r = radius.Length;
var a = wr.Screen3DPosition(centerPosition + r * FacingOffsets[CircleSegments - 1] / 1024); var a = wr.Viewport.WorldToViewPx(wr.ScreenPosition(centerPosition + r * FacingOffsets[CircleSegments - 1] / 1024));
for (var i = 0; i < CircleSegments; i++) for (var i = 0; i < CircleSegments; i++)
{ {
var b = wr.Screen3DPosition(centerPosition + r * FacingOffsets[i] / 1024); var b = wr.Viewport.WorldToViewPx(wr.ScreenPosition(centerPosition + r * FacingOffsets[i] / 1024));
wcr.DrawLine(a, b, width / wr.Viewport.Zoom, color); cr.DrawLine(a, b, width, color);
a = b; a = b;
} }
} }

View File

@@ -52,7 +52,10 @@ namespace OpenRA.Mods.Common.Graphics
public IFinalizedRenderable PrepareRender(WorldRenderer wr) { return this; } public IFinalizedRenderable PrepareRender(WorldRenderer wr) { return this; }
public void Render(WorldRenderer wr) public void Render(WorldRenderer wr)
{ {
Game.Renderer.WorldRgbaColorRenderer.DrawLine(wr.Screen3DPosition(start), wr.Screen3DPosition(end), width / wr.Viewport.Zoom, startColor, endColor); Game.Renderer.RgbaColorRenderer.DrawLine(
wr.Viewport.WorldToViewPx(wr.ScreenPosition(start)),
wr.Viewport.WorldToViewPx(wr.Screen3DPosition(end)),
width, startColor, endColor);
} }
public void RenderDebugGeometry(WorldRenderer wr) { } public void RenderDebugGeometry(WorldRenderer wr) { }

View File

@@ -43,8 +43,8 @@ namespace OpenRA.Mods.Common.Graphics
public IFinalizedRenderable PrepareRender(WorldRenderer wr) { return this; } public IFinalizedRenderable PrepareRender(WorldRenderer wr) { return this; }
public void Render(WorldRenderer wr) public void Render(WorldRenderer wr)
{ {
var verts = vertices.Select(wr.Screen3DPosition).ToArray(); var verts = vertices.Select(v => wr.Viewport.WorldToViewPx(wr.ScreenPosition(v)).ToFloat2()).ToArray();
Game.Renderer.WorldRgbaColorRenderer.DrawPolygon(verts, width / wr.Viewport.Zoom, color); Game.Renderer.RgbaColorRenderer.DrawPolygon(verts, width, color);
} }
public void RenderDebugGeometry(WorldRenderer wr) { } public void RenderDebugGeometry(WorldRenderer wr) { }

View File

@@ -54,18 +54,18 @@ namespace OpenRA.Mods.Common.Graphics
public static void DrawRangeCircle(WorldRenderer wr, WPos centerPosition, WDist radius, public static void DrawRangeCircle(WorldRenderer wr, WPos centerPosition, WDist radius,
float width, Color color, float contrastWidth, Color contrastColor) float width, Color color, float contrastWidth, Color contrastColor)
{ {
var wcr = Game.Renderer.WorldRgbaColorRenderer; var cr = Game.Renderer.RgbaColorRenderer;
var offset = new WVec(radius.Length, 0, 0); var offset = new WVec(radius.Length, 0, 0);
for (var i = 0; i < RangeCircleSegments; i++) for (var i = 0; i < RangeCircleSegments; i++)
{ {
var a = wr.Screen3DPosition(centerPosition + offset.Rotate(ref RangeCircleStartRotations[i])); var a = wr.Viewport.WorldToViewPx(wr.ScreenPosition(centerPosition + offset.Rotate(ref RangeCircleStartRotations[i])));
var b = wr.Screen3DPosition(centerPosition + offset.Rotate(ref RangeCircleEndRotations[i])); var b = wr.Viewport.WorldToViewPx(wr.ScreenPosition(centerPosition + offset.Rotate(ref RangeCircleEndRotations[i])));
if (contrastWidth > 0) if (contrastWidth > 0)
wcr.DrawLine(a, b, contrastWidth / wr.Viewport.Zoom, contrastColor); cr.DrawLine(a, b, contrastWidth, contrastColor);
if (width > 0) if (width > 0)
wcr.DrawLine(a, b, width / wr.Viewport.Zoom, color); cr.DrawLine(a, b, width, color);
} }
} }

View File

@@ -51,14 +51,14 @@ namespace OpenRA.Mods.Common.Graphics
public IRenderable OffsetBy(WVec vec) { return new SelectionBarsRenderable(pos + vec, actor, decorationBounds); } public IRenderable OffsetBy(WVec vec) { return new SelectionBarsRenderable(pos + vec, actor, decorationBounds); }
public IRenderable AsDecoration() { return this; } public IRenderable AsDecoration() { return this; }
void DrawExtraBars(WorldRenderer wr, float3 start, float3 end) void DrawExtraBars(WorldRenderer wr, float2 start, float2 end)
{ {
foreach (var extraBar in actor.TraitsImplementing<ISelectionBar>()) foreach (var extraBar in actor.TraitsImplementing<ISelectionBar>())
{ {
var value = extraBar.GetValue(); var value = extraBar.GetValue();
if (value != 0 || extraBar.DisplayWhenEmpty) if (value != 0 || extraBar.DisplayWhenEmpty)
{ {
var offset = new float3(0, (int)(4 / wr.Viewport.Zoom), 0); var offset = new float2(0, 4);
start += offset; start += offset;
end += offset; end += offset;
DrawSelectionBar(wr, start, end, extraBar.GetValue(), extraBar.GetColor()); DrawSelectionBar(wr, start, end, extraBar.GetValue(), extraBar.GetColor());
@@ -66,48 +66,46 @@ namespace OpenRA.Mods.Common.Graphics
} }
} }
void DrawSelectionBar(WorldRenderer wr, float3 start, float3 end, float value, Color barColor) void DrawSelectionBar(WorldRenderer wr, float2 start, float2 end, float value, Color barColor)
{ {
var iz = 1 / wr.Viewport.Zoom;
var c = Color.FromArgb(128, 30, 30, 30); var c = Color.FromArgb(128, 30, 30, 30);
var c2 = Color.FromArgb(128, 10, 10, 10); var c2 = Color.FromArgb(128, 10, 10, 10);
var p = new float2(0, -4 * iz); var p = new float2(0, -4);
var q = new float2(0, -3 * iz); var q = new float2(0, -3);
var r = new float2(0, -2 * iz); var r = new float2(0, -2);
var barColor2 = Color.FromArgb(255, barColor.R / 2, barColor.G / 2, barColor.B / 2); var barColor2 = Color.FromArgb(255, barColor.R / 2, barColor.G / 2, barColor.B / 2);
var z = float3.Lerp(start, end, value); var z = float3.Lerp(start, end, value);
var wcr = Game.Renderer.WorldRgbaColorRenderer; var cr = Game.Renderer.RgbaColorRenderer;
wcr.DrawLine(start + p, end + p, iz, c); cr.DrawLine(start + p, end + p, 1, c);
wcr.DrawLine(start + q, end + q, iz, c2); cr.DrawLine(start + q, end + q, 1, c2);
wcr.DrawLine(start + r, end + r, iz, c); cr.DrawLine(start + r, end + r, 1, c);
wcr.DrawLine(start + p, z + p, iz, barColor2); cr.DrawLine(start + p, z + p, 1, barColor2);
wcr.DrawLine(start + q, z + q, iz, barColor); cr.DrawLine(start + q, z + q, 1, barColor);
wcr.DrawLine(start + r, z + r, iz, barColor2); cr.DrawLine(start + r, z + r, 1, barColor2);
} }
Color GetHealthColor(IHealth health) Color GetHealthColor(IHealth health)
{ {
if (Game.Settings.Game.UsePlayerStanceColors) if (Game.Settings.Game.UsePlayerStanceColors)
return actor.Owner.PlayerStanceColor(actor); return actor.Owner.PlayerStanceColor(actor);
else
return health.DamageState == DamageState.Critical ? Color.Red : return health.DamageState == DamageState.Critical ? Color.Red :
health.DamageState == DamageState.Heavy ? Color.Yellow : Color.LimeGreen; health.DamageState == DamageState.Heavy ? Color.Yellow : Color.LimeGreen;
} }
void DrawHealthBar(WorldRenderer wr, IHealth health, float3 start, float3 end) void DrawHealthBar(WorldRenderer wr, IHealth health, float2 start, float2 end)
{ {
if (health == null || health.IsDead) if (health == null || health.IsDead)
return; return;
var c = Color.FromArgb(128, 30, 30, 30); var c = Color.FromArgb(128, 30, 30, 30);
var c2 = Color.FromArgb(128, 10, 10, 10); var c2 = Color.FromArgb(128, 10, 10, 10);
var iz = 1 / wr.Viewport.Zoom; var p = new float2(0, -4);
var p = new float2(0, -4 * iz); var q = new float2(0, -3);
var q = new float2(0, -3 * iz); var r = new float2(0, -2);
var r = new float2(0, -2 * iz);
var healthColor = GetHealthColor(health); var healthColor = GetHealthColor(health);
var healthColor2 = Color.FromArgb( var healthColor2 = Color.FromArgb(
@@ -118,14 +116,14 @@ namespace OpenRA.Mods.Common.Graphics
var z = float3.Lerp(start, end, (float)health.HP / health.MaxHP); var z = float3.Lerp(start, end, (float)health.HP / health.MaxHP);
var wcr = Game.Renderer.WorldRgbaColorRenderer; var cr = Game.Renderer.RgbaColorRenderer;
wcr.DrawLine(start + p, end + p, iz, c); cr.DrawLine(start + p, end + p, 1, c);
wcr.DrawLine(start + q, end + q, iz, c2); cr.DrawLine(start + q, end + q, 1, c2);
wcr.DrawLine(start + r, end + r, iz, c); cr.DrawLine(start + r, end + r, 1, c);
wcr.DrawLine(start + p, z + p, iz, healthColor2); cr.DrawLine(start + p, z + p, 1, healthColor2);
wcr.DrawLine(start + q, z + q, iz, healthColor); cr.DrawLine(start + q, z + q, 1, healthColor);
wcr.DrawLine(start + r, z + r, iz, healthColor2); cr.DrawLine(start + r, z + r, 1, healthColor2);
if (health.DisplayHP != health.HP) if (health.DisplayHP != health.HP)
{ {
@@ -137,9 +135,9 @@ namespace OpenRA.Mods.Common.Graphics
deltaColor.B / 2); deltaColor.B / 2);
var zz = float3.Lerp(start, end, (float)health.DisplayHP / health.MaxHP); var zz = float3.Lerp(start, end, (float)health.DisplayHP / health.MaxHP);
wcr.DrawLine(z + p, zz + p, iz, deltaColor2); cr.DrawLine(z + p, zz + p, 1, deltaColor2);
wcr.DrawLine(z + q, zz + q, iz, deltaColor); cr.DrawLine(z + q, zz + q, 1, deltaColor);
wcr.DrawLine(z + r, zz + r, iz, deltaColor2); cr.DrawLine(z + r, zz + r, 1, deltaColor2);
} }
} }
@@ -150,10 +148,8 @@ namespace OpenRA.Mods.Common.Graphics
return; return;
var health = actor.TraitOrDefault<IHealth>(); var health = actor.TraitOrDefault<IHealth>();
var start = wr.Viewport.WorldToViewPx(new float2(decorationBounds.Left + 1, decorationBounds.Top));
var screenPos = wr.Screen3DPxPosition(pos); var end = wr.Viewport.WorldToViewPx(new float2(decorationBounds.Right - 1, decorationBounds.Top));
var start = new float3(decorationBounds.Left + 1, decorationBounds.Top, screenPos.Z);
var end = new float3(decorationBounds.Right - 1, decorationBounds.Top, screenPos.Z);
if (DisplayHealth) if (DisplayHealth)
DrawHealthBar(wr, health, start, end); DrawHealthBar(wr, health, start, end);

View File

@@ -44,20 +44,18 @@ namespace OpenRA.Mods.Common.Graphics
public IFinalizedRenderable PrepareRender(WorldRenderer wr) { return this; } public IFinalizedRenderable PrepareRender(WorldRenderer wr) { return this; }
public void Render(WorldRenderer wr) public void Render(WorldRenderer wr)
{ {
var iz = 1 / wr.Viewport.Zoom; var tl = wr.Viewport.WorldToViewPx(new float2(decorationBounds.Left, decorationBounds.Top)).ToFloat2();
var screenDepth = wr.Screen3DPxPosition(pos).Z; var br = wr.Viewport.WorldToViewPx(new float2(decorationBounds.Right, decorationBounds.Bottom)).ToFloat2();
var tl = new float3(decorationBounds.Left, decorationBounds.Top, screenDepth); var tr = new float2(br.X, tl.Y);
var br = new float3(decorationBounds.Right, decorationBounds.Bottom, screenDepth); var bl = new float2(tl.X, br.Y);
var tr = new float3(br.X, tl.Y, screenDepth); var u = new float2(4, 0);
var bl = new float3(tl.X, br.Y, screenDepth); var v = new float2(0, 4);
var u = new float2(4 * iz, 0);
var v = new float2(0, 4 * iz);
var wcr = Game.Renderer.WorldRgbaColorRenderer; var cr = Game.Renderer.RgbaColorRenderer;
wcr.DrawLine(new[] { tl + u, tl, tl + v }, iz, color, true); cr.DrawLine(new float3[] { tl + u, tl, tl + v }, 1, color, true);
wcr.DrawLine(new[] { tr - u, tr, tr + v }, iz, color, true); cr.DrawLine(new float3[] { tr - u, tr, tr + v }, 1, color, true);
wcr.DrawLine(new[] { br - u, br, br - v }, iz, color, true); cr.DrawLine(new float3[] { br - u, br, br - v }, 1, color, true);
wcr.DrawLine(new[] { bl + u, bl, bl - v }, iz, color, true); cr.DrawLine(new float3[] { bl + u, bl, bl - v }, 1, color, true);
} }
public void RenderDebugGeometry(WorldRenderer wr) { } public void RenderDebugGeometry(WorldRenderer wr) { }

View File

@@ -56,16 +56,15 @@ namespace OpenRA.Mods.Common.Graphics
public IFinalizedRenderable PrepareRender(WorldRenderer wr) { return this; } public IFinalizedRenderable PrepareRender(WorldRenderer wr) { return this; }
public void Render(WorldRenderer wr) public void Render(WorldRenderer wr)
{ {
var screenPos = wr.Viewport.Zoom * (wr.ScreenPosition(pos) - wr.Viewport.TopLeft.ToFloat2()) - 0.5f * font.Measure(text).ToFloat2(); var screenPos = wr.Viewport.WorldToViewPx(wr.ScreenPosition(pos)) - 0.5f * font.Measure(text).ToFloat2();
var screenPxPos = new float2((float)Math.Round(screenPos.X), (float)Math.Round(screenPos.Y)); font.DrawTextWithContrast(text, screenPos, color, bgDark, bgLight, 1);
font.DrawTextWithContrast(text, screenPxPos, color, bgDark, bgLight, 1);
} }
public void RenderDebugGeometry(WorldRenderer wr) public void RenderDebugGeometry(WorldRenderer wr)
{ {
var size = font.Measure(text).ToFloat2(); var size = font.Measure(text).ToFloat2();
var offset = wr.Screen3DPxPosition(pos) - 0.5f * size; var screenPos = wr.Viewport.WorldToViewPx(wr.ScreenPosition(pos));
Game.Renderer.WorldRgbaColorRenderer.DrawRect(offset, offset + size, 1 / wr.Viewport.Zoom, Color.Red); Game.Renderer.RgbaColorRenderer.DrawRect(screenPos - 0.5f * size, screenPos + 0.5f * size, 1, Color.Red);
} }
public Rectangle ScreenBounds(WorldRenderer wr) { return Rectangle.Empty; } public Rectangle ScreenBounds(WorldRenderer wr) { return Rectangle.Empty; }

View File

@@ -59,11 +59,11 @@ namespace OpenRA.Mods.Common.Widgets
var modifiers = Game.GetModifierKeys(); var modifiers = Game.GetModifierKeys();
if (IsValidDragbox) if (IsValidDragbox)
{ {
var a = worldRenderer.Viewport.WorldToViewPx(dragStart);
var b = worldRenderer.Viewport.WorldToViewPx(mousePos);
Game.Renderer.RgbaColorRenderer.DrawRect(a, b, 1, Color.White);
// Render actors in the dragbox // Render actors in the dragbox
var a = new float3(dragStart.X, dragStart.Y, dragStart.Y);
var b = new float3(mousePos.X, mousePos.Y, mousePos.Y);
Game.Renderer.WorldRgbaColorRenderer.DrawRect(a, b,
1 / worldRenderer.Viewport.Zoom, Color.White);
foreach (var u in SelectActorsInBoxWithDeadzone(World, dragStart, mousePos, modifiers)) foreach (var u in SelectActorsInBoxWithDeadzone(World, dragStart, mousePos, modifiers))
DrawRollover(u); DrawRollover(u);
} }