Mercurial > hg > openttd
changeset 18337:f3ce001bc1d1 draft
(svn r23173) -Codechange: Rename GetVehicleCapacity() to Engine::DetermineCapacity().
author | frosch <frosch@openttd.org> |
---|---|
date | Wed, 09 Nov 2011 16:38:50 +0000 |
parents | d33a725432e1 |
children | 1acd061c150f |
files | src/aircraft_cmd.cpp src/engine.cpp src/engine_base.h src/roadveh_cmd.cpp src/ship_cmd.cpp src/train_cmd.cpp src/vehicle.cpp src/vehicle_cmd.cpp src/vehicle_func.h |
diffstat | 9 files changed, 74 insertions(+), 73 deletions(-) [+] |
line wrap: on
line diff
--- a/src/aircraft_cmd.cpp +++ b/src/aircraft_cmd.cpp @@ -306,7 +306,7 @@ v->InvalidateNewGRFCacheOfChain(); - v->cargo_cap = GetVehicleCapacity(v, &u->cargo_cap); + v->cargo_cap = e->DetermineCapacity(v, &u->cargo_cap); v->InvalidateNewGRFCacheOfChain();
--- a/src/engine.cpp +++ b/src/engine.cpp @@ -196,6 +196,72 @@ return this->GetDefaultCargoType() != CT_INVALID; } + +/** + * Determines capacity of a given vehicle from scratch. + * For aircraft the main capacity is determined. Mail might be present as well. + * @note Keep this function consistent with Engine::GetDisplayDefaultCapacity(). + * @param v Vehicle of interest + * @param mail_capacity returns secondary cargo (mail) capacity of aircraft + * @return Capacity + */ +uint Engine::DetermineCapacity(const Vehicle *v, uint16 *mail_capacity) const +{ + assert(this->index == v->engine_type); + if (mail_capacity != NULL) *mail_capacity = 0; + + if (!this->CanCarryCargo()) return 0; + + if (mail_capacity != NULL && this->type == VEH_AIRCRAFT && IsCargoInClass(v->cargo_type, CC_PASSENGERS)) { + *mail_capacity = GetVehicleProperty(v, PROP_AIRCRAFT_MAIL_CAPACITY, this->u.air.mail_capacity); + } + CargoID default_cargo = this->GetDefaultCargoType(); + + /* Check the refit capacity callback if we are not in the default configuration. + * Note: This might change to become more consistent/flexible/sane, esp. when default cargo is first refittable. */ + if (HasBit(this->info.callback_mask, CBM_VEHICLE_REFIT_CAPACITY) && + (default_cargo != v->cargo_type || v->cargo_subtype != 0)) { + uint16 callback = GetVehicleCallback(CBID_VEHICLE_REFIT_CAPACITY, 0, 0, this->index, v); + if (callback != CALLBACK_FAILED) return callback; + } + + /* Get capacity according to property resp. CB */ + uint capacity; + switch (this->type) { + case VEH_TRAIN: capacity = GetVehicleProperty(v, PROP_TRAIN_CARGO_CAPACITY, this->u.rail.capacity); break; + case VEH_ROAD: capacity = GetVehicleProperty(v, PROP_ROADVEH_CARGO_CAPACITY, this->u.road.capacity); break; + case VEH_SHIP: capacity = GetVehicleProperty(v, PROP_SHIP_CARGO_CAPACITY, this->u.ship.capacity); break; + case VEH_AIRCRAFT: capacity = GetVehicleProperty(v, PROP_AIRCRAFT_PASSENGER_CAPACITY, this->u.air.passenger_capacity); break; + default: NOT_REACHED(); + } + + /* Apply multipliers depending on cargo- and vehicletype. + * Note: This might change to become more consistent/flexible. */ + if (this->type != VEH_SHIP) { + if (this->type == VEH_AIRCRAFT) { + if (!IsCargoInClass(v->cargo_type, CC_PASSENGERS)) { + capacity += GetVehicleProperty(v, PROP_AIRCRAFT_MAIL_CAPACITY, this->u.air.mail_capacity); + } + if (v->cargo_type == CT_MAIL) return capacity; + } else { + switch (default_cargo) { + case CT_PASSENGERS: break; + case CT_MAIL: + case CT_GOODS: capacity *= 2; break; + default: capacity *= 4; break; + } + } + switch (v->cargo_type) { + case CT_PASSENGERS: break; + case CT_MAIL: + case CT_GOODS: capacity /= 2; break; + default: capacity /= 4; break; + } + } + + return capacity; +} + /** * Determines the default cargo capacity of an engine for display purposes. * @@ -203,7 +269,7 @@ * For multiheaded engines this is the capacity of both heads. * For articulated engines use GetCapacityOfArticulatedParts * - * @note Keep this function consistent with GetVehicleCapacity(). + * @note Keep this function consistent with Engine::DetermineCapacity(). * @param mail_capacity returns secondary cargo (mail) capacity of aircraft * @return The default capacity * @see GetDefaultCargoType
--- a/src/engine_base.h +++ b/src/engine_base.h @@ -83,6 +83,8 @@ return this->info.cargo_type; } + uint DetermineCapacity(const Vehicle *v, uint16 *mail_capacity = NULL) const; + bool CanCarryCargo() const; uint GetDisplayDefaultCapacity(uint16 *mail_capacity = NULL) const; Money GetRunningCost() const;
--- a/src/roadveh_cmd.cpp +++ b/src/roadveh_cmd.cpp @@ -290,7 +290,7 @@ /* Call various callbacks after the whole consist has been constructed */ for (RoadVehicle *u = v; u != NULL; u = u->Next()) { - u->cargo_cap = GetVehicleCapacity(u); + u->cargo_cap = u->GetEngine()->DetermineCapacity(u); v->InvalidateNewGRFCache(); u->InvalidateNewGRFCache(); }
--- a/src/ship_cmd.cpp +++ b/src/ship_cmd.cpp @@ -675,7 +675,7 @@ v->InvalidateNewGRFCacheOfChain(); - v->cargo_cap = GetVehicleCapacity(v); + v->cargo_cap = e->DetermineCapacity(v); v->InvalidateNewGRFCacheOfChain();
--- a/src/train_cmd.cpp +++ b/src/train_cmd.cpp @@ -216,7 +216,7 @@ } } - u->cargo_cap = GetVehicleCapacity(u); + u->cargo_cap = e_u->DetermineCapacity(u); u->vcache.cached_cargo_age_period = GetVehicleProperty(u, PROP_TRAIN_CARGO_AGE_PERIOD, e_u->info.cargo_age_period); /* check the vehicle length (callback) */
--- a/src/vehicle.cpp +++ b/src/vehicle.cpp @@ -1794,71 +1794,6 @@ } /** - * Determines capacity of a given vehicle from scratch. - * For aircraft the main capacity is determined. Mail might be present as well. - * @note Keep this function consistent with Engine::GetDisplayDefaultCapacity(). - * @param v Vehicle of interest - * @param mail_capacity returns secondary cargo (mail) capacity of aircraft - * @return Capacity - */ -uint GetVehicleCapacity(const Vehicle *v, uint16 *mail_capacity) -{ - if (mail_capacity != NULL) *mail_capacity = 0; - const Engine *e = v->GetEngine(); - - if (!e->CanCarryCargo()) return 0; - - if (mail_capacity != NULL && e->type == VEH_AIRCRAFT && IsCargoInClass(v->cargo_type, CC_PASSENGERS)) { - *mail_capacity = GetVehicleProperty(v, PROP_AIRCRAFT_MAIL_CAPACITY, e->u.air.mail_capacity); - } - CargoID default_cargo = e->GetDefaultCargoType(); - - /* Check the refit capacity callback if we are not in the default configuration. - * Note: This might change to become more consistent/flexible/sane, esp. when default cargo is first refittable. */ - if (HasBit(e->info.callback_mask, CBM_VEHICLE_REFIT_CAPACITY) && - (default_cargo != v->cargo_type || v->cargo_subtype != 0)) { - uint16 callback = GetVehicleCallback(CBID_VEHICLE_REFIT_CAPACITY, 0, 0, v->engine_type, v); - if (callback != CALLBACK_FAILED) return callback; - } - - /* Get capacity according to property resp. CB */ - uint capacity; - switch (e->type) { - case VEH_TRAIN: capacity = GetVehicleProperty(v, PROP_TRAIN_CARGO_CAPACITY, e->u.rail.capacity); break; - case VEH_ROAD: capacity = GetVehicleProperty(v, PROP_ROADVEH_CARGO_CAPACITY, e->u.road.capacity); break; - case VEH_SHIP: capacity = GetVehicleProperty(v, PROP_SHIP_CARGO_CAPACITY, e->u.ship.capacity); break; - case VEH_AIRCRAFT: capacity = GetVehicleProperty(v, PROP_AIRCRAFT_PASSENGER_CAPACITY, e->u.air.passenger_capacity); break; - default: NOT_REACHED(); - } - - /* Apply multipliers depending on cargo- and vehicletype. - * Note: This might change to become more consistent/flexible. */ - if (e->type != VEH_SHIP) { - if (e->type == VEH_AIRCRAFT) { - if (!IsCargoInClass(v->cargo_type, CC_PASSENGERS)) { - capacity += GetVehicleProperty(v, PROP_AIRCRAFT_MAIL_CAPACITY, e->u.air.mail_capacity); - } - if (v->cargo_type == CT_MAIL) return capacity; - } else { - switch (default_cargo) { - case CT_PASSENGERS: break; - case CT_MAIL: - case CT_GOODS: capacity *= 2; break; - default: capacity *= 4; break; - } - } - switch (v->cargo_type) { - case CT_PASSENGERS: break; - case CT_MAIL: - case CT_GOODS: capacity /= 2; break; - default: capacity /= 4; break; - } - } - - return capacity; -} - -/** * Delete all implicit orders which were not reached. */ void Vehicle::DeleteUnreachedImplicitOrders()
--- a/src/vehicle_cmd.cpp +++ b/src/vehicle_cmd.cpp @@ -324,7 +324,7 @@ } uint16 mail_capacity = 0; - uint amount = GetVehicleCapacity(v, &mail_capacity); + uint amount = e->DetermineCapacity(v, &mail_capacity); total_capacity += amount; /* mail_capacity will always be zero if the vehicle is not an aircraft. */ total_mail_capacity += mail_capacity;
--- a/src/vehicle_func.h +++ b/src/vehicle_func.h @@ -112,8 +112,6 @@ SpriteID GetEnginePalette(EngineID engine_type, CompanyID company); SpriteID GetVehiclePalette(const Vehicle *v); -uint GetVehicleCapacity(const Vehicle *v, uint16 *mail_capacity = NULL); - extern const uint32 _veh_build_proc_table[]; extern const uint32 _veh_sell_proc_table[]; extern const uint32 _veh_refit_proc_table[];