using System; using System.Collections; using BlueWater.Items; using BlueWater.Utility; using TMPro; using UnityEngine; using UnityEngine.Localization; using UnityEngine.Localization.Settings; using UnityEngine.ResourceManagement.AsyncOperations; using UnityEngine.UI; namespace BlueWater.Uis { public class CraftingIngredient : MonoBehaviour { [SerializeField] private GameObject _connectionLine; [SerializeField] private Image _liquidImage; [SerializeField] private Image _liquidTypeImage; [SerializeField] private TMP_Text _liquidText; [SerializeField] private TMP_Text _ratioText; [SerializeField] private Sprite _liquidTypeSprite; [SerializeField] private Sprite _garnishTypeSprite; private Coroutine _changedLocaleInstance; private LiquidData _liquidData; private void Start() { LocalizationSettings.SelectedLocaleChanged += OnChangedLocale; } private void OnDestroy() { LocalizationSettings.SelectedLocaleChanged -= OnChangedLocale; } private void OnChangedLocale(Locale locale) { if (!gameObject.activeInHierarchy) return; Utils.StartUniqueCoroutine(this, ref _changedLocaleInstance, ChangeLocaleCoroutine(locale)); StartCoroutine(ChangeLocaleCoroutine(locale)); } private IEnumerator ChangeLocaleCoroutine(Locale locale) { var loadingOperation = Utils.GetTableAsync(); yield return loadingOperation; if (loadingOperation.Status == AsyncOperationStatus.Succeeded) { _liquidText.text = Utils.GetLocalizedString(_liquidData.Idx); } } public void Initialize(CocktailIngredient cocktailIngredient, int index) { _connectionLine.SetActive(index != 0); _liquidData = ItemManager.Instance.LiquidDataSo.GetDataByIdx(cocktailIngredient.Idx); _liquidImage.sprite = _liquidData.Sprite; Sprite liquidTypeSprite = null; if (_liquidData.Type == LiquidType.Liquid) { liquidTypeSprite = _liquidTypeSprite; } else if (_liquidData.Type == LiquidType.Garnish) { liquidTypeSprite = _garnishTypeSprite; } _liquidTypeImage.sprite = liquidTypeSprite; _liquidText.text = Utils.GetLocalizedString(_liquidData.Idx); _ratioText.text = $"{cocktailIngredient.Ratio}%"; } public void Show() => gameObject.SetActive(true); public void Hide() => gameObject.SetActive(false); } }