예제 #1
0
        private void Uninstall_EEPK(string path, _File file)
        {
#if !DEBUG
            try
#endif
            {
                EepkToolInterlop.TextureImportMatchNames = true;
                EepkToolInterlop.AssetReuseMatchName     = true;

                EffectContainerFile binaryFile = (EffectContainerFile)GetParsedFile <EffectContainerFile>(path, false);
                EffectContainerFile cpkBinFile = (EffectContainerFile)GetParsedFile <EffectContainerFile>(path, true);

                Section section = file.GetSection(Sections.EEPK_Effect);

                if (section != null)
                {
                    binaryFile.UninstallEffects(section.IDs, cpkBinFile);
                }
            }
#if !DEBUG
            catch (Exception ex)
            {
                string error = string.Format("Failed at {0} uninstall phase ({1}).", ErrorCode.EEPK, path);
                throw new Exception(error, ex);
            }
#endif
        }
예제 #2
0
 public AssetSelector(EffectContainerFile _effectFile, bool multiSelect, bool _constrained = false, Xv2CoreLib.EEPK.AssetType _constrainedAssetType = Xv2CoreLib.EEPK.AssetType.EMO, Window parent = null, Asset initialSelection = null)
 {
     MultiSelectMode      = multiSelect;
     effectContainerFile  = _effectFile;
     ConstrainedAssetType = _constrainedAssetType;
     Constrained          = _constrained;
     InitializeComponent();
     Owner       = parent;
     DataContext = this;
     InitializeTabs(initialSelection);
     InitializeSearchTab();
     if (MultiSelectMode)
     {
         emoGrid.SelectionMode      = DataGridSelectionMode.Extended;
         pbindGrid.SelectionMode    = DataGridSelectionMode.Extended;
         tbindGrid.SelectionMode    = DataGridSelectionMode.Extended;
         cbindGrid.SelectionMode    = DataGridSelectionMode.Extended;
         lightEmaGrid.SelectionMode = DataGridSelectionMode.Extended;
         searchGrid.SelectionMode   = DataGridSelectionMode.Extended;
     }
     else
     {
         emoGrid.SelectionMode      = DataGridSelectionMode.Single;
         pbindGrid.SelectionMode    = DataGridSelectionMode.Single;
         tbindGrid.SelectionMode    = DataGridSelectionMode.Single;
         cbindGrid.SelectionMode    = DataGridSelectionMode.Single;
         lightEmaGrid.SelectionMode = DataGridSelectionMode.Single;
         searchGrid.SelectionMode   = DataGridSelectionMode.Single;
         multiSelectTip.Visibility  = Visibility.Hidden;
     }
 }
예제 #3
0
        public void SaveParsedFiles()
        {
            foreach (var file in cachedFiles)
            {
                Directory.CreateDirectory(Path.GetDirectoryName(GeneralInfo.GetPathInGameDir(file.Path)));

                if (file.FileType == CachedFileType.Parsed && file.Data.GetType() == typeof(EffectContainerFile))
                {
                    string savePath         = GeneralInfo.GetPathInGameDir(file.Path);
                    EffectContainerFile ecf = (EffectContainerFile)file.Data;
                    ecf.Directory  = Path.GetDirectoryName(savePath);
                    ecf.Name       = Path.GetFileNameWithoutExtension(savePath);
                    ecf.saveFormat = Xv2CoreLib.EffectContainer.SaveFormat.Binary;
                    ecf.Save();
                }
                else if (file.FileType == CachedFileType.Parsed && file.Data.GetType() == typeof(ACB_File))
                {
                    string   path    = GeneralInfo.GetPathInGameDir(file.Path);
                    string   acbPath = string.Format("{0}/{1}", Path.GetDirectoryName(path), Path.GetFileNameWithoutExtension(path));
                    ACB_File acbFile = (ACB_File)file.Data;
                    acbFile.Save(acbPath, true);
                }
                else if (file.FileType == CachedFileType.Parsed)
                {
                    File.WriteAllBytes(GeneralInfo.GetPathInGameDir(file.Path), file.GetBytes());
                }
            }
        }
