public override ITextureStreamSource GetStreamSource(int maxWidth, int maxHeight, IEnumerable <TexturePackage> packages) { var packs = packages.Select(x => { if (!_roots.ContainsKey(x)) { var wp = new Pk3Stream(new ZipPackage(new FileInfo(x.PackageRoot))); _roots.Add(x, wp); } return(_roots[x]); }).ToList(); var streams = packs.Select(x => x.StreamSource).ToList(); return(new Pk3StreamSource(streams)); }
private TexturePackage CreatePackage(string package) { try { var fi = new FileInfo(package); if (!fi.Exists) { return(null); } var tp = new TexturePackage(package, Path.GetFileNameWithoutExtension(package), this); if (LoadFromCache(tp)) { return(tp); } var pack = _roots.Values.FirstOrDefault(x => x.Package.PackageFile.FullName == fi.FullName); if (pack == null) { _roots.Add(tp, pack = new Pk3Stream(new ZipPackage(fi))); } foreach (var file in pack.Package.SearchFiles("textures", @"\.(jpg|png|tga)$", true)) { var size = GetImageSize(pack.StreamSource, file); var fname = file.Substring("textures/".Length); fname = fname.Substring(0, fname.Length - 4); var ti = new TextureItem(tp, fname, GetFlags(fname), size.Width, size.Height) { Reference = file }; tp.AddTexture(ti); } SaveToCache(tp); return(tp); } catch { return(null); } }