Use the correct (tile-based) radar color when updating the radar.

This commit is contained in:
Paul Chote
2015-04-21 00:08:19 +12:00
parent a48a878a71
commit acee680083

View File

@@ -82,8 +82,8 @@ namespace OpenRA.Mods.Common.Widgets
actorSprite = new Sprite(radarSheet, new Rectangle(0, height, width, height), TextureChannel.Alpha); actorSprite = new Sprite(radarSheet, new Rectangle(0, height, width, height), TextureChannel.Alpha);
// Set initial terrain data // Set initial terrain data
using (var bitmap = Minimap.TerrainBitmap(world.TileSet, world.Map)) foreach (var cell in world.Map.Cells)
OpenRA.Graphics.Util.FastCopyIntoSprite(terrainSprite, bitmap); UpdateTerrainCell(cell);
world.Map.MapTiles.Value.CellEntryChanged += UpdateTerrainCell; world.Map.MapTiles.Value.CellEntryChanged += UpdateTerrainCell;
world.Map.CustomTerrain.CellEntryChanged += UpdateTerrainCell; world.Map.CustomTerrain.CellEntryChanged += UpdateTerrainCell;
@@ -93,7 +93,16 @@ namespace OpenRA.Mods.Common.Widgets
{ {
var stride = radarSheet.Size.Width; var stride = radarSheet.Size.Width;
var uv = cell.ToMPos(world.Map); var uv = cell.ToMPos(world.Map);
var terrain = world.Map.GetTerrainInfo(cell);
var custom = world.Map.CustomTerrain[uv];
Color color;
if (custom == byte.MaxValue)
{
var type = world.TileSet.GetTileInfo(world.Map.MapTiles.Value[uv]);
color = type != null ? type.LeftColor : Color.Black;
}
else
color = world.TileSet[custom].Color;
var dx = terrainSprite.Bounds.Left - world.Map.Bounds.Left; var dx = terrainSprite.Bounds.Left - world.Map.Bounds.Left;
var dy = terrainSprite.Bounds.Top - world.Map.Bounds.Top; var dy = terrainSprite.Bounds.Top - world.Map.Bounds.Top;
@@ -103,7 +112,7 @@ namespace OpenRA.Mods.Common.Widgets
fixed (byte* colorBytes = &radarData[0]) fixed (byte* colorBytes = &radarData[0])
{ {
var colors = (int*)colorBytes; var colors = (int*)colorBytes;
colors[(uv.V + dy) * stride + uv.U + dx] = terrain.Color.ToArgb(); colors[(uv.V + dy) * stride + uv.U + dx] = color.ToArgb();
} }
} }
} }