using System; using System.Collections.Generic; using RR.Common.Behaviour.ScriptableObjects; using RR.Common.Managers; using RR.Game2D.Core.Managers; using TMPro; using UnityEngine; using UnityEngine.UI; namespace RR.Common.UI { public class SettingsUIList : MonoBehaviour { public List settingsList = new(); [Header("Настройки")] // Volume [SerializeField] private Slider musicVolumeSlider; [SerializeField] private Slider sfxVolumeSlider; // Payment [SerializeField] private Toggle freeGameToggle; [SerializeField] private Toggle givingPrizesToggle; // Player [SerializeField] private Slider startLivesSlider; [SerializeField] private Slider increasedLivesSlider; [Header("Текст в UI")] // Text [SerializeField] private TextMeshProUGUI volumePercentageText; [SerializeField] private TextMeshProUGUI sfxVolumePercentageText; [SerializeField] private TextMeshProUGUI startLivesCountText; [SerializeField] private TextMeshProUGUI increasedLivesCountText; private SettingsManager settingsManager; private GameSettings currentSettings; private void Awake() { settingsManager = SettingsManager.Instance; if (settingsManager == null) { GameManager.Logger.LogError(name, "SettingsManager is null!"); return; } settingsList.Add(musicVolumeSlider); settingsList.Add(sfxVolumeSlider); settingsList.Add(freeGameToggle); settingsList.Add(givingPrizesToggle); settingsList.Add(startLivesSlider); settingsList.Add(increasedLivesSlider); currentSettings = settingsManager.GetCurrentGameSettings(); AddListeners(); UpdateSettings(currentSettings); } private void OnDestroy() { RemoveListeners(); } public void UpdateSettings(GameSettings newSettings = null) { if (newSettings != null) currentSettings = newSettings; RemoveListeners(); musicVolumeSlider.value = currentSettings.musicVolume; sfxVolumeSlider.value = currentSettings.sfxVolume; freeGameToggle.isOn = currentSettings.isFreeGame; givingPrizesToggle.isOn = currentSettings.isGivingPrizes; startLivesSlider.value = currentSettings.startLivesCount; increasedLivesSlider.value = currentSettings.livesIncreasedByCredits; AddListeners(); } public void SaveSettings() { settingsManager.SaveSettings(); } private void AddListeners() { // Music Volume if (musicVolumeSlider != null) { musicVolumeSlider.onValueChanged.AddListener(settingsManager.SetMusicVolume); musicVolumeSlider.onValueChanged.AddListener(SetMusicVolumePercentage); musicVolumeSlider.onValueChanged.AddListener(GameManager.Instance.Audio.SetMusicVolume); } // SFX Volume if (sfxVolumeSlider != null) { sfxVolumeSlider.onValueChanged.AddListener(settingsManager.SetSfxVolume); sfxVolumeSlider.onValueChanged.AddListener(SetSfxVolumePercentage); sfxVolumeSlider.onValueChanged.AddListener(GameManager.Instance.Audio.SetSfxVolume); } // Free game if (freeGameToggle != null) { freeGameToggle.onValueChanged.AddListener(settingsManager.SetIsFreeGame); } // Giving prizes if (givingPrizesToggle != null) { givingPrizesToggle.onValueChanged.AddListener(settingsManager.SetIsGivingPrizes); } // Start lives if (startLivesSlider != null) { startLivesSlider.onValueChanged.AddListener(value => settingsManager.SetStartLivesCount((int)value)); startLivesSlider.onValueChanged.AddListener(SetStartLivesCountText); } // Increased lives if (increasedLivesSlider != null) { increasedLivesSlider.onValueChanged.AddListener(value => settingsManager.SetLivesIncreasedByCredits((int)value)); increasedLivesSlider.onValueChanged.AddListener(SetIncreasedLivesCountText); } } private void RemoveListeners() { // Music Volume if (musicVolumeSlider != null) { musicVolumeSlider.onValueChanged.RemoveListener(settingsManager.SetMusicVolume); musicVolumeSlider.onValueChanged.AddListener(SetMusicVolumePercentage); } // SFX Volume if (sfxVolumeSlider != null) { sfxVolumeSlider.onValueChanged.RemoveListener(settingsManager.SetSfxVolume); sfxVolumeSlider.onValueChanged.AddListener(SetSfxVolumePercentage); } // Free game if (freeGameToggle != null) { freeGameToggle.onValueChanged.RemoveListener(settingsManager.SetIsFreeGame); } // Giving prizes if (givingPrizesToggle != null) { givingPrizesToggle.onValueChanged.RemoveListener(settingsManager.SetIsGivingPrizes); } // Start lives if (startLivesSlider != null) { startLivesSlider.onValueChanged.RemoveListener(value => settingsManager.SetStartLivesCount((int)value)); startLivesSlider.onValueChanged.AddListener(SetStartLivesCountText); } // Increased lives if (increasedLivesSlider != null) { increasedLivesSlider.onValueChanged.RemoveListener(value => settingsManager.SetLivesIncreasedByCredits((int)value)); increasedLivesSlider.onValueChanged.AddListener(SetIncreasedLivesCountText); } } private void SetMusicVolumePercentage(float value) { if (volumePercentageText == null) return; int volumePercent = Mathf.RoundToInt(value * 100); volumePercentageText.text = $"{volumePercent}%"; } private void SetSfxVolumePercentage(float value) { if (sfxVolumePercentageText == null) return; int sfxVolumePercent = Mathf.RoundToInt(value * 100); sfxVolumePercentageText.text = $"{sfxVolumePercent}%"; } private void SetStartLivesCountText(float value) { if (startLivesCountText == null) return; startLivesCountText.text = $"{(int)value}"; } private void SetIncreasedLivesCountText(float value) { if (increasedLivesCountText == null) return; increasedLivesCountText.text = $"{(int)value}"; } } }