Minimap refactoring; don't render the minimap unless we have radar.
This commit is contained in:
@@ -131,8 +131,6 @@ namespace OpenRA.Graphics
|
|||||||
var shroud = Color.Black.ToArgb();
|
var shroud = Color.Black.ToArgb();
|
||||||
var fogOpacity = 0.5f;
|
var fogOpacity = 0.5f;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
unsafe
|
unsafe
|
||||||
{
|
{
|
||||||
int* c = (int*)bitmapData.Scan0;
|
int* c = (int*)bitmapData.Scan0;
|
||||||
|
|||||||
@@ -45,8 +45,8 @@ namespace OpenRA.Widgets
|
|||||||
|
|
||||||
previewScale = Math.Min(192f / world.Map.Width, 192f / world.Map.Height);
|
previewScale = Math.Min(192f / world.Map.Width, 192f / world.Map.Height);
|
||||||
|
|
||||||
previewOrigin = new int2(9 + (int)(previewScale * (size - world.Map.Width)) / 2, (int)(previewScale * (size - world.Map.Height)) / 2);
|
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(radarOrigin.X + previewOrigin.X, radarOrigin.Y + previewOrigin.Y, (int)(world.Map.Width * previewScale), (int)(world.Map.Height * previewScale));
|
mapRect = new RectangleF(previewOrigin.X, previewOrigin.Y, (int)(world.Map.Width * previewScale), (int)(world.Map.Height * previewScale));
|
||||||
|
|
||||||
terrainBitmap = Minimap.RenderTerrainBitmap(world.Map);
|
terrainBitmap = Minimap.RenderTerrainBitmap(world.Map);
|
||||||
radarSheet = new Sheet(new Size( terrainBitmap.Width, terrainBitmap.Height ) );
|
radarSheet = new Sheet(new Size( terrainBitmap.Width, terrainBitmap.Height ) );
|
||||||
@@ -115,40 +115,41 @@ namespace OpenRA.Widgets
|
|||||||
{
|
{
|
||||||
radarCollection = "radar-" + world.LocalPlayer.Country.Race;
|
radarCollection = "radar-" + world.LocalPlayer.Country.Race;
|
||||||
|
|
||||||
var hasNewRadar = world.Queries.OwnedBy[world.LocalPlayer]
|
|
||||||
.WithTrait<ProvidesRadar>()
|
|
||||||
.Any(a => a.Trait.IsActive);
|
|
||||||
|
|
||||||
if (hasNewRadar != hasRadar)
|
|
||||||
radarAnimating = true;
|
|
||||||
|
|
||||||
hasRadar = hasNewRadar;
|
|
||||||
|
|
||||||
Game.Renderer.RgbaSpriteRenderer.DrawSprite(ChromeProvider.GetImage(radarCollection, "left"), radarOrigin, "chrome");
|
Game.Renderer.RgbaSpriteRenderer.DrawSprite(ChromeProvider.GetImage(radarCollection, "left"), radarOrigin, "chrome");
|
||||||
Game.Renderer.RgbaSpriteRenderer.DrawSprite(ChromeProvider.GetImage(radarCollection, "right"), radarOrigin + new float2(201, 0), "chrome");
|
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, "bottom"), radarOrigin + new float2(0, 192), "chrome");
|
||||||
Game.Renderer.RgbaSpriteRenderer.DrawSprite(ChromeProvider.GetImage(radarCollection, "bg"), radarOrigin + new float2(9, 0), "chrome");
|
Game.Renderer.RgbaSpriteRenderer.DrawSprite(ChromeProvider.GetImage(radarCollection, "bg"), radarOrigin + new float2(9, 0), "chrome");
|
||||||
Game.Renderer.RgbaSpriteRenderer.Flush();
|
Game.Renderer.RgbaSpriteRenderer.Flush();
|
||||||
|
|
||||||
// Custom terrain layer
|
// Don't draw the radar if the tray is moving
|
||||||
|
if (radarAnimationFrame >= radarSlideAnimationLength)
|
||||||
|
{
|
||||||
|
// Build the radar image
|
||||||
var custom = Minimap.AddCustomTerrain(world,terrainBitmap);
|
var custom = Minimap.AddCustomTerrain(world,terrainBitmap);
|
||||||
var final = Minimap.AddActors(world, custom);
|
var final = Minimap.AddActors(world, custom);
|
||||||
radarSheet.Texture.SetData(final);
|
radarSheet.Texture.SetData(final);
|
||||||
|
|
||||||
if (radarAnimationFrame >= radarSlideAnimationLength)
|
|
||||||
{
|
|
||||||
Game.Renderer.RgbaSpriteRenderer.DrawSprite( radarSprite,
|
Game.Renderer.RgbaSpriteRenderer.DrawSprite( radarSprite,
|
||||||
new float2(mapRect.Location), "chrome", new float2(mapRect.Size) );
|
new float2(mapRect.Location.X, mapRect.Location.Y + world.Map.Height * previewScale * (1 - radarMinimapHeight)/2),
|
||||||
|
"chrome",
|
||||||
|
new float2(mapRect.Size.Width, mapRect.Size.Height*radarMinimapHeight) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void Tick(World w)
|
public override void Tick(World w)
|
||||||
{
|
{
|
||||||
if (world == null)
|
var hasRadarNew = world.Queries.OwnedBy[world.LocalPlayer]
|
||||||
|
.WithTrait<ProvidesRadar>()
|
||||||
|
.Any(a => a.Trait.IsActive);
|
||||||
|
|
||||||
|
if (hasRadarNew != hasRadar)
|
||||||
|
radarAnimating = true;
|
||||||
|
|
||||||
|
hasRadar = hasRadarNew;
|
||||||
|
|
||||||
|
if (!radarAnimating)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (radarAnimating)
|
|
||||||
{
|
|
||||||
// Increment frame
|
// Increment frame
|
||||||
if (hasRadar)
|
if (hasRadar)
|
||||||
radarAnimationFrame++;
|
radarAnimationFrame++;
|
||||||
@@ -178,9 +179,6 @@ namespace OpenRA.Widgets
|
|||||||
radarAnimating = false;
|
radarAnimating = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
mapRect = new RectangleF(radarOrigin.X + previewOrigin.X, radarOrigin.Y + previewOrigin.Y + (int)(world.Map.Height * previewScale * (1 - radarMinimapHeight)/2), (int)(world.Map.Width * previewScale), (int)(world.Map.Height * previewScale * radarMinimapHeight));
|
|
||||||
}
|
|
||||||
|
|
||||||
int2 CellToMinimapPixel(int2 p)
|
int2 CellToMinimapPixel(int2 p)
|
||||||
{
|
{
|
||||||
return new int2((int)(mapRect.X +previewScale*(p.X - world.Map.TopLeft.X)), (int)(mapRect.Y + previewScale*(p.Y - world.Map.TopLeft.Y)));
|
return new int2((int)(mapRect.X +previewScale*(p.X - world.Map.TopLeft.X)), (int)(mapRect.Y + previewScale*(p.Y - world.Map.TopLeft.Y)));
|
||||||
|
|||||||
Reference in New Issue
Block a user