From 8e00fa39b2ba72ac494b728c8636ad06cd835b22 Mon Sep 17 00:00:00 2001 From: terkhen Date: Sat, 4 Jun 2011 21:21:00 +0000 Subject: (svn r22542) -Add: Store cargo acceptance stats for stations. --- src/economy.cpp | 9 ++++++++- src/station_base.h | 8 ++++++-- src/station_cmd.cpp | 18 +++++++++++++++++- 3 files changed, 31 insertions(+), 4 deletions(-) (limited to 'src') 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); + } + } } -- cgit v1.2.3-54-g00ecf