From a88f02fdb2ec9b039c31b52614143e761cc1906e Mon Sep 17 00:00:00 2001 From: hdpoliveira Date: Mon, 11 May 2020 00:38:01 -0300 Subject: [PATCH] Create operator[] in NewsItemQueue --- src/openrct2/management/NewsItem.cpp | 15 ++++++++++----- src/openrct2/management/NewsItem.h | 5 ++++- src/openrct2/rct1/S4Importer.cpp | 2 +- src/openrct2/rct2/S6Exporter.cpp | 2 +- src/openrct2/rct2/S6Importer.cpp | 2 +- 5 files changed, 17 insertions(+), 9 deletions(-) diff --git a/src/openrct2/management/NewsItem.cpp b/src/openrct2/management/NewsItem.cpp index 10d5864d2c..97374b6ced 100644 --- a/src/openrct2/management/NewsItem.cpp +++ b/src/openrct2/management/NewsItem.cpp @@ -23,7 +23,7 @@ #include "../windows/Intent.h" #include "../world/Sprite.h" -static NewsItemQueue gNewsItems; +NewsItemQueue gNewsItems; /** rct2: 0x0097BE7C */ const uint8_t news_type_properties[] = { @@ -54,14 +54,19 @@ NewsItem* news_item_get(int32_t index) return gNewsItems.At(index); } +NewsItem& NewsItemQueue::operator[](size_t index) +{ + if (index < MAX_RECENT_NEWS_ITEMS) + return Recent[index]; + else + return Old[index - MAX_RECENT_NEWS_ITEMS]; +} + NewsItem* NewsItemQueue::At(int32_t index) { if (news_item_is_valid_idx(index)) { - if (index < MAX_RECENT_NEWS_ITEMS) - return &Recent[index]; - else - return &Old[index - MAX_RECENT_NEWS_ITEMS]; + return &(*this)[index]; } else { diff --git a/src/openrct2/management/NewsItem.h b/src/openrct2/management/NewsItem.h index e41d20e2e8..3f9bb24dc0 100644 --- a/src/openrct2/management/NewsItem.h +++ b/src/openrct2/management/NewsItem.h @@ -63,8 +63,11 @@ constexpr int32_t MAX_RECENT_NEWS_ITEMS = 11; constexpr int32_t MAX_OLD_NEWS_ITEMS = 50; constexpr int32_t MAX_NEWS_ITEMS = MAX_RECENT_NEWS_ITEMS + MAX_OLD_NEWS_ITEMS; +extern const uint8_t news_type_properties[10]; + struct NewsItemQueue { + NewsItem& operator[](size_t index); NewsItem* At(int32_t index); bool IsEmpty() const; void Init(); @@ -117,7 +120,7 @@ private: NewsItem Old[MAX_OLD_NEWS_ITEMS]; }; -extern const uint8_t news_type_properties[10]; +extern NewsItemQueue gNewsItems; void news_item_init_queue(); diff --git a/src/openrct2/rct1/S4Importer.cpp b/src/openrct2/rct1/S4Importer.cpp index bfc80418b5..ba7dd3b95e 100644 --- a/src/openrct2/rct1/S4Importer.cpp +++ b/src/openrct2/rct1/S4Importer.cpp @@ -2531,7 +2531,7 @@ private: for (size_t i = 0; i < RCT12_MAX_NEWS_ITEMS; i++) { const rct12_news_item* src = &_s4.messages[i]; - NewsItem* dst = news_item_get(static_cast(i)); + NewsItem* dst = &gNewsItems[i]; dst->Type = src->Type; dst->Flags = src->Flags; diff --git a/src/openrct2/rct2/S6Exporter.cpp b/src/openrct2/rct2/S6Exporter.cpp index ebb676e20e..0479a8a152 100644 --- a/src/openrct2/rct2/S6Exporter.cpp +++ b/src/openrct2/rct2/S6Exporter.cpp @@ -399,7 +399,7 @@ void S6Exporter::Export() // News items for (size_t i = 0; i < RCT12_MAX_NEWS_ITEMS; i++) { - const NewsItem* src = news_item_get(static_cast(i)); + const NewsItem* src = &gNewsItems[i]; rct12_news_item* dst = &_s6.news_items[i]; dst->Type = src->Type; diff --git a/src/openrct2/rct2/S6Importer.cpp b/src/openrct2/rct2/S6Importer.cpp index 0f604d1d97..eed88c0408 100644 --- a/src/openrct2/rct2/S6Importer.cpp +++ b/src/openrct2/rct2/S6Importer.cpp @@ -419,7 +419,7 @@ public: for (size_t i = 0; i < RCT12_MAX_NEWS_ITEMS; i++) { const rct12_news_item* src = &_s6.news_items[i]; - NewsItem* dst = news_item_get(static_cast(i)); + NewsItem* dst = &gNewsItems[i]; if (src->Type < std::size(news_type_properties)) { dst->Type = src->Type;