From 332a2e23d863f7e0530de8e08e45f57ebd890975 Mon Sep 17 00:00:00 2001 From: Filippos Karapetis Date: Sat, 16 Jun 2007 08:53:46 +0000 Subject: IHNM: Implemented cutaway fadeout svn-id: r27445 --- engines/saga/animation.cpp | 55 ++++++++++++++++++++++++++++++++++++---------- engines/saga/events.cpp | 8 +++++++ engines/saga/events.h | 7 ++++-- 3 files changed, 57 insertions(+), 13 deletions(-) (limited to 'engines') diff --git a/engines/saga/animation.cpp b/engines/saga/animation.cpp index 6566a43efd..0f9a1ddef4 100644 --- a/engines/saga/animation.cpp +++ b/engines/saga/animation.cpp @@ -96,8 +96,10 @@ void Anim::playCutaway(int cut, bool fade) { _vm->_gfx->savePalette(); - // TODO - /*if (fade) { + if (fade) { + _vm->_gfx->getCurrentPal(saved_pal); + // TODO + /* Event event; static PalEntry cur_pal[PAL_ENTRIES]; @@ -111,7 +113,8 @@ void Anim::playCutaway(int cut, bool fade) { event.data = cur_pal; _vm->_events->queue(&event); - }*/ + */ + } // Prepare cutaway _vm->_gfx->showCursor(false); @@ -219,14 +222,47 @@ void Anim::returnFromCutaway(void) { debug(0, "returnFromCutaway()"); + if (_cutawayActive) { + Event event; + Event *q_event = NULL; + + if (_cutAwayFade) { + static PalEntry cur_pal[PAL_ENTRIES]; + + _vm->_gfx->getCurrentPal(cur_pal); + + event.type = kEvTImmediate; + event.code = kPalEvent; + event.op = kEventPalToBlack; + event.time = 0; + event.duration = kNormalFadeDuration; + event.data = cur_pal; + + q_event = _vm->_events->queue(&event); + } + // Note that clearCutaway() sets _cutawayActive to false. clearCutaway(); + // TODO: Clearing the cutaway via an event is better, but it breaks things up + /* + event.type = kEvTImmediate; + event.code = kCutawayEvent; + event.op = kEventClearCutaway; + event.time = 0; + event.duration = 0; + + if (_cutAwayFade) + q_event = _vm->_events->chain(q_event, &event); // chain with the other events + else + q_event = _vm->_events->queue(&event); + */ + + // Restore the scene + _vm->_scene->restoreScene(); // Handle fade up, if we previously faded down - // TODO - /*if (_cutAwayFade) { - Event event; + if (_cutAwayFade) { event.type = kEvTImmediate; event.code = kPalEvent; event.op = kEventBlackToPal; @@ -234,11 +270,8 @@ void Anim::returnFromCutaway(void) { event.duration = kNormalFadeDuration; event.data = saved_pal; - _vm->_events->queue(&event); - }*/ - - // Restore the scene - _vm->_scene->restoreScene(); + q_event = _vm->_events->chain(q_event, &event); + } // Restore the animations for (int i = 0; i < MAX_ANIMATIONS; i++) { diff --git a/engines/saga/events.cpp b/engines/saga/events.cpp index 0c5830c583..6672cd2477 100644 --- a/engines/saga/events.cpp +++ b/engines/saga/events.cpp @@ -469,6 +469,14 @@ int Events::handleOneShot(Event *event) { default: break; } + case kCutawayEvent: + switch (event->op) { + case kEventClearCutaway: + _vm->_anim->clearCutaway(); + break; + default: + break; + } default: break; } diff --git a/engines/saga/events.h b/engines/saga/events.h index dbd2382a27..d18f009de3 100644 --- a/engines/saga/events.h +++ b/engines/saga/events.h @@ -59,7 +59,8 @@ enum EventCodes { kActorEvent, kScriptEvent, kCursorEvent, - kGraphicsEvent + kGraphicsEvent, + kCutawayEvent }; enum EventOps { @@ -111,7 +112,9 @@ enum EventOps { kEventBlackToPal = 2, // TRANSITION events kEventDissolve = 1, - kEventDissolveBGMask = 2 + kEventDissolveBGMask = 2, + // CUTAWAY events + kEventClearCutaway = 1 }; enum EventParams { -- cgit v1.2.3