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)); } }
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)); } }
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); }
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); }