fixed ore spreading; units no longer block

This commit is contained in:
Chris Forbes
2009-11-04 22:59:51 +13:00
parent 66fd532db8
commit 7e0b0541e2
3 changed files with 14 additions and 5 deletions

View File

@@ -165,7 +165,7 @@ namespace OpenRa.Game
if (--oreTicks == 0) if (--oreTicks == 0)
{ {
var oresw = new Stopwatch(); var oresw = new Stopwatch();
map.GrowOre(p => IsCellBuildable(p, UnitMovementType.Wheel), SharedRandom); map.GrowOre(SharedRandom);
OreTime = oresw.ElapsedTime(); OreTime = oresw.ElapsedTime();
oreTicks = oreFrequency; oreTicks = oreFrequency;
} }

View File

@@ -99,7 +99,7 @@ namespace OpenRa.Game.Graphics
lineRenderer.Flush(); lineRenderer.Flush();
renderer.DrawText(string.Format("RenderFrame {0} ({2:F1} ms) Tick {1} ({3:F1} ms) Ore ({4:F1} ms)", renderer.DrawText(string.Format("RenderFrame {0} ({2:F1} ms)\nTick {1} ({3:F1} ms)\nOre ({4:F1} ms)",
Game.RenderFrame, Game.orderManager.FrameNumber, Game.RenderFrame, Game.orderManager.FrameNumber,
Game.RenderTime * 1000, Game.RenderTime * 1000,
Game.TickTime * 1000, Game.TickTime * 1000,

View File

@@ -10,8 +10,17 @@ namespace OpenRa.Game
{ {
/* todo: deal with ore pits */ /* todo: deal with ore pits */
public static void GrowOre(this Map map, static bool CanSpreadInto(int i, int j)
Func<int2, bool> canSpreadIntoCell, Random r) {
if (Game.BuildingInfluence.GetBuildingAt(new int2(i, j)) != null)
return false;
return TerrainCosts.Cost(UnitMovementType.Wheel,
Game.worldRenderer.terrainRenderer.tileSet.GetWalkability(Game.map.MapTiles[i, j]))
< double.PositiveInfinity;
}
public static void GrowOre(this Map map, Random r)
{ {
var mini = map.XOffset; var maxi = map.XOffset + map.Width; var mini = map.XOffset; var maxi = map.XOffset + map.Width;
var minj = map.YOffset; var maxj = map.YOffset + map.Height; var minj = map.YOffset; var maxj = map.YOffset + map.Height;
@@ -28,7 +37,7 @@ namespace OpenRa.Game
if (!map.HasOverlay(i, j) if (!map.HasOverlay(i, j)
&& r.NextDouble() < chance && r.NextDouble() < chance
&& map.GetOreDensity(i, j) > 0 && map.GetOreDensity(i, j) > 0
&& canSpreadIntoCell(new int2(i, j))) && CanSpreadInto(i,j))
newOverlay[i, j] = ChooseOre(); newOverlay[i, j] = ChooseOre();
} }