Esempio n. 1
0
        /// <summary>
        /// 增加蒙皮信息
        /// </summary>
        /// <param name="entity">要换装的实体</param>
        /// <param name="assetName">要换装的资源名称</param>
        public void AddSkinnedMesh(Entity entity, string assetName)
        {
            AvtarInfo avtarInfo = null;

            if (!m_AvtarInfos.TryGetValue(entity, out avtarInfo))
            {
                avtarInfo = new AvtarInfo(entity, this);
                m_AvtarInfos.Add(entity, avtarInfo);
            }

            if (avtarInfo.HasSkinnedMesh(assetName))
            {
                Log.Error("SkinnedMesh {0} is already added !", assetName);
                return;
            }

            AssetObject assetObject = m_AssetPool.Spawn(assetName);

            if (assetObject == null)
            {
                GameEntry.Resource.LoadAsset(assetName, typeof(UnityEngine.Object), Constant.AssetPriority.AvtarAsset, m_LoadAssetCallbacks, new LoadAvtarInfo(avtarInfo));
            }
            else
            {
                InternalAddSkinnedMesh(avtarInfo, assetObject);
            }
        }
Esempio n. 2
0
        /// <summary>
        /// 设置图片
        /// </summary>
        /// <param name="targetImage">目标图片</param>
        /// <param name="assetName">资源名称</param>
        /// <param name="setNativeSize">自适应大小</param>
        public void SetImage(Image targetImage, string assetName, bool setNativeSize)
        {
            AssetObject assetObject = m_AssetPool.Spawn(assetName);

            if (assetObject == null)
            {
                GameEntry.Resource.LoadAsset(assetName, typeof(UnityEngine.Object), Constant.AssetPriority.TextureAsset, m_LoadAssetCallbacks, new LoadTextureInfo(targetImage, setNativeSize));
            }
            else
            {
                InternalSetImage(targetImage, assetObject, setNativeSize);
            }
        }
Esempio n. 3
0
        /// <summary>
        /// 打开界面
        /// </summary>
        /// <param name="uiFormAssetName">界面资源名称</param>
        /// <param name="uiGroupName">界面组名称</param>
        /// <param name="priority">加载界面资源的优先级</param>
        /// <param name="pauseCoveredUIForm">是否暂停被覆盖的界面</param>
        /// <param name="userData">用户自定义数据</param>
        /// <returns>界面的序列编号</returns>
        public int OpenUIForm(string uiFormAssetName, string uiGroupName, int priority, bool pauseCoveredUIForm, object userData)
        {
            if (string.IsNullOrEmpty(uiFormAssetName))
            {
                throw new Exception("UI form asset name is invalid.");
            }

            if (string.IsNullOrEmpty(uiGroupName))
            {
                throw new Exception("UI group name is invalid.");
            }

            UIGroup uiGroup = GetUIGroup(uiGroupName);

            if (uiGroup == null)
            {
                throw new Exception(TextUtil.Format("UI group '{0}' is not exist.", uiGroupName));
            }

            int serialId = m_Serial++;
            UIFormInstanceObject uiFormInstanceObject = m_InstancePool.Spawn(uiFormAssetName);

            if (uiFormInstanceObject == null)
            {
                m_UIFormsBeingLoaded.Add(serialId, uiFormAssetName);
                GameEntry.Resource.LoadAsset(uiFormAssetName, typeof(GameObject), priority, m_LoadAssetCallbacks, new OpenUIFormInfo(serialId, uiGroup, pauseCoveredUIForm, userData));
            }
            else
            {
                InternalOpenUIForm(serialId, uiFormAssetName, uiGroup, uiFormInstanceObject.Target, pauseCoveredUIForm, false, 0f, userData);
            }

            return(serialId);
        }
