Change cargo scaling settings to be linear instead of logarithmic

This commit is contained in:
Jonathan G Rennison
2024-01-16 18:02:34 +00:00
parent c8ff26f2b8
commit 1e0bb019a7
21 changed files with 190 additions and 96 deletions

View File

@@ -253,4 +253,33 @@ enum TickRateMode : byte {
TRM_END, ///< Used for iterations and limit testing
};
struct CargoScaler {
private:
uint32_t scale16 = 1 << 16;
inline uint ScaleWithBias(uint num, uint32_t bias)
{
return (uint)((((uint64_t)num * (uint64_t)this->scale16) + bias) >> 16);
}
public:
inline bool HasScaling() const
{
return this->scale16 != (1 << 16);
}
inline void SetScale(uint32_t scale16)
{
this->scale16 = scale16;
}
inline uint Scale(uint num)
{
if (num == 0) return 0;
return std::max<uint>(1, this->ScaleWithBias(num, 0x8000));
}
uint ScaleAllowTrunc(uint num);
};
#endif /* ECONOMY_TYPE_H */