Пример #1
0
        /// <summary>
        /// 进入状态
        /// </summary>
        /// <param name="param"></param>
        public override void OnEnter(Param param = null)
        {
            base.OnEnter(param);

            // 选择沙盒路径还是流式路径
            bool sandbox = App.version.Equals(Util.GetString(Const.SANDBOX_VERSION));

            AssetManager.instance.url = sandbox ? App.persistentDataPath : App.streamingAssetsPath;
            // 获取清单文件
            AsyncAsset asset = AssetManager.instance.AssetBundleLoad(AssetManager.instance.url + Const.MANIFESTFILE);

            if (asset != null && string.IsNullOrEmpty(asset.error))
            {
                App.manifest = JsonReader.Deserialize <ManifestConfig>(asset.mainAsset.ToString());
                AssetManager.instance.setDependentAsset = App.manifest.GetDependencies;
                AssetManager.instance.UnloadAssets(asset, true);
            }
            // 语言配置
            asset = AssetManager.instance.Load(Const.LANG_FILE, (bResult, obj) => {
                if (bResult && obj != null)
                {
                    ConfigManager.instance.langConfig.Init(obj.ToString());
                    AssetManager.instance.UnloadAssets(asset, true);
                }
            }, async: false);
            // 加载Loading界面
            UIManager.instance.OpenUI(Const.UI_LOADING, Param.Create(new object[] {
                UILoading.TEXT_TIPS, ConfigManager.GetLang("Asset_Request"), UILoading.SLIDER, 0F, UILoading.TEXT_DETAILS, string.Empty
            }));
            // 检测网络是否开启
            InternetReachability();
        }
Пример #2
0
        /// <summary>
        /// 进入状态
        /// </summary>
        /// <param name="param"></param>
        public override void OnEnter(Param param = null)
        {
            base.OnEnter(param);

            AssetManager.instance.UnloadAssets(true);
            // 获取清单文件
            AsyncAsset asset = AssetManager.instance.AssetBundleLoad(AssetManager.instance.url + Const.MANIFESTFILE);

            if (asset != null && string.IsNullOrEmpty(asset.error))
            {
                App.manifest = JsonReader.Deserialize <ManifestConfig>(asset.mainAsset.ToString());
                AssetManager.instance.setDependentAsset = App.manifest.GetDependencies;
                AssetManager.instance.UnloadAssets(asset, true);
            }

            // 加载Loading界面
            UIManager.instance.Clear();
            UIManager.instance.OpenUI(Const.UI_LOADING, Param.Create(new object[] {
                UILoading.TEXT_TIPS, ConfigManager.GetLang("Asset_Loading"), UILoading.SLIDER, 0F, UILoading.TEXT_DETAILS, string.Empty
            }), immediate: true);

            // 延迟启动Lua避免卡顿
            Schedule.instance.ScheduleOnce(0.03F, () => {
                Lua instance = Lua.instance;
            });
        }
Пример #3
0
        /// <summary>
        /// 更新状态
        /// </summary>
        public override void Update()
        {
            base.Update();

            if (m_assetDecompressing)
            {
                m_currentRealSize = 0;
                int count = Mathf.Min(Const.MAX_LOADER, m_async.Count);
                for (int i = count - 1; i >= 0; --i)
                {
                    m_currentRealSize += (float)m_async[i].userData * m_async[i].progress;
                }
                m_currentRealSize += m_currentSize;

                if (Time.realtimeSinceStartup >= m_time + 1F)
                {
                    m_speed        = m_currentRealSize - m_lastRealSize;
                    m_lastRealSize = m_currentRealSize;
                    m_time         = Time.realtimeSinceStartup;
                }

                UIManager.instance.OpenUI(Const.UI_LOADING, Param.Create(new object[] {
                    UILoading.TEXT_TIPS, ConfigManager.GetLang("Asset_Decompressing"), UILoading.SLIDER, m_currentSize / m_size
                }));
                if (m_currentSize == m_size)
                {
                    m_assetDecompressing = false;
                    PlayerPrefs.SetString(Const.SANDBOX_VERSION, App.version);
                    StateMachine.instance.OnEnter(new AssetUpdate());
                }
            }
        }
