OpenRCT2/src/openrct2/actions/ParkSetLoanAction.cpp

72 lines
2.0 KiB
C++

/*****************************************************************************
* Copyright (c) 2014-2020 OpenRCT2 developers
*
* For a complete list of all authors, please refer to contributors.md
* Interested in contributing? Visit https://github.com/OpenRCT2/OpenRCT2
*
* OpenRCT2 is licensed under the GNU General Public License version 3.
*****************************************************************************/
#include "ParkSetLoanAction.h"
#include "../Context.h"
#include "../core/MemoryStream.h"
#include "../localisation/StringIds.h"
#include "../management/Finance.h"
#include "../ui/UiContext.h"
#include "../ui/WindowManager.h"
#include "../windows/Intent.h"
ParkSetLoanAction::ParkSetLoanAction(money32 value)
: _value(value)
{
}
void ParkSetLoanAction::AcceptParameters(GameActionParameterVisitor& visitor)
{
visitor.Visit("value", _value);
}
uint16_t ParkSetLoanAction::GetActionFlags() const
{
return GameAction::GetActionFlags() | GameActions::Flags::AllowWhilePaused;
}
void ParkSetLoanAction::Serialise(DataSerialiser& stream)
{
GameAction::Serialise(stream);
stream << DS_TAG(_value);
}
GameActions::Result::Ptr ParkSetLoanAction::Query() const
{
auto currentLoan = gBankLoan;
auto loanDifference = currentLoan - _value;
if (_value > currentLoan)
{
if (_value > gMaxBankLoan)
{
return MakeResult(
GameActions::Status::Disallowed, STR_CANT_BORROW_ANY_MORE_MONEY, STR_BANK_REFUSES_TO_INCREASE_LOAN);
}
}
else
{
if (loanDifference > gCash)
{
return MakeResult(GameActions::Status::InsufficientFunds, STR_CANT_PAY_BACK_LOAN, STR_NOT_ENOUGH_CASH_AVAILABLE);
}
}
return MakeResult();
}
GameActions::Result::Ptr ParkSetLoanAction::Execute() const
{
gCash -= (gBankLoan - _value);
gBankLoan = _value;
auto windowManager = OpenRCT2::GetContext()->GetUiContext()->GetWindowManager();
windowManager->BroadcastIntent(Intent(INTENT_ACTION_UPDATE_CASH));
return MakeResult();
}