private void handleGravityTick() { if (block != null) { if (grid.isCollision(block, 0, (float)Tetrimino.Size.Height)) { lockable = true; lockDelay += 1; } else { block.Y += (float)Tetrimino.Size.Height; } } }
public Tuple <int, int> canRotate(TetrisGrid grid, bool clockwise) { byte v; bool passing = true; int target; if (clockwise) { target = (Rotation + 1) % 4; } else { if (Rotation - 1 < 0) { target = 3; } else { target = Rotation - 1; } } BlockTester tester = new BlockTester(0, 0, (float)Tetrimino.Size.Width, (float)Tetrimino.Size.Height); foreach (Tuple <int, int> kick in TetriminoKicks[Util.rotation_id(target, clockwise)]) { passing = true; for (int i = 0; i < TetriminoLayout.GetLength(1); i++) { for (int j = 0; j < TetriminoLayout.GetLength(2); j++) { v = TetriminoLayout[target, i, j]; if (v == 0) { continue; } tester.X = i * ((float)Tetrimino.Size.Width) + (kick.Item1 * (float)Tetrimino.Size.Width) + this.x(); tester.Y = j * ((float)Tetrimino.Size.Height) + (kick.Item2 * (float)Tetrimino.Size.Height) + this.y(); if (grid.isCollision(tester)) { passing = false; break; } } if (passing == false) { break; } } if (passing == true) { return(kick); } } return(null); }