Beispiel #1
0
        private void btnPaste_Click(object sender, EventArgs e)
        {
            if (selectedExport == null)
            {
                logger.Trace("no selected export");
                return;
            }
            GpkExport copyExport = (GpkExport)Clipboard.GetData(exportFormat.Name);

            if (copyExport == null)
            {
                logger.Info("copy paste fail");
                return;
            }

            logger.Trace(Settings.Default.CopyMode);
            string option = "";

            switch (Settings.Default.CopyMode)
            {
            case "dataprops":
                DataTools.ReplaceProperties(copyExport, selectedExport);
                DataTools.ReplaceData(copyExport, selectedExport);
                option = "data and properties";
                break;

            case "data":
                DataTools.ReplaceData(copyExport, selectedExport);
                option = "data";
                break;

            case "props":
                DataTools.ReplaceProperties(copyExport, selectedExport);
                option = "properties";
                break;

            default:
                logger.Info("Your setting file is broken. Go to settings windows and select a copymode.");
                break;
            }

            copyExport.GetDataSize();
            treeMain_AfterSelect(treeMain, new TreeViewEventArgs(treeMain.SelectedNode));
            logger.Info("Pasted the {0} of {1} to {2}", option, copyExport.UID, selectedExport.UID);
        }
Beispiel #2
0
        private void btnReplace_Click(object sender, EventArgs e)
        {
            if (selectedExport == null)
            {
                logger.Trace("no selected export");
                return;
            }
            if (selectedExport.Data == null)
            {
                logger.Trace("no export data");
                return;
            }

            String[] files = MiscFuncs.GenerateOpenDialog();
            if (files.Length == 0)
            {
                return;
            }
            string path = files[0];

            if (File.Exists(path))
            {
                byte[] buffer = File.ReadAllBytes(path);


                if (Settings.Default.PatchMode)
                {
                    if (treeMain.SelectedNode.Parent.Parent == null)
                    {
                        return;
                    }
                    int packageIndex = Convert.ToInt32(treeMain.SelectedNode.Parent.Parent.Name);

                    if (buffer.Length > selectedExport.Data.Length)
                    {
                        //Too long, not possible without rebuiling the gpk
                        logger.Info("File size too big for PatchMode. Size: " + buffer.Length + " Maximum Size: " +
                                    selectedExport.Data.Length);
                        return;
                    }

                    //selectedExport.data = buffer;
                    Array.Copy(buffer, selectedExport.Data, buffer.Length);

                    changedExports[packageIndex].Add(selectedExport);
                }
                else
                {
                    //Rebuild Mode
                    //We force the rebuilder to recalculate the size. (atm we dont know how big the propertys are)
                    logger.Trace(String.Format("rebuild mode old size {0} new size {1}", selectedExport.Data.Length,
                                               buffer.Length));

                    selectedExport.Data = buffer;
                    selectedExport.GetDataSize();
                    selectedPackage.Changes = true;
                }


                logger.Info(String.Format("Replaced the data of {0} successfully! Dont forget to save.",
                                          selectedExport.ObjectName));
            }
        }
        public static void ImportOgg(GpkExport export, string oggfile)
        {
            Soundwave wave = new Soundwave();

            wave.oggfile = oggfile;

            if (oggfile != "fake")
            {
                wave.oggdata = File.ReadAllBytes(oggfile);
            }
            else
            {
                wave.oggdata = new byte[1];
            }

            export.Payload = wave;

            //Refill data buffer with normal soundwave
            export.Data = new byte[wave.GetSize()];
            BinaryWriter writer = new BinaryWriter(new MemoryStream(export.Data));

            wave.WriteData(writer, null, export);
            writer.Close();
            writer.Dispose();

            export.GetDataSize();

            if (oggfile == "fake")
            {
                logger.Info(String.Format("Fake soundfile was imported to {0}!", export.UID));
                return;
            }

            //manipulate the sound duration
            VorbisReader vorbis = null;

            vorbis = new VorbisReader(new MemoryStream(wave.oggdata), true);

            /*
             * ObjectName: Duration Type: FloatProperty Value: 0,4694785
             * ObjectName: NumChannels Type: IntProperty Value: 1
             * ObjectName: SampleRate Type: IntProperty Value: 22050
             * ObjectName: SampleDataSize Type: IntProperty Value: 20704
             */

            foreach (IProperty prop in export.Properties)
            {
                if (prop is GpkFloatProperty)
                {
                    GpkFloatProperty floatProperty = (GpkFloatProperty)prop;
                    if (floatProperty.name == "Duration")
                    {
                        floatProperty.value = (float)vorbis.TotalTime.TotalSeconds;
                    }
                }
                else if (prop is GpkIntProperty)
                {
                    GpkIntProperty intProperty = (GpkIntProperty)prop;
                    if (intProperty.name == "NumChannels")
                    {
                        intProperty.value = vorbis.Channels;
                    }
                    if (intProperty.name == "SampleRate")
                    {
                        intProperty.value = vorbis.SampleRate;
                    }
                    if (intProperty.name == "SampleDataSize")
                    {
                        intProperty.value = wave.oggdata.Length;
                    }
                }
            }

            logger.Info(String.Format("Soundfile was imported to {0}!", export.UID));
        }