summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrubidium <rubidium@openttd.org>2009-10-20 22:24:34 +0000
committerrubidium <rubidium@openttd.org>2009-10-20 22:24:34 +0000
commit69b8e8e755959af5731e2caf05a421ef949a1bb6 (patch)
tree3491370b3745e950e35a7aa6fbaa64b970752009
parent79906f7ffef0543a10ffa530fbb95431a0fbe838 (diff)
downloadopenttd-69b8e8e755959af5731e2caf05a421ef949a1bb6.tar.xz
(svn r17836) -Codechange: split the CargoPacket constructor for creating 'real' new CargoPackets and saveload. For saveload we do not need to set anything except two variables (the rest is always overwritten by the load), for new 'real' cargo also pass the source_xy; dereferencing st before calling is easier than resolving st->index back to st and then dereferencing. Also don't set loaded_at_xy because that is of no importance when not loaded in a vehicle.
-rw-r--r--src/cargopacket.cpp21
-rw-r--r--src/cargopacket.h12
-rw-r--r--src/station_cmd.cpp2
3 files changed, 22 insertions, 13 deletions
diff --git a/src/cargopacket.cpp b/src/cargopacket.cpp
index e2dbf900d..f2614c9b7 100644
--- a/src/cargopacket.cpp
+++ b/src/cargopacket.cpp
@@ -26,18 +26,20 @@ void InitializeCargoPackets()
_cargopacket_pool.CleanPool();
}
-CargoPacket::CargoPacket(StationID source, uint16 count, SourceType source_type, SourceID source_id) :
+CargoPacket::CargoPacket()
+{
+ this->source_type = ST_INDUSTRY;
+ this->source_id = INVALID_SOURCE;
+}
+
+CargoPacket::CargoPacket(StationID source, TileIndex source_xy, uint16 count, SourceType source_type, SourceID source_id) :
count(count),
source_id(source_id),
- source(source)
+ source(source),
+ source_xy(source_xy)
{
- this->source_type = source_type;
-
- if (source != INVALID_STATION) {
- assert(count != 0);
- this->source_xy = Station::Get(source)->xy;
- this->loaded_at_xy = this->source_xy;
- }
+ assert(count != 0);
+ this->source_type = source_type;
}
CargoPacket::CargoPacket(uint16 count, byte days_in_transit, StationID source, TileIndex source_xy, TileIndex loaded_at_xy, Money feeder_share, SourceType source_type, SourceID source_id) :
@@ -49,6 +51,7 @@ CargoPacket::CargoPacket(uint16 count, byte days_in_transit, StationID source, T
source_xy(source_xy),
loaded_at_xy(loaded_at_xy)
{
+ assert(count != 0);
this->source_type = source_type;
}
diff --git a/src/cargopacket.h b/src/cargopacket.h
index 13970e18e..17528e516 100644
--- a/src/cargopacket.h
+++ b/src/cargopacket.h
@@ -57,14 +57,20 @@ public:
static const uint16 MAX_COUNT = UINT16_MAX;
/**
+ * Create a new packet for savegame loading.
+ */
+ CargoPacket();
+
+ /**
* Creates a new cargo packet
- * @param source the source of the packet
+ * @param source the source station of the packet
+ * @param source_xy the source location of the packet
* @param count the number of cargo entities to put in this packet
* @param source_type the 'type' of source the packet comes from (for subsidies)
* @param source_id the actual source of the packet (for subsidies)
- * @pre count != 0 || source == INVALID_STATION
+ * @pre count != 0
*/
- CargoPacket(StationID source = INVALID_STATION, uint16 count = 0, SourceType source_type = ST_INDUSTRY, SourceID source_id = INVALID_SOURCE);
+ CargoPacket(StationID source, TileIndex source_xy, uint16 count, SourceType source_type, SourceID source_id);
/**
* Creates a new cargo packet. Initializes the fields that cannot be changed later.
diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp
index 42c57f1f1..746202868 100644
--- a/src/station_cmd.cpp
+++ b/src/station_cmd.cpp
@@ -2911,7 +2911,7 @@ void ModifyStationRatingAround(TileIndex tile, Owner owner, int amount, uint rad
static void UpdateStationWaiting(Station *st, CargoID type, uint amount, SourceType source_type, SourceID source_id)
{
- st->goods[type].cargo.Append(new CargoPacket(st->index, amount, source_type, source_id));
+ st->goods[type].cargo.Append(new CargoPacket(st->index, st->xy, amount, source_type, source_id));
SetBit(st->goods[type].acceptance_pickup, GoodsEntry::PICKUP);
StationAnimationTrigger(st, st->xy, STAT_ANIM_NEW_CARGO, type);