diff --git a/src/cargopacket.cpp b/src/cargopacket.cpp index e9b3f50641..12e7dde29a 100644 --- a/src/cargopacket.cpp +++ b/src/cargopacket.cpp @@ -40,11 +40,14 @@ CargoPacket::CargoPacket(StationID source, uint16 count, SourceType source_type, } } -CargoPacket::CargoPacket(uint16 count, byte days_in_transit, Money feeder_share, SourceType source_type, SourceID source_id) : +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) : feeder_share(feeder_share), count(count), days_in_transit(days_in_transit), - source_id(source_id) + source_id(source_id), + source(source), + source_xy(source_xy), + loaded_at_xy(loaded_at_xy) { this->source_type = source_type; } @@ -224,12 +227,7 @@ bool CargoList::MoveTo(Tother_inst *dest, uint max_move, CargoList::MoveT Money fs = cp->feeder_share * max_move / static_cast(cp->count); cp->feeder_share -= fs; - CargoPacket *cp_new = new CargoPacket(max_move, cp->days_in_transit, fs, cp->source_type, cp->source_id); - - cp_new->source = cp->source; - cp_new->source_xy = cp->source_xy; - cp_new->loaded_at_xy = (mta == MTA_CARGO_LOAD) ? data : cp->loaded_at_xy; - + CargoPacket *cp_new = new CargoPacket(max_move, cp->days_in_transit, cp->source, cp->source_xy, (mta == MTA_CARGO_LOAD) ? data : cp->loaded_at_xy, fs, cp->source_type, cp->source_id); this->RemoveFromCache(cp_new); // this reflects the changes in cp. if (mta == MTA_TRANSFER) { diff --git a/src/cargopacket.h b/src/cargopacket.h index 75467ae9f3..72eceac8d9 100644 --- a/src/cargopacket.h +++ b/src/cargopacket.h @@ -74,11 +74,14 @@ public: * Used when loading or splitting packets. * @param count the number of cargo entities to put in this packet * @param days_in_transit number of days the cargo has been in transit + * @param source the station the cargo was initially loaded + * @param source_xy the station location the cargo was initially loaded + * @param loaded_at_xy the location the cargo was loaded last * @param feeder_share feeder share the packet has already accumulated * @param source_type the 'type' of source the packet comes from (for subsidies) * @param source_id the actual source of the packet (for subsidies) */ - CargoPacket(uint16 count, byte days_in_transit, Money feeder_share = 0, SourceType source_type = ST_INDUSTRY, SourceID source_id = INVALID_SOURCE); + CargoPacket(uint16 count, byte days_in_transit, StationID source, TileIndex source_xy, TileIndex loaded_at_xy, Money feeder_share = 0, SourceType source_type = ST_INDUSTRY, SourceID source_id = INVALID_SOURCE); /** Destroy the packet */ ~CargoPacket() { } diff --git a/src/saveload/oldloader_sl.cpp b/src/saveload/oldloader_sl.cpp index 900cbd4ab4..809d88ed9d 100644 --- a/src/saveload/oldloader_sl.cpp +++ b/src/saveload/oldloader_sl.cpp @@ -698,9 +698,7 @@ static bool LoadOldGood(LoadgameState *ls, int num) SB(ge->acceptance_pickup, GoodsEntry::ACCEPTANCE, 1, HasBit(_waiting_acceptance, 15)); SB(ge->acceptance_pickup, GoodsEntry::PICKUP, 1, _cargo_source != 0xFF); if (GB(_waiting_acceptance, 0, 12) != 0) { - CargoPacket *cp = new CargoPacket(GB(_waiting_acceptance, 0, 12), _cargo_days); - cp->source = (_cargo_source == 0xFF) ? INVALID_STATION : _cargo_source; - ge->cargo.Append(cp); + ge->cargo.Append(new CargoPacket(GB(_waiting_acceptance, 0, 12), _cargo_days, (_cargo_source == 0xFF) ? INVALID_STATION : _cargo_source, 0, 0)); } return true; @@ -1330,13 +1328,9 @@ bool LoadOldVehicle(LoadgameState *ls, int num) v->next = (Vehicle *)(size_t)_old_next_ptr; if (_cargo_count != 0) { - CargoPacket *cp = new CargoPacket(_cargo_count, _cargo_days); - cp->source = (_cargo_source == 0xFF) ? INVALID_STATION : _cargo_source; - cp->source_xy = (cp->source != INVALID_STATION) ? Station::Get(cp->source)->xy : 0; - cp->loaded_at_xy = cp->source_xy; - cp->source_type = ST_INDUSTRY; - cp->source_id = INVALID_SOURCE; - v->cargo.Append(cp); + StationID source = (_cargo_source == 0xFF) ? INVALID_STATION : _cargo_source; + TileIndex source_xy = (source != INVALID_STATION) ? Station::Get(source)->xy : 0; + v->cargo.Append(new CargoPacket(_cargo_count, _cargo_days, source, source_xy, source_xy)); } } diff --git a/src/saveload/station_sl.cpp b/src/saveload/station_sl.cpp index cce6360463..b1cb2bed57 100644 --- a/src/saveload/station_sl.cpp +++ b/src/saveload/station_sl.cpp @@ -243,13 +243,12 @@ static void Load_STNS() if (CheckSavegameVersion(68)) { SB(ge->acceptance_pickup, GoodsEntry::ACCEPTANCE, 1, HasBit(_waiting_acceptance, 15)); if (GB(_waiting_acceptance, 0, 12) != 0) { - /* Don't construct the packet with station here, because that'll fail with old savegames */ - CargoPacket *cp = new CargoPacket(GB(_waiting_acceptance, 0, 12), _cargo_days, _cargo_feeder_share); /* In old versions, enroute_from used 0xFF as INVALID_STATION */ - cp->source = (CheckSavegameVersion(7) && _cargo_source == 0xFF) ? INVALID_STATION : _cargo_source; - cp->source_xy = _cargo_source_xy; + StationID source = (CheckSavegameVersion(7) && _cargo_source == 0xFF) ? INVALID_STATION : _cargo_source; + + /* Don't construct the packet with station here, because that'll fail with old savegames */ + ge->cargo.Append(new CargoPacket(GB(_waiting_acceptance, 0, 12), _cargo_days, source, _cargo_source_xy, _cargo_source_xy, _cargo_feeder_share)); SB(ge->acceptance_pickup, GoodsEntry::PICKUP, 1, 1); - ge->cargo.Append(cp); } } } diff --git a/src/saveload/vehicle_sl.cpp b/src/saveload/vehicle_sl.cpp index f49d4c3851..ccb627ebb0 100644 --- a/src/saveload/vehicle_sl.cpp +++ b/src/saveload/vehicle_sl.cpp @@ -719,10 +719,7 @@ void Load_VEHS() if (_cargo_count != 0 && IsCompanyBuildableVehicleType(v)) { /* Don't construct the packet with station here, because that'll fail with old savegames */ - CargoPacket *cp = new CargoPacket(_cargo_count, _cargo_days, _cargo_feeder_share); - cp->source = _cargo_source; - cp->source_xy = _cargo_source_xy; - cp->loaded_at_xy = _cargo_loaded_at_xy; + CargoPacket *cp = new CargoPacket(_cargo_count, _cargo_days, _cargo_source, _cargo_source_xy, _cargo_loaded_at_xy, _cargo_feeder_share); v->cargo.Append(cp); }