1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2025-12-10 09:32:29 +01:00

Refactor MarketingCampaignFlags into a FlagHolder

This commit is contained in:
Gymnasiast
2025-07-02 19:58:07 +02:00
parent 600a65b5bf
commit 8468f87a87
5 changed files with 16 additions and 11 deletions

View File

@@ -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);

View File

@@ -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)
{

View File

@@ -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<uint8_t, MarketingCampaignFlag>;
} // 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];

View File

@@ -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);
});

View File

@@ -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)
{