mirror of
https://github.com/libretro/scummvm.git
synced 2025-02-23 12:44:02 +00:00
BLADERUNNER: Add scene resume
This commit is contained in:
parent
b32e9116da
commit
92c49a8571
@ -38,6 +38,7 @@
|
||||
#include "bladerunner/script/scene_script.h"
|
||||
#include "bladerunner/ui/spinner.h"
|
||||
#include "bladerunner/vqa_player.h"
|
||||
#include "bladerunner/zbuffer.h"
|
||||
|
||||
#include "common/str.h"
|
||||
|
||||
@ -128,7 +129,7 @@ bool Scene::open(int setId, int sceneId, bool isLoadingGame) {
|
||||
_vm->_sliceRenderer->setView(_vm->_view);
|
||||
|
||||
if (isLoadingGame) {
|
||||
// TODO: Advance VQA frame
|
||||
resume(true);
|
||||
if (sceneId == kScenePS10 || sceneId == kScenePS11 || sceneId == kScenePS12 || sceneId == kScenePS13) { // police maze?
|
||||
_vm->_sceneScript->sceneLoaded();
|
||||
}
|
||||
@ -140,11 +141,9 @@ bool Scene::open(int setId, int sceneId, bool isLoadingGame) {
|
||||
}
|
||||
|
||||
if (_specialLoopMode == kSceneLoopModeNone) {
|
||||
_vqaPlayer->setLoop(_defaultLoop, -1, kLoopSetModeImmediate, nullptr, nullptr);
|
||||
_defaultLoopSet = true;
|
||||
_defaultLoopPreloadedSet = false;
|
||||
startDefaultLoop();
|
||||
}
|
||||
_vm->_scene->advanceFrame();
|
||||
advanceFrame();
|
||||
|
||||
_vm->_playerActor->setAtXYZ(_actorStartPosition, _actorStartFacing);
|
||||
_vm->_playerActor->setSetId(setId);
|
||||
@ -244,6 +243,57 @@ int Scene::advanceFrame() {
|
||||
return frame;
|
||||
}
|
||||
|
||||
void Scene::resume(bool isLoadingGame) {
|
||||
if (!_vqaPlayer) {
|
||||
return;
|
||||
}
|
||||
|
||||
int targetFrame = _frame;
|
||||
|
||||
if (!isLoadingGame) {
|
||||
_vm->_zbuffer->disable();
|
||||
}
|
||||
|
||||
if (_specialLoopMode == kSceneLoopModeNone) {
|
||||
startDefaultLoop();
|
||||
} else {
|
||||
if (_specialLoopMode == kSceneLoopModeChangeSet) {
|
||||
_vm->_settings->setNewSetAndScene(_setId, _sceneId);
|
||||
}
|
||||
if (_defaultLoopPreloadedSet) {
|
||||
_specialLoopMode = kSceneLoopModeNone;
|
||||
startDefaultLoop();
|
||||
advanceFrame();
|
||||
loopStartSpecial(_specialLoopMode, _specialLoop, false);
|
||||
} else {
|
||||
_defaultLoopPreloadedSet = true;
|
||||
loopStartSpecial(_specialLoopMode, _specialLoop, true);
|
||||
if (_specialLoopMode == kSceneLoopModeLoseControl || _specialLoopMode == kSceneLoopModeChangeSet) {
|
||||
_vm->playerGainsControl();
|
||||
|
||||
}
|
||||
}
|
||||
if (_specialLoopMode == kSceneLoopModeChangeSet) {
|
||||
_vm->_settings->clearNewSetAndScene();
|
||||
}
|
||||
}
|
||||
|
||||
int frame;
|
||||
do {
|
||||
frame = advanceFrame();
|
||||
} while (frame >= 0 && frame != targetFrame);
|
||||
|
||||
if (!isLoadingGame) {
|
||||
_vm->_zbuffer->enable();
|
||||
}
|
||||
}
|
||||
|
||||
void Scene::startDefaultLoop() {
|
||||
_vqaPlayer->setLoop(_defaultLoop, -1, kLoopSetModeImmediate, nullptr, nullptr);
|
||||
_defaultLoopSet = true;
|
||||
_defaultLoopPreloadedSet = false;
|
||||
}
|
||||
|
||||
void Scene::setActorStart(Vector3 position, int facing) {
|
||||
_actorStartPosition = position;
|
||||
_actorStartFacing = facing;
|
||||
|
@ -66,6 +66,8 @@ public:
|
||||
bool open(int setId, int sceneId, bool isLoadingGame);
|
||||
bool close(bool isLoadingGame);
|
||||
int advanceFrame();
|
||||
void resume(bool isLoadingGame = false);
|
||||
void startDefaultLoop();
|
||||
void setActorStart(Vector3 position, int facing);
|
||||
|
||||
void loopSetDefault(int loopId);
|
||||
|
@ -31,6 +31,7 @@
|
||||
#include "bladerunner/font.h"
|
||||
#include "bladerunner/game_info.h"
|
||||
#include "bladerunner/mouse.h"
|
||||
#include "bladerunner/scene.h"
|
||||
#include "bladerunner/shape.h"
|
||||
#include "bladerunner/script/esper_script.h"
|
||||
#include "bladerunner/text_resource.h"
|
||||
@ -152,7 +153,7 @@ void ESPER::close() {
|
||||
|
||||
//TODO: time->unlock()
|
||||
_vm->_ambientSounds->setVolume(_ambientVolume);
|
||||
//TODO: _vm->_scene->resume(false);
|
||||
_vm->_scene->resume();
|
||||
reset();
|
||||
}
|
||||
|
||||
|
@ -684,10 +684,9 @@ void KIA::unload() {
|
||||
|
||||
// TODO: Unfreeze game time
|
||||
|
||||
//if (!_vm->_settings->isLoadingGame(&Settings) && GameRunning)
|
||||
// if (_vm->_gameIsRunning) {
|
||||
// _vm->_scene->resume(false);
|
||||
// }
|
||||
if (!_vm->_settings->getLoadingGame() && _vm->_gameIsRunning) {
|
||||
_vm->_scene->resume();
|
||||
}
|
||||
}
|
||||
|
||||
void KIA::createButtons(int sectionId) {
|
||||
|
@ -176,7 +176,7 @@ int Spinner::chooseDestination(int loopId, bool immediately) {
|
||||
_isOpen = false;
|
||||
|
||||
// TODO: Unfreeze game time
|
||||
// TODO: _vm->_scene->resume();
|
||||
_vm->_scene->resume();
|
||||
|
||||
return _selectedDestination;
|
||||
}
|
||||
|
@ -183,7 +183,7 @@ void VK::close() {
|
||||
_vm->_ambientSounds->setVolume(_volumeAmbient);
|
||||
|
||||
// TODO: time->unlock();
|
||||
// _vm->_scene->resume(false);
|
||||
_vm->_scene->resume();
|
||||
}
|
||||
|
||||
void VK::tick() {
|
||||
|
Loading…
x
Reference in New Issue
Block a user