//-------------------------------------------------------------------------------------------------- //-------------------------------------------------------------------------------------------------- // Private methods //-------------------------------------------------------------------------------------------------- //-------------------------------------------------------------------------------------------------- static float GetOneGoldCoinPrice(InAppProduct product, FundSettingsManager fundSettingsManager) { float productPrice = GetProductPrice(product); int goldCoinsCount = GetGoldCoinsCount(product, fundSettingsManager); return(productPrice / goldCoinsCount); }
//-------------------------------------------------------------------------------------------------- //-------------------------------------------------------------------------------------------------- // Return the product sale relative to the base product. // return number < 0 if getting product sale fails public static int GetProductSaleInPercent(string productId, string baseProductId, InAppInventory productsInventory, FundSettingsManager fundSettingsManager) { // method failed return code const int failed = -1; InAppProduct product = productsInventory.Product(productId); InAppProduct baseProduct = productsInventory.Product(baseProductId); if (baseProduct == null) { Debug.LogWarning("ProductsSalesProvider -> GetProductSaleInPercent: BaseProduct with id " + baseProductId + " is not contained in the inventory. Product sale cannot be computed."); return(failed); } if (product == null) { return(failed); } float baseProductCoinPrice = GetOneGoldCoinPrice(baseProduct, fundSettingsManager); float productCoinPrice = GetOneGoldCoinPrice(product, fundSettingsManager); float productSale = (baseProductCoinPrice / productCoinPrice) - 1; int productSaleInPercent = (int)Math.Round(productSale * 100); return(productSaleInPercent); }
// -------- static FundSettingsManager GetInstance() { if (s_Instance == null) { s_Instance = ScriptableObject.CreateInstance <FundSettingsManager>(); s_Instance.Init("_Settings/_FundSettings"); ScriptableObject.DontDestroyOnLoad(s_Instance); } return(s_Instance); }
//-------------------------------------------------------------------------------------------------- //-------------------------------------------------------------------------------------------------- // return number < 0 if fails static int GetGoldCoinsCount(InAppProduct product, FundSettingsManager fundSettingsManager) { // method failed return code const int failed = -1; try { int fundGUID = GetFundGUID(product.ProductId); FundSettings fund = fundSettingsManager.FindByGUID(fundGUID); return(fund.AddGold); } catch { return(failed); } }
//-------------------------------------------------------------------------------------------------- //-------------------------------------------------------------------------------------------------- // Return the product sale relative to the cheapest product in the shop funds. // return number < 0 if getting product sale fails public static int GetProductSaleInPercent(string productId, List <ShopItemId> shopFunds, InAppInventory productsInventory, FundSettingsManager fundSettingsManager) { // method failed return code const int failed = -1; string cheapestProductId = GetCheapestProductId(shopFunds, productsInventory, fundSettingsManager); if (cheapestProductId != null) { return(GetProductSaleInPercent(productId, cheapestProductId, productsInventory, fundSettingsManager)); } else { return(failed); } }
//-------------------------------------------------------------------------------------------------- //-------------------------------------------------------------------------------------------------- // return null if fails static string GetProductId(ShopItemId shopItem, FundSettingsManager fundSettingsManager) { return(fundSettingsManager.Get((E_FundID)(shopItem.Id)).GUID.ToString()); }
//-------------------------------------------------------------------------------------------------- //-------------------------------------------------------------------------------------------------- // return number < 0 if fails static float GetProductPriceForFund(ShopItemId shopFund, InAppInventory productsInventory, FundSettingsManager fundSettingsManager) { // method failed return code const float failed = -1; string productId = GetProductId(shopFund, fundSettingsManager); if (productId == null) { return(failed); } InAppProduct product = productsInventory.Product(productId); if (product == null) { return(failed); } return(GetProductPrice(product)); }
//-------------------------------------------------------------------------------------------------- //-------------------------------------------------------------------------------------------------- // return null if fails static string GetCheapestProductId(List <ShopItemId> shopFunds, InAppInventory productsInventory, FundSettingsManager fundSettingsManager) { string cheapestProductId = null; float cheapestProductPrice = float.MaxValue; foreach (ShopItemId shopFund in shopFunds) { float productPrice = GetProductPriceForFund(shopFund, productsInventory, fundSettingsManager); if (productPrice >= 0 && productPrice < cheapestProductPrice) { cheapestProductId = GetProductId(shopFund, fundSettingsManager); cheapestProductPrice = productPrice; } } return(cheapestProductId); }