From 5927e1080a9c6a1d5346b34917c7ac25a90f8d31 Mon Sep 17 00:00:00 2001 From: penev92 Date: Sat, 14 Mar 2015 00:23:14 +0200 Subject: [PATCH] Add ChooseClosestEdgeCell() method to the Map class --- OpenRA.Game/Map/Map.cs | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/OpenRA.Game/Map/Map.cs b/OpenRA.Game/Map/Map.cs index 54586196eb..fc479373e5 100644 --- a/OpenRA.Game/Map/Map.cs +++ b/OpenRA.Game/Map/Map.cs @@ -804,6 +804,19 @@ namespace OpenRA return new MPos(x, y).ToCPos(this); } + public CPos ChooseClosestEdgeCell(CPos pos) + { + var mpos = pos.ToMPos(this); + + var horizontalBound = ((mpos.U - Bounds.Left) < Bounds.Width / 2) ? Bounds.Left : Bounds.Right; + var verticalBound = ((mpos.V - Bounds.Top) < Bounds.Height / 2) ? Bounds.Top : Bounds.Bottom; + + var distX = Math.Abs(horizontalBound - mpos.U); + var distY = Math.Abs(verticalBound - mpos.V); + + return distX < distY ? new MPos(horizontalBound, mpos.V).ToCPos(this) : new MPos(mpos.U, verticalBound).ToCPos(this); + } + public CPos ChooseRandomEdgeCell(MersenneTwister rand) { var isX = rand.Next(2) == 0;