(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.

pull/155/head
rubidium 15 years ago
parent b124e9e874
commit 61720eede3

@ -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;
}

@ -56,15 +56,21 @@ public:
/** Maximum number of items in a single cargo packet. */
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.

@ -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);

Loading…
Cancel
Save