mirror of
https://github.com/OpenTTD/OpenTTD.git
synced 2025-03-12 10:30:28 +00:00
(svn r25900) -Change [FS#5677]: Allow restricted flows to be picked for kept cargo.
This commit is contained in:
parent
6524849386
commit
bd230f34f4
@ -408,6 +408,29 @@ void VehicleCargoList::SetTransferLoadPlace(TileIndex xy)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Choose action to be performed with the given cargo packet.
|
||||||
|
* @param cp The packet.
|
||||||
|
* @param cargo_next Next hop the cargo wants to pass.
|
||||||
|
* @param current_station Current station of the vehicle carrying the cargo.
|
||||||
|
* @param accepted If the cargo is accepted at the current station.
|
||||||
|
* @param next_station Next station(s) the vehicle may stop at.
|
||||||
|
* @return MoveToAction to be performed.
|
||||||
|
*/
|
||||||
|
/* static */ VehicleCargoList::MoveToAction VehicleCargoList::ChooseAction(const CargoPacket *cp, StationID cargo_next,
|
||||||
|
StationID current_station, bool accepted, StationIDStack next_station)
|
||||||
|
{
|
||||||
|
if (cargo_next == INVALID_STATION) {
|
||||||
|
return (accepted && cp->source != current_station) ? MTA_DELIVER : MTA_KEEP;
|
||||||
|
} else if (cargo_next == current_station) {
|
||||||
|
return MTA_DELIVER;
|
||||||
|
} else if (next_station.Contains(cargo_next)) {
|
||||||
|
return MTA_KEEP;
|
||||||
|
} else {
|
||||||
|
return MTA_TRANSFER;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Stages cargo for unloading. The cargo is sorted so that packets to be
|
* Stages cargo for unloading. The cargo is sorted so that packets to be
|
||||||
* transferred, delivered or kept are in consecutive chunks in the list. At the
|
* transferred, delivered or kept are in consecutive chunks in the list. At the
|
||||||
@ -470,15 +493,19 @@ bool VehicleCargoList::Stage(bool accepted, StationID current_station, StationID
|
|||||||
if (cp->source == INVALID_STATION && !ge->flows.empty()) {
|
if (cp->source == INVALID_STATION && !ge->flows.empty()) {
|
||||||
cp->source = ge->flows.begin()->first;
|
cp->source = ge->flows.begin()->first;
|
||||||
}
|
}
|
||||||
cargo_next = ge->GetVia(cp->source);
|
bool restricted = false;
|
||||||
if (cargo_next == INVALID_STATION) {
|
FlowStatMap::const_iterator flow_it(ge->flows.find(cp->source));
|
||||||
action = (accepted && cp->source != current_station) ? MTA_DELIVER : MTA_KEEP;
|
if (flow_it == ge->flows.end()) {
|
||||||
} else if (cargo_next == current_station) {
|
cargo_next = INVALID_STATION;
|
||||||
action = MTA_DELIVER;
|
|
||||||
} else if (next_station.Contains(cargo_next)) {
|
|
||||||
action = MTA_KEEP;
|
|
||||||
} else {
|
} else {
|
||||||
action = MTA_TRANSFER;
|
cargo_next = flow_it->second.GetViaWithRestricted(restricted);
|
||||||
|
}
|
||||||
|
action = VehicleCargoList::ChooseAction(cp, cargo_next, current_station, accepted, next_station);
|
||||||
|
if (restricted && action == MTA_TRANSFER) {
|
||||||
|
/* If the flow is restricted we can't transfer to it. Choose an
|
||||||
|
* unrestricted one instead. */
|
||||||
|
cargo_next = flow_it->second.GetVia();
|
||||||
|
action = VehicleCargoList::ChooseAction(cp, cargo_next, current_station, accepted, next_station);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Money share;
|
Money share;
|
||||||
|
@ -311,6 +311,9 @@ protected:
|
|||||||
void AddToMeta(const CargoPacket *cp, MoveToAction action);
|
void AddToMeta(const CargoPacket *cp, MoveToAction action);
|
||||||
void RemoveFromMeta(const CargoPacket *cp, MoveToAction action, uint count);
|
void RemoveFromMeta(const CargoPacket *cp, MoveToAction action, uint count);
|
||||||
|
|
||||||
|
static MoveToAction ChooseAction(const CargoPacket *cp, StationID cargo_next,
|
||||||
|
StationID current_station, bool accepted, StationIDStack next_station);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
/** The station cargo list needs to control the unloading. */
|
/** The station cargo list needs to control the unloading. */
|
||||||
friend class StationCargoList;
|
friend class StationCargoList;
|
||||||
|
@ -252,7 +252,7 @@
|
|||||||
* 184 25508
|
* 184 25508
|
||||||
* 185 25620
|
* 185 25620
|
||||||
* 186 25833
|
* 186 25833
|
||||||
* 187 ?????
|
* 187 25899
|
||||||
*/
|
*/
|
||||||
extern const uint16 SAVEGAME_VERSION = 187; ///< Current savegame version of OpenTTD.
|
extern const uint16 SAVEGAME_VERSION = 187; ///< Current savegame version of OpenTTD.
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user