public IEnumerable<Position> AdjacentPositions(int width, int height)
{
if (Orientation == Orientation.Vertical)
{
if (Position.Row > 0)
yield return new Position(Position.Row - 1, Position.Column);
if (Position.Row + Size < height)
yield return new Position(Position.Row + 1, Position.Column);
for (var i = 0; i < Size; ++i)
{
if (Position.Column > 0)
yield return new Position(Position.Row, Position.Column - 1);
if (Position.Column + Size < width)
yield return new Position(Position.Row, Position.Column + 1);
}
}
else
{
if (Position.Column > 0)
yield return new Position(Position.Row, Position.Column - 1);
if (Position.Column + Size < width)
yield return new Position(Position.Row, Position.Column + 1);
for (var i = 0; i < Size; ++i)
{
if (Position.Row > 0)
yield return new Position(Position.Row - 1, Position.Column);
if (Position.Row + Size < height)
yield return new Position(Position.Row + 1, Position.Column);
}
}
}