Пример #4
0
        /// <summary>
        /// 更新状态
        /// </summary>
        public override void Update()
        {
            base.Update();

            // 远程更新清单文件加载
            if (m_www != null && m_www.isDone)
            {
                if (string.IsNullOrEmpty(m_www.error))
                {
                    m_remoteUpdateManifestMD5 = Util.GetMD5(m_www.bytes);
                    m_remoteUpdateManifest    = JsonReader.Deserialize <ManifestConfig>(m_www.assetBundle.LoadAsset <TextAsset>(Path.GetFileNameWithoutExtension(m_www.url)).text);
                    if (m_www.assetBundle != null)
                    {
                        m_www.assetBundle.Unload(false);
                    }
                }
                else
                {
                    m_remoteUpdateManifest = new ManifestConfig();
                }
                StartAssetUpdate();

                m_www.Dispose();
                m_www = null;
            }

            // 更新中...
            if (m_assetUpdating)
            {
                m_currentRealSize = 0;
                int count = Mathf.Min(Const.MAX_LOADER, m_async.Count);
                for (int i = count - 1; i >= 0; --i)
                {
                    m_currentRealSize += (float)m_async[i].userData * m_async[i].progress;
                }
                m_currentRealSize += m_currentSize;

                if (Time.realtimeSinceStartup >= m_time + 1F)
                {
                    m_speed        = m_currentRealSize - m_lastRealSize;
                    m_lastRealSize = m_currentRealSize;
                    m_time         = Time.realtimeSinceStartup;
                }

                UIManager.instance.OpenUI(Const.UI_LOADING, Param.Create(new object[] {
                    UILoading.TEXT_TIPS, ConfigManager.GetLang("Asset_Updating"), UILoading.SLIDER, m_currentSize / m_size
                }));
                if (m_currentSize == m_size)
                {
                    m_assetUpdating = false;
                    AssetUpdateComplete();
                }
            }
        }
Пример #5
0
        /// <summary>
        /// 更新
        /// </summary>
        public override void Update()
        {
            base.Update();

            if (m_www != null && m_www.isDone)
            {
                bool forceUpdate = false;
                if (string.IsNullOrEmpty(m_www.error))
                {
                    Dictionary <string, object> remoteVersion = JsonReader.Deserialize <Dictionary <string, object> >(m_www.text);
                    if (remoteVersion != null)
                    {
                        App.Update(remoteVersion, new List <string>()
                        {
                            Const.VERSION
                        });
                        Debugger.logEnabled    = App.log;
                        Debugger.webLogEnabled = App.webLog;
                        string[] local  = App.version.Split('.');
                        string[] remote = remoteVersion.ContainsKey(Const.VERSION) ? remoteVersion[Const.VERSION].ToString().Split('.') : new string[0];
                        if (local.Length == remote.Length)
                        {
                            forceUpdate = !(int.Parse(local[0]) >= int.Parse(remote[0]) && int.Parse(local[1]) >= int.Parse(remote[1]));
                        }
                    }
                }

                m_www.Dispose();
                m_www = null;

                if (forceUpdate)
                {
                    // 需要更新版本
                    Action sure = () => {
                        Application.OpenURL(App.newVersionDownloadUrl);
                    };
                    Action close = () => {
                        Application.Quit();
                    };
                    UIManager.instance.OpenUI(Const.UI_NORMAL_TIPS_BOX, Param.Create(new object[] {
                        UINormalTipsBox.ACTION_SURE, sure, UINormalTipsBox.TEXT_CONTENT, ConfigManager.GetLang("Version_Low"), UINormalTipsBox.ACTION_CLOSE, close
                    }));
                }
                else
                {
                    // 检测沙盒资源解压
                    StateMachine.instance.OnEnter(new AssetDecompressing());
                }
            }
        }
Пример #6
0
        /// <summary>
        /// 更新状态
        /// </summary>
        public override void Update()
        {
            base.Update();

            switch (m_state)
            {
            case AssetState.Ready:
            {
                if (Lua.instance.init)
                {
                    StartAssetLoad();
                }
            } break;

            case AssetState.Loading:
            {
                m_currentRealSize = 0;
                int count = Mathf.Min(Const.MAX_LOADER, m_async.Count);
                for (int i = count - 1; i >= 0; --i)
                {
                    m_currentRealSize += (float)m_async[i].userData * m_async[i].progress;
                }
                m_currentRealSize += m_currentSize;

                if (Time.realtimeSinceStartup >= m_time + 1F)
                {
                    m_speed        = m_currentRealSize - m_lastRealSize;
                    m_lastRealSize = m_currentRealSize;
                    m_time         = Time.realtimeSinceStartup;
                }

                UIManager.instance.OpenUI(Const.UI_LOADING, Param.Create(new object[] {
                        UILoading.TEXT_TIPS, ConfigManager.GetLang("Asset_Loading"), UILoading.SLIDER, m_currentSize / m_size
                    }));
                if (m_currentSize == m_size && Lua.instance.awake)
                {
                    m_state = AssetState.Complete;
                    AssetLoadComplete();
                }
            }
            break;
            }
        }
Пример #7
0
 /// <summary>
 /// 检测网络是否开启
 /// </summary>
 private void InternetReachability()
 {
     // 检测网络是否开启
     if (App.internetReachability)
     {
         // 检测版本更新
         StateMachine.instance.OnEnter(new VersionUpdate());
     }
     else
     {
         // 网络不可达,退出
         Action sure = () => {
             Application.Quit();
         };
         Action close = () => {
             InternetReachability();
         };
         UIManager.instance.OpenUI(Const.UI_NORMAL_TIPS_BOX, Param.Create(new object[] {
             UINormalTipsBox.ACTION_SURE, sure, UINormalTipsBox.TEXT_CONTENT, ConfigManager.GetLang("Network_Invalid"), UINormalTipsBox.ACTION_CLOSE, close
         }));
     }
 }
