Main/System/AssetVersion/InGameDownLoad.cs
@@ -3,6 +3,7 @@
using UnityEngine;
using System;
using System.Text.RegularExpressions;
using LitJson;
public class InGameDownLoad : SingletonMonobehaviour<InGameDownLoad>
@@ -27,7 +28,7 @@
    public bool isDone { get { return state == State.Completed; } } //是否全部下载完成
    //窗口中显示的已下载大小
    public long showDownLoadedSize { get { return DownloadMgr.Instance.DownloadedBytes - backGroundDownLoadSizeRecord; } }
    public long showDownLoadedSize { get { return DownloadHotMgr.Instance.DownloadedBytes - backGroundDownLoadSizeRecord; } }
    public long showTotalSize { get { return totalSize - backGroundDownLoadSizeRecord; } }//窗口中显示的总大小
    public int showTotalCount { get { return totalCount - downLoadedCountRecord; } }//窗口中显示的总数量
    public int showOkCount { get { return okCount - downLoadedCountRecord; } }//窗口中显示的下载完成数量
@@ -79,9 +80,7 @@
        }
    }
    // TaskModel taskModel { get { return ModelCenter.Instance.GetModel<TaskModel>(); } }
    public List<Reward> rewards = new List<Reward>();
    public int[][] rewards;
    public bool hasReward { get; private set; }//是否有奖励
    public string completeDownLoadAccount
    {
@@ -89,12 +88,11 @@
        set { LocalSave.SetString("InGameDownLoadCompleteAccount", value); }
    }
    //  TODO YYL
    // public Redpoint downLoadRedpoint = new Redpoint(116);
    public Redpoint downLoadRedpoint = new Redpoint(MainRedDot.RedPoint_Download);
    private void Awake()
    {
        DownloadMgr.MaxDownLoadTask = GetMaxTask();
        DownloadHotMgr.MaxDownLoadTask = GetMaxTask();
    }
    private void LateUpdate()
@@ -138,45 +136,33 @@
    //开始分配任务
    public void AssignTasks(List<AssetVersion> assets, Action _onDownLoadOk)
    {
        // TODO YYL
        // this.inGameDownLoadAllow = false;
        // this.assets = assets;
        // this.assets.Sort(this.AssetDownLoadPriorCompare);//所有任务根据优先级排序
        // onDownLoadOk = _onDownLoadOk;
        this.inGameDownLoadAllow = false;
        this.assets = assets;
        this.assets.Sort(this.AssetDownLoadPriorCompare);//所有任务根据优先级排序
        onDownLoadOk = _onDownLoadOk;
        // totalCount = this.assets.Count;
        // okCount = 0;
        // totalSize = 0;
        totalCount = this.assets.Count;
        okCount = 0;
        totalSize = 0;
        // DownloadMgr.Instance.Prepare();
        DownloadHotMgr.Instance.Prepare();
        // for (int i = 0; i < this.assets.Count; i++)
        // {
        //     var assetVersion = this.assets[i];
        //     totalSize += assetVersion.size;//统计资源总大小
        //     //统计地图专属的资源
        //     var mapId = PriorBundleConfig.GetAssetBelongToMap(assetVersion.GetAssetCategory(), AssetVersionUtility.DecodeFileName(assetVersion.fileName));
        //     if (mapId != 0)
        //     {
        //         if (!mapTasks.ContainsKey(mapId))
        //         {
        //             mapTasks[mapId] = new List<AssetVersion>();
        //         }
        //         mapTasks[mapId].Add(assetVersion);
        //     }
        //     //添加下载任务
        //     var remoteURL = StringUtility.Contact(VersionUtility.Instance.versionInfo.GetResourcesURL(VersionConfig.Get().branch), Language.fixPath, "/", assetVersion.relativePath);
        //     var localURL = StringUtility.Contact(ResourcesPath.Instance.ExternalStorePath, assetVersion.relativePath);
        //     DownloadMgr.Instance.AddTask(new DownloadTask(remoteURL, localURL, assetVersion));
        // }
        for (int i = 0; i < this.assets.Count; i++)
        {
            var assetVersion = this.assets[i];
            totalSize += assetVersion.size;//统计资源总大小
        // state = State.None;
            //添加下载任务
            var remoteURL = StringUtility.Concat(VersionUtility.Instance.versionInfo.GetResourcesURL(VersionConfig.Get().branch), Language.fixPath, "/", assetVersion.relativePath);
            var localURL = StringUtility.Concat(ResourcesPath.Instance.ExternalStorePath, assetVersion.relativePath);
            DownloadHotMgr.Instance.AddTask(new DownloadHotTask(remoteURL, localURL, assetVersion));
        }
        // TaskModel.Event_MainlineTask -= OnMainTaskChange;
        // TaskModel.Event_MainlineTask += OnMainTaskChange;
        state = State.None;
        // PlayerDatas.Instance.playerDataRefreshEvent -= OnPlayerLevelChange;
        // PlayerDatas.Instance.playerDataRefreshEvent += OnPlayerLevelChange;
        PlayerDatas.Instance.playerDataRefreshEvent -= OnPlayerLevelChange;
        PlayerDatas.Instance.playerDataRefreshEvent += OnPlayerLevelChange;
    }
    //任务根据优先级排序
