public AssetModel get_assets(AssetRequest request)
 {
     return new AssetModel()
                 {
                    
                 };
  }
예제 #2
0
        protected override AssetBase GetAsset(AssetRequest req)
        {
            #if DEBUG
            //m_log.DebugFormat("[GRID ASSET CLIENT]: Querying for {0}", req.AssetID.ToString());
            #endif

            RestClient rc = new RestClient(_assetServerUrl);
            rc.AddResourcePath("assets");
            rc.AddResourcePath(req.AssetID.ToString());

            rc.RequestMethod = "GET";

            Stream s = rc.Request();

            if (s == null)
                return null;

            if (s.Length > 0)
            {
                XmlSerializer xs = new XmlSerializer(typeof (AssetBase));

                return (AssetBase) xs.Deserialize(s);
            }

            return null;
        }
예제 #3
0
        private IEnumerator loadPlayerHeldExperience(PlayerHeldItem playerHeldItem)
        {
            AssetRequest <GameObject> assetRequest = Content.LoadAsync(getPropExperiencePathFromPropId(playerHeldItem.Type));

            yield return(assetRequest);

            GameObject     experience        = UnityEngine.Object.Instantiate(assetRequest.Asset);
            PropExperience spawnedExperience = experience.GetComponent <PropExperience>();

            if (spawnedExperience != null)
            {
                spawnedExperience.InstanceId         = playerHeldItem.CreatorId.ToString();
                spawnedExperience.OwnerId            = playerHeldItem.CreatorId;
                spawnedExperience.IsOwnerLocalPlayer = dataEntityCollection.LocalPlayerSessionId == playerHeldItem.CreatorId;
                spawnedExperience.PropDef            = Props[playerHeldItem.Type];
                GameObject playerObject = getPlayerObject(playerHeldItem.CreatorId);
                if (!(playerObject == null))
                {
                    spawnedExperience.transform.SetParent(playerObject.transform, worldPositionStays: false);
                    spawnedExperience.StartExperience();
                }
            }
        }
        // post: Materialize
        public IHttpActionResult PostMaterializePo(int AssetRequestId)
        {
            string       AssetStatus     = "Materialized";
            var          dbAssetStatusId = db.AssetStatus.Where(c => c.Name.ToUpper() == AssetStatus.ToUpper()).Select(x => x.Id).FirstOrDefault();
            AssetRequest assetRequest    = (from x in db.AssetRequests
                                            where x.Id == AssetRequestId
                                            select x).Single();

            if (assetRequest != null)
            {
                assetRequest.AssetStatusId  = dbAssetStatusId;
                assetRequest.LastModifiedOn = System.DateTime.Now;
                try
                {
                    db.SaveChanges();
                }
                catch (DbUpdateConcurrencyException)
                {
                    throw;
                }
            }
            return(Ok());
        }
예제 #5
0
        public static AssetRequestUnit FindEquivelent(AssetRequest targetRq, AssetRequestUnit refReq)
        {
            var result = targetRq.units.Find((request) => {
                foreach (var newAttribute in refReq.attributes)
                {
                    if (!request.attributes.Contains(newAttribute))
                    {
                        return(false);
                    }
                }
                if (!AGDev.StdUtil.Utilities.CompareNullableString(refReq.assettype, request.assettype))
                {
                    return(false);
                }
                if (!AGDev.StdUtil.Utilities.CompareNullableString(refReq.sname, request.sname))
                {
                    return(false);
                }
                return(true);
            });

            return(result);
        }
        public override IEnumerator PerformFirstPass()
        {
            string dailyChallengesScheduleManifestPath           = DailyChallengeService.GetDateManifestMapPath();
            AssetRequest <DatedManifestMap> scheduleAssetRequest = Content.LoadAsync <DatedManifestMap>(dailyChallengesScheduleManifestPath);

            yield return(scheduleAssetRequest);

            Dictionary <int, ScheduledEventDateDefinition> events = Service.Get <IGameData>().Get <Dictionary <int, ScheduledEventDateDefinition> >();
            ScheduledEventDateDefinition def = null;

            events.TryGetValue(SupportWindow.Id, out def);
            ContentSchedulerService service = new ContentSchedulerService(scheduleAssetRequest.Asset.Map.Keys, PenguinStandardTimeOffsetHours, def);

            Service.Set(service);
            bool   offlineMode  = service.HasSupportEndded();
            string offline_mode = CommandLineArgs.GetValueForKey("offline_mode");

            if (!string.IsNullOrEmpty(offline_mode))
            {
                offlineMode = offline_mode.ToLower().Trim() == "true";
            }
            Service.Get <GameSettings>().SetOfflineMode(offlineMode);
        }
