SUPERNOVA: Moves updateEvents() to GameManager

updatEvents() depends on an initalized GameManager instance and mostly
manipulates its state. So it seemed fitting to move it over.
This commit is contained in:
Joseph-Eugene Winzer 2018-03-11 22:07:13 +01:00
parent bb46e53667
commit ff5426c609
5 changed files with 82 additions and 81 deletions

View File

@ -272,7 +272,7 @@ void Intro::titleScreen() {
Marquee marquee(_vm, Marquee::kMarqueeIntro, _introText.c_str());
while (!_vm->shouldQuit()) {
_vm->updateEvents();
_gm->updateEvents();
marquee.renderCharacter();
if (_gm->_mouseClicked || _gm->_keyPressed)
break;
@ -3298,7 +3298,7 @@ void Outro::onEntrance() {
_vm->playSoundMod(kMusicOutro);
Marquee marquee(_vm, Marquee::kMarqueeOutro, _outroText.c_str());
while (!_vm->shouldQuit()) {
_vm->updateEvents();
_gm->updateEvents();
marquee.renderCharacter();
if (_gm->_mouseClicked || _gm->_keyPressed)
break;

View File

@ -503,6 +503,76 @@ void GameManager::initGui() {
_guiInventoryArrow[1].setTextPosition(273, 186);
}
void GameManager::updateEvents() {
handleTime();
if (_animationEnabled && !_vm->_messageDisplayed && _animationTimer == 0)
_currentRoom->animation();
if (_state._eventCallback != kNoFn && _state._time >= _state._eventTime) {
_vm->_allowLoadGame = false;
_vm->_allowSaveGame = false;
_state._eventTime = kMaxTimerValue;
EventFunction fn = _state._eventCallback;
_state._eventCallback = kNoFn;
switch (fn) {
case kNoFn:
break;
case kSupernovaFn:
supernovaEvent();
break;
case kGuardReturnedFn:
guardReturnedEvent();
break;
case kGuardWalkFn:
guardWalkEvent();
break;
case kTaxiFn:
taxiEvent();
break;
case kSearchStartFn:
searchStartEvent();
break;
}
_vm->_allowLoadGame = true;
_vm->_allowSaveGame = true;
return;
}
if (_state._alarmOn && _state._timeAlarm <= _state._time) {
_state._alarmOn = false;
alarm();
return;
}
_mouseClicked = false;
_keyPressed = false;
Common::Event event;
while (g_system->getEventManager()->pollEvent(event)) {
switch (event.type) {
case Common::EVENT_KEYDOWN:
_keyPressed = true;
processInput(event.kbd);
break;
case Common::EVENT_LBUTTONUP:
// fallthrough
case Common::EVENT_RBUTTONUP:
if (_currentRoom->getId() != INTRO &&
_vm->_mixer->isSoundHandleActive(_vm->_soundHandle))
return;
_mouseClicked = true;
// fallthrough
case Common::EVENT_MOUSEMOVE:
_mouseClickType = event.type;
_mouseX = event.mouse.x;
_mouseY = event.mouse.y;
if (_guiEnabled)
processInput();
break;
default:
break;
}
}
}
void GameManager::processInput(Common::KeyState &state) {
_key = state;
@ -1412,7 +1482,7 @@ int GameManager::dialog(int num, byte rowLength[6], StringID text[6], int number
_currentSentence = -1;
do {
do {
_vm->updateEvents();
updateEvents();
mousePosDialog(_mouseX, _mouseY);
g_system->updateScreen();
g_system->delayMillis(_vm->_delay);
@ -1500,7 +1570,7 @@ void GameManager::drawInventory() {
uint16 GameManager::getKeyInput(bool blockForPrintChar) {
while (!_vm->shouldQuit()) {
_vm->updateEvents();
updateEvents();
if (_keyPressed) {
if (blockForPrintChar) {
if (Common::isPrint(_key.keycode) ||
@ -1530,7 +1600,7 @@ uint16 GameManager::getKeyInput(bool blockForPrintChar) {
Common::EventType GameManager::getMouseInput() {
while (!_vm->shouldQuit()) {
_vm->updateEvents();
updateEvents();
if (_mouseClicked)
return _mouseClickType;
g_system->updateScreen();
@ -1541,7 +1611,7 @@ Common::EventType GameManager::getMouseInput() {
void GameManager::getInput() {
while (!_vm->shouldQuit()) {
_vm->updateEvents();
updateEvents();
if (_mouseClicked || _keyPressed)
break;
g_system->updateScreen();
@ -1573,7 +1643,7 @@ void GameManager::wait(int ticks) {
int32 end = _state._time + ticksToMsec(ticks);
do {
g_system->delayMillis(_vm->_delay);
_vm->updateEvents();
updateEvents();
g_system->updateScreen();
} while (_state._time < end && !_vm->shouldQuit());
}
@ -1582,7 +1652,7 @@ void GameManager::waitOnInput(int ticks) {
int32 end = _state._time + ticksToMsec(ticks);
do {
g_system->delayMillis(_vm->_delay);
_vm->updateEvents();
updateEvents();
g_system->updateScreen();
} while (_state._time < end && !_vm->shouldQuit() && !_keyPressed && !_mouseClicked);
}
@ -1592,7 +1662,7 @@ bool GameManager::waitOnInput(int ticks, Common::KeyCode &keycode) {
int32 end = _state._time + ticksToMsec(ticks);
do {
g_system->delayMillis(_vm->_delay);
_vm->updateEvents();
updateEvents();
g_system->updateScreen();
if (_keyPressed) {
keycode = _key.keycode;
@ -2342,7 +2412,7 @@ void GameManager::alarmSound() {
_vm->playSound(kAudioAlarm);
while (_vm->_mixer->isSoundHandleActive(_vm->_soundHandle)) {
g_system->delayMillis(_vm->_delay);
_vm->updateEvents();
updateEvents();
g_system->updateScreen();
}
} while (_state._time < end && !_vm->shouldQuit());

View File

@ -124,6 +124,7 @@ public:
GameManager(SupernovaEngine *vm);
~GameManager();
void updateEvents();
void processInput(Common::KeyState &state);
void processInput();
void executeRoom();

View File

@ -165,7 +165,7 @@ Common::Error SupernovaEngine::run() {
while (!shouldQuit()) {
uint32 start = _system->getMillis();
updateEvents();
_gm->updateEvents();
_gm->executeRoom();
_console->onFrame();
_system->updateScreen();
@ -179,75 +179,6 @@ Common::Error SupernovaEngine::run() {
return Common::kNoError;
}
void SupernovaEngine::updateEvents() {
_gm->handleTime();
if (_gm->_animationEnabled && !_messageDisplayed && _gm->_animationTimer == 0)
_gm->_currentRoom->animation();
if (_gm->_state._eventCallback != kNoFn && _gm->_state._time >= _gm->_state._eventTime) {
_allowLoadGame = false;
_allowSaveGame = false;
_gm->_state._eventTime = kMaxTimerValue;
EventFunction fn = _gm->_state._eventCallback;
_gm->_state._eventCallback = kNoFn;
switch (fn) {
case kNoFn:
break;
case kSupernovaFn:
_gm->supernovaEvent();
break;
case kGuardReturnedFn:
_gm->guardReturnedEvent();
break;
case kGuardWalkFn:
_gm->guardWalkEvent();
break;
case kTaxiFn:
_gm->taxiEvent();
break;
case kSearchStartFn:
_gm->searchStartEvent();
break;
}
_allowLoadGame = true;
_allowSaveGame = true;
return;
}
if (_gm->_state._alarmOn && _gm->_state._timeAlarm <= _gm->_state._time) {
_gm->_state._alarmOn = false;
_gm->alarm();
return;
}
_gm->_mouseClicked = false;
_gm->_keyPressed = false;
Common::Event event;
while (g_system->getEventManager()->pollEvent(event)) {
switch (event.type) {
case Common::EVENT_KEYDOWN:
_gm->_keyPressed = true;
_gm->processInput(event.kbd);
break;
case Common::EVENT_LBUTTONUP:
// fallthrough
case Common::EVENT_RBUTTONUP:
if (_gm->_currentRoom->getId() != INTRO && _mixer->isSoundHandleActive(_soundHandle))
return;
_gm->_mouseClicked = true;
// fallthrough
case Common::EVENT_MOUSEMOVE:
_gm->_mouseClickType = event.type;
_gm->_mouseX = event.mouse.x;
_gm->_mouseY = event.mouse.y;
if (_gm->_guiEnabled)
_gm->processInput();
break;
default:
break;
}
}
}
bool SupernovaEngine::hasFeature(EngineFeature f) const {
switch (f) {

View File

@ -133,7 +133,6 @@ public:
void paletteFadeIn();
void paletteFadeOut();
void paletteBrightness();
void updateEvents();
void playSound(AudioIndex sample);
void playSoundMod(int filenumber);
void stopSound();