예제 #4
0
        private void Add(string path, object data, CachedFileType type, bool allowOverwrite = true)
        {
            var cachedFile = new CachedFile(path, data, allowOverwrite);

            if (data.GetType() == typeof(EffectContainerFile))
            {
                EffectContainerFile ecf = EffectContainerFile.New();
                ecf.AddEffects(((EffectContainerFile)data).Effects);
                cachedFile.backupEffectContainerFile = ecf;
            }
            else if (data.GetType() == typeof(ACB_File))
            {
                //Might be better to change this to a shallow-copy
                ACB_File acb = ACB_File.NewXv2Acb();

                foreach (var cue in ((ACB_File)data).Cues)
                {
                    acb.CopyCue((int)cue.ID, (ACB_File)data);
                }

                cachedFile.backupBgmFile = acb;
            }

            cachedFiles.Add(cachedFile);
        }
예제 #5
0
        private void Menu_New_Click(object sender, RoutedEventArgs e)
        {
            if (effectContainerFile != null)
            {
                var ret = MessageBox.Show(this, String.Format("Do you want to save the currently opened file first?", effectContainerFile.Name), "Open", MessageBoxButton.YesNoCancel, MessageBoxImage.Question);

                if (ret == MessageBoxResult.Yes)
                {
                    if (effectContainerFile.CanSave)
                    {
                        Menu_Save_Click(null, null);
                    }
                    else
                    {
                        Menu_SaveAs_Click(null, null);
                    }
                }
                else if (ret == MessageBoxResult.Cancel)
                {
                    return;
                }
            }

            effectContainerFile = EffectContainerFile.New();
            UpdateSelectedVersion();
            CloseOpenWindows();
        }
 /// <summary>
 /// Hue shift all assets, materials and textures in a EffectContainerFile.
 /// </summary>
 public RecolorAll_HueSet(EffectContainerFile _effectContainerFile, Window parent)
 {
     currentMode         = Mode.Global;
     effectContainerFile = _effectContainerFile;
     InitializeComponent();
     Owner       = parent;
     DataContext = this;
 }
예제 #7
0
        public void EepkLoaded(EffectContainerFile effectContainerFile)
        {
            if (effectContainerFile == null)
            {
                return;
            }

            NameList nameListToUse = GetNameListForFile(effectContainerFile.Name);

            if (nameListToUse != null)
            {
                ApplyNameList(effectContainerFile.Effects, nameListToUse);
            }
        }
예제 #8
0
        public EffectSelector(IList <Effect> effects, EffectContainerFile mainContainerFile, Window parent, Mode mode = Mode.ImportEffect)
        {
            currentMode       = mode;
            Effects           = new List <Effect>(effects);
            MainContainerFile = mainContainerFile;
            InitializeComponent();
            DataContext = this;
            Owner       = parent;

            switch (currentMode)
            {
            case Mode.ExportEffect:
                Title = "Export Effects";
                break;
            }
        }
예제 #9
0
        public AssetSelector(EffectContainerFile _effectFile, bool multiSelect, bool _constrained = false, Xv2CoreLib.EEPK.AssetType _constrainedAssetType = Xv2CoreLib.EEPK.AssetType.EMO, EepkEditor parent = null, Asset initialSelection = null)
        {
            MultiSelectMode      = multiSelect;
            effectContainerFile  = _effectFile;
            ConstrainedAssetType = _constrainedAssetType;
            Constrained          = _constrained;
            InitializeComponent();
            Owner       = Application.Current.MainWindow;
            DataContext = this;
            InitializeTabs(initialSelection);
            InitializeSearchTab();

            if (MultiSelectMode)
            {
                emoGrid.SelectionMode      = DataGridSelectionMode.Extended;
                pbindGrid.SelectionMode    = DataGridSelectionMode.Extended;
                tbindGrid.SelectionMode    = DataGridSelectionMode.Extended;
                cbindGrid.SelectionMode    = DataGridSelectionMode.Extended;
                lightEmaGrid.SelectionMode = DataGridSelectionMode.Extended;
                searchGrid.SelectionMode   = DataGridSelectionMode.Extended;
            }
            else
            {
                emoGrid.SelectionMode      = DataGridSelectionMode.Single;
                pbindGrid.SelectionMode    = DataGridSelectionMode.Single;
                tbindGrid.SelectionMode    = DataGridSelectionMode.Single;
                cbindGrid.SelectionMode    = DataGridSelectionMode.Single;
                lightEmaGrid.SelectionMode = DataGridSelectionMode.Single;
                searchGrid.SelectionMode   = DataGridSelectionMode.Single;
                multiSelectTip.Visibility  = Visibility.Hidden;
            }

            //Events
            emoGrid.PreviewKeyUp      += MetroWindow_PreviewKeyDown;
            pbindGrid.PreviewKeyUp    += MetroWindow_PreviewKeyDown;
            tbindGrid.PreviewKeyUp    += MetroWindow_PreviewKeyDown;
            cbindGrid.PreviewKeyUp    += MetroWindow_PreviewKeyDown;
            lightEmaGrid.PreviewKeyUp += MetroWindow_PreviewKeyDown;
            searchGrid.PreviewKeyUp   += MetroWindow_PreviewKeyDown;

            emoGrid.MouseDoubleClick      += EmoGrid_MouseDoubleClick;
            pbindGrid.MouseDoubleClick    += EmoGrid_MouseDoubleClick;
            tbindGrid.MouseDoubleClick    += EmoGrid_MouseDoubleClick;
            cbindGrid.MouseDoubleClick    += EmoGrid_MouseDoubleClick;
            lightEmaGrid.MouseDoubleClick += EmoGrid_MouseDoubleClick;
            searchGrid.MouseDoubleClick   += EmoGrid_MouseDoubleClick;
        }
