powerfun-unity/Assets/Scripts/UI/Prefab/SettingContoller.cs

146 lines
4.5 KiB
C#

using DG.Tweening;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
using Assets.Scripts;
using System;
public class Settings
{
public int AutoPause { set; get; }
public float Sensitivity { set; get; }
public int IMode { set; get; }
public int Unit { set; get; }
public float Volume { set; get; }
public int WMode { set; get; }
public int Language { set; get; }
}
public class SettingContoller : PFUIPanel
{
// Start is called before the first frame update
Transform exit;
Button[] AutoPause, IMode, Unit, WMode, Language;
Slider Sensitivity, Volume;
Settings settings;
protected override void Awake()
{
exit = transform.Find("Main").Find("Exit");
if (exit != null)
{
//exit.GetComponent<Button>().onClick.AddListener(()=>
//{
// Close();
//});
UIManager.AddEvent(exit.gameObject, EventTriggerType.PointerClick, (e) =>
{
UIManager.Instance.settings = settings;
Close();
});
}
var inner = transform.Find("Main").Find("Inner");
AutoPause = new Button[]
{
inner.Find("AutoPause").Find("BtnOpen").GetComponent<Button>(),
inner.Find("AutoPause").Find("BtnClose").GetComponent<Button>()
};
IMode = new Button[]
{
inner.Find("IMode").Find("BtnSimple").GetComponent<Button>(),
inner.Find("IMode").Find("BtnFull").GetComponent<Button>()
};
Unit = new Button[]
{
inner.Find("Unit").Find("BtnMetric").GetComponent<Button>(),
inner.Find("Unit").Find("BtnImperial").GetComponent<Button>()
};
WMode = new Button[]
{
inner.Find("WMode").Find("BtnWindow").GetComponent<Button>(),
inner.Find("WMode").Find("BtnFull").GetComponent<Button>()
};
Language = new Button[]
{
inner.Find("Language").Find("BtnChinese").GetComponent<Button>(),
inner.Find("Language").Find("BtnEnglish").GetComponent<Button>()
};
Sensitivity = inner.Find("Sensitivity").Find("Slider").GetComponent<Slider>();
Volume = inner.Find("Volume").Find("Slider").GetComponent<Slider>();
AddClick();
LoadSettings();
}
private void AddClick()
{
AddClick(WMode);
AddClick(Unit);
AddClick(IMode);
AddClick(AutoPause);
AddClick(Language);
Sensitivity.onValueChanged.AddListener((f) => { settings.Sensitivity = f; });
Volume.onValueChanged.AddListener((f) => { settings.Volume = f; });
}
private void LoadSettings()
{
settings = UIManager.Instance.settings;
SetValue(WMode, settings.WMode,"WMode");
SetValue(Unit, settings.Unit, "Unit");
SetValue(IMode, settings.IMode, "IMode");
SetValue(AutoPause, settings.AutoPause, "AutoPause");
SetValue(Language, settings.Language, "Language");
Sensitivity.value = settings.Sensitivity;
Volume.value = settings.Volume;
}
protected override void Start()
{
}
// Update is called once per frame
void Update()
{
}
void AddClick(Button[] buttons)
{
for (int i = 0; i < buttons.Length; i++)
{
int index = i;
UIManager.AddEvent(buttons[i].gameObject, EventTriggerType.PointerClick, (b) =>
{
SetValue(buttons, index,buttons[index].transform.parent.name);
});
}
}
void SetValue(Button[] buttons, int value,string valueName)
{
for (int i = 0; i < buttons.Length; i++)
{
var b = buttons[i];
if (i == value)
{
b.GetComponent<Image>().color = Utils.HexToColorHtml("#F93086");
b.transform.Find("Text").GetComponent<Text>().color = Utils.HexToColorHtml("#FFFFFF");
settings.GetType().GetProperty(valueName).SetValue(UIManager.Instance.settings,i);
}
else
{
b.GetComponent<Image>().color = Utils.HexToColorHtml("#414251");
b.transform.Find("Text").GetComponent<Text>().color = Utils.HexToColorHtml("#9e9ead");
}
}
}
public override void Show()
{
var cg = this.GetComponent<CanvasGroup>();
cg.alpha = 0;
base.Show();
cg.DOFade(1f, 0.3f);
}
}