// converts the currency amount to its base currency and returns it public static int GetConvertedValue(Currency currency, int currencyAmount) { CurrencyGroup currencyGroup = FindCurrencyGroup(currency); if (currencyGroup != null) { // attemp redistribution Currency baseCurrency = currencyGroup.MyBaseCurrency; // convert everything in the group to the base amount if (SystemResourceManager.MatchResource(currency.MyName, currencyGroup.MyBaseCurrency.MyName)) { return(currencyAmount); } // the currency needs conversion foreach (CurrencyGroupRate currencyGroupRate in currencyGroup.MyCurrencyGroupRates) { if (SystemResourceManager.MatchResource(currencyGroupRate.MyCurrency.MyName, currency.MyName)) { return(currencyGroupRate.MyBaseMultiple * currencyAmount); } } return(currencyAmount); } return(currencyAmount); }
// converts the currency amount to its base currency and returns it public int GetBaseCurrencyAmount(Currency currency, int currencyAmount) { //Debug.Log("CurrencyConverter.GetBaseCurrencyAmount(" + currency.DisplayName + ", " + currencyAmount + ")"); CurrencyGroup currencyGroup = FindCurrencyGroup(currency); if (currencyGroup != null) { // attemp redistribution Currency baseCurrency = currencyGroup.MyBaseCurrency; // convert everything in the group to the base amount if (SystemDataFactory.MatchResource(currency.DisplayName, currencyGroup.MyBaseCurrency.DisplayName)) { //Debug.Log("CurrencyConverter.GetBaseCurrencyAmount(" + currency.DisplayName + ", " + currencyAmount + ") return: " + currencyAmount); return(currencyAmount); } // the currency needs conversion foreach (CurrencyGroupRate currencyGroupRate in currencyGroup.MyCurrencyGroupRates) { if (SystemDataFactory.MatchResource(currencyGroupRate.Currency.DisplayName, currency.DisplayName)) { //Debug.Log("CurrencyConverter.GetBaseCurrencyAmount(" + currency.DisplayName + ", " + currencyAmount + ") return: " + (currencyGroupRate.MyBaseMultiple * currencyAmount)); return(currencyGroupRate.BaseMultiple * currencyAmount); } } //Debug.Log("CurrencyConverter.GetBaseCurrencyAmount(" + currency.DisplayName + ", " + currencyAmount + ") return: " + currencyAmount); return(currencyAmount); } //Debug.Log("CurrencyConverter.GetBaseCurrencyAmount(" + currency.DisplayName + ", " + currencyAmount + ") return: " + currencyAmount); return(currencyAmount); }
// returns the base currency for any given currency if it is part of a group, otherwise, just returns itself public static Currency GetBaseCurrency(Currency currency) { CurrencyGroup currencyGroup = FindCurrencyGroup(currency); if (currencyGroup != null) { return(currencyGroup.MyBaseCurrency); } return(currency); }
/* * public int GetCurrencyAmountFromList(Currency currency, List<KeyValuePair<Currency, int>>) { * //Debug.Log(gameObject.name + ".PlayerCurrencyManager.GetCurrency(" + currency.MyName + ")"); * //bool foundReputation = false; * string keyName = SystemResourceManager.prepareStringForMatch(currency.MyName); * if (MyCurrencyList.ContainsKey(keyName)) { * return MyCurrencyList[keyName].MyAmount; * } * * // default return * return 0; * } */ // returns a list of the redistribution of any currency into its group components public static Dictionary <Currency, int> RedistributeCurrency(Currency currency, int currencyAmount) { // create return dictionary Dictionary <Currency, int> returnDictionary = new Dictionary <Currency, int>(); CurrencyGroup currencyGroup = FindCurrencyGroup(currency); if (currencyGroup == null) { returnDictionary.Add(currency, currencyAmount); // base currency was the same as input currency or input currency was not part of group, return it directly return(returnDictionary); } // attemp redistribution Currency baseCurrency = currencyGroup.MyBaseCurrency; // convert incoming currency to the base amount int baseCurrencyAmount = GetConvertedValue(currency, currencyAmount); // create a sorted list of the redistribution of this base currency amount into the higher currencies in the group SortedDictionary <int, Currency> sortList = new SortedDictionary <int, Currency>(); foreach (CurrencyGroupRate currencyGroupRate in currencyGroup.MyCurrencyGroupRates) { sortList.Add(currencyGroupRate.MyBaseMultiple, currencyGroupRate.MyCurrency); } foreach (KeyValuePair <int, Currency> currencyGroupRate in sortList.Reverse()) { int exchangedAmount = 0; if (currencyGroupRate.Key <= baseCurrencyAmount) { // we can add this currency exchangedAmount = (int)Mathf.Floor((float)baseCurrencyAmount / (float)currencyGroupRate.Key); baseCurrencyAmount -= (exchangedAmount * currencyGroupRate.Key); } returnDictionary.Add(currencyGroupRate.Value, exchangedAmount); } returnDictionary.Add(currencyGroup.MyBaseCurrency, baseCurrencyAmount); return(returnDictionary); }