2025-05-01 01:48:08 -07:00

355 lines
14 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Localization.Settings;
using TMPro;
public class SettingsMenu : MonoBehaviour
{
GameManager gm;
public PauseMenuMove pauseMenuMove;
public ScrollRect scrollRect;
// Video
public LinearRangeSlider gridOpacitySlider;
public LinearRangeSlider shakeStrengthSlider;
//public Toggle screenShakeToggle;
public Toggle lockDelayDisplayToggle;
public Toggle previewSpaceToggle;
public Toggle fullScreenToggle;
public TMP_Dropdown languageDropdown;
float gridOpacity = 0f;
float shakeStrength = 1f;
//bool screenShakeEnabled = true;
bool lockDelayDisplayEnabled = true;
bool previewSpaceEnabled = false;
bool fullScreenEnabled = true;
int languageIndex = 0;
// Audio
public Slider masterVolumeSlider;
public Slider musicVolumeSlider;
public Slider soundVolumeSlider;
float masterVolume = 0.5f; //Max 0.5
float musicVolume = 0.25f; //Max 0.5
float soundVolume = 0.5f; //Max 1
// Handling
public LinearRangeSlider autoRepeatRateSlider;
public LinearRangeSlider delayedAutoShiftSlider;
public LinearRangeSlider dasCutDelaySlider;
public LinearRangeSlider softDropFactorSlider;
public LinearRangeSlider lineClearPreventMinesweepDelaySlider;
public Toggle lineClearDelayToggle;
float autoRepeatRateDefault = 50;
float delayedAutoShiftDefault = 250;
float dasCutDelayDefault = 17;
float softDropFactorDefault = 12;
float lineClearPreventMinesweepDelayDefault = 50;
float autoRepeatRate = 50;
float delayedAutoShift = 250;
float dasCutDelay = 17;
float softDropFactor = 12;
float lineClearPreventMinesweepDelay = 50;
bool lineClearDelayEnabled = true;
void OnEnable()
{
InputManager.Instance.fullScreenTogglePress.started += _ => FullScreenToggleHotkey();
}
void OnDisable()
{
InputManager.Instance.fullScreenTogglePress.started -= _ => FullScreenToggleHotkey();
}
private void Awake()
{
masterVolume = PlayerPrefs.GetFloat("MasterVolume", masterVolume);
musicVolume = PlayerPrefs.GetFloat("MusicVolume", musicVolume);
soundVolume = PlayerPrefs.GetFloat("SoundVolume", soundVolume);
//screenShakeEnabled = (PlayerPrefs.GetInt("ScreenShakeEnabled", 1) != 0);
gridOpacity = PlayerPrefs.GetFloat("GridOpacity", gridOpacity);
shakeStrength = PlayerPrefs.GetFloat("ShakeStrength", shakeStrength);
lockDelayDisplayEnabled = (PlayerPrefs.GetInt("LockDelayDisplayEnabled", 0) != 0);
previewSpaceEnabled = (PlayerPrefs.GetInt("PreviewSpaceAboveBoardEnabled", 0) != 0);
fullScreenEnabled = (PlayerPrefs.GetInt("FullScreenEnabled", 1) != 0);
#if !UNITY_WEBGL
Screen.fullScreen = fullScreenEnabled;
#endif
#if !UNITY_EDITOR && UNITY_WEBGL
scrollRect.scrollSensitivity *= 0.01f;
#endif
//languageIndex = PlayerPrefs.GetInt("LanguageIndex", 1);
languageIndex = LocalizationSettings.AvailableLocales.Locales.IndexOf(LocalizationSettings.SelectedLocale);
//controlScheme = PlayerPrefs.GetInt("ControlScheme", 0);
//abTest = PlayerPrefs.GetInt("ABTest", 0);
autoRepeatRate = PlayerPrefs.GetFloat("AutoRepeatRate", autoRepeatRateDefault);
delayedAutoShift = PlayerPrefs.GetFloat("DelayedAutoShift", delayedAutoShiftDefault);
dasCutDelay = PlayerPrefs.GetFloat("DASCutDelay", dasCutDelayDefault);
softDropFactor = PlayerPrefs.GetFloat("SoftDropFactor", softDropFactorDefault);
lineClearPreventMinesweepDelay = PlayerPrefs.GetFloat("LineClearPreventMinesweepDelay", lineClearPreventMinesweepDelay);
lineClearDelayEnabled = (PlayerPrefs.GetInt("LineClearDelayEnabled", 1) != 0);
}
// Start is called before the first frame update
void Start()
{
gm = GameObject.FindGameObjectWithTag("GameController").GetComponent<GameManager>();
//if (ScoreKeeper.masterVolume != null)
//masterVolume = ScoreKeeper.masterVolume;
// Audio
masterVolumeSlider.value = masterVolume;
masterVolumeSlider.onValueChanged.AddListener(delegate { MasterVolumeSlider(); });
musicVolumeSlider.value = musicVolume;
musicVolumeSlider.onValueChanged.AddListener(delegate { MusicVolumeSlider(); });
soundVolumeSlider.value = soundVolume;
soundVolumeSlider.onValueChanged.AddListener(delegate { SoundVolumeSlider(); });
// Vidoe
gridOpacitySlider.SetAdjustedValue(gridOpacity);
gridOpacitySlider.slider.onValueChanged.AddListener(delegate { GridOpacitySlider(); });
shakeStrengthSlider.SetAdjustedValue(shakeStrength);
shakeStrengthSlider.slider.onValueChanged.AddListener(delegate { ShakeStrengthSlider(); });
/*screenShakeToggle.isOn = !screenShakeEnabled;
screenShakeToggle.onValueChanged.AddListener(delegate { ScreenShakeToggle(); });*/
lockDelayDisplayToggle.isOn = lockDelayDisplayEnabled;
lockDelayDisplayToggle.onValueChanged.AddListener(delegate { LockDelayDisplayToggle(); });
previewSpaceToggle.isOn = previewSpaceEnabled;
previewSpaceToggle.onValueChanged.AddListener(delegate { PreviewSpaceToggle(); }); //fullScreenToggle
fullScreenToggle.isOn = fullScreenEnabled;
fullScreenToggle.onValueChanged.AddListener(delegate { FullScreenToggle(); }); //fullScreenToggle
languageDropdown.value = languageIndex;
languageDropdown.onValueChanged.AddListener(delegate { LanguageSelectDropdown(); });
//StartCoroutine(SetLocale(languageIndex));
// Handling
autoRepeatRateSlider.SetAdjustedValue(autoRepeatRate);
autoRepeatRateSlider.slider.onValueChanged.AddListener(delegate { AutoRepeatRateSlider(); });
delayedAutoShiftSlider.SetAdjustedValue(delayedAutoShift);
delayedAutoShiftSlider.slider.onValueChanged.AddListener(delegate { DelayedAutoShiftSlider(); });
dasCutDelaySlider.SetAdjustedValue(dasCutDelay);
dasCutDelaySlider.slider.onValueChanged.AddListener(delegate { DASCutDelaySlider(); });
softDropFactorSlider.slider.value = softDropFactor;
softDropFactorSlider.slider.onValueChanged.AddListener(delegate { SoftDropFactorSlider(); });
lineClearPreventMinesweepDelaySlider.SetAdjustedValue(lineClearPreventMinesweepDelay);
lineClearPreventMinesweepDelaySlider.slider.onValueChanged.AddListener(delegate { LineClearPreventMinesweepDelaySlider(); });
lineClearDelayToggle.isOn = lineClearDelayEnabled;
lineClearDelayToggle.onValueChanged.AddListener(delegate { LineClearDelayToggle(); });
//lineClearPreventMinesweepDelay
}
// Update is called once per frame
/*void Update()
{
if (masterVolumeSlider != null)
{
masterVolumeSlider.value = masterVolume;
if (pauseMenuMove.GetIsActive())
masterVolumeSlider.interactable = true;
else
masterVolumeSlider.interactable = false;
}
if (musicVolumeSlider != null)
{
musicVolumeSlider.value = musicVolume;
if (pauseMenuMove.GetIsActive())
musicVolumeSlider.interactable = true;
else
musicVolumeSlider.interactable = false;
}
if (soundVolumeSlider != null)
{
soundVolumeSlider.value = soundVolume;
if (pauseMenuMove.GetIsActive())
soundVolumeSlider.interactable = true;
else
soundVolumeSlider.interactable = false;
}
if (screenShakeToggle != null)
{
screenShakeToggle.isOn = !screenShakeEnabled;
if (pauseMenuMove.GetIsActive())
screenShakeToggle.interactable = true;
else
screenShakeToggle.interactable = false;
}
if (lockDelayDisplayToggle != null)
{
lockDelayDisplayToggle.isOn = lockDelayDisplayEnabled;
if (pauseMenuMove.GetIsActive())
lockDelayDisplayToggle.interactable = true;
else
lockDelayDisplayToggle.interactable = false;
}
if (languageDropdown != null)
{
languageDropdown.value = languageIndex;
if (pauseMenuMove.GetIsActive())
languageDropdown.interactable = true;
else
languageDropdown.interactable = false;
}
}*/
public void MasterVolumeSlider() // Sets the Master Volume Slider from PlayerPrefs
{
masterVolume = masterVolumeSlider.value;
PlayerPrefs.SetFloat("MasterVolume", masterVolume);
//ScoreKeeper.masterVolume = masterVolume;
}
public void MusicVolumeSlider() // Sets the Music Volume Slider from PlayerPrefs
{
musicVolume = musicVolumeSlider.value;
PlayerPrefs.SetFloat("MusicVolume", musicVolume);
}
public void SoundVolumeSlider() // Sets the SFX Volume Slider from PlayerPrefs
{
soundVolume = soundVolumeSlider.value;
PlayerPrefs.SetFloat("SoundVolume", soundVolume);
}
public void GridOpacitySlider() // Sets the Master Volume Slider from PlayerPrefs
{
gridOpacity = gridOpacitySlider.GetAdjustedValue();
PlayerPrefs.SetFloat("GridOpacity", gridOpacity);
gm.SetGridOpacity();
}
public void ShakeStrengthSlider() // Sets the Master Volume Slider from PlayerPrefs
{
shakeStrength = shakeStrengthSlider.GetAdjustedValue();
PlayerPrefs.SetFloat("ShakeStrength", shakeStrength);
}
/*public void ScreenShakeToggle() // Sets the Screen Shake from PlayerPrefs
{
screenShakeEnabled = !screenShakeToggle.isOn;
PlayerPrefs.SetInt("ScreenShakeEnabled", (screenShakeEnabled ? 1 : 0));
}*/
public void LockDelayDisplayToggle() // Sets the Lock Delay Display from PlayerPrefs
{
lockDelayDisplayEnabled = lockDelayDisplayToggle.isOn;
PlayerPrefs.SetInt("LockDelayDisplayEnabled", (lockDelayDisplayEnabled ? 1 : 0));
}
public void PreviewSpaceToggle()
{
previewSpaceEnabled = previewSpaceToggle.isOn;
PlayerPrefs.SetInt("PreviewSpaceAboveBoardEnabled", (previewSpaceEnabled ? 1 : 0));
gm.SetCameraScale(false);
}
public void FullScreenToggle()
{
fullScreenEnabled = fullScreenToggle.isOn;
PlayerPrefs.SetInt("FullScreenEnabled", (fullScreenEnabled ? 1 : 0));
Screen.fullScreen = fullScreenEnabled;
}
public void FullScreenToggleHotkey()
{
fullScreenEnabled = !fullScreenEnabled;
Screen.fullScreen = fullScreenEnabled;
fullScreenToggle.isOn = fullScreenEnabled;
PlayerPrefs.SetInt("FullScreenEnabled", (fullScreenEnabled ? 1 : 0));
}
public void LanguageSelectDropdown()
{
languageIndex = languageDropdown.value;
//PlayerPrefs.SetInt("LanguageIndex", languageIndex);
StartCoroutine(SetLocale(languageIndex));
}
IEnumerator SetLocale(int _localeID)
{
//Debug.Log("_localeID " + _localeID);
yield return LocalizationSettings.InitializationOperation;
LocalizationSettings.SelectedLocale = LocalizationSettings.AvailableLocales.Locales[_localeID];
}
public void HoverMusicEnter()
{
gm.soundManager.EnablePauseFilter();
}
public void HoverMusicExit()
{
gm.soundManager.DisablePauseFilter();
}
public void AutoRepeatRateSlider()
{
autoRepeatRate = autoRepeatRateSlider.GetAdjustedValue();
PlayerPrefs.SetFloat("AutoRepeatRate", autoRepeatRate);
gm.tetrominoSpawner.currentTetromino.GetComponent<Group>().UpdateInputValues();
}
public void DelayedAutoShiftSlider()
{
delayedAutoShift = delayedAutoShiftSlider.GetAdjustedValue();
PlayerPrefs.SetFloat("DelayedAutoShift", delayedAutoShift);
gm.tetrominoSpawner.currentTetromino.GetComponent<Group>().UpdateInputValues();
}
public void DASCutDelaySlider()
{
dasCutDelay = dasCutDelaySlider.GetAdjustedValue();
PlayerPrefs.SetFloat("DASCutDelay", dasCutDelay);
gm.tetrominoSpawner.currentTetromino.GetComponent<Group>().UpdateInputValues();
}
public void SoftDropFactorSlider()
{
softDropFactor = softDropFactorSlider.GetAdjustedValue();
PlayerPrefs.SetFloat("SoftDropFactor", softDropFactor);
gm.tetrominoSpawner.currentTetromino.GetComponent<Group>().UpdateInputValues();
}
public void LineClearPreventMinesweepDelaySlider()
{
lineClearPreventMinesweepDelay = lineClearPreventMinesweepDelaySlider.GetAdjustedValue();
PlayerPrefs.SetFloat("LineClearPreventMinesweepDelay", lineClearPreventMinesweepDelay);
}
public void LineClearDelayToggle()
{
lineClearDelayEnabled = lineClearDelayToggle.isOn;
PlayerPrefs.SetInt("LineClearDelayEnabled", (lineClearDelayEnabled ? 1 : 0));
}
public void ResetDefaultsHandling()
{
/*float autoRepeatRate = 50;
float delayedAutoShift = 250;
float dasCutDelay = 17;
float softDropFactor = 12;*/
autoRepeatRate = autoRepeatRateDefault;
delayedAutoShift = delayedAutoShiftDefault;
dasCutDelay = dasCutDelayDefault;
softDropFactor = softDropFactorDefault;
lineClearPreventMinesweepDelay = lineClearPreventMinesweepDelayDefault;
autoRepeatRateSlider.SetAdjustedValue(autoRepeatRateDefault);
delayedAutoShiftSlider.SetAdjustedValue(delayedAutoShiftDefault);
dasCutDelaySlider.SetAdjustedValue(dasCutDelayDefault);
softDropFactorSlider.slider.value = softDropFactorDefault;
lineClearPreventMinesweepDelaySlider.SetAdjustedValue(lineClearPreventMinesweepDelayDefault);
lineClearDelayEnabled = true;
lineClearDelayToggle.isOn = true;
PlayerPrefs.SetInt("LineClearDelayEnabled", 1);
}
}