예제 #7
0
    private IEnumerator loadChestPrefab()
    {
        PrefabContentKey          chestContentKey = (!string.IsNullOrEmpty(popupData.MascotName) && popupData.PopupType != DRewardPopup.RewardPopupType.levelUp) ? Service.Get <MascotService>().GetMascot(popupData.MascotName).Definition.RewardPopupChestContentKey : defaultChestKey;
        AssetRequest <GameObject> assetRequest    = Content.LoadAsync(chestContentKey);

        yield return(assetRequest);

        GameObject chestGO = UnityEngine.Object.Instantiate(assetRequest.Asset);

        chestGO.transform.SetParent(ChestParent, worldPositionStays: false);
        RewardChest = chestGO.GetComponent <RewardPopupChest>();
        RewardPopupChest rewardChest = RewardChest;

        rewardChest.ChestLandAction = (System.Action)Delegate.Combine(rewardChest.ChestLandAction, new System.Action(onChestLand));
        string animationTrigger = "LevelUp";

        if (popupData.PopupType == DRewardPopup.RewardPopupType.questComplete || popupData.PopupType == DRewardPopup.RewardPopupType.generic)
        {
            animationTrigger = "Quest";
        }
        ParachuteAnimator.SetTrigger(animationTrigger);
        RewardChest.ChestAnimator.SetTrigger(animationTrigger);
    }
예제 #8
0
        private IEnumerator loadQuestMascotItem(Mascot mascot)
        {
            PrefabContentKey          mascotItemContentKey = new PrefabContentKey(questLogMascotItemContentKey, mascot.Name);
            AssetRequest <GameObject> assetRequest         = Content.LoadAsync(mascotItemContentKey);

            yield return(assetRequest);

            mascotKeys.Add(mascotItemContentKey.Key);
            GameObject mascotItemGameObject = Object.Instantiate(assetRequest.Asset);
            Button     button = mascotItemGameObject.GetComponentInChildren <Button>();

            if (button != null)
            {
                button.onClick.AddListener(delegate
                {
                    onMascotButtonPressed(mascot.Name);
                });
            }
            QuestLogMascotItem mascotItem = mascotItemGameObject.GetComponent <QuestLogMascotItem>();

            mascotItem.LoadMascotData(mascot);
            mascotItemGameObject.transform.SetParent(ScrollContent, worldPositionStays: false);
        }
        public async Task <ActionResult <object> > Create(
            [FromBody] AssetRequest request)
        {
            #region Create Asset Chain
            var assetChainInitializerHandler = new AssetChainInitializerHandler();
            var cashAssetHandler             = new CashAssetHandler();
            var bondAssetHandler             = new BondAssetHandler();
            var forexAssetHandler            = new ForexAssetHandler();
            var stockAssetHandler            = new StockAssetHandler();
            var commodityAssetHandler        = new CommodityAssetHandler();

            assetChainInitializerHandler
            .SetNext(cashAssetHandler)
            .SetNext(bondAssetHandler)
            .SetNext(forexAssetHandler)
            .SetNext(stockAssetHandler)
            .SetNext(commodityAssetHandler);
            #endregion

            assetChainInitializerHandler.Handle(request);

            return(Ok());
        }
        public static async ETVoid CreateJoystickUI(ETTaskCompletionSource <UI> tcs)
        {
            try
            {
                AssetRequest assetRequest = Assets.LoadAssetAsync("Assets/Bundles/UI/" + UIType.UIJoystick + ".prefab", typeof(GameObject));

                //创建一个角色的3D物体
                GameObject bundleGameObject = await ETModel.Game.Scene.GetComponent <ResourcesAsyncComponent>().LoadAssetAsync <GameObject>(assetRequest);

                GameObject gameObject = UnityEngine.Object.Instantiate(bundleGameObject);

                UI ui = ComponentFactory.Create <UI, string, GameObject, AssetRequest>(UIType.UIJoystick, gameObject, assetRequest, false);

                VariableJoystickComponent variableJoystick = ui.AddComponent <VariableJoystickComponent>();
                variableJoystick.joystickType = JoystickType.Floating;
                tcs.SetResult(ui);
            }
            catch (Exception e)
            {
                Log.Error(e);
                tcs.SetResult(null);
            }
        }
