147 lines
4.6 KiB
C#
147 lines
4.6 KiB
C#
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<CanvasGroup>();
|
|
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<Image>().sprite = crosshairs.crosshairs[0];
|
|
crosshairListItem.GetComponent<Button>().onClick.AddListener(()=>{OnCrosshairChosen(0);});
|
|
for(int i=1; i < crosshairs.crosshairs.Count; i++){
|
|
GameObject newItem = Instantiate(crosshairListItem, crosshairListItem.transform.parent);
|
|
newItem.transform.GetChild(0).GetComponent<Image>().sprite = crosshairs.crosshairs[i];
|
|
int j =i;
|
|
newItem.GetComponent<Button>().onClick.AddListener(()=>{OnCrosshairChosen(j);});
|
|
}
|
|
|
|
previewCrosshair.sprite = crosshairs.crosshairs[PlayerPrefs.GetInt(CROSSHAIR_PREF_KEY)];
|
|
}
|
|
|
|
public void OnCrosshairChosen(int index){
|
|
PlayerPrefs.SetInt(CROSSHAIR_PREF_KEY, index);
|
|
PlayerPrefs.Save();
|
|
previewCrosshair.sprite = crosshairs.crosshairs[index];
|
|
|
|
OnSettingsChanged.Invoke();
|
|
}
|
|
|
|
public void InitPrefs(){
|
|
if(!PlayerPrefs.HasKey(CROSSHAIR_PREF_KEY)){
|
|
PlayerPrefs.SetInt(CROSSHAIR_PREF_KEY, 0);
|
|
}
|
|
if(!PlayerPrefs.HasKey(LOOKSENS_PREF_KEY)){
|
|
PlayerPrefs.SetFloat(LOOKSENS_PREF_KEY, 2f);
|
|
}
|
|
if(!PlayerPrefs.HasKey(CROSSHAIR_OPACITY_PREF_KEY)){
|
|
PlayerPrefs.SetFloat(CROSSHAIR_OPACITY_PREF_KEY, 0.8f);
|
|
}
|
|
|
|
PlayerPrefs.Save();
|
|
}
|
|
}
|