mirror of https://github.com/OpenTTD/OpenTTD
Fix: bad oddness checks
Modulo on a signed number returns negative values for negative values, so i % 2 == 1 will only return true for positive odd numbers, whereas i % 2 != 0 returns true for both positive and negative odd numbers.pull/10326/head
parent
f7af9a299a
commit
c1ff471c77
|
@ -310,13 +310,13 @@ struct TimetableWindow : Window {
|
|||
bool disable = true;
|
||||
if (selected != -1) {
|
||||
const Order *order = v->GetOrder(((selected + 1) / 2) % v->GetNumOrders());
|
||||
if (selected % 2 == 1) {
|
||||
if (selected % 2 != 0) {
|
||||
disable = order != nullptr && (order->IsType(OT_CONDITIONAL) || order->IsType(OT_IMPLICIT));
|
||||
} else {
|
||||
disable = order == nullptr || ((!order->IsType(OT_GOTO_STATION) || (order->GetNonStopType() & ONSF_NO_STOP_AT_DESTINATION_STATION)) && !order->IsType(OT_CONDITIONAL));
|
||||
}
|
||||
}
|
||||
bool disable_speed = disable || selected % 2 != 1 || v->type == VEH_AIRCRAFT;
|
||||
bool disable_speed = disable || selected % 2 == 0 || v->type == VEH_AIRCRAFT;
|
||||
|
||||
this->SetWidgetDisabledState(WID_VT_CHANGE_TIME, disable);
|
||||
this->SetWidgetDisabledState(WID_VT_CLEAR_TIME, disable);
|
||||
|
@ -505,7 +505,7 @@ struct TimetableWindow : Window {
|
|||
static inline std::tuple<VehicleOrderID, ModifyTimetableFlags> PackTimetableArgs(const Vehicle *v, uint selected, bool speed)
|
||||
{
|
||||
uint order_number = (selected + 1) / 2;
|
||||
ModifyTimetableFlags mtf = (selected % 2 == 1) ? (speed ? MTF_TRAVEL_SPEED : MTF_TRAVEL_TIME) : MTF_WAIT_TIME;
|
||||
ModifyTimetableFlags mtf = (selected % 2 != 0) ? (speed ? MTF_TRAVEL_SPEED : MTF_TRAVEL_TIME) : MTF_WAIT_TIME;
|
||||
|
||||
if (order_number >= v->GetNumOrders()) order_number = 0;
|
||||
|
||||
|
@ -543,7 +543,7 @@ struct TimetableWindow : Window {
|
|||
StringID current = STR_EMPTY;
|
||||
|
||||
if (order != nullptr) {
|
||||
uint time = (selected % 2 == 1) ? order->GetTravelTime() : order->GetWaitTime();
|
||||
uint time = (selected % 2 != 0) ? order->GetTravelTime() : order->GetWaitTime();
|
||||
if (!_settings_client.gui.timetable_in_ticks) time /= DAY_TICKS;
|
||||
|
||||
if (time != 0) {
|
||||
|
|
Loading…
Reference in New Issue