From 6d41c23cf2f485728a64470fe49a10c155e250cd Mon Sep 17 00:00:00 2001 From: bjarni Date: Sat, 29 Oct 2005 21:54:28 +0000 Subject: [PATCH] (svn r3101) -Codechange: added _new_vehicle_id this var works like _new_train_id and the rest of that kind of vars, except it is set each time a vehicle is build, nomatter what type this is a nice tool to code vehicle independent code, which in turn can reduce code duplication Right now it's used in ReplaceVehicle() and CmdCloneVehicle() --- aircraft_cmd.c | 1 + roadveh_cmd.c | 1 + ship_cmd.c | 1 + train_cmd.c | 2 ++ vehicle.c | 22 ++++------------------ vehicle.h | 1 + 6 files changed, 10 insertions(+), 18 deletions(-) diff --git a/aircraft_cmd.c b/aircraft_cmd.c index ebd4c5f7b8..1b485216c5 100644 --- a/aircraft_cmd.c +++ b/aircraft_cmd.c @@ -251,6 +251,7 @@ int32 CmdBuildAircraft(int x, int y, uint32 flags, uint32 p1, uint32 p2) v->max_age = e->lifelength * 366; _new_aircraft_id = v->index; + _new_vehicle_id = v->index; v->u.air.pos = MAX_ELEMENTS; diff --git a/roadveh_cmd.c b/roadveh_cmd.c index ab9254799e..149fe3fd1b 100644 --- a/roadveh_cmd.c +++ b/roadveh_cmd.c @@ -176,6 +176,7 @@ int32 CmdBuildRoadVeh(int x, int y, uint32 flags, uint32 p1, uint32 p2) v->reliability_spd_dec = e->reliability_spd_dec; v->max_age = e->lifelength * 366; _new_roadveh_id = v->index; + _new_vehicle_id = v->index; v->string_id = STR_SV_ROADVEH_NAME; diff --git a/ship_cmd.c b/ship_cmd.c index 64f853d911..d708b4f473 100644 --- a/ship_cmd.c +++ b/ship_cmd.c @@ -907,6 +907,7 @@ int32 CmdBuildShip(int x, int y, uint32 flags, uint32 p1, uint32 p2) v->reliability_spd_dec = e->reliability_spd_dec; v->max_age = e->lifelength * 366; _new_ship_id = v->index; + _new_vehicle_id = v->index; v->string_id = STR_SV_SHIP_NAME; v->u.ship.state = 0x80; diff --git a/train_cmd.c b/train_cmd.c index 8d3490196e..6ee0e031f7 100644 --- a/train_cmd.c +++ b/train_cmd.c @@ -471,6 +471,7 @@ static int32 CmdBuildRailWagon(EngineID engine, TileIndex tile, uint32 flags) v->cur_image = 0xAC2; _new_wagon_id = v->index; + _new_vehicle_id = v->index; VehiclePositionChanged(v); TrainConsistChanged(GetFirstVehicleInChain(v)); @@ -632,6 +633,7 @@ int32 CmdBuildRailVehicle(int x, int y, uint32 flags, uint32 p1, uint32 p2) v->string_id = STR_SV_TRAIN_NAME; v->u.rail.railtype = e->railtype; _new_train_id = v->index; + _new_vehicle_id = v->index; v->service_interval = _patches.servint_trains; v->date_of_last_service = _date; diff --git a/vehicle.c b/vehicle.c index ce0454ddb2..e477c36675 100644 --- a/vehicle.c +++ b/vehicle.c @@ -1403,13 +1403,6 @@ void AgeVehicle(Vehicle *v) } } -static VehicleID * _new_vehicle_id_proc_table[] = { - &_new_train_id, - &_new_roadveh_id, - &_new_ship_id, - &_new_aircraft_id, -}; - /** Clone a vehicle. If it is a train, it will clone all the cars too * @param x,y depot where the cloned vehicle is build * @param p1 the original vehicle's index @@ -1420,7 +1413,7 @@ int32 CmdCloneVehicle(int x, int y, uint32 flags, uint32 p1, uint32 p2) Vehicle *v_front, *v; Vehicle *w_front, *w, *w_rear; int cost, total_cost = 0; - VehicleID *new_id; +// VehicleID *new_id; if (!IsVehicleIndex(p1)) return CMD_ERROR; @@ -1444,8 +1437,6 @@ int32 CmdCloneVehicle(int x, int y, uint32 flags, uint32 p1, uint32 p2) if (v->type == VEH_Train && v->subtype != TS_Front_Engine) return CMD_ERROR; - new_id = _new_vehicle_id_proc_table[v->type - VEH_Train]; - do { cost = DoCommand(x, y, v->engine_type, 3, flags, CMD_BUILD_VEH(v->type)); @@ -1454,11 +1445,7 @@ int32 CmdCloneVehicle(int x, int y, uint32 flags, uint32 p1, uint32 p2) total_cost += cost; if (flags & DC_EXEC) { - if (v->type == VEH_Train && RailVehInfo(v->engine_type)->flags & RVI_WAGON) { - w = GetVehicle(_new_wagon_id); - } else { - w = GetVehicle(*new_id); - } + w= GetVehicle(_new_vehicle_id); if (v->type != VEH_Road) { // road vehicles can't be refitted if (v->cargo_type != w->cargo_type) { @@ -1468,7 +1455,6 @@ int32 CmdCloneVehicle(int x, int y, uint32 flags, uint32 p1, uint32 p2) if (v->type == VEH_Train && v->subtype != TS_Front_Engine) { // this s a train car - // add this unit to the end of the train DoCommand(x, y, (w_rear->index << 16) | w->index, 1, flags, CMD_MOVE_RAIL_VEHICLE); } else { @@ -1521,8 +1507,8 @@ static int32 ReplaceVehicle(Vehicle **w, byte flags) if (CmdFailed(cost)) return cost; if (flags & DC_EXEC) { - new_v = GetVehicle(*_new_vehicle_id_proc_table[old_v->type - VEH_Train]); - *w = new_v; + new_v = GetVehicle(_new_vehicle_id); + *w = new_v; //we changed the vehicle, so MaybeReplaceVehicle needs to work on the new one. Now we tell it what the new one is /* refit if needed */ if (new_v->type != VEH_Road) { // road vehicles can't be refitted diff --git a/vehicle.h b/vehicle.h index 6e176f82be..ef0646b5f8 100644 --- a/vehicle.h +++ b/vehicle.h @@ -442,6 +442,7 @@ VARDEF VehicleID _new_wagon_id; VARDEF VehicleID _new_aircraft_id; VARDEF VehicleID _new_ship_id; VARDEF VehicleID _new_roadveh_id; +VARDEF VehicleID _new_vehicle_id; VARDEF uint16 _aircraft_refit_capacity; VARDEF byte _cmd_build_rail_veh_score;