Esempio n. 4
0
        /// <summary>
        /// 打开界面。
        /// </summary>
        /// <param name="uiFormTypeId">界面类型编号。</param>
        /// <param name="uiFormAssetName">界面资源名称。</param>
        /// <param name="uiGroupName">界面组名称。</param>
        /// <param name="pauseCoveredUIForm">是否暂停被覆盖的界面。</param>
        /// <param name="userData">用户自定义数据。</param>
        public void OpenUIForm(int uiFormTypeId, string uiFormAssetName, string uiGroupName, bool pauseCoveredUIForm, object userData)
        {
            if (m_ResourceManager == null)
            {
                throw new GameFrameworkException("You must set resource manager first.");
            }

            if (m_UIFormHelper == null)
            {
                throw new GameFrameworkException("You must set UI form helper first.");
            }

            UIGroup uiGroup = GetUIGroup(uiGroupName) as UIGroup;

            if (uiGroup == null)
            {
                throw new GameFrameworkException(string.Format("UI group '{0}' is not exist.", uiGroupName));
            }

            UIFormInstanceObject uiFormInstanceObject = m_InstancePool.Spawn(uiFormAssetName);

            if (uiFormInstanceObject == null)
            {
                m_ResourceManager.InstantiateAsset(uiFormAssetName, m_InstantiateAssetCallbacks, new OpenUIFormInfo(uiFormTypeId, uiGroup, pauseCoveredUIForm, userData));
                return;
            }

            InternalOpenUIForm(uiFormTypeId, uiFormAssetName, uiGroup, uiFormInstanceObject.Target, pauseCoveredUIForm, false, 0f, userData);
        }
Esempio n. 5
0
        private void OnGUI()
        {
            if (GUILayout.Button("Click1"))
            {
                if (m_IObjectPoo01.CanSpawn("对象池01_对象1"))
                {
                    Debug.Log((m_TempObj = m_IObjectPoo01.Spawn("对象池01_对象1").Target as GameObject).name);
                }
            }



            if (GUILayout.Button("Click2"))
            {
                m_IObjectPoo01.Unspawn(m_TempObj);
            }


            if (GUILayout.Button("Click3"))
            {
                m_Target = gameObject.Spawn <OPDemo>("对象池03_对象1", "对象1");
            }

            if (GUILayout.Button("Click4"))
            {
                m_Target.Unspawn <OPDemo>("对象池03_对象1");
            }
        }
Esempio n. 6
0
        /// <summary>
        /// 打开界面。
        /// </summary>
        /// <param name="uiFormAssetName">界面资源名称。</param>
        /// <param name="uiGroupName">界面组名称。</param>
        /// <param name="uiGroupDepth">界面组深度</param>
        /// <param name="pauseCoveredUIForm">是否暂停被覆盖的界面。</param>
        /// <param name="userData">用户自定义数据。</param>
        public void OpenUIForm(string uiFormAssetName, string uiGroupName, int uiGroupDepth, bool pauseCoveredUIForm, object userData)
        {
            Guard.Verify <ArgumentException>(m_UIFormHelper == null, "You must set UI form helper first.");
            Guard.NotEmptyOrNull(uiFormAssetName, "UI form asset name is invalid.");
            Guard.NotEmptyOrNull(uiGroupName, "UI group name is invalid.");

            UIGroup uiGroup = (UIGroup)GetUIGroup(uiGroupName);

            if (uiGroup == null)
            {
                uiGroup = (UIGroup)AddUIGroup(uiGroupName, uiGroupDepth);
            }

            if (HasUIForm(uiFormAssetName))
            {
                return;
            }

            UIFormInstanceObject uiFormInstanceObject = m_InstancePool.Spawn(uiFormAssetName);

            if (uiFormInstanceObject == null)
            {
                // 把资源加载抽到这里,为后续异步加载资源与实例化分开处理
                var uiFormInstance = m_UIFormHelper.InstantiateUIForm(ResourceUtils.Load(uiFormAssetName));
                uiFormInstanceObject = new UIFormInstanceObject(uiFormAssetName, uiFormInstance, m_UIFormHelper);
                m_InstancePool.Register(uiFormInstanceObject, true);

                InnerOpenUIForm(uiFormAssetName, uiGroup, uiFormInstanceObject.Target, pauseCoveredUIForm, true, userData);
            }
            else
            {
                InnerOpenUIForm(uiFormAssetName, uiGroup, uiFormInstanceObject.Target, pauseCoveredUIForm, false, userData);
            }
        }
