コード例 #1
0
        /*
         * private void ClearLoader(int instanceId, LoaderGroupSubNodeType subType) {
         * if (m_LoadList == null || m_LoadMap == null)
         * return;
         * var loader = this.Loader;
         * if (loader == null)
         * return;
         * var node = m_LoadList.First;
         * while (node != null) {
         * var next = node.Next;
         * var n = node.Value;
         * if (n != null && n.ClearLoader(instanceId, loader, subType)) {
         *  m_LoadList.Remove(node);
         *  LoaderGroupKey key = new LoaderGroupKey(n.FileName, n.Type);
         *  m_LoadMap.Remove(key);
         *  DestroyNodeByPool(n);
         * }
         * node = next;
         * }
         * }
         */

        public void LoadAll(int instanceId, LoaderGroupSubNodeType subType)
        {
            if (m_LoadList == null || m_LoadMap == null)
            {
                return;
            }
            var loader = this.Loader;

            if (loader == null)
            {
                return;
            }
            var node = m_LoadList.First;

            while (node != null)
            {
                var next = node.Next;
                var n    = node.Value;
                if (n != null && n.LoadAll(instanceId, loader, subType))
                {
                    if (n.LoadCount <= 0)
                    {
                        m_LoadList.Remove(node);
                        LoaderGroupKey key = new LoaderGroupKey(n.FileName, n.Type);
                        m_LoadMap.Remove(key);
                        DestroyNodeByPool(n);
                    }
                }
                node = next;
            }
        }
コード例 #2
0
        /*
         * public bool ClearLoader(int instanceId, BaseResLoader loader, LoaderGroupSubNodeType subType) {
         * if (m_SubNodeList == null || loader == null)
         * return false;
         * var node = m_SubNodeList.First;
         * while (node != null) {
         * var next = node.Next;
         * var n = node.Value;
         * if (n != null && n.IsVaild && n.target.GetInstanceID() == instanceId) {
         *  if (!IsLoadAllMustLoad(n.type, subType)) {
         *      m_SubNodeList.Remove(node);
         *      DestroySubNodeByPool(n);
         *      return true;
         *  }
         * }
         * node = next;
         * }
         * return false;
         * }
         */

        public bool LoadAll(int instanceId, BaseResLoader loader, LoaderGroupSubNodeType subType)
        {
            if (m_SubNodeList == null || loader == null)
            {
                return(false);
            }
            var node = m_SubNodeList.First;

            while (node != null)
            {
                var next = node.Next;
                var n    = node.Value;
                if (n != null && n.IsVaild && n.target.GetInstanceID() == instanceId)
                {
                    // 类型一样直接不加载
                    if (IsLoadAllMustLoad(n.type, subType))
                    {
                        DoLoad(loader, n);
                    }
                    m_SubNodeList.Remove(node);
                    DestroySubNodeByPool(n);
                    return(true);
                }
                node = next;
            }
            return(false);
        }
コード例 #3
0
        public void CreateLoaderGroupNode(UnityEngine.Object target, string fileName,
                                          LoaderGroupSubNodeType type,
                                          System.Object param = null)
        {
            if (target == null || string.IsNullOrEmpty(fileName))
            {
                return;
            }

            var nodeType = GetLoaderGroupNodeType(type);

            if (nodeType == LoaderGroupNodeType.None)
            {
                return;
            }

            var             loadMap = this.LoadMap;
            LoaderGroupKey  key     = new LoaderGroupKey(fileName, nodeType);
            LoaderGroupNode node;

            if (loadMap.TryGetValue(key, out node))
            {
                node.AddSubNode(type, target, param);
                return;
            }

            LoaderGroupNode ret = CreateNodeByPool(fileName, nodeType);

            ret.AddSubNode(type, target, param);

            AddLoadNode(key, ret);
        }
コード例 #4
0
        private static LoaderGroupSubNode CreateSubNodeByPool(LoaderGroupSubNodeType type, UnityEngine.Object target)
        {
            InitPool();
            var ret = m_SubNodePool.GetObject();

            ret.Init(type, target);
            return(ret);
        }
コード例 #5
0
        private LoaderGroupNodeType GetLoaderGroupNodeType(LoaderGroupSubNodeType subType)
        {
            LoaderGroupNodeType ret = LoaderGroupNodeType.None;

            switch (subType)
            {
            case LoaderGroupSubNodeType.MeshRenderer_MainTexture:
            case LoaderGroupSubNodeType.MeshRenderer_Texture:
            case LoaderGroupSubNodeType.UI2DSprite_MainTexture:
            case LoaderGroupSubNodeType.UITexture_MainTexture:
            case LoaderGroupSubNodeType.UISprite_MainTexture:
            case LoaderGroupSubNodeType.UITexture_Texture:
                ret = LoaderGroupNodeType.Texture;
                break;

            case LoaderGroupSubNodeType.UI2DSprite_Material:
            case LoaderGroupSubNodeType.SpriteRenderer_Material:
            case LoaderGroupSubNodeType.MeshRenderer_Material:
            case LoaderGroupSubNodeType.UISprite_Material:
            case LoaderGroupSubNodeType.UITexture_Material:
                ret = LoaderGroupNodeType.Material;
                break;

            case LoaderGroupSubNodeType.SkeletonAnimation_ScriptObject:
                ret = LoaderGroupNodeType.Skeleton;
                break;

            case LoaderGroupSubNodeType.TextMesh_Font:
                ret = LoaderGroupNodeType.Font;
                break;

            case LoaderGroupSubNodeType.SpriteRenderer_SpriteData:
            case LoaderGroupSubNodeType.UI2DSprite_SpriteData:
                ret = LoaderGroupNodeType.SpriteData;
                break;

            case LoaderGroupSubNodeType.UISprite_Atals:
                ret = LoaderGroupNodeType.Atals;
                break;

            default:
                Debug.LogErrorFormat("[ErrorSubNodeType] {0:D}", (int)subType);
                break;
            }

            return(ret);
        }
