示例#1
0
        void LoadResourceValues(ResourceCacheItem[] store)
        {
            ResourceInfo ri;
            object       value;

            lock (readerLock) {
                for (int i = 0; i < resourceCount; i++)
                {
                    ri = infos [i];
                    if (ri.TypeIndex == -1)
                    {
                        store [i] = new ResourceCacheItem(ri.ResourceName, null);
                        continue;
                    }

                    reader.BaseStream.Seek(ri.ValuePosition, SeekOrigin.Begin);
                    if (resource_ver == 2)
                    {
                        value = ReadValueVer2(ri.TypeIndex);
                    }
                    else
                    {
                        value = ReadValueVer1(Type.GetType(typeNames [ri.TypeIndex], true));
                    }

                    store [i] = new ResourceCacheItem(ri.ResourceName, value);
                }
            }
        }
    public void Update()
    {
        List <string> delList = new List <string>();

        foreach (KeyValuePair <string, List <ResourceCacheItem> > kv in cacheDict)
        {
            for (int i = kv.Value.Count; i >= 0; i--)
            {
                ResourceCacheItem item = kv.Value[i];
                item.retainTime--;
                if (item.retainTime <= 0)
                {
                    kv.Value.RemoveAt(i);
                    loader.DeleteResource(kv.Key);
                    if (kv.Value.Count == 0)
                    {
                        delList.Add(kv.Key);
                    }
                }
            }
        }
        for (int i = 0; i < delList.Count; i++)
        {
            cacheDict.Remove(delList[i]);
        }
    }
    public Object GetResource(string path)
    {
        List <ResourceCacheItem> objectList;

        if (cacheDict.TryGetValue(path, out objectList))
        {
            if (objectList.Count > 0)
            {
                ResourceCacheItem obj = objectList[objectList.Count - 1];
                objectList.RemoveAt(objectList.Count - 1);
                return(obj.obj);
            }
        }
        return(loader.GetResource(path));
    }
示例#4
0
            void FillCache()
            {
                if (reader.cache != null)
                {
                    return;
                }

                lock (reader.cache_lock) {
                    if (reader.cache != null)
                    {
                        return;
                    }

                    ResourceCacheItem[] resources = new ResourceCacheItem [reader.resourceCount];
                    reader.LoadResourceValues(resources);
                    reader.cache = resources;
                }
            }
    public void DeleteResource(Object obj, string path)
    {
        ResourceCacheItem item = new ResourceCacheItem();

        item.obj        = obj;
        item.retainTime = 2;
        List <ResourceCacheItem> objectList;

        if (cacheDict.TryGetValue(path, out objectList))
        {
            objectList.Add(item);
        }
        else
        {
            objectList = new List <ResourceCacheItem>();
            objectList.Add(item);
            cacheDict.Add(path, objectList);
        }
    }
			void FillCache ()
			{
				if (reader.cache != null)
					return;
				
				lock (reader.cache_lock) {
					if (reader.cache != null)
						return;
					
					ResourceCacheItem[] resources = new ResourceCacheItem [reader.resourceCount];				
					reader.LoadResourceValues (resources);
					reader.cache = resources;
				}
			}
		void LoadResourceValues (ResourceCacheItem[] store)
		{
			ResourceInfo ri;
			object value;
			
			lock (readerLock) {
				for (int i = 0; i < resourceCount; i++) {
					ri = infos [i];
					if (ri.TypeIndex == -1) {
						store [i] = new ResourceCacheItem (ri.ResourceName, null);
						continue;
					}

					reader.BaseStream.Seek (ri.ValuePosition, SeekOrigin.Begin);
					if (resource_ver == 2)
						value = ReadValueVer2 (ri.TypeIndex);
					else
						value = ReadValueVer1 (Type.GetType (typeNames [ri.TypeIndex], true));

					store [i] = new ResourceCacheItem (ri.ResourceName, value);
				}
			}
		}