Esempio n. 7
0
        public int OpenUIForm(string uiFormAssetName, string uiGroupName, int priority, bool pauseCoveredUIForm, string luaRelativePath, object userData)
        {
            if (m_ResourceManager == null)
            {
                throw new GameFrameworkException("You must set resource manager first.");
            }

            if (m_UIFormHelper == null)
            {
                throw new GameFrameworkException("You must set UI form helper first.");
            }

            if (string.IsNullOrEmpty(uiFormAssetName))
            {
                throw new GameFrameworkException("UI form asset name is invalid.");
            }

            if (string.IsNullOrEmpty(uiGroupName))
            {
                throw new GameFrameworkException("UI group name is invalid.");
            }

            UIGroup uiGroup = (UIGroup)GetUIGroup(uiGroupName);

            if (uiGroup == null)
            {
                throw new GameFrameworkException(Utility.Text.Format("UI group '{0}' is not exist.", uiGroupName));
            }

            int serialId = ++m_Serial;
            UIFormInstanceObject uiFormInstanceObject = m_InstancePool.Spawn(uiFormAssetName);

            if (uiFormInstanceObject == null)
            {
                m_UIFormsBeingLoaded.Add(serialId, uiFormAssetName);
                m_ResourceManager.LoadAsset(uiFormAssetName, priority, m_LoadAssetCallbacks, OpenUIFormInfo.Create(serialId, uiGroup, pauseCoveredUIForm, luaRelativePath, userData));
            }
            else
            {
                InternalOpenUIForm(serialId, uiFormAssetName, uiGroup, uiFormInstanceObject.Target, pauseCoveredUIForm, false, 0f, luaRelativePath, userData);
            }

            return(serialId);
        }
Esempio n. 8
0
        public void Spawn_Successfully()
        {
            var entity = Substitute.For <PoolableEntity>();

            _pool.Spawn().Returns(entity);

            Assert.AreEqual(entity, _poolService.Spawn <PoolableEntity>());

            _pool.Received().Spawn();
        }
Esempio n. 9
0
    private bool TrySpawn()
    {
        if (enemyPool == null)
        {
            return(false);
        }

        Enemy enemy = enemyPool.Spawn(nextSpawnParams);

        return(enemy != null);
    }
Esempio n. 10
0
            public object GetABFromPool(string resourceName)
            {
                ResourceObject resourceObject = m_ResourcePool.Spawn(resourceName);
                AssetBundle    ab             = null;

                if (resourceObject != null)
                {
                    ab = resourceObject.Target as AssetBundle;
                }
                return(ab);
            }
Esempio n. 11
0
        /// <summary>
        /// 设置控制器
        /// </summary>
        /// <param name="entity">要设置的状态机</param>
        /// <param name="assetName">要设置的资源名称</param>
        public void SetController(Animator animator, string assetName)
        {
            AssetObject assetObject = m_AssetPool.Spawn(assetName);

            if (assetObject == null)
            {
                GameEntry.Resource.LoadAsset(assetName, typeof(UnityEngine.Object), Constant.AssetPriority.TextureAsset, m_LoadAssetCallbacks, new LoadControllerInfo(animator));
            }
            else
            {
                InternalSetController(animator, assetObject);
            }
        }
Esempio n. 12
0
    public Bullet Spawn()
    {
        Bullet bullet = m_BulletPool.Spawn();

        if (bullet == null)
        {
            string     name = "bullet" + m_serial++;
            GameObject obj  = GameObject.Instantiate(m_prefab);
            obj.name = name;
            bullet   = Bullet.Create(bulletAssetName, obj);
            m_BulletPool.Register(bullet, true);
        }
        return(bullet);
    }
