Beispiel #1
0
        private static ProjectCraftingTree DecodeCraftingTreeItems(string craftingSection)
        {
            var craftingTree = new ProjectCraftingTree();

            if (int.TryParse(craftingSection.Substring(0, 1), out int treeType))
            {
                var craftingTreeBytes = GetCraftingTreeBytes(craftingSection);

                if (craftingTreeBytes == null)
                {
                    return(craftingTree);
                }

                switch ((CraftingTreeOptions)treeType)
                {
                case CraftingTreeOptions.Full:
                    craftingTree = DecodeFullCraftingTree(craftingTreeBytes);
                    break;

                case CraftingTreeOptions.Light:
                    craftingTree = DecodeLightCraftingTree(craftingTreeBytes);
                    break;
                }
            }
            else
            {
                //TODO: Log string failue
            }

            return(craftingTree);
        }
        private static string ConvertLightCraftingTreeToBase64(ProjectCraftingTree craftingTree)
        {
            using (MemoryStream m = new MemoryStream())
            {
                using (BinaryWriter writer = new BinaryWriter(m))
                {
                    foreach (var item in craftingTree.Items)
                    {
                        writer.Write(item.Item.Id);
                        writer.Write(item.RequiredAmount);
                    }
                }

                byte[] treeArray = m.ToArray();

                return(Convert.ToBase64String(treeArray));
            }
        }
Beispiel #3
0
        private static ProjectCraftingTree CreateTestData()
        {
            var itemDictionary = new Dictionary <int, int>
            {
                { 10, 5 },
                { 2, 1 },
                { 157, 1000 },
                { 183, 40 },
                { 214, 1 },
                { 521, 12 },
                { 325, 1 },
                { 568, 14 },
                { 722, 1 },
                { 205, 7 }
            };

            var craftingTree = new ProjectCraftingTree(itemDictionary);

            return(craftingTree);
        }
        private static string ConvertFullCraftingTreeToBase64(ProjectCraftingTree craftingTree)
        {
            using (MemoryStream m = new MemoryStream())
            {
                using (BinaryWriter writer = new BinaryWriter(m))
                {
                    var settings = new JsonSerializerSettings()
                    {
                        ReferenceLoopHandling = ReferenceLoopHandling.Ignore
                    };

                    var treeJson = JsonConvert.SerializeObject(craftingTree.Items, settings);
                    writer.Write(treeJson);
                }

                byte[] treeArray = m.ToArray();

                return(Convert.ToBase64String(treeArray));
            }
        }
Beispiel #5
0
        private static ProjectCraftingTree DecodeFullCraftingTree(byte[] craftingTreeBytes)
        {
            ProjectCraftingTree craftingTree = new ProjectCraftingTree();

            using (MemoryStream m = new MemoryStream(craftingTreeBytes))
            {
                using (BinaryReader reader = new BinaryReader(m))
                {
                    var treeJson = reader.ReadString();

                    var converters = new CraftingTreeItemConverter();
                    craftingTree.Items = JsonConvert.DeserializeObject <RecursiveObservableCollection <ICraftingTreeItem> >(treeJson, converters);
                    foreach (ICraftingTreeCompoundItem rootItem in craftingTree.Items.Where(x => x is ICraftingTreeCompoundItem))
                    {
                        rootItem.UpdateIngredientCounts();
                        rootItem.UpdateIngredientParents();
                    }
                }
            }

            return(craftingTree);
        }
Beispiel #6
0
        private static ProjectCraftingTree DecodeLightCraftingTree(byte[] craftingTreeBytes)
        {
            var craftingTree = new ProjectCraftingTree();

            using (MemoryStream m = new MemoryStream(craftingTreeBytes))
            {
                using (BinaryReader reader = new BinaryReader(m))
                {
                    var itemDictionary = new Dictionary <int, int>();

                    while (reader.BaseStream.Position != reader.BaseStream.Length)
                    {
                        var itemId    = reader.ReadInt32();
                        var itemCount = reader.ReadInt32();
                        itemDictionary.Add(itemId, itemCount);
                    }

                    craftingTree = new ProjectCraftingTree(itemDictionary);
                }
            }

            return(craftingTree);
        }