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