예제 #11
0
        private IEnumerator showPhone(bool playTransitionAnimation)
        {
            eventChannel.AddListener <CellPhoneEvents.HideLoadingScreen>(onHideLoadingScreen);
            AssetRequest <GameObject> cellPhoneRequest = null;

            if (cellPhonePrefab == null)
            {
                cellPhoneRequest = Content.LoadAsync(prefabContentKey);
            }
            AssetRequest <GameObject> animRequest = null;

            if (cellPhoneAnimPrefab == null)
            {
                animRequest = Content.LoadAsync(animPrefabConentKey);
            }
            if (cellPhoneRequest != null)
            {
                yield return(cellPhoneRequest);

                cellPhonePrefab = cellPhoneRequest.Asset;
            }
            if (animRequest != null)
            {
                yield return(animRequest);

                cellPhoneAnimPrefab = animRequest.Asset;
            }
            if (playTransitionAnimation)
            {
                setupAnimPrefab();
            }
            else
            {
                setupCellPhonePrefab();
            }
            logOpenPhoneBi();
        }
예제 #12
0
        /// <summary>
        /// Process an asset request.  This method will call GetAsset(AssetRequest req)
        /// on the subclass.
        /// </summary>
        public virtual void ProcessNextRequest()
        {
            AssetRequest req = m_assetRequests.Dequeue();
            AssetBase    asset;

            try
            {
                asset = GetAsset(req);
            }
            catch (Exception e)
            {
                m_log.ErrorFormat("[ASSET]: Asset request for {0} threw exception {1} - Stack Trace: {2}", req.AssetID, e, e.StackTrace);

                if (StatsManager.SimExtraStats != null)
                {
                    StatsManager.SimExtraStats.AddAssetServiceRequestFailure();
                }

                m_receiver.AssetNotFound(req.AssetID, req.IsTexture);

                return;
            }

            if (asset != null)
            {
                //m_log.DebugFormat("[ASSET]: Asset {0} received from asset server", req.AssetID);

                m_receiver.AssetReceived(asset, req.IsTexture);
            }
            else
            {
                //m_log.WarnFormat("[ASSET]: Asset {0} not found by asset server", req.AssetID);

                m_receiver.AssetNotFound(req.AssetID, req.IsTexture);
            }
        }
        protected override IEnumerator runTest()
        {
            string payload = "small_text?dl=res&x=txt";

            ContentManifest.AssetEntry entry = ContentManifest.AssetEntry.Parse(payload);
            DeviceManager  manager           = new DeviceManager();
            ResourceDevice device            = new ResourceDevice(manager);

            manager.Mount(device);
            AssetRequest <TextAsset> request = manager.LoadAsync <TextAsset>(entry.DeviceList, ref entry);

            if (request == null)
            {
                IntegrationTest.Fail("request == null");
                yield break;
            }
            if (request.Finished)
            {
                IntegrationTest.Fail("Asset did not load async");
            }
            else if (request.Cancelled)
            {
                IntegrationTest.Fail("request should not be cancelled");
            }
            yield return(request);

            IntegrationTestEx.FailIf(!request.Finished);
            IntegrationTestEx.FailIf(request.Cancelled);
            IntegrationTestEx.FailIf(request.Asset == null);
            IntegrationTestEx.FailIf(request.Asset.GetType() != typeof(TextAsset));
            if (request.Asset != null)
            {
                IntegrationTestEx.FailIf(!request.Asset.text.StartsWith("hello world"));
            }
            IntegrationTest.Pass();
        }
        private void OnAssetRequested(AssetRequest p_args)
        {
            GameObject gameObject = (GameObject)p_args.Asset;

            if (p_args.Status != ERequestStatus.Done)
            {
                Debug.LogError(String.Concat(new Object[]
                {
                    "Error load asset. ",
                    p_args.Status,
                    "\nAssetName: ",
                    p_args.AssetName
                }));
                return;
            }
            if (gameObject == null)
            {
                Debug.LogError("Error load asset.");
                return;
            }
            if (this == null)
            {
                if (p_args.AssetBundleName != String.Empty)
                {
                    AssetBundleManagers.Instance.Main.UnloadAssetBundle(p_args.AssetBundleName, true, true, false);
                    Resources.UnloadUnusedAssets();
                }
                return;
            }
            mInstantiatedAsset = (GameObject)Instantiate(gameObject);
            mInstantiatedAsset.transform.parent           = transform;
            mInstantiatedAsset.transform.localPosition    = Vector3.zero;
            mInstantiatedAsset.transform.localEulerAngles = Vector3.zero;
            mInstantiatedAsset.transform.localScale       = Vector3.one;
            mInstantiatedAsset.SetActive(false);
        }
