mirror of https://github.com/OpenRCT2/OpenRCT2.git
Add ParkSetParameterAction
This commit is contained in:
parent
b7edca8ef3
commit
9a1532ecc4
|
@ -658,10 +658,10 @@ static void window_park_entrance_mouseup(rct_window* w, rct_widgetindex widgetIn
|
||||||
window_text_input_open(w, WIDX_RENAME, STR_PARK_NAME, STR_ENTER_PARK_NAME, gParkName, 0, USER_STRING_MAX_LENGTH);
|
window_text_input_open(w, WIDX_RENAME, STR_PARK_NAME, STR_ENTER_PARK_NAME, gParkName, 0, USER_STRING_MAX_LENGTH);
|
||||||
break;
|
break;
|
||||||
case WIDX_CLOSE_LIGHT:
|
case WIDX_CLOSE_LIGHT:
|
||||||
park_set_open(0);
|
park_set_open(false);
|
||||||
break;
|
break;
|
||||||
case WIDX_OPEN_LIGHT:
|
case WIDX_OPEN_LIGHT:
|
||||||
park_set_open(1);
|
park_set_open(true);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -718,13 +718,11 @@ static void window_park_entrance_dropdown(rct_window* w, rct_widgetindex widgetI
|
||||||
|
|
||||||
if (dropdownIndex != 0)
|
if (dropdownIndex != 0)
|
||||||
{
|
{
|
||||||
gGameCommandErrorTitle = STR_CANT_CLOSE_PARK;
|
park_set_open(true);
|
||||||
park_set_open(1);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
gGameCommandErrorTitle = STR_CANT_OPEN_PARK;
|
park_set_open(false);
|
||||||
park_set_open(0);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,6 +23,7 @@
|
||||||
#include <openrct2/Input.h>
|
#include <openrct2/Input.h>
|
||||||
#include <openrct2/OpenRCT2.h>
|
#include <openrct2/OpenRCT2.h>
|
||||||
#include <openrct2/actions/GameAction.h>
|
#include <openrct2/actions/GameAction.h>
|
||||||
|
#include <openrct2/actions/ParkSetParameterAction.hpp>
|
||||||
#include <openrct2/actions/RideSetAppearanceAction.hpp>
|
#include <openrct2/actions/RideSetAppearanceAction.hpp>
|
||||||
#include <openrct2/actions/RideSetColourScheme.hpp>
|
#include <openrct2/actions/RideSetColourScheme.hpp>
|
||||||
#include <openrct2/actions/RideSetPriceAction.hpp>
|
#include <openrct2/actions/RideSetPriceAction.hpp>
|
||||||
|
@ -6157,11 +6158,13 @@ static void update_same_price_throughout_flags(uint32_t shop_item)
|
||||||
{
|
{
|
||||||
newFlags = gSamePriceThroughoutParkA;
|
newFlags = gSamePriceThroughoutParkA;
|
||||||
newFlags ^= (1 << SHOP_ITEM_PHOTO);
|
newFlags ^= (1 << SHOP_ITEM_PHOTO);
|
||||||
game_do_command(0, 1, 0, (0x2 << 8), GAME_COMMAND_SET_PARK_OPEN, newFlags, shop_item);
|
auto parkSetParameterA = ParkSetParameterAction(ParkParameter::SamePriceInParkA, shop_item);
|
||||||
|
GameActions::Execute(&parkSetParameterA);
|
||||||
|
|
||||||
newFlags = gSamePriceThroughoutParkB;
|
newFlags = gSamePriceThroughoutParkB;
|
||||||
newFlags ^= (1 << (SHOP_ITEM_PHOTO2 - 32)) | (1 << (SHOP_ITEM_PHOTO3 - 32)) | (1 << (SHOP_ITEM_PHOTO4 - 32));
|
newFlags ^= (1 << (SHOP_ITEM_PHOTO2 - 32)) | (1 << (SHOP_ITEM_PHOTO3 - 32)) | (1 << (SHOP_ITEM_PHOTO4 - 32));
|
||||||
game_do_command(0, 1, 0, (0x3 << 8), GAME_COMMAND_SET_PARK_OPEN, newFlags, shop_item);
|
auto parkSetParameterB = ParkSetParameterAction(ParkParameter::SamePriceInParkB, shop_item);
|
||||||
|
GameActions::Execute(&parkSetParameterB);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -6169,13 +6172,15 @@ static void update_same_price_throughout_flags(uint32_t shop_item)
|
||||||
{
|
{
|
||||||
newFlags = gSamePriceThroughoutParkA;
|
newFlags = gSamePriceThroughoutParkA;
|
||||||
newFlags ^= (1u << shop_item);
|
newFlags ^= (1u << shop_item);
|
||||||
game_do_command(0, 1, 0, (0x2 << 8), GAME_COMMAND_SET_PARK_OPEN, newFlags, shop_item);
|
auto parkSetParameterA = ParkSetParameterAction(ParkParameter::SamePriceInParkA, shop_item);
|
||||||
|
GameActions::Execute(&parkSetParameterA);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
newFlags = gSamePriceThroughoutParkB;
|
newFlags = gSamePriceThroughoutParkB;
|
||||||
newFlags ^= (1u << (shop_item - 32));
|
newFlags ^= (1u << (shop_item - 32));
|
||||||
game_do_command(0, 1, 0, (0x3 << 8), GAME_COMMAND_SET_PARK_OPEN, newFlags, shop_item);
|
auto parkSetParameterB = ParkSetParameterAction(ParkParameter::SamePriceInParkB, shop_item);
|
||||||
|
GameActions::Execute(&parkSetParameterB);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -620,7 +620,7 @@ void game_command_cheat(
|
||||||
gCheatsNeverendingMarketing = *edx != 0;
|
gCheatsNeverendingMarketing = *edx != 0;
|
||||||
break;
|
break;
|
||||||
case CHEAT_OPENCLOSEPARK:
|
case CHEAT_OPENCLOSEPARK:
|
||||||
park_set_open(park_is_open() ? 0 : 1);
|
park_set_open(!park_is_open());
|
||||||
break;
|
break;
|
||||||
case CHEAT_HAVEFUN:
|
case CHEAT_HAVEFUN:
|
||||||
gScenarioObjectiveType = OBJECTIVE_HAVE_FUN;
|
gScenarioObjectiveType = OBJECTIVE_HAVE_FUN;
|
||||||
|
|
|
@ -611,24 +611,6 @@ void game_log_multiplayer_command(int command, const int* eax, const int* ebx, c
|
||||||
format_string(log_msg, 256, STR_LOG_DEMOLISH_RIDE, args);
|
format_string(log_msg, 256, STR_LOG_DEMOLISH_RIDE, args);
|
||||||
network_append_server_log(log_msg);
|
network_append_server_log(log_msg);
|
||||||
}
|
}
|
||||||
else if (command == GAME_COMMAND_SET_PARK_OPEN)
|
|
||||||
{
|
|
||||||
// Log change in park open/close
|
|
||||||
char* args[1] = {
|
|
||||||
(char*)player_name,
|
|
||||||
};
|
|
||||||
|
|
||||||
if (*edx >> 8 == 0)
|
|
||||||
{
|
|
||||||
format_string(log_msg, 256, STR_LOG_PARK_OPEN, args);
|
|
||||||
}
|
|
||||||
else if (*edx >> 8 == 1)
|
|
||||||
{
|
|
||||||
format_string(log_msg, 256, STR_LOG_PARK_CLOSED, args);
|
|
||||||
}
|
|
||||||
|
|
||||||
network_append_server_log(log_msg);
|
|
||||||
}
|
|
||||||
else if (
|
else if (
|
||||||
command == GAME_COMMAND_PLACE_WALL || command == GAME_COMMAND_PLACE_LARGE_SCENERY
|
command == GAME_COMMAND_PLACE_WALL || command == GAME_COMMAND_PLACE_LARGE_SCENERY
|
||||||
|| command == GAME_COMMAND_PLACE_BANNER)
|
|| command == GAME_COMMAND_PLACE_BANNER)
|
||||||
|
@ -1295,7 +1277,7 @@ GAME_COMMAND_POINTER* new_game_command_table[GAME_COMMAND_COUNT] = {
|
||||||
game_command_fire_staff_member,
|
game_command_fire_staff_member,
|
||||||
nullptr,
|
nullptr,
|
||||||
nullptr,
|
nullptr,
|
||||||
game_command_set_park_open,
|
nullptr,
|
||||||
game_command_buy_land_rights,
|
game_command_buy_land_rights,
|
||||||
game_command_place_park_entrance,
|
game_command_place_park_entrance,
|
||||||
game_command_remove_park_entrance,
|
game_command_remove_park_entrance,
|
||||||
|
|
|
@ -53,7 +53,7 @@ enum GAME_COMMAND
|
||||||
GAME_COMMAND_FIRE_STAFF_MEMBER,
|
GAME_COMMAND_FIRE_STAFF_MEMBER,
|
||||||
GAME_COMMAND_SET_STAFF_ORDERS, // GA
|
GAME_COMMAND_SET_STAFF_ORDERS, // GA
|
||||||
GAME_COMMAND_SET_PARK_NAME, // GA
|
GAME_COMMAND_SET_PARK_NAME, // GA
|
||||||
GAME_COMMAND_SET_PARK_OPEN,
|
GAME_COMMAND_SET_PARK_OPEN, // GA
|
||||||
GAME_COMMAND_BUY_LAND_RIGHTS,
|
GAME_COMMAND_BUY_LAND_RIGHTS,
|
||||||
GAME_COMMAND_PLACE_PARK_ENTRANCE, // GA
|
GAME_COMMAND_PLACE_PARK_ENTRANCE, // GA
|
||||||
GAME_COMMAND_REMOVE_PARK_ENTRANCE,
|
GAME_COMMAND_REMOVE_PARK_ENTRANCE,
|
||||||
|
|
|
@ -26,6 +26,7 @@
|
||||||
#include "ParkMarketingAction.hpp"
|
#include "ParkMarketingAction.hpp"
|
||||||
#include "ParkSetLoanAction.hpp"
|
#include "ParkSetLoanAction.hpp"
|
||||||
#include "ParkSetNameAction.hpp"
|
#include "ParkSetNameAction.hpp"
|
||||||
|
#include "ParkSetParameterAction.hpp"
|
||||||
#include "ParkSetResearchFundingAction.hpp"
|
#include "ParkSetResearchFundingAction.hpp"
|
||||||
#include "PauseToggleAction.hpp"
|
#include "PauseToggleAction.hpp"
|
||||||
#include "PlaceParkEntranceAction.hpp"
|
#include "PlaceParkEntranceAction.hpp"
|
||||||
|
@ -75,6 +76,7 @@ namespace GameActions
|
||||||
Register<ParkMarketingAction>();
|
Register<ParkMarketingAction>();
|
||||||
Register<ParkSetLoanAction>();
|
Register<ParkSetLoanAction>();
|
||||||
Register<ParkSetNameAction>();
|
Register<ParkSetNameAction>();
|
||||||
|
Register<ParkSetParameterAction>();
|
||||||
Register<ParkSetResearchFundingAction>();
|
Register<ParkSetResearchFundingAction>();
|
||||||
Register<PlaceParkEntranceAction>();
|
Register<PlaceParkEntranceAction>();
|
||||||
Register<PlacePeepSpawnAction>();
|
Register<PlacePeepSpawnAction>();
|
||||||
|
|
|
@ -0,0 +1,99 @@
|
||||||
|
/*****************************************************************************
|
||||||
|
* Copyright (c) 2014-2019 OpenRCT2 developers
|
||||||
|
*
|
||||||
|
* For a complete list of all authors, please refer to contributors.md
|
||||||
|
* Interested in contributing? Visit https://github.com/OpenRCT2/OpenRCT2
|
||||||
|
*
|
||||||
|
* OpenRCT2 is licensed under the GNU General Public License version 3.
|
||||||
|
*****************************************************************************/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "../interface/Window.h"
|
||||||
|
#include "../ride/ShopItem.h"
|
||||||
|
#include "../world/Park.h"
|
||||||
|
#include "GameAction.h"
|
||||||
|
|
||||||
|
enum class ParkParameter : uint8_t
|
||||||
|
{
|
||||||
|
Close,
|
||||||
|
Open,
|
||||||
|
SamePriceInParkA,
|
||||||
|
SamePriceInParkB,
|
||||||
|
Count
|
||||||
|
};
|
||||||
|
|
||||||
|
DEFINE_GAME_ACTION(ParkSetParameterAction, GAME_COMMAND_SET_PARK_OPEN, GameActionResult)
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
uint8_t _parameter;
|
||||||
|
uint32_t _value;
|
||||||
|
|
||||||
|
constexpr static rct_string_id _ErrorTitles[] = { STR_CANT_CLOSE_PARK, STR_CANT_OPEN_PARK, STR_NONE, STR_NONE };
|
||||||
|
|
||||||
|
public:
|
||||||
|
ParkSetParameterAction()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
ParkSetParameterAction(ParkParameter parameter, uint32_t value = 0)
|
||||||
|
: _parameter(static_cast<uint8_t>(parameter))
|
||||||
|
, _value(value)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
uint16_t GetActionFlags() const override
|
||||||
|
{
|
||||||
|
return GameAction::GetActionFlags() | GA_FLAGS::ALLOW_WHILE_PAUSED;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Serialise(DataSerialiser & stream) override
|
||||||
|
{
|
||||||
|
GameAction::Serialise(stream);
|
||||||
|
stream << DS_TAG(_parameter) << DS_TAG(_value);
|
||||||
|
}
|
||||||
|
|
||||||
|
GameActionResult::Ptr Query() const override
|
||||||
|
{
|
||||||
|
if (_parameter >= static_cast<uint8_t>(ParkParameter::Count))
|
||||||
|
{
|
||||||
|
return MakeResult(GA_ERROR::INVALID_PARAMETERS, STR_NONE);
|
||||||
|
}
|
||||||
|
|
||||||
|
auto res = MakeResult();
|
||||||
|
res->ErrorTitle = _ErrorTitles[_parameter];
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
GameActionResult::Ptr Execute() const override
|
||||||
|
{
|
||||||
|
switch (static_cast<ParkParameter>(_parameter))
|
||||||
|
{
|
||||||
|
case ParkParameter::Close:
|
||||||
|
if (gParkFlags & PARK_FLAGS_PARK_OPEN)
|
||||||
|
{
|
||||||
|
gParkFlags &= ~PARK_FLAGS_PARK_OPEN;
|
||||||
|
window_invalidate_by_class(WC_PARK_INFORMATION);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case ParkParameter::Open:
|
||||||
|
if (!(gParkFlags & PARK_FLAGS_PARK_OPEN))
|
||||||
|
{
|
||||||
|
gParkFlags |= PARK_FLAGS_PARK_OPEN;
|
||||||
|
window_invalidate_by_class(WC_PARK_INFORMATION);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case ParkParameter::SamePriceInParkA:
|
||||||
|
gSamePriceThroughoutParkA = _value;
|
||||||
|
window_invalidate_by_class(WC_RIDE);
|
||||||
|
break;
|
||||||
|
case ParkParameter::SamePriceInParkB:
|
||||||
|
gSamePriceThroughoutParkB = _value;
|
||||||
|
window_invalidate_by_class(WC_RIDE);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto res = MakeResult();
|
||||||
|
res->ErrorTitle = _ErrorTitles[_parameter];
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
};
|
|
@ -15,6 +15,7 @@
|
||||||
#include "../Game.h"
|
#include "../Game.h"
|
||||||
#include "../GameState.h"
|
#include "../GameState.h"
|
||||||
#include "../OpenRCT2.h"
|
#include "../OpenRCT2.h"
|
||||||
|
#include "../actions/ParkSetParameterAction.hpp"
|
||||||
#include "../config/Config.h"
|
#include "../config/Config.h"
|
||||||
#include "../core/Memory.hpp"
|
#include "../core/Memory.hpp"
|
||||||
#include "../interface/Colour.h"
|
#include "../interface/Colour.h"
|
||||||
|
@ -104,55 +105,10 @@ static PeepSpawn* get_random_peep_spawn()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void park_set_open(int32_t open)
|
void park_set_open(bool open)
|
||||||
{
|
{
|
||||||
game_do_command(0, GAME_COMMAND_FLAG_APPLY, 0, open << 8, GAME_COMMAND_SET_PARK_OPEN, 0, 0);
|
auto parkSetParameter = ParkSetParameterAction(open ? ParkParameter::Open : ParkParameter::Close);
|
||||||
}
|
GameActions::Execute(&parkSetParameter);
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* rct2: 0x00669D4A
|
|
||||||
*/
|
|
||||||
void game_command_set_park_open(
|
|
||||||
[[maybe_unused]] int32_t* eax, int32_t* ebx, [[maybe_unused]] int32_t* ecx, int32_t* edx, [[maybe_unused]] int32_t* esi,
|
|
||||||
int32_t* edi, [[maybe_unused]] int32_t* ebp)
|
|
||||||
{
|
|
||||||
if (!(*ebx & GAME_COMMAND_FLAG_APPLY))
|
|
||||||
{
|
|
||||||
*ebx = 0;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
int32_t dh = (*edx >> 8) & 0xFF;
|
|
||||||
|
|
||||||
gCommandExpenditureType = RCT_EXPENDITURE_TYPE_PARK_ENTRANCE_TICKETS;
|
|
||||||
switch (dh)
|
|
||||||
{
|
|
||||||
case 0:
|
|
||||||
if (gParkFlags & PARK_FLAGS_PARK_OPEN)
|
|
||||||
{
|
|
||||||
gParkFlags &= ~PARK_FLAGS_PARK_OPEN;
|
|
||||||
window_invalidate_by_class(WC_PARK_INFORMATION);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 1:
|
|
||||||
if (!(gParkFlags & PARK_FLAGS_PARK_OPEN))
|
|
||||||
{
|
|
||||||
gParkFlags |= PARK_FLAGS_PARK_OPEN;
|
|
||||||
window_invalidate_by_class(WC_PARK_INFORMATION);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
gSamePriceThroughoutParkA = *edi;
|
|
||||||
window_invalidate_by_class(WC_RIDE);
|
|
||||||
break;
|
|
||||||
case 3:
|
|
||||||
gSamePriceThroughoutParkB = *edi;
|
|
||||||
window_invalidate_by_class(WC_RIDE);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
*ebx = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -132,7 +132,7 @@ void update_park_fences_around_tile(CoordsXY coords);
|
||||||
|
|
||||||
uint8_t calculate_guest_initial_happiness(uint8_t percentage);
|
uint8_t calculate_guest_initial_happiness(uint8_t percentage);
|
||||||
|
|
||||||
void park_set_open(int32_t open);
|
void park_set_open(bool open);
|
||||||
int32_t park_entrance_get_index(int32_t x, int32_t y, int32_t z);
|
int32_t park_entrance_get_index(int32_t x, int32_t y, int32_t z);
|
||||||
void park_set_name(const char* name);
|
void park_set_name(const char* name);
|
||||||
void park_set_entrance_fee(money32 value);
|
void park_set_entrance_fee(money32 value);
|
||||||
|
@ -141,8 +141,6 @@ int32_t map_buy_land_rights(int32_t x0, int32_t y0, int32_t x1, int32_t y1, int3
|
||||||
|
|
||||||
void game_command_set_park_entrance_fee(
|
void game_command_set_park_entrance_fee(
|
||||||
int32_t* eax, int32_t* ebx, int32_t* ecx, int32_t* edx, int32_t* esi, int32_t* edi, int32_t* ebp);
|
int32_t* eax, int32_t* ebx, int32_t* ecx, int32_t* edx, int32_t* esi, int32_t* edi, int32_t* ebp);
|
||||||
void game_command_set_park_open(
|
|
||||||
int32_t* eax, int32_t* ebx, int32_t* ecx, int32_t* edx, int32_t* esi, int32_t* edi, int32_t* ebp);
|
|
||||||
void game_command_buy_land_rights(
|
void game_command_buy_land_rights(
|
||||||
int32_t* eax, int32_t* ebx, int32_t* ecx, int32_t* edx, int32_t* esi, int32_t* edi, int32_t* ebp);
|
int32_t* eax, int32_t* ebx, int32_t* ecx, int32_t* edx, int32_t* esi, int32_t* edi, int32_t* ebp);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue