From 2f5214d3b24be018760328bae11b25caf199ba9c Mon Sep 17 00:00:00 2001 From: That-One-Nerd Date: Sat, 27 May 2023 16:20:13 -0400 Subject: [PATCH] Tiny progress in vkv editor. --- SrcMod/Shell/Modules/Valve/VkvModule.cs | 39 ++++++++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) diff --git a/SrcMod/Shell/Modules/Valve/VkvModule.cs b/SrcMod/Shell/Modules/Valve/VkvModule.cs index 33f427a..992b825 100644 --- a/SrcMod/Shell/Modules/Valve/VkvModule.cs +++ b/SrcMod/Shell/Modules/Valve/VkvModule.cs @@ -3,5 +3,42 @@ [Module("vkv")] public static class VkvModule { - + [Command("create")] + public static void CreateVkv(string path) + { + if (File.Exists(path)) throw new($"File already exists at \"{path}\". Did you mean to run \"vkv edit\"?"); + + VkvNode parentNode = new VkvTreeNode() + { + { "key", new VkvSingleNode("value") } + }; + string parentNodeName = "tree"; + + VkvModifyWhole(ref parentNode, ref parentNodeName); + } + + private static void VkvModifyWhole(ref VkvNode node, ref string nodeName) + { + VkvDisplayNode(node, nodeName); + } + private static void VkvDisplayNode(in VkvNode? node, in string nodeName, in int indent = 0) + { + int spaceCount = indent * 4; + + if (node is null) return; + else if (node is VkvSingleNode single) + { + Write(new string(' ', spaceCount) + $"\"{nodeName}\" \"{single.value}\""); + } + else if (node is VkvTreeNode tree) + { + Write(new string(' ', spaceCount) + $"\"{nodeName}\"\n" + new string(' ', spaceCount) + "{"); + foreach (KeyValuePair subNode in tree) + { + VkvDisplayNode(subNode.Value, subNode.Key, indent + 1); + } + Write(new string(' ', spaceCount) + "}"); + } + else return; + } }