Add ToGBP function to convert non literals to money32

This commit is contained in:
Tulio Leao 2022-03-21 08:47:58 -03:00
parent 90dbe60a1f
commit e63432a416
6 changed files with 19 additions and 13 deletions

View File

@ -360,7 +360,7 @@ money32 LandSetHeightAction::GetSurfaceHeightChangeCost(SurfaceElement* surfaceE
{
int32_t cornerHeight = tile_element_get_corner_height(surfaceElement, i);
cornerHeight -= map_get_corner_height(_height, _style & TILE_ELEMENT_SURFACE_SLOPE_MASK, i);
cost += (abs(cornerHeight) * 5 / 2) * 10;
cost += 2.5_GBP * abs(cornerHeight);
}
return cost;
}

View File

@ -138,7 +138,7 @@ GameActions::Result MazeSetTrackAction::Query() const
const auto& ted = GetTrackElementDescriptor(TrackElemType::Maze);
money32 price = (((ride->GetRideTypeDescriptor().BuildCosts.TrackPrice * ted.Price) >> 16));
res.Cost = price / 2 * 10;
res.Cost = (price / 2) * 10;
return res;
}
@ -174,7 +174,7 @@ GameActions::Result MazeSetTrackAction::Execute() const
{
const auto& ted = GetTrackElementDescriptor(TrackElemType::Maze);
money32 price = (((ride->GetRideTypeDescriptor().BuildCosts.TrackPrice * ted.Price) >> 16));
res.Cost = price / 2 * 10;
res.Cost = (price / 2) * 10;
auto startLoc = _loc.ToTileStart();

View File

@ -98,6 +98,11 @@ constexpr money32 operator"" _GBP(long double money) noexcept
return money * 10;
}
constexpr money32 ToMoney32FromGBP(long double money) noexcept
{
return money * 10;
}
#define MONEY16_UNDEFINED static_cast<money16>(static_cast<uint16_t>(0xFFFF))
#define MONEY32_UNDEFINED (static_cast<money32>(0x80000000))
#define MONEY64_UNDEFINED (static_cast<money64>(0x8000000000000000))

View File