예제 #15
0
        private IEnumerator renderMusicTracks()
        {
            AssetRequest <GameObject> prefabRequest = Content.LoadAsync(prefabContentKey);

            yield return(prefabRequest);

            AssetRequest <Texture2D> iconRequest = null;

            if (musicTrackDefinition.Icon != null && !string.IsNullOrEmpty(musicTrackDefinition.Icon.Key))
            {
                iconRequest = Content.LoadAsync(musicTrackDefinition.Icon);
                yield return(iconRequest);
            }
            GameObject prefab     = prefabRequest.Asset;
            GameObject itemPrefab = Object.Instantiate(prefab);
            Sprite     sprite     = null;

            if (iconRequest != null && iconRequest.Asset != null)
            {
                sprite = Sprite.Create(iconRequest.Asset, new Rect(0f, 0f, iconRequest.Asset.width, iconRequest.Asset.height), Vector2.zero);
            }
            itemPrefab.GetComponent <RewardPopupLabelComponent>().Init(sprite, Service.Get <Localizer>().GetTokenTranslation(musicTrackDefinition.Name));
            callback(null, itemPrefab.GetComponent <RectTransform>());
        }
        private IEnumerator loadQuestLogAdventureItem(QuestDefinition questDefinition)
        {
            Mascot mascot = Service.Get <MascotService>().GetMascot(questDefinition.Mascot.name);
            AssetRequest <GameObject> assetRequest = Content.LoadAsync(questItemContentKey, mascot.AbbreviatedName);

            yield return(assetRequest);

            GameObject             questLogItemGameObject = Object.Instantiate(assetRequest.Asset);
            QuestLogAdventuresItem questLogItem           = questLogItemGameObject.GetComponent <QuestLogAdventuresItem>();

            questLogItem.LoadQuestData(questDefinition);
            questLogItemGameObject.transform.SetParent(ScrollContent, worldPositionStays: false);
            adventureItemsLoaded++;
            if (adventureItemsLoaded == totalAdventuresItems)
            {
                CoroutineRunner.Start(scrollToAvailableQuest(), this, "");
                if (mascot.Definition.ShowComingSoonInLog)
                {
                    AssetRequest <GameObject> assetRequest2 = Content.LoadAsync(comingSoonContentKey, mascot.AbbreviatedName);
                    GameObject gameObject = Object.Instantiate(assetRequest2.Asset);
                    gameObject.transform.SetParent(ScrollContent, worldPositionStays: false);
                }
            }
        }
예제 #17
0
 internal void FireTransferRequestCompletedEvent(AssetRequest request)
 {
     if (TransferRequestCompletedEvent != null)
     {
         TransferRequestCompletedEvent(request);
     }
 }
