(svn r23826) -Fix [FS#4972]: the detailed performance rating window showed the cargo count of the current quarter instead of the last quarter like the tooltip says

replace/41b28d7194a279bdc17475d4fbe2ea6ec885a466
rubidium 13 years ago
parent 15331fa03c
commit 70c7fbd90e

@ -105,6 +105,33 @@ public:
{
return this->amount[cargo];
}
/**
* Get the sum of all cargo amounts.
* @return The sum.
*/
template <typename T>
inline const T GetSum() const
{
T ret = 0;
for (size_t i = 0; i < lengthof(this->amount); i++) {
ret += this->amount[i];
}
return ret;
}
/**
* Get the amount of cargos that have an amount.
* @return The amount.
*/
inline byte GetCount() const
{
byte count = 0;
for (size_t i = 0; i < lengthof(this->amount); i++) {
if (this->amount[i] != 0) count++;
}
return count;
}
};

@ -19,12 +19,13 @@
#include "settings_type.h"
#include "group.h"
/** Statistics about the economy. */
struct CompanyEconomyEntry {
Money income;
Money expenses;
int32 delivered_cargo;
int32 performance_history; ///< company score (scale 0-1000)
Money company_value;
Money income; ///< The amount of income.
Money expenses; ///< The amount of expenses.
CargoArray delivered_cargo; ///< The amount of delivered cargo.
int32 performance_history; ///< Company score (scale 0-1000)
Money company_value; ///< The value of the company.
};
struct CompanyInfrastructure {
@ -62,8 +63,6 @@ struct CompanyProperties {
byte block_preview; ///< Number of quarters that the company is not allowed to get new exclusive engine previews (see CompaniesGenStatistics).
uint32 cargo_types; ///< Which cargo types were transported the last year.
TileIndex location_of_HQ; ///< Northern tile of HQ; #INVALID_TILE when there is none.
TileIndex last_build_coordinate; ///< Coordinate of the last build thing by this company.

@ -214,27 +214,21 @@ int UpdateCompanyRatingAndValue(Company *c, bool update)
/* Generate score depending on amount of transported cargo */
{
const CompanyEconomyEntry *cee;
int numec;
uint32 total_delivered;
numec = min(c->num_valid_stat_ent, 4);
int numec = min(c->num_valid_stat_ent, 4);
if (numec != 0) {
cee = c->old_economy;
total_delivered = 0;
const CompanyEconomyEntry *cee = c->old_economy;
OverflowSafeInt64 total_delivered = 0;
do {
total_delivered += cee->delivered_cargo;
total_delivered += cee->delivered_cargo.GetSum<OverflowSafeInt64>();
} while (++cee, --numec);
_score_part[owner][SCORE_DELIVERED] = total_delivered;
_score_part[owner][SCORE_DELIVERED] = ClampToI32(total_delivered);
}
}
/* Generate score for variety of cargo */
{
uint num = CountBits(c->cargo_types);
_score_part[owner][SCORE_CARGO] = num;
if (update) c->cargo_types = 0;
_score_part[owner][SCORE_CARGO] = c->old_economy->delivered_cargo.GetCount();
}
/* Generate score for company's money */
@ -1007,8 +1001,7 @@ static Money DeliverGoods(int num_pieces, CargoID cargo_type, StationID dest, Ti
}
/* Update company statistics */
company->cur_economy.delivered_cargo += accepted;
if (accepted > 0) SetBit(company->cargo_types, cargo_type);
company->cur_economy.delivered_cargo[cargo_type] += accepted;
/* Increase town's counter for town effects */
const CargoSpec *cs = CargoSpec::Get(cargo_type);

@ -717,7 +717,7 @@ struct DeliveredCargoGraphWindow : BaseGraphWindow {
virtual OverflowSafeInt64 GetGraphData(const Company *c, int j)
{
return c->old_economy[j].delivered_cargo;
return c->old_economy[j].delivered_cargo.GetSum<OverflowSafeInt64>();
}
};

@ -412,13 +412,13 @@ NetworkRecvStatus ServerNetworkAdminSocketHandler::SendCompanyEconomy()
p->Send_uint64(company->money);
p->Send_uint64(company->current_loan);
p->Send_uint64(income);
p->Send_uint16(company->cur_economy.delivered_cargo);
p->Send_uint16(min(UINT16_MAX, company->cur_economy.delivered_cargo.GetSum<OverflowSafeInt64>()));
/* Send stats for the last 2 quarters. */
for (uint i = 0; i < 2; i++) {
p->Send_uint64(company->old_economy[i].company_value);
p->Send_uint16(company->old_economy[i].performance_history);
p->Send_uint16(company->old_economy[i].delivered_cargo);
p->Send_uint16(min(UINT16_MAX, company->old_economy[i].delivered_cargo.GetSum<OverflowSafeInt64>()));
}
this->SendPacket(p);

@ -252,8 +252,8 @@ static const SaveLoad _company_desc[] = {
SLE_CONDVAR(CompanyProperties, avail_railtypes, SLE_UINT8, 0, 57),
SLE_VAR(CompanyProperties, block_preview, SLE_UINT8),
SLE_CONDVAR(CompanyProperties, cargo_types, SLE_FILE_U16 | SLE_VAR_U32, 0, 93),
SLE_CONDVAR(CompanyProperties, cargo_types, SLE_UINT32, 94, SL_MAX_VERSION),
SLE_CONDNULL(2, 0, 93), ///< cargo_types
SLE_CONDNULL(4, 94, 169), ///< cargo_types
SLE_CONDVAR(CompanyProperties, location_of_HQ, SLE_FILE_U16 | SLE_VAR_U32, 0, 5),
SLE_CONDVAR(CompanyProperties, location_of_HQ, SLE_UINT32, 6, SL_MAX_VERSION),
SLE_CONDVAR(CompanyProperties, last_build_coordinate, SLE_FILE_U16 | SLE_VAR_U32, 0, 5),
@ -338,7 +338,8 @@ static const SaveLoad _company_economy_desc[] = {
SLE_CONDVAR(CompanyEconomyEntry, company_value, SLE_FILE_I32 | SLE_VAR_I64, 0, 1),
SLE_CONDVAR(CompanyEconomyEntry, company_value, SLE_INT64, 2, SL_MAX_VERSION),
SLE_VAR(CompanyEconomyEntry, delivered_cargo, SLE_INT32),
SLE_CONDVAR(CompanyEconomyEntry, delivered_cargo[NUM_CARGO - 1], SLE_INT32, 0, 169),
SLE_CONDARR(CompanyEconomyEntry, delivered_cargo, SLE_UINT32, NUM_CARGO, 170, SL_MAX_VERSION),
SLE_VAR(CompanyEconomyEntry, performance_history, SLE_INT32),
SLE_END()

@ -887,7 +887,7 @@ static bool LoadOldCompanyYearly(LoadgameState *ls, int num)
static const OldChunks _company_economy_chunk[] = {
OCL_SVAR( OC_FILE_I32 | OC_VAR_I64, CompanyEconomyEntry, income ),
OCL_SVAR( OC_FILE_I32 | OC_VAR_I64, CompanyEconomyEntry, expenses ),
OCL_SVAR( OC_INT32, CompanyEconomyEntry, delivered_cargo ),
OCL_SVAR( OC_INT32, CompanyEconomyEntry, delivered_cargo[NUM_CARGO - 1] ),
OCL_SVAR( OC_INT32, CompanyEconomyEntry, performance_history ),
OCL_SVAR( OC_TTD | OC_FILE_I32 | OC_VAR_I64, CompanyEconomyEntry, company_value ),
@ -931,8 +931,8 @@ static const OldChunks _company_chunk[] = {
OCL_SVAR( OC_FILE_U32 | OC_VAR_I64, Company, bankrupt_value ),
OCL_SVAR( OC_UINT16, Company, bankrupt_timeout ),
OCL_SVAR( OC_TTD | OC_UINT32, Company, cargo_types ),
OCL_SVAR( OC_TTO | OC_FILE_U16 | OC_VAR_U32, Company, cargo_types ),
OCL_CNULL( OC_TTD, 4 ), // cargo_types
OCL_CNULL( OC_TTO, 2 ), // cargo_types
OCL_CHUNK( 3, LoadOldCompanyYearly ),
OCL_CHUNK( 1, LoadOldCompanyEconomy ),

@ -233,8 +233,9 @@
* 167 23504
* 168 23637
* 169 23816
* 170 23826
*/
extern const uint16 SAVEGAME_VERSION = 169; ///< Current savegame version of OpenTTD.
extern const uint16 SAVEGAME_VERSION = 170; ///< Current savegame version of OpenTTD.
SavegameType _savegame_type; ///< type of savegame we are loading

@ -138,9 +138,9 @@
if (quarter > EARLIEST_QUARTER) return -1;
if (quarter == CURRENT_QUARTER) {
return ::Company::Get((::CompanyID)company)->cur_economy.delivered_cargo;
return ::Company::Get((::CompanyID)company)->cur_economy.delivered_cargo.GetSum<OverflowSafeInt<int32, INT32_MAX, INT32_MIN> >();
}
return ::Company::Get((::CompanyID)company)->old_economy[quarter - 1].delivered_cargo;
return ::Company::Get((::CompanyID)company)->old_economy[quarter - 1].delivered_cargo.GetSum<OverflowSafeInt<int32, INT32_MAX, INT32_MIN> >();
}
/* static */ int32 ScriptCompany::GetQuarterlyPerformanceRating(ScriptCompany::CompanyID company, uint32 quarter)

Loading…
Cancel
Save