Kill ITerrainTypeModifier for explicit updating of a custom layer in the map. Functionally equivalent, but MUCH faster.
This commit is contained in:
@@ -88,24 +88,19 @@ namespace OpenRA.Graphics
|
||||
var bitmapData = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height),
|
||||
ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb);
|
||||
|
||||
var customTerrain = world.WorldActor.traits.WithInterface<ITerrainTypeModifier>();
|
||||
unsafe
|
||||
{
|
||||
int* c = (int*)bitmapData.Scan0;
|
||||
|
||||
|
||||
for (var x = 0; x < map.Width; x++)
|
||||
for (var y = 0; y < map.Height; y++)
|
||||
{
|
||||
var xy = new int2(x + map.TopLeft.X, y + map.TopLeft.Y);
|
||||
foreach (var t in customTerrain)
|
||||
{
|
||||
var tt = t.GetTerrainType(xy);
|
||||
if (tt != null)
|
||||
{
|
||||
*(c + (y * bitmapData.Stride >> 2) + x) = world.TileSet.Terrain[tt].Color.ToArgb();
|
||||
break;
|
||||
}
|
||||
}
|
||||
var mapX = x + map.TopLeft.X;
|
||||
var mapY = y + map.TopLeft.Y;
|
||||
var custom = map.CustomTerrain[mapX,mapY];
|
||||
if (custom == null)
|
||||
continue;
|
||||
*(c + (y * bitmapData.Stride >> 2) + x) = world.TileSet.Terrain[custom].Color.ToArgb();
|
||||
}
|
||||
}
|
||||
bitmap.UnlockBits(bitmapData);
|
||||
|
||||
Reference in New Issue
Block a user