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); }
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()); } }