From 5c7e278b9323f6c801e466bb519c8b54bb89329b Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Fri, 23 Jul 2010 00:03:04 +1200 Subject: [PATCH] Draw viewport rect on radar --- OpenRA.Game/Graphics/Viewport.cs | 2 +- OpenRA.Game/Widgets/RadarBinWidget.cs | 28 +++++++++++++++++++-------- 2 files changed, 21 insertions(+), 9 deletions(-) diff --git a/OpenRA.Game/Graphics/Viewport.cs b/OpenRA.Game/Graphics/Viewport.cs index 90f8b1c46d..dd6e72b88f 100644 --- a/OpenRA.Game/Graphics/Viewport.cs +++ b/OpenRA.Game/Graphics/Viewport.cs @@ -107,7 +107,7 @@ namespace OpenRA.Graphics public float2 ViewToWorld(MouseInput mi) { - return (1 / 24.0f) * (new float2(mi.Location.X, mi.Location.Y) + Location); + return (1f / Game.CellSize) * (new float2(mi.Location.X, mi.Location.Y) + Location); } public void Center(int2 loc) diff --git a/OpenRA.Game/Widgets/RadarBinWidget.cs b/OpenRA.Game/Widgets/RadarBinWidget.cs index ac97689310..d47a79c8df 100644 --- a/OpenRA.Game/Widgets/RadarBinWidget.cs +++ b/OpenRA.Game/Widgets/RadarBinWidget.cs @@ -26,12 +26,8 @@ namespace OpenRA.Widgets int radarAnimationFrame = 0; bool radarAnimating = false; bool hasRadar = false; - - - string radarCollection; - World world; float previewScale = 0; RectangleF mapRect = Rectangle.Empty; @@ -46,9 +42,7 @@ namespace OpenRA.Widgets { this.world = world; var size = Math.Max(world.Map.Width, world.Map.Height); - previewScale = Math.Min(192f / world.Map.Width, 192f / world.Map.Height); - previewOrigin = new int2(9 + (int)(radarOpenOrigin.X + previewScale * (size - world.Map.Width)/2), (int)(radarOpenOrigin.Y + previewScale * (size - world.Map.Height)/2)); mapRect = new RectangleF(previewOrigin.X, previewOrigin.Y, (int)(world.Map.Width * previewScale), (int)(world.Map.Height * previewScale)); @@ -132,7 +126,6 @@ namespace OpenRA.Widgets Game.Renderer.RgbaSpriteRenderer.DrawSprite(ChromeProvider.GetImage(radarCollection, "right"), radarOrigin + new float2(201, 0), "chrome"); Game.Renderer.RgbaSpriteRenderer.DrawSprite(ChromeProvider.GetImage(radarCollection, "bottom"), radarOrigin + new float2(0, 192), "chrome"); Game.Renderer.RgbaSpriteRenderer.DrawSprite(ChromeProvider.GetImage(radarCollection, "bg"), radarOrigin + new float2(9, 0), "chrome"); - Game.Renderer.RgbaSpriteRenderer.Flush(); // Don't draw the radar if the tray is moving if (radarAnimationFrame >= radarSlideAnimationLength) @@ -143,8 +136,27 @@ namespace OpenRA.Widgets Game.Renderer.RgbaSpriteRenderer.DrawSprite(customTerrainSprite, o, "chrome", s); Game.Renderer.RgbaSpriteRenderer.DrawSprite(actorSprite, o, "chrome", s); Game.Renderer.RgbaSpriteRenderer.DrawSprite(shroudSprite, o, "chrome", s); - + + // Draw viewport rect + if (radarAnimationFrame == radarSlideAnimationLength + radarActivateAnimationLength) + { + var tl = CellToMinimapPixel(new int2((int)(Game.viewport.Location.X/Game.CellSize), (int)(Game.viewport.Location.Y/Game.CellSize))); + var br = CellToMinimapPixel(new int2((int)((Game.viewport.Location.X + Game.viewport.Width)/Game.CellSize), (int)((Game.viewport.Location.Y + Game.viewport.Height)/Game.CellSize))); + var tr = new int2(br.X, tl.Y); + var bl = new int2(tl.X, br.Y); + + Game.Renderer.RgbaSpriteRenderer.Flush(); + Game.Renderer.Device.EnableScissor((int)mapRect.Left, (int)mapRect.Top, (int)mapRect.Width, (int)mapRect.Height); + Game.Renderer.LineRenderer.DrawLine(Game.viewport.Location + tl, Game.viewport.Location + tr, Color.White, Color.White); + Game.Renderer.LineRenderer.DrawLine(Game.viewport.Location + tr, Game.viewport.Location + br, Color.White, Color.White); + Game.Renderer.LineRenderer.DrawLine(Game.viewport.Location + br, Game.viewport.Location + bl, Color.White, Color.White); + Game.Renderer.LineRenderer.DrawLine(Game.viewport.Location + bl, Game.viewport.Location + tl, Color.White, Color.White); + Game.Renderer.LineRenderer.Flush(); + Game.Renderer.Device.DisableScissor(); + } } + + } int updateTicks = 0;