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(); } } public void MovingCamera(bool start, int type) { if (start) { StartCoroutine("Co_MovingCamera", type); } else { StopCoroutine("Co_MovingCamera"); } } public void ResetCamera(bool start) { if (start) { StartCoroutine("Co_ResetCamera"); } else { StopCoroutine("Co_ResetCamera"); } } private IEnumerator Co_MovingCamera(int _type) { var _areaCamera = Config.Instance.Get(_type); if (_areaCamera == null) { yield break; } CameraController.Instance.AcceptInput = true; CameraController.Instance.ZoomDamping = 0.5f; CameraController.Instance.RotationDamping = 0.5f; CameraController.Instance.sceneDistance = CameraController.Instance.Distance = _areaCamera.Distance * Constants.F_DELTA; CameraController.Instance.rotationX = _areaCamera.RotX * Constants.F_DELTA; CameraController.Instance.rotationY = _areaCamera.RotY * Constants.F_DELTA; float _time = 2f; while (_time > 0) { _time -= Time.deltaTime; yield return null; } CameraController.Instance.AcceptInput = false; CameraController.Instance.Distance = _areaCamera.Distance * Constants.F_DELTA; CameraController.Instance.rotationX = _areaCamera.RotX * Constants.F_DELTA; CameraController.Instance.rotationY = _areaCamera.RotY * Constants.F_DELTA; CameraController.Instance.ZoomDamping = 0.1f; CameraController.Instance.RotationDamping = 0.02f; } private IEnumerator Co_ResetCamera() { CameraController.Instance.AcceptInput = true; CameraController.Instance.ZoomDamping = 0.5f; CameraController.Instance.RotationDamping = 0.5f; CameraController.Instance.sceneDistance = CameraController.Instance.Distance = 9; CameraController.Instance.rotationX = -45; CameraController.Instance.rotationY = 40; float _time = 2f; while (_time > 0) { _time -= Time.deltaTime; yield return null; } CameraController.Instance.AcceptInput = false; CameraController.Instance.Distance = 9; CameraController.Instance.rotationX = -45; CameraController.Instance.rotationY = 40; CameraController.Instance.ZoomDamping = 0.1f; CameraController.Instance.RotationDamping = 0.02f; } }