From 5cd37f744569b819f12a4e7580cb839432711b08 Mon Sep 17 00:00:00 2001 From: MayNL Date: Wed, 1 Apr 2026 17:20:46 -0400 Subject: [PATCH] Fixed JSON export --- PCK-Studio/Forms/Editor/GameRuleFileEditor.cs | 44 ++++++++++++++++--- 1 file changed, 39 insertions(+), 5 deletions(-) diff --git a/PCK-Studio/Forms/Editor/GameRuleFileEditor.cs b/PCK-Studio/Forms/Editor/GameRuleFileEditor.cs index 53d408a1..0229e839 100644 --- a/PCK-Studio/Forms/Editor/GameRuleFileEditor.cs +++ b/PCK-Studio/Forms/Editor/GameRuleFileEditor.cs @@ -28,6 +28,7 @@ using PckStudio.ToolboxItems; using PckStudio.Controls; using PckStudio.Interfaces; using PckStudio.Internal; +using Newtonsoft.Json.Linq; namespace PckStudio.Forms.Editor { @@ -264,6 +265,37 @@ namespace PckStudio.Forms.Editor saveFileDialog1.ShowDialog(); } + private JArray BuildJSONData(IReadOnlyCollection gameRules) + { + JArray data = new JArray(); + + foreach (GameRuleFile.GameRule rule in gameRules) + { + JObject ruleObject = new JObject(); + + ruleObject["name"] = rule.Name; + + JObject ruleParameters = new JObject(); + + foreach (var parameter in rule.GetParameters()) + { + ruleParameters[parameter.Key] = parameter.Value; + } + + if (ruleParameters.Count > 0) + ruleObject["parameters"] = ruleParameters; + + JArray childRules = BuildJSONData(rule.GetRules()); + + if(childRules.Count > 0) + ruleObject["rules"] = childRules; + + data.Add(ruleObject); + } + + return data; + } + private void saveFileDialog1_FileOk(object sender, CancelEventArgs e) { if (saveFileDialog1.FileName == "") @@ -271,11 +303,13 @@ namespace PckStudio.Forms.Editor return; } - TextWriter writer = new StreamWriter(saveFileDialog1.FileName); - JsonSerializer serializer = new JsonSerializer(); - serializer.Formatting = Formatting.Indented; - serializer.Serialize(writer, _file.Root.ChildRules); - writer.Flush(); + using (StreamWriter file = File.CreateText(saveFileDialog1.FileName)) + using (JsonTextWriter writer = new JsonTextWriter(file)) + { + JArray data = BuildJSONData(EditorValue.Root.GetRules()); + writer.Formatting = Formatting.Indented; + data.WriteTo(writer); + } } } }