public override void Modify(CharacterViewModel model) { OpenFileDialog opfd = new OpenFileDialog { Filter = "PNG Files (*.png)|*.png", CheckFileExists = true, InitialDirectory = Core.EditSaveDir, Multiselect = false, }; opfd.CustomPlaces.Add(new FileDialogCustomPlace(Core.EditSaveDir)); if (!opfd.ShowDialog() .Value) { return; } CharacterFile inC; using (Stream s = File.OpenRead(opfd.FileName)) inC = CharacterFile.Load(s); if (inC == null) { return; } ImportWindow iWnd = new ImportWindow { Imported = inC, Target = model.Character }; iWnd.ShowDialog(); }
private void ReloadViewModel(CharacterViewModel model) { string filePath = (string)model.Metadata; CharacterFile cf = CharacterFile.Load(filePath); if (cf == null) { return; } CharacterViewModel newViewModel = new CharacterViewModel(cf, filePath); OnCharacterUpdated(new CharacterViewModelProviderEventArgs(newViewModel, filePath)); }
private void FSWatcher_Changed(object sender, FileSystemEventArgs e) { CharacterFile cf = CharacterFile.Load(e.FullPath); if (cf == null) { return; } CharacterViewModel viewmodel = CreateViewModel(cf, e.FullPath); if (_lastCreated != null && e.FullPath.Equals(_lastCreated)) { _lastCreated = null; OnCharacterAdded(new CharacterViewModelProviderEventArgs(viewmodel)); return; } OnCharacterUpdated(new CharacterViewModelProviderEventArgs(viewmodel, e.FullPath)); }
public void TestLoadMethod() { Stream stream = File.OpenRead(TEST_FILE); stream.Seek(0, SeekOrigin.End); long fileSize = stream.Position; stream.Seek(0, SeekOrigin.Begin); CharacterFile characterFile = new CharacterFile(); characterFile.Load(stream); long streamPosition = stream.Position; stream.Close(); Assert.AreEqual(fileSize, streamPosition, "Not all of the file was read"); }
private CharacterViewModel CreateViewModel(CharacterReference reference) { XDocument scanDocument = Core.LoadPlayDataXDocument(); CharacterFile cf = CharacterFile.Load(reference.CharBytes); CharacterViewModel vm = new CharacterViewModel(cf, reference); DataBlockWrapperBuffer playData = new DataBlockWrapperBuffer(reference.PlayBytes, scanDocument); vm.ExtraData.Add("PLAY_SEAT", reference.Seat); vm.ExtraData.Add("PLAY_DATA", playData); vm.SaveCommand = new RelayCommand(() => SaveViewModel(vm), () => SaveViewModelCanExecute(vm)); vm.ReloadCommand = new RelayCommand(() => ReloadViewModel(vm)); InstanceCache.Add(vm); return(vm); }
public void TestSaveMethod() { CharacterFile characterFile = new CharacterFile(); characterFile.Load(TEST_FILE); MemoryStream savedStream = new MemoryStream(); characterFile.Save(savedStream); savedStream.Seek(0, SeekOrigin.Begin); CharacterFile savedCharacterFile = new CharacterFile(); savedCharacterFile.Load(savedStream); savedStream.Close(); Assert.AreEqual(characterFile.SkeletonFiles.Count, savedCharacterFile.SkeletonFiles.Count, "Skeleton file counts do not match"); for (int i = 0; i < characterFile.SkeletonFiles.Count; i++) { Assert.AreEqual(characterFile.SkeletonFiles[i], savedCharacterFile.SkeletonFiles[i], "Skeleton file names do not match"); } Assert.AreEqual(characterFile.MotionFiles.Count, savedCharacterFile.MotionFiles.Count, "Motion file counts do not match"); for (int i = 0; i < characterFile.MotionFiles.Count; i++) { Assert.AreEqual(characterFile.MotionFiles[i], savedCharacterFile.MotionFiles[i], "Motion file names do not match"); } Assert.AreEqual(characterFile.EffectFiles.Count, savedCharacterFile.EffectFiles.Count, "Effect file counts do not match"); for (int i = 0; i < characterFile.EffectFiles.Count; i++) { Assert.AreEqual(characterFile.EffectFiles[i], savedCharacterFile.EffectFiles[i], "Effect file names do not match"); } Assert.AreEqual(characterFile.Characters.Count, savedCharacterFile.Characters.Count, "Character counts do not match"); for (int i = 0; i < characterFile.Characters.Count; i++) { Assert.AreEqual(characterFile.Characters[i].IsEnabled, savedCharacterFile.Characters[i].IsEnabled, "Character enabled values do not match"); if (characterFile.Characters[i].IsEnabled) { Assert.AreEqual(characterFile.Characters[i].ID, savedCharacterFile.Characters[i].ID, "Character ID values do not match"); Assert.AreEqual(characterFile.Characters[i].Name, savedCharacterFile.Characters[i].Name, "Character name values do not match"); Assert.AreEqual(characterFile.Characters[i].Objects.Count, savedCharacterFile.Characters[i].Objects.Count, "Character object counts do not match"); for (int j = 0; j < characterFile.Characters[i].Objects.Count; j++) { Assert.AreEqual(characterFile.Characters[i].Objects[j].Object, savedCharacterFile.Characters[i].Objects[j].Object, "Character object values do not match"); } Assert.AreEqual(characterFile.Characters[i].Animations.Count, savedCharacterFile.Characters[i].Animations.Count, "Character animation counts do not match"); for (int j = 0; j < characterFile.Characters[i].Animations.Count; j++) { Assert.AreEqual(characterFile.Characters[i].Animations[j].Type, savedCharacterFile.Characters[i].Animations[j].Type, "Character animation type values do not match"); Assert.AreEqual(characterFile.Characters[i].Animations[j].Animation, savedCharacterFile.Characters[i].Animations[j].Animation, "Character animation values do not match"); } Assert.AreEqual(characterFile.Characters[i].Effects.Count, savedCharacterFile.Characters[i].Effects.Count, "Character effect counts do not match"); for (int j = 0; j < characterFile.Characters[i].Effects.Count; j++) { Assert.AreEqual(characterFile.Characters[i].Effects[j].Bone, savedCharacterFile.Characters[i].Effects[j].Bone, "Character effect bone values do not match"); Assert.AreEqual(characterFile.Characters[i].Effects[j].Effect, savedCharacterFile.Characters[i].Effects[j].Effect, "Character effect values do not match"); } } } }
private IEnumerable <CharacterViewModel> ScanDirectories() { SearchOption searchMode = _subDirs ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly; var files = Paths.SelectMany(s => Directory.GetFiles(s, "*.png", searchMode)) .ToArray(); var queue = new Queue <string>(files); List <CharacterViewModel> characters = new List <CharacterViewModel>(); int loaded = 0; int max = queue.Count; Action <object> taskAction = (obj) => { string file = (string)obj; CharacterFile cf = CharacterFile.Load(file); if (cf == null) { return; } CharacterViewModel vm = CreateViewModel(cf, file); characters.Add(vm); }; Task[] tasks = new Task[Math.Min(Environment.ProcessorCount, max)]; for (int i = 0; i < tasks.Length; i++) { string pull = queue.Dequeue(); tasks[i] = Task.Factory.StartNew(taskAction, pull); } while (queue.Any()) { int finished = Task.WaitAny(tasks); string pull = queue.Dequeue(); string file = (string)tasks[finished].AsyncState; Report(loaded++, max, Path.GetFileName(file)); tasks[finished] = Task.Factory.StartNew(taskAction, pull); } Task.WaitAll(tasks); /* * int max = files.Length; * for (int i = 0; i < max; i++) * { * string file = files[i]; * CharacterFile cf = CharacterFile.Load(file); * if (cf == null) * continue; * CharacterViewModel vm = CreateViewModel(cf, file); * Report(i, max, Path.GetFileName(file)); * characters.Add(vm); * } */ return(characters); }