Ticket #5879: cruise_dont_block_during_userwait.diff

File cruise_dont_block_during_userwait.diff, 3.9 KB (added by SF/ifo, 13 years ago)
  • engines/cruise/cruise_main.cpp

    diff --git a/engines/cruise/cruise_main.cpp b/engines/cruise/cruise_main.cpp
    index ff46696..5aa3926 100644
    a b void CruiseEngine::mainLoop() {  
    17991799                // Handle frame delay
    18001800                uint32 currentTick = g_system->getMillis();
    18011801
    1802                 if (!bFastMode) {
    1803                         // Delay for the specified amount of time, but still respond to events
    1804                         bool skipEvents = false;
     1802                // Delay for the specified amount of time, but still respond to events
     1803                bool skipEvents = false;
    18051804
    1806                         do {
    1807                                 g_system->delayMillis(10);
    1808                                 currentTick = g_system->getMillis();
     1805                do {
     1806                        if (userEnabled && !userWait && !autoTrack) {
     1807                                if (currentActiveMenu == -1) {
     1808                                        static int16 oldMouseX = -1;
     1809                                        static int16 oldMouseY = -1;
    18091810
    1810                                 if (!skipEvents)
    1811                                         skipEvents = manageEvents();
     1811                                        getMouseStatus(&main10, &mouseX, &mouseButton, &mouseY);
     1812
     1813                                        if (mouseX != oldMouseX || mouseY != oldMouseY) {
     1814                                                int objectType;
     1815                                                int newCursor1;
     1816                                                int newCursor2;
    18121817
    1813                                 if (playerDontAskQuit)
    1814                                         break;
     1818                                                oldMouseX = mouseX;
     1819                                                oldMouseY = mouseY;
    18151820
    1816                                 _vm->getDebugger()->onFrame();
    1817                         } while (currentTick < lastTick + _gameSpeed);
    1818                 } else {
    1819                         manageEvents();
     1821                                                objectType = findObject(mouseX, mouseY, &newCursor1, &newCursor2);
    18201822
    1821                         if (currentTick >= (lastTickDebug + 10)) {
    1822                                 lastTickDebug = currentTick;
    1823                                 _vm->getDebugger()->onFrame();
     1823                                                if (objectType == 9) {
     1824                                                        changeCursor(CURSOR_EXIT);
     1825                                                } else if (objectType != -1) {
     1826                                                        changeCursor(CURSOR_MAGNIFYING_GLASS);
     1827                                                } else {
     1828                                                        changeCursor(CURSOR_WALK);
     1829                                                }
     1830                                        }
     1831                                } else {
     1832                                        changeCursor(CURSOR_NORMAL);
     1833                                }
     1834                        } else {
     1835                                changeCursor(CURSOR_NORMAL);
    18241836                        }
    1825                 }
     1837                        g_system->updateScreen();
     1838
     1839                        if (!skipEvents || bFastMode)
     1840                                skipEvents = manageEvents();
     1841
     1842                        if (bFastMode) {
     1843                                if (currentTick >= (lastTickDebug + 10))
     1844                                        lastTickDebug = currentTick;
     1845                        } else {
     1846                                g_system->delayMillis(10);
     1847                                currentTick = g_system->getMillis();
     1848                        }
     1849
     1850                        if (playerDontAskQuit)
     1851                                break;
     1852
     1853                        _vm->getDebugger()->onFrame();
     1854                } while (currentTick < lastTick + _gameSpeed && !bFastMode);
    18261855                if (playerDontAskQuit)
    18271856                        break;
    18281857
    void CruiseEngine::mainLoop() {  
    18421871//      readKeyboard();
    18431872
    18441873                bool isUserWait = userWait != 0;
     1874                if (userDelay) {
     1875                        currentMouseButton = 0;
     1876                }
    18451877                playerDontAskQuit = processInput();
    18461878                if (playerDontAskQuit)
    18471879                        break;
    void CruiseEngine::mainLoop() {  
    18531885
    18541886                if (userDelay && !userWait) {
    18551887                        userDelay--;
    1856                         continue;
    18571888                }
    18581889
    18591890                if (isUserWait & !userWait) {
    void CruiseEngine::mainLoop() {  
    19161947                        mainDraw(userWait);
    19171948                        flipScreen();
    19181949
    1919                         if (userEnabled && !userWait && !autoTrack) {
    1920                                 if (currentActiveMenu == -1) {
    1921                                         static int16 oldMouseX = -1;
    1922                                         static int16 oldMouseY = -1;
    1923 
    1924                                         getMouseStatus(&main10, &mouseX, &mouseButton, &mouseY);
    1925 
    1926                                         if (mouseX != oldMouseX || mouseY != oldMouseY) {
    1927                                                 int objectType;
    1928                                                 int newCursor1;
    1929                                                 int newCursor2;
    1930 
    1931                                                 oldMouseX = mouseX;
    1932                                                 oldMouseY = mouseY;
    1933 
    1934                                                 objectType = findObject(mouseX, mouseY, &newCursor1, &newCursor2);
    1935 
    1936                                                 if (objectType == 9) {
    1937                                                         changeCursor(CURSOR_EXIT);
    1938                                                 } else if (objectType != -1) {
    1939                                                         changeCursor(CURSOR_MAGNIFYING_GLASS);
    1940                                                 } else {
    1941                                                         changeCursor(CURSOR_WALK);
    1942                                                 }
    1943                                         }
    1944                                 } else {
    1945                                         changeCursor(CURSOR_NORMAL);
    1946                                 }
    1947                         } else {
    1948                                 changeCursor(CURSOR_NORMAL);
    1949                         }
    1950 
    19511950                        if (userWait == 1) {
    19521951                                // Waiting for press - original wait loop has been integrated into the
    19531952                                // main event loop
    void CruiseEngine::mainLoop() {  
    19761975                                removeCell(&cellHead, autoOvl, autoMsg, 5, masterScreen);
    19771976                                autoMsg = -1;
    19781977                        }
    1979                 } else {
    1980                         // Keep ScummVM being responsive even when displayOn is false
    1981                         g_system->updateScreen();
    19821978                }
    19831979
    19841980        } while (!playerDontAskQuit && quitValue2 && quitValue != 7);