[Scummvm-cvs-logs] SF.net SVN: scummvm: [22393] scummvm/trunk/engines/kyra
eriktorbjorn at users.sourceforge.net
eriktorbjorn at users.sourceforge.net
Mon May 8 08:41:03 CEST 2006
Revision: 22393
Author: eriktorbjorn
Date: 2006-05-08 08:40:30 -0700 (Mon, 08 May 2006)
ViewCVS: http://svn.sourceforge.net/scummvm/?rev=22393&view=rev
Log Message:
-----------
Replaced a bunch of delay loops with a new delayUntil() function. Now all of
them will at least sleep if the remaining delay is at least 10 ms. (Personally,
I don't like the idea of busy-waiting even 9 ms, but now that it's in its own
function, it becomes much easier if we want to change that behaviour. There are
still plenty of custom delay loops left, though.)
Modified Paths:
--------------
scummvm/trunk/engines/kyra/items.cpp
scummvm/trunk/engines/kyra/kyra.cpp
scummvm/trunk/engines/kyra/kyra.h
scummvm/trunk/engines/kyra/scene.cpp
scummvm/trunk/engines/kyra/sequences_v1.cpp
Modified: scummvm/trunk/engines/kyra/items.cpp
===================================================================
--- scummvm/trunk/engines/kyra/items.cpp 2006-05-08 14:49:54 UTC (rev 22392)
+++ scummvm/trunk/engines/kyra/items.cpp 2006-05-08 15:40:30 UTC (rev 22393)
@@ -218,7 +218,7 @@
_screen->updateScreen();
y += 2;
height -= 2;
- while (_system->getMillis() < nextTime) {}
+ delayUntil(nextTime);
}
_screen->restoreRect1(xpos, ypos);
_screen->resetShapeHeight(_shapes[220+_itemInHand]);
@@ -560,10 +560,7 @@
uint32 nextTime = _system->getMillis() + 1 * _tickLength;
_screen->drawShape(0, _shapes[220+item], drawX, drawY, 0, 0);
_screen->updateScreen();
- while (_system->getMillis() < nextTime) {
- if ((nextTime - _system->getMillis()) >= 10)
- delay(10);
- }
+ delayUntil(nextTime);
}
bool skip = false;
@@ -603,10 +600,7 @@
uint32 nextTime = _system->getMillis() + 1 * _tickLength;
_screen->drawShape(0, _shapes[220+item], drawX, drawY, 0, 0);
_screen->updateScreen();
- while (_system->getMillis() < nextTime) {
- if ((nextTime - _system->getMillis()) >= 10)
- delay(10);
- }
+ delayUntil(nextTime);
}
_screen->restoreRect0(drawX, drawY);
} else {
@@ -659,10 +653,7 @@
uint32 nextTime = _system->getMillis() + 1 * _tickLength;
_screen->drawShape(0, shape, x, startY, 0, 0);
_screen->updateScreen();
- while (_system->getMillis() < nextTime) {
- if ((nextTime - _system->getMillis()) >= 10)
- delay(10);
- }
+ delayUntil(nextTime);
}
_screen->restoreRect0(x, y);
_screen->showMouse();
@@ -683,10 +674,7 @@
uint32 nextTime = _system->getMillis() + 3 * _tickLength;
_screen->drawShape(0, _shapes[4+i], x, y + yAdd, 0, 0);
_screen->updateScreen();
- while (_system->getMillis() < nextTime) {
- if ((nextTime - _system->getMillis()) >= 10)
- delay(10);
- }
+ delayUntil(nextTime);
}
for (int i = 204; i >= 201; --i) {
@@ -695,10 +683,7 @@
_screen->drawShape(0, _shapes[220+item], x, y, 0, 0);
_screen->drawShape(0, _shapes[4+i], x, y + yAdd, 0, 0);
_screen->updateScreen();
- while (_system->getMillis() < nextTime) {
- if ((nextTime - _system->getMillis()) >= 10)
- delay(10);
- }
+ delayUntil(nextTime);
}
_screen->restoreRect0(x, y);
}
@@ -755,10 +740,7 @@
specialMouseItemFX(shape, x, y, animIndex, tableIndex, loopStart, maxLoops);
}
_screen->updateScreen();
- while (_system->getMillis() < nextTime) {
- if (nextTime - _system->getMillis() >= 10)
- delay(10);
- }
+ delayUntil(nextTime);
}
if (itemPos != -1) {
@@ -777,10 +759,7 @@
specialMouseItemFX(shape, x, y, animIndex, tableIndex, loopStart, maxLoops);
}
_screen->updateScreen();
- while (_system->getMillis() < nextTime) {
- if (nextTime - _system->getMillis() >= 10)
- delay(10);
- }
+ delayUntil(nextTime);
}
_screen->restoreRect1(x, y);
if (itemPos == -1) {
@@ -843,10 +822,7 @@
specialMouseItemFX(shape, x, y, animIndex, tableIndex, loopStart, maxLoops);
}
_screen->updateScreen();
- while (_system->getMillis() < nextTime) {
- if (nextTime - _system->getMillis() >= 10)
- delay(10);
- }
+ delayUntil(nextTime);
}
for (int shape = _magicMouseItemStartFrame2[animIndex]; shape <= _magicMouseItemEndFrame2[animIndex]; ++shape) {
@@ -858,10 +834,7 @@
specialMouseItemFX(shape, x, y, animIndex, tableIndex, loopStart, maxLoops);
}
_screen->updateScreen();
- while (_system->getMillis() < nextTime) {
- if (nextTime - _system->getMillis() >= 10)
- delay(10);
- }
+ delayUntil(nextTime);
}
_screen->restoreRect1(x, y);
if (itemPos == -1) {
Modified: scummvm/trunk/engines/kyra/kyra.cpp
===================================================================
--- scummvm/trunk/engines/kyra/kyra.cpp 2006-05-08 14:49:54 UTC (rev 22392)
+++ scummvm/trunk/engines/kyra/kyra.cpp 2006-05-08 15:40:30 UTC (rev 22393)
@@ -561,6 +561,15 @@
_system->quit();
}
+void KyraEngine::delayUntil(uint32 timestamp, bool updateTimers, bool update, bool isMainLoop) {
+ while (_system->getMillis() < timestamp) {
+ if (updateTimers)
+ updateGameTimers();
+ if (timestamp - _system->getMillis() >= 10)
+ delay(10, update, isMainLoop);
+ }
+}
+
void KyraEngine::delay(uint32 amount, bool update, bool isMainLoop) {
OSystem::Event event;
char saveLoadSlot[20];
Modified: scummvm/trunk/engines/kyra/kyra.h
===================================================================
--- scummvm/trunk/engines/kyra/kyra.h 2006-05-08 14:49:54 UTC (rev 22392)
+++ scummvm/trunk/engines/kyra/kyra.h 2006-05-08 15:40:30 UTC (rev 22393)
@@ -286,7 +286,8 @@
const uint8 * const*palTable2() { return &_specialPalettes[29]; }
bool seq_skipSequence() const;
- void delay(uint32 millis, bool update = false, bool mainLoop = false);
+ void delayUntil(uint32 timestamp, bool updateGameTimers = false, bool update = false, bool isMainLoop = false);
+ void delay(uint32 millis, bool update = false, bool isMainLoop = false);
void quitGame();
void loadBitmap(const char *filename, int tempPage, int dstPage, uint8 *palData);
Modified: scummvm/trunk/engines/kyra/scene.cpp
===================================================================
--- scummvm/trunk/engines/kyra/scene.cpp 2006-05-08 14:49:54 UTC (rev 22392)
+++ scummvm/trunk/engines/kyra/scene.cpp 2006-05-08 15:40:30 UTC (rev 22393)
@@ -252,7 +252,7 @@
while (ypos < ch->y1) {
nextFrame = getTimerDelay(5 + character) * _tickLength + _system->getMillis();
setCharacterPositionWithUpdate(character);
- while (_system->getMillis() < nextFrame) { updateGameTimers(); }
+ delayUntil(nextFrame, true);
}
break;
@@ -260,7 +260,7 @@
while (ch->x1 < xpos) {
nextFrame = getTimerDelay(5 + character) * _tickLength + _system->getMillis();
setCharacterPositionWithUpdate(character);
- while (_system->getMillis() < nextFrame) { updateGameTimers(); }
+ delayUntil(nextFrame, true);
}
break;
@@ -268,7 +268,7 @@
while (ypos > ch->y1) {
nextFrame = getTimerDelay(5 + character) * _tickLength + _system->getMillis();
setCharacterPositionWithUpdate(character);
- while (_system->getMillis() < nextFrame) { updateGameTimers(); }
+ delayUntil(nextFrame, true);
}
break;
@@ -276,7 +276,7 @@
while (ch->x1 > xpos) {
nextFrame = getTimerDelay(5 + character) * _tickLength + _system->getMillis();
setCharacterPositionWithUpdate(character);
- while (_system->getMillis() < nextFrame) { updateGameTimers(); }
+ delayUntil(nextFrame, true);
}
break;
Modified: scummvm/trunk/engines/kyra/sequences_v1.cpp
===================================================================
--- scummvm/trunk/engines/kyra/sequences_v1.cpp 2006-05-08 14:49:54 UTC (rev 22392)
+++ scummvm/trunk/engines/kyra/sequences_v1.cpp 2006-05-08 15:40:30 UTC (rev 22393)
@@ -948,10 +948,10 @@
_finalA->open("finald.wsa", 1, 0);
_finalA->_x = _finalA->_y = 8;
_finalA->_drawPage = 0;
- while (_system->getMillis() < nextTime) {}
+ delayUntil(nextTime);
snd_playSoundEffect(0x40);
for (int i = 0; i < 22; ++i) {
- while (_system->getMillis() < nextTime) {}
+ delayUntil(nextTime);
if (i == 4) {
snd_playSoundEffect(0x3E);
} else if (i == 20) {
@@ -1292,7 +1292,7 @@
timer2 = _system->getMillis() + 4 * _tickLength;
_finalC->displayFrame(i);
_screen->updateScreen();
- while (_system->getMillis() < timer2) {}
+ delayUntil(timer2);
}
snd_playWanderScoreViaMap(51, 1);
delay(60 * _tickLength);
@@ -1496,14 +1496,14 @@
nextRun = _system->getMillis() + _tickLength;
_finalB->displayFrame(i);
_screen->updateScreen();
- while (_system->getMillis() < nextRun) {}
+ delayUntil(nextRun);
}
snd_playSoundEffect(0x0D);
for (int i = 7; i >= 0; --i) {
nextRun = _system->getMillis() + _tickLength;
_finalB->displayFrame(i);
_screen->updateScreen();
- while (_system->getMillis() < nextRun) {}
+ delayUntil(nextRun);
}
initBeadState(beadState1.x, beadState1.y, 63, 60, 6, &beadState2);
} else {
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
More information about the Scummvm-git-logs
mailing list