1 /*****************************************************************************
2  * Copyright (c) 2014-2020 OpenRCT2 developers
3  *
4  * For a complete list of all authors, please refer to contributors.md
5  * Interested in contributing? Visit https://github.com/OpenRCT2/OpenRCT2
6  *
7  * OpenRCT2 is licensed under the GNU General Public License version 3.
8  *****************************************************************************/
9 
10 #pragma once
11 
12 #include "../Cheats.h"
13 #include "../common.h"
14 #include "../ride/RideTypes.h"
15 #include "../ride/ShopItem.h"
16 
17 #include <vector>
18 
19 struct Guest;
20 
21 enum
22 {
23     ADVERTISING_CAMPAIGN_PARK_ENTRY_FREE,
24     ADVERTISING_CAMPAIGN_RIDE_FREE,
25     ADVERTISING_CAMPAIGN_PARK_ENTRY_HALF_PRICE,
26     ADVERTISING_CAMPAIGN_FOOD_OR_DRINK_FREE,
27     ADVERTISING_CAMPAIGN_PARK,
28     ADVERTISING_CAMPAIGN_RIDE,
29     ADVERTISING_CAMPAIGN_COUNT
30 };
31 
32 enum
33 {
34     VOUCHER_TYPE_PARK_ENTRY_FREE,
35     VOUCHER_TYPE_RIDE_FREE,
36     VOUCHER_TYPE_PARK_ENTRY_HALF_PRICE,
37     VOUCHER_TYPE_FOOD_OR_DRINK_FREE,
38 };
39 
40 enum
41 {
42     CAMPAIGN_FIRST_WEEK_FLAG = (1 << 6),
43     CAMPAIGN_ACTIVE_FLAG = (1 << 7)
44 };
45 
46 struct MarketingCampaign
47 {
48     uint8_t Type{};
49     uint8_t WeeksLeft{};
50     uint8_t Flags{};
51     union
52     {
53         ride_id_t RideId{};
54         ShopItemIndex ShopItemType;
55     };
56 };
57 
58 namespace MarketingCampaignFlags
59 {
60     constexpr uint8_t FIRST_WEEK = 1 << 0;
61 }
62 
63 extern const money16 AdvertisingCampaignPricePerWeek[ADVERTISING_CAMPAIGN_COUNT];
64 extern std::vector<MarketingCampaign> gMarketingCampaigns;
65 
66 uint16_t marketing_get_campaign_guest_generation_probability(int32_t campaign);
67 void marketing_update();
68 void marketing_set_guest_campaign(Guest* peep, int32_t campaign);
69 bool marketing_is_campaign_type_applicable(int32_t campaignType);
70 MarketingCampaign* marketing_get_campaign(int32_t campaignType);
71 void marketing_new_campaign(const MarketingCampaign& campaign);
72 void MarketingCancelCampaignsForRide(const ride_id_t rideId);
73