コード例 #1
0
        private static async Task RunInternal(string inputFilePath)
        {
            try
            {
                await MainWin.LockUi("Exporting Anamnesis Character", "....", LockObj);

                MainWin.LockProgress.Report("Loading chara file...");

                name = Path.GetFileNameWithoutExtension(inputFilePath);

                // read chara file
                string json = File.ReadAllText(inputFilePath);
                character = JsonConvert.DeserializeObject <CharacterFile>(json);
                XivRace race = character.GetXivRace();

                // load all items we can
                MainWin.LockProgress.Report("Loading items...");
                allItems = await XivCache.GetFullItemList();

                // Body
                await Export("Face", GetFaceModel(race, character.Head, character.Eyebrows, character.Eyes, character.Nose, character.Jaw, character.Mouth), race);
                await Export("EarsTail", GetEarsTailModel(race, character.TailEarsType), race);
                await Export("Hair", GetHairModel(race, character.Hair), race);
                await Export("Head", GetItemModel(character.HeadGear, "Head"), race);
                await Export("Body", GetItemModel(character.Body, "Body"), race);
                await Export("Hands", GetItemModel(character.Hands, "Hands"), race);
                await Export("Legs", GetItemModel(character.Legs, "Legs"), race);
                await Export("Feet", GetItemModel(character.Feet, "Feet"), race);
                await Export("Earring", GetItemModel(character.Ears, "Earring"), race);
                await Export("Neck", GetItemModel(character.Neck, "Neck"), race);
                await Export("Wrists", GetItemModel(character.Wrists, "Wrists"), race);
                await Export("L Ring", GetItemModel(character.LeftRing, "Rings"), race);
                await Export("R ring", GetItemModel(character.RightRing, "Rings"), race);
                await Export("Weapon Main", GetWeaponModel(character.MainHand, true), race);
                await Export("Weapon Off", GetWeaponModel(character.OffHand, false), race);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error running export");
            }
            finally
            {
                await MainWin.UnlockUi(LockObj);
            }
        }
コード例 #2
0
        private async Task <List <IItem> > BuildCategoryTree()
        {
            foreach (var kv in _categoryStructure)
            {
                // Make the top level node.
                var e = new ItemTreeElement(null, null, kv.Key);

                foreach (var secondary in kv.Value)
                {
                    var e2 = new ItemTreeElement(e, null, secondary);
                    e.Children.Add(e2);
                }
                CategoryElements.Add(e);
            }

            var gameDir  = XivCache.GameInfo.GameDirectory;
            var language = XivCache.GameInfo.GameLanguage;

            var items = await XivCache.GetFullItemList();

            foreach (var item in items)
            {
                // Find what node we should be attached to.
                ItemTreeElement catParent = null;
                var             topLevel  = CategoryElements.FirstOrDefault(x => x.DisplayName == item.PrimaryCategory);
                if (topLevel == null)
                {
                    topLevel = new ItemTreeElement(null, null, item.PrimaryCategory);
                    CategoryElements.Add(topLevel);
                }

                var secondLevel = topLevel.Children.FirstOrDefault(x => x.DisplayName == item.SecondaryCategory);
                if (secondLevel == null)
                {
                    if (item.SecondaryCategory == item.Name)
                    {
                        // These are a special snowflake case.
                        secondLevel = topLevel;
                    }
                    else
                    {
                        secondLevel = new ItemTreeElement(topLevel, null, item.SecondaryCategory);
                        topLevel.Children.Add(secondLevel);
                    }
                }

                catParent = secondLevel;

                ItemTreeElement setParent = null;
                // Try and see if we have a valid root parent to attach to in the sets tree.
                try
                {
                    var type = item.GetType();
                    // Perf.  Much faster to just not test those types at all, as we know they won't resolve.
                    if (type != typeof(XivUi))
                    {
                        var itemRoot = item.GetRootInfo();
                        if (itemRoot.PrimaryType != XivItemType.unknown)
                        {
                            var st = itemRoot.ToString();
                            if (DependencyRootNodes.ContainsKey(st))
                            {
                                setParent = DependencyRootNodes[st];
                            }
                        }
                    }
                } catch (Exception ex)
                {
                    throw;
                }

                var e2 = new ItemTreeElement(catParent, setParent, item);
                if (catParent != null)
                {
                    catParent.Children.Add(e2);
                }
                if (setParent != null)
                {
                    setParent.Children.Add(e2);
                }
            }
            return(items);
        }