private void SetNextTetrimino() { if (nextTetrimino == null) nextTetrimino = CreateTetrimino(-1); tetrimino = nextTetrimino; tetrimino.Position = tetriminoStartPosition; controller.Tetrimino = tetrimino; tetrimino.Update(); if (CheckBlockCollision(tetrimino.Blocks)) { state = State.Dead; foreach (Block block in blocks) { VanishBlock vanishBlock = new VanishBlock(this, block.Model); vanishBlock.Position = block.Position; vanishBlocks.Add(vanishBlock); } } nextTetrimino = CreateTetrimino(-1); nextTetrimino.Position = nextTetriminoPosition; }
private void CheckLine() { Vector3 linePosition = new Vector3(-0.6f, floorPosition.Y, 0); Vector3 lineDirection = new Vector3(1, 0, 0); Ray line = new Ray(linePosition, lineDirection); Vector3[] vanishPositions = new Vector3[4]; int vanishPositionNum = 0; for (int i = 0; i < 20; i++) { line.Position.Y += blockSize; int intersectsNum = 0; Block[] lineBlocks = new Block[10]; foreach (Block block in blocks) { bool isIntersects = (null != block.Bounding.Intersects(line)); if (isIntersects) { lineBlocks[intersectsNum] = block; intersectsNum++; } if (intersectsNum == 10) { vanishPositions[vanishPositionNum] = line.Position; vanishPositionNum++; foreach (Block lineBlock in lineBlocks) { VanishBlock vanishBlock = new VanishBlock(this, lineBlock.Model); vanishBlock.Position = lineBlock.Position; blocks.Remove(lineBlock); vanishBlocks.Add(vanishBlock); } state = State.Vanish; break; } } } int index; vanishDownY = new float[blocks.Count]; for (int i = 0; i < vanishPositionNum; i++) { float y = vanishPositions[i].Y; index = 0; foreach (Block block in blocks) { if (block.Position.Y > y) { vanishDownY[index] += blockSize; } index++; } } }