2014-08-11 02:09:17 +02:00
|
|
|
/*****************************************************************************
|
2019-03-17 08:16:15 +01:00
|
|
|
* Copyright (c) 2014-2019 OpenRCT2 developers
|
2014-08-11 02:09:17 +02:00
|
|
|
*
|
2018-06-15 14:07:34 +02:00
|
|
|
* For a complete list of all authors, please refer to contributors.md
|
|
|
|
* Interested in contributing? Visit https://github.com/OpenRCT2/OpenRCT2
|
2014-08-11 02:09:17 +02:00
|
|
|
*
|
2018-06-15 14:07:34 +02:00
|
|
|
* OpenRCT2 is licensed under the GNU General Public License version 3.
|
2014-08-11 02:09:17 +02:00
|
|
|
*****************************************************************************/
|
|
|
|
|
2018-08-12 13:50:40 +02:00
|
|
|
#include <algorithm>
|
2018-06-22 23:21:44 +02:00
|
|
|
#include <openrct2-ui/interface/Dropdown.h>
|
|
|
|
#include <openrct2-ui/interface/Widget.h>
|
|
|
|
#include <openrct2-ui/windows/Window.h>
|
|
|
|
#include <openrct2/Game.h>
|
2018-05-14 19:21:43 +02:00
|
|
|
#include <openrct2/actions/ParkMarketingAction.hpp>
|
2017-09-06 16:09:35 +02:00
|
|
|
#include <openrct2/config/Config.h>
|
2018-05-14 19:21:43 +02:00
|
|
|
#include <openrct2/drawing/Drawing.h>
|
2018-01-06 18:32:25 +01:00
|
|
|
#include <openrct2/localisation/Localisation.h>
|
2017-12-31 13:21:34 +01:00
|
|
|
#include <openrct2/ride/Ride.h>
|
2018-01-10 00:00:09 +01:00
|
|
|
#include <openrct2/ride/RideData.h>
|
2018-05-14 19:21:43 +02:00
|
|
|
#include <openrct2/ride/ShopItem.h>
|
2014-08-12 01:27:25 +02:00
|
|
|
|
2018-06-20 17:28:51 +02:00
|
|
|
#define SELECTED_RIDE_UNDEFINED ((uint16_t)0xFFFF)
|
2014-08-12 01:27:25 +02:00
|
|
|
|
2018-05-16 20:41:29 +02:00
|
|
|
// clang-format off
|
2014-08-12 01:27:25 +02:00
|
|
|
enum WINDOW_NEW_CAMPAIGN_WIDGET_IDX {
|
2017-06-06 23:24:18 +02:00
|
|
|
WIDX_BACKGROUND,
|
|
|
|
WIDX_TITLE,
|
|
|
|
WIDX_CLOSE,
|
|
|
|
WIDX_RIDE_LABEL,
|
|
|
|
WIDX_RIDE_DROPDOWN,
|
|
|
|
WIDX_RIDE_DROPDOWN_BUTTON,
|
|
|
|
WIDX_WEEKS_LABEL,
|
|
|
|
WIDX_WEEKS_SPINNER,
|
|
|
|
WIDX_WEEKS_INCREASE_BUTTON,
|
|
|
|
WIDX_WEEKS_DECREASE_BUTTON,
|
|
|
|
WIDX_START_BUTTON
|
2014-08-12 01:27:25 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
static rct_widget window_new_campaign_widgets[] = {
|
2017-06-06 23:24:18 +02:00
|
|
|
{ WWT_FRAME, 0, 0, 349, 0, 106, 0xFFFFFFFF, STR_NONE }, // panel / background
|
|
|
|
{ WWT_CAPTION, 0, 1, 348, 1, 14, 0, STR_WINDOW_TITLE_TIP }, // title bar
|
|
|
|
{ WWT_CLOSEBOX, 0, 337, 347, 2, 13, STR_CLOSE_X, STR_CLOSE_WINDOW_TIP }, // close x button
|
2018-05-04 10:45:14 +02:00
|
|
|
{ WWT_LABEL, 0, 14, 139, 24, 35, 0, STR_NONE }, // ride label
|
2017-06-06 23:24:18 +02:00
|
|
|
{ WWT_DROPDOWN, 0, 100, 341, 24, 35, 0, STR_NONE }, // ride dropdown
|
2018-01-03 20:30:58 +01:00
|
|
|
{ WWT_BUTTON, 0, 330, 340, 25, 34, STR_DROPDOWN_GLYPH, STR_NONE }, // ride dropdown button
|
2018-05-04 10:45:14 +02:00
|
|
|
{ WWT_LABEL, 0, 14, 139, 41, 52, STR_LENGTH_OF_TIME, STR_NONE }, // weeks label
|
2018-06-10 21:31:08 +02:00
|
|
|
SPINNER_WIDGETS (0, 120, 219, 41, 52, 0, STR_NONE), // weeks (3 widgets)
|
2018-01-03 20:30:58 +01:00
|
|
|
{ WWT_BUTTON, 0, 14, 335, 89, 100, STR_MARKETING_START_THIS_MARKETING_CAMPAIGN, STR_NONE }, // start button
|
2017-06-06 23:24:18 +02:00
|
|
|
{ WIDGETS_END }
|
2014-08-12 01:27:25 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
|
2017-05-01 15:41:45 +02:00
|
|
|
static void window_new_campaign_mouseup(rct_window *w, rct_widgetindex widgetIndex);
|
2017-07-03 23:09:46 +02:00
|
|
|
static void window_new_campaign_mousedown(rct_window *w, rct_widgetindex widgetIndex, rct_widget* widget);
|
2018-06-20 17:28:51 +02:00
|
|
|
static void window_new_campaign_dropdown(rct_window *w, rct_widgetindex widgetIndex, int32_t dropdownIndex);
|
2015-07-10 02:39:16 +02:00
|
|
|
static void window_new_campaign_invalidate(rct_window *w);
|
|
|
|
static void window_new_campaign_paint(rct_window *w, rct_drawpixelinfo *dpi);
|
2014-08-12 01:27:25 +02:00
|
|
|
|
2015-07-10 02:39:16 +02:00
|
|
|
static rct_window_event_list window_new_campaign_events = {
|
2017-08-15 10:07:44 +02:00
|
|
|
nullptr,
|
2017-06-06 23:24:18 +02:00
|
|
|
window_new_campaign_mouseup,
|
2017-08-15 10:07:44 +02:00
|
|
|
nullptr,
|
2017-06-06 23:24:18 +02:00
|
|
|
window_new_campaign_mousedown,
|
|
|
|
window_new_campaign_dropdown,
|
2017-08-15 10:07:44 +02:00
|
|
|
nullptr,
|
|
|
|
nullptr,
|
|
|
|
nullptr,
|
|
|
|
nullptr,
|
|
|
|
nullptr,
|
|
|
|
nullptr,
|
|
|
|
nullptr,
|
|
|
|
nullptr,
|
|
|
|
nullptr,
|
|
|
|
nullptr,
|
|
|
|
nullptr,
|
|
|
|
nullptr,
|
|
|
|
nullptr,
|
|
|
|
nullptr,
|
|
|
|
nullptr,
|
|
|
|
nullptr,
|
|
|
|
nullptr,
|
|
|
|
nullptr,
|
|
|
|
nullptr,
|
|
|
|
nullptr,
|
2017-06-06 23:24:18 +02:00
|
|
|
window_new_campaign_invalidate,
|
|
|
|
window_new_campaign_paint,
|
2017-08-15 10:07:44 +02:00
|
|
|
nullptr
|
2014-08-12 01:27:25 +02:00
|
|
|
};
|
2018-05-16 20:41:29 +02:00
|
|
|
// clang-format on
|
2014-08-12 01:27:25 +02:00
|
|
|
|
2019-08-03 18:27:50 +02:00
|
|
|
static std::vector<ride_id_t> window_new_campaign_rides;
|
2018-06-20 17:28:51 +02:00
|
|
|
static uint8_t window_new_campaign_shop_items[64];
|
2014-08-12 01:27:25 +02:00
|
|
|
|
2018-06-22 23:21:44 +02:00
|
|
|
static int32_t ride_value_compare(const void* a, const void* b)
|
2014-08-12 01:27:25 +02:00
|
|
|
{
|
2017-09-12 11:16:57 +02:00
|
|
|
Ride *rideA, *rideB;
|
2014-08-12 01:27:25 +02:00
|
|
|
|
2018-06-20 17:28:51 +02:00
|
|
|
rideA = get_ride(*((uint8_t*)a));
|
|
|
|
rideB = get_ride(*((uint8_t*)b));
|
2017-06-06 23:24:18 +02:00
|
|
|
return rideB->value - rideA->value;
|
2014-08-12 01:27:25 +02:00
|
|
|
}
|
|
|
|
|
2018-06-22 23:21:44 +02:00
|
|
|
static int32_t ride_name_compare(const void* a, const void* b)
|
2014-08-12 01:27:25 +02:00
|
|
|
{
|
2019-07-21 02:28:33 +02:00
|
|
|
auto rideA = get_ride(*((uint8_t*)a));
|
|
|
|
auto rideB = get_ride(*((uint8_t*)b));
|
|
|
|
auto rideAName = rideA->GetName();
|
|
|
|
auto rideBName = rideB->GetName();
|
|
|
|
return _strcmpi(rideAName.c_str(), rideBName.c_str());
|
2014-08-12 01:27:25 +02:00
|
|
|
}
|
2014-08-11 02:09:17 +02:00
|
|
|
|
|
|
|
/**
|
2015-10-20 20:16:30 +02:00
|
|
|
*
|
2014-08-11 02:09:17 +02:00
|
|
|
* rct2: 0x0069E16F
|
|
|
|
*/
|
2018-06-22 23:21:44 +02:00
|
|
|
rct_window* window_new_campaign_open(int16_t campaignType)
|
2014-08-11 02:09:17 +02:00
|
|
|
{
|
2019-08-03 18:27:50 +02:00
|
|
|
auto w = window_bring_to_front_by_class(WC_NEW_CAMPAIGN);
|
2018-06-22 23:21:44 +02:00
|
|
|
if (w != nullptr)
|
|
|
|
{
|
2017-06-06 23:24:18 +02:00
|
|
|
if (w->campaign.campaign_type == campaignType)
|
2017-09-06 16:09:35 +02:00
|
|
|
return w;
|
2017-06-06 23:24:18 +02:00
|
|
|
|
|
|
|
window_close(w);
|
|
|
|
}
|
|
|
|
|
|
|
|
w = window_create_auto_pos(350, 107, &window_new_campaign_events, WC_NEW_CAMPAIGN, 0);
|
|
|
|
w->widgets = window_new_campaign_widgets;
|
2018-06-22 23:21:44 +02:00
|
|
|
w->enabled_widgets = (1 << WIDX_CLOSE) | (1 << WIDX_RIDE_DROPDOWN) | (1 << WIDX_RIDE_DROPDOWN_BUTTON)
|
|
|
|
| (1 << WIDX_WEEKS_INCREASE_BUTTON) | (1 << WIDX_WEEKS_DECREASE_BUTTON) | (1 << WIDX_START_BUTTON);
|
|
|
|
w->hold_down_widgets = (1 << WIDX_WEEKS_INCREASE_BUTTON) | (1 << WIDX_WEEKS_DECREASE_BUTTON);
|
2017-06-06 23:24:18 +02:00
|
|
|
window_init_scroll_widgets(w);
|
|
|
|
|
|
|
|
window_new_campaign_widgets[WIDX_TITLE].text = MarketingCampaignNames[campaignType][0];
|
|
|
|
|
|
|
|
// Campaign type
|
|
|
|
w->campaign.campaign_type = campaignType;
|
|
|
|
|
|
|
|
// Number of weeks
|
|
|
|
w->campaign.no_weeks = 2;
|
|
|
|
|
|
|
|
// Currently selected ride
|
|
|
|
w->campaign.ride_id = SELECTED_RIDE_UNDEFINED;
|
|
|
|
|
|
|
|
// Get all applicable rides
|
2019-08-03 18:27:50 +02:00
|
|
|
window_new_campaign_rides.clear();
|
|
|
|
for (const auto& ride : GetRideManager())
|
2017-07-29 10:44:51 +02:00
|
|
|
{
|
2019-08-03 18:27:50 +02:00
|
|
|
if (ride.status == RIDE_STATUS_OPEN)
|
2017-07-29 10:44:51 +02:00
|
|
|
{
|
2019-08-03 18:27:50 +02:00
|
|
|
if (!ride_type_has_flag(
|
|
|
|
ride.type,
|
|
|
|
RIDE_TYPE_FLAG_IS_SHOP | RIDE_TYPE_FLAG_SELLS_FOOD | RIDE_TYPE_FLAG_SELLS_DRINKS
|
|
|
|
| RIDE_TYPE_FLAG_IS_BATHROOM))
|
|
|
|
{
|
|
|
|
window_new_campaign_rides.push_back(ride.id);
|
|
|
|
}
|
2017-07-29 10:44:51 +02:00
|
|
|
}
|
2017-06-06 23:24:18 +02:00
|
|
|
}
|
|
|
|
|
2017-07-29 10:44:51 +02:00
|
|
|
// Take top 128 most valuable rides
|
2019-08-03 18:27:50 +02:00
|
|
|
if (window_new_campaign_rides.size() > DROPDOWN_ITEMS_MAX_SIZE)
|
2017-07-29 10:44:51 +02:00
|
|
|
{
|
2019-08-03 18:27:50 +02:00
|
|
|
qsort(window_new_campaign_rides.data(), window_new_campaign_rides.size(), sizeof(ride_id_t), ride_value_compare);
|
|
|
|
window_new_campaign_rides.resize(DROPDOWN_ITEMS_MAX_SIZE);
|
2017-06-06 23:24:18 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
// Sort rides by name
|
2019-08-03 18:27:50 +02:00
|
|
|
qsort(window_new_campaign_rides.data(), window_new_campaign_rides.size(), sizeof(ride_id_t), ride_name_compare);
|
2017-09-06 16:09:35 +02:00
|
|
|
return w;
|
2014-08-12 01:27:25 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2015-10-20 20:16:30 +02:00
|
|
|
*
|
2014-08-12 01:27:25 +02:00
|
|
|
* rct2: 0x0069E320
|
|
|
|
*/
|
|
|
|
static void window_new_campaign_get_shop_items()
|
|
|
|
{
|
2018-06-20 17:28:51 +02:00
|
|
|
int32_t i, numItems;
|
2018-06-22 23:21:44 +02:00
|
|
|
Ride* ride;
|
2017-06-06 23:24:18 +02:00
|
|
|
|
2018-06-20 17:28:51 +02:00
|
|
|
uint64_t items = 0;
|
2018-06-22 23:21:44 +02:00
|
|
|
FOR_ALL_RIDES (i, ride)
|
2017-12-04 08:54:32 +01:00
|
|
|
{
|
2018-06-22 23:21:44 +02:00
|
|
|
rct_ride_entry* rideEntry = get_ride_entry(ride->subtype);
|
2017-12-04 08:54:32 +01:00
|
|
|
if (rideEntry == nullptr)
|
|
|
|
{
|
2017-06-06 23:24:18 +02:00
|
|
|
continue;
|
|
|
|
}
|
2018-06-20 17:28:51 +02:00
|
|
|
uint8_t itemType = rideEntry->shop_item;
|
2017-12-04 08:54:32 +01:00
|
|
|
if (itemType != SHOP_ITEM_NONE && shop_item_is_food_or_drink(itemType))
|
|
|
|
items |= 1ULL << itemType;
|
2017-06-06 23:24:18 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
//
|
|
|
|
numItems = 0;
|
|
|
|
for (i = 0; i < 64; i++)
|
2017-06-14 15:08:56 +02:00
|
|
|
{
|
2017-12-04 08:54:32 +01:00
|
|
|
if (items & (1ULL << i))
|
2017-06-14 15:08:56 +02:00
|
|
|
{
|
2017-06-06 23:24:18 +02:00
|
|
|
window_new_campaign_shop_items[numItems++] = i;
|
2017-06-14 15:08:56 +02:00
|
|
|
}
|
|
|
|
}
|
2017-06-06 23:24:18 +02:00
|
|
|
window_new_campaign_shop_items[numItems] = 255;
|
2014-08-12 01:27:25 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2015-10-20 20:16:30 +02:00
|
|
|
*
|
2014-08-12 01:27:25 +02:00
|
|
|
* rct2: 0x0069E50B
|
|
|
|
*/
|
2018-06-22 23:21:44 +02:00
|
|
|
static void window_new_campaign_mouseup(rct_window* w, rct_widgetindex widgetIndex)
|
2014-08-12 01:27:25 +02:00
|
|
|
{
|
2018-03-15 23:44:24 +01:00
|
|
|
switch (widgetIndex)
|
|
|
|
{
|
2018-06-22 23:21:44 +02:00
|
|
|
case WIDX_CLOSE:
|
|
|
|
window_close(w);
|
|
|
|
break;
|
|
|
|
case WIDX_START_BUTTON:
|
2018-03-15 23:44:24 +01:00
|
|
|
{
|
|
|
|
auto gameAction = ParkMarketingAction(w->campaign.campaign_type, w->campaign.ride_id, w->campaign.no_weeks);
|
2018-06-22 23:21:44 +02:00
|
|
|
gameAction.SetCallback([](const GameAction* ga, const GameActionResult* result) {
|
|
|
|
if (result->Error == GA_ERROR::OK)
|
2018-03-15 23:44:24 +01:00
|
|
|
{
|
2018-06-22 23:21:44 +02:00
|
|
|
window_close_by_class(WC_NEW_CAMPAIGN);
|
|
|
|
}
|
|
|
|
});
|
2018-03-15 23:44:24 +01:00
|
|
|
GameActions::Execute(&gameAction);
|
|
|
|
break;
|
|
|
|
}
|
2017-06-06 23:24:18 +02:00
|
|
|
}
|
2014-08-12 01:27:25 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2015-10-20 20:16:30 +02:00
|
|
|
*
|
2014-08-12 01:27:25 +02:00
|
|
|
* rct2: 0x0069E51C
|
|
|
|
*/
|
2018-06-22 23:21:44 +02:00
|
|
|
static void window_new_campaign_mousedown(rct_window* w, rct_widgetindex widgetIndex, rct_widget* widget)
|
2014-08-12 01:27:25 +02:00
|
|
|
{
|
2018-06-22 23:21:44 +02:00
|
|
|
rct_widget* dropdownWidget;
|
2017-06-06 23:24:18 +02:00
|
|
|
|
2018-06-22 23:21:44 +02:00
|
|
|
switch (widgetIndex)
|
|
|
|
{
|
|
|
|
case WIDX_RIDE_DROPDOWN_BUTTON:
|
|
|
|
dropdownWidget = widget - 1;
|
2017-06-06 23:24:18 +02:00
|
|
|
|
2018-06-22 23:21:44 +02:00
|
|
|
if (w->campaign.campaign_type == ADVERTISING_CAMPAIGN_FOOD_OR_DRINK_FREE)
|
|
|
|
{
|
|
|
|
window_new_campaign_get_shop_items();
|
|
|
|
if (window_new_campaign_shop_items[0] != 255)
|
|
|
|
{
|
|
|
|
int32_t numItems = 0;
|
|
|
|
for (int32_t i = 0; i < DROPDOWN_ITEMS_MAX_SIZE; i++)
|
|
|
|
{
|
|
|
|
if (window_new_campaign_shop_items[i] == 255)
|
|
|
|
break;
|
|
|
|
|
|
|
|
gDropdownItemsFormat[i] = STR_DROPDOWN_MENU_LABEL;
|
2019-04-26 20:25:11 +02:00
|
|
|
gDropdownItemsArgs[i] = ShopItems[window_new_campaign_shop_items[i]].Naming.Plural;
|
2018-06-22 23:21:44 +02:00
|
|
|
numItems++;
|
|
|
|
}
|
|
|
|
|
|
|
|
window_dropdown_show_text_custom_width(
|
2018-07-21 13:51:54 +02:00
|
|
|
w->x + dropdownWidget->left, w->y + dropdownWidget->top,
|
|
|
|
dropdownWidget->bottom - dropdownWidget->top + 1, w->colours[1], 0, DROPDOWN_FLAG_STAY_OPEN, numItems,
|
2018-06-22 23:21:44 +02:00
|
|
|
dropdownWidget->right - dropdownWidget->left - 3);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2018-06-20 17:28:51 +02:00
|
|
|
int32_t numItems = 0;
|
2019-08-03 18:27:50 +02:00
|
|
|
for (auto rideId : window_new_campaign_rides)
|
2018-06-22 23:21:44 +02:00
|
|
|
{
|
2019-08-03 18:27:50 +02:00
|
|
|
auto ride = get_ride(rideId);
|
|
|
|
if (ride != nullptr)
|
2019-07-21 13:09:23 +02:00
|
|
|
{
|
2019-08-03 18:27:50 +02:00
|
|
|
// HACK until dropdown items have longer argument buffers
|
|
|
|
gDropdownItemsFormat[numItems] = STR_DROPDOWN_MENU_LABEL;
|
|
|
|
if (ride->custom_name.empty())
|
|
|
|
{
|
|
|
|
ride->FormatNameTo(&gDropdownItemsArgs[numItems]);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
gDropdownItemsFormat[numItems] = STR_OPTIONS_DROPDOWN_ITEM;
|
|
|
|
set_format_arg_on(
|
|
|
|
(uint8_t*)&gDropdownItemsArgs[numItems], 0, const char*, ride->custom_name.c_str());
|
|
|
|
}
|
|
|
|
numItems++;
|
2019-07-21 13:09:23 +02:00
|
|
|
}
|
2017-06-06 23:24:18 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
window_dropdown_show_text_custom_width(
|
2018-07-21 13:51:54 +02:00
|
|
|
w->x + dropdownWidget->left, w->y + dropdownWidget->top, dropdownWidget->bottom - dropdownWidget->top + 1,
|
|
|
|
w->colours[1], 0, DROPDOWN_FLAG_STAY_OPEN, numItems, dropdownWidget->right - dropdownWidget->left - 3);
|
2017-06-06 23:24:18 +02:00
|
|
|
}
|
2018-06-22 23:21:44 +02:00
|
|
|
break;
|
|
|
|
// In RCT2, the maximum was 6 weeks
|
|
|
|
case WIDX_WEEKS_INCREASE_BUTTON:
|
|
|
|
w->campaign.no_weeks = std::min(w->campaign.no_weeks + 1, 12);
|
|
|
|
window_invalidate(w);
|
|
|
|
break;
|
|
|
|
case WIDX_WEEKS_DECREASE_BUTTON:
|
|
|
|
w->campaign.no_weeks = std::max(w->campaign.no_weeks - 1, 2);
|
|
|
|
window_invalidate(w);
|
|
|
|
break;
|
2017-06-06 23:24:18 +02:00
|
|
|
}
|
2014-08-12 01:27:25 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2015-10-20 20:16:30 +02:00
|
|
|
*
|
2014-08-12 01:27:25 +02:00
|
|
|
* rct2: 0x0069E537
|
|
|
|
*/
|
2018-06-22 23:21:44 +02:00
|
|
|
static void window_new_campaign_dropdown(rct_window* w, rct_widgetindex widgetIndex, int32_t dropdownIndex)
|
2014-08-12 01:27:25 +02:00
|
|
|
{
|
2017-06-06 23:24:18 +02:00
|
|
|
if (widgetIndex != WIDX_RIDE_DROPDOWN_BUTTON)
|
|
|
|
return;
|
2014-08-12 01:27:25 +02:00
|
|
|
|
2019-08-03 18:27:50 +02:00
|
|
|
if (dropdownIndex < 0 || dropdownIndex >= window_new_campaign_rides.size())
|
2017-06-06 23:24:18 +02:00
|
|
|
return;
|
2016-05-26 20:43:53 +02:00
|
|
|
|
2018-06-22 23:21:44 +02:00
|
|
|
if (w->campaign.campaign_type == ADVERTISING_CAMPAIGN_FOOD_OR_DRINK_FREE)
|
|
|
|
{
|
2017-06-06 23:24:18 +02:00
|
|
|
w->campaign.ride_id = window_new_campaign_shop_items[dropdownIndex];
|
2018-06-22 23:21:44 +02:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2017-06-06 23:24:18 +02:00
|
|
|
w->campaign.ride_id = window_new_campaign_rides[dropdownIndex];
|
|
|
|
}
|
2014-08-12 01:27:25 +02:00
|
|
|
|
2017-06-06 23:24:18 +02:00
|
|
|
window_invalidate(w);
|
2014-08-12 01:27:25 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2015-10-20 20:16:30 +02:00
|
|
|
*
|
2014-08-12 01:27:25 +02:00
|
|
|
* rct2: 0x0069E397
|
|
|
|
*/
|
2018-06-22 23:21:44 +02:00
|
|
|
static void window_new_campaign_invalidate(rct_window* w)
|
2014-08-12 01:27:25 +02:00
|
|
|
{
|
2017-06-06 23:24:18 +02:00
|
|
|
window_new_campaign_widgets[WIDX_RIDE_LABEL].type = WWT_EMPTY;
|
|
|
|
window_new_campaign_widgets[WIDX_RIDE_DROPDOWN].type = WWT_EMPTY;
|
|
|
|
window_new_campaign_widgets[WIDX_RIDE_DROPDOWN_BUTTON].type = WWT_EMPTY;
|
|
|
|
window_new_campaign_widgets[WIDX_RIDE_DROPDOWN].text = STR_MARKETING_NOT_SELECTED;
|
2018-06-22 23:21:44 +02:00
|
|
|
switch (w->campaign.campaign_type)
|
|
|
|
{
|
|
|
|
case ADVERTISING_CAMPAIGN_RIDE_FREE:
|
|
|
|
case ADVERTISING_CAMPAIGN_RIDE:
|
|
|
|
window_new_campaign_widgets[WIDX_RIDE_LABEL].type = WWT_LABEL;
|
|
|
|
window_new_campaign_widgets[WIDX_RIDE_DROPDOWN].type = WWT_DROPDOWN;
|
|
|
|
window_new_campaign_widgets[WIDX_RIDE_DROPDOWN_BUTTON].type = WWT_BUTTON;
|
|
|
|
window_new_campaign_widgets[WIDX_RIDE_LABEL].text = STR_MARKETING_RIDE;
|
|
|
|
if (w->campaign.ride_id != SELECTED_RIDE_UNDEFINED)
|
|
|
|
{
|
2019-07-21 02:28:33 +02:00
|
|
|
auto ride = get_ride(w->campaign.ride_id);
|
|
|
|
if (ride != nullptr)
|
|
|
|
{
|
|
|
|
window_new_campaign_widgets[WIDX_RIDE_DROPDOWN].text = STR_STRINGID;
|
|
|
|
ride->FormatNameTo(gCommonFormatArgs);
|
|
|
|
}
|
2018-06-22 23:21:44 +02:00
|
|
|
}
|
|
|
|
break;
|
|
|
|
case ADVERTISING_CAMPAIGN_FOOD_OR_DRINK_FREE:
|
|
|
|
window_new_campaign_widgets[WIDX_RIDE_LABEL].type = WWT_LABEL;
|
|
|
|
window_new_campaign_widgets[WIDX_RIDE_DROPDOWN].type = WWT_DROPDOWN;
|
|
|
|
window_new_campaign_widgets[WIDX_RIDE_DROPDOWN_BUTTON].type = WWT_BUTTON;
|
|
|
|
window_new_campaign_widgets[WIDX_RIDE_LABEL].text = STR_MARKETING_ITEM;
|
|
|
|
if (w->campaign.ride_id != SELECTED_RIDE_UNDEFINED)
|
|
|
|
{
|
2019-04-26 20:25:11 +02:00
|
|
|
window_new_campaign_widgets[WIDX_RIDE_DROPDOWN].text = ShopItems[w->campaign.ride_id].Naming.Plural;
|
2018-06-22 23:21:44 +02:00
|
|
|
}
|
|
|
|
break;
|
2017-06-06 23:24:18 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
// Set current number of weeks spinner (moved to paint due to required parameter)
|
|
|
|
window_new_campaign_widgets[WIDX_WEEKS_SPINNER].text = STR_NONE;
|
|
|
|
|
|
|
|
// Enable / disable start button based on ride dropdown
|
|
|
|
w->disabled_widgets &= ~(1 << WIDX_START_BUTTON);
|
|
|
|
if (window_new_campaign_widgets[WIDX_RIDE_DROPDOWN].type == WWT_DROPDOWN && w->campaign.ride_id == SELECTED_RIDE_UNDEFINED)
|
|
|
|
w->disabled_widgets |= 1 << WIDX_START_BUTTON;
|
2014-08-12 01:27:25 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2015-10-20 20:16:30 +02:00
|
|
|
*
|
2014-08-12 01:27:25 +02:00
|
|
|
* rct2: 0x0069E493
|
|
|
|
*/
|
2018-06-22 23:21:44 +02:00
|
|
|
static void window_new_campaign_paint(rct_window* w, rct_drawpixelinfo* dpi)
|
2014-08-12 01:27:25 +02:00
|
|
|
{
|
2018-06-20 17:28:51 +02:00
|
|
|
int32_t x, y;
|
2017-06-06 23:24:18 +02:00
|
|
|
|
|
|
|
window_draw_widgets(w, dpi);
|
|
|
|
|
|
|
|
// Number of weeks
|
2018-06-22 23:21:44 +02:00
|
|
|
rct_widget* spinnerWidget = &window_new_campaign_widgets[WIDX_WEEKS_SPINNER];
|
2017-06-06 23:24:18 +02:00
|
|
|
gfx_draw_string_left(
|
2018-07-21 13:51:54 +02:00
|
|
|
dpi, w->campaign.no_weeks == 1 ? STR_MARKETING_1_WEEK : STR_X_WEEKS, &w->campaign.no_weeks, w->colours[0],
|
|
|
|
w->x + spinnerWidget->left + 1, w->y + spinnerWidget->top);
|
2017-06-06 23:24:18 +02:00
|
|
|
|
|
|
|
x = w->x + 14;
|
|
|
|
y = w->y + 60;
|
|
|
|
|
|
|
|
// Price per week
|
|
|
|
money32 pricePerWeek = AdvertisingCampaignPricePerWeek[w->campaign.campaign_type];
|
|
|
|
gfx_draw_string_left(dpi, STR_MARKETING_COST_PER_WEEK, &pricePerWeek, COLOUR_BLACK, x, y);
|
|
|
|
y += 13;
|
|
|
|
|
|
|
|
// Total price
|
|
|
|
money32 totalPrice = AdvertisingCampaignPricePerWeek[w->campaign.campaign_type] * w->campaign.no_weeks;
|
|
|
|
gfx_draw_string_left(dpi, STR_MARKETING_TOTAL_COST, &totalPrice, COLOUR_BLACK, x, y);
|
2015-03-22 16:01:01 +01:00
|
|
|
}
|