Files
SimUL/Assets/Scripts/UIElements/TimeSliderUI.cs
T
2023-12-11 16:16:18 +02:00

70 lines
1.7 KiB
C#

using System;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
public class TimeSliderUI : MonoBehaviour
{
[SerializeField]
private TextMeshProUGUI _title;
[SerializeField]
private TextMeshProUGUI _description;
[SerializeField]
private Button _btnCancel;
[SerializeField]
private Button _btnOk;
[SerializeField]
private Slider _slider;
private TimeSpan _time;
public void ShowTimeSliderDialog(string title, string description, Action onCancel, Action<TimeSpan> onConfirm)
{
GameManager.Instance.Time.OnFastForwardEnd += CloseDialog;
GameManager.Instance.Pause();
GameManager.Instance.UI.Freeze();
gameObject.SetActive(true);
_title.text = title;
_description.text = description;
_btnCancel.onClick.AddListener(() =>
{
onCancel?.Invoke();
Hide();
CloseDialog();
});
_btnOk.onClick.AddListener(() =>
{
onConfirm?.Invoke(_time);
Hide();
});
SliderValueChanger(_slider.value);
_slider.onValueChanged.AddListener(x=>SliderValueChanger(x));
}
private void CloseDialog()
{
GameManager.Instance.UI.Unfreeze();
Destroy(this);
}
private void SliderValueChanger(float time)
{
if (gameObject.activeSelf)
{
_time = TimeSpan.FromHours(time);
_description.text = $"{_time.Hours} hours";
}
}
private void Hide()
{
_slider.onValueChanged.RemoveListener(x=>SliderValueChanger(x));
gameObject.SetActive(false);
GameManager.Instance.Resume();
}
}