Example #1
0
        public ResourceScene CoLoadScene(string path, bool isAddition)
        {
            if (!isAddition)
            {
                Dictionary <string, ResourceScene> tmpScens = new Dictionary <string, ResourceScene>(m_resScenes);
                foreach (string item in tmpScens.Keys)
                {
                    if (item == path)
                    {
                        continue;
                    }
                    this.UnloadScene(item);
                }
            }

            ResourceState resState = new ResourceState(this);
            ulong         reqId    = this.GenReqId();

            resState.req = ResourceRequest.CreateAsyncRequest(m_resLoader, path, this.ResLoadSceneEndCall, reqId);
            ResourceScene resScene = new ResourceScene(resState);

            resScene.TryLoadAsset();

            m_resScenes.Add(resScene.sceneName, resScene);
            return(resScene);
        }
Example #2
0
        public void UnloadScene(string path)
        {
            ResourceScene resScene = this.GetResScene(path);

            if (null != resScene)
            {
                m_resScenes.Remove(path);
                resScene.Release();
            }
        }
Example #3
0
        public void AsyncLoadScene(string path, bool isAddition, System.Action <ResourceScene.LoadResult, string> cb)
        {
            if (!isAddition)
            {
                Dictionary <string, ResourceScene> tmpScens = new Dictionary <string, ResourceScene>(m_resScenes);
                foreach (string item in tmpScens.Keys)
                {
                    if (item == path)
                    {
                        continue;
                    }
                    this.UnloadScene(item);
                }
            }

            ResourceScene resScene = this.GetResScene(path);

            if (null != resScene)
            {
                resScene.isAddition = isAddition;

                // 不存在Fail和Released的情况,因为函数逻辑会马上把这些情况的resScene移出m_resScenes
                // 不存在Inited的情况,因为所有的resScene一创建马上就TryLoadAssset了
                if (resScene.isLoading)
                {
                    if (null != resScene.cb)
                    {
                        resScene.cb(ResourceScene.LoadResult.Cancel, resScene.sceneName);
                        resScene.SetCb(cb);
                    }
                }
                else if (resScene.isLoaded)
                {
                    resScene.ReloadScene(cb);
                }
            }
            else
            {
                ResourceState resState = new ResourceState(this);
                ulong         reqId    = this.GenReqId();
                resState.req = ResourceRequest.CreateAsyncRequest(m_resLoader, path, this.ResLoadSceneEndCall, reqId);
                resScene     = new ResourceScene(resState);
                resScene.SetCb(cb);
                m_resScenes.Add(resScene.sceneName, resScene);
                resScene.TryLoadAsset();
            }
        }
Example #4
0
        public void ResLoadSceneEndCall(ResourceRequest req)
        {
            ResourceScene resScene = this.GetResScene(req.path);

            if (null != resScene && null != resScene.resState &&
                null != resScene.resState.req &&
                req.id == resScene.resState.req.id)
            {
                if (!req.isLoaded)
                {
                    resScene.SetLoadAssetFail();
                    m_resScenes.Remove(req.path);
                }
                else
                {
                    resScene.TryLoadScene();
                }
            }
            else
            {
                req.UnloadRes();
            }
        }
Example #5
0
 public ResourceScene CoLoadScene(string path, bool isAddition)
 {
     ResourceScene ret = m_loader.CoLoadScene(path, isAddition);
     return ret;
 }