/// <summary> /// 请求资源 /// </summary> /// <param name="caller"></param> /// <param name="resName"></param> /// <param name="callback"></param> public void GetResource(System.Object caller, string resName, ResDataLoadedHandler callback, System.Object userData = null) { string key = resName.ToLower(); ResourceDataObject resDO = null; if (!_dataDict.TryGetValue(key, out resDO)) { throw new Exception(string.Format("名为{0}的资源不存在", resName)); //return; } ResourceData data = null; if (!_resDict.TryGetValue(key, out data)) { string url = GetRootPath(resDO.Type) + resDO.Path; data = new ResourceData(caller, key, resDO.Type, url, callback, userData); _waitToLoadList.Add(data); _resDict[key] = data; } else { data.AddCounter(caller); if (data.IsReady) { if (callback != null) { callback(key, data.Url, data.Data, userData); } } else { data.AddCallback(callback, userData); } } }
internal void AddCallback(ResDataLoadedHandler callback, System.Object userData = null) { _callbacks.Add(new CallbackListener() { Callback = callback, UserData = userData }); }
/// <summary> /// 增加该资源的使用者 /// </summary> /// <param name="user"></param> /// <param name="callback"></param> /// <param name="userData"></param> internal void AddUser(System.Object user, ResDataLoadedHandler callback, System.Object userData = null) { CallbackListener listener = new CallbackListener() { Callback = callback, UserData = userData }; List <CallbackListener> existList = null; if (!_userDict.TryGetValue(user, out existList)) { existList = new List <CallbackListener>(); existList.Add(listener); _userDict.Add(user, existList); _userList.Add(user); } else { if (!existList.Contains(listener)) { existList.Add(listener); } else { return;// } } }
public ResourceData(System.Object user, string key, ResourceType type, string url, ResDataLoadedHandler callback, System.Object userData = null) { this.Name = key; this.ResType = type; this.Url = url; CallbackListener listener = new CallbackListener() { Callback = callback, UserData = userData }; _callbacks.Add(listener); //_userDict.Add(user, new List<CallbackListener>() { listener }); AddCounter(user); }