public void RotateFigure()
{
// Check colisions for next modification
Vector2[] TestDynamicFigure = new Vector2[DynamicFigure.GetUpperBound(0) + 1];
for (int i = 0; i < BlocksCountInFigure; i++)
TestDynamicFigure[i] = Figures[DynamicFigureNumber, (DynamicFigureModificationNumber + 1) % 4, i] +
PositionForDynamicFigure;
// Make sure that figure can rotate if she stand near left and right borders
SortingVector2(ref TestDynamicFigure, true, TestDynamicFigure.GetLowerBound(0),
TestDynamicFigure.GetUpperBound(0));
int leftFigureBound;
int rightFigureBound;
if ((leftFigureBound = (int)TestDynamicFigure[0].X) < 0)
{
//int leftFigureBound = (int)TestDynamicFigure[0].X;
for (int i = 0; i < BlocksCountInFigure; i++)
{
TestDynamicFigure[i] +=
new Vector2(0 - leftFigureBound, 0);
}
if (TryPlaceFigureOnBoard(TestDynamicFigure))
PositionForDynamicFigure +=
new Vector2(0 - leftFigureBound, 0);
}
if ((rightFigureBound = (int)TestDynamicFigure[BlocksCountInFigure - 1].X) >= width)
{
//int rightFigureBound = (int)TestDynamicFigure[BlocksCountInFigure - 1].X;
for (int i = 0; i < BlocksCountInFigure; i++)
{
TestDynamicFigure[i] -=
new Vector2(rightFigureBound - width + 1, 0);
}
if (TryPlaceFigureOnBoard(TestDynamicFigure))
PositionForDynamicFigure -=
new Vector2(rightFigureBound - width + 1, 0);
}
if (TryPlaceFigureOnBoard(TestDynamicFigure))
{
DynamicFigureModificationNumber = (DynamicFigureModificationNumber + 1) % 4;
// Clear dynamic fields
for (int i = 0; i <= DynamicFigure.GetUpperBound(0); i++)
ClearBoardField((int)DynamicFigure[i].X, (int)DynamicFigure[i].Y);
DynamicFigure = TestDynamicFigure;
for (int i = 0; i <= DynamicFigure.GetUpperBound(0); i++)
{
boardFields[(int)DynamicFigure[i].X, (int)DynamicFigure[i].Y] = FieldState.Dynamic;
BoardColor[(int)DynamicFigure[i].X, (int)DynamicFigure[i].Y] = DynamicFigureColor;
}
}
}