summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorterkhen <terkhen@openttd.org>2011-06-04 21:21:00 +0000
committerterkhen <terkhen@openttd.org>2011-06-04 21:21:00 +0000
commit8e00fa39b2ba72ac494b728c8636ad06cd835b22 (patch)
tree501a1377603bd7955505450c462757fd6276ec50 /src
parent9f68c20d10886074b10b1d96e8cdce0dcc03436a (diff)
downloadopenttd-8e00fa39b2ba72ac494b728c8636ad06cd835b22.tar.xz
(svn r22542) -Add: Store cargo acceptance stats for stations.
Diffstat (limited to 'src')
-rw-r--r--src/economy.cpp9
-rw-r--r--src/station_base.h8
-rw-r--r--src/station_cmd.cpp18
3 files changed, 31 insertions, 4 deletions
diff --git a/src/economy.cpp b/src/economy.cpp
index ec4e1780a..4d7d85885 100644
--- a/src/economy.cpp
+++ b/src/economy.cpp
@@ -933,7 +933,7 @@ static Money DeliverGoods(int num_pieces, CargoID cargo_type, StationID dest, Ti
{
assert(num_pieces > 0);
- const Station *st = Station::Get(dest);
+ Station *st = Station::Get(dest);
/* Give the goods to the industry. */
uint accepted = DeliverGoodsToIndustry(st, cargo_type, num_pieces, src_type == ST_INDUSTRY ? src : INVALID_INDUSTRY);
@@ -941,6 +941,13 @@ static Money DeliverGoods(int num_pieces, CargoID cargo_type, StationID dest, Ti
/* If this cargo type is always accepted, accept all */
if (HasBit(st->always_accepted, cargo_type)) accepted = num_pieces;
+ /* Update station statistics */
+ if (accepted > 0) {
+ SetBit(st->goods[cargo_type].acceptance_pickup, GoodsEntry::GES_EVER_ACCEPTED);
+ SetBit(st->goods[cargo_type].acceptance_pickup, GoodsEntry::GES_CURRENT_MONTH);
+ SetBit(st->goods[cargo_type].acceptance_pickup, GoodsEntry::GES_ACCEPTED_BIGTICK);
+ }
+
/* Update company statistics */
company->cur_economy.delivered_cargo += accepted;
if (accepted > 0) SetBit(company->cargo_types, cargo_type);
diff --git a/src/station_base.h b/src/station_base.h
index 55bf91c4f..1e9244b23 100644
--- a/src/station_base.h
+++ b/src/station_base.h
@@ -29,8 +29,12 @@ static const byte INITIAL_STATION_RATING = 175;
struct GoodsEntry {
/** Status of this cargo for the station. */
enum GoodsEntryStatus {
- GES_ACCEPTANCE, ///< This cargo is currently being accepted by the station.
- GES_PICKUP, ///< This cargo has been picked up at this station at least once.
+ GES_ACCEPTANCE, ///< This cargo is currently being accepted by the station.
+ GES_PICKUP, ///< This cargo has been picked up at this station at least once.
+ GES_EVER_ACCEPTED, ///< The cargo has been accepted at least once.
+ GES_LAST_MONTH, ///< The cargo was accepted last month.
+ GES_CURRENT_MONTH, ///< The cargo was accepted this month.
+ GES_ACCEPTED_BIGTICK, ///< The cargo has been accepted since the last periodic processing.
};
GoodsEntry() :
diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp
index 9e7d1e001..7546edd46 100644
--- a/src/station_cmd.cpp
+++ b/src/station_cmd.cpp
@@ -3001,6 +3001,13 @@ static bool StationHandleBigTick(BaseStation *st)
return false;
}
+ if (Station::IsExpected(st)) {
+ for (CargoID i = 0; i < NUM_CARGO; i++) {
+ ClrBit(Station::From(st)->goods[i].acceptance_pickup, GoodsEntry::GES_ACCEPTED_BIGTICK);
+ }
+ }
+
+
if ((st->facilities & FACIL_WAYPOINT) == 0) UpdateStationAcceptance(Station::From(st), true);
return true;
@@ -3171,9 +3178,18 @@ void OnTick_Station()
}
}
+/** Monthly loop for stations. */
void StationMonthlyLoop()
{
- /* not used */
+ Station *st;
+
+ FOR_ALL_STATIONS(st) {
+ for (CargoID i = 0; i < NUM_CARGO; i++) {
+ GoodsEntry *ge = &st->goods[i];
+ SB(ge->acceptance_pickup, GoodsEntry::GES_LAST_MONTH, 1, GB(ge->acceptance_pickup, GoodsEntry::GES_CURRENT_MONTH, 1));
+ ClrBit(ge->acceptance_pickup, GoodsEntry::GES_CURRENT_MONTH);
+ }
+ }
}