コード例 #6
0
        public void AddSubNode(LoaderGroupSubNodeType type, UnityEngine.Object target, System.Object param)
        {
            if (m_SubNodeList == null)
            {
                m_SubNodeList = new LinkedList <LoaderGroupSubNode>();
            }

            // 防止重复加入
            if (IsFind(type, target))
            {
                return;
            }

            LoaderGroupSubNode subNode = CreateSubNodeByPool(type, target, param);

            m_SubNodeList.AddLast(subNode.LinkNode);
        }
コード例 #7
0
        private bool IsFind(LoaderGroupSubNodeType type, UnityEngine.Object target)
        {
            if (m_SubNodeList == null || m_SubNodeList.Count <= 0)
            {
                return(false);
            }
            var node = m_SubNodeList.First;

            while (node != null)
            {
                var subNode = node.Value;
                if (subNode != null && subNode.IsVaild)
                {
                    if (subNode.type == type && subNode.target == target)
                    {
                        return(true);
                    }
                }
                node = node.Next;
            }
            return(false);
        }
コード例 #8
0
 public void Init(LoaderGroupSubNodeType type, UnityEngine.Object target, System.Object param)
 {
     this.type   = type;
     this.target = target;
     m_Param     = param;
 }
コード例 #9
0
 public LoaderGroupSubNode(LoaderGroupSubNodeType type, UnityEngine.Object target, System.Object param)
 {
     Init(type, target, param);
 }
コード例 #10
0
        protected bool DoNGUILoad(BaseResLoader loader, LoaderGroupSubNode node)
        {
            if (loader == null || node == null || !node.IsVaild)
            {
                return(false);
            }

            string fileName = this.FileName;

            if (string.IsNullOrEmpty(fileName))
            {
                return(false);
            }

            var nguiLoader = loader as NGUIResLoader;

            if (nguiLoader == null)
            {
                return(false);
            }

            bool ret = true;
            LoaderGroupSubNodeType type = node.type;

            switch (type)
            {
            case LoaderGroupSubNodeType.UITexture_MainTexture:
                var t1 = node.uiTexture;
                if (t1 == null)
                {
                    return(true);
                }
                nguiLoader.LoadMainTexture(t1, fileName);
                break;

            case LoaderGroupSubNodeType.UITexture_Material:
                var t2 = node.uiTexture;
                if (t2 == null)
                {
                    return(true);
                }
                nguiLoader.LoadMaterial(t2, fileName);
                break;

            case LoaderGroupSubNodeType.UITexture_Texture:
                var t3 = node.uiTexture;
                if (t3 == null)
                {
                    return(true);
                }
                string matName = node.Param as string;
                if (string.IsNullOrEmpty(matName))
                {
                    return(true);
                }
                nguiLoader.LoadTexture(t3, fileName, matName);
                break;

            case LoaderGroupSubNodeType.UISprite_Atals:
                var sp1 = node.uiSprite;
                if (sp1 == null)
                {
                    return(true);
                }
                if (nguiLoader.LoadAltas(sp1, fileName))
                {
                    /*
                     * string spriteName = this.Param as string;
                     * if (!string.IsNullOrEmpty(spriteName))
                     *  sp1.spriteName = spriteName;
                     */
                    // 判断是否有SpriteAnimation
                    RefreshSpriteAnimiate(sp1);
                }
                break;

            case LoaderGroupSubNodeType.UISprite_Material:
                var sp2 = node.uiSprite;
                if (sp2 == null)
                {
                    return(true);
                }
                nguiLoader.LoadMaterial(sp2, fileName);
                break;

            case LoaderGroupSubNodeType.UISprite_MainTexture:
                var sp3 = node.uiSprite;
                if (sp3 == null)
                {
                    return(true);
                }
                nguiLoader.LoadMainTexture(sp3, fileName);
                break;

            case LoaderGroupSubNodeType.UI2DSprite_MainTexture:
                var sp4 = node.ui2DSprite;
                if (sp4 == null)
                {
                    return(true);
                }
                nguiLoader.LoadMainTexture(sp4, fileName);
                break;

            case LoaderGroupSubNodeType.UI2DSprite_SpriteData:
                var sp5 = node.ui2DSprite;
                if (sp5 == null)
                {
                    return(true);
                }
                string spName1 = node.Param as string;
                if (!string.IsNullOrEmpty(spName1))
                {
                    nguiLoader.LoadSprite(sp5, fileName, spName1);
                }
                break;

            case LoaderGroupSubNodeType.UI2DSprite_Material:
                var sp6 = node.ui2DSprite;
                if (sp6 == null)
                {
                    return(true);
                }
                nguiLoader.LoadMaterial(sp6, fileName);
                break;

            default:
                ret = false;
                break;
            }
            return(ret);
        }
コード例 #11
0
        private bool IsLoadAllMustLoad(LoaderGroupSubNodeType currentType, LoaderGroupSubNodeType nextType)
        {
            bool ret = currentType != nextType;

            return(ret);
        }
コード例 #12
0
 protected void CreateNGUIGroupNode(UIWidget target, string fileName,
                                    LoaderGroupSubNodeType type, System.Object param = null)
 {
     CreateLoaderGroupNode(target, fileName, type, param);
 }
コード例 #13
0
 public void Init(LoaderGroupSubNodeType type, UnityEngine.Object target)
 {
     this.type   = type;
     this.target = target;
 }
コード例 #14
0
 public LoaderGroupSubNode(LoaderGroupSubNodeType type, UnityEngine.Object target)
 {
     Init(type, target);
 }