Esempio n. 13
0
        private IntentItem CreateIntentItem(Entity entity)
        {
            IntentItem       intentItem       = null;
            IntentItemObject intentItemObject = m_IntentObjectPool.Spawn();

            if (intentItemObject != null)
            {
                intentItem = (IntentItem)intentItemObject.Target;
            }
            else
            {
                intentItem = Instantiate(m_IntentItemTemplate, m_WidgetInstanceRoot, false);
                m_IntentObjectPool.Register(IntentItemObject.Create(intentItem), true);
            }
            return(intentItem);
        }
Esempio n. 14
0
        private FlightPathItem CreateFlightPathItem()
        {
            FlightPathItem   pathItem         = null;
            FlightPathObject flightPathObject = _FlightPathObjectPool.Spawn();

            if (flightPathObject != null)
            {
                pathItem = (FlightPathItem)flightPathObject.Target;
            }
            else
            {
                pathItem = Instantiate(_FlightPathItemTemplate);
                _FlightPathObjectPool.Register(new FlightPathObject(pathItem), true);
            }

            return(pathItem);
        }
Esempio n. 15
0
        private HPBarItem CreateHPBarItem(Entity entity)
        {
            HPBarItem       hpBarItem;
            HPBarItemObject hpBarItemObject = m_HPBarItemObjectPool.Spawn();

            if (hpBarItemObject != null)
            {
                hpBarItem = (HPBarItem)hpBarItemObject.Target;
            }
            else
            {
                hpBarItem = Instantiate(m_HPBarItemTemplate, m_WidgetInstanceRoot, false);
                m_HPBarItemObjectPool.Register(HPBarItemObject.Create(hpBarItem), true);
            }

            return(hpBarItem);
        }
Esempio n. 16
0
        /// <summary>
        /// 根据名称获取实例化的GameObject
        /// </summary>
        /// <param name="name">GameObject的名称</param>
        /// <returns>实例化的GameObject</returns>
        public GameObject Spawn(string name)
        {
            GameObject gameObject = null;

            InstanceGameObject instanceGameObject = m_InstanceGameObjectPool.Spawn(name);

            if (instanceGameObject != null)
            {
                gameObject = (GameObject)instanceGameObject.Target;
            }
            else
            {
                gameObject = UnityEngine.Object.Instantiate(m_GameobjectAsset);
                m_InstanceGameObjectPool.Register(new InstanceGameObject(name, gameObject), true);
            }
            return(gameObject);
        }
Esempio n. 17
0
        /// <summary>
        /// 打开界面。
        /// </summary>
        /// <param name="uiFormAssetName">界面资源名称。</param>
        /// <param name="uiGroupName">界面组名称。</param>
        /// <param name="pauseCoveredUIForm">是否暂停被覆盖的界面。</param>
        /// <param name="userData">用户自定义数据。</param>
        /// <returns>界面的序列编号。</returns>
        public int OpenUIForm(string uiFormAssetName, string uiGroupName, bool pauseCoveredUIForm, object userData)
        {
            if (m_ResourceManager == null)
            {
                throw new System.Exception("You must set resource manager first.");
            }

            if (m_UIFormHelper == null)
            {
                throw new System.Exception("You must set UI form helper first.");
            }

            if (string.IsNullOrEmpty(uiFormAssetName))
            {
                throw new System.Exception("UI form asset name is invalid.");
            }

            if (string.IsNullOrEmpty(uiGroupName))
            {
                throw new System.Exception("UI group name is invalid.");
            }

            UIGroup uiGroup = (UIGroup)GetUIGroup(uiGroupName);

            if (uiGroup == null)
            {
                throw new System.Exception(string.Format("UI group '{0}' is not exist.", uiGroupName));
            }

            int serialId = m_Serial++;
            UIFormInstanceObject uiFormInstanceObject = m_InstancePool.Spawn(uiFormAssetName);

            if (uiFormInstanceObject == null)
            {
                m_UIFormsBeingLoaded.Add(serialId);
                m_UIFormAssetNamesBeingLoaded.Add(uiFormAssetName);
                m_ResourceManager.LoadAsset(uiFormAssetName, m_LoadAssetCallbacks, new OpenUIFormInfo(serialId, uiGroup, pauseCoveredUIForm, userData));
            }
            else
            {
                InternalOpenUIForm(serialId, uiFormAssetName, uiGroup, uiFormInstanceObject.Target, pauseCoveredUIForm, false, 0f, userData);
            }

            return(serialId);
        }
