summaryrefslogtreecommitdiff
path: root/src/linkgraph/refresh.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/linkgraph/refresh.cpp')
-rw-r--r--src/linkgraph/refresh.cpp19
1 files changed, 12 insertions, 7 deletions
diff --git a/src/linkgraph/refresh.cpp b/src/linkgraph/refresh.cpp
index 02f27f40c..501f06352 100644
--- a/src/linkgraph/refresh.cpp
+++ b/src/linkgraph/refresh.cpp
@@ -72,10 +72,15 @@ LinkRefresher::LinkRefresher(Vehicle *vehicle, HopSet *seen_hops, bool allow_mer
vehicle(vehicle), seen_hops(seen_hops), cargo(CT_INVALID), allow_merge(allow_merge),
is_full_loading(is_full_loading)
{
+ memset(this->capacities, 0, sizeof(this->capacities));
+
/* Assemble list of capacities and set last loading stations to 0. */
for (Vehicle *v = this->vehicle; v != NULL; v = v->Next()) {
this->refit_capacities.push_back(RefitDesc(v->cargo_type, v->cargo_cap, v->refit_cap));
- if (v->refit_cap > 0) this->capacities[v->cargo_type] += v->refit_cap;
+ if (v->refit_cap > 0) {
+ assert(v->cargo_type < NUM_CARGO);
+ this->capacities[v->cargo_type] += v->refit_cap;
+ }
}
}
@@ -200,11 +205,11 @@ void LinkRefresher::RefreshStats(const Order *cur, const Order *next)
StationID next_station = next->GetDestination();
Station *st = Station::GetIfValid(cur->GetDestination());
if (st != NULL && next_station != INVALID_STATION && next_station != st->index) {
- for (CapacitiesMap::const_iterator i = this->capacities.begin(); i != this->capacities.end(); ++i) {
+ for (CargoID c = 0; c < NUM_CARGO; c++) {
/* Refresh the link and give it a minimum capacity. */
- if (i->second == 0) continue;
- CargoID c = i->first;
+ uint cargo_quantity = this->capacities[c];
+ if (cargo_quantity == 0) continue;
/* If not allowed to merge link graphs, make sure the stations are
* already in the same link graph. */
@@ -225,7 +230,7 @@ void LinkRefresher::RefreshStats(const Order *cur, const Order *next)
st->index == vehicle->last_station_visited &&
this->vehicle->orders.list->GetTotalDuration() >
(Ticks)this->vehicle->current_order_time) {
- uint effective_capacity = i->second * this->vehicle->load_unload_ticks;
+ uint effective_capacity = cargo_quantity * this->vehicle->load_unload_ticks;
if (effective_capacity > (uint)this->vehicle->orders.list->GetTotalDuration()) {
IncreaseStats(st, c, next_station, effective_capacity /
this->vehicle->orders.list->GetTotalDuration(), 0,
@@ -233,10 +238,10 @@ void LinkRefresher::RefreshStats(const Order *cur, const Order *next)
} else if (RandomRange(this->vehicle->orders.list->GetTotalDuration()) < effective_capacity) {
IncreaseStats(st, c, next_station, 1, 0, EUM_INCREASE | restricted_mode);
} else {
- IncreaseStats(st, c, next_station, i->second, 0, EUM_REFRESH | restricted_mode);
+ IncreaseStats(st, c, next_station, cargo_quantity, 0, EUM_REFRESH | restricted_mode);
}
} else {
- IncreaseStats(st, c, next_station, i->second, 0, EUM_REFRESH | restricted_mode);
+ IncreaseStats(st, c, next_station, cargo_quantity, 0, EUM_REFRESH | restricted_mode);
}
}
}