207 lines
7.3 KiB
C#
207 lines
7.3 KiB
C#
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<Selectable> 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}";
|
|
}
|
|
}
|
|
} |