Example #1
0
        public ResourceBase CreateResource(Type t, string resourceName, byte[] initData = null, bool canStore = false)
        {
            if (!resCreatorMaps.ContainsKey(t))
            {
                Log.WriteError("Cannot find creator resource of type " + t.Name + ", no creator delegate exists.");
                return(null);
            }
            if (headers.ContainsKey(resourceName))
            {
                Log.WriteError("Cannot create resource, name is already in use: " + resourceName);
                return(null);
            }

            ResourceHeader createdHeader = new ResourceHeader(resourceName, string.Empty, 0, 0, false, canStore, t.Name, new Dictionary <string, string>());

            headers.Add(createdHeader.resourceName, createdHeader);

            ResourceBase resource = resCreatorMaps[t].Invoke(this);

            if (initData == null)
            {
                initData = new byte[0];
            }
            resource.Load(initData);
            resources.Add(resource.rid, resource);
            createdHeader.loaded   = true;
            createdHeader.loadedId = resource.rid;

            return(resource);
        }
Example #2
0
        private void LoadResource(string resourceName)
        {
            if (!headers.ContainsKey(resourceName))
            {
                Log.WriteError("Cannot get resource with name=" + resourceName + ", does not exist.");
            }

            ResourceHeader header = headers[resourceName];

            if (!File.Exists(header.filename))
            {
                Log.WriteError("Cannot get resource with name=" + resourceName + ", specified file does not exist.");
            }

            try
            {
                byte[] rawData;
                using (FileStream fstream = File.OpenRead(header.filename))
                    using (BinaryReader reader = new BinaryReader(fstream))
                    {
                        if (header.fileStart > 0)
                        {
                            reader.BaseStream.Seek((long)header.fileStart, SeekOrigin.Begin);
                        }

                        int readLen = header.fileLength == 0 ? (int)reader.BaseStream.Length - (int)reader.BaseStream.Position : (int)header.fileLength;
                        rawData = reader.ReadBytes(readLen);
                    }

                if (!resLoaderMaps.ContainsKey(header.loaderExt))
                {
                    throw new Exception("Loader not found for extension: " + header.loaderExt + ". Unable to load resource: " + resourceName);
                }

                Type         resourceType = resLoaderMaps[header.loaderExt];
                ResourceBase resource     = resCreatorMaps[resourceType].Invoke(this);
                resource.Load(rawData);
                resources.Add(resource.rid, resource);
                ridToHeaderMap.Add(resource.rid, header.resourceName);

                header.loaded   = true;
                header.loadedId = resource.rid;
                Log.WriteLine("Loaded resource: " + resourceName);
            }
            catch (Exception e)
            {
                Log.WriteError("Error occured during resource load: " + e.ToString());
            }
        }