Esempio n. 1
0
        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;
        }
Esempio n. 2
0
        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++;
                }
            }
        }