Beispiel #1
0
        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));
        }
Beispiel #4
0
        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);
        }
Beispiel #6
0
        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);
        }