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

Function post

src/OpenLoco/src/MessageManager.cpp:45–437  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

43 void setActiveIndex(const MessageId newIndex) { getGameState().activeMessageIndex = newIndex; }
44
45 void post(
46 MessageType type,
47 CompanyId companyId,
48 uint16_t subjectIdA,
49 uint16_t subjectIdB,
50 uint16_t subjectIdC)
51 {
52 Message newMessage{};
53 newMessage.companyId = companyId;
54 newMessage.type = type;
55 newMessage.date = getCurrentDay();
56 newMessage.itemSubjects[0] = subjectIdA;
57 newMessage.itemSubjects[1] = subjectIdB;
58 newMessage.itemSubjects[2] = subjectIdC;
59
60 // Don't add the message if a seemingly identical message is present
61 // Note that Message::operator== isn't quite structural equality, company id is ignored
62 if (getMessageTypeDescriptor(type).hasFlag(MessageTypeFlags::shouldDedup))
63 {
64 for (auto i = 0; i < getNumMessages(); ++i)
65 {
66 auto& message = rawMessages()[i];
67 if (message == newMessage)
68 {
69 return;
70 }
71 }
72 }
73
74 if (getNumMessages() >= Limits::kMaxMessages)
75 {
76 MessageId oldestMessage = MessageId::null;
77 int32_t oldest = -1;
78 for (auto i = 0; i < getNumMessages(); ++i)
79 {
80 auto& message = rawMessages()[i];
81 if (message.timeActive != 0)
82 {
83 const int32_t age = getMessageTypeDescriptor(message.type).duration + message.date - getCurrentDay();
84 if (age > oldest)
85 {
86 oldest = age;
87 oldestMessage = static_cast<MessageId>(i);
88 }
89 }
90 }
91 // Nothing found so now search for messages that are active
92 if (oldest == -1)
93 {
94 for (auto i = 0; i < getNumMessages(); ++i)
95 {
96 auto& message = rawMessages()[i];
97
98 const int32_t age = getMessageTypeDescriptor(message.type).duration + message.date - getCurrentDay();
99 if (age > oldest)
100 {
101 oldest = age;
102 oldestMessage = static_cast<MessageId>(i);

Callers 14

updateMonthlyMethod · 0.85
updateMonthly1Method · 0.85
sub_430F87Function · 0.85
updateYearly2Function · 0.85
sub_4A9348Method · 0.85
updateLoadCargoMethod · 0.85
updateMethod · 0.85
destroyTrainMethod · 0.85

Calls 15

getCurrentDayFunction · 0.85
getNumMessagesFunction · 0.85
beginFunction · 0.85
endFunction · 0.85
setNumMessagesFunction · 0.85
formatStringFunction · 0.85
enumValueFunction · 0.85
locoStrlenFunction · 0.85
removeFunction · 0.70
getFunction · 0.70
invalidateFunction · 0.70

Tested by

no test coverage detected