108 lines
2.9 KiB
C#
108 lines
2.9 KiB
C#
using System.Linq;
|
|
using UnityEngine;
|
|
|
|
namespace Watermelon
|
|
{
|
|
[CreateAssetMenu(fileName = "Currency Preview Settings", menuName = "Data/Currency/Preview Settings")]
|
|
public class CurrencyRewardPreviewSettings : ScriptableObject
|
|
{
|
|
public const int DEFAULT_SORING_ORDER = 10;
|
|
|
|
[SerializeField] Sprite previewSprite;
|
|
|
|
[InlineButton("Sort", "SortOverrides")]
|
|
[SerializeField] PreviewOverride[] overrides;
|
|
|
|
private Sprite defaultPreviewSprite;
|
|
private Currency currency;
|
|
|
|
public void Init(Currency currency)
|
|
{
|
|
this.currency = currency;
|
|
|
|
defaultPreviewSprite = previewSprite;
|
|
if (defaultPreviewSprite == null)
|
|
defaultPreviewSprite = currency.Icon;
|
|
}
|
|
|
|
public Preview GetPreview(CurrencyAmount currencyAmount)
|
|
{
|
|
Sprite sprite = GetOverrideSprite(currencyAmount.Amount);
|
|
|
|
return new Preview(sprite, $"{CurrencyHelper.Format(currencyAmount.Amount)}");
|
|
}
|
|
|
|
private Sprite GetOverrideSprite(int amount)
|
|
{
|
|
if (!overrides.IsNullOrEmpty())
|
|
{
|
|
for (int i = 0; i < overrides.Length; i++)
|
|
{
|
|
if (amount < overrides[i].MaxAmount)
|
|
{
|
|
return overrides[i].Sprite;
|
|
}
|
|
}
|
|
|
|
return overrides[^1].Sprite;
|
|
}
|
|
|
|
return defaultPreviewSprite;
|
|
}
|
|
|
|
private void SortOverrides()
|
|
{
|
|
PreviewOverride[] orderArray = overrides.OrderBy(x => x.MaxAmount).ToArray();
|
|
for(int i = 0; i < orderArray.Length; i++)
|
|
{
|
|
if (overrides[i].MaxAmount != orderArray[i].MaxAmount)
|
|
{
|
|
GUI.FocusControl(null);
|
|
|
|
RuntimeEditorUtils.Undo(this, "Array sorting");
|
|
|
|
overrides = orderArray;
|
|
|
|
RuntimeEditorUtils.SetDirty(this);
|
|
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
|
|
[System.Serializable]
|
|
public class PreviewOverride
|
|
{
|
|
[SerializeField] int maxAmount;
|
|
public int MaxAmount => maxAmount;
|
|
|
|
[SerializeField] Sprite sprite;
|
|
public Sprite Sprite => sprite;
|
|
}
|
|
|
|
public class Preview : IRewardPreview
|
|
{
|
|
private Sprite icon;
|
|
public Sprite Icon => icon;
|
|
|
|
private string text;
|
|
public string Text => text;
|
|
|
|
public int SortingOrder => DEFAULT_SORING_ORDER;
|
|
|
|
public Preview(Sprite icon, string text)
|
|
{
|
|
this.icon = icon;
|
|
this.text = text;
|
|
}
|
|
|
|
public void OnBehaviorInitialized(UIRewardPreviewItem uiBehavior)
|
|
{
|
|
|
|
}
|
|
|
|
public GameObject GetCustomUIPrefab() => null;
|
|
}
|
|
}
|
|
}
|