using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Events; using UnityEngine.UI; public class SettingsManager : MonoBehaviour { public const string CROSSHAIR_PREF_KEY = "crosshair"; public const string CROSSHAIR_OPACITY_PREF_KEY = "crosshair_opacity"; public const string LOOKSENS_PREF_KEY = "looksense"; // Start is called before the first frame update public CrosshairsScriptable crosshairs; public GameObject crosshairListItem; public Image previewCrosshair; public Slider crosshairOpacitySlider; public Slider lookSenseSlider; [Header("Dev")] public Slider moveSpeedSlider; public Slider ballBounceSlider; public Slider cameraFovSlider; public Slider cameraZoomSlider; public GameObject[] panels; CanvasGroup canvasGroup; public static SettingsManager instance; public static bool isShowing => instance.canvasGroup.alpha == 1; public UnityEvent OnSettingsChanged; void Awake(){ canvasGroup = GetComponent(); instance =this; OnSettingsChanged = new UnityEvent(); } void Start() { InitPrefs(); PopulateCrosshairList(); lookSenseSlider.onValueChanged.AddListener(OnLooksensChanged); crosshairOpacitySlider.onValueChanged.AddListener(OnCrosshairOpacityChanged); ballBounceSlider.onValueChanged.AddListener((val)=>{OnSettingsChanged.Invoke();}); moveSpeedSlider.onValueChanged.AddListener((val)=>{OnSettingsChanged.Invoke();}); cameraFovSlider.onValueChanged.AddListener((val)=>{OnSettingsChanged.Invoke();}); cameraZoomSlider.onValueChanged.AddListener((val)=>{OnSettingsChanged.Invoke();}); RefreshSettings(); } void RefreshSettings(){ crosshairOpacitySlider.value = PlayerPrefs.GetFloat(CROSSHAIR_OPACITY_PREF_KEY); lookSenseSlider.value = PlayerPrefs.GetFloat(LOOKSENS_PREF_KEY); previewCrosshair.color = new Color(1,1,1, crosshairOpacitySlider.value); } void Update(){ if(Input.GetKeyUp(KeyCode.Escape)){ if(isShowing){ if(activePanel == "Options"){ Hide(); }else{ TogglePanel("Options"); } } } } void OnLooksensChanged(float newval){ PlayerPrefs.SetFloat(LOOKSENS_PREF_KEY,newval); PlayerPrefs.Save(); OnSettingsChanged.Invoke(); } void OnCrosshairOpacityChanged(float newval){ PlayerPrefs.SetFloat(CROSSHAIR_OPACITY_PREF_KEY,newval); PlayerPrefs.Save(); previewCrosshair.color = new Color(1,1,1, newval); OnSettingsChanged.Invoke(); } public string activePanel; public void TogglePanel(string panelName){ foreach(GameObject panel in panels){ panel.SetActive(panel.name == panelName); } activePanel = panelName; } public void Show(){ canvasGroup.alpha = 1; canvasGroup.interactable = true; canvasGroup.blocksRaycasts = true; TogglePanel("Options"); } public void Hide(){ canvasGroup.alpha = 0; canvasGroup.interactable = false; canvasGroup.blocksRaycasts = false; } void PopulateCrosshairList(){ crosshairListItem.transform.GetChild(0).GetComponent().sprite = crosshairs.crosshairs[0]; crosshairListItem.GetComponent