using AX.MessageSystem; using System.Collections; using System.Collections.Generic; using UnityEngine; using AX.DevelopEngine; using System; /// /// 程序退出管理单例类,需要初始挂载在物体上 /// public class QuitApplicationManager : MonoSingleton { #region Variables private Dictionary QuitEventDict = new Dictionary(); private bool isQuit = false; private Action ToQuitTipAction; private GUIStyle tipStyle; private bool isShowGUI = false; private string guiTip = ""; #endregion #region Mono // Use this for initialization void Start() { Instance.Init(); tipStyle = new GUIStyle(); tipStyle.fontSize = 40; tipStyle.normal.textColor = Color.red; string filepath = Application.dataPath + @"/xml/AXConfig.xml"; XmlProcess process = new XmlProcess(filepath); bool smart = false; bool validity = false; bool unique = false; process.GetMode("assets", ref smart, ref unique, ref validity); if(smart) { // SmartController.Instance.Init(); } else if(validity) { ValidityDetection.Instance.Init(); } else if(unique) { UniqueIdentifier.Instance.Init(); } //默认如果点击x关闭程序时,不想拦截退出事件,可以执行下面方法允许程序直接退出 AddToQuitTipAction(SureQuit); } // Update is called once per frame void Update() { } void OnGUI() { if (isShowGUI) { GUI.Label(new Rect(Screen.width / 2 - 150, Screen.height / 2 - 75, 300, 150), guiTip, tipStyle); } } public void OnApplicationQuit() { if (!isQuit) { Application.CancelQuit(); ActiveToQuitTipAction(); //Debug.LogError("Application cancel quit **************************"); } } private void OnDestroy() { QuitEventDict.Clear(); QuitEventDict = null; ToQuitTipAction = null; } #endregion #region Customs public void Init() { } public void SetGuiTip(string tip, bool flag = true) { guiTip = tip; isShowGUI = flag; } public void SureQuit() { isQuit = true; ActiveQuitEvent(); Application.Quit(); // Debug.Log("Application quit"); } public void AddQuitEvent(MonoBehaviour mono, Action action) { if (!QuitEventDict.ContainsKey(mono)) { QuitEventDict.Add(mono, action); } } public void AddToQuitTipAction(Action action) { ToQuitTipAction += action; } public void ActiveToQuitTipAction() { if (ToQuitTipAction != null) ToQuitTipAction(); } private void ActiveQuitEvent() { foreach (var pair in QuitEventDict) { pair.Value(); } } #endregion }