mirror of https://github.com/OpenRCT2/OpenRCT2.git
Close #12443: Refactor TITLE_SCRIPT to use strong enum
This commit is contained in:
parent
f09b14ef2b
commit
3feefb09b1
|
@ -123,7 +123,7 @@ public:
|
|||
if (_waitCounter == 0)
|
||||
{
|
||||
const auto& command = _sequence->Commands[_position];
|
||||
if (command.Type == TITLE_SCRIPT_WAIT)
|
||||
if (command.Type == TitleScript::Wait)
|
||||
{
|
||||
IncrementPosition();
|
||||
}
|
||||
|
@ -136,11 +136,11 @@ public:
|
|||
const auto& command = _sequence->Commands[_position];
|
||||
if (ExecuteCommand(command))
|
||||
{
|
||||
if (command.Type == TITLE_SCRIPT_WAIT)
|
||||
if (command.Type == TitleScript::Wait)
|
||||
{
|
||||
break;
|
||||
}
|
||||
if (command.Type != TITLE_SCRIPT_RESTART)
|
||||
if (command.Type != TitleScript::Restart)
|
||||
{
|
||||
IncrementPosition();
|
||||
}
|
||||
|
@ -181,7 +181,7 @@ public:
|
|||
Reset();
|
||||
}
|
||||
|
||||
if (_sequence->Commands[targetPosition].Type == TITLE_SCRIPT_RESTART)
|
||||
if (_sequence->Commands[targetPosition].Type == TitleScript::Restart)
|
||||
{
|
||||
targetPosition = 0;
|
||||
}
|
||||
|
@ -243,36 +243,42 @@ private:
|
|||
{
|
||||
switch (command.Type)
|
||||
{
|
||||
case TITLE_SCRIPT_END:
|
||||
case TitleScript::End:
|
||||
_waitCounter = 1;
|
||||
break;
|
||||
case TITLE_SCRIPT_WAIT:
|
||||
case TitleScript::Wait:
|
||||
// The waitCounter is measured in 25-ms game ticks. Previously it was seconds * 40 ticks/second, now it is ms /
|
||||
// 25 ms/tick
|
||||
_waitCounter = std::max<int32_t>(1, command.Milliseconds / static_cast<uint32_t>(GAME_UPDATE_TIME_MS));
|
||||
break;
|
||||
case TITLE_SCRIPT_LOCATION:
|
||||
case TitleScript::Location:
|
||||
{
|
||||
auto loc = TileCoordsXY(command.X, command.Y).ToCoordsXY().ToTileCentre();
|
||||
SetViewLocation(loc);
|
||||
break;
|
||||
}
|
||||
case TITLE_SCRIPT_ROTATE:
|
||||
case TitleScript::Undefined:
|
||||
break;
|
||||
case TitleScript::Loop:
|
||||
break;
|
||||
case TitleScript::EndLoop:
|
||||
break;
|
||||
case TitleScript::Rotate:
|
||||
RotateView(command.Rotations);
|
||||
break;
|
||||
case TITLE_SCRIPT_ZOOM:
|
||||
case TitleScript::Zoom:
|
||||
SetViewZoom(command.Zoom);
|
||||
break;
|
||||
case TITLE_SCRIPT_SPEED:
|
||||
case TitleScript::Speed:
|
||||
gGameSpeed = std::clamp<uint8_t>(command.Speed, 1, 4);
|
||||
break;
|
||||
case TITLE_SCRIPT_FOLLOW:
|
||||
case TitleScript::Follow:
|
||||
FollowSprite(command.SpriteIndex);
|
||||
break;
|
||||
case TITLE_SCRIPT_RESTART:
|
||||
case TitleScript::Restart:
|
||||
Reset();
|
||||
break;
|
||||
case TITLE_SCRIPT_LOAD:
|
||||
case TitleScript::Load:
|
||||
{
|
||||
bool loadSuccess = false;
|
||||
uint8_t saveIndex = command.SaveIndex;
|
||||
|
@ -292,7 +298,7 @@ private:
|
|||
}
|
||||
break;
|
||||
}
|
||||
case TITLE_SCRIPT_LOADSC:
|
||||
case TitleScript::LoadSc:
|
||||
{
|
||||
bool loadSuccess = false;
|
||||
auto scenario = GetScenarioRepository()->GetByInternalName(command.Scenario);
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -925,7 +925,7 @@ static void window_title_editor_scrollpaint_commands(rct_window* w, rct_drawpixe
|
|||
gfx_fill_rect(dpi, fillRect, ColourMapA[w->colours[1]].lighter | 0x1000000);
|
||||
}
|
||||
|
||||
if (command.Type == TITLE_SCRIPT_LOAD && command.SaveIndex == SAVE_INDEX_INVALID)
|
||||
if (command.Type == TitleScript::Load && command.SaveIndex == SAVE_INDEX_INVALID)
|
||||
error = true;
|
||||
|
||||
auto ft = Formatter();
|
||||
|
@ -940,7 +940,7 @@ static void window_title_editor_scrollpaint_commands(rct_window* w, rct_drawpixe
|
|||
|
||||
switch (command.Type)
|
||||
{
|
||||
case TITLE_SCRIPT_LOAD:
|
||||
case TitleScript::Load:
|
||||
{
|
||||
auto commandName = STR_TITLE_EDITOR_COMMAND_LOAD_FILE;
|
||||
if (command.SaveIndex == SAVE_INDEX_INVALID)
|
||||
|
@ -955,7 +955,7 @@ static void window_title_editor_scrollpaint_commands(rct_window* w, rct_drawpixe
|
|||
}
|
||||
break;
|
||||
}
|
||||
case TITLE_SCRIPT_LOCATION:
|
||||
case TitleScript::Location:
|
||||
{
|
||||
auto commandName = STR_TITLE_EDITOR_COMMAND_LOCATION;
|
||||
ft.Add<rct_string_id>(commandName);
|
||||
|
@ -963,28 +963,28 @@ static void window_title_editor_scrollpaint_commands(rct_window* w, rct_drawpixe
|
|||
ft.Add<uint16_t>(command.Y);
|
||||
break;
|
||||
}
|
||||
case TITLE_SCRIPT_ROTATE:
|
||||
case TitleScript::Rotate:
|
||||
{
|
||||
auto commandName = STR_TITLE_EDITOR_COMMAND_ROTATE;
|
||||
ft.Add<rct_string_id>(commandName);
|
||||
ft.Add<uint16_t>(command.Rotations);
|
||||
break;
|
||||
}
|
||||
case TITLE_SCRIPT_ZOOM:
|
||||
case TitleScript::Zoom:
|
||||
{
|
||||
auto commandName = STR_TITLE_EDITOR_COMMAND_ZOOM;
|
||||
ft.Add<rct_string_id>(commandName);
|
||||
ft.Add<uint16_t>(command.Zoom);
|
||||
break;
|
||||
}
|
||||
case TITLE_SCRIPT_SPEED:
|
||||
case TitleScript::Speed:
|
||||
{
|
||||
auto commandName = STR_TITLE_EDITOR_COMMAND_SPEED;
|
||||
ft.Add<rct_string_id>(commandName);
|
||||
ft.Add<rct_string_id>(SpeedNames[command.Speed - 1]);
|
||||
break;
|
||||
}
|
||||
case TITLE_SCRIPT_FOLLOW:
|
||||
case TitleScript::Follow:
|
||||
{
|
||||
auto commandName = STR_TITLE_EDITOR_COMMAND_FOLLOW;
|
||||
if (command.SpriteIndex == SPRITE_INDEX_NULL)
|
||||
|
@ -999,26 +999,26 @@ static void window_title_editor_scrollpaint_commands(rct_window* w, rct_drawpixe
|
|||
}
|
||||
break;
|
||||
}
|
||||
case TITLE_SCRIPT_WAIT:
|
||||
case TitleScript::Wait:
|
||||
{
|
||||
auto commandName = STR_TITLE_EDITOR_COMMAND_WAIT;
|
||||
ft.Add<rct_string_id>(commandName);
|
||||
ft.Add<uint16_t>(command.Milliseconds);
|
||||
break;
|
||||
}
|
||||
case TITLE_SCRIPT_RESTART:
|
||||
case TitleScript::Restart:
|
||||
{
|
||||
auto commandName = STR_TITLE_EDITOR_RESTART;
|
||||
ft.Add<rct_string_id>(commandName);
|
||||
break;
|
||||
}
|
||||
case TITLE_SCRIPT_END:
|
||||
case TitleScript::End:
|
||||
{
|
||||
auto commandName = STR_TITLE_EDITOR_END;
|
||||
ft.Add<rct_string_id>(commandName);
|
||||
break;
|
||||
}
|
||||
case TITLE_SCRIPT_LOADSC:
|
||||
case TitleScript::LoadSc:
|
||||
{
|
||||
auto commandName = STR_TITLE_EDITOR_COMMAND_LOAD_FILE;
|
||||
const char* name = "";
|
||||
|
|
|
@ -269,7 +269,7 @@ bool TitleSequenceRemovePark(TitleSequence& seq, size_t index)
|
|||
// Update load commands
|
||||
for (auto& command : seq.Commands)
|
||||
{
|
||||
if (command.Type == TITLE_SCRIPT_LOAD)
|
||||
if (command.Type == TitleScript::Load)
|
||||
{
|
||||
if (command.SaveIndex == index)
|
||||
{
|
||||
|
@ -330,13 +330,13 @@ static std::vector<TitleCommand> LegacyScriptRead(const std::vector<uint8_t>& sc
|
|||
part1 = &parts[1 * 128];
|
||||
part2 = &parts[2 * 128];
|
||||
TitleCommand command = {};
|
||||
command.Type = TITLE_SCRIPT_UNDEFINED;
|
||||
command.Type = TitleScript::Undefined;
|
||||
|
||||
if (token[0] != 0)
|
||||
{
|
||||
if (_stricmp(token, "LOAD") == 0)
|
||||
{
|
||||
command.Type = TITLE_SCRIPT_LOAD;
|
||||
command.Type = TitleScript::Load;
|
||||
command.SaveIndex = SAVE_INDEX_INVALID;
|
||||
for (size_t i = 0; i < saves.size(); i++)
|
||||
{
|
||||
|
@ -349,51 +349,51 @@ static std::vector<TitleCommand> LegacyScriptRead(const std::vector<uint8_t>& sc
|
|||
}
|
||||
else if (_stricmp(token, "LOCATION") == 0)
|
||||
{
|
||||
command.Type = TITLE_SCRIPT_LOCATION;
|
||||
command.Type = TitleScript::Location;
|
||||
command.X = atoi(part1) & 0xFF;
|
||||
command.Y = atoi(part2) & 0xFF;
|
||||
}
|
||||
else if (_stricmp(token, "ROTATE") == 0)
|
||||
{
|
||||
command.Type = TITLE_SCRIPT_ROTATE;
|
||||
command.Type = TitleScript::Rotate;
|
||||
command.Rotations = atoi(part1) & 0xFF;
|
||||
}
|
||||
else if (_stricmp(token, "ZOOM") == 0)
|
||||
{
|
||||
command.Type = TITLE_SCRIPT_ZOOM;
|
||||
command.Type = TitleScript::Zoom;
|
||||
command.Zoom = atoi(part1) & 0xFF;
|
||||
}
|
||||
else if (_stricmp(token, "SPEED") == 0)
|
||||
{
|
||||
command.Type = TITLE_SCRIPT_SPEED;
|
||||
command.Type = TitleScript::Speed;
|
||||
command.Speed = std::max(1, std::min(4, atoi(part1) & 0xFF));
|
||||
}
|
||||
else if (_stricmp(token, "FOLLOW") == 0)
|
||||
{
|
||||
command.Type = TITLE_SCRIPT_FOLLOW;
|
||||
command.Type = TitleScript::Follow;
|
||||
command.SpriteIndex = atoi(part1) & 0xFFFF;
|
||||
safe_strcpy(command.SpriteName, part2, USER_STRING_MAX_LENGTH);
|
||||
}
|
||||
else if (_stricmp(token, "WAIT") == 0)
|
||||
{
|
||||
command.Type = TITLE_SCRIPT_WAIT;
|
||||
command.Type = TitleScript::Wait;
|
||||
command.Milliseconds = atoi(part1) & 0xFFFF;
|
||||
}
|
||||
else if (_stricmp(token, "RESTART") == 0)
|
||||
{
|
||||
command.Type = TITLE_SCRIPT_RESTART;
|
||||
command.Type = TitleScript::Restart;
|
||||
}
|
||||
else if (_stricmp(token, "END") == 0)
|
||||
{
|
||||
command.Type = TITLE_SCRIPT_END;
|
||||
command.Type = TitleScript::End;
|
||||
}
|
||||
else if (_stricmp(token, "LOADSC") == 0)
|
||||
{
|
||||
command.Type = TITLE_SCRIPT_LOADSC;
|
||||
command.Type = TitleScript::LoadSc;
|
||||
safe_strcpy(command.Scenario, part1, sizeof(command.Scenario));
|
||||
}
|
||||
}
|
||||
if (command.Type != TITLE_SCRIPT_UNDEFINED)
|
||||
if (command.Type != TitleScript::Undefined)
|
||||
{
|
||||
commands.push_back(command);
|
||||
}
|
||||
|
@ -497,7 +497,7 @@ static std::string LegacyScriptWrite(const TitleSequence& seq)
|
|||
{
|
||||
switch (command.Type)
|
||||
{
|
||||
case TITLE_SCRIPT_LOAD:
|
||||
case TitleScript::Load:
|
||||
if (command.SaveIndex == 0xFF)
|
||||
{
|
||||
sb.Append("LOAD <No save file>");
|
||||
|
@ -508,7 +508,7 @@ static std::string LegacyScriptWrite(const TitleSequence& seq)
|
|||
sb.Append(seq.Saves[command.SaveIndex].c_str());
|
||||
}
|
||||
break;
|
||||
case TITLE_SCRIPT_LOADSC:
|
||||
case TitleScript::LoadSc:
|
||||
if (command.Scenario[0] == '\0')
|
||||
{
|
||||
sb.Append("LOADSC <No scenario name>");
|
||||
|
@ -519,35 +519,41 @@ static std::string LegacyScriptWrite(const TitleSequence& seq)
|
|||
sb.Append(command.Scenario);
|
||||
}
|
||||
break;
|
||||
case TITLE_SCRIPT_LOCATION:
|
||||
case TitleScript::Undefined:
|
||||
break;
|
||||
case TitleScript::Loop:
|
||||
break;
|
||||
case TitleScript::EndLoop:
|
||||
break;
|
||||
case TitleScript::Location:
|
||||
String::Format(buffer, sizeof(buffer), "LOCATION %u %u", command.X, command.Y);
|
||||
sb.Append(buffer);
|
||||
break;
|
||||
case TITLE_SCRIPT_ROTATE:
|
||||
case TitleScript::Rotate:
|
||||
String::Format(buffer, sizeof(buffer), "ROTATE %u", command.Rotations);
|
||||
sb.Append(buffer);
|
||||
break;
|
||||
case TITLE_SCRIPT_ZOOM:
|
||||
case TitleScript::Zoom:
|
||||
String::Format(buffer, sizeof(buffer), "ZOOM %u", command.Zoom);
|
||||
sb.Append(buffer);
|
||||
break;
|
||||
case TITLE_SCRIPT_FOLLOW:
|
||||
case TitleScript::Follow:
|
||||
String::Format(buffer, sizeof(buffer), "FOLLOW %u ", command.SpriteIndex);
|
||||
sb.Append(buffer);
|
||||
sb.Append(command.SpriteName);
|
||||
break;
|
||||
case TITLE_SCRIPT_SPEED:
|
||||
case TitleScript::Speed:
|
||||
String::Format(buffer, sizeof(buffer), "SPEED %u", command.Speed);
|
||||
sb.Append(buffer);
|
||||
break;
|
||||
case TITLE_SCRIPT_WAIT:
|
||||
case TitleScript::Wait:
|
||||
String::Format(buffer, sizeof(buffer), "WAIT %u", command.Milliseconds);
|
||||
sb.Append(buffer);
|
||||
break;
|
||||
case TITLE_SCRIPT_RESTART:
|
||||
case TitleScript::Restart:
|
||||
sb.Append("RESTART");
|
||||
break;
|
||||
case TITLE_SCRIPT_END:
|
||||
case TitleScript::End:
|
||||
sb.Append("END");
|
||||
}
|
||||
sb.Append("\n");
|
||||
|
@ -560,8 +566,8 @@ bool TitleSequenceIsLoadCommand(const TitleCommand& command)
|
|||
{
|
||||
switch (command.Type)
|
||||
{
|
||||
case TITLE_SCRIPT_LOAD:
|
||||
case TITLE_SCRIPT_LOADSC:
|
||||
case TitleScript::Load:
|
||||
case TitleScript::LoadSc:
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
|
|
|
@ -16,10 +16,10 @@
|
|||
#include <memory>
|
||||
|
||||
#define TITLE_COMMAND_SCENARIO_LENGTH 64
|
||||
|
||||
enum class TitleScript : uint8_t;
|
||||
struct TitleCommand
|
||||
{
|
||||
uint8_t Type;
|
||||
TitleScript Type;
|
||||
union
|
||||
{
|
||||
uint8_t SaveIndex; // LOAD (this index is internal only)
|
||||
|
@ -58,21 +58,21 @@ struct TitleSequenceParkHandle
|
|||
std::unique_ptr<OpenRCT2::IStream> Stream;
|
||||
};
|
||||
|
||||
enum TITLE_SCRIPT
|
||||
enum class TitleScript : uint8_t
|
||||
{
|
||||
TITLE_SCRIPT_UNDEFINED = 0xFF,
|
||||
TITLE_SCRIPT_WAIT = 0,
|
||||
TITLE_SCRIPT_LOCATION,
|
||||
TITLE_SCRIPT_ROTATE,
|
||||
TITLE_SCRIPT_ZOOM,
|
||||
TITLE_SCRIPT_FOLLOW,
|
||||
TITLE_SCRIPT_RESTART,
|
||||
TITLE_SCRIPT_LOAD,
|
||||
TITLE_SCRIPT_END,
|
||||
TITLE_SCRIPT_SPEED,
|
||||
TITLE_SCRIPT_LOOP,
|
||||
TITLE_SCRIPT_ENDLOOP,
|
||||
TITLE_SCRIPT_LOADSC,
|
||||
Undefined = 0xFF,
|
||||
Wait = 0,
|
||||
Location,
|
||||
Rotate,
|
||||
Zoom,
|
||||
Follow,
|
||||
Restart,
|
||||
Load,
|
||||
End,
|
||||
Speed,
|
||||
Loop,
|
||||
EndLoop,
|
||||
LoadSc,
|
||||
};
|
||||
|
||||
constexpr const utf8* TITLE_SEQUENCE_EXTENSION = ".parkseq";
|
||||
|
|
Loading…
Reference in New Issue