From 8468f87a87d1d5a611b1a7dbd7e72f7bc8e7ba66 Mon Sep 17 00:00:00 2001 From: Gymnasiast Date: Wed, 2 Jul 2025 19:58:07 +0200 Subject: [PATCH] Refactor MarketingCampaignFlags into a FlagHolder --- src/openrct2/actions/ParkMarketingAction.cpp | 2 +- src/openrct2/management/Marketing.cpp | 4 ++-- src/openrct2/management/Marketing.h | 17 +++++++++++------ src/openrct2/park/ParkFile.cpp | 2 +- src/openrct2/rct2/S6Importer.cpp | 2 +- 5 files changed, 16 insertions(+), 11 deletions(-) diff --git a/src/openrct2/actions/ParkMarketingAction.cpp b/src/openrct2/actions/ParkMarketingAction.cpp index 42b031a160..7f65053aeb 100644 --- a/src/openrct2/actions/ParkMarketingAction.cpp +++ b/src/openrct2/actions/ParkMarketingAction.cpp @@ -70,7 +70,7 @@ GameActions::Result ParkMarketingAction::Execute() const MarketingCampaign campaign{}; campaign.Type = _type; campaign.WeeksLeft = _numWeeks; - campaign.Flags = MarketingCampaignFlags::FIRST_WEEK; + campaign.flags = { MarketingCampaignFlag::firstWeek }; if (campaign.Type == ADVERTISING_CAMPAIGN_RIDE_FREE || campaign.Type == ADVERTISING_CAMPAIGN_RIDE) { campaign.RideId = RideId::FromUnderlying(_item); diff --git a/src/openrct2/management/Marketing.cpp b/src/openrct2/management/Marketing.cpp index a424935ebe..12163d7b6e 100644 --- a/src/openrct2/management/Marketing.cpp +++ b/src/openrct2/management/Marketing.cpp @@ -120,11 +120,11 @@ void MarketingUpdate() for (auto it = gameState.marketingCampaigns.begin(); it != gameState.marketingCampaigns.end();) { auto& campaign = *it; - if (campaign.Flags & MarketingCampaignFlags::FIRST_WEEK) + if (campaign.flags.has(MarketingCampaignFlag::firstWeek)) { // This ensures the campaign is active for x full weeks if started within the // middle of a week. - campaign.Flags &= ~MarketingCampaignFlags::FIRST_WEEK; + campaign.flags.unset(MarketingCampaignFlag::firstWeek); } else if (campaign.WeeksLeft > 0) { diff --git a/src/openrct2/management/Marketing.h b/src/openrct2/management/Marketing.h index c56cc83729..3f1e4595ec 100644 --- a/src/openrct2/management/Marketing.h +++ b/src/openrct2/management/Marketing.h @@ -10,6 +10,7 @@ #pragma once #include "../Cheats.h" +#include "../core/FlagHolder.hpp" #include "../localisation/StringIdType.h" #include "../ride/RideTypes.h" #include "../ride/ShopItem.h" @@ -41,11 +42,20 @@ enum CAMPAIGN_ACTIVE_FLAG = (1 << 7) }; +namespace OpenRCT2 +{ + enum class MarketingCampaignFlag : uint8_t + { + firstWeek, + }; + using MarketingCampaignFlags = FlagHolder; +} // namespace OpenRCT2 + struct MarketingCampaign { uint8_t Type{}; uint8_t WeeksLeft{}; - uint8_t Flags{}; + OpenRCT2::MarketingCampaignFlags flags{}; union { ::RideId RideId{}; @@ -53,11 +63,6 @@ struct MarketingCampaign }; }; -namespace OpenRCT2::MarketingCampaignFlags -{ - constexpr uint8_t FIRST_WEEK = 1 << 0; -} - extern const money64 AdvertisingCampaignPricePerWeek[ADVERTISING_CAMPAIGN_COUNT]; extern const StringId kMarketingCampaignNames[ADVERTISING_CAMPAIGN_COUNT][3]; diff --git a/src/openrct2/park/ParkFile.cpp b/src/openrct2/park/ParkFile.cpp index 33178d2f6d..9f06105455 100644 --- a/src/openrct2/park/ParkFile.cpp +++ b/src/openrct2/park/ParkFile.cpp @@ -947,7 +947,7 @@ namespace OpenRCT2 cs.ReadWriteVector(gameState.marketingCampaigns, [&cs](MarketingCampaign& campaign) { cs.ReadWrite(campaign.Type); cs.ReadWrite(campaign.WeeksLeft); - cs.ReadWrite(campaign.Flags); + cs.ReadWrite(campaign.flags.holder); cs.ReadWrite(campaign.RideId); }); diff --git a/src/openrct2/rct2/S6Importer.cpp b/src/openrct2/rct2/S6Importer.cpp index bcc19d661c..3ddde3620f 100644 --- a/src/openrct2/rct2/S6Importer.cpp +++ b/src/openrct2/rct2/S6Importer.cpp @@ -1615,7 +1615,7 @@ namespace OpenRCT2::RCT2 campaign.WeeksLeft = _s6.CampaignWeeksLeft[i] & ~(CAMPAIGN_ACTIVE_FLAG | CAMPAIGN_FIRST_WEEK_FLAG); if ((_s6.CampaignWeeksLeft[i] & CAMPAIGN_FIRST_WEEK_FLAG) != 0) { - campaign.Flags |= MarketingCampaignFlags::FIRST_WEEK; + campaign.flags.set(MarketingCampaignFlag::firstWeek); } if (campaign.Type == ADVERTISING_CAMPAIGN_RIDE_FREE || campaign.Type == ADVERTISING_CAMPAIGN_RIDE) {