Files
PHY/Plugins/GIS/Source/GenericInventorySystem/Private/Exchange/GIS_CurrencyDefinition.cpp
2026-03-03 01:23:02 +08:00

52 lines
1.3 KiB
C++

// Copyright 2025 https://yuewu.dev/en All Rights Reserved.
#include "Exchange/GIS_CurrencyDefinition.h"
#include "GIS_InventorySubsystem.h"
#include UE_INLINE_GENERATED_CPP_BY_NAME(GIS_CurrencyDefinition)
FGIS_CurrencyExchangeRate::FGIS_CurrencyExchangeRate(const UGIS_CurrencyDefinition* InCurrency, float InExchangeRate)
{
Currency = InCurrency;
ExchangeRate = InExchangeRate;
}
bool UGIS_CurrencyDefinition::TryGetExchangeRateTo(const UGIS_CurrencyDefinition* OtherCurrency, double& ExchangeRate) const
{
if (OtherCurrency == nullptr)
{
ExchangeRate = -1;
return false;
}
//same currency
if (OtherCurrency == this)
{
ExchangeRate = 1;
return true;
}
const FGIS_CurrencyExchangeRate RootExchangeRate = GetRootExchangeRate();
const FGIS_CurrencyExchangeRate OtherRootExchangeRate = OtherCurrency->GetRootExchangeRate();
if (RootExchangeRate.Currency != OtherRootExchangeRate.Currency)
{
ExchangeRate = -1;
return false;
}
ExchangeRate = RootExchangeRate.ExchangeRate / OtherRootExchangeRate.ExchangeRate;
return true;
}
FGIS_CurrencyExchangeRate UGIS_CurrencyDefinition::GetRootExchangeRate(double AdditionalExchangeRate) const
{
if (ParentCurrency)
{
return ParentCurrency->GetRootExchangeRate(AdditionalExchangeRate * ExchangeRateToParent);
}
return FGIS_CurrencyExchangeRate(this, AdditionalExchangeRate);
}