using UnityEngine;
|
using System.Collections;
|
using System;
|
using System.Collections.Generic;
|
using System.IO;
|
|
public class LaunchInHot : SingletonMonobehaviour<LaunchInHot>
|
{
|
static int step = 0;
|
public static LaunchStage m_CurrentStage = LaunchStage.None;
|
public static LaunchProgressInfo progressInfo { get; private set; }
|
|
float timer = 0f;
|
Queue<LaunchTask> tasks = new Queue<LaunchTask>();
|
LaunchTask currentTask = null;
|
bool launchComplete = false;
|
float surplusProgress = 0f;
|
float surplusTime = 0f;
|
|
public Action OnApplicationOut = null;
|
|
|
void Start()
|
{
|
System.Net.ServicePointManager.DefaultConnectionLimit = 100;//设置http最大连接数
|
Application.backgroundLoadingPriority = ThreadPriority.High;
|
Screen.sleepTimeout = SleepTimeout.NeverSleep;
|
|
InitSystemMgr();
|
SDKUtils.Instance.Init(); //原sdk接口
|
|
// 这里还没开始加载配置 但是提前加载了供LaunchWin使用
|
LanguageConfig.ForceInit();
|
InitialFunctionConfig.ForceInit();
|
|
UIManager.Instance.OpenWindow<LaunchWin>();
|
|
var builtInAssetCopyTask = new BuiltInAssetCopyTask();
|
var requestPermissionStart = new RequestPermissionStart();
|
var initSettingTask = new InitSettingTask();
|
var sdkInitedTask = new SDKInitedTask();
|
//var assetCopyTask = new AssetCopyTask();
|
//var assetDecompressTask = new AssetDecompressTask();
|
var getVersionInfoTask = new GetVersionInfoTask();
|
var checkAssetValidTask = new CheckAssetValidTask();
|
var downLoadAssetTask = new DownLoadAssetTask();
|
var assetBundleInitTask = new AssetBundleInitTask();
|
var configInitTask = new ConfigInitTask();
|
var launchFadeOutTask = new LaunchFadeOutTask();
|
|
tasks.Enqueue(builtInAssetCopyTask);
|
tasks.Enqueue(requestPermissionStart);
|
tasks.Enqueue(initSettingTask);
|
|
|
if (!Application.isEditor)
|
{
|
tasks.Enqueue(sdkInitedTask);
|
}
|
|
switch (Application.platform)
|
{
|
case RuntimePlatform.OSXEditor:
|
case RuntimePlatform.WindowsEditor:
|
tasks.Enqueue(getVersionInfoTask);
|
break;
|
case RuntimePlatform.Android:
|
tasks.Enqueue(getVersionInfoTask);
|
//tasks.Enqueue(assetCopyTask);
|
//tasks.Enqueue(assetDecompressTask);
|
break;
|
case RuntimePlatform.IPhonePlayer:
|
tasks.Enqueue(getVersionInfoTask);
|
//tasks.Enqueue(assetCopyTask);
|
break;
|
case RuntimePlatform.WindowsPlayer:
|
//tasks.Enqueue(assetCopyTask);
|
tasks.Enqueue(getVersionInfoTask);
|
break;
|
}
|
|
tasks.Enqueue(checkAssetValidTask);
|
tasks.Enqueue(downLoadAssetTask);
|
tasks.Enqueue(assetBundleInitTask);
|
tasks.Enqueue(configInitTask);
|
tasks.Enqueue(launchFadeOutTask);
|
|
CalculateExpectTotalTime();
|
|
}
|
|
protected void InitSystemMgr()
|
{
|
ResManager.Instance.Init();
|
UIManager.Instance.Init();
|
StageManager.Instance.Init();
|
LoginManager.Instance.Init();
|
}
|
|
void Update()
|
{
|
if (!launchComplete)
|
{
|
if (currentTask == null)
|
{
|
if (tasks.Count > 0)
|
{
|
currentTask = tasks.Dequeue();
|
currentTask.Begin();
|
}
|
else
|
{
|
launchComplete = true;
|
}
|
}
|
|
if (currentTask != null)
|
{
|
currentTask.Update();
|
}
|
|
if (currentTask != null && currentTask.done)
|
{
|
currentTask.End();
|
CalculateExpectTotalTime();
|
currentTask = null;
|
}
|
|
if (m_CurrentStage == LaunchStage.DownLoad)
|
{
|
progressInfo = new LaunchProgressInfo(m_CurrentStage, 1, progressInfo.totalProgress, 0f);
|
}
|
else
|
{
|
timer += Time.deltaTime;
|
var progress = progressInfo.totalProgress + surplusProgress * (Time.deltaTime / surplusTime);
|
progress = Mathf.Clamp(progress, 0, 0.98f);
|
|
var partProgress = 0f;
|
if (currentTask == null)
|
{
|
partProgress = 0f;
|
}
|
else
|
{
|
var temp = currentTask.timer / Mathf.Min(2f, currentTask.duration);
|
step = (int)temp + 1;
|
partProgress = temp - (int)temp;
|
}
|
|
progressInfo = new LaunchProgressInfo(m_CurrentStage, step, Mathf.Clamp01(progress), partProgress);
|
}
|
}
|
|
// Debug.LogError("currentTask is null " + (currentTask == null).ToString() + " isLaunchComplete " + launchComplete.ToString());
|
|
// if (currentTask != null)
|
// {
|
|
if (launchComplete)
|
{
|
UnityEngine.Debug.LogFormat("启动耗时:{0}", timer);
|
progressInfo = new LaunchProgressInfo(m_CurrentStage, 1, 1f, 1f);
|
this.enabled = false;
|
|
Main.Init();
|
// StageLoad.Instance.PushSceneLoadCommand(new StageLoad.StageLoadCommand()
|
// {
|
// toMapId = 1,
|
// toLineId = 0,
|
// needEmpty = false,
|
// needLoadResource = true,
|
// serverType = ServerType.Main,
|
// isClientLoadMap = true
|
// });
|
}
|
// }
|
}
|
|
public static int GetLaunchStage()
|
{
|
return (int)m_CurrentStage;
|
}
|
|
/// <summary>
|
/// 计算总的预期时间
|
/// </summary>
|
void CalculateExpectTotalTime()
|
{
|
surplusTime = 0f;
|
foreach (var item in tasks)
|
{
|
surplusTime += item.expectTime;
|
}
|
|
surplusProgress = 1 - progressInfo.totalProgress;
|
}
|
|
|
private void OnApplicationQuit()
|
{
|
OnApplicationOut?.Invoke();
|
}
|
|
|
}
|