using System.Threading;
using UnityEngine;
using UnityEngine.Events;
namespace WS
{
///启动器基类
public abstract class Init : MonoBehaviour
{
private void Awake()
{
//网络消息回调主线程
SynchronizationContext.SetSynchronizationContext(
OneThreadSynchronizationContext.Instance
);
//限制帧数
Application.targetFrameRate = 90;
#if UNITY_EDITOR
Log.IsEditor();
#endif
#if DEBUG_MODEL
Log.IsDebug();
GameObject.Instantiate(Resources.Load("Prefabs/Reporter/Reporter"));
#endif
#if DEBUG_LOG
Log.IsWrite();
#endif
//设置为不销毁
DontDestroyOnLoad(gameObject);
//赋值Init物体
Game.Init = this.transform;
//初始化框架
Game.EventSystem.LoadSystem(typeof(Init).Assembly);
//计时/协程
Game.Scene.AddComponent();
//音效
Game.Scene.AddComponent();
//Game对象池
Game.Scene.AddComponent();
//MVC代理
Game.Scene.AddComponent();
//场景
Game.Scene.AddComponent();
//HTTP请求
Game.Scene.AddComponent();
//全局事件
Game.Scene.AddComponent();
}
private void Start()
{
//调用子类初始化
Initialize();
}
///初始化
public abstract void Initialize();
///循环
public virtual void OnUpdate() { }
///退出
public void Quit(UnityAction OnCallback = null)
{
OnCallback?.Invoke();
#if UNITY_EDITOR
UnityEditor.EditorApplication.isPlaying = false;
#else
Application.Quit();
#endif
}
private void Update()
{
OneThreadSynchronizationContext.Instance.Update();
Game.EventSystem.Update();
OnUpdate();
}
private void FixedUpdate()
{
Game.EventSystem.FixedUpdate();
}
private void LateUpdate()
{
Game.EventSystem.LateUpdate();
}
}
}