Esempio n. 18
0
        public int OpenUIForm(string uiFormAssetName, string uiGroupName, object userData)
        {
            UIGroup uig = (UIGroup)GetUIGroup(name);

            int serialId = m_Serial++;
            UIFormInstanceObject uiFormInstanceObject = m_InstancePool.Spawn(uiFormAssetName);
            if (uiFormInstanceObject == null)
            {
                m_UIFormsBeingLoaded.Add(serialId);
                m_UIFormAssetNamesBeingLoaded.Add(uiFormAssetName);
                m_ResourceManager.LoadAsset(uiFormAssetName, m_LoadAssetCallback, new OpenUIFormInfo(serialId, uiGroupName, userData));
            }
            else
            {
                InternalOpenUIForm(serialId, uiFormAssetName, uiGroupName, uiFormInstanceObject.Target);
            }

            return serialId;
        }
Esempio n. 19
0
        /// <summary>
        /// 打开界面。
        /// </summary>
        /// <param name="uiFormAssetName">界面资源名称。</param>
        /// <param name="userData">用户自定义数据。</param>
        /// <returns>界面的序列编号。</returns>
        public void OpenUIForm(string uiFormAssetName, object userData)
        {
            if (string.IsNullOrEmpty(uiFormAssetName))
            {
                throw new LufyException("UI form asset name is invalid.");
            }

            if (m_ResManager == null)
            {
                throw new LufyException("ResManager is invalid.");
            }

            if (m_PoolManager == null)
            {
                throw new LufyException("ObjectPoolManager is invalid.");
            }

            UIFormLogic uiFormInstanceObject = null;

            m_cachedForms.TryGetValue(uiFormAssetName, out uiFormInstanceObject);
            if (uiFormInstanceObject == null)
            {
                UIFormObject obj = m_InstancePool.Spawn(uiFormAssetName);
                uiFormInstanceObject = obj?.Target as UIFormLogic;
                if (uiFormInstanceObject == null)
                {
                    m_ResManager.LoadAsset(uiFormAssetName, m_LoadAssetCallbacks, userData);
                }
                else
                {
                    m_cachedForms.Add(uiFormAssetName, uiFormInstanceObject);

                    InternalOpenUIForm(uiFormAssetName, uiFormInstanceObject, 0, userData);
                }
            }
            else
            {
                m_formList.Remove(uiFormInstanceObject);

                InternalOpenUIForm(uiFormAssetName, uiFormInstanceObject, 0, userData);
            }
        }
Esempio n. 20
0
        private HPBarItem CreateHPBarItem(Entity entity)
        {
            HPBarItem       hpBarItem       = null;
            HPBarItemObject hpBarItemObject = m_HPBarItemObjectPool.Spawn();

            if (hpBarItemObject != null)
            {
                hpBarItem = (HPBarItem)hpBarItemObject.Target;
            }
            else
            {
                hpBarItem = Instantiate(m_HPBarItemTemplate);
                Transform transform = hpBarItem.GetComponent <Transform>();
                transform.SetParent(m_HPBarInstanceRoot);
                transform.localScale = Vector3.one;
                m_HPBarItemObjectPool.Register(HPBarItemObject.Create(hpBarItem), true);
            }

            return(hpBarItem);
        }
