Files

149 lines
4.8 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using TMPro;
public class SliderHandler : MonoBehaviour
{
//First element is the text (shows Percent), Second element is the slider to change the value, Third element is the Gameobject with Audio Source
public GameObject[] GameplayVolume;
public GameObject[] UIVolume;
public GameObject[] MusicVolume;
public GameObject[] SFXVolume;
public GameObject[] ControllerSensitivity;
private GameSettings gameSettings;
//Array of Audios, First element is Audio for Gameplay, Second for UI, Third for Music, Fourth for SFX
public static AudioSource[] audioSources;
void OnEnable(){
// Call the static LoadGameSettings function from SettingsHandler
gameSettings = SettingsHandler.LoadGameSettings();
audioSources = new AudioSource[4]; //4 total elements
audioSources[0] = GameplayVolume[2].GetComponent<AudioSource>(); //Gameplay Volume
audioSources[1] = UIVolume[2].GetComponent<AudioSource>(); //UI Volume
audioSources[2] = MusicVolume[2].GetComponent<AudioSource>(); //Music Volume
audioSources[3] = SFXVolume[2].GetComponent<AudioSource>(); //SFX Volume
(GameplayVolume[1].GetComponent<Slider>()).value = gameSettings.GameplayVolume_value;
(UIVolume[1].GetComponent<Slider>()).value = gameSettings.UIVolume_value;
(MusicVolume[1].GetComponent<Slider>()).value = gameSettings.MusicVolume_value;
(SFXVolume[1].GetComponent<Slider>()).value = gameSettings.SFXVolume_value;
StopAllAudios();
}
// Start is called before the first frame update
void Start()
{
AttachSliderListener(GameplayVolume);
AttachSliderListener(UIVolume);
AttachSliderListener(MusicVolume);
AttachSliderListener(SFXVolume);
// AttachSliderListener(ControllerSensitivity);
}
// Update is called once per frame
void Update()
{
}
void AttachSliderListener(GameObject[] sliderArray){
// Get the TextMeshProUGUI and Slider components
TextMeshProUGUI textMeshPro = sliderArray[0].GetComponent<TextMeshProUGUI>();
Slider slider = sliderArray[1].GetComponent<Slider>();
// Add listener for the slider value change
// if (sliderArray != ControllerSensitivity){
// AudioSource audio = sliderArray[2].GetComponent<AudioSource>();
// }
AudioSource audio = sliderArray[2].GetComponent<AudioSource>();
slider.onValueChanged.AddListener(value => OnSliderValueChanged(value, textMeshPro, audio, (sliderArray[1]).name));
}
// Method to handle slider value change
GameSettings settings;
void OnSliderValueChanged(float value, TextMeshProUGUI textMeshPro, AudioSource audio, string sliderName){
float normalizedValue = value * 100f;
textMeshPro.text = $"{normalizedValue:F0}%";
settings = SettingsHandler.LoadGameSettings();
switch(sliderName){
case "GameplayVolume_value":
settings.GameplayVolume_value = value;
settings.audioVolumes[0] = textMeshPro.text; //Update Audio value to Audio Settings
break;
case "UIVolume_value":
settings.UIVolume_value = value;
settings.audioVolumes[1] = textMeshPro.text; //Update Audio value to Audio Settings
break;
case "MusicVolume_value":
settings.MusicVolume_value = value;
settings.audioVolumes[2] = textMeshPro.text; //Update Audio value to Audio Settings
break;
case "SFXVolume_value":
settings.SFXVolume_value = value;
settings.audioVolumes[3] = textMeshPro.text; //Update Audio value to Audio Settings
break;
}
// settings.sliderName = value;
SettingsHandler.SaveGameSettings(settings);
StopAllAudios();
// Set the audio volume based on the slider value
audio.volume = value;
audio.Play();
// Start the coroutine to play the audio for 1 second
// StartCoroutine(PlayAudioForOneSecond(audio));
// Play the audio if it's not already playing
// if (!audio.isPlaying)
// {
// audio.Play();
// }
}
// Function to Stop all audio in the UI
public void StopAllAudios(){
foreach (AudioSource aud in audioSources){
aud.time = 0f;
aud.Stop();
}
}
// Coroutine to play the audio for 1 second
IEnumerator PlayAudioForOneSecond(AudioSource audio)
{
// Play the audio
audio.Play();
// Wait for 1 second
yield return new WaitForSeconds(3f);
// Stop the audio
// audio.Stop();
StopAllAudios();
}
}