Currency conversions
Currencies can be converted from one currency type to another. This can be useful for converting 1 gold to 100 silver, gems to gold, etc.
Conversion table
The conversion table defines how currencies can be converted between each other.
using System;
using System.Collections.Generic;
using Devdog.InventoryPlus.Currencies;
// Define currencies
var gold = new Currency(Guid.NewGuid(), "Gold", "GOLD", 2, double.MaxValue);
var silver = new Currency(Guid.NewGuid(), "Silver", "SILVER", 5, double.MaxValue);
var copper = new Currency(Guid.NewGuid(), "Copper", "COPPER", 5, double.MaxValue);
var diamonds = new Currency(Guid.NewGuid(), "Diamonds", "DIAMONDS", 0, double.MaxValue);
var guildCredits = new Currency(Guid.NewGuid(), "Guild Credits", "GUILD", 0, double.MaxValue);
// Define conversions between currencies
gold.conversionTable = new ConversionTable<ICurrency, double>(new Dictionary<ICurrency, ConversionTable<ICurrency, double>.Row>()
{
{diamonds, new ConversionTable<ICurrency, double>.Row(0.01d)},
{silver, new ConversionTable<ICurrency, double>.Row(100d)},
});
silver.conversionTable = new ConversionTable<ICurrency, double>(new Dictionary<ICurrency, ConversionTable<ICurrency, double>.Row>()
{
{gold, new ConversionTable<ICurrency, double>.Row(0.01d)},
{copper, new ConversionTable<ICurrency, double>.Row(100d)},
});
copper.conversionTable = new ConversionTable<ICurrency, double>(new Dictionary<ICurrency, ConversionTable<ICurrency, double>.Row>()
{
{silver, new ConversionTable<ICurrency, double>.Row(0.01d)},
{guildCredits, new ConversionTable<ICurrency, double>.Row(2d)},
});
// Create a converter object
var converter = new CurrencyDoubleConverter();
// Convert 3 gold into silver.
var result = converter.Convert(gold, 3, silver);
// Get all possible conversions from gold into other currencies.
var conversionsTable = converter.GetAllConversions(gold);
// Assert.AreEqual(5, conversionsTable.Count);
// Assert.AreEqual(0.01d, conversionsTable[diamonds].conversionRate);
// Assert.AreEqual(1.0d, conversionsTable[gold].conversionRate);
// Assert.AreEqual(100d, conversionsTable[silver].conversionRate);
// Assert.AreEqual(10000d, conversionsTable[copper].conversionRate);
// Assert.AreEqual(20000d, conversionsTable[guildCredits].conversionRate);