예제 #18
0
        public void Cache(string assetID, AssetBase asset)
        {
            if (asset != null)
            {
                UpdateMemoryCache(asset.IDString, asset);

                string filename = GetFileName(asset.IDString);

                try
                {
                    // If the file is already cached just update access time
                    if (File.Exists(filename))
                    {
                        lock (m_CurrentlyWriting)
                        {
                            if (!m_CurrentlyWriting.Contains(filename))
                            {
                                File.SetLastAccessTime(filename, DateTime.Now);
                            }
                        }
                    }
                    else
                    {
                        // Once we start writing, make sure we flag that we're writing
                        // that object to the cache so that we don't try to write the
                        // same file multiple times.
                        lock (m_CurrentlyWriting)
                        {
#if WAIT_ON_INPROGRESS_REQUESTS
                            if (m_CurrentlyWriting.ContainsKey(filename))
                            {
                                return;
                            }
                            else
                            {
                                m_CurrentlyWriting.Add(filename, new ManualResetEvent(false));
                            }
#else
                            if (m_CurrentlyWriting.Contains(filename))
                            {
                                return;
                            }
                            else
                            {
                                m_CurrentlyWriting.Add(filename);
                            }
#endif
                        }

                        Util.FireAndForget(
                            delegate { WriteFileCache(filename, asset); });
                    }
                }
                catch (Exception e)
                {
                    LogException(e);
                }
            }
            else
            {
                if (m_assetRequests.ContainsKey(assetID))
                {
                    m_assetRequests[assetID].SavedAmt++;
                }
                else
                {
                    m_assetRequests[assetID] = new AssetRequest();
                }

                if (m_assetRequests[assetID].SavedAmt > _forceMemoryCacheAmount)
                {
                    UpdateMemoryCache(assetID, asset, true);
                }
            }
        }
예제 #19
0
        public void RequestAsset(UUID assetID, bool isTexture)
        {
            AssetRequest req = new AssetRequest();
            req.AssetID = assetID;
            req.IsTexture = isTexture;
            m_assetRequests.Enqueue(req);

            //m_log.DebugFormat("[ASSET SERVER]: Added {0} to request queue", assetID);
        }
예제 #20
0
 /// <summary>
 /// This method must be implemented by a subclass to retrieve the asset named in the
 /// AssetRequest.  If the asset is not found, null should be returned.
 /// </summary>
 /// <param name="req"></param>
 /// <returns></returns>
 /// <exception cref="System.Exception">
 /// Thrown if the request failed for some other reason than that the
 /// asset cannot be found.
 /// </exception>
 protected abstract AssetBase GetAsset(AssetRequest req);        
예제 #21
0
    public IEnumerator Load(MonoBehaviour coroutineProvider)
    {
        // 如果asset没有在assetbundle里面,就直接加载
        if (mainBundle == null)
        {
            using (WWW www = new WWW(AssetMgr.LOCAL_ASSET_URL + name))
            {
                yield return(www);

                OnWWWLoaded(www);
            }

            yield break;
        }

        // 先加载依赖的所有assetbundles
        if (depBundles != null)
        {
            foreach (Bundle dep in depBundles)
            {
                if (dep.IsLoaded)
                {
                    continue;
                }
                yield return(coroutineProvider.StartCoroutine(dep.Load()));
            }
        }


        // 协程加载assetbundle
        if (!mainBundle.IsLoaded)
        {
            yield return(coroutineProvider.StartCoroutine(mainBundle.Load()));
        }

        // 如果有其它加载asset的方法,直接调用,没有的话就使用默认的asset request
        AsyncRequest request;

        if (LoadAssetAsync != null)
        {
            request = LoadAssetAsync(mainBundle);
        }
        else
        {
            request = new AssetRequest(mainBundle.LoadAssetAsync(name, typeof(Object)));
        }

        while (!request.isDone)
        {
            if (OnProgress != null)
            {
                OnProgress(request.progress);
            }
            yield return(0);
        }

        if (OnProgress != null)
        {
            OnProgress(1.0f);
        }

        if (OnAssetLoaded != null)
        {
            OnAssetLoaded(request.asset);
        }

        // 加载完成后减少assetbundle的引用,使其能够释放
        mainBundle.decRef();
        if (depBundles != null)
        {
            foreach (Bundle dep in depBundles)
            {
                dep.decRef();
            }
        }
    }
예제 #22
0
        public void GetAssets(GameObject obj, IAssetLoader assetLoader, AssetRequest request)
        {
            var poolableKey = new AssetLoaderKey(obj, assetLoader, request.key);

            LoadAsset(request.path, poolableKey);
        }
