@@ -102,6 +102,8 @@ struct SelectGameWindow : public Window
size_t cur_viewport_command_index;
/** Time spent (milliseconds) on current viewport command. */
uint cur_viewport_command_time;
uint mouse_idle_time;
Point mouse_idle_pos;
/**
* Find and parse all viewport command signs.
@@ -181,6 +183,8 @@ struct SelectGameWindow : public Window
this->cur_viewport_command_index = (size_t)-1;
this->cur_viewport_command_time = 0;
this->mouse_idle_time = 0;
this->mouse_idle_pos = _cursor.pos;
}
void OnRealtimeTick(uint delta_ms) override
@@ -189,6 +193,17 @@ struct SelectGameWindow : public Window
if (intro_viewport_commands.empty()) return;
bool suppress_panning = true;
if (this->mouse_idle_pos.x != _cursor.pos.x || this->mouse_idle_pos.y != _cursor.pos.y) {
this->mouse_idle_time = 2000;
} else if (this->mouse_idle_time > delta_ms) {
this->mouse_idle_time -= delta_ms;
} else {
suppress_panning = false;
/* Determine whether to move to the next command or stay at current. */
bool changed_command = false;
if (this->cur_viewport_command_index >= intro_viewport_commands.size()) {
@@ -212,6 +227,9 @@ struct SelectGameWindow : public Window
/* Early exit if the current command hasn't elapsed and isn't animated. */
if (!changed_command && !vc.pan_to_next && vc.vehicle == INVALID_VEHICLE) return;
/* Suppress panning commands, while user interacts with GUIs. */
if (!changed_command && suppress_panning) return;
/* Reset the zoom level. */
if (changed_command) FixTitleGameZoom(vc.zoom_adjust);
Status change: