(svn r16376) -Codechange: Vehicle::Tick() now returns false if the vehicle was deleted

This commit is contained in:
smatz
2009-05-22 13:53:14 +00:00
parent 561d97880d
commit b687ac51ee
13 changed files with 189 additions and 107 deletions

View File

@@ -540,7 +540,7 @@ static void RoadVehSetRandomDirection(Vehicle *v)
} while ((v = v->Next()) != NULL);
}
static void RoadVehIsCrashed(Vehicle *v)
static bool RoadVehIsCrashed(Vehicle *v)
{
v->u.road.crashed_ctr++;
if (v->u.road.crashed_ctr == 2) {
@@ -548,8 +548,12 @@ static void RoadVehIsCrashed(Vehicle *v)
} else if (v->u.road.crashed_ctr <= 45) {
if ((v->tick_counter & 7) == 0) RoadVehSetRandomDirection(v);
} else if (v->u.road.crashed_ctr >= 2220 && !(v->tick_counter & 0x1F)) {
bool ret = v->Next() != NULL;
DeleteLastRoadVeh(v);
return ret;
}
return true;
}
static Vehicle *EnumCheckRoadVehCrashTrain(Vehicle *v, void *data)
@@ -1735,7 +1739,7 @@ again:
return true;
}
static void RoadVehController(Vehicle *v)
static bool RoadVehController(Vehicle *v)
{
/* decrease counters */
v->tick_counter++;
@@ -1744,8 +1748,7 @@ static void RoadVehController(Vehicle *v)
/* handle crashed */
if (v->vehstatus & VS_CRASHED) {
RoadVehIsCrashed(v);
return;
return RoadVehIsCrashed(v);
}
RoadVehCheckTrainCrash(v);
@@ -1754,19 +1757,19 @@ static void RoadVehController(Vehicle *v)
if (v->breakdown_ctr != 0) {
if (v->breakdown_ctr <= 2) {
HandleBrokenRoadVeh(v);
return;
return true;
}
if (!v->current_order.IsType(OT_LOADING)) v->breakdown_ctr--;
}
if (v->vehstatus & VS_STOPPED) return;
if (v->vehstatus & VS_STOPPED) return true;
ProcessOrders(v);
v->HandleLoading();
if (v->current_order.IsType(OT_LOADING)) return;
if (v->current_order.IsType(OT_LOADING)) return true;
if (v->IsInDepot() && RoadVehLeaveDepot(v, true)) return;
if (v->IsInDepot() && RoadVehLeaveDepot(v, true)) return true;
/* Check how far the vehicle needs to proceed */
int j = RoadVehAccelerate(v);
@@ -1796,6 +1799,8 @@ static void RoadVehController(Vehicle *v)
}
if (v->progress == 0) v->progress = j;
return true;
}
static void AgeRoadVehCargo(Vehicle *v)
@@ -1804,14 +1809,16 @@ static void AgeRoadVehCargo(Vehicle *v)
v->cargo.AgeCargo();
}
void RoadVehicle::Tick()
bool RoadVehicle::Tick()
{
AgeRoadVehCargo(this);
if (IsRoadVehFront(this)) {
if (!(this->vehstatus & VS_STOPPED)) this->running_ticks++;
RoadVehController(this);
return RoadVehController(this);
}
return true;
}
static void CheckIfRoadVehNeedsService(Vehicle *v)