예제 #23
0
 /// <summary>
 /// This method must be implemented by a subclass to retrieve the asset named in the
 /// AssetRequest.  If the asset is not found, null should be returned.
 /// </summary>
 /// <param name="req"></param>
 /// <returns></returns>
 /// <exception cref="System.Exception">
 /// Thrown if the request failed for some other reason than that the
 /// asset cannot be found.
 /// </exception>
 protected abstract AssetBase GetAsset(AssetRequest req);
예제 #24
0
 void AssetSupplier.SupplyAsset(AssetRequest assetRequest, AssetSupplyListener listener)
 {
     listener.supplyTaker.Take(assetPick);
 }
예제 #25
0
 public void UnLoad(ref AssetRequest assetRequest)
 {
 }
 public SceneLoadingRequest(string sceneName, AssetRequest <Object> request)
 {
     SceneName = sceneName;
     Request   = request;
 }
        private IEnumerator loadTargetScene(string sceneName, IEnumerable <string> additiveScenes, LoadSceneMode mainSceneLoadingMode, bool allowActivation)
        {
            int   targetFrameRate = -1;
            float fixedDeltaTime  = 0f;

            if (sceneDefinitions.TryGetValue(sceneName, out var mainSceneDefinition))
            {
                targetFrameRate = mainSceneDefinition.TargetFrameRate;
                fixedDeltaTime  = mainSceneDefinition.FixedDeltaTime;
            }
            if (targetFrameRate == -1)
            {
                targetFrameRate = 30;
            }
            if (Mathf.Approximately(0f, fixedDeltaTime))
            {
                fixedDeltaTime = 0.0333333f;
            }
            Application.targetFrameRate = targetFrameRate;
            Time.fixedDeltaTime         = fixedDeltaTime;
            Queue <string>             loadableScenes        = new Queue <string>();
            List <SceneLoadingRequest> assetRequests         = new List <SceneLoadingRequest>();
            AssetRequest <Object>      mainSceneAssetRequest = null;

            sceneAssetKeys = new List <string>();
            if (false)
            {
                foreach (string additiveScene2 in additiveScenes)
                {
                    loadableScenes.Enqueue(additiveScene2);
                }
            }
            else
            {
                if (Content.ContainsKey(sceneName))
                {
                    mainSceneAssetRequest = Content.LoadAsync <Object>(sceneName);
                }
                foreach (string additiveScene3 in additiveScenes)
                {
                    if (Content.ContainsKey(additiveScene3))
                    {
                        assetRequests.Add(new SceneLoadingRequest(additiveScene3, Content.LoadAsync <Object>(additiveScene3)));
                    }
                    else
                    {
                        loadableScenes.Enqueue(additiveScene3);
                    }
                }
            }
            if (mainSceneAssetRequest != null)
            {
                while (!mainSceneAssetRequest.Finished)
                {
                    yield return(null);
                }
            }
            loadAvailableScene(sceneName, allowActivation, mainSceneLoadingMode);
            while (assetRequests.Count > 0 || loadableScenes.Count > 0)
            {
                while (loadableScenes.Count > 0)
                {
                    string additiveScene = loadableScenes.Dequeue();
                    if (sceneDefinitions.TryGetValue(additiveScene, out var sceneDefinition) && !(sceneDefinition == null))
                    {
                        yield return(loadPrerequisiteContent(sceneDefinition));
                    }
                    loadAvailableScene(additiveScene, allowActivation, LoadSceneMode.Additive);
                }
                int i;
                for (i = 0; i < assetRequests.Count && !assetRequests[i].Request.Finished; i++)
                {
                }
                if (i < assetRequests.Count)
                {
                    loadableScenes.Enqueue(assetRequests[i].SceneName);
                    assetRequests.RemoveAt(i);
                }
                else
                {
                    yield return(null);
                }
            }
            while (asyncLoadingScenes.Count > 0)
            {
                yield return(asyncLoadingScenes.First.Value.Operation);

                Crittercism.LeaveBreadcrumb($"Finished loading scene '{asyncLoadingScenes.First.Value.Name}'");
                asyncLoadingScenes.RemoveFirst();
            }
            overrideSceneActivation = false;
        }
		private IEnumerator renderSprite(SpriteContentKey unlockID)
		{
			AssetRequest<Sprite> assetRequest = Content.LoadAsync(unlockID);
			yield return assetRequest;
			callback(assetRequest.Asset, null);
		}
 public override AssetRequest Handle(AssetRequest request)
 {
     return(base.Handle(request));
 }
