using System;
using System.Collections;
using System.Collections.Generic;
using System.Threading;
using UnityEngine;
using UnityEngine.UI;
using Facebook.Unity;
public class PurchasePage : MonoBehaviour {
[SerializeField]
private Button _loadProductsBtn;
[SerializeField]
private Button _loadPurchasesBtn;
[SerializeField]
private GameObject _productRowPrefab;
[SerializeField]
private Transform _productScrollTransform;
[SerializeField]
private GameObject _purchaseRowPrefab;
[SerializeField]
private Transform _purchaseScrollTransform;
private LogScroller _logScroller;
private IList<Product> _products = new List<Product>();
private void Awake () {
_logScroller = transform.root.GetComponent<UIState>().logScroller;
}
public void CheckReady () {
LogText("Checking Ready");
FBGamingServices.OnIAPReady(delegate(IIAPReadyResult result) {
if (result.Error == null && result.ResultDictionary != null) {
_loadProductsBtn.interactable = true;
_loadPurchasesBtn.interactable = true;
LogText("IAP Ready");
} else {
LogText("ERR: IAP not ready" + result.Error.ToString());
}
});
}
public void ConsumePurchase (Purchase purchase, Action<bool> callback) {
LogText("Consuming " + purchase.PurchaseToken + " : " + purchase.ProductID);
callback(true);
FBGamingServices.ConsumePurchase(purchase.PurchaseToken, delegate (IConsumePurchaseResult result) {
if (result.Error == null && result.ResultDictionary != null) {
LogText("Consumed purchase " + purchase.PurchaseToken + " : " + purchase.ProductID);
callback(true);
} else {
LogText(string.Format("ERR: Failed to consume purchase {0} : {1}\n{2}", purchase.PurchaseToken, purchase.ProductID, result.Error.ToString()));
callback(false);
}
});
}
public void LoadProducts () {
LogText("Loading Products");
foreach (Transform child in _productScrollTransform) {
Destroy(child.gameObject);
}
FBGamingServices.GetCatalog(delegate (ICatalogResult result) {
if (result.Error == null && result.ResultDictionary != null) {
_products = result.Products; // nullable?
LogText(string.Format("Got {0} products", result.Products.Count));
foreach (Product product in _products) {
GameObject productRow = Instantiate(_productRowPrefab, _productScrollTransform);
productRow.GetComponent<ProductRowPrefab>().Initialize(this, _logScroller, product);
}
} else {
LogText(string.Format("ERR: Failed to get products\n{0}", result.Error));
}
});
}
public void LoadPurchases () {
LogText("Loading Purchases");
foreach (Transform child in _purchaseScrollTransform) {
Destroy(child.gameObject);
}
FBGamingServices.GetPurchases(delegate (IPurchasesResult result) {
if (result.Error == null && result.ResultDictionary != null) {
LogText(string.Format("Got {0} purchases", result.Purchases.Count));
foreach (Purchase purchase in result.Purchases) {
AddPurchase(purchase, false);
}
} else {
LogText("ERR: Failed to get purchases\n" + result.Error);
}
});
}
public void MakePurchase (Product product) {
LogText("Purchasing " + product.ProductID);
FBGamingServices.Purchase(product.ProductID, delegate (IPurchaseResult result) {
if (result.Error == null && result.ResultDictionary != null) {
// ConsumePurchase(result.Purchase);
LogText(string.Format("Purchased {0} | {1}", result.Purchase.ProductID, result.Purchase.PurchaseToken));
AddPurchase(result.Purchase, true);
} else if (result.Cancelled) {
LogText("Cancelled purchase");
} else {
LogText(string.Format("ERR: Failed to purchase {0}\n{1}", product.ProductID, result.Error.ToString()));
}
});
}
public void ToggleShowConsumedClicked (bool show) {
foreach (Transform child in _purchaseScrollTransform) {
child.gameObject.SetActive(show);
}
}
// private
private void AddPurchase (Purchase purchase, bool setToTop) {
GameObject purchaseRow = Instantiate(_purchaseRowPrefab, _purchaseScrollTransform);
purchaseRow.GetComponent<PurchaseRowPrefab>().Initialize(this, _logScroller, purchase);
if (setToTop) {
purchaseRow.transform.SetSiblingIndex(0);
}
}
private void LogText (string text) {
_logScroller.Log(text);
}
}