void DialogPlayer::update() { if (_singleSpeech || !_currentDialog || !_currentReply) { return; // Nothing to do } //TODO: Complete Resources::Speech *speech = _currentReply->getCurrentSpeech(); if (speech && _speechReady) { // A new line is already ready, no need to prepare another one return; } if (!speech || !speech->isPlaying()) { // A line has ended, play the next one _currentReply->goToNextLine(); speech = _currentReply->getCurrentSpeech(); if (speech) { StarkDiary->logSpeech(speech->getPhrase(), speech->getCharacterId()); _speechReady = true; } else { onReplyEnd(); } } }
void DialogPlayer::selectOption(uint32 index) { _optionsAvailable = false; Option &option = _options[index]; //TODO: Complete switch (option._type) { case kOptionTypeAsk: { Resources::Dialog::Topic *topic = option._topic; // Set the current reply _currentReply = topic->startReply(option._replyIndex); Resources::Speech *speech = _currentReply->getCurrentSpeech(); if (speech) { StarkDiary->logSpeech(speech->getPhrase(), speech->getCharacterId()); _speechReady = true; } else { onReplyEnd(); } break; } default: error("Unhandled option type %d", option._type); } }
void GameInterface::skipCurrentSpeeches() { Current *current = StarkGlobal->getCurrent(); if (!current) { return; // No current location, nothing to do } // Get all speeches Common::Array<Resources::Speech *> speeches; speeches.push_back(StarkGlobal->getLevel()->listChildrenRecursive<Resources::Speech>()); speeches.push_back(current->getLevel()->listChildrenRecursive<Resources::Speech>()); speeches.push_back(current->getLocation()->listChildrenRecursive<Resources::Speech>()); // Stop them for (uint i = 0; i < speeches.size(); i++) { Resources::Speech *speech = speeches[i]; if (speech->isPlaying()) { speech->stop(); } } }