Enable locking timetable travel times

This commit is contained in:
Jonathan G Rennison
2018-08-13 01:42:14 +01:00
parent 5344ec1931
commit e55a327c09
5 changed files with 51 additions and 6 deletions

View File

@@ -54,6 +54,7 @@ static void ChangeTimetable(Vehicle *v, VehicleOrderID order_number, uint16 val,
break;
case MTF_TRAVEL_TIME:
if (!ignore_lock && order->IsTravelFixed()) return;
if (!order->IsType(OT_CONDITIONAL)) {
total_delta = val - order->GetTravelTime();
timetable_delta = (timetabled ? val : 0) - order->GetTimetabledTravel();
@@ -71,6 +72,10 @@ static void ChangeTimetable(Vehicle *v, VehicleOrderID order_number, uint16 val,
order->SetWaitFixed(val != 0);
break;
case MTF_SET_TRAVEL_FIXED:
order->SetTravelFixed(val != 0);
break;
case MTF_SET_LEAVE_TYPE:
order->SetLeaveType((OrderLeaveType)val);
break;
@@ -102,6 +107,10 @@ static void ChangeTimetable(Vehicle *v, VehicleOrderID order_number, uint16 val,
v->current_order.SetWaitFixed(val != 0);
break;
case MTF_SET_TRAVEL_FIXED:
v->current_order.SetTravelFixed(val != 0);
break;
default:
NOT_REACHED();
}
@@ -148,6 +157,7 @@ CommandCost CmdChangeTimetable(TileIndex tile, DoCommandFlag flags, uint32 p1, u
int travel_time = order->GetTravelTime();
int max_speed = order->GetMaxSpeed();
bool wait_fixed = order->IsWaitFixed();
bool travel_fixed = order->IsTravelFixed();
OrderLeaveType leave_type = order->GetLeaveType();
switch (mtf) {
case MTF_WAIT_TIME:
@@ -169,6 +179,10 @@ CommandCost CmdChangeTimetable(TileIndex tile, DoCommandFlag flags, uint32 p1, u
wait_fixed = GB(p2, 0, 16) != 0;
break;
case MTF_SET_TRAVEL_FIXED:
travel_fixed = GB(p2, 0, 16) != 0;
break;
case MTF_SET_LEAVE_TYPE:
leave_type = (OrderLeaveType)GB(p2, 0, 16);
if (leave_type >= OLT_END) return CMD_ERROR;
@@ -227,6 +241,12 @@ CommandCost CmdChangeTimetable(TileIndex tile, DoCommandFlag flags, uint32 p1, u
}
break;
case MTF_SET_TRAVEL_FIXED:
if (travel_fixed != order->IsTravelFixed()) {
ChangeTimetable(v, order_number, travel_fixed ? 1 : 0, MTF_SET_TRAVEL_FIXED, false, true);
}
break;
case MTF_SET_LEAVE_TYPE:
if (leave_type != order->GetLeaveType()) {
ChangeTimetable(v, order_number, leave_type, MTF_SET_LEAVE_TYPE, true);