(svn r6418) -Fix: [autoreplace] now multiheaded engines and other locomotives consisting of more than one unit will only be counted once

This also cleaned up the counting loop alot and it will also (hopefully) be faster (didn't benchmark it)
replace/41b28d7194a279bdc17475d4fbe2ea6ec885a466
bjarni 18 years ago
parent 782fe8b8f2
commit 347a3f9a43

@ -773,19 +773,20 @@ static void ReplaceVehicleWndProc(Window *w, WindowEvent *e)
{
uint i;
const Vehicle *vehicle;
/* compiler optimisation tend to prefer to keep local variables in the registers instead of global ones,
* so we cache often used and unchanging variables in local variables to increase the loop speed */
const byte vehicle_type = w->window_number;
const PlayerID player = _local_player;
for (i = 0; i < lengthof(_player_num_engines); i++) {
_player_num_engines[i] = 0;
}
FOR_ALL_VEHICLES(vehicle) {
if (vehicle->owner == _local_player) {
if (vehicle->type == VEH_Aircraft && vehicle->subtype > 2) continue;
// do not count the vehicles, that contains only 0 in all var
if (vehicle->engine_type == 0 && vehicle->spritenum == 0) continue;
if (vehicle->type != GetEngine(vehicle->engine_type)->type) continue;
if (vehicle->owner == player && vehicle->type == vehicle_type) {
if (vehicle_type == VEH_Aircraft && vehicle->subtype > 2) continue; // plane shadows and helicopter rotors
if (vehicle_type == VEH_Train && (
IsArticulatedPart(vehicle) || // tenders and other articulated parts
(IsMultiheaded(vehicle) && !IsTrainEngine(vehicle)))) continue; // rear parts of multiheaded engines
_player_num_engines[vehicle->engine_type]++;
}
}

Loading…
Cancel
Save