@@ -185,16 +171,14 @@
        var categoryA = lhs.GetAssetCategory();
        var categoryB = rhs.GetAssetCategory();
        //  TODO YYL
        var priorA = PriorBundleConfig.GetAssetPrior(categoryA, AssetVersionUtility.DecodeFileName(lhs.fileName));
        var priorB = PriorBundleConfig.GetAssetPrior(categoryB, AssetVersionUtility.DecodeFileName(rhs.fileName));
        // var priorA = PriorBundleConfig.GetAssetPrior(categoryA, AssetVersionUtility.DecodeFileName(lhs.fileName));
        // var priorB = PriorBundleConfig.GetAssetPrior(categoryB, AssetVersionUtility.DecodeFileName(rhs.fileName));
        // if (priorA != priorB)
        // {
        //     return priorA < priorB ? -1 : 1;
        // }
        // else
        if (priorA != priorB)
        {
            return priorA < priorB ? -1 : 1;
        }
        else
        {
            var isManifestA = lhs.extersion == ".manifest";
            var isManifestB = rhs.extersion == ".manifest";
@@ -252,7 +236,7 @@
            case Dominant.Half:
                if (dominantState == Dominant.None)
                {
                    backGroundDownLoadSizeRecord = DownloadMgr.Instance.DownloadedBytes;
                    backGroundDownLoadSizeRecord = DownloadHotMgr.Instance.DownloadedBytes;
                    downLoadedCountRecord = okCount;
                }
                StartDownLoad();
@@ -261,7 +245,7 @@
            case Dominant.Whole:
                if (dominantState == Dominant.None)
                {
                    backGroundDownLoadSizeRecord = DownloadMgr.Instance.DownloadedBytes;
                    backGroundDownLoadSizeRecord = DownloadHotMgr.Instance.DownloadedBytes;
                    downLoadedCountRecord = okCount;
                    Pause();
                    state = State.Prepared;
@@ -272,9 +256,7 @@
                    state = State.Prepared;
                }
                dominantState = Dominant.Whole;
                //  TODO YYL
                // UIManager.Instance.ShowWindow<InGameDownLoadWin>();
                // // WindowCenter.Instance.Open<InGameDownLoadWin>();
                UIManager.Instance.OpenWindow<InGameDownLoadWin>();
                break;
        }
    }
@@ -285,7 +267,7 @@
        if (state == State.None || state == State.Prepared || state == State.Pause)
        {
            state = State.DownLoad;
            DownloadMgr.Instance.Begin(OnFileDownLoadCompleted);
            DownloadHotMgr.Instance.Begin(OnFileDownLoadCompleted);
        }
    }
