aboutsummaryrefslogtreecommitdiff
path: root/engines/kyra/screen.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/kyra/screen.cpp')
-rw-r--r--engines/kyra/screen.cpp26
1 files changed, 16 insertions, 10 deletions
diff --git a/engines/kyra/screen.cpp b/engines/kyra/screen.cpp
index 7c42896396..d8b53963f7 100644
--- a/engines/kyra/screen.cpp
+++ b/engines/kyra/screen.cpp
@@ -382,20 +382,20 @@ void Screen::setPagePixel(int pageNum, int x, int y, uint8 color) {
_pagePtrs[pageNum][y * SCREEN_W + x] = color;
}
-void Screen::fadeFromBlack(int delay) {
- debugC(9, kDebugLevelScreen, "Screen::fadeFromBlack()");
- fadePalette(_currentPalette, delay);
+void Screen::fadeFromBlack(int delay, const UpdateFunctor *upFunc) {
+ debugC(9, kDebugLevelScreen, "Screen::fadeFromBlack(%d, %p)", delay, (const void*)upFunc);
+ fadePalette(_currentPalette, delay, upFunc);
}
-void Screen::fadeToBlack(int delay) {
- debugC(9, kDebugLevelScreen, "Screen::fadeToBlack()");
+void Screen::fadeToBlack(int delay, const UpdateFunctor *upFunc) {
+ debugC(9, kDebugLevelScreen, "Screen::fadeToBlack(%d, %p)", delay, (const void*)upFunc);
uint8 blackPal[768];
memset(blackPal, 0, 768);
- fadePalette(blackPal, delay);
+ fadePalette(blackPal, delay, upFunc);
}
-void Screen::fadePalette(const uint8 *palData, int delay) {
- debugC(9, kDebugLevelScreen, "Screen::fadePalette(%p, %d)", (const void *)palData, delay);
+void Screen::fadePalette(const uint8 *palData, int delay, const UpdateFunctor *upFunc) {
+ debugC(9, kDebugLevelScreen, "Screen::fadePalette(%p, %d, %p)", (const void *)palData, delay, (const void*)upFunc);
updateScreen();
uint8 fadePal[768];
@@ -448,7 +448,10 @@ void Screen::fadePalette(const uint8 *palData, int delay) {
break;
setScreenPalette(fadePal);
- _system->updateScreen();
+ if (upFunc && *upFunc)
+ (*upFunc)();
+ else
+ _system->updateScreen();
//_system->delayMillis((delayAcc >> 8) * 1000 / 60);
_vm->delay((delayAcc >> 8) * 1000 / 60);
delayAcc &= 0xFF;
@@ -456,7 +459,10 @@ void Screen::fadePalette(const uint8 *palData, int delay) {
if (_vm->quit()) {
setScreenPalette(palData);
- _system->updateScreen();
+ if (upFunc && *upFunc)
+ (*upFunc)();
+ else
+ _system->updateScreen();
}
}