MCPcopy Create free account
hub / github.com/OpenLoco/OpenLoco / sub_428E47

Function sub_428E47

src/OpenLoco/src/MessageManager.cpp:538–621  ·  view source on GitHub ↗

0x00428E47

Source from the content-addressed store, hash-verified

536
537 // 0x00428E47
538 void sub_428E47()
539 {
540 if (SceneManager::isTitleMode())
541 {
542 return;
543 }
544
545 auto* newsWnd = Ui::WindowManager::find(Ui::WindowType::news);
546 if (newsWnd == nullptr)
547 {
548 const auto messageId = getActiveHighestPriority();
549 if (messageId != MessageId::null)
550 {
551 Ui::Windows::NewsWindow::open(messageId);
552 }
553 }
554 else
555 {
556 if (getActiveIndex() == MessageId::null)
557 {
558 clearActiveMessage();
559 return;
560 }
561 const auto messageId = getActiveHighestPriority();
562 if (messageId != MessageId::null && messageId != getActiveIndex())
563 {
564 Ui::WindowManager::close(Ui::WindowType::news);
565 setActiveIndex(MessageId::null);
566 Ui::Windows::NewsWindow::open(messageId);
567 return;
568 }
569
570 auto* message = get(messageId);
571 if (message == nullptr)
572 {
573 return;
574 }
575 message->timeActive++;
576
577 const auto numWaitingMessages = getNumMessages() - enumValue(getActiveIndex());
578 uint16_t time = 0;
579 switch (numWaitingMessages)
580 {
581 case 0:
582 time = 480;
583 break;
584 case 1:
585 case 2:
586 time = 384;
587 break;
588 case 3:
589 case 4:
590 time = 320;
591 break;
592 default:
593 time = 288;
594 break;
595 }

Callers 1

sub_431695Function · 0.85

Calls 12

isTitleModeFunction · 0.85
findFunction · 0.85
getActiveHighestPriorityFunction · 0.85
getActiveIndexFunction · 0.85
clearActiveMessageFunction · 0.85
setActiveIndexFunction · 0.85
getNumMessagesFunction · 0.85
enumValueFunction · 0.85
getGameSpeedFunction · 0.85
getFunction · 0.70
openFunction · 0.50
closeFunction · 0.50

Tested by

no test coverage detected