private void GenerateParentBlockList() { FlatConfigBlockByName .Where(B => B.Value?.Values?.ContainsKey("ChildBlocks") == true) .ForEach(B => B.Value.Values["ChildBlocks"].ToString() .Split(',').Select(N => N.Trim()) .ForEach(N => { if (!ParentBlockName.ContainsKey(N)) { ParentBlockName.Add(N, B.Key); } }) ); FlatConfigBlockByName .Where(B => B.Value?.Values?.ContainsKey("ParentBlocks") == true) .ForEach(B => B.Value.Values["ParentBlocks"].ToString() .Split(',').Select(N => N.Trim()) .ForEach(N => { if (!B.Value.Values.TryGetValue("Name", out var name) || !FlatConfigBlockByName.TryGetValue(N, out var parentBlock) || !parentBlock.Values.TryGetValue("AllowPlacingAt", out var placeableAt)) { return; } placeableAt.ToString().Split(',').Select(N => N.Trim()) .ForEach(P => { if (!ParentBlockName.ContainsKey(P + name.ToString())) { ParentBlockName.Add(P + name.ToString(), N); } }); }) ); }
private void ScanTemplates(EcfBlock templateRootBlock, Dictionary <int, double> ressList, double multiplyer) { var templateName = templateRootBlock.Attr.FirstOrDefault(A => A.Name == "Name")?.Value.ToString(); bool.TryParse(templateRootBlock.Attr.FirstOrDefault(A => A.Name == "BaseItem")?.Value.ToString(), out var isBaseItem); templateRootBlock.Childs? .FirstOrDefault(C => C.Key == "Child Inputs").Value?.Attr? .ForEach(C => { if (C.Name.ToString() == templateName) { return; } if (!isBaseItem && FlatConfigTemplatesByName.TryGetValue(C.Name, out var recipe)) { bool.TryParse(recipe.Attr.FirstOrDefault(A => A.Name == "BaseItem")?.Value.ToString(), out var isSubBaseItem); if (!isSubBaseItem) { var recipeMultiplyer = multiplyer * (int)C.Value; if (recipe.Values.TryGetValue("OutputCount", out var outputCount)) { recipeMultiplyer /= (int)outputCount; } ScanTemplates(recipe, ressList, recipeMultiplyer); return; } } if (!FlatConfigBlockByName.TryGetValue(C.Name, out var ressource)) { return; } if (!ressource.Values.TryGetValue("Id", out var ressId)) { return; } if (ressList.TryGetValue((int)ressId, out var count)) { ressList[(int)ressId] = count + multiplyer * (int)C.Value; } else { ressList.Add((int)ressId, multiplyer * (int)C.Value); } }); }