CapersProject/Assets/02.Scripts/Ui/Title/TitleOptions.cs

141 lines
3.6 KiB
C#
Raw Normal View History

2024-11-19 07:57:05 +00:00
using System;
2024-11-11 12:23:27 +00:00
using System.Collections;
using BlueWater;
2024-10-31 12:17:10 +00:00
using BlueWater.Audios;
2024-11-19 07:57:05 +00:00
using BlueWater.Uis;
2024-11-11 12:23:27 +00:00
using TMPro;
2024-10-31 12:17:10 +00:00
using UnityEngine;
2024-11-19 07:57:05 +00:00
using UnityEngine.EventSystems;
2024-11-17 04:29:57 +00:00
using UnityEngine.InputSystem;
2024-10-31 12:17:10 +00:00
using UnityEngine.UI;
2024-11-19 07:57:05 +00:00
public class TitleOptions : PopupUi
2024-10-31 12:17:10 +00:00
{
2024-11-17 04:29:57 +00:00
[SerializeField]
private GameObject _panel;
2024-11-19 07:57:05 +00:00
2024-10-31 12:17:10 +00:00
[SerializeField]
private Slider _masterVolume;
2024-11-19 07:57:05 +00:00
2024-10-31 12:17:10 +00:00
[SerializeField]
private Slider _bgmVolume;
2024-11-19 07:57:05 +00:00
2024-10-31 12:17:10 +00:00
[SerializeField]
private Slider _sfxVolume;
2024-11-11 12:23:27 +00:00
[SerializeField]
private TMP_Dropdown _languageDropdown;
2024-11-19 07:57:05 +00:00
2024-10-31 12:17:10 +00:00
private AudioManager _audioManager;
2024-11-19 07:57:05 +00:00
private InputAction _interactionEAction;
private InputAction _closeOptionsAction;
public Action CloseOptions;
2024-10-31 12:17:10 +00:00
private void Start()
{
2024-11-19 07:57:05 +00:00
_interactionEAction = PlayerInputKeyManager.Instance.GetAction(InputActionMaps.TycoonUi, TycoonUiActions.InteractionE);
_closeOptionsAction = PlayerInputKeyManager.Instance.GetAction(InputActionMaps.TycoonUi, TycoonUiActions.Cancel);
2024-10-31 12:17:10 +00:00
_audioManager = AudioManager.Instance;
2024-11-17 04:29:57 +00:00
var masterVolume = ES3.Load("MasterVolume", 1f);
2024-10-31 12:17:10 +00:00
SetMasterVolume(masterVolume);
2024-11-19 07:57:05 +00:00
2024-11-17 04:29:57 +00:00
var bgmVolume = ES3.Load("BgmVolume", 1f);
2024-10-31 12:17:10 +00:00
SetBgmVolume(bgmVolume);
2024-11-19 07:57:05 +00:00
2024-11-17 04:29:57 +00:00
var sfxVolume = ES3.Load("SfxVolume", 1f);
2024-10-31 12:17:10 +00:00
SetSfxVolume(sfxVolume);
2024-11-11 12:23:27 +00:00
StartCoroutine(nameof(InitializeLanguage));
2024-10-31 12:17:10 +00:00
}
2024-11-19 07:57:05 +00:00
private void OnDestroy()
{
if (_interactionEAction != null)
{
_interactionEAction.performed -= OnInteractionE;
}
if (_closeOptionsAction != null)
{
_closeOptionsAction.performed -= OnCloseOptions;
}
}
public override void Open()
{
PopupUiController.RegisterPopup(this);
_panel.SetActive(true);
IsOpened = true;
}
public override void Close()
{
_panel.SetActive(false);
PopupUiController.UnregisterPopup(this);
IsOpened = false;
}
public override void EnableInput()
{
_interactionEAction.performed += OnInteractionE;
_closeOptionsAction.performed += OnCloseOptions;
}
public override void DisableInput()
{
_interactionEAction.performed -= OnInteractionE;
_closeOptionsAction.performed -= OnCloseOptions;
}
2024-10-31 12:17:10 +00:00
public void SetMasterVolume(float value)
{
_audioManager.SetMasterVolume(value);
_masterVolume.value = value;
ES3.Save("MasterVolume", value);
}
2024-11-19 07:57:05 +00:00
2024-10-31 12:17:10 +00:00
public void SetBgmVolume(float value)
{
_audioManager.SetBgmVolume(value);
_bgmVolume.value = value;
ES3.Save("BgmVolume", value);
}
2024-11-19 07:57:05 +00:00
2024-10-31 12:17:10 +00:00
public void SetSfxVolume(float value)
{
_audioManager.SetSfxVolume(value);
_sfxVolume.value = value;
ES3.Save("SfxVolume", value);
}
2024-11-11 12:23:27 +00:00
private IEnumerator InitializeLanguage()
{
yield return new WaitUntil(() => LocalizationManager.Instance.IsInitialized);
2024-11-19 07:57:05 +00:00
2024-11-11 12:23:27 +00:00
var languageIndex = LocalizationManager.Instance.GetCurrentLocaleIndex();
_languageDropdown.value = languageIndex;
}
public void ChangeLanguage(int localeType)
{
_languageDropdown.value = localeType;
LocalizationManager.Instance.ChangeLocale((LocaleType)localeType);
}
2024-11-19 07:57:05 +00:00
public void OnInteractionE(InputAction.CallbackContext context)
2024-11-17 04:29:57 +00:00
{
2024-11-19 07:57:05 +00:00
var current = EventSystem.current.currentSelectedGameObject;
if (!current) return;
var currenButton = current.GetComponent<Button>();
currenButton.onClick.Invoke();
2024-11-17 04:29:57 +00:00
}
2024-11-19 07:57:05 +00:00
public void OnCloseOptions(InputAction.CallbackContext context)
2024-11-17 04:29:57 +00:00
{
2024-11-19 07:57:05 +00:00
CloseOptions?.Invoke();
2024-11-17 04:29:57 +00:00
}
2024-11-19 07:57:05 +00:00
}