From 318d6aaa73337539edf2b983fceadfad1e53ee9b Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Sun, 26 Jul 2015 19:32:13 +0100 Subject: [PATCH] Implement height-aware map.ChooseRandomEdgeCell(). --- OpenRA.Game/Map/Map.cs | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/OpenRA.Game/Map/Map.cs b/OpenRA.Game/Map/Map.cs index 1b1d942baf..4d3d339b0b 100644 --- a/OpenRA.Game/Map/Map.cs +++ b/OpenRA.Game/Map/Map.cs @@ -1027,14 +1027,18 @@ namespace OpenRA public CPos ChooseRandomEdgeCell(MersenneTwister rand) { - // TODO: Account for terrain height - var isX = rand.Next(2) == 0; - var edge = rand.Next(2) == 0; + MPos[] cells; + do + { + var isU = rand.Next(2) == 0; + var edge = rand.Next(2) == 0; + var u = isU ? rand.Next(Bounds.Left, Bounds.Right) : (edge ? Bounds.Left : Bounds.Right); + var v = !isU ? rand.Next(Bounds.Top, Bounds.Bottom) : (edge ? Bounds.Top : Bounds.Bottom); - var x = isX ? rand.Next(Bounds.Left, Bounds.Right) : (edge ? Bounds.Left : Bounds.Right); - var y = !isX ? rand.Next(Bounds.Top, Bounds.Bottom) : (edge ? Bounds.Top : Bounds.Bottom); + cells = Unproject(new PPos(u, v)); + } while (!cells.Any()); - return new MPos(x, y).ToCPos(this); + return cells.Random(rand).ToCPos(TileShape); } public WDist DistanceToEdge(WPos pos, WVec dir)