1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2026-01-04 13:42:55 +01:00

Move importing news items to function

This commit is contained in:
Gymnasiast
2025-03-18 21:50:39 +01:00
parent fff481328b
commit d93de5c5b1
3 changed files with 30 additions and 14 deletions

View File

@@ -484,3 +484,23 @@ void News::RemoveItem(int32_t index)
}
gameState.NewsItems[newsBoundary - 1].Type = News::ItemType::Null;
}
void News::importNewsItems(
GameState_t& gameState, const std::vector<News::Item>& recent, const std::vector<News::Item>& archived)
{
gameState.NewsItems.Clear();
for (size_t i = 0; i < std::min<size_t>(recent.size(), News::ItemHistoryStart); i++)
{
gameState.NewsItems[i] = recent[i];
}
size_t offset = News::ItemHistoryStart;
for (size_t i = 0; i < std::min<size_t>(archived.size(), News::MaxItemsArchive); i++)
{
gameState.NewsItems[offset + i] = archived[i];
}
// Still need to set the correct type to properly terminate the queue
if (archived.size() < News::MaxItemsArchive)
gameState.NewsItems[offset + archived.size()].Type = News::ItemType::Null;
}

View File

@@ -18,10 +18,16 @@
#include <iterator>
#include <optional>
#include <string>
#include <vector>
struct CoordsXYZ;
class Formatter;
namespace OpenRCT2
{
struct GameState_t;
}
namespace OpenRCT2::News
{
enum class ItemType : uint8_t
@@ -315,4 +321,7 @@ namespace OpenRCT2::News
void AddItemToQueue(News::Item* newNewsItem);
void RemoveItem(int32_t index);
void importNewsItems(
GameState_t& gameState, const std::vector<News::Item>& recent, const std::vector<News::Item>& archived);
} // namespace OpenRCT2::News

View File

@@ -1129,26 +1129,13 @@ namespace OpenRCT2
os.ReadWriteChunk(ParkFileChunkType::NOTIFICATIONS, [&gameState](OrcaStream::ChunkStream& cs) {
if (cs.GetMode() == OrcaStream::Mode::READING)
{
gameState.NewsItems.Clear();
std::vector<News::Item> recent;
cs.ReadWriteVector(recent, [&cs](News::Item& item) { ReadWriteNewsItem(cs, item); });
for (size_t i = 0; i < std::min<size_t>(recent.size(), News::ItemHistoryStart); i++)
{
gameState.NewsItems[i] = recent[i];
}
std::vector<News::Item> archived;
cs.ReadWriteVector(archived, [&cs](News::Item& item) { ReadWriteNewsItem(cs, item); });
size_t offset = News::ItemHistoryStart;
for (size_t i = 0; i < std::min<size_t>(archived.size(), News::MaxItemsArchive); i++)
{
gameState.NewsItems[offset + i] = archived[i];
}
// Still need to set the correct type to properly terminate the queue
if (archived.size() < News::MaxItemsArchive)
gameState.NewsItems[offset + archived.size()].Type = News::ItemType::Null;
News::importNewsItems(gameState, recent, archived);
}
else
{