(svn r20646) -Codechange: make the code flow of breakdown handling a bit clearer

pull/155/head
rubidium 14 years ago
parent 64f4b0d718
commit adb7baf2d8

@ -993,53 +993,57 @@ bool Vehicle::HandleBreakdown()
* 1 - vehicle is currently broken down
* 2 - vehicle is going to break down now
* >2 - vehicle is counting down to the actual breakdown event */
if (this->breakdown_ctr == 0) return false;
if (this->breakdown_ctr > 2) {
if (!this->current_order.IsType(OT_LOADING)) this->breakdown_ctr--;
return false;
}
if (this->breakdown_ctr != 1) {
this->breakdown_ctr = 1;
switch (this->breakdown_ctr) {
case 0:
return false;
if (this->breakdowns_since_last_service != 255) {
this->breakdowns_since_last_service++;
}
case 2:
this->breakdown_ctr = 1;
this->MarkDirty();
SetWindowDirty(WC_VEHICLE_VIEW, this->index);
SetWindowDirty(WC_VEHICLE_DETAILS, this->index);
if (this->breakdowns_since_last_service != 255) {
this->breakdowns_since_last_service++;
}
if (this->type == VEH_AIRCRAFT) {
/* Aircraft just need this flag, the rest is handled elsewhere */
this->vehstatus |= VS_AIRCRAFT_BROKEN;
} else {
this->cur_speed = 0;
this->MarkDirty();
SetWindowDirty(WC_VEHICLE_VIEW, this->index);
SetWindowDirty(WC_VEHICLE_DETAILS, this->index);
if (this->type == VEH_AIRCRAFT) {
/* Aircraft just need this flag, the rest is handled elsewhere */
this->vehstatus |= VS_AIRCRAFT_BROKEN;
} else {
this->cur_speed = 0;
if (!PlayVehicleSound(this, VSE_BREAKDOWN)) {
SndPlayVehicleFx((_settings_game.game_creation.landscape != LT_TOYLAND) ?
(this->type == VEH_TRAIN ? SND_10_TRAIN_BREAKDOWN : SND_0F_VEHICLE_BREAKDOWN) :
(this->type == VEH_TRAIN ? SND_3A_COMEDY_BREAKDOWN_2 : SND_35_COMEDY_BREAKDOWN), this);
}
if (!PlayVehicleSound(this, VSE_BREAKDOWN)) {
SndPlayVehicleFx((_settings_game.game_creation.landscape != LT_TOYLAND) ?
(this->type == VEH_TRAIN ? SND_10_TRAIN_BREAKDOWN : SND_0F_VEHICLE_BREAKDOWN) :
(this->type == VEH_TRAIN ? SND_3A_COMEDY_BREAKDOWN_2 : SND_35_COMEDY_BREAKDOWN), this);
if (!(this->vehstatus & VS_HIDDEN)) {
EffectVehicle *u = CreateEffectVehicleRel(this, 4, 4, 5, EV_BREAKDOWN_SMOKE);
if (u != NULL) u->animation_state = this->breakdown_delay * 2;
}
}
if (!(this->vehstatus & VS_HIDDEN)) {
EffectVehicle *u = CreateEffectVehicleRel(this, 4, 4, 5, EV_BREAKDOWN_SMOKE);
if (u != NULL) u->animation_state = this->breakdown_delay * 2;
/* FALL THROUGH */
case 1:
/* Aircraft breakdowns end only when arriving at the airport */
if (this->type == VEH_AIRCRAFT) return false;
/* For trains this function is called twice per tick, so decrease v->breakdown_delay at half the rate */
if ((this->tick_counter & (this->type == VEH_TRAIN ? 3 : 1)) == 0) {
if (--this->breakdown_delay == 0) {
this->breakdown_ctr = 0;
this->MarkDirty();
SetWindowDirty(WC_VEHICLE_VIEW, this->index);
}
}
}
}
/* Aircraft breakdowns end only when arriving at the airport */
if (this->type == VEH_AIRCRAFT) return false;
return true;
/* For trains this function is called twice per tick, so decrease v->breakdown_delay at half the rate */
if ((this->tick_counter & (this->type == VEH_TRAIN ? 3 : 1)) == 0) {
if (--this->breakdown_delay == 0) {
this->breakdown_ctr = 0;
this->MarkDirty();
SetWindowDirty(WC_VEHICLE_VIEW, this->index);
}
default:
if (!this->current_order.IsType(OT_LOADING)) this->breakdown_ctr--;
return false;
}
return true;
}
void AgeVehicle(Vehicle *v)

Loading…
Cancel
Save