Пример #8
0
        /// <summary>
        /// 进入状态
        /// </summary>
        /// <param name="param"></param>
        public override void OnEnter(Param param = null)
        {
            base.OnEnter(param);

            AssetManager.instance.url = App.persistentDataPath;
            // 加载Loading界面
            AssetManager.instance.UnloadAssets(true);
            UIManager.instance.Clear();
            UIManager.instance.OpenUI(Const.UI_LOADING, Param.Create(new object[] {
                UILoading.TEXT_TIPS, ConfigManager.GetLang("Asset_Request"), UILoading.SLIDER, 0F, UILoading.TEXT_DETAILS, string.Empty
            }), immediate: true);
            // 获取本地更新清单文件
            AsyncAsset async = AssetManager.instance.AssetBundleLoad(AssetManager.instance.url + Const.UPDATE_FILE);

            if (async != null && string.IsNullOrEmpty(async.error))
            {
                m_localUpdateManifest    = JsonReader.Deserialize <ManifestConfig>(async.mainAsset.ToString());
                m_localUpdateManifestMD5 = Util.GetMD5(async.bytes);
                AssetManager.instance.UnloadAssets(async, true);
            }

            // 获取远程更新清单文件
            m_www = new WWW(Path.Combine(Path.Combine(App.cdn + App.platform, string.Format(Const.REMOTE_DIRECTORY, App.version)), Const.UPDATE_FILE));
        }
Пример #9
0
        /// <summary>
        /// 开始资源更新
        /// </summary>
        private void StartAssetUpdate()
        {
            bool hasAssetUpdate = false;

            // 更新
            m_async.Clear();
            if (m_remoteUpdateManifest.data.Count > 0)
            {
                // 最后一个更新清单文件是否下载
                hasAssetUpdate = !m_localUpdateManifestMD5.Equals(m_remoteUpdateManifestMD5);
                if (hasAssetUpdate)
                {
                    Action sure = () => {
                        // 更新清单文件
                        AsyncAsset async = AssetManager.instance.AssetBundleAsyncLoad(Path.Combine(Path.Combine(App.cdn + App.platform, string.Format(Const.REMOTE_DIRECTORY, App.version)), Const.MANIFESTFILE), (bResult, asset) =>
                        {
                            if (bResult)
                            {
                                Util.WriteAllBytes(App.assetPath + Const.MANIFESTFILE, asset.bytes);
                                m_currentSize += (float)asset.userData;
                                m_async.Remove(asset);
                            }
                            else
                            {
                                Debugger.LogError(asset.error);
                            }
                        }, dependence: false);
                        async.userData = 0.5F;
                        m_size        += (float)async.userData;
                        m_async.Add(async);
                        // 更新其它文件
                        foreach (var data in m_remoteUpdateManifest.data.Values)
                        {
                            if (m_localUpdateManifest.Contains(data.name))
                            {
                                if (m_localUpdateManifest.Get(data.name).MD5.Equals(data.MD5))
                                {
                                    continue;
                                }
                                else if (data.MD5.Equals(Util.GetMD5(App.assetPath + data.name)))
                                {
                                    continue;
                                }
                            }
                            async = AssetManager.instance.AssetBundleAsyncLoad(Path.Combine(Path.Combine(App.cdn + App.platform, string.Format(Const.REMOTE_DIRECTORY, App.version)), data.name), (bResult, asset) =>
                            {
                                if (bResult)
                                {
                                    Util.WriteAllBytes(App.assetPath + data.name, asset.bytes);
                                    m_currentSize += (float)asset.userData;
                                    m_async.Remove(asset);
                                }
                                else
                                {
                                    Debugger.LogError(asset.error);
                                }
                            }, dependence: false);
                            async.userData = data.size / 1024F;
                            m_size        += (float)async.userData;
                            m_async.Add(async);
                        }
                        // 更新更新文件
                        async = AssetManager.instance.AssetBundleAsyncLoad(Path.Combine(Path.Combine(App.cdn + App.platform, string.Format(Const.REMOTE_DIRECTORY, App.version)), Const.UPDATE_FILE), (bResult, asset) =>
                        {
                            if (bResult)
                            {
                                Util.WriteAllBytes(App.assetPath + Const.UPDATE_FILE, asset.bytes);
                                m_currentSize += (float)asset.userData;
                                m_async.Remove(asset);
                            }
                            else
                            {
                                Debugger.LogError(asset.error);
                            }
                        }, dependence: false);
                        async.userData = 0.1F;
                        m_size        += (float)async.userData;
                        m_async.Add(async);

                        // 记录是否资源更新中
                        m_assetUpdating = true;
                        m_time          = Time.realtimeSinceStartup;
                    };
                    Action close = () => {
                        Application.Quit();
                    };
                    UIManager.instance.OpenUI(Const.UI_NORMAL_TIPS_BOX, Param.Create(new object[] {
                        UINormalTipsBox.ACTION_SURE, sure, UINormalTipsBox.TEXT_CONTENT, ConfigManager.GetLang("Network_Invalid"), UINormalTipsBox.ACTION_CLOSE, close
                    }));
                }
            }

            // 如果没有资源更新,就直接认为更新完成
            if (!hasAssetUpdate)
            {
                AssetUpdateComplete();
            }
        }