/** Delete a news item from the queue */ static void DeleteNewsItem(NewsItem *ni) { /* Delete the news from the news queue. */ if (ni->prev != NULL) { ni->prev->next = ni->next; } else { assert(_oldest_news == ni); _oldest_news = ni->next; } if (ni->next != NULL) { ni->next->prev = ni->prev; } else { assert(_latest_news == ni); _latest_news = ni->prev; } _total_news--; if (_forced_news == ni || _current_news == ni || _statusbar_news_item == ni) { /* When we're the current news, go to the previous item first; * we just possibly made that the last news item. */ if (_current_news == ni) _current_news = ni->prev; /* About to remove the currently forced item (shown as newspapers) || * about to remove the currently displayed item (newspapers, ticker, or just a reminder) */ MoveToNextItem(); } delete ni; SetWindowDirty(WC_MESSAGE_HISTORY, 0); }
/** Delete a news item from the queue */ static void DeleteNewsItem(NewsItem *ni) { if (_forced_news == ni || _current_news == ni) { /* about to remove the currently forced item (shown as newspapers) || * about to remove the currently displayed item (newspapers, ticker, or just a reminder) */ MoveToNextItem(); } /* delete item */ if (ni->prev != NULL) { ni->prev->next = ni->next; } else { assert(_oldest_news == ni); _oldest_news = ni->next; } if (ni->next != NULL) { ni->next->prev = ni->prev; } else { assert(_latest_news == ni); _latest_news = ni->prev; } if (_current_news == ni) _current_news = ni->prev; _total_news--; delete ni; SetWindowDirty(WC_MESSAGE_HISTORY, 0); }
void NewsLoop() { /* no news item yet */ if (_total_news == 0) return; /* There is no status bar, so no reason to show news; * especially important with the end game screen when * there is no status bar but possible news. */ if (FindWindowById(WC_STATUS_BAR, 0) == NULL) return; static byte _last_clean_month = 0; if (_last_clean_month != _cur_month) { RemoveOldNewsItems(); _last_clean_month = _cur_month; } if (ReadyForNextItem()) MoveToNextItem(); }