using UnityEngine;
using UnityEngine.Purchasing;
using System.Collections.Generic;
using static UnityEditor.Purchasing.UnityPurchasingEditor;
namespace UnityEditor.Purchasing
{
///
/// Customer Editor class for the IAPButton. This class handle how the IAPButton should represent itself in the UnityEditor.
///
[CustomEditor(typeof(IAPButton))]
[CanEditMultipleObjects]
public class IAPButtonEditor : Editor
{
private static readonly string[] excludedFields = new string[] { "m_Script" };
private static readonly string[] restoreButtonExcludedFields = new string[] { "m_Script", "consumePurchase", "onPurchaseComplete", "onPurchaseFailed", "titleText", "descriptionText", "priceText" };
private const string kNoProduct = "";
private List m_ValidIDs = new List();
private SerializedProperty m_ProductIDProperty;
///
/// Event trigger when IAPButton is enabled in the scene.
///
public void OnEnable()
{
m_ProductIDProperty = serializedObject.FindProperty("productId");
}
///
/// Event trigger when trying to draw the IAPButton in the inspector.
///
public override void OnInspectorGUI()
{
IAPButton button = (IAPButton)target;
serializedObject.Update();
if (button.buttonType == IAPButton.ButtonType.Purchase)
{
EditorGUILayout.LabelField(new GUIContent("Product ID:", "Select a product from the IAP catalog."));
var catalog = ProductCatalog.LoadDefaultCatalog();
m_ValidIDs.Clear();
m_ValidIDs.Add(kNoProduct);
foreach (var product in catalog.allProducts)
{
m_ValidIDs.Add(product.id);
}
int currentIndex = string.IsNullOrEmpty(button.productId) ? 0 : m_ValidIDs.IndexOf(button.productId);
int newIndex = EditorGUILayout.Popup(currentIndex, m_ValidIDs.ToArray());
if (newIndex > 0 && newIndex < m_ValidIDs.Count)
{
m_ProductIDProperty.stringValue = m_ValidIDs[newIndex];
}
else
{
m_ProductIDProperty.stringValue = string.Empty;
}
if (GUILayout.Button("IAP Catalog..."))
{
ProductCatalogEditor.ShowWindow();
}
}
DrawPropertiesExcluding(serializedObject, button.buttonType == IAPButton.ButtonType.Restore ? restoreButtonExcludedFields : excludedFields);
serializedObject.ApplyModifiedProperties();
}
}
}