예제 #30
0
    private IEnumerator _LoadAsync(string prefabName, Transform parent, Action <GameObject> onLoad = null, object param = null)
    {
        if (parent == null)
        {
            yield break;
        }

        if (InstantiateCache.I.CanSpawn(RESOURCE_CATEGORY.UI, prefabName))
        {
            try
            {
                GameObject go   = null;
                var        inst = InstantiateCache.I.Spawn(RESOURCE_CATEGORY.UI, prefabName, parent);
                if (inst != null)
                {
                    go = inst.gameObject;
                }
                onLoad?.Invoke(go);
            }
            catch (Exception e)
            {
                UnityEngine.Debug.LogError(e);
            }
            yield break;
        }
        _prefabLoadingList.Add(prefabName);
        bool         isCompleted = false;
        AssetRequest req         = InstantiateCache.LoadAssets(RESOURCE_CATEGORY.UI, prefabName, false, (r) => { isCompleted = true; });

        if (!string.IsNullOrEmpty(req.assetPath))
        {
            var go    = Resources.Load(req.assetPath) as GameObject;
            var trans = parent ?? tran_Inactive;
            go = MonoBehaviour.Instantiate(go, trans);
            var view = go.GetComponent <ViewBase>();
            go.name = prefabName;
            view.OnLoad();
            trans.gameObject.SetActive(true);
            _OnViewLoadFinish(prefabName, view);
            yield return(_OnViewShow(view, param));
        }
        while (!isCompleted)
        {
            yield return(null);
        }

        if (parent != null)
        {
            if (req.loadedObj != null && req.loadedObj is GameObject)
            {
                var prefabObj = req.loadedObj as GameObject;

                var tran = InstantiateCache.I.Spawn(RESOURCE_CATEGORY.UI, prefabName, parent);
                if (tran != null)
                {
                    prefabObj = tran.gameObject;
                }
                else
                {
                    prefabObj = UnityEngine.Object.Instantiate(prefabObj, parent);
                }
                if (prefabObj == null)
                {
                    //UnityEngine.Debug.LogError("PrefabObj is error!");
                }
                else
                {
                    prefabObj.name = prefabName;

                    try
                    {
                        onLoad?.Invoke(prefabObj);
                    }catch (Exception e)
                    {
                        UnityEngine.Debug.LogError(e);
                    }
                }
            }
        }
        _prefabLoadingList.Remove(prefabName);
    }
예제 #31
0
        /// <summary>
        /// 加载资源,path需要是全路径
        /// </summary>
        /// <param name="path"></param>
        /// <typeparam name="T"></typeparam>
        /// <returns></returns>
        public T LoadAsset <T>(string path) where T : UnityEngine.Object
        {
            AssetRequest assetRequest = Assets.LoadAsset(path, typeof(T));

            return((T)assetRequest.asset);
        }
예제 #32
0
        protected override AssetBase GetAsset(AssetRequest req)
        {
            byte[] idBytes = req.AssetID.Guid.ToByteArray();

            string cdir = m_dir + Path.DirectorySeparatorChar + idBytes[0]
                                + Path.DirectorySeparatorChar + idBytes[1];
            if (File.Exists(cdir + Path.DirectorySeparatorChar + req.AssetID + ".xml"))
            {
                FileStream x = File.OpenRead(cdir + Path.DirectorySeparatorChar + req.AssetID + ".xml");
                AssetBase ret = (AssetBase) m_xs.Deserialize(x);
                x.Close();
                return ret;
            }
            return null;
        }
