diff options
author | peter1138 <peter1138@openttd.org> | 2005-11-03 09:22:24 +0000 |
---|---|---|
committer | peter1138 <peter1138@openttd.org> | 2005-11-03 09:22:24 +0000 |
commit | e80d448478746ba30f1f78ad809e14703c7b899a (patch) | |
tree | 123239ecee67253d8657a7f2bff6334fce75a4d9 | |
parent | 689006ee738c8866d05161cb8bbdd6d9a6472252 (diff) | |
download | openttd-e80d448478746ba30f1f78ad809e14703c7b899a.tar.xz |
(svn r3124) Alter train loading/unloading time to use the actual length of the train instead of the number of wagons. The actual length is cached in the first vehicle of the train.
-rw-r--r-- | economy.c | 11 | ||||
-rw-r--r-- | train_cmd.c | 2 | ||||
-rw-r--r-- | vehicle.h | 2 |
3 files changed, 9 insertions, 6 deletions
@@ -1463,13 +1463,12 @@ int LoadUnloadVehicle(Vehicle *v) ShowFeederIncomeAnimation(v->x_pos, v->y_pos, v->z_pos, v_profit_total); if (v->type == VEH_Train) { - int num = - (int)GetStationPlatforms(st, v->tile) * 2; - do num++; while ( (v=v->next) != NULL); - if (num > 0) { - unloading_time <<=1; - unloading_time += num * unloading_time; + // Each platform tile is worth 2 rail vehicles. + int overhang = v->u.rail.cached_total_length - GetStationPlatforms(st, v->tile) * 16; + if (overhang > 0) { + unloading_time <<= 1; + unloading_time += (overhang * unloading_time) / 8; } - v = u; } v->load_unload_time_rem = unloading_time; diff --git a/train_cmd.c b/train_cmd.c index a93093a30..d6d9b08b2 100644 --- a/train_cmd.c +++ b/train_cmd.c @@ -83,6 +83,7 @@ void TrainConsistChanged(Vehicle *v) { rvi_v = RailVehInfo(v->engine_type); first_engine = (v->subtype == TS_Front_Engine) ? v->engine_type : INVALID_VEHICLE; + v->u.rail.cached_total_length = 0; for (u = v; u != NULL; u = u->next) { const RailVehicleInfo *rvi_u = RailVehInfo(u->engine_type); @@ -125,6 +126,7 @@ void TrainConsistChanged(Vehicle *v) { veh_len = rvi_u->shorten_factor; veh_len = clamp(veh_len, 0, u->next == NULL ? 7 : 5); // the clamp on vehicles not the last in chain is stricter, as too short wagons can break the 'follow next vehicle' code u->u.rail.cached_veh_length = 8 - veh_len; + v->u.rail.cached_total_length += u->u.rail.cached_veh_length; }; @@ -57,6 +57,8 @@ typedef struct VehicleRail { uint16 cached_max_speed; // max speed of the consist. (minimum of the max speed of all vehicles in the consist) uint32 cached_power; // total power of the consist. uint8 cached_veh_length; // length of this vehicle in units of 1/8 of normal length, cached because this can be set by a callback + uint16 cached_total_length; ///< Length of the whole train, valid only for first engine. + // cached values, recalculated when the cargo on a train changes (in addition to the conditions above) uint16 cached_weight; // total weight of the consist. uint16 cached_veh_weight; // weight of the vehicle. |