public void dropPiece(final int X, final int Y,
                          final Piece.ConnectFourPieceColour col) {
        
        m_dropping = true;
        if (col == Piece.ConnectFourPieceColour.YELLOW) {
            m_currentPieceColour = YELLOW_PIECE;
        } else if (col == Piece.ConnectFourPieceColour.RED) {
            m_currentPieceColour = RED_PIECE;
        }
        
        m_animationThread = new Thread(new Runnable() {
            public void run() {
                int speed = 0;
                final double gravity = 1.2;
                int time = 0;
                final int TICK_TIME = 15;
                long tick = TICK_TIME;
                final int TERMINAL_VELOCITY = 50;
                m_pieceX = PIECE_X[X];
                while (m_pieceY < (PIECE_Y[Y] + TOP_SPACING)) {
                    
                    time += TICK_TIME;
                    if (speed < TERMINAL_VELOCITY) {
                        speed += gravity;
                    }
                    m_pieceY += speed;
                    try {
                        Thread.sleep(tick);
                    } catch (InterruptedException ex) {
                        Thread.currentThread().interrupt();
                        System.out.println("Sleep error");
                    }
                    repaint();
                }
                m_pieceY = MOUSE_PIECE_Y;
                m_dropping = false;
            }
        });
        m_animationThread.start();
    }