@@ -294,13 +276,13 @@
    {
        if (state == State.DownLoad)
        {
            DownloadMgr.Instance.Stop();
            DownloadHotMgr.Instance.Stop();
            state = State.Pause;
        }
    }
    //文件下载完成回调
    private bool OnFileDownLoadCompleted(bool finished, DownloadTask task)
    private bool OnFileDownLoadCompleted(bool finished, DownloadHotTask task)
    {
        if (task.IsDone && task.obj is AssetVersion)
        {
@@ -315,71 +297,64 @@
    //所有任务完成
    private void OnDownLoadFinished()
    {
        //  TODO YYL
        // TaskModel.Event_MainlineTask -= OnMainTaskChange;
        // PlayerDatas.Instance.playerDataRefreshEvent -= OnPlayerLevelChange;
        PlayerDatas.Instance.playerDataRefreshEvent -= OnPlayerLevelChange;
        // WindowCenter.Instance.Close<InGameDownLoadWin>();
        UIManager.Instance.CloseWindow<InGameDownLoadWin>();
        // if (!hasReward)
        // {
        //     if (dominantState == Dominant.None)
        //     {
        //         RequestDownLoadReward(false);
        //         state = State.Completed;
        //     }
        //     else
        //     {
        //         completeDownLoadAccount = PlayerDatas.Instance.baseData.AccID;
        //         state = State.Award;
        //     }
        // }
        // else
        // {
        //     state = State.Completed;
        // }
        if (!hasReward)
        {
            if (dominantState == Dominant.None)
            {
                // RequestDownLoadReward(false);
                state = State.Completed;
            }
            else
            {
                completeDownLoadAccount = PlayerDatas.Instance.baseData.AccID;
                state = State.Award;
            }
        }
        else
        {
            state = State.Completed;
        }
        
        // downLoadRedpoint.state = state == State.Award ? RedPointState.Simple : RedPointState.None;
        downLoadRedpoint.state = state == State.Award ? RedPointState.Simple : RedPointState.None;
        // if (onDownLoadOk != null)
        // {
        //     onDownLoadOk();
        //     onDownLoadOk = null;
        // }
        if (onDownLoadOk != null)
        {
            onDownLoadOk();
            onDownLoadOk = null;
        }
    }
    public void ParseRewardConfig()
    {
        // //  TODO YYL
        // var rewardString = FuncConfigConfig.Get("DownReward").Numerical1;
        // var matches = Regex.Matches(rewardString, "(\\d+,\\d+,\\d+)");
        // for (int i = 0; i < matches.Count; i++)
        // {
        //     rewards.Add(new Reward(matches[i].Value));
        // }
        if (rewards.IsNullOrEmpty())
        {
            rewards = JsonMapper.ToObject<int[][]>(FuncConfigConfig.Get("DownReward").Numerical1);
        }
    }
    //  TODO YYL
    // public void UpdateRewardInfo(HA319_tagMCPackDownloadRecord _package)
    // {
    //     hasReward = _package.Record == 1;
    //     if (AssetVersionUtility.unPriorAssetDownLoadDone)
    //     {
    //         state = !hasReward && completeDownLoadAccount == PlayerDatas.Instance.baseData.AccID ? State.Award : State.Completed;
    //     }
    //     downLoadRedpoint.state = state == State.Award ? RedPointState.Simple : RedPointState.None;
    // }
    public void RequestDownLoadReward(bool _manual)
    public void UpdateRewardInfo(HA319_tagMCPackDownloadRecord _package)
    {
        //  TODO YYL
        // var send = new CA504_tagCMPlayerGetReward();
        // send.RewardType = 15;
        hasReward = _package.Record == 1;
        if (AssetVersionUtility.unPriorAssetDownLoadDone)
        {
            state = !hasReward && completeDownLoadAccount == PlayerDatas.Instance.baseData.AccID ? State.Award : State.Completed;
        }
        downLoadRedpoint.state = state == State.Award ? RedPointState.Simple : RedPointState.None;
    }
    public void RequestDownLoadReward()
    {
        var send = new CA504_tagCMPlayerGetReward();
        send.RewardType = 15;
        // send.DataEx = (byte)(_manual ? 0 : 1);
        // GameNetSystem.Instance.SendInfo(send);
        GameNetSystem.Instance.SendInfo(send);
    }
    public float GetMapAssetDownLoadProgress(int mapId)
@@ -540,11 +515,10 @@
        }
        // TODO YYL
        // if (!WindowCenter.Instance.IsOpen("MainInterfaceWin"))
        // {
        //     return false;
        // }
        if (!UIManager.Instance.IsOpened<MainWin>())
        {
            return false;
        }
        // if (WindowCenter.Instance.ExistAnyFullScreenOrMaskWin())
        // {
@@ -586,27 +560,12 @@
        }
    }
    //主线任务任务状态变更和刷新
    private void OnMainTaskChange(int _taskId, int _state)
    {
        // TODO YYL
        // var mainTaskId = taskModel.currentMission;
        // if (GeneralDefine.inGameDownLoadTaskCheckPoints.Contains(mainTaskId)
        //     && taskModel.currentMissionState == 1)
        // {
        //     if (CheckDominantDownLoad())
        //     {
        //         TryDownLoad(Dominant.Whole);
        //     }
        // }
    }
    //获取最大下载任务数
    public int GetMaxTask()
    {
        //  TODO YYL
        // if (!LoginWin.firstOpenEnd)
        //     return 20;
        if (!LoginWin.firstOpenEnd)
            return 20;
        if (downLoadGo)
            return 20;
@@ -692,31 +651,10 @@
    public enum Dominant
    {
        None = 0,
        None = 0,   // 静态下载
        Half = 1,
        Whole = 2,
        Whole = 2,  // 手动点击下载
    }
    #region 登录下载界面 DownLoadWin
    // 增加下载奖励 根据标识决定多次发放;注意不要与游戏内的完整下载混淆
    // 后续改成appversion_new增加扩展信息返回下载标识,用于控制当前是否显示奖励,此处首包还未包含图片资源
    public int downloadMark = 0;
    public bool IsShowDownloadAward()
    {
        int downloadMark = 0;
        int.TryParse(VersionUtility.Instance.versionInfo.ResourceAward, out downloadMark);
        var mark = LocalSave.GetInt("downloadMark");
        return downloadMark > mark;
    }
    //下载完毕成功登录游戏即可设置
    public void SetDownloadMark()
    {
        LocalSave.SetInt("downloadMark", int.Parse(FuncConfigConfig.Get("DownReward").Numerical4));
    }
    #endregion
}