ore spreading ported

This commit is contained in:
Chris Forbes
2010-03-03 21:07:03 +13:00
parent 5d7772ac9a
commit 6c229f3273
3 changed files with 28 additions and 47 deletions

View File

@@ -26,43 +26,6 @@ namespace OpenRA
{
public static class Ore
{
public static void SpreadOre(this World world, Random r, float chance)
{
var map = world.Map;
var mini = map.XOffset; var maxi = map.XOffset + map.Width;
var minj = map.YOffset; var maxj = map.YOffset + map.Height;
/* phase 1: grow into neighboring regions */
var newOverlay = new byte[128, 128];
for (int j = minj; j < maxj; j++)
for (int i = mini; i < maxi; i++)
{
newOverlay[i, j] = 0xff;
if (!map.HasOverlay(i, j)
&& r.NextDouble() < chance
&& map.GetOreDensity(i, j) > 0
&& world.IsCellBuildable(new int2(i,j), UnitMovementType.Wheel))
newOverlay[i, j] = ChooseOre();
}
for (int j = minj; j < maxj; j++)
for (int i = mini; i < maxi; i++)
if (newOverlay[i, j] != 0xff)
map.MapTiles[i, j].overlay = newOverlay[i, j];
}
static byte GetOreDensity(this Map map, int i, int j)
{
int sum = 0;
for (var u = -1; u < 2; u++)
for (var v = -1; v < 2; v++)
if (map.ContainsOre(i + u, j + v))
++sum;
sum = (sum * 4 + 2) / 3;
return (byte)sum;
}
static bool HasOverlay(this Map map, int i, int j)
{
return map.MapTiles[i, j].overlay < overlayIsOre.Length;
@@ -83,13 +46,6 @@ namespace OpenRA
return map.ContainsGem(p.X, p.Y) || map.ContainsOre(p.X, p.Y);
}
static byte ore = 5;
static byte ChooseOre()
{
if (++ore > 8) ore = 5;
return ore;
}
static bool[] overlayIsOre =
{
false, false, false, false, false,