Danro/Assets/Scripts/UI/SettingsUIList.cs

102 lines
4.4 KiB
C#

using System;
using System.Collections.Generic;
using RR.Common.Behaviour.ScriptableObjects;
using RR.Common.Managers;
using RR.Game2D.Core.Managers;
using UnityEngine;
using UnityEngine.UI;
namespace RR.Common.UI
{
public class SettingsUIList : MonoBehaviour
{
public List<Selectable> settingsList = new();
[Header("Настройки")]
// Fullscreen
[SerializeField] private Toggle fullscreenToggle;
// 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;
[SerializeField] private Toggle resetLivesToggle;
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(fullscreenToggle);
settingsList.Add(musicVolumeSlider);
settingsList.Add(sfxVolumeSlider);
settingsList.Add(freeGameToggle);
settingsList.Add(givingPrizesToggle);
settingsList.Add(startLivesSlider);
settingsList.Add(increasedLivesSlider);
settingsList.Add(resetLivesToggle);
currentSettings = settingsManager.GetCurrentGameSettings();
AddListeners();
UpdateSettings(currentSettings);
}
public void UpdateSettings(GameSettings newSettings)
{
if (newSettings != null) currentSettings = newSettings;
RemoveListeners();
fullscreenToggle.isOn = currentSettings.isFullscreen;
musicVolumeSlider.value = currentSettings.musicVolume;
sfxVolumeSlider.value = currentSettings.sfxVolume;
freeGameToggle.isOn = currentSettings.isFreeGame;
givingPrizesToggle.isOn = currentSettings.isGivingPrizes;
startLivesSlider.value = currentSettings.startLivesCount;
increasedLivesSlider.value = currentSettings.livesIncreasedByCredits;
resetLivesToggle.isOn = currentSettings.setLivesToDefaultAfterFirstLose;
AddListeners();
}
private void AddListeners()
{
fullscreenToggle.onValueChanged.AddListener(settingsManager.SetFullscreen);
musicVolumeSlider.onValueChanged.AddListener(settingsManager.SetMusicVolume);
sfxVolumeSlider.onValueChanged.AddListener(settingsManager.SetSfxVolume);
freeGameToggle.onValueChanged.AddListener(settingsManager.SetIsFreeGame);
givingPrizesToggle.onValueChanged.AddListener(settingsManager.SetIsGivingPrizes);
startLivesSlider.onValueChanged.AddListener(value => settingsManager.SetStartLivesCount((int)(value / 10)));
increasedLivesSlider.onValueChanged.AddListener(value => settingsManager.SetLivesIncreasedByCredits((int)(value / 10)));
resetLivesToggle.onValueChanged.AddListener(settingsManager.SetSetLivesToDefaultAfterFirstLose);
}
private void RemoveListeners()
{
fullscreenToggle.onValueChanged.RemoveListener(settingsManager.SetFullscreen);
musicVolumeSlider.onValueChanged.RemoveListener(settingsManager.SetMusicVolume);
sfxVolumeSlider.onValueChanged.RemoveListener(settingsManager.SetSfxVolume);
freeGameToggle.onValueChanged.RemoveListener(settingsManager.SetIsFreeGame);
givingPrizesToggle.onValueChanged.RemoveListener(settingsManager.SetIsGivingPrizes);
startLivesSlider.onValueChanged.RemoveListener(value => settingsManager.SetStartLivesCount((int)(value / 10)));
increasedLivesSlider.onValueChanged.RemoveListener(value => settingsManager.SetLivesIncreasedByCredits((int)(value / 10)));
resetLivesToggle.onValueChanged.RemoveListener(settingsManager.SetSetLivesToDefaultAfterFirstLose);
}
}
}