void CGameState::changeView(CViewItem *newView, CMovieClip *clip) { // Signal the old view that it's being left CViewItem *oldView = _gameLocation.getView(); oldView->leaveView(newView); // If Shift key is pressed, skip showing the transition clip if (g_vm->_events->isSpecialPressed(MK_SHIFT)) clip = nullptr; if (_mode == GSMODE_CUTSCENE) { _movieList._destView = newView; _movieList._movieClip = clip; _gameManager->incTransitions(); } else { oldView->preEnterView(newView); _gameManager->_gameView->setView(newView); CRoomItem *oldRoom = oldView->findNode()->findRoom(); CRoomItem *newRoom = newView->findNode()->findRoom(); // If a transition clip is defined, play it if (clip) _gameManager->playClip(clip, oldRoom, newRoom); // Final view change handling _gameManager->_sound.preEnterView(newView, newRoom != oldRoom); oldView->enterView(newView); } }
void CGameState::enterView() { CViewItem *oldView = _gameLocation.getView(); CViewItem *newView = _movieList._destView; oldView->preEnterView(newView); _gameManager->_gameView->setView(newView); CRoomItem *oldRoom = oldView->findNode()->findRoom(); CRoomItem *newRoom = newView->findNode()->findRoom(); _gameManager->playClip(_movieList._movieClip, oldRoom, newRoom); _gameManager->_sound.preEnterView(newView, newRoom != oldRoom); _gameManager->decTransitions(); oldView->enterView(newView); _movieList._destView = nullptr; _movieList._movieClip = nullptr; }