Beispiel #1
0
        private void HandleRescaleAnimationsToolStripMenuItemClick(object sender, EventArgs e)
        {
            string directoryPath;

            using (var dialog = new VistaFolderBrowserDialog())
            {
                dialog.Description =
                    "Select a directory containing GAP files, or subdirectories containing GAP files to rescale.\n" +
                    "Note that this will replace the original files.";

                if (dialog.ShowDialog() != DialogResult.OK)
                {
                    return;
                }

                directoryPath = dialog.SelectedPath;
            }

            Vector3 scale;
            Vector3 position;

            using (var scaleDialog = new SetScaleValueDialog())
            {
                if (scaleDialog.ShowDialog() != DialogResult.OK)
                {
                    return;
                }
                scale    = scaleDialog.Result.Scale;
                position = scaleDialog.Result.Position;
            }

            var failures = new ConcurrentBag <string>();

            using (var dialog = new ProgressDialog())
            {
                dialog.DoWork += (o, progress) =>
                {
                    var filePaths          = Directory.EnumerateFiles(directoryPath, "*.GAP", SearchOption.AllDirectories).ToList();
                    var processedFileCount = 0;

                    Parallel.ForEach(filePaths, (filePath, state) =>
                    {
                        lock (dialog)
                        {
                            if (dialog.CancellationPending)
                            {
                                state.Stop();
                                return;
                            }

                            dialog.ReportProgress((int)(((float)++processedFileCount / filePaths.Count) * 100),
                                                  $"Processing {Path.GetFileName(filePath)}", null);
                        }

                        try
                        {
                            var animationPack = Resource.Load <AnimationPack>(filePath);
                            animationPack.Rescale(scale, position);
                            animationPack.Save(filePath);
                        }
                        catch (Exception)
                        {
                            failures.Add(filePath);
                        }
                    });
                };

                dialog.ShowDialog();
            }

            if (failures.Count > 0)
            {
                MessageBox.Show("An error occured while processing the following files:\n" + string.Join("\n", failures));
            }
        }
Beispiel #2
0
 internal ResultValue(SetScaleValueDialog parent)
 {
     mParent = parent;
 }