예제 #10
0
        private async void Load(string path = null)
        {
            //If a file is already loaded then ask for confirmation
            if (effectContainerFile != null)
            {
                var ret = MessageBox.Show(App.Current.MainWindow, String.Format("Do you want to save the currently opened file first?", effectContainerFile.Name), "Open", MessageBoxButton.YesNoCancel, MessageBoxImage.Question);

                if (ret == MessageBoxResult.Yes)
                {
                    if (effectContainerFile.CanSave)
                    {
                        Menu_Save_Click(null, null);
                    }
                    else
                    {
                        Menu_SaveAs_Click(null, null);
                    }
                }
                else if (ret == MessageBoxResult.Cancel)
                {
                    return;
                }
            }

            //Clear Undo stack
            UndoManager.Instance.Clear();

            //Load the eepk + assets
            EffectContainerFile file = null;

            if (path == null)
            {
                file = await eepkEditor.LoadEffectContainerFile(false);
            }
            else
            {
                file = await eepkEditor.LoadEffectContainerFile(path, false);
            }

            if (file != null)
            {
                CloseOpenWindows();
                effectContainerFile = file;
                UpdateSelectedVersion();
            }
        }
 private void Load()
 {
     if (fileIO == null)
     {
         //Load files directly
         if (System.IO.Path.GetExtension(FilePath) == ".eepk")
         {
             effectContainerFile = EffectContainerFile.Load(FilePath);
         }
         else if (System.IO.Path.GetExtension(FilePath) == EffectContainerFile.ZipExtension)
         {
             effectContainerFile = EffectContainerFile.LoadVfx2(FilePath);
         }
     }
     else
     {
         //Load from game
         effectContainerFile = EffectContainerFile.Load(FilePath, fileIO, onlyFromCpk);
     }
 }
예제 #12
0
        public void CacheFile(string path, EffectContainerFile file, string source)
        {
            string name = System.IO.Path.GetFileNameWithoutExtension(path);

            path = path.Replace(@"//", @"/").Replace(@"\\", @"/").Replace(@"\", @"/").ToLower();

            //If file is already cached, then remove it
            if (IsFileCached(path))
            {
                if (!RemoveCachedFile(path))
                {
                    throw new Exception(String.Format("CacheFile: Cannot remove existing cached file instance for \"{0}\".", path));
                }
            }

            if (SettingsManager.settings.FileCacheLimit == 0)
            {
                return; //caching is disabled
            }
            else if (SettingsManager.settings.FileCacheLimit > 0)
            {
                if (CachedFiles.Count >= SettingsManager.settings.FileCacheLimit)
                {
                    CachedFiles.RemoveAt(0);

                    //CachedFiles.RemoveRange(0, CachedFiles.Count - GeneralInfo.CacheFileLimit + 1);
                }

                CachedFiles.Add(new CachedFile()
                {
                    Path = path,
                    effectContainerFile = file,
                    Name   = name,
                    Source = source
                });
            }
        }