Esempio n. 21
0
        private DisplayItem CreateDisplayItem(Entity entity)
        {
            DisplayItem       displayItem       = null;
            DisplayItemObject displayItemObject = m_DisplayItemObjectPool.Spawn();

            if (displayItemObject != null)
            {
                displayItem = (DisplayItem)displayItemObject.Target;
            }
            else
            {
                displayItem = Instantiate(m_DisplayItemTemplate);
                Transform transform = displayItem.GetComponent <Transform>();
                transform.SetParent(m_DisplayInstanceRoot);
                transform.localScale = Vector3.one;
                m_DisplayItemObjectPool.Register(DisplayItemObject.Create(displayItem), true);
            }

            return(displayItem);
        }
Esempio n. 22
0
        private ExpBarItem CreateExpBarItem(Entity entity)
        {
            ExpBarItem       expBarItem       = null;
            ExpBarItemObject expBarItemObject = m_ExpBarItemObjectPool.Spawn();

            if (expBarItemObject != null)
            {
                expBarItem = (ExpBarItem)expBarItemObject.Target;
            }
            else
            {
                expBarItem = Instantiate(m_ExpBarItemTemplate);
                Transform transform = expBarItem.GetComponent <Transform>();
                transform.SetParent(m_ExpBarInstanceRoot);
                transform.localScale = Vector3.one;
                m_ExpBarItemObjectPool.Register(ExpBarItemObject.Create(expBarItem), true);
            }

            return(expBarItem);
        }
Esempio n. 23
0
        /// <summary>
        /// 创建定时器
        /// </summary>
        /// <returns></returns>
        public TimeAction CreateTimeAction()
        {
            TimeAction timeAction = null;

            TimeActionObject timeActionObject = m_TimeActionObjectPool.Spawn();

            if (timeActionObject != null)
            {
                timeAction = (TimeAction)timeActionObject.Target;
            }
            else
            {
                timeAction = new TimeAction();
                TimeActionObject actionObject = new TimeActionObject();
                actionObject.Initialize(timeAction);
                m_TimeActionObjectPool.Register(actionObject, true);
            }
            timeAction.Reset();

            return(timeAction);
        }
Esempio n. 24
0
    public void Fire()
    {
        if (!CanFire())
        {
            return;
        }

        SpawnParams spawnParams = new SpawnParams();

        spawnParams.rotation   = Quaternion.identity;
        spawnParams.spawnPoint = spawnPointOwner.transform.position;

        Bullet bullet = bulletPool.Spawn(spawnParams);

        if (!bullet)
        {
            return;
        }

        bullet.Velocity          = (spawnPointOwner.transform.position - transform.position).normalized * bulletVelocity;
        timeSinceLastFireSeconds = 0.0f;
    }
        //创建实体血条
        private HPBarItem CreateHPbarItem()
        {
            HPBarItem hpBarItem;
            //先从对象池获取
            HPBarItemObject hpBarItemObject = m_HPBarItemObjectPool.Spawn();

            if (hpBarItemObject != null)
            {
                hpBarItem = hpBarItemObject.Target as HPBarItem;
            }
            else
            {
                //对象池中不存在,则创建新的
                ReferenceCollector referenceCollector = Object.Instantiate(m_HPBarItemTemplate).GetComponent(typeof(ReferenceCollector)) as ReferenceCollector;
                hpBarItem = new HPBarItem(referenceCollector);

                referenceCollector.CachedTransform.SetParent(m_HPBarInstanceRoot, false);
                m_HPBarItemObjectPool.Register(new HPBarItemObject(hpBarItem), true);
            }

            return(hpBarItem);
        }
