mirror of https://github.com/OpenTTD/OpenTTD
(svn r17801) -Codechange: for StationCargoLists the 'loaded_at_xy' does not matter when merging CargoPackets
parent
138e7233bc
commit
f76de82679
|
@ -111,7 +111,7 @@ void CargoList<Tinst>::Append(CargoPacket *cp)
|
||||||
|
|
||||||
for (List::iterator it = this->packets.begin(); it != this->packets.end(); it++) {
|
for (List::iterator it = this->packets.begin(); it != this->packets.end(); it++) {
|
||||||
CargoPacket *icp = *it;
|
CargoPacket *icp = *it;
|
||||||
if (icp->SameSource(cp) && icp->count + cp->count <= CargoPacket::MAX_COUNT) {
|
if (Tinst::AreMergable(icp, cp) && icp->count + cp->count <= CargoPacket::MAX_COUNT) {
|
||||||
icp->count += cp->count;
|
icp->count += cp->count;
|
||||||
icp->feeder_share += cp->feeder_share;
|
icp->feeder_share += cp->feeder_share;
|
||||||
|
|
||||||
|
|
|
@ -115,20 +115,6 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Checks whether the cargo packet is from (exactly) the same source
|
|
||||||
* in time and location.
|
|
||||||
* @param cp the cargo packet to compare to
|
|
||||||
* @return true if and only if days_in_transit and source_xy are equal
|
|
||||||
*/
|
|
||||||
FORCEINLINE bool SameSource(const CargoPacket *cp) const
|
|
||||||
{
|
|
||||||
return this->source_xy == cp->source_xy &&
|
|
||||||
this->days_in_transit == cp->days_in_transit &&
|
|
||||||
this->source_type == cp->source_type &&
|
|
||||||
this->source_id == cp->source_id;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void InvalidateAllFrom(SourceType src_type, SourceID src);
|
static void InvalidateAllFrom(SourceType src_type, SourceID src);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -301,6 +287,22 @@ public:
|
||||||
* Ages the all cargo in this list
|
* Ages the all cargo in this list
|
||||||
*/
|
*/
|
||||||
void AgeCargo();
|
void AgeCargo();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Are two the two CargoPackets mergeable in the context of
|
||||||
|
* a list of CargoPackets for a Vehicle?
|
||||||
|
* @param cp1 the first CargoPacket
|
||||||
|
* @param cp2 the second CargoPacket
|
||||||
|
* @return true if they are mergeable
|
||||||
|
*/
|
||||||
|
static bool AreMergable(const CargoPacket *cp1, const CargoPacket *cp2)
|
||||||
|
{
|
||||||
|
return cp1->source_xy == cp2->source_xy &&
|
||||||
|
cp1->days_in_transit == cp2->days_in_transit &&
|
||||||
|
cp1->source_type == cp2->source_type &&
|
||||||
|
cp1->source_id == cp2->source_id &&
|
||||||
|
cp1->loaded_at_xy == cp2->loaded_at_xy;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -310,6 +312,21 @@ class StationCargoList : public CargoList<StationCargoList> {
|
||||||
public:
|
public:
|
||||||
/** The stations, via GoodsEntry, have a CargoList. */
|
/** The stations, via GoodsEntry, have a CargoList. */
|
||||||
friend const struct SaveLoad *GetGoodsDesc();
|
friend const struct SaveLoad *GetGoodsDesc();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Are two the two CargoPackets mergeable in the context of
|
||||||
|
* a list of CargoPackets for a Vehicle?
|
||||||
|
* @param cp1 the first CargoPacket
|
||||||
|
* @param cp2 the second CargoPacket
|
||||||
|
* @return true if they are mergeable
|
||||||
|
*/
|
||||||
|
static bool AreMergable(const CargoPacket *cp1, const CargoPacket *cp2)
|
||||||
|
{
|
||||||
|
return cp1->source_xy == cp2->source_xy &&
|
||||||
|
cp1->days_in_transit == cp2->days_in_transit &&
|
||||||
|
cp1->source_type == cp2->source_type &&
|
||||||
|
cp1->source_id == cp2->source_id;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* CARGOPACKET_H */
|
#endif /* CARGOPACKET_H */
|
||||||
|
|
Loading…
Reference in New Issue