Esempio n. 1
0
        private bool TryMove(Tetromino t, Vec2 move, int rotate, bool allowKicks)
        {
            Vec2 newPos   = t.Pos + move;
            int  newAngle = (t.Angle + rotate) % 4;

            if (TestTetromino(t.Type, newPos, newAngle))
            {
                t.Pos   = newPos;
                t.Angle = newAngle;
                return(true);
            }

            if (allowKicks)
            {
                foreach (var tryKick in m_GameRules.GetAllowedKicks(m_Board, t, newAngle))
                {
                    newPos = t.Pos + move + new Vec2(tryKick, 0);

                    if (TestTetromino(t.Type, newPos, newAngle))
                    {
                        t.Pos   = newPos;
                        t.Angle = newAngle;
                        return(true);
                    }
                }
            }

            return(false);
        }
Esempio n. 2
0
 private void ApplyLock(Tetromino t, Movement movement)
 {
     if (movement == Movement.Down)
     {
         t.Locked = true;
     }
 }
Esempio n. 3
0
 private void ApplyGravity(Tetromino t)
 {
     while (TryMove(t, new Vec2(0, -1), 0, false))
     {
         ;
     }
 }
Esempio n. 4
0
        public ITetromino StepTetromino(ITetromino prevTetromino, Input input)
        {
            var t = new Tetromino(prevTetromino);

            ApplyRotate(t, input.Rotate, true);
            ApplyMove(t, input.Move);
            ApplyGravity(t);
            ApplyLock(t, input.Move);

            return(t);
        }
Esempio n. 5
0
        public ITetromino SpawnTetromino(TetrominoType tetrominoType, Input input)
        {
            var t = new Tetromino(tetrominoType, m_Board.GetSpawnPos(), 0, false);

            ApplyRotate(t, input.Rotate, false);

            if (!TestTetromino(t))
            {
                return(null);
            }

            ApplyGravity(t);

            return(t);
        }
Esempio n. 6
0
        private void ApplyMove(Tetromino t, Movement movement)
        {
            switch (movement)
            {
            case Movement.Left:
                TryMove(t, new Vec2(-1, 0), 0, false);
                return;

            case Movement.Right:
                TryMove(t, new Vec2(1, 0), 0, false);
                return;

            default:
                return;
            }
        }
Esempio n. 7
0
        private void ApplyRotate(Tetromino t, Rotation rotation, bool allowKicks)
        {
            switch (rotation)
            {
            case Rotation.A:
            case Rotation.C:
                TryMove(t, Vec2.Zero, 3, allowKicks);
                return;

            case Rotation.B:
                TryMove(t, Vec2.Zero, 1, allowKicks);
                return;

            default:
                return;
            }
        }
Esempio n. 8
0
 private bool TestTetromino(Tetromino tetromino)
 {
     return(TestTetromino(tetromino.Type, tetromino.Pos, tetromino.Angle));
 }