void DMEngine::writeSaveGameHeader(Common::OutSaveFile *out, const Common::String& saveName) { out->writeUint32BE(SAVEGAME_ID); // Write version out->writeByte(SAVEGAME_VERSION); // Write savegame name out->writeString(saveName); out->writeByte(0); // Save the game thumbnail if (_saveThumbnail) out->write(_saveThumbnail->getData(), _saveThumbnail->size()); else Graphics::saveThumbnail(*out); // Creation date/time TimeDate curTime; _system->getTimeAndDate(curTime); uint32 saveDate = ((curTime.tm_mday & 0xFF) << 24) | (((curTime.tm_mon + 1) & 0xFF) << 16) | ((curTime.tm_year + 1900) & 0xFFFF); uint16 saveTime = ((curTime.tm_hour & 0xFF) << 8) | ((curTime.tm_min) & 0xFF); uint32 playTime = getTotalPlayTime() / 1000; out->writeUint32BE(saveDate); out->writeUint16BE(saveTime); out->writeUint32BE(playTime); }
void MohawkEngine_Riven::checkTimer() { if (!_timerProc) return; // NOTE: If the specified timer function is called, it is its job to remove the timer! if (getTotalPlayTime() >= _timerTime) { TimerProc proc = _timerProc; proc(this); } }
Common::Error StarkEngine::saveGameState(int slot, const Common::String &desc) { // Ensure the state store is up to date _resourceProvider->commitActiveLocationsState(); // Open the save file Common::String filename = formatSaveName(_targetName.c_str(), slot); Common::OutSaveFile *save = _saveFileMan->openForSaving(filename); if (!save) { return _saveFileMan->getError(); } // 1. Write the header SaveMetadata metadata; metadata.description = desc; metadata.version = StateProvider::kSaveVersion; metadata.levelIndex = _global->getCurrent()->getLevel()->getIndex(); metadata.locationIndex = _global->getCurrent()->getLocation()->getIndex(); metadata.totalPlayTime = getTotalPlayTime(); metadata.gameWindowThumbnail = _userInterface->getGameWindowThumbnail(); TimeDate timeDate; _system->getTimeAndDate(timeDate); metadata.setSaveTime(timeDate); metadata.write(save); metadata.writeGameScreenThumbnail(save); // 2. Write the resource trees state _stateProvider->writeStateToStream(save); // 3. Write the diary state _diary->writeStateToStream(save); delete save; return Common::kNoError; }
void BladeRunnerEngine::handleMouseAction(int x, int y, bool mainButton, bool buttonDown) { x = CLIP(x, 0, 639); y = CLIP(y, 0, 479); int timeNow = getTotalPlayTime(); if (buttonDown) { _mouseClickTimeDiff = timeNow - _mouseClickTimeLast; _mouseClickTimeLast = timeNow; } if (!playerHasControl() || _mouse->isDisabled()) { return; } if (_kia->isOpen()) { if (buttonDown) { _kia->handleMouseDown(x, y, mainButton); } else { _kia->handleMouseUp(x, y, mainButton); } return; } if (_spinner->isOpen()) { if (buttonDown) { _spinner->handleMouseDown(x, y); } else { _spinner->handleMouseUp(x, y); } return; } if (_esper->isOpen()) { if (buttonDown) { _esper->handleMouseDown(x, y, mainButton); } else { _esper->handleMouseUp(x, y, mainButton); } return; } if (_vk->isOpen()) { if (buttonDown) { _vk->handleMouseDown(x, y, mainButton); } else { _vk->handleMouseUp(x, y, mainButton); } return; } if (_elevator->isOpen()) { if (buttonDown) { _elevator->handleMouseDown(x, y); } else { _elevator->handleMouseUp(x, y); } return; } if (_scores->isOpen()) { if (buttonDown) { _scores->handleMouseDown(x, y); } else { _scores->handleMouseUp(x, y); } return; } if (_dialogueMenu->waitingForInput()) { if (mainButton && !buttonDown) { _dialogueMenu->mouseUp(); } return; } if (mainButton) { Vector3 scenePosition = _mouse->getXYZ(x, y); bool isClickable; bool isObstacle; bool isTarget; int sceneObjectId = _sceneObjects->findByXYZ(&isClickable, &isObstacle, &isTarget, scenePosition, true, false, true); int exitIndex = _scene->_exits->getRegionAtXY(x, y); int regionIndex = _scene->_regions->getRegionAtXY(x, y); if ((sceneObjectId < kSceneObjectOffsetActors || sceneObjectId >= kSceneObjectOffsetItems) && exitIndex >= 0) { handleMouseClickExit(exitIndex, x, y, buttonDown); } else if (regionIndex >= 0) { handleMouseClickRegion(regionIndex, x, y, buttonDown); } else if (sceneObjectId == -1) { handleMouseClickEmpty(x, y, scenePosition, buttonDown); } else if (sceneObjectId >= kSceneObjectOffsetActors && sceneObjectId < kSceneObjectOffsetItems) { handleMouseClickActor(sceneObjectId - kSceneObjectOffsetActors, mainButton, buttonDown, scenePosition, x, y); } else if (sceneObjectId >= kSceneObjectOffsetItems && sceneObjectId < kSceneObjectOffsetObjects) { handleMouseClickItem(sceneObjectId - kSceneObjectOffsetItems, buttonDown); } else if (sceneObjectId >= kSceneObjectOffsetObjects && sceneObjectId <= 293) { handleMouseClick3DObject(sceneObjectId - kSceneObjectOffsetObjects, buttonDown, isClickable, isTarget); } } else if (buttonDown) { if (_playerActor->inWalkLoop()) { _playerActor->stopWalking(false); } _combat->change(); } }
void MohawkEngine_Riven::installTimer(TimerProc proc, uint32 time) { removeTimer(); _timerProc = proc; _timerTime = time + getTotalPlayTime(); }