| 2545 | } |
| 2546 | |
| 2547 | void Player::queueRadioMessage(Json const& messageConfig, float delay) { |
| 2548 | RadioMessage message; |
| 2549 | try { |
| 2550 | message = Root::singleton().radioMessageDatabase()->createRadioMessage(messageConfig); |
| 2551 | |
| 2552 | if (message.type == RadioMessageType::Tutorial && !Root::singleton().configuration()->get("tutorialMessages").toBool()) |
| 2553 | return; |
| 2554 | |
| 2555 | // non-absolute portrait image paths are assumed to be a frame name within the player's species-specific AI |
| 2556 | if (!message.portraitImage.empty() && message.portraitImage[0] != '/') |
| 2557 | message.portraitImage = Root::singleton().aiDatabase()->portraitImage(species(), message.portraitImage); |
| 2558 | } catch (RadioMessageDatabaseException const& e) { |
| 2559 | Logger::error("Couldn't queue radio message '{}': {}", messageConfig, e.what()); |
| 2560 | return; |
| 2561 | } |
| 2562 | |
| 2563 | if (m_log->radioMessages().contains(message.messageId)) { |
| 2564 | return; |
| 2565 | } else { |
| 2566 | if (message.type == RadioMessageType::Mission) { |
| 2567 | if (m_missionRadioMessages.contains(message.messageId)) |
| 2568 | return; |
| 2569 | else |
| 2570 | m_missionRadioMessages.add(message.messageId); |
| 2571 | } |
| 2572 | |
| 2573 | for (RadioMessage const& pendingMessage : m_pendingRadioMessages) { |
| 2574 | if (pendingMessage.messageId == message.messageId) |
| 2575 | return; |
| 2576 | } |
| 2577 | for (auto& delayedMessagePair : m_delayedRadioMessages) { |
| 2578 | if (delayedMessagePair.second.messageId == message.messageId) { |
| 2579 | if (delay == 0) |
| 2580 | delayedMessagePair.first.setDone(); |
| 2581 | return; |
| 2582 | } |
| 2583 | } |
| 2584 | } |
| 2585 | |
| 2586 | if (delay > 0) { |
| 2587 | m_delayedRadioMessages.append(pair<GameTimer, RadioMessage>{GameTimer(delay), message}); |
| 2588 | } else { |
| 2589 | queueRadioMessage(message); |
| 2590 | } |
| 2591 | } |
| 2592 | |
| 2593 | void Player::queueRadioMessage(RadioMessage message) { |
| 2594 | if (message.important) { |
no test coverage detected