예제 #1
0
        public static FalloutFRM LoadFRM(byte[] buffer, Color transparency)
        {
            FalloutFRM frm = new FalloutFRM();

            frm.Frames     = Load(buffer, transparency);
            frm.PixelShift = new Point(FalloutFRMLoader.GetPixelShiftX(buffer),
                                       FalloutFRMLoader.GetPixelShiftY(buffer));
            frm.FramesPerDir = (short)((buffer[0x08] << 8) + buffer[0x08 + 1]);

            return(frm);
        }
예제 #2
0
        public bool LoadZip( string ZipPath, List<string> crFiles, Color Transparency )
        {
            if (!File.Exists(ZipPath))
            {
                MessageBox.Show("Unable to load " + ZipPath + ", doesn't exist.", "Mapper", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return false;
            }

            var zip = ZipStorer.Open(ZipPath, FileAccess.Read);
            if(zip == null)
            {
                MessageBox.Show("Unable to load " + ZipPath + ".", "Mapper", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return false;
            }

            var patternToCheck = new List<string>();
            foreach (var cr in crFiles)
                patternToCheck.Add(cr);
            foreach (var path in this.EditorData.GraphicsPaths)
                patternToCheck.Add(path);

            var filesToLoad = new List<ZipStorer.ZipFileEntry>();

            var entries = zip.ReadCentralDir();
            foreach (var entry in entries)
            {
                foreach(var path in patternToCheck)
                {
                    if (!entry.FilenameInZip.Replace('/', '\\').Contains(path))
                        continue;
                    if (entry.CompressedSize == 0) continue;

                    string filename = entry.FilenameInZip.ToLower().Replace('/', '\\');
                    string ext = Path.GetExtension( filename ).ToLower();

                    if( !(ext == ".frm" || ext == ".png") )
                        continue;

                    filesToLoad.Add(entry);
                }
            }

            this.BeginInvoke((MethodInvoker)delegate
            {
                frmLoading.SetNextFile(Path.GetFileName(ZipPath));
                frmLoading.SetResourceNum(filesToLoad.Count);
            });

            foreach(var entry in filesToLoad)
            {
                    string filename = entry.FilenameInZip.ToLower().Replace('/', '\\');
                    string ext = Path.GetExtension(filename).ToLower();

                    this.BeginInvoke((MethodInvoker)delegate
                    {
                        frmLoading.SetNextResource(filename);
                    });

                    byte[] bytes;
                    using (MemoryStream stream = new MemoryStream())
                    {
                        zip.ExtractFile(entry, stream);
                        bytes = stream.ToArray();
                    }
                    if (ext == ".frm")
                    {
                        var frm = FalloutFRMLoader.LoadFRM(bytes, Transparency);
                        Frms[filename] = frm;
                    }
                    else
                    {
                        System.ComponentModel.TypeConverter tc = System.ComponentModel.TypeDescriptor.GetConverter(typeof(Bitmap));
                        Bitmap bitmap = (Bitmap)tc.ConvertFrom(bytes);
                        Frms[filename] = new FalloutFRM();
                        Frms[filename].Frames = new List<Bitmap>();
                        Frms[filename].Frames.Add(bitmap);
                        Frms[filename].FileName = entry.FilenameInZip;
                    }
            }
            return true;
        }
예제 #3
0
        public bool LoadDir(string DirPath, List<string> crFiles, Color Transparency)
        {
            List<string> filenames = new List<string>();
            foreach (var path in this.EditorData.GraphicsPaths)
            {
                var fullPath = DirPath + Path.DirectorySeparatorChar + path;
                if(Directory.Exists(fullPath))
                    filenames.AddRange(Directory.GetFiles(fullPath));
            }
            foreach(var crFile in crFiles)

            foreach (var filename in filenames)
            {
                string ext = Path.GetExtension(filename).ToLower();
                if (!(ext == ".frm" || ext == ".png"))
                    continue;
                byte[] bytes = File.ReadAllBytes(filename);
                if (ext == ".frm")
                {
                    var frm = FalloutFRMLoader.LoadFRM(bytes, Transparency);
                    Frms[filename] = frm;
                }
                else
                {
                    System.ComponentModel.TypeConverter tc = System.ComponentModel.TypeDescriptor.GetConverter(typeof(Bitmap));
                    Bitmap bitmap = (Bitmap)tc.ConvertFrom(bytes);
                    Frms[filename] = new FalloutFRM();
                    Frms[filename].Frames = new List<Bitmap>();
                    Frms[filename].Frames.Add(bitmap);
                    Frms[filename].FileName = filename.Remove(filename.IndexOf(DirPath), DirPath.Length);
                }
            }
            return true;
        }
예제 #4
0
        public static FalloutFRM LoadFRM(byte[] buffer, Color transparency)
        {
            FalloutFRM frm = new FalloutFRM();
            frm.Frames = Load(buffer, transparency);
            frm.PixelShift = new Point(FalloutFRMLoader.GetPixelShiftX(buffer),
                                       FalloutFRMLoader.GetPixelShiftY(buffer));
            frm.FramesPerDir = (short)((buffer[0x08] << 8) + buffer[0x08 + 1]);

            return frm;
        }