1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2026-01-24 07:14:31 +01:00

Close #12443: Refactor TITLE_SCRIPT to use strong enum (#13540)

Close #12443: Refactor TITLE_SCRIPT to use strong enum
This commit is contained in:
Kevin Singh
2020-12-10 06:01:54 -05:00
committed by GitHub
parent f09b14ef2b
commit 3feefb09b1
5 changed files with 261 additions and 194 deletions

View File

@@ -29,23 +29,22 @@
// clang-format off
struct TITLE_COMMAND_ORDER {
// originally a uint8_t, but the new millisecond wait times require a uint16_t.
uint16_t command;
TitleScript command;
rct_string_id nameStringId;
rct_string_id descStringId;
};
static TITLE_COMMAND_ORDER _window_title_command_editor_orders[] = {
{ TITLE_SCRIPT_LOAD, STR_TITLE_EDITOR_ACTION_LOAD_SAVE, STR_TITLE_EDITOR_ARGUMENT_SAVEFILE },
{ TITLE_SCRIPT_LOADSC, STR_TITLE_EDITOR_ACTION_LOAD_SCENARIO, STR_TITLE_EDITOR_ARGUMENT_SCENARIO },
{ TITLE_SCRIPT_LOCATION, STR_TITLE_EDITOR_COMMAND_TYPE_LOCATION, STR_TITLE_EDITOR_ARGUMENT_COORDINATES },
{ TITLE_SCRIPT_ROTATE, STR_TITLE_EDITOR_COMMAND_TYPE_ROTATE, STR_TITLE_EDITOR_ARGUMENT_ROTATIONS },
{ TITLE_SCRIPT_ZOOM, STR_TITLE_EDITOR_COMMAND_TYPE_ZOOM, STR_TITLE_EDITOR_ARGUMENT_ZOOM_LEVEL },
{ TITLE_SCRIPT_SPEED, STR_TITLE_EDITOR_COMMAND_TYPE_SPEED, STR_TITLE_EDITOR_ARGUMENT_SPEED },
{ TITLE_SCRIPT_FOLLOW, STR_TITLE_EDITOR_COMMAND_TYPE_FOLLOW, STR_NONE },
{ TITLE_SCRIPT_WAIT, STR_TITLE_EDITOR_COMMAND_TYPE_WAIT, STR_TITLE_EDITOR_ARGUMENT_WAIT_SECONDS },
{ TITLE_SCRIPT_RESTART, STR_TITLE_EDITOR_RESTART, STR_NONE },
{ TITLE_SCRIPT_END, STR_TITLE_EDITOR_END, STR_NONE },
{ TitleScript::Load, STR_TITLE_EDITOR_ACTION_LOAD_SAVE, STR_TITLE_EDITOR_ARGUMENT_SAVEFILE },
{ TitleScript::LoadSc, STR_TITLE_EDITOR_ACTION_LOAD_SCENARIO, STR_TITLE_EDITOR_ARGUMENT_SCENARIO },
{ TitleScript::Location, STR_TITLE_EDITOR_COMMAND_TYPE_LOCATION, STR_TITLE_EDITOR_ARGUMENT_COORDINATES },
{ TitleScript::Rotate, STR_TITLE_EDITOR_COMMAND_TYPE_ROTATE, STR_TITLE_EDITOR_ARGUMENT_ROTATIONS },
{ TitleScript::Zoom, STR_TITLE_EDITOR_COMMAND_TYPE_ZOOM, STR_TITLE_EDITOR_ARGUMENT_ZOOM_LEVEL },
{ TitleScript::Speed, STR_TITLE_EDITOR_COMMAND_TYPE_SPEED, STR_TITLE_EDITOR_ARGUMENT_SPEED },
{ TitleScript::Follow, STR_TITLE_EDITOR_COMMAND_TYPE_FOLLOW, STR_NONE },
{ TitleScript::Wait, STR_TITLE_EDITOR_COMMAND_TYPE_WAIT, STR_TITLE_EDITOR_ARGUMENT_WAIT_SECONDS },
{ TitleScript::Restart, STR_TITLE_EDITOR_RESTART, STR_NONE },
{ TitleScript::End, STR_TITLE_EDITOR_END, STR_NONE },
};
#define NUM_COMMANDS std::size(_window_title_command_editor_orders)
@@ -81,7 +80,7 @@ static int32_t _window_title_command_editor_index;
constexpr size_t BUF_SIZE = 50;
static char textbox1Buffer[BUF_SIZE];
static char textbox2Buffer[BUF_SIZE];
static TitleCommand command = { TITLE_SCRIPT_LOAD, { 0 } };
static TitleCommand _command = { TitleScript::Load, { 0 } };
static TitleSequence * _sequence = nullptr;
static rct_widget window_title_command_editor_widgets[] = {
@@ -117,8 +116,8 @@ static void window_title_command_editor_invalidate(rct_window * w);
static void window_title_command_editor_paint(rct_window * w, rct_drawpixelinfo * dpi);
static void window_title_command_editor_textinput(rct_window * w, rct_widgetindex widgetIndex, char * text);
static void scenario_select_callback(const utf8 * path);
static int32_t get_command_info_index(int32_t index);
static TITLE_COMMAND_ORDER get_command_info(int32_t index);
static int32_t get_command_info_index(TitleScript commandType);
static TITLE_COMMAND_ORDER get_command_info(TitleScript commandType);
static TileCoordsXY get_location();
static uint8_t get_zoom();
@@ -138,29 +137,29 @@ static rct_window_event_list window_title_command_editor_events([](auto& events)
static void scenario_select_callback(const utf8* path)
{
if (command.Type == TITLE_SCRIPT_LOADSC)
if (_command.Type == TitleScript::LoadSc)
{
const utf8* fileName = path_get_filename(path);
auto scenario = GetScenarioRepository()->GetByFilename(fileName);
safe_strcpy(command.Scenario, scenario->internal_name, sizeof(command.Scenario));
safe_strcpy(_command.Scenario, scenario->internal_name, sizeof(_command.Scenario));
}
}
static int32_t get_command_info_index(int32_t index)
static int32_t get_command_info_index(TitleScript commandType)
{
for (int32_t i = 0; i < static_cast<int32_t>(NUM_COMMANDS); i++)
{
if (_window_title_command_editor_orders[i].command == index)
if (_window_title_command_editor_orders[i].command == commandType)
return i;
}
return 0;
}
static TITLE_COMMAND_ORDER get_command_info(int32_t index)
static TITLE_COMMAND_ORDER get_command_info(TitleScript commandType)
{
for (int32_t i = 0; i < static_cast<int32_t>(NUM_COMMANDS); i++)
{
if (_window_title_command_editor_orders[i].command == index)
if (_window_title_command_editor_orders[i].command == commandType)
return _window_title_command_editor_orders[i];
}
return _window_title_command_editor_orders[0];
@@ -232,32 +231,46 @@ void window_title_command_editor_open(TitleSequence* sequence, int32_t index, bo
_window_title_command_editor_insert = insert;
if (!insert)
{
command = _sequence->Commands[index];
_command = _sequence->Commands[index];
}
switch (command.Type)
switch (_command.Type)
{
case TITLE_SCRIPT_LOAD:
if (command.SaveIndex >= _sequence->Saves.size())
command.SaveIndex = SAVE_INDEX_INVALID;
case TitleScript::Load:
if (_command.SaveIndex >= _sequence->Saves.size())
_command.SaveIndex = SAVE_INDEX_INVALID;
break;
case TITLE_SCRIPT_LOCATION:
snprintf(textbox1Buffer, BUF_SIZE, "%d", command.X);
snprintf(textbox2Buffer, BUF_SIZE, "%d", command.Y);
case TitleScript::Location:
snprintf(textbox1Buffer, BUF_SIZE, "%d", _command.X);
snprintf(textbox2Buffer, BUF_SIZE, "%d", _command.Y);
break;
case TITLE_SCRIPT_ROTATE:
case TITLE_SCRIPT_ZOOM:
snprintf(textbox1Buffer, BUF_SIZE, "%d", command.Rotations);
case TitleScript::Rotate:
case TitleScript::Zoom:
snprintf(textbox1Buffer, BUF_SIZE, "%d", _command.Rotations);
break;
case TITLE_SCRIPT_WAIT:
snprintf(textbox1Buffer, BUF_SIZE, "%d", command.Milliseconds);
case TitleScript::Wait:
snprintf(textbox1Buffer, BUF_SIZE, "%d", _command.Milliseconds);
break;
case TITLE_SCRIPT_FOLLOW:
if (command.SpriteIndex != SPRITE_INDEX_NULL)
case TitleScript::Follow:
if (_command.SpriteIndex != SPRITE_INDEX_NULL)
{
window_follow_sprite(window, static_cast<size_t>(command.SpriteIndex));
window_follow_sprite(window, static_cast<size_t>(_command.SpriteIndex));
}
break;
case TitleScript::Undefined:
break;
case TitleScript::Restart:
break;
case TitleScript::End:
break;
case TitleScript::Speed:
break;
case TitleScript::Loop:
break;
case TitleScript::EndLoop:
break;
case TitleScript::LoadSc:
break;
}
}
@@ -280,7 +293,7 @@ static void window_title_command_editor_mouseup(rct_window* w, rct_widgetindex w
case WIDX_TEXTBOX_FULL:
// The only commands that use TEXTBOX_FULL currently are Wait, Rotate, and Zoom. Rotate and Zoom have single-digit
// maximum values, while Wait has 5-digit maximum values.
if (command.Type == TITLE_SCRIPT_WAIT)
if (_command.Type == TitleScript::Wait)
{
window_start_textbox(w, widgetIndex, STR_STRING, textbox1Buffer, 6);
}
@@ -296,19 +309,19 @@ static void window_title_command_editor_mouseup(rct_window* w, rct_widgetindex w
window_start_textbox(w, widgetIndex, STR_STRING, textbox2Buffer, 4);
break;
case WIDX_GET:
if (command.Type == TITLE_SCRIPT_LOCATION)
if (_command.Type == TitleScript::Location)
{
auto tileCoord = get_location();
command.X = static_cast<uint8_t>(tileCoord.x);
command.Y = static_cast<uint8_t>(tileCoord.y);
snprintf(textbox1Buffer, BUF_SIZE, "%d", command.X);
snprintf(textbox2Buffer, BUF_SIZE, "%d", command.Y);
_command.X = static_cast<uint8_t>(tileCoord.x);
_command.Y = static_cast<uint8_t>(tileCoord.y);
snprintf(textbox1Buffer, BUF_SIZE, "%d", _command.X);
snprintf(textbox2Buffer, BUF_SIZE, "%d", _command.Y);
}
else if (command.Type == TITLE_SCRIPT_ZOOM)
else if (_command.Type == TitleScript::Zoom)
{
uint8_t zoom = get_zoom();
command.Zoom = zoom;
snprintf(textbox1Buffer, BUF_SIZE, "%d", command.Zoom);
_command.Zoom = zoom;
snprintf(textbox1Buffer, BUF_SIZE, "%d", _command.Zoom);
}
w->Invalidate();
break;
@@ -329,11 +342,11 @@ static void window_title_command_editor_mouseup(rct_window* w, rct_widgetindex w
if (_window_title_command_editor_insert)
{
size_t insertIndex = _window_title_command_editor_index;
_sequence->Commands.insert(_sequence->Commands.begin() + insertIndex, command);
_sequence->Commands.insert(_sequence->Commands.begin() + insertIndex, _command);
}
else
{
_sequence->Commands[_window_title_command_editor_index] = command;
_sequence->Commands[_window_title_command_editor_index] = _command;
}
TitleSequenceSave(*_sequence);
@@ -365,11 +378,11 @@ static void window_title_command_editor_mousedown(rct_window* w, rct_widgetindex
{ w->windowPos.x + widget->left, w->windowPos.y + widget->top }, widget->height() + 1, w->colours[1], 0,
Dropdown::Flag::StayOpen, numItems, widget->width() - 3);
Dropdown::SetChecked(get_command_info_index(command.Type), true);
Dropdown::SetChecked(get_command_info_index(_command.Type), true);
break;
}
case WIDX_INPUT_DROPDOWN:
if (command.Type == TITLE_SCRIPT_SPEED)
if (_command.Type == TitleScript::Speed)
{
int32_t numItems = 4;
for (int32_t i = 0; i < numItems; i++)
@@ -382,9 +395,9 @@ static void window_title_command_editor_mousedown(rct_window* w, rct_widgetindex
{ w->windowPos.x + widget->left, w->windowPos.y + widget->top }, widget->height() + 1, w->colours[1], 0,
Dropdown::Flag::StayOpen, numItems, widget->width() - 3);
Dropdown::SetChecked(command.Speed - 1, true);
Dropdown::SetChecked(_command.Speed - 1, true);
}
else if (command.Type == TITLE_SCRIPT_LOAD)
else if (_command.Type == TitleScript::Load)
{
int32_t numItems = static_cast<int32_t>(_sequence->Saves.size());
for (int32_t i = 0; i < numItems; i++)
@@ -397,7 +410,7 @@ static void window_title_command_editor_mousedown(rct_window* w, rct_widgetindex
{ w->windowPos.x + widget->left, w->windowPos.y + widget->top }, widget->height() + 1, w->colours[1], 0,
Dropdown::Flag::StayOpen, numItems, widget->width() - 3);
Dropdown::SetChecked(command.SaveIndex, true);
Dropdown::SetChecked(_command.SaveIndex, true);
}
break;
}
@@ -417,76 +430,108 @@ static void window_title_command_editor_dropdown(rct_window* w, rct_widgetindex
switch (widgetIndex)
{
case WIDX_COMMAND_DROPDOWN:
if (command.SpriteIndex != SPRITE_INDEX_NULL)
if (_command.SpriteIndex != SPRITE_INDEX_NULL)
{
window_unfollow_sprite(w);
}
if (dropdownIndex == get_command_info_index(command.Type))
if (dropdownIndex == get_command_info_index(_command.Type))
{
break;
}
command.Type = _window_title_command_editor_orders[dropdownIndex].command;
switch (command.Type)
_command.Type = _window_title_command_editor_orders[dropdownIndex].command;
switch (_command.Type)
{
case TITLE_SCRIPT_LOCATION:
case TitleScript::Location:
{
auto tileCoord = get_location();
command.X = static_cast<uint8_t>(tileCoord.x);
command.Y = static_cast<uint8_t>(tileCoord.y);
snprintf(textbox1Buffer, BUF_SIZE, "%d", command.X);
snprintf(textbox2Buffer, BUF_SIZE, "%d", command.Y);
_command.X = static_cast<uint8_t>(tileCoord.x);
_command.Y = static_cast<uint8_t>(tileCoord.y);
snprintf(textbox1Buffer, BUF_SIZE, "%d", _command.X);
snprintf(textbox2Buffer, BUF_SIZE, "%d", _command.Y);
break;
}
case TITLE_SCRIPT_ROTATE:
command.Rotations = 1;
snprintf(textbox1Buffer, BUF_SIZE, "%d", command.Rotations);
case TitleScript::Rotate:
_command.Rotations = 1;
snprintf(textbox1Buffer, BUF_SIZE, "%d", _command.Rotations);
break;
case TITLE_SCRIPT_ZOOM:
command.Zoom = 0;
snprintf(textbox1Buffer, BUF_SIZE, "%d", command.Zoom);
case TitleScript::Undefined:
break;
case TITLE_SCRIPT_FOLLOW:
command.SpriteIndex = SPRITE_INDEX_NULL;
command.SpriteName[0] = '\0';
case TitleScript::Restart:
break;
case TitleScript::End:
break;
case TitleScript::Loop:
break;
case TitleScript::EndLoop:
break;
case TitleScript::Zoom:
_command.Zoom = 0;
snprintf(textbox1Buffer, BUF_SIZE, "%d", _command.Zoom);
break;
case TitleScript::Follow:
_command.SpriteIndex = SPRITE_INDEX_NULL;
_command.SpriteName[0] = '\0';
window_unfollow_sprite(w);
w->viewport->flags &= ~VIEWPORT_FOCUS_TYPE_SPRITE;
break;
case TITLE_SCRIPT_SPEED:
command.Speed = 1;
case TitleScript::Speed:
_command.Speed = 1;
break;
case TITLE_SCRIPT_WAIT:
command.Milliseconds = 10000;
snprintf(textbox1Buffer, BUF_SIZE, "%d", command.Milliseconds);
case TitleScript::Wait:
_command.Milliseconds = 10000;
snprintf(textbox1Buffer, BUF_SIZE, "%d", _command.Milliseconds);
break;
case TITLE_SCRIPT_LOAD:
command.SaveIndex = 0;
if (command.SaveIndex >= _sequence->Saves.size())
case TitleScript::Load:
_command.SaveIndex = 0;
if (_command.SaveIndex >= _sequence->Saves.size())
{
command.SaveIndex = 0xFF;
_command.SaveIndex = 0xFF;
}
break;
case TITLE_SCRIPT_LOADSC:
command.Scenario[0] = '\0';
case TitleScript::LoadSc:
_command.Scenario[0] = '\0';
}
w->Invalidate();
break;
case WIDX_INPUT_DROPDOWN:
switch (command.Type)
switch (_command.Type)
{
case TITLE_SCRIPT_SPEED:
if (dropdownIndex != command.Speed - 1)
case TitleScript::Speed:
if (dropdownIndex != _command.Speed - 1)
{
command.Speed = static_cast<uint8_t>(dropdownIndex + 1);
_command.Speed = static_cast<uint8_t>(dropdownIndex + 1);
w->Invalidate();
}
break;
case TITLE_SCRIPT_LOAD:
if (dropdownIndex != command.SaveIndex)
case TitleScript::Load:
if (dropdownIndex != _command.SaveIndex)
{
command.SaveIndex = static_cast<uint8_t>(dropdownIndex);
_command.SaveIndex = static_cast<uint8_t>(dropdownIndex);
w->Invalidate();
}
break;
case TitleScript::Restart:
break;
case TitleScript::End:
break;
case TitleScript::Loop:
break;
case TitleScript::EndLoop:
break;
case TitleScript::Undefined:
break;
case TitleScript::Location:
break;
case TitleScript::Wait:
break;
case TitleScript::Rotate:
break;
case TitleScript::Zoom:
break;
case TitleScript::Follow:
break;
case TitleScript::LoadSc:
break;
}
break;
}
@@ -499,7 +544,7 @@ static void window_title_command_editor_textinput(rct_window* w, rct_widgetindex
if (value < 0)
value = 0;
// The Wait command is the only one with acceptable values greater than 255.
if (value > 255 && command.Type != TITLE_SCRIPT_WAIT)
if (value > 255 && _command.Type != TitleScript::Wait)
value = 255;
switch (widgetIndex)
{
@@ -508,24 +553,24 @@ static void window_title_command_editor_textinput(rct_window* w, rct_widgetindex
{
if (*end == '\0')
{
if (command.Type == TITLE_SCRIPT_WAIT)
if (_command.Type == TitleScript::Wait)
{
if (value < 100)
value = 100;
if (value > 65000)
value = 65000;
command.Milliseconds = static_cast<uint16_t>(value);
snprintf(textbox1Buffer, BUF_SIZE, "%d", command.Milliseconds);
_command.Milliseconds = static_cast<uint16_t>(value);
snprintf(textbox1Buffer, BUF_SIZE, "%d", _command.Milliseconds);
}
else
{
// Both Rotate and Zoom have a maximum value of 3, but Rotate has a min value of 1 not 0.
if (value > 3)
value = 3;
if (value < 1 && command.Type == TITLE_SCRIPT_ROTATE)
if (value < 1 && _command.Type == TitleScript::Rotate)
value = 1;
command.Rotations = static_cast<uint8_t>(value);
snprintf(textbox1Buffer, BUF_SIZE, "%d", command.Rotations);
_command.Rotations = static_cast<uint8_t>(value);
snprintf(textbox1Buffer, BUF_SIZE, "%d", _command.Rotations);
}
}
w->Invalidate();
@@ -540,9 +585,9 @@ static void window_title_command_editor_textinput(rct_window* w, rct_widgetindex
{
if (*end == '\0')
{
command.X = static_cast<uint8_t>(value);
_command.X = static_cast<uint8_t>(value);
}
snprintf(textbox1Buffer, BUF_SIZE, "%d", command.X);
snprintf(textbox1Buffer, BUF_SIZE, "%d", _command.X);
w->Invalidate();
}
else
@@ -555,9 +600,9 @@ static void window_title_command_editor_textinput(rct_window* w, rct_widgetindex
{
if (*end == '\0')
{
command.Y = static_cast<uint8_t>(value);
_command.Y = static_cast<uint8_t>(value);
}
snprintf(textbox2Buffer, BUF_SIZE, "%d", command.Y);
snprintf(textbox2Buffer, BUF_SIZE, "%d", _command.Y);
w->Invalidate();
}
else
@@ -596,7 +641,7 @@ static void window_title_command_editor_tool_down(
validSprite = true;
Formatter ft;
peep->FormatNameTo(ft);
format_string(command.SpriteName, USER_STRING_MAX_LENGTH, STR_STRINGID, &peep->Id);
format_string(_command.SpriteName, USER_STRING_MAX_LENGTH, STR_STRINGID, &peep->Id);
}
else if (vehicle != nullptr)
{
@@ -607,7 +652,7 @@ static void window_title_command_editor_tool_down(
{
Formatter ft;
ride->FormatNameTo(ft);
format_string(command.SpriteName, USER_STRING_MAX_LENGTH, STR_STRINGID, ft.Data());
format_string(_command.SpriteName, USER_STRING_MAX_LENGTH, STR_STRINGID, ft.Data());
}
}
else if (litter != nullptr)
@@ -615,24 +660,24 @@ static void window_title_command_editor_tool_down(
if (litter->type < std::size(litterNames))
{
validSprite = true;
format_string(command.SpriteName, USER_STRING_MAX_LENGTH, litterNames[litter->type], nullptr);
format_string(_command.SpriteName, USER_STRING_MAX_LENGTH, litterNames[litter->type], nullptr);
}
}
else if (balloon != nullptr)
{
validSprite = true;
format_string(command.SpriteName, USER_STRING_MAX_LENGTH, STR_SHOP_ITEM_SINGULAR_BALLOON, nullptr);
format_string(_command.SpriteName, USER_STRING_MAX_LENGTH, STR_SHOP_ITEM_SINGULAR_BALLOON, nullptr);
}
else if (duck != nullptr)
{
validSprite = true;
format_string(command.SpriteName, USER_STRING_MAX_LENGTH, STR_DUCK, nullptr);
format_string(_command.SpriteName, USER_STRING_MAX_LENGTH, STR_DUCK, nullptr);
}
if (validSprite)
{
command.SpriteIndex = entity->sprite_index;
window_follow_sprite(w, static_cast<size_t>(command.SpriteIndex));
_command.SpriteIndex = entity->sprite_index;
window_follow_sprite(w, static_cast<size_t>(_command.SpriteIndex));
tool_cancel();
w->Invalidate();
}
@@ -652,31 +697,41 @@ static void window_title_command_editor_invalidate(rct_window* w)
window_title_command_editor_widgets[WIDX_SELECT_SCENARIO].type = WindowWidgetType::Empty;
window_title_command_editor_widgets[WIDX_SELECT_SPRITE].type = WindowWidgetType::Empty;
window_title_command_editor_widgets[WIDX_VIEWPORT].type = WindowWidgetType::Empty;
switch (command.Type)
switch (_command.Type)
{
case TITLE_SCRIPT_LOAD:
case TITLE_SCRIPT_SPEED:
case TitleScript::Load:
case TitleScript::Speed:
window_title_command_editor_widgets[WIDX_INPUT].type = WindowWidgetType::DropdownMenu;
window_title_command_editor_widgets[WIDX_INPUT_DROPDOWN].type = WindowWidgetType::Button;
break;
case TITLE_SCRIPT_LOADSC:
case TitleScript::LoadSc:
window_title_command_editor_widgets[WIDX_INPUT].type = WindowWidgetType::DropdownMenu;
window_title_command_editor_widgets[WIDX_SELECT_SCENARIO].type = WindowWidgetType::Button;
break;
case TITLE_SCRIPT_LOCATION:
case TitleScript::Location:
window_title_command_editor_widgets[WIDX_TEXTBOX_X].type = WindowWidgetType::TextBox;
window_title_command_editor_widgets[WIDX_TEXTBOX_Y].type = WindowWidgetType::TextBox;
window_title_command_editor_widgets[WIDX_GET].type = WindowWidgetType::Button;
break;
case TITLE_SCRIPT_ROTATE:
case TITLE_SCRIPT_WAIT:
case TitleScript::Rotate:
case TitleScript::Wait:
window_title_command_editor_widgets[WIDX_TEXTBOX_FULL].type = WindowWidgetType::TextBox;
break;
case TITLE_SCRIPT_ZOOM:
case TitleScript::Zoom:
window_title_command_editor_widgets[WIDX_GET].type = WindowWidgetType::Button;
window_title_command_editor_widgets[WIDX_TEXTBOX_FULL].type = WindowWidgetType::TextBox;
break;
case TITLE_SCRIPT_FOLLOW:
case TitleScript::Undefined:
break;
case TitleScript::Restart:
break;
case TitleScript::End:
break;
case TitleScript::Loop:
break;
case TitleScript::EndLoop:
break;
case TitleScript::Follow:
window_title_command_editor_widgets[WIDX_SELECT_SPRITE].type = WindowWidgetType::Button;
window_title_command_editor_widgets[WIDX_VIEWPORT].type = WindowWidgetType::Viewport;
@@ -705,7 +760,7 @@ static void window_title_command_editor_paint(rct_window* w, rct_drawpixelinfo*
{
WindowDrawWidgets(w, dpi);
TITLE_COMMAND_ORDER command_info = get_command_info(command.Type);
TITLE_COMMAND_ORDER command_info = get_command_info(_command.Type);
// "Command:" label
gfx_draw_string_left(
@@ -720,22 +775,22 @@ static void window_title_command_editor_paint(rct_window* w, rct_drawpixelinfo*
// Label (e.g. "Location:")
gfx_draw_string_left(dpi, command_info.descStringId, nullptr, w->colours[1], w->windowPos + ScreenCoordsXY{ WS, BY2 - 14 });
if (command.Type == TITLE_SCRIPT_SPEED)
if (_command.Type == TitleScript::Speed)
{
DrawTextEllipsised(
dpi, { w->windowPos.x + w->widgets[WIDX_INPUT].left + 1, w->windowPos.y + w->widgets[WIDX_INPUT].top },
w->widgets[WIDX_INPUT_DROPDOWN].left - w->widgets[WIDX_INPUT].left - 4, SpeedNames[command.Speed - 1], {},
w->widgets[WIDX_INPUT_DROPDOWN].left - w->widgets[WIDX_INPUT].left - 4, SpeedNames[_command.Speed - 1], {},
w->colours[1]);
}
if (command.Type == TITLE_SCRIPT_FOLLOW)
if (_command.Type == TitleScript::Follow)
{
uint8_t colour = COLOUR_BLACK;
rct_string_id spriteString = STR_TITLE_COMMAND_EDITOR_FORMAT_SPRITE_NAME;
auto ft = Formatter();
if (command.SpriteIndex != SPRITE_INDEX_NULL)
if (_command.SpriteIndex != SPRITE_INDEX_NULL)
{
window_draw_viewport(dpi, w);
ft.Add<utf8*>(command.SpriteName);
ft.Add<utf8*>(_command.SpriteName);
}
else
{
@@ -750,9 +805,9 @@ static void window_title_command_editor_paint(rct_window* w, rct_drawpixelinfo*
dpi, { w->windowPos.x + w->widgets[WIDX_VIEWPORT].left + 2, w->windowPos.y + w->widgets[WIDX_VIEWPORT].top + 1 },
w->widgets[WIDX_VIEWPORT].width() - 2, spriteString, ft, colour);
}
else if (command.Type == TITLE_SCRIPT_LOAD)
else if (_command.Type == TitleScript::Load)
{
if (command.SaveIndex == SAVE_INDEX_INVALID)
if (_command.SaveIndex == SAVE_INDEX_INVALID)
{
DrawTextEllipsised(
dpi, { w->windowPos.x + w->widgets[WIDX_INPUT].left + 1, w->windowPos.y + w->widgets[WIDX_INPUT].top },
@@ -762,15 +817,15 @@ static void window_title_command_editor_paint(rct_window* w, rct_drawpixelinfo*
else
{
auto ft = Formatter();
ft.Add<utf8*>(_sequence->Saves[command.SaveIndex].c_str());
ft.Add<utf8*>(_sequence->Saves[_command.SaveIndex].c_str());
DrawTextEllipsised(
dpi, { w->windowPos.x + w->widgets[WIDX_INPUT].left + 1, w->windowPos.y + w->widgets[WIDX_INPUT].top },
w->widgets[WIDX_INPUT_DROPDOWN].left - w->widgets[WIDX_INPUT].left - 4, STR_STRING, ft, w->colours[1]);
}
}
else if (command.Type == TITLE_SCRIPT_LOADSC)
else if (_command.Type == TitleScript::LoadSc)
{
if (command.Scenario[0] == '\0')
if (_command.Scenario[0] == '\0')
{
DrawTextEllipsised(
dpi, { w->windowPos.x + w->widgets[WIDX_INPUT].left + 1, w->windowPos.y + w->widgets[WIDX_INPUT].top },
@@ -781,7 +836,7 @@ static void window_title_command_editor_paint(rct_window* w, rct_drawpixelinfo*
{
const char* name = "";
rct_string_id nameString = STR_STRING;
auto scenario = GetScenarioRepository()->GetByInternalName(command.Scenario);
auto scenario = GetScenarioRepository()->GetByInternalName(_command.Scenario);
if (scenario != nullptr)
{
name = scenario->name;