MOAR PERF
This commit is contained in:
@@ -150,32 +150,44 @@ namespace OpenRa.FileFormats
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
byte ore = 5;
|
||||||
|
byte ChooseOre()
|
||||||
|
{
|
||||||
|
if (++ore > 8) ore = 5;
|
||||||
|
return ore;
|
||||||
|
}
|
||||||
|
|
||||||
public void GrowOre( Func<int2, bool> canSpreadIntoCell, Random r ) /* todo: deal with ore pits */
|
public void GrowOre( Func<int2, bool> canSpreadIntoCell, Random r ) /* todo: deal with ore pits */
|
||||||
{
|
{
|
||||||
/* phase 1: grow into neighboring regions */
|
/* phase 1: grow into neighboring regions */
|
||||||
var newOverlay = new byte[128, 128];
|
var newOverlay = new byte[128, 128];
|
||||||
for( int j = 1; j < 127; j++ )
|
var mini = this.XOffset;
|
||||||
for (int i = 1; i < 127; i++)
|
var minj = this.YOffset;
|
||||||
|
var maxi = this.XOffset + Width;
|
||||||
|
var maxj = this.YOffset + Height;
|
||||||
|
|
||||||
|
for (int j = minj; j < maxj; j++)
|
||||||
|
for (int i = mini; i < maxi; i++)
|
||||||
{
|
{
|
||||||
newOverlay[i,j] = 0xff;
|
newOverlay[i,j] = 0xff;
|
||||||
if (!HasOverlay(i, j) && GetOreDensity(i, j) > 0 && canSpreadIntoCell(new int2(i,j))
|
if (!HasOverlay(i, j) && r.NextDouble() < oreRate && GetOreDensity(i, j) > 0 && canSpreadIntoCell(new int2(i, j))
|
||||||
&& r.NextDouble() < oreRate )
|
)
|
||||||
newOverlay[i, j] = (byte)r.Next(5,9);
|
newOverlay[i, j] = ChooseOre(); //(byte)r.Next(5, 9);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int j = 1; j < 127; j++)
|
for (int j = minj; j < maxj; j++)
|
||||||
for (int i = 1; i < 127; i++)
|
for (int i = mini; i < maxi; i++)
|
||||||
if (newOverlay[i, j] != 0xff)
|
if (newOverlay[i, j] != 0xff)
|
||||||
MapTiles[i, j].overlay = newOverlay[i, j];
|
MapTiles[i, j].overlay = newOverlay[i, j];
|
||||||
|
|
||||||
/* phase 2: increase density of existing areas */
|
/* phase 2: increase density of existing areas */
|
||||||
var newDensity = new byte[128, 128];
|
var newDensity = new byte[128, 128];
|
||||||
for (int j = 1; j < 127; j++)
|
for (int j = minj; j < maxj; j++)
|
||||||
for (int i = 1; i < 127; i++)
|
for (int i = mini; i < maxi; i++)
|
||||||
if (ContainsOre(i, j)) newDensity[i,j] = GetOreDensity(i, j);
|
if (ContainsOre(i, j)) newDensity[i,j] = GetOreDensity(i, j);
|
||||||
|
|
||||||
for (int j = 1; j < 127; j++)
|
for (int j = minj; j < maxj; j++)
|
||||||
for (int i = 1; i < 127; i++)
|
for (int i = mini; i < maxi; i++)
|
||||||
if (MapTiles[i, j].density < newDensity[i, j])
|
if (MapTiles[i, j].density < newDensity[i, j])
|
||||||
++MapTiles[i, j].density;
|
++MapTiles[i, j].density;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user