public int[] GetPosition(Placement placement, int border = -1)
{
if (this.PlaceIndex == -1)
throw new PuzzleException("Place hasn't been declared anything or it wasn't reserved.");
// todo: check those values
var radius = 0;
if (border >= 0)
{
radius = (_room.RoomType == RoomType.Alley ? 200 - border : 800 - border);
if (radius < 0)
radius = 0;
}
else
radius = (_room.RoomType == RoomType.Alley ? 200 : 800);
if (!_placementProviders.ContainsKey(placement))
_placementProviders[placement] = new PlacementProvider(placement, radius);
var pos = _placementProviders[placement].GetPosition();
if (pos == null)
{
if (!_placementProviders.ContainsKey(Placement.Random))
_placementProviders[Placement.Random] = new PlacementProvider(Placement.Random, radius);
pos = _placementProviders[Placement.Random].GetPosition();
}
pos[0] += this.X;
pos[1] += this.Y;
return pos;
}