From 2e9c21cd84f47c51ebe8a847f2e4c359a106c751 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Wed, 31 Aug 2016 23:12:53 -0400 Subject: TITANIC: Improvements to view change animations --- engines/titanic/game_state.h | 3 ++- engines/titanic/support/avi_surface.cpp | 7 ++++++- engines/titanic/support/movie.cpp | 5 +++++ 3 files changed, 13 insertions(+), 2 deletions(-) (limited to 'engines') diff --git a/engines/titanic/game_state.h b/engines/titanic/game_state.h index 70d47b55c1..9ccf7b29a6 100644 --- a/engines/titanic/game_state.h +++ b/engines/titanic/game_state.h @@ -35,7 +35,8 @@ class CGameManager; enum GameStateMode { GSMODE_NONE = 0, GSMODE_INTERACTIVE = 1, GSMODE_CUTSCENE = 2, - GSMODE_3 = 3, GSMODE_4 = 4, GSMODE_INSERT_CD = 5, GSMODE_PENDING_LOAD = 6 + GSMODE_3 = 3, GSMODE_4 = 4, GSMODE_INSERT_CD = 5, GSMODE_CLIP = 6, + GSMODE_PENDING_LOAD = 7 }; enum Season { diff --git a/engines/titanic/support/avi_surface.cpp b/engines/titanic/support/avi_surface.cpp index e43127ccb9..79c1badf61 100644 --- a/engines/titanic/support/avi_surface.cpp +++ b/engines/titanic/support/avi_surface.cpp @@ -364,7 +364,7 @@ void AVISurface::playCutscene(const Rect &r, uint startFrame, uint endFrame) { _movieFrameSurface[0]->h != r.height(); startAtFrame(startFrame); - while (getFrame() <= (int)endFrame) { + while (_currentFrame < (int)endFrame && !g_vm->shouldQuit()) { if (isNextFrame()) { renderFrame(); _currentFrame = _decoders[0]->getCurFrame(); @@ -378,12 +378,17 @@ void AVISurface::playCutscene(const Rect &r, uint startFrame, uint endFrame) { } else { g_vm->_screen->blitFrom(*_movieFrameSurface[0], Common::Point(r.left, r.top)); } + + g_vm->_screen->update(); + g_vm->_events->pollEvents(); } // Brief wait, and check at the same time for clicks to abort the clip if (g_vm->_events->waitForPress(10)) break; } + + stop(); } } // End of namespace Titanic diff --git a/engines/titanic/support/movie.cpp b/engines/titanic/support/movie.cpp index cfdcecbf42..647b24dda4 100644 --- a/engines/titanic/support/movie.cpp +++ b/engines/titanic/support/movie.cpp @@ -133,8 +133,13 @@ void OSMovie::playCutscene(const Rect &drawRect, uint startFrame, uint endFrame) drawRect.top + (heightLess ? CLIP_HEIGHT_REDUCED : CLIP_HEIGHT) ); + CGameState &gameState = g_vm->_window->_gameManager->_gameState; + gameState.setMode(GSMODE_CLIP); + _aviSurface.setFrame(startFrame); _aviSurface.playCutscene(r, startFrame, endFrame); + + gameState.setMode(GSMODE_INTERACTIVE); } void OSMovie::stop() { -- cgit v1.2.3