Mercurial > hg > openttd
changeset 20388:812cb93f2f44 draft
(svn r25346) -Codechange: Glue between stations and flow stats
author | fonsinchen <fonsinchen@openttd.org> |
---|---|
date | Sun, 09 Jun 2013 12:49:47 +0000 |
parents | efe55280aefe |
children | 550023ce3a7b |
files | src/station.cpp src/station_base.h src/station_cmd.cpp |
diffstat | 3 files changed, 47 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/src/station.cpp +++ b/src/station.cpp @@ -97,6 +97,11 @@ delete lg; } } + Station *st; + FOR_ALL_STATIONS(st) { + GoodsEntry *ge = &st->goods[c]; + ge->flows.DeleteFlows(this->index); + } } Vehicle *v;
--- a/src/station_base.h +++ b/src/station_base.h @@ -196,6 +196,7 @@ LinkGraphID link_graph; ///< Link graph this station belongs to. NodeID node; ///< ID of node in link graph referring to this goods entry. + FlowStatMap flows; ///< Planned flows through this station. /** * Reports whether a vehicle has ever tried to load the cargo at this station. @@ -212,6 +213,33 @@ { return HasBit(this->acceptance_pickup, GES_PICKUP); } + + uint GetSumFlowVia(StationID via) const; + + /** + * Get the best next hop for a cargo packet from station source. + * @param source Source of the packet. + * @return The chosen next hop or INVALID_STATION if none was found. + */ + inline StationID GetVia(StationID source) const + { + FlowStatMap::const_iterator flow_it(this->flows.find(source)); + return flow_it != this->flows.end() ? flow_it->second.GetVia() : INVALID_STATION; + } + + /** + * Get the best next hop for a cargo packet from station source, optionally + * excluding one or two stations. + * @param source Source of the packet. + * @param excluded If this station would be chosen choose the second best one instead. + * @param excluded2 Second station to be excluded, if != INVALID_STATION. + * @return The chosen next hop or INVALID_STATION if none was found. + */ + inline StationID GetVia(StationID source, StationID excluded, StationID excluded2 = INVALID_STATION) const + { + FlowStatMap::const_iterator flow_it(this->flows.find(source)); + return flow_it != this->flows.end() ? flow_it->second.GetVia(excluded, excluded2) : INVALID_STATION; + } }; /** All airport-related information. Only valid if tile != INVALID_TILE. */
--- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -4161,6 +4161,20 @@ } } +/** + * Get the sum of flows via a specific station from this GoodsEntry. + * @param via Remote station to look for. + * @return a FlowStat with all flows for 'via' added up. + */ +uint GoodsEntry::GetSumFlowVia(StationID via) const +{ + uint ret = 0; + for (FlowStatMap::const_iterator i = this->flows.begin(); i != this->flows.end(); ++i) { + ret += i->second.GetShare(via); + } + return ret; +} + extern const TileTypeProcs _tile_type_station_procs = { DrawTile_Station, // draw_tile_proc GetSlopePixelZ_Station, // get_slope_z_proc