summaryrefslogtreecommitdiff
path: root/src/cargopacket.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/cargopacket.cpp')
-rw-r--r--src/cargopacket.cpp27
1 files changed, 23 insertions, 4 deletions
diff --git a/src/cargopacket.cpp b/src/cargopacket.cpp
index 65514e647..355cabebb 100644
--- a/src/cargopacket.cpp
+++ b/src/cargopacket.cpp
@@ -16,17 +16,33 @@ void InitializeCargoPackets()
_cargopacket_pool.CleanPool();
}
-CargoPacket::CargoPacket(StationID source, uint16 count)
+CargoPacket::CargoPacket(StationID source, uint16 count, SourceType source_type, SourceID source_id)
{
if (source != INVALID_STATION) assert(count != 0);
- this->source = source;
+// this->feeder_share = 0; // no need to zero already zeroed data (by operator new)
this->source_xy = (source != INVALID_STATION) ? Station::Get(source)->xy : 0;
this->loaded_at_xy = this->source_xy;
+ this->source = source;
this->count = count;
- this->days_in_transit = 0;
- this->feeder_share = 0;
+// this->days_in_transit = 0;
+
+ this->source_type = source_type;
+ this->source_id = source_id;
+}
+
+/**
+ * Invalidates (sets source_id to INVALID_SOURCE) all cargo packets from given source
+ * @param src_type type of source
+ * @param src index of source
+ */
+/* static */ void CargoPacket::InvalidateAllFrom(SourceType src_type, SourceID src)
+{
+ CargoPacket *cp;
+ FOR_ALL_CARGOPACKETS(cp) {
+ if (cp->source_type == src_type && cp->source_id == src) cp->source_id = INVALID_SOURCE;
+ }
}
/*
@@ -149,6 +165,9 @@ bool CargoList::MoveTo(CargoList *dest, uint count, CargoList::MoveToAction mta,
cp_new->days_in_transit = cp->days_in_transit;
cp_new->feeder_share = fs;
+ cp_new->source_type = cp->source_type;
+ cp_new->source_id = cp->source_id;
+
cp_new->count = count;
dest->packets.push_back(cp_new);