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:
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user