Esempio n. 26
0
        /// <summary>
        /// Spawn 对象
        /// </summary>
        /// <param name="objAssetName">资源名称 带路径名 </param>
        /// <returns></returns>
        public async Task <UnityEngine.GameObject> Spawn(string objAssetName)
        {
            UnityEngine.GameObject target       = null;
            NormalObject           normalObject = m_InstancePool.Spawn(objAssetName);

            if (normalObject == null)
            {
                //UnityEngine.GameObject objAsset = ResourceManager.Instance.LoadAssetDataPath<UnityEngine.GameObject>(objAssetName);
                UnityEngine.GameObject objAsset = await GameFrameEntry.GetModule <AssetbundleModule>().LoadPrefab(objAssetName);

                if (objAsset != null)
                {
                    normalObject = new NormalObject(objAssetName, null, objAsset, m_UnspawnParent);
                    m_InstancePool.Register(normalObject, true);
                }
            }
            if (normalObject != null)
            {
                target = normalObject.Target as UnityEngine.GameObject;
            }
            return(target);
        }
            public object GetAssetBundle(string assetBundleName)
            {
                if (string.IsNullOrEmpty(assetBundleName))
                {
                    return(false);
                }

                int childNamePosition = assetBundleName.IndexOf("Assets/");

                if (childNamePosition + 1 >= assetBundleName.Length && childNamePosition != -1)
                {
                    return(false);
                }

                string resourceChildName = childNamePosition != -1 ? assetBundleName.Substring(childNamePosition + 7).ToLower() : assetBundleName.ToLower();

                ResourceObject resourceObject = m_ResourcePool.Spawn(resourceChildName);

                if (resourceObject != null)
                {
                    return(resourceObject.Target);
                }
                return(null);
            }
 public EntityInstanceObject SpawnEntityInstanceObject(string name)
 {
     return(m_InstancePool.Spawn(name));
 }
Esempio n. 29
0
                /// <summary>
                /// 加载资源代理轮询。
                /// </summary>
                /// <param name="elapseSeconds">逻辑流逝时间,以秒为单位。</param>
                /// <param name="realElapseSeconds">真实流逝时间,以秒为单位。</param>
                public void Update(float elapseSeconds, float realElapseSeconds)
                {
                    if (m_WaitingType == WaitingType.None)
                    {
                        return;
                    }

                    if (m_WaitingType == WaitingType.WaitForAsset)
                    {
                        if (IsAssetLoading(m_Task.AssetName))
                        {
                            return;
                        }

                        m_WaitingType = WaitingType.None;
                        AssetObject assetObject = m_AssetPool.Spawn(m_Task.AssetName);
                        if (assetObject == null)
                        {
                            TryLoadAsset();
                            return;
                        }

                        OnAssetObjectReady(assetObject);
                        return;
                    }

                    if (m_WaitingType == WaitingType.WaitForDependencyAsset)
                    {
                        LinkedListNode <string> current = m_LoadingDependencyAssetNames.First;
                        while (current != null)
                        {
                            if (!IsAssetLoading(current.Value))
                            {
                                LinkedListNode <string> next = current.Next;
                                if (!m_AssetPool.CanSpawn(current.Value))
                                {
                                    OnError(LoadResourceStatus.DependencyError, string.Format("Can not find dependency asset object named '{0}'.", current.Value));
                                    return;
                                }

                                m_LoadingDependencyAssetNames.Remove(current);
                                current = next;
                                continue;
                            }

                            current = current.Next;
                        }

                        if (m_LoadingDependencyAssetNames.Count > 0)
                        {
                            return;
                        }

                        m_WaitingType = WaitingType.None;
                        OnDependencyAssetReady();
                        return;
                    }

                    if (m_WaitingType == WaitingType.WaitForResource)
                    {
                        if (IsResourceLoading(m_Task.ResourceInfo.ResourceName.Name))
                        {
                            return;
                        }

                        ResourceObject resourceObject = m_ResourcePool.Spawn(m_Task.ResourceInfo.ResourceName.Name);
                        if (resourceObject == null)
                        {
                            OnError(LoadResourceStatus.DependencyError, string.Format("Can not find resource object named '{0}'.", m_Task.ResourceInfo.ResourceName.Name));
                            return;
                        }

                        m_WaitingType = WaitingType.None;
                        OnResourceObjectReady(resourceObject);
                        return;
                    }
                }
 public ItemInstanceObject SpawnItemInstanceObject(string name)
 {
     return(m_InstancePool.Spawn(name));
 }