예제 #33
0
    public IEnumerator Load(MonoBehaviour coroutineProvider)
    {
        // 如果asset没有在assetbundle里面,就直接加载
        if(mainBundle == null)
        {
            using (WWW www = new WWW(AssetMgr.LOCAL_ASSET_URL + name))
            {
                yield return www;
                OnWWWLoaded(www);
            }

            yield break;
        }

        // 先加载依赖的所有assetbundles
        if(depBundles != null)
        {
            foreach (Bundle dep in depBundles)
            {
                if (dep.IsLoaded)
                    continue;
                yield return coroutineProvider.StartCoroutine(dep.Load());
            }
        }

        // 协程加载assetbundle
        if(!mainBundle.IsLoaded)
            yield return coroutineProvider.StartCoroutine(mainBundle.Load());

        // 如果有其它加载asset的方法,直接调用,没有的话就使用默认的asset request
        AsyncRequest request;
        if (LoadAssetAsync != null)
            request = LoadAssetAsync(mainBundle);
        else
            request = new AssetRequest(mainBundle.LoadAssetAsync(name, typeof(Object)));

        while (!request.isDone)
        {
            if (OnProgress != null)
                OnProgress(request.progress);
            yield return 0;
        }

        if (OnProgress != null)
            OnProgress(1.0f);

        if(OnAssetLoaded != null)
            OnAssetLoaded(request.asset);

        // 加载完成后减少assetbundle的引用,使其能够释放
        mainBundle.decRef();
        if (depBundles != null)
        {
            foreach (Bundle dep in depBundles)
                dep.decRef();
        }
    }
예제 #34
0
 public AssetModel get_assets(AssetRequest request)
 {
     return(new AssetModel()
     {
     });
 }
예제 #35
0
        public Object GetObject(ResType type, string name)
        {
            AssetRequest req = GetAssetRequest(name, type);

            return(req != null ? req.asset : null);
        }
예제 #36
0
 private static void OnAssetError(string key, AssetRequest <T> request)
 {
 }
예제 #37
0
        /// <summary>
        /// Called each time a wearable asset is done downloading
        /// </summary>
        /// <param name="request"></param>
        void AManager_TransferRequestCompletedEvent(AssetRequest request)
        {
            if( !(request is AssetRequestDownload) )
            {
                return;
            }

            AssetRequestDownload dlrequest = (AssetRequestDownload)request;

            if (dlrequest.AssetID == null)
            {
                Client.Log("AssetID is null in AssetRequestDownload: " + dlrequest.StatusMsg, Helpers.LogLevel.Error);
            }

            WearableCacheQueueMutex.WaitOne();

            // Remove from the download queue
            lock (WearableAssetQueue)
            {
                if (!WearableAssetQueue.Contains(dlrequest.AssetID))
                {
                    // Looks like we got an asset for something other then what we're waiting for, ignore it
                    WearableCacheQueueMutex.ReleaseMutex();

                    return;
                }
            }

            // Since we got a response for this asset, remove it from the queue
            WearableAssetQueue.Remove(dlrequest.AssetID);
            LogWearableAssetQueueActivity("Received queued asset, and removed: " + dlrequest.AssetID);

            // If the request wasn't successful, then don't try to process it.
            if (request.Status != AssetRequest.RequestStatus.Success)
            {
                Client.Log("Error downloading wearable asset: " + dlrequest.AssetID, Helpers.LogLevel.Error);
                WearableCacheQueueMutex.ReleaseMutex();

                return;
            }


            AssetWearable wearableAsset = WearableCache[dlrequest.AssetID];
            wearableAsset.SetAssetData(dlrequest.GetAssetData());

            if ((wearableAsset.AssetData == null) || (wearableAsset.AssetData.Length == 0))
            {
                Client.Log("Asset retrieval failed for AssetID: " + wearableAsset.AssetID, Helpers.LogLevel.Error);
                WearableCacheQueueMutex.ReleaseMutex();
                return;
            }
            else
            {
                UpdateAgentTextureEntryAndAppearanceParams(wearableAsset);

                UpdateAgentTextureEntryOrder();

                lock(WearableAssetQueue)
                {
                    if (WearableAssetQueue.Count > 0)
                    {
                        RequestNextQueuedWearableAsset();
                        WearableCacheQueueMutex.ReleaseMutex();
                        return;

                    }
                }

                // Now that all the wearable assets are done downloading,
                // send an appearance packet
                SendAgentSetAppearance();

                WearableCacheQueueMutex.ReleaseMutex();
                return;
            }
        }
예제 #38
0
 private void OnAssetLoaded(string key, AssetRequest <T> request)
 {
     this[key] = request.Asset;
 }