diff options
| -rw-r--r-- | engines/saga/animation.cpp | 55 | ||||
| -rw-r--r-- | engines/saga/events.cpp | 8 | ||||
| -rw-r--r-- | engines/saga/events.h | 7 | 
3 files changed, 57 insertions, 13 deletions
| 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 { | 
