void MarkInsideJunction(DominoController domino) { int row = domino.Row; int column = domino.Column; if ( ((domino.GetWaterExitSquareID(0) == -1) || (domino.GetWaterExitSquareID(1) == -1) || (domino.GetWaterExitSquareID(2) == -1)) && (domino.GetWaterExitSquareID(0) == 1) || (domino.GetWaterExitSquareID(1) == 1) || (domino.GetWaterExitSquareID(2) == 1)) { if (domino.IsHorizontal()) { MarkSquareExit(row, column - 1, CardinalPoint.E); MarkSquareExit(row, column, CardinalPoint.W); MarkSquareExit(row, column, CardinalPoint.E); MarkSquareExit(row, column + 1,CardinalPoint.W); } else { MarkSquareExit(row - 1, column,CardinalPoint.N); MarkSquareExit(row, column, CardinalPoint.N); MarkSquareExit(row, column, CardinalPoint.S); MarkSquareExit(row + 1, column,CardinalPoint.S); } } else if ((domino.GetWaterExitSquareID(0) == 0) || (domino.GetWaterExitSquareID(1) == 0) || (domino.GetWaterExitSquareID(2) == 0)) { if ((domino.GetWaterExitSquareID(0) == -1) || (domino.GetWaterExitSquareID(1) == -1) || (domino.GetWaterExitSquareID(2) == -1)) { switch (domino.RotationState) { case 0: MarkSquareExit(row, column - 1, CardinalPoint.E); MarkSquareExit(row, column, CardinalPoint.W); break; case 1: MarkSquareExit(row - 1, column, CardinalPoint.N); MarkSquareExit(row, column, CardinalPoint.S); break; case 2: MarkSquareExit(row, column + 1, CardinalPoint.W); MarkSquareExit(row, column, CardinalPoint.E); break; case 3: MarkSquareExit(row + 1, column, CardinalPoint.S); MarkSquareExit(row, column, CardinalPoint.N); break; } } else if ((domino.GetWaterExitSquareID(0) == 1) || (domino.GetWaterExitSquareID(1) == 1) || (domino.GetWaterExitSquareID(2) == 1)) { switch (domino.RotationState) { case 0: MarkSquareExit(row, column + 1, CardinalPoint.W); MarkSquareExit(row, column, CardinalPoint.E); break; case 1: MarkSquareExit(row + 1, column, CardinalPoint.S); MarkSquareExit(row, column, CardinalPoint.N); break; case 2: MarkSquareExit(row, column - 1, CardinalPoint.E); MarkSquareExit(row, column, CardinalPoint.W); break; case 3: MarkSquareExit(row - 1, column, CardinalPoint.N); MarkSquareExit(row, column, CardinalPoint.S); break; } } } }
private void MarkDominoExits(DominoController domino) { int rotationStateRelativeCoordinatesIndex; int cardinalPoint; int relativeRow = 0; int relativeColumn = 0; for (int i = 0; i < 3; i++) { cardinalPoint = ((int)domino.GetWaterExitCardinalPoint(i) + domino.RotationState) % 4; switch (domino.GetWaterExitSquareID(i)) { case -1: rotationStateRelativeCoordinatesIndex = domino.RotationState; relativeRow = kRotationStateRelativeCoordinates[rotationStateRelativeCoordinatesIndex, 0]; relativeColumn = kRotationStateRelativeCoordinates[rotationStateRelativeCoordinatesIndex, 1]; break; case 0: relativeRow = 0; relativeColumn = 0; break; case 1: rotationStateRelativeCoordinatesIndex = (2 + domino.RotationState) % 4; relativeRow = kRotationStateRelativeCoordinates[rotationStateRelativeCoordinatesIndex, 0]; relativeColumn = kRotationStateRelativeCoordinates[rotationStateRelativeCoordinatesIndex, 1]; break; } MarkSquareExit(domino.Row + relativeRow, domino.Column + relativeColumn, (CardinalPoint)Enum.ToObject(typeof(CardinalPoint), cardinalPoint)); } MarkInsideJunction(domino); }