using System.Collections; using System.Collections.Generic; using UnityEngine.Events; using UnityEngine; public class SnxxzGame : SingletonMonobehaviour { private event UnityAction m_UpdateActions; private event UnityAction m_LateUpdateActions; private event UnityAction m_OnDrawGizmosActions; private event UnityAction onApplicationOutEvent; private void Awake() { #if UNITY_EDITOR gameObject.AddMissingComponent(); #endif TargetBriefInfo.Init(); ExperienceGetBehaviour.Init(); SpGetBehaviour.Init(); BossAreaMark.Init(); HeroNearDeathBehaviour.Init(); } private void Update() { float _realTime = Time.realtimeSinceStartup; Vector4 _timeVec4 = new Vector4(_realTime * .05f, _realTime, _realTime * 2f, _realTime * 3f); Shader.SetGlobalVector("_RealTime", _timeVec4); if (m_UpdateActions != null) { m_UpdateActions(); } } private void LateUpdate() { if (m_LateUpdateActions != null) { m_LateUpdateActions(); } } private void OnDrawGizmos() { if (m_OnDrawGizmosActions != null) { m_OnDrawGizmosActions(); } } protected sealed override void OnDestroy() { base.OnDestroy(); m_UpdateActions = null; m_LateUpdateActions = null; m_OnDrawGizmosActions = null; } public void AddUpdateAction(UnityAction method) { m_UpdateActions += method; } public void RemoveUpdateAction(UnityAction method) { m_UpdateActions -= method; } public void AddLateUpdateAction(UnityAction method) { m_LateUpdateActions += method; } public void RemoveLateUpdateAction(UnityAction method) { m_LateUpdateActions -= method; } public void AddOnDrawGizmosAction(UnityAction method) { m_OnDrawGizmosActions += method; } public void RemoveOnDrawGizmosAction(UnityAction method) { m_OnDrawGizmosActions -= method; } public void AddApplicationOutAction(UnityAction method) { onApplicationOutEvent += method; } public void RemoveApplicationOutAction(UnityAction method) { onApplicationOutEvent -= method; } public void StartTimePause(float lastTime) { StopTimePause(); StartCoroutine("DoTimePause", lastTime); } private void StopTimePause() { StopCoroutine("TimePause"); Time.timeScale = 1; } private IEnumerator DoTimePause(float lastTime) { Time.timeScale = 0; float _startTime = Time.realtimeSinceStartup; while (Time.realtimeSinceStartup - _startTime < lastTime) { yield return null; } Time.timeScale = 1; } private void OnApplicationQuit() { if (MaterialUtility.hudMaterial != null) { MaterialUtility.hudMaterial.SetTexture("_Tex1", null); MaterialUtility.hudMaterial.SetTexture("_Tex2", null); } GameNetSystem.Instance.Disconnect(); if (onApplicationOutEvent != null) { onApplicationOutEvent(); } } private void OnApplicationPause(bool pause) { if (!pause) { #if !UNITY_EDITOR && UNITY_ANDROID ResolutionUtility.AdjustResolution(); #endif } } private void OnApplicationFocus(bool focus) { if (focus) { PlayerDatas.Instance.RequestWorldTick(); } } }