CapersProject/Assets/02.Scripts/Ui/Tycoon/TutorialPageToggle.cs
2024-12-16 21:06:42 +09:00

133 lines
4.0 KiB
C#

using System;
using System.Collections;
using BlueWater.Utility;
using DG.Tweening;
using Sirenix.OdinInspector;
using TMPro;
using UnityEngine;
using UnityEngine.Localization;
using UnityEngine.Localization.Settings;
using UnityEngine.ResourceManagement.AsyncOperations;
using UnityEngine.UI;
namespace BlueWater
{
public class TutorialPageToggle : MonoBehaviour
{
[SerializeField]
private Toggle _toggle;
[SerializeField]
private Image _toggleImage;
[SerializeField]
private TMP_Text _buttonText;
[SerializeField]
private Sprite _selectToggleSprite;
[SerializeField]
private Sprite _deselectToggleSprite;
[Title("연출")]
[SerializeField]
private Vector2 _buttonImageScale = new(1f, 1.3f);
[SerializeField]
private Vector2 _buttonTextPositionY = new(0f, 10f);
[SerializeField]
private float _duration = 0.2f;
private TutorialInfo _tutorialInfo;
private Coroutine _changedLocaleInstance;
private Sequence _selectSequence;
private Sequence _deselectSequence;
public Action<bool> OnToggleEvent;
private void Awake()
{
LocalizationSettings.SelectedLocaleChanged += OnChangedLocale;
}
private void OnDestroy()
{
LocalizationSettings.SelectedLocaleChanged -= OnChangedLocale;
_selectSequence.Kill();
_deselectSequence.Kill();
OnToggleEvent = null;
}
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)
{
_buttonText.text = Utils.GetLocalizedString(_tutorialInfo.TitleTextIdx);
}
}
public void Initialize(TutorialInfo tutorialInfo)
{
_tutorialInfo = tutorialInfo;
gameObject.name = $"{_tutorialInfo.TutorialName}Toggle";
_buttonText.text = Utils.GetLocalizedString(_tutorialInfo.TitleTextIdx);
_selectSequence = DOTween.Sequence()
.Append(_toggleImage.transform.DOScaleY(_buttonImageScale.y, _duration).From(_buttonImageScale.x))
.Join(_buttonText.transform.DOLocalMoveY(_buttonTextPositionY.y, _duration).From(_buttonTextPositionY.x))
.SetEase(Ease.Linear)
.SetUpdate(true)
.SetAutoKill(false)
.Pause();
_deselectSequence = DOTween.Sequence()
.Append(_toggleImage.transform.DOScaleY(_buttonImageScale.x, _duration).From(_buttonImageScale.y))
.Join(_buttonText.transform.DOLocalMoveY(_buttonTextPositionY.x, _duration).From(_buttonTextPositionY.x))
.SetEase(Ease.Linear)
.SetUpdate(true)
.SetAutoKill(false)
.Pause();
}
public void OnToggle(bool isOn)
{
if (_toggle.isOn)
{
_toggle.interactable = false;
return;
}
_toggle.interactable = true;
if (isOn)
{
_toggleImage.sprite = _selectToggleSprite;
_deselectSequence?.Pause();
_selectSequence.Restart();
}
else
{
_toggleImage.sprite = _deselectToggleSprite;
_selectSequence?.Pause();
_deselectSequence.Restart();
}
OnToggleEvent?.Invoke(isOn);
}
}
}