mirror of
https://github.com/OpenTTD/OpenTTD.git
synced 2025-03-06 14:27:16 +00:00
(svn r25185) -Fix [FS#5508]: Remove ambivalent functions CargoList::Empty() and Count(), and replace them with VehicleCargoList::StoredCount(), TotalCount(), StationCargoList::AvailableCount() and TotalCount(). (fonsinchen)
This commit is contained in:
parent
8d1d521456
commit
5eddbb338b
@ -50,7 +50,7 @@ void DrawAircraftDetails(const Aircraft *v, int left, int right, int y)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (u->cargo_cap != 0) {
|
if (u->cargo_cap != 0) {
|
||||||
uint cargo_count = u->cargo.Count();
|
uint cargo_count = u->cargo.StoredCount();
|
||||||
|
|
||||||
y_offset += FONT_HEIGHT_NORMAL + 1;
|
y_offset += FONT_HEIGHT_NORMAL + 1;
|
||||||
if (cargo_count != 0) {
|
if (cargo_count != 0) {
|
||||||
|
@ -91,27 +91,32 @@ bool CheckAutoreplaceValidity(EngineID from, EngineID to, CompanyID company)
|
|||||||
/**
|
/**
|
||||||
* Check the capacity of all vehicles in a chain and spread cargo if needed.
|
* Check the capacity of all vehicles in a chain and spread cargo if needed.
|
||||||
* @param v The vehicle to check.
|
* @param v The vehicle to check.
|
||||||
|
* @pre You can only do this if the consist is not loading or unloading. It
|
||||||
|
* must not carry reserved cargo, nor cargo to be unloaded or transferred.
|
||||||
*/
|
*/
|
||||||
void CheckCargoCapacity(Vehicle *v)
|
void CheckCargoCapacity(Vehicle *v)
|
||||||
{
|
{
|
||||||
assert(v == NULL || v->First() == v);
|
assert(v == NULL || v->First() == v);
|
||||||
|
|
||||||
for (Vehicle *src = v; src != NULL; src = src->Next()) {
|
for (Vehicle *src = v; src != NULL; src = src->Next()) {
|
||||||
|
assert(src->cargo.TotalCount() == src->cargo.ActionCount(VehicleCargoList::MTA_KEEP));
|
||||||
|
|
||||||
/* Do we need to more cargo away? */
|
/* Do we need to more cargo away? */
|
||||||
if (src->cargo.Count() <= src->cargo_cap) continue;
|
if (src->cargo.TotalCount() <= src->cargo_cap) continue;
|
||||||
|
|
||||||
/* We need to move a particular amount. Try that on the other vehicles. */
|
/* We need to move a particular amount. Try that on the other vehicles. */
|
||||||
uint to_spread = src->cargo.Count() - src->cargo_cap;
|
uint to_spread = src->cargo.TotalCount() - src->cargo_cap;
|
||||||
for (Vehicle *dest = v; dest != NULL && to_spread != 0; dest = dest->Next()) {
|
for (Vehicle *dest = v; dest != NULL && to_spread != 0; dest = dest->Next()) {
|
||||||
if (dest->cargo.Count() >= dest->cargo_cap || dest->cargo_type != src->cargo_type) continue;
|
assert(dest->cargo.TotalCount() == dest->cargo.ActionCount(VehicleCargoList::MTA_KEEP));
|
||||||
|
if (dest->cargo.TotalCount() >= dest->cargo_cap || dest->cargo_type != src->cargo_type) continue;
|
||||||
|
|
||||||
uint amount = min(to_spread, dest->cargo_cap - dest->cargo.Count());
|
uint amount = min(to_spread, dest->cargo_cap - dest->cargo.TotalCount());
|
||||||
src->cargo.Shift(amount, &dest->cargo);
|
src->cargo.Shift(amount, &dest->cargo);
|
||||||
to_spread -= amount;
|
to_spread -= amount;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Any left-overs will be thrown away, but not their feeder share. */
|
/* Any left-overs will be thrown away, but not their feeder share. */
|
||||||
if (src->cargo_cap < src->cargo.Count()) src->cargo.Truncate(src->cargo.Count() - src->cargo_cap);
|
if (src->cargo_cap < src->cargo.TotalCount()) src->cargo.Truncate(src->cargo.TotalCount() - src->cargo_cap);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -120,21 +125,26 @@ void CheckCargoCapacity(Vehicle *v)
|
|||||||
* @param old_veh Old vehicle that will be sold
|
* @param old_veh Old vehicle that will be sold
|
||||||
* @param new_head Head of the completely constructed new vehicle chain
|
* @param new_head Head of the completely constructed new vehicle chain
|
||||||
* @param part_of_chain The vehicle is part of a train
|
* @param part_of_chain The vehicle is part of a train
|
||||||
|
* @pre You can only do this if both consists are not loading or unloading.
|
||||||
|
* They must not carry reserved cargo, nor cargo to be unloaded or
|
||||||
|
* transferred.
|
||||||
*/
|
*/
|
||||||
static void TransferCargo(Vehicle *old_veh, Vehicle *new_head, bool part_of_chain)
|
static void TransferCargo(Vehicle *old_veh, Vehicle *new_head, bool part_of_chain)
|
||||||
{
|
{
|
||||||
assert(!part_of_chain || new_head->IsPrimaryVehicle());
|
assert(!part_of_chain || new_head->IsPrimaryVehicle());
|
||||||
/* Loop through source parts */
|
/* Loop through source parts */
|
||||||
for (Vehicle *src = old_veh; src != NULL; src = src->Next()) {
|
for (Vehicle *src = old_veh; src != NULL; src = src->Next()) {
|
||||||
|
assert(src->cargo.TotalCount() == src->cargo.ActionCount(VehicleCargoList::MTA_KEEP));
|
||||||
if (!part_of_chain && src->type == VEH_TRAIN && src != old_veh && src != Train::From(old_veh)->other_multiheaded_part && !src->IsArticulatedPart()) {
|
if (!part_of_chain && src->type == VEH_TRAIN && src != old_veh && src != Train::From(old_veh)->other_multiheaded_part && !src->IsArticulatedPart()) {
|
||||||
/* Skip vehicles, which do not belong to old_veh */
|
/* Skip vehicles, which do not belong to old_veh */
|
||||||
src = src->GetLastEnginePart();
|
src = src->GetLastEnginePart();
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (src->cargo_type >= NUM_CARGO || src->cargo.Count() == 0) continue;
|
if (src->cargo_type >= NUM_CARGO || src->cargo.TotalCount() == 0) continue;
|
||||||
|
|
||||||
/* Find free space in the new chain */
|
/* Find free space in the new chain */
|
||||||
for (Vehicle *dest = new_head; dest != NULL && src->cargo.Count() > 0; dest = dest->Next()) {
|
for (Vehicle *dest = new_head; dest != NULL && src->cargo.TotalCount() > 0; dest = dest->Next()) {
|
||||||
|
assert(dest->cargo.TotalCount() == dest->cargo.ActionCount(VehicleCargoList::MTA_KEEP));
|
||||||
if (!part_of_chain && dest->type == VEH_TRAIN && dest != new_head && dest != Train::From(new_head)->other_multiheaded_part && !dest->IsArticulatedPart()) {
|
if (!part_of_chain && dest->type == VEH_TRAIN && dest != new_head && dest != Train::From(new_head)->other_multiheaded_part && !dest->IsArticulatedPart()) {
|
||||||
/* Skip vehicles, which do not belong to new_head */
|
/* Skip vehicles, which do not belong to new_head */
|
||||||
dest = dest->GetLastEnginePart();
|
dest = dest->GetLastEnginePart();
|
||||||
@ -142,7 +152,7 @@ static void TransferCargo(Vehicle *old_veh, Vehicle *new_head, bool part_of_chai
|
|||||||
}
|
}
|
||||||
if (dest->cargo_type != src->cargo_type) continue;
|
if (dest->cargo_type != src->cargo_type) continue;
|
||||||
|
|
||||||
uint amount = min(src->cargo.Count(), dest->cargo_cap - dest->cargo.Count());
|
uint amount = min(src->cargo.TotalCount(), dest->cargo_cap - dest->cargo.TotalCount());
|
||||||
if (amount <= 0) continue;
|
if (amount <= 0) continue;
|
||||||
|
|
||||||
src->cargo.Shift(amount, &dest->cargo);
|
src->cargo.Shift(amount, &dest->cargo);
|
||||||
|
@ -248,31 +248,13 @@ public:
|
|||||||
return &this->packets;
|
return &this->packets;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Checks whether this list is empty.
|
|
||||||
* @return True if and only if the list is empty.
|
|
||||||
*/
|
|
||||||
inline bool Empty() const
|
|
||||||
{
|
|
||||||
return this->count == 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the number of cargo entities in this list.
|
|
||||||
* @return The before mentioned number.
|
|
||||||
*/
|
|
||||||
inline uint Count() const
|
|
||||||
{
|
|
||||||
return this->count;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns source of the first cargo packet in this list.
|
* Returns source of the first cargo packet in this list.
|
||||||
* @return The before mentioned source.
|
* @return The before mentioned source.
|
||||||
*/
|
*/
|
||||||
inline StationID Source() const
|
inline StationID Source() const
|
||||||
{
|
{
|
||||||
return this->Empty() ? INVALID_STATION : this->packets.front()->source;
|
return this->count == 0 ? INVALID_STATION : this->packets.front()->source;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -354,11 +336,29 @@ public:
|
|||||||
* reserved).
|
* reserved).
|
||||||
* @return Cargo on board the vehicle.
|
* @return Cargo on board the vehicle.
|
||||||
*/
|
*/
|
||||||
inline uint OnboardCount() const
|
inline uint StoredCount() const
|
||||||
{
|
{
|
||||||
return this->count - this->action_counts[MTA_LOAD];
|
return this->count - this->action_counts[MTA_LOAD];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns sum of cargo, including reserved cargo.
|
||||||
|
* @return Sum of cargo.
|
||||||
|
*/
|
||||||
|
inline uint TotalCount() const
|
||||||
|
{
|
||||||
|
return this->count;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns sum of reserved cargo.
|
||||||
|
* @return Sum of reserved cargo.
|
||||||
|
*/
|
||||||
|
inline uint ReservedCount() const
|
||||||
|
{
|
||||||
|
return this->action_counts[MTA_LOAD];
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns sum of cargo to be moved out of the vehicle at the current station.
|
* Returns sum of cargo to be moved out of the vehicle at the current station.
|
||||||
* @return Cargo to be moved.
|
* @return Cargo to be moved.
|
||||||
@ -445,6 +445,16 @@ public:
|
|||||||
friend class CargoReservation;
|
friend class CargoReservation;
|
||||||
friend class CargoReturn;
|
friend class CargoReturn;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns sum of cargo still available for loading at the sation.
|
||||||
|
* (i.e. not counting cargo which is already reserved for loading)
|
||||||
|
* @return Cargo on board the vehicle.
|
||||||
|
*/
|
||||||
|
inline uint AvailableCount() const
|
||||||
|
{
|
||||||
|
return this->count;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns sum of cargo reserved for loading onto vehicles.
|
* Returns sum of cargo reserved for loading onto vehicles.
|
||||||
* @return Cargo reserved for loading.
|
* @return Cargo reserved for loading.
|
||||||
@ -455,8 +465,8 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns total count of cargo, including reserved cargo that's not
|
* Returns total count of cargo at the station, including
|
||||||
* actually in the list.
|
* cargo which is already reserved for loading.
|
||||||
* @return Total cargo count.
|
* @return Total cargo count.
|
||||||
*/
|
*/
|
||||||
inline uint TotalCount() const
|
inline uint TotalCount() const
|
||||||
|
@ -802,7 +802,7 @@ struct DepotWindow : Window {
|
|||||||
for (const Vehicle *w = v; w != NULL; w = w->Next()) {
|
for (const Vehicle *w = v; w != NULL; w = w->Next()) {
|
||||||
if (w->cargo_cap > 0 && w->cargo_type < NUM_CARGO) {
|
if (w->cargo_cap > 0 && w->cargo_type < NUM_CARGO) {
|
||||||
capacity[w->cargo_type] += w->cargo_cap;
|
capacity[w->cargo_type] += w->cargo_cap;
|
||||||
loaded [w->cargo_type] += w->cargo.Count();
|
loaded [w->cargo_type] += w->cargo.StoredCount();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (w->type == VEH_TRAIN && !w->HasArticulatedPart()) {
|
if (w->type == VEH_TRAIN && !w->HasArticulatedPart()) {
|
||||||
|
@ -1216,7 +1216,7 @@ void PrepareUnload(Vehicle *front_v)
|
|||||||
|
|
||||||
if ((front_v->current_order.GetUnloadType() & OUFB_NO_UNLOAD) == 0) {
|
if ((front_v->current_order.GetUnloadType() & OUFB_NO_UNLOAD) == 0) {
|
||||||
for (Vehicle *v = front_v; v != NULL; v = v->Next()) {
|
for (Vehicle *v = front_v; v != NULL; v = v->Next()) {
|
||||||
if (v->cargo_cap > 0 && !v->cargo.Empty()) {
|
if (v->cargo_cap > 0 && v->cargo.TotalCount() > 0) {
|
||||||
v->cargo.Stage(
|
v->cargo.Stage(
|
||||||
HasBit(Station::Get(front_v->last_station_visited)->goods[v->cargo_type].acceptance_pickup, GoodsEntry::GES_ACCEPTANCE),
|
HasBit(Station::Get(front_v->last_station_visited)->goods[v->cargo_type].acceptance_pickup, GoodsEntry::GES_ACCEPTANCE),
|
||||||
front_v->last_station_visited, front_v->current_order.GetUnloadType());
|
front_v->last_station_visited, front_v->current_order.GetUnloadType());
|
||||||
@ -1323,7 +1323,7 @@ static bool IsArticulatedVehicleEmpty(Vehicle *v)
|
|||||||
v = v->GetFirstEnginePart();
|
v = v->GetFirstEnginePart();
|
||||||
|
|
||||||
for (; v != NULL; v = v->HasArticulatedPart() ? v->GetNextArticulatedPart() : NULL) {
|
for (; v != NULL; v = v->HasArticulatedPart() ? v->GetNextArticulatedPart() : NULL) {
|
||||||
if (v->cargo.Count() != 0) return false;
|
if (v->cargo.TotalCount() != 0) return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@ -1438,7 +1438,7 @@ static void LoadUnloadVehicle(Vehicle *front)
|
|||||||
|
|
||||||
/* This order has a refit, if this is the first vehicle part carrying cargo and the whole vehicle is empty, try refitting. */
|
/* This order has a refit, if this is the first vehicle part carrying cargo and the whole vehicle is empty, try refitting. */
|
||||||
if (front->current_order.IsRefit() && artic_part == 1 && IsArticulatedVehicleEmpty(v) &&
|
if (front->current_order.IsRefit() && artic_part == 1 && IsArticulatedVehicleEmpty(v) &&
|
||||||
(v->type != VEH_AIRCRAFT || (Aircraft::From(v)->IsNormalAircraft() && v->Next()->cargo.Count() == 0))) {
|
(v->type != VEH_AIRCRAFT || (Aircraft::From(v)->IsNormalAircraft() && v->Next()->cargo.TotalCount() == 0))) {
|
||||||
Vehicle *v_start = v->GetFirstEnginePart();
|
Vehicle *v_start = v->GetFirstEnginePart();
|
||||||
CargoID new_cid = front->current_order.GetRefitCargo();
|
CargoID new_cid = front->current_order.GetRefitCargo();
|
||||||
|
|
||||||
@ -1456,7 +1456,7 @@ static void LoadUnloadVehicle(Vehicle *front)
|
|||||||
Vehicle *w = v_start;
|
Vehicle *w = v_start;
|
||||||
while (w->HasArticulatedPart()) {
|
while (w->HasArticulatedPart()) {
|
||||||
w = w->GetNextArticulatedPart();
|
w = w->GetNextArticulatedPart();
|
||||||
if (w->cargo.Count() > 0) new_cid = CT_NO_REFIT;
|
if (w->cargo.TotalCount() > 0) new_cid = CT_NO_REFIT;
|
||||||
refit_mask |= EngInfo(w->engine_type)->refit_mask;
|
refit_mask |= EngInfo(w->engine_type)->refit_mask;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1467,12 +1467,12 @@ static void LoadUnloadVehicle(Vehicle *front)
|
|||||||
FOR_EACH_SET_CARGO_ID(cid, refit_mask) {
|
FOR_EACH_SET_CARGO_ID(cid, refit_mask) {
|
||||||
/* Consider refitting to this cargo, if other vehicles of the consist cannot
|
/* Consider refitting to this cargo, if other vehicles of the consist cannot
|
||||||
* already take the cargo without refitting */
|
* already take the cargo without refitting */
|
||||||
if ((int)st->goods[cid].cargo.Count() > (int)consist_capleft[cid] + amount) {
|
if ((int)st->goods[cid].cargo.AvailableCount() > (int)consist_capleft[cid] + amount) {
|
||||||
/* Try to find out if auto-refitting would succeed. In case the refit is allowed,
|
/* Try to find out if auto-refitting would succeed. In case the refit is allowed,
|
||||||
* the returned refit capacity will be greater than zero. */
|
* the returned refit capacity will be greater than zero. */
|
||||||
DoCommand(v_start->tile, v_start->index, cid | 1U << 6 | 0xFF << 8 | 1U << 16, DC_QUERY_COST, GetCmdRefitVeh(v_start)); // Auto-refit and only this vehicle including artic parts.
|
DoCommand(v_start->tile, v_start->index, cid | 1U << 6 | 0xFF << 8 | 1U << 16, DC_QUERY_COST, GetCmdRefitVeh(v_start)); // Auto-refit and only this vehicle including artic parts.
|
||||||
if (_returned_refit_capacity > 0) {
|
if (_returned_refit_capacity > 0) {
|
||||||
amount = st->goods[cid].cargo.Count() - consist_capleft[cid];
|
amount = st->goods[cid].cargo.AvailableCount() - consist_capleft[cid];
|
||||||
new_cid = cid;
|
new_cid = cid;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1490,7 +1490,7 @@ static void LoadUnloadVehicle(Vehicle *front)
|
|||||||
w = v_start;
|
w = v_start;
|
||||||
do {
|
do {
|
||||||
st->goods[w->cargo_type].cargo.Reserve(w->cargo_cap, &w->cargo, st->xy);
|
st->goods[w->cargo_type].cargo.Reserve(w->cargo_cap, &w->cargo, st->xy);
|
||||||
consist_capleft[w->cargo_type] += w->cargo_cap - w->cargo.Count();
|
consist_capleft[w->cargo_type] += w->cargo_cap - w->cargo.RemainingCount();
|
||||||
w = w->HasArticulatedPart() ? w->GetNextArticulatedPart() : NULL;
|
w = w->HasArticulatedPart() ? w->GetNextArticulatedPart() : NULL;
|
||||||
} while (w != NULL);
|
} while (w != NULL);
|
||||||
|
|
||||||
@ -1523,10 +1523,10 @@ static void LoadUnloadVehicle(Vehicle *front)
|
|||||||
|
|
||||||
/* If there's goods waiting at the station, and the vehicle
|
/* If there's goods waiting at the station, and the vehicle
|
||||||
* has capacity for it, load it on the vehicle. */
|
* has capacity for it, load it on the vehicle. */
|
||||||
int cap_left = v->cargo_cap - v->cargo.OnboardCount();
|
int cap_left = v->cargo_cap - v->cargo.StoredCount();
|
||||||
if (cap_left > 0 && (v->cargo.ActionCount(VehicleCargoList::MTA_LOAD) > 0 || !ge->cargo.Empty())) {
|
if (cap_left > 0 && (v->cargo.ActionCount(VehicleCargoList::MTA_LOAD) > 0 || ge->cargo.AvailableCount() > 0)) {
|
||||||
if (_settings_game.order.gradual_loading) cap_left = min(cap_left, load_amount);
|
if (_settings_game.order.gradual_loading) cap_left = min(cap_left, load_amount);
|
||||||
if (v->cargo.OnboardCount() == 0) TriggerVehicle(v, VEHICLE_TRIGGER_NEW_CARGO);
|
if (v->cargo.StoredCount() == 0) TriggerVehicle(v, VEHICLE_TRIGGER_NEW_CARGO);
|
||||||
|
|
||||||
uint loaded = ge->cargo.Load(cap_left, &v->cargo, st->xy);
|
uint loaded = ge->cargo.Load(cap_left, &v->cargo, st->xy);
|
||||||
if (v->cargo.ActionCount(VehicleCargoList::MTA_LOAD) > 0) {
|
if (v->cargo.ActionCount(VehicleCargoList::MTA_LOAD) > 0) {
|
||||||
@ -1556,7 +1556,7 @@ static void LoadUnloadVehicle(Vehicle *front)
|
|||||||
st->time_since_load = 0;
|
st->time_since_load = 0;
|
||||||
st->last_vehicle_type = v->type;
|
st->last_vehicle_type = v->type;
|
||||||
|
|
||||||
if (ge->cargo.Empty()) {
|
if (ge->cargo.TotalCount() == 0) {
|
||||||
TriggerStationRandomisation(st, st->xy, SRT_CARGO_TAKEN, v->cargo_type);
|
TriggerStationRandomisation(st, st->xy, SRT_CARGO_TAKEN, v->cargo_type);
|
||||||
TriggerStationAnimation(st, st->xy, SAT_CARGO_TAKEN, v->cargo_type);
|
TriggerStationAnimation(st, st->xy, SAT_CARGO_TAKEN, v->cargo_type);
|
||||||
AirportAnimationTrigger(st, AAT_STATION_CARGO_TAKEN, v->cargo_type);
|
AirportAnimationTrigger(st, AAT_STATION_CARGO_TAKEN, v->cargo_type);
|
||||||
@ -1568,7 +1568,7 @@ static void LoadUnloadVehicle(Vehicle *front)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (v->cargo.OnboardCount() >= v->cargo_cap) {
|
if (v->cargo.StoredCount() >= v->cargo_cap) {
|
||||||
SetBit(cargo_full, v->cargo_type);
|
SetBit(cargo_full, v->cargo_type);
|
||||||
} else {
|
} else {
|
||||||
SetBit(cargo_not_full, v->cargo_type);
|
SetBit(cargo_not_full, v->cargo_type);
|
||||||
@ -1608,7 +1608,7 @@ static void LoadUnloadVehicle(Vehicle *front)
|
|||||||
if (front->current_order.GetLoadType() == OLF_FULL_LOAD_ANY) {
|
if (front->current_order.GetLoadType() == OLF_FULL_LOAD_ANY) {
|
||||||
/* if the aircraft carries passengers and is NOT full, then
|
/* if the aircraft carries passengers and is NOT full, then
|
||||||
* continue loading, no matter how much mail is in */
|
* continue loading, no matter how much mail is in */
|
||||||
if ((front->type == VEH_AIRCRAFT && IsCargoInClass(front->cargo_type, CC_PASSENGERS) && front->cargo_cap > front->cargo.OnboardCount()) ||
|
if ((front->type == VEH_AIRCRAFT && IsCargoInClass(front->cargo_type, CC_PASSENGERS) && front->cargo_cap > front->cargo.StoredCount()) ||
|
||||||
(cargo_not_full && (cargo_full & ~cargo_not_full) == 0)) { // There are still non-full cargoes
|
(cargo_not_full && (cargo_full & ~cargo_not_full) == 0)) { // There are still non-full cargoes
|
||||||
finished_loading = false;
|
finished_loading = false;
|
||||||
}
|
}
|
||||||
|
@ -768,8 +768,8 @@ static uint32 VehicleGetVariable(Vehicle *v, const VehicleScopeResolver *object,
|
|||||||
case 0x39: return v->cargo_type;
|
case 0x39: return v->cargo_type;
|
||||||
case 0x3A: return v->cargo_cap;
|
case 0x3A: return v->cargo_cap;
|
||||||
case 0x3B: return GB(v->cargo_cap, 8, 8);
|
case 0x3B: return GB(v->cargo_cap, 8, 8);
|
||||||
case 0x3C: return ClampToU16(v->cargo.Count());
|
case 0x3C: return ClampToU16(v->cargo.StoredCount());
|
||||||
case 0x3D: return GB(ClampToU16(v->cargo.Count()), 8, 8);
|
case 0x3D: return GB(ClampToU16(v->cargo.StoredCount()), 8, 8);
|
||||||
case 0x3E: return v->cargo.Source();
|
case 0x3E: return v->cargo.Source();
|
||||||
case 0x3F: return ClampU(v->cargo.DaysInTransit(), 0, 0xFF);
|
case 0x3F: return ClampU(v->cargo.DaysInTransit(), 0, 0xFF);
|
||||||
case 0x40: return ClampToU16(v->age);
|
case 0x40: return ClampToU16(v->age);
|
||||||
@ -922,7 +922,7 @@ static uint32 VehicleGetVariable(Vehicle *v, const VehicleScopeResolver *object,
|
|||||||
|
|
||||||
if (totalsets == 0) return NULL;
|
if (totalsets == 0) return NULL;
|
||||||
|
|
||||||
uint set = (v->cargo.Count() * totalsets) / max((uint16)1, v->cargo_cap);
|
uint set = (v->cargo.StoredCount() * totalsets) / max((uint16)1, v->cargo_cap);
|
||||||
set = min(set, totalsets - 1);
|
set = min(set, totalsets - 1);
|
||||||
|
|
||||||
return in_motion ? group->loaded[set] : group->loading[set];
|
return in_motion ? group->loaded[set] : group->loading[set];
|
||||||
|
@ -421,7 +421,7 @@ uint32 Station::GetNewGRFVariable(const ResolverObject *object, byte variable, b
|
|||||||
const GoodsEntry *ge = &this->goods[c];
|
const GoodsEntry *ge = &this->goods[c];
|
||||||
|
|
||||||
switch (variable) {
|
switch (variable) {
|
||||||
case 0x60: return min(ge->cargo.Count(), 4095);
|
case 0x60: return min(ge->cargo.TotalCount(), 4095);
|
||||||
case 0x61: return ge->HasVehicleEverTriedLoading() ? ge->time_since_pickup : 0;
|
case 0x61: return ge->HasVehicleEverTriedLoading() ? ge->time_since_pickup : 0;
|
||||||
case 0x62: return ge->HasRating() ? ge->rating : 0xFFFFFFFF;
|
case 0x62: return ge->HasRating() ? ge->rating : 0xFFFFFFFF;
|
||||||
case 0x63: return ge->cargo.DaysInTransit();
|
case 0x63: return ge->cargo.DaysInTransit();
|
||||||
@ -440,8 +440,8 @@ uint32 Station::GetNewGRFVariable(const ResolverObject *object, byte variable, b
|
|||||||
if (variable >= 0x8C && variable <= 0xEC) {
|
if (variable >= 0x8C && variable <= 0xEC) {
|
||||||
const GoodsEntry *g = &this->goods[GB(variable - 0x8C, 3, 4)];
|
const GoodsEntry *g = &this->goods[GB(variable - 0x8C, 3, 4)];
|
||||||
switch (GB(variable - 0x8C, 0, 3)) {
|
switch (GB(variable - 0x8C, 0, 3)) {
|
||||||
case 0: return g->cargo.Count();
|
case 0: return g->cargo.TotalCount();
|
||||||
case 1: return GB(min(g->cargo.Count(), 4095), 0, 4) | (GB(g->acceptance_pickup, GoodsEntry::GES_ACCEPTANCE, 1) << 7);
|
case 1: return GB(min(g->cargo.TotalCount(), 4095), 0, 4) | (GB(g->acceptance_pickup, GoodsEntry::GES_ACCEPTANCE, 1) << 7);
|
||||||
case 2: return g->time_since_pickup;
|
case 2: return g->time_since_pickup;
|
||||||
case 3: return g->rating;
|
case 3: return g->rating;
|
||||||
case 4: return g->cargo.Source();
|
case 4: return g->cargo.Source();
|
||||||
@ -507,12 +507,12 @@ uint32 Waypoint::GetNewGRFVariable(const ResolverObject *object, byte variable,
|
|||||||
|
|
||||||
case CT_DEFAULT:
|
case CT_DEFAULT:
|
||||||
for (CargoID cargo_type = 0; cargo_type < NUM_CARGO; cargo_type++) {
|
for (CargoID cargo_type = 0; cargo_type < NUM_CARGO; cargo_type++) {
|
||||||
cargo += st->goods[cargo_type].cargo.Count();
|
cargo += st->goods[cargo_type].cargo.TotalCount();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
cargo = st->goods[this->station_scope.cargo_type].cargo.Count();
|
cargo = st->goods[this->station_scope.cargo_type].cargo.TotalCount();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -587,7 +587,7 @@ static const SpriteGroup *ResolveStation(StationResolverObject *object)
|
|||||||
const CargoSpec *cs;
|
const CargoSpec *cs;
|
||||||
FOR_ALL_CARGOSPECS(cs) {
|
FOR_ALL_CARGOSPECS(cs) {
|
||||||
if (object->station_scope.statspec->grf_prop.spritegroup[cs->Index()] != NULL &&
|
if (object->station_scope.statspec->grf_prop.spritegroup[cs->Index()] != NULL &&
|
||||||
!st->goods[cs->Index()].cargo.Empty()) {
|
st->goods[cs->Index()].cargo.TotalCount() > 0) {
|
||||||
ctype = cs->Index();
|
ctype = cs->Index();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -998,7 +998,7 @@ void TriggerStationRandomisation(Station *st, TileIndex tile, StationRandomTrigg
|
|||||||
if (trigger == SRT_CARGO_TAKEN) {
|
if (trigger == SRT_CARGO_TAKEN) {
|
||||||
/* Create a bitmask of completely empty cargo types to be matched */
|
/* Create a bitmask of completely empty cargo types to be matched */
|
||||||
for (CargoID i = 0; i < NUM_CARGO; i++) {
|
for (CargoID i = 0; i < NUM_CARGO; i++) {
|
||||||
if (st->goods[i].cargo.Empty()) {
|
if (st->goods[i].cargo.TotalCount() == 0) {
|
||||||
SetBit(empty_mask, i);
|
SetBit(empty_mask, i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -157,7 +157,7 @@ protected: // These functions should not be called outside acceleration code.
|
|||||||
*/
|
*/
|
||||||
inline uint16 GetWeight() const
|
inline uint16 GetWeight() const
|
||||||
{
|
{
|
||||||
uint16 weight = (CargoSpec::Get(this->cargo_type)->weight * this->cargo.Count()) / 16;
|
uint16 weight = (CargoSpec::Get(this->cargo_type)->weight * this->cargo.StoredCount()) / 16;
|
||||||
|
|
||||||
/* Vehicle weight is not added for articulated parts. */
|
/* Vehicle weight is not added for articulated parts. */
|
||||||
if (!this->IsArticulatedPart()) {
|
if (!this->IsArticulatedPart()) {
|
||||||
|
@ -133,7 +133,7 @@ SpriteID RoadVehicle::GetImage(Direction direction, EngineImageType image_type)
|
|||||||
|
|
||||||
sprite = direction + _roadveh_images[spritenum];
|
sprite = direction + _roadveh_images[spritenum];
|
||||||
|
|
||||||
if (this->cargo.Count() >= this->cargo_cap / 2U) sprite += _roadveh_full_adder[spritenum];
|
if (this->cargo.StoredCount() >= this->cargo_cap / 2U) sprite += _roadveh_full_adder[spritenum];
|
||||||
|
|
||||||
return sprite;
|
return sprite;
|
||||||
}
|
}
|
||||||
|
@ -81,9 +81,9 @@ void DrawRoadVehDetails(const Vehicle *v, int left, int right, int y)
|
|||||||
if (u->cargo_cap == 0) continue;
|
if (u->cargo_cap == 0) continue;
|
||||||
|
|
||||||
str = STR_VEHICLE_DETAILS_CARGO_EMPTY;
|
str = STR_VEHICLE_DETAILS_CARGO_EMPTY;
|
||||||
if (!u->cargo.Empty()) {
|
if (u->cargo.StoredCount() > 0) {
|
||||||
SetDParam(0, u->cargo_type);
|
SetDParam(0, u->cargo_type);
|
||||||
SetDParam(1, u->cargo.Count());
|
SetDParam(1, u->cargo.StoredCount());
|
||||||
SetDParam(2, u->cargo.Source());
|
SetDParam(2, u->cargo.Source());
|
||||||
str = STR_VEHICLE_DETAILS_CARGO_FROM;
|
str = STR_VEHICLE_DETAILS_CARGO_FROM;
|
||||||
feeder_share += u->cargo.FeederShare();
|
feeder_share += u->cargo.FeederShare();
|
||||||
@ -101,9 +101,9 @@ void DrawRoadVehDetails(const Vehicle *v, int left, int right, int y)
|
|||||||
DrawString(left, right, y + FONT_HEIGHT_NORMAL + y_offset, STR_VEHICLE_INFO_CAPACITY);
|
DrawString(left, right, y + FONT_HEIGHT_NORMAL + y_offset, STR_VEHICLE_INFO_CAPACITY);
|
||||||
|
|
||||||
str = STR_VEHICLE_DETAILS_CARGO_EMPTY;
|
str = STR_VEHICLE_DETAILS_CARGO_EMPTY;
|
||||||
if (!v->cargo.Empty()) {
|
if (v->cargo.StoredCount() > 0) {
|
||||||
SetDParam(0, v->cargo_type);
|
SetDParam(0, v->cargo_type);
|
||||||
SetDParam(1, v->cargo.Count());
|
SetDParam(1, v->cargo.StoredCount());
|
||||||
SetDParam(2, v->cargo.Source());
|
SetDParam(2, v->cargo.Source());
|
||||||
str = STR_VEHICLE_DETAILS_CARGO_FROM;
|
str = STR_VEHICLE_DETAILS_CARGO_FROM;
|
||||||
feeder_share += v->cargo.FeederShare();
|
feeder_share += v->cargo.FeederShare();
|
||||||
|
@ -1539,7 +1539,7 @@ bool AfterLoadGame()
|
|||||||
FOR_ALL_STATIONS(st) {
|
FOR_ALL_STATIONS(st) {
|
||||||
for (CargoID c = 0; c < NUM_CARGO; c++) {
|
for (CargoID c = 0; c < NUM_CARGO; c++) {
|
||||||
st->goods[c].last_speed = 0;
|
st->goods[c].last_speed = 0;
|
||||||
if (st->goods[c].cargo.Count() != 0) SetBit(st->goods[c].acceptance_pickup, GoodsEntry::GES_PICKUP);
|
if (st->goods[c].cargo.AvailableCount() != 0) SetBit(st->goods[c].acceptance_pickup, GoodsEntry::GES_PICKUP);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -41,7 +41,7 @@
|
|||||||
if (!IsValidStation(station_id)) return -1;
|
if (!IsValidStation(station_id)) return -1;
|
||||||
if (!ScriptCargo::IsValidCargo(cargo_id)) return -1;
|
if (!ScriptCargo::IsValidCargo(cargo_id)) return -1;
|
||||||
|
|
||||||
return ::Station::Get(station_id)->goods[cargo_id].cargo.Count();
|
return ::Station::Get(station_id)->goods[cargo_id].cargo.TotalCount();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* static */ bool ScriptStation::HasCargoRating(StationID station_id, CargoID cargo_id)
|
/* static */ bool ScriptStation::HasCargoRating(StationID station_id, CargoID cargo_id)
|
||||||
|
@ -399,7 +399,7 @@
|
|||||||
|
|
||||||
uint32 amount = 0;
|
uint32 amount = 0;
|
||||||
for (const Vehicle *v = ::Vehicle::Get(vehicle_id); v != NULL; v = v->Next()) {
|
for (const Vehicle *v = ::Vehicle::Get(vehicle_id); v != NULL; v = v->Next()) {
|
||||||
if (v->cargo_type == cargo) amount += v->cargo.Count();
|
if (v->cargo_type == cargo) amount += v->cargo.StoredCount();
|
||||||
}
|
}
|
||||||
|
|
||||||
return amount;
|
return amount;
|
||||||
|
@ -70,9 +70,9 @@ void DrawShipDetails(const Vehicle *v, int left, int right, int y)
|
|||||||
DrawString(left, right, y + FONT_HEIGHT_NORMAL, STR_VEHICLE_INFO_CAPACITY);
|
DrawString(left, right, y + FONT_HEIGHT_NORMAL, STR_VEHICLE_INFO_CAPACITY);
|
||||||
|
|
||||||
StringID str = STR_VEHICLE_DETAILS_CARGO_EMPTY;
|
StringID str = STR_VEHICLE_DETAILS_CARGO_EMPTY;
|
||||||
if (!v->cargo.Empty()) {
|
if (v->cargo.StoredCount() > 0) {
|
||||||
SetDParam(0, v->cargo_type);
|
SetDParam(0, v->cargo_type);
|
||||||
SetDParam(1, v->cargo.Count());
|
SetDParam(1, v->cargo.StoredCount());
|
||||||
SetDParam(2, v->cargo.Source());
|
SetDParam(2, v->cargo.Source());
|
||||||
str = STR_VEHICLE_DETAILS_CARGO_FROM;
|
str = STR_VEHICLE_DETAILS_CARGO_FROM;
|
||||||
}
|
}
|
||||||
|
@ -3225,7 +3225,7 @@ static void UpdateStationRating(Station *st)
|
|||||||
|
|
||||||
bool skip = false;
|
bool skip = false;
|
||||||
int rating = 0;
|
int rating = 0;
|
||||||
uint waiting = ge->cargo.Count();
|
uint waiting = ge->cargo.TotalCount();
|
||||||
|
|
||||||
if (HasBit(cs->callback_mask, CBM_CARGO_STATION_RATING_CALC)) {
|
if (HasBit(cs->callback_mask, CBM_CARGO_STATION_RATING_CALC)) {
|
||||||
/* Perform custom station rating. If it succeeds the speed, days in transit and
|
/* Perform custom station rating. If it succeeds the speed, days in transit and
|
||||||
@ -3315,8 +3315,10 @@ static void UpdateStationRating(Station *st)
|
|||||||
waiting_changed = true;
|
waiting_changed = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (waiting_changed && waiting < ge->cargo.Count()) {
|
/* We can't truncate cargo that's already reserved for loading.
|
||||||
ge->cargo.Truncate(ge->cargo.Count() - waiting);
|
* Thus StoredCount() here. */
|
||||||
|
if (waiting_changed && waiting < ge->cargo.AvailableCount()) {
|
||||||
|
ge->cargo.Truncate(ge->cargo.AvailableCount() - waiting);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -231,8 +231,8 @@ protected:
|
|||||||
|
|
||||||
CargoID j;
|
CargoID j;
|
||||||
FOR_EACH_SET_CARGO_ID(j, cargo_filter) {
|
FOR_EACH_SET_CARGO_ID(j, cargo_filter) {
|
||||||
if (!(*a)->goods[j].cargo.Empty()) diff += GetTransportedGoodsIncome((*a)->goods[j].cargo.Count(), 20, 50, j);
|
if ((*a)->goods[j].cargo.TotalCount() > 0) diff += GetTransportedGoodsIncome((*a)->goods[j].cargo.TotalCount(), 20, 50, j);
|
||||||
if (!(*b)->goods[j].cargo.Empty()) diff -= GetTransportedGoodsIncome((*b)->goods[j].cargo.Count(), 20, 50, j);
|
if ((*b)->goods[j].cargo.TotalCount() > 0) diff -= GetTransportedGoodsIncome((*b)->goods[j].cargo.TotalCount(), 20, 50, j);
|
||||||
}
|
}
|
||||||
|
|
||||||
return ClampToI32(diff);
|
return ClampToI32(diff);
|
||||||
@ -407,7 +407,7 @@ public:
|
|||||||
/* show cargo waiting and station ratings */
|
/* show cargo waiting and station ratings */
|
||||||
for (uint j = 0; j < _sorted_standard_cargo_specs_size; j++) {
|
for (uint j = 0; j < _sorted_standard_cargo_specs_size; j++) {
|
||||||
CargoID cid = _sorted_cargo_specs[j]->Index();
|
CargoID cid = _sorted_cargo_specs[j]->Index();
|
||||||
if (!st->goods[cid].cargo.Empty()) {
|
if (st->goods[cid].cargo.TotalCount() > 0) {
|
||||||
/* For RTL we work in exactly the opposite direction. So
|
/* For RTL we work in exactly the opposite direction. So
|
||||||
* decrement the space needed first, then draw to the left
|
* decrement the space needed first, then draw to the left
|
||||||
* instead of drawing to the left and then incrementing
|
* instead of drawing to the left and then incrementing
|
||||||
@ -416,7 +416,7 @@ public:
|
|||||||
x -= 20;
|
x -= 20;
|
||||||
if (x < r.left + WD_FRAMERECT_LEFT) break;
|
if (x < r.left + WD_FRAMERECT_LEFT) break;
|
||||||
}
|
}
|
||||||
StationsWndShowStationRating(x, x + 16, y, cid, st->goods[cid].cargo.Count(), st->goods[cid].rating);
|
StationsWndShowStationRating(x, x + 16, y, cid, st->goods[cid].cargo.TotalCount(), st->goods[cid].rating);
|
||||||
if (!rtl) {
|
if (!rtl) {
|
||||||
x += 20;
|
x += 20;
|
||||||
if (x > r.right - WD_FRAMERECT_RIGHT) break;
|
if (x > r.right - WD_FRAMERECT_RIGHT) break;
|
||||||
@ -934,7 +934,7 @@ struct StationViewWindow : public Window {
|
|||||||
|
|
||||||
/* count types of cargoes waiting in station */
|
/* count types of cargoes waiting in station */
|
||||||
for (CargoID i = 0; i < NUM_CARGO; i++) {
|
for (CargoID i = 0; i < NUM_CARGO; i++) {
|
||||||
if (st->goods[i].cargo.Empty()) {
|
if (st->goods[i].cargo.TotalCount() == 0) {
|
||||||
this->cargo_rows[i] = 0;
|
this->cargo_rows[i] = 0;
|
||||||
} else {
|
} else {
|
||||||
/* Add an entry for total amount of cargo of this type waiting. */
|
/* Add an entry for total amount of cargo of this type waiting. */
|
||||||
@ -994,7 +994,7 @@ struct StationViewWindow : public Window {
|
|||||||
if (--pos < 0) {
|
if (--pos < 0) {
|
||||||
StringID str = STR_JUST_NOTHING;
|
StringID str = STR_JUST_NOTHING;
|
||||||
for (CargoID i = 0; i < NUM_CARGO; i++) {
|
for (CargoID i = 0; i < NUM_CARGO; i++) {
|
||||||
if (!st->goods[i].cargo.Empty()) str = STR_EMPTY;
|
if (st->goods[i].cargo.TotalCount() > 0) str = STR_EMPTY;
|
||||||
}
|
}
|
||||||
SetDParam(0, str);
|
SetDParam(0, str);
|
||||||
DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, y, STR_STATION_VIEW_WAITING_TITLE);
|
DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, y, STR_STATION_VIEW_WAITING_TITLE);
|
||||||
|
@ -199,7 +199,7 @@ protected: // These functions should not be called outside acceleration code.
|
|||||||
*/
|
*/
|
||||||
inline uint16 GetWeight() const
|
inline uint16 GetWeight() const
|
||||||
{
|
{
|
||||||
uint16 weight = (CargoSpec::Get(this->cargo_type)->weight * this->cargo.Count() * FreightWagonMult(this->cargo_type)) / 16;
|
uint16 weight = (CargoSpec::Get(this->cargo_type)->weight * this->cargo.StoredCount() * FreightWagonMult(this->cargo_type)) / 16;
|
||||||
|
|
||||||
/* Vehicle weight is not added for articulated parts. */
|
/* Vehicle weight is not added for articulated parts. */
|
||||||
if (!this->IsArticulatedPart()) {
|
if (!this->IsArticulatedPart()) {
|
||||||
|
@ -477,7 +477,7 @@ SpriteID Train::GetImage(Direction direction, EngineImageType image_type) const
|
|||||||
|
|
||||||
sprite = GetDefaultTrainSprite(spritenum, direction);
|
sprite = GetDefaultTrainSprite(spritenum, direction);
|
||||||
|
|
||||||
if (this->cargo.Count() >= this->cargo_cap / 2U) sprite += _wagon_full_adder[spritenum];
|
if (this->cargo.StoredCount() >= this->cargo_cap / 2U) sprite += _wagon_full_adder[spritenum];
|
||||||
|
|
||||||
return sprite;
|
return sprite;
|
||||||
}
|
}
|
||||||
|
@ -276,7 +276,7 @@ static void GetCargoSummaryOfArticulatedVehicle(const Train *v, CargoSummary *su
|
|||||||
}
|
}
|
||||||
|
|
||||||
item->capacity += v->cargo_cap;
|
item->capacity += v->cargo_cap;
|
||||||
item->amount += v->cargo.Count();
|
item->amount += v->cargo.StoredCount();
|
||||||
if (item->source == INVALID_STATION) item->source = v->cargo.Source();
|
if (item->source == INVALID_STATION) item->source = v->cargo.Source();
|
||||||
} while ((v = v->Next()) != NULL && v->IsArticulatedPart());
|
} while ((v = v->Next()) != NULL && v->IsArticulatedPart());
|
||||||
}
|
}
|
||||||
@ -311,7 +311,7 @@ int GetTrainDetailsWndVScroll(VehicleID veh_id, TrainDetailsWindowTabs det_tab)
|
|||||||
CargoArray act_cargo;
|
CargoArray act_cargo;
|
||||||
CargoArray max_cargo;
|
CargoArray max_cargo;
|
||||||
for (const Vehicle *v = Vehicle::Get(veh_id); v != NULL; v = v->Next()) {
|
for (const Vehicle *v = Vehicle::Get(veh_id); v != NULL; v = v->Next()) {
|
||||||
act_cargo[v->cargo_type] += v->cargo.Count();
|
act_cargo[v->cargo_type] += v->cargo.StoredCount();
|
||||||
max_cargo[v->cargo_type] += v->cargo_cap;
|
max_cargo[v->cargo_type] += v->cargo_cap;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -424,7 +424,7 @@ void DrawTrainDetails(const Train *v, int left, int right, int y, int vscroll_po
|
|||||||
Money feeder_share = 0;
|
Money feeder_share = 0;
|
||||||
|
|
||||||
for (const Vehicle *u = v; u != NULL; u = u->Next()) {
|
for (const Vehicle *u = v; u != NULL; u = u->Next()) {
|
||||||
act_cargo[u->cargo_type] += u->cargo.Count();
|
act_cargo[u->cargo_type] += u->cargo.StoredCount();
|
||||||
max_cargo[u->cargo_type] += u->cargo_cap;
|
max_cargo[u->cargo_type] += u->cargo_cap;
|
||||||
feeder_share += u->cargo.FeederShare();
|
feeder_share += u->cargo.FeederShare();
|
||||||
}
|
}
|
||||||
|
@ -189,7 +189,8 @@ uint Vehicle::Crash(bool flooded)
|
|||||||
if (this->IsPrimaryVehicle()) this->vehstatus |= VS_STOPPED;
|
if (this->IsPrimaryVehicle()) this->vehstatus |= VS_STOPPED;
|
||||||
/* crash all wagons, and count passengers */
|
/* crash all wagons, and count passengers */
|
||||||
for (Vehicle *v = this; v != NULL; v = v->Next()) {
|
for (Vehicle *v = this; v != NULL; v = v->Next()) {
|
||||||
if (IsCargoInClass(v->cargo_type, CC_PASSENGERS)) pass += v->cargo.Count();
|
/* We do not transfer reserver cargo back, so TotalCount() instead of StoredCount() */
|
||||||
|
if (IsCargoInClass(v->cargo_type, CC_PASSENGERS)) pass += v->cargo.TotalCount();
|
||||||
v->vehstatus |= VS_CRASHED;
|
v->vehstatus |= VS_CRASHED;
|
||||||
MarkSingleVehicleDirty(v);
|
MarkSingleVehicleDirty(v);
|
||||||
}
|
}
|
||||||
@ -1256,7 +1257,7 @@ uint8 CalcPercentVehicleFilled(const Vehicle *front, StringID *colour)
|
|||||||
|
|
||||||
/* Count up max and used */
|
/* Count up max and used */
|
||||||
for (const Vehicle *v = front; v != NULL; v = v->Next()) {
|
for (const Vehicle *v = front; v != NULL; v = v->Next()) {
|
||||||
count += v->cargo.OnboardCount();
|
count += v->cargo.StoredCount();
|
||||||
max += v->cargo_cap;
|
max += v->cargo_cap;
|
||||||
if (v->cargo_cap != 0 && colour != NULL) {
|
if (v->cargo_cap != 0 && colour != NULL) {
|
||||||
unloading += HasBit(v->vehicle_flags, VF_CARGO_UNLOADING) ? 1 : 0;
|
unloading += HasBit(v->vehicle_flags, VF_CARGO_UNLOADING) ? 1 : 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user