예제 #1
0
 public void Clear()
 {
     for (int i = 0, imax = mCallbacks.Count; i < imax; i++)
     {
         CallbackHolderBase.Cache(mCallbacks[i]);
     }
     mCallbacks.Clear();
 }
예제 #2
0
 public void AddCallback(CallbackHolderBase callback)
 {
     if (callback == null)
     {
         return;
     }
     mCallbacks.Add(callback);
 }
예제 #3
0
            private void OnLoaded(Object obj)
            {
                int count = mCallbacks.Count;

                onPreCallbacks(this, obj, count);
                for (int i = 0; i < count; i++)
                {
                    CallbackHolderBase callback = mCallbacks[i];
                    callback.OnLoaded(obj);
                    CallbackHolderBase.Cache(callback);
                }
                mCallbacks.Clear();
                onPostCallbacks(this, obj);
            }
예제 #4
0
            public static void Cache(CallbackHolderBase ins)
            {
                if (ins == null)
                {
                    return;
                }
                Queue <CallbackHolderBase> queue;

                if (instances.TryGetValue(ins.mType, out queue))
                {
                    queue.Enqueue(ins);
                }
                else
                {
                    queue = new Queue <CallbackHolderBase>();
                    queue.Enqueue(ins);
                    instances.Add(ins.mType, queue);
                }
            }
예제 #5
0
        private static int InsertHolder(CallbackHolderBase holder)
        {
            int idx;

            lock (CallbackTable.locker) {
                if (CallbackTable.freeIndexes.Count == 0)
                {
                    idx = CallbackTable.holders.Count;
                    CallbackTable.holders.Add(holder);
                }
                else
                {
                    idx = CallbackTable.freeIndexes.Pop();
                    CallbackTable.holders[idx] = holder;
                }
            }

            return(idx);
        }
예제 #6
0
        private void GetResourcesInternal <T>(string folder, string file, Type type, OnResourcesLoadedDelegate <T> callback) where T : Object
        {
            if (string.IsNullOrEmpty(file))
            {
                return;
            }
            if (type == null)
            {
                return;
            }
            if (callback == null)
            {
                return;
            }
            int           key = HashString.ComputeHash(folder, file);
            ResourcesData data;

            if (mLoaded.TryGetValue(key, out data))
            {
                data.refCount++;
                T target = data.obj as T;
                try {
                    callback(target);
                } catch (Exception e) {
                    Debug.LogException(e);
                }
                return;
            }
            LoadingData callbacks;
            bool        isLoading = GetLoadDelegateList(key, out callbacks);

            callbacks.AddCallback(CallbackHolderBase.Get <T>().SetCallback(callback));
            if (isLoading)
            {
                return;
            }
            callbacks.key  = key;
            callbacks.type = type;
            string path = folder == null ? file : (folder + file);

            async_loader.Load(path, type, callbacks.onLoaded);
        }