@Override
        public void run() {
            while (flag) {
                try {
                    //If it's merely paused, do nothing; if it's actually game over
                    //then break loop entirely.
                    if (engine.state == ProjectConstants.GameState.PLAYING) {
                        if (engine.activeblock == null) {
                            continue;
                        }

                        BlockPosition temp = computeBestFit(engine);
                        if (engine.state == ProjectConstants.GameState.PLAYING) {
                            int elx = temp.bx;
                            int erot = temp.rot;

                            //Move it!
                            movehere(elx, erot);
                        }
                    }
                    //safety
                    sleep_(waittime);
                } catch (Exception e) {
                    //System.out.print("Aborting and retrying...\n");
                    //return;
                }
            }
        }