@ -754,7 +754,7 @@ static int32_t cc_set(InteractiveConsole& console, const arguments_t& argv)
if (argv[0] == "money" && invalidArguments(&invalidArgs, double_valid[0]))
{
money32 money = static_cast<int32_t>(double_val[0] * 10);
money32 money = ToMoney32FromGBP(double_val[0]);
if (gCash != money)
{
auto setCheatAction = SetCheatAction(CheatType::SetMoney, money);
@ -774,7 +774,7 @@ static int32_t cc_set(InteractiveConsole& console, const arguments_t& argv)
else if (argv[0] == "scenario_initial_cash" && invalidArguments(&invalidArgs, int_valid[0]))
{
auto scenarioSetSetting = ScenarioSetSettingAction(
ScenarioSetSetting::InitialCash, std::clamp(int_val[0] * 10, 0.00_GBP, 1000000.00_GBP));
ScenarioSetSetting::InitialCash, std::clamp(ToMoney32FromGBP(int_val[0]), 0.00_GBP, 1000000.00_GBP));
scenarioSetSetting.SetCallback([&console](const GameAction*, const GameActions::Result* res) {
if (res->Error != GameActions::Status::Ok)
console.WriteLineError("set scenario_initial_cash command failed, likely due to permissions.");
@ -787,7 +787,8 @@ static int32_t cc_set(InteractiveConsole& console, const arguments_t& argv)
{
auto scenarioSetSetting = ScenarioSetSettingAction(
ScenarioSetSetting::InitialLoan,
std::clamp<money64>((int_val[0] - (int_val[0] % 1000)) * 10, 0.00_GBP, gMaxBankLoan));
std::clamp<money64>(
ToMoney32FromGBP(int_val[0]) - ToMoney32FromGBP(int_val[0] % 1000), 0.00_GBP, gMaxBankLoan));
scenarioSetSetting.SetCallback([&console](const GameAction*, const GameActions::Result* res) {
if (res->Error != GameActions::Status::Ok)
console.WriteLineError("set current_loan command failed, likely due to permissions.");
@ -800,7 +801,7 @@ static int32_t cc_set(InteractiveConsole& console, const arguments_t& argv)
{
auto scenarioSetSetting = ScenarioSetSettingAction(
ScenarioSetSetting::MaximumLoanSize,
std::clamp((int_val[0] - (int_val[0] % 1000)) * 10, 0.00_GBP, 5000000.00_GBP));
std::clamp(ToMoney32FromGBP(int_val[0]) - ToMoney32FromGBP(int_val[0] % 1000), 0.00_GBP, 5000000.00_GBP));
scenarioSetSetting.SetCallback([&console](const GameAction*, const GameActions::Result* res) {
if (res->Error != GameActions::Status::Ok)
console.WriteLineError("set max_loan command failed, likely due to permissions.");
@ -812,8 +813,7 @@ static int32_t cc_set(InteractiveConsole& console, const arguments_t& argv)
else if (argv[0] == "guest_initial_cash" && invalidArguments(&invalidArgs, double_valid[0]))
{
auto scenarioSetSetting = ScenarioSetSettingAction(
ScenarioSetSetting::AverageCashPerGuest,
std::clamp(static_cast<int32_t>(double_val[0] * 10), 0.00_GBP, 1000.00_GBP));
ScenarioSetSetting::AverageCashPerGuest, std::clamp(ToMoney32FromGBP(double_val[0]), 0.00_GBP, 1000.00_GBP));
scenarioSetSetting.SetCallback([&console](const GameAction*, const GameActions::Result* res) {
if (res->Error != GameActions::Status::Ok)
console.WriteLineError("set guest_initial_cash command failed, likely due to permissions.");
@ -977,7 +977,7 @@ static int32_t cc_set(InteractiveConsole& console, const arguments_t& argv)
else if (argv[0] == "land_rights_cost" && invalidArguments(&invalidArgs, double_valid[0]))
{
auto scenarioSetSetting = ScenarioSetSettingAction(
ScenarioSetSetting::CostToBuyLand, std::clamp(static_cast<int32_t>(double_val[0] * 10), 0.00_GBP, 200.00_GBP));
ScenarioSetSetting::CostToBuyLand, std::clamp(ToMoney32FromGBP(double_val[0]), 0.00_GBP, 200.00_GBP));
scenarioSetSetting.SetCallback([&console](const GameAction*, const GameActions::Result* res) {
if (res->Error != GameActions::Status::Ok)
console.WriteLineError("set land_rights_cost command failed, likely due to permissions.");
@ -990,7 +990,7 @@ static int32_t cc_set(InteractiveConsole& console, const arguments_t& argv)
{
auto scenarioSetSetting = ScenarioSetSettingAction(
ScenarioSetSetting::CostToBuyConstructionRights,
std::clamp(static_cast<int32_t>(double_val[0] * 10), 0.00_GBP, 200.00_GBP));
std::clamp(ToMoney32FromGBP(double_val[0]), 0.00_GBP, 200.00_GBP));
scenarioSetSetting.SetCallback([&console](const GameAction*, const GameActions::Result* res) {
if (res->Error != GameActions::Status::Ok)
console.WriteLineError("set construction_rights_cost command failed, likely due to permissions.");

View File

@ -500,7 +500,7 @@ money32 string_to_money(const char* string_to_monetise)
number /= (currencyDesc->rate / 10.0);
// Check if MONEY resulted in overflow
uint64_t result = std::min<uint64_t>(number * 10.0, (std::numeric_limits<uint32_t>::max)());
uint64_t result = std::min<uint64_t>(ToMoney32FromGBP(number), (std::numeric_limits<uint32_t>::max)());
result *= sign;
return static_cast<uint32_t>(result);
}

View File

@ -504,7 +504,8 @@ money64 Park::CalculateRideValue(const Ride* ride) const
if (ride != nullptr && ride->value != RIDE_VALUE_UNDEFINED)
{
const auto& rtd = ride->GetRideTypeDescriptor();
result = (ride->value * 10LL) * (static_cast<money64>(ride_customers_in_last_5_minutes(ride)) + rtd.BonusValue * 4LL);
result = ToMoney32FromGBP(static_cast<double long>(ride->value))
* (static_cast<money64>(ride_customers_in_last_5_minutes(ride)) + rtd.BonusValue * 4LL);
}
return result;
}