using System; using System.Collections.Generic; using System.Text.Json; using Cogwheel; using SessionZero.Data; using SessionZero.Data.Sztl; namespace SessionZero; public static class TestingCommands { // TODO: Remove this after testing [Command(Name = "test")] private static void TestParseTemplate() { string toml = @" [metadata] template_type = ""data"" id = ""core_item"" uuid = ""0"" data_type = ""item"" version = ""1.0.0"" description = ""Core SessionZero item template"" [name] type = ""text"" [description] type = ""textblock"" [consumable] type = ""bool"" default_value = false [stats.value] type = ""number"" [stats.weight] type = ""number"" [stats.modifiers.base] type = ""number"" default_value = 1 "; try { var template = SztlParser.ParseTemplate(toml); var obj = SzObjectFactory.CreateObject(template) as SzDataObject; obj.SetFieldValue("name", "Excalibur"); obj.SetFieldValue("consumable", true); obj.SetFieldValue("stats.value", 10); obj.SetFieldValue("stats.weight", 2); obj.SetFieldValue("stats.modifiers.base", 5); COGWHEEL.Log($"Template ID: {template.Id}"); COGWHEEL.Log("\nInstanced Object Field Values:"); foreach (var fieldPath in new[] { "name", "consumable", "stats.value", "stats.weight", "stats.modifiers.base" }) { COGWHEEL.Log($"> {fieldPath} = {obj.GetFieldValue(fieldPath)}"); } var jsonOptions = new JsonSerializerOptions { WriteIndented = true }; string json = JsonSerializer.Serialize(new { obj.Id, obj.Uuid, template_id = obj.TemplateId, fields = obj.FieldsToDictionary() }, jsonOptions); COGWHEEL.Log("\nJSON Output:"); COGWHEEL.Log(json); } catch (Exception ex) { COGWHEEL.Log($"Error parsing template: {ex.Message}"); } } private static Dictionary FieldsToDictionary(this SzObject obj) { var result = new Dictionary(); foreach (var kvp in obj.Fields) { result[kvp.Key] = kvp.Value.Value; } foreach (var group in obj.FieldGroups) { result[group.Key] = GroupToDict(group.Value); } return result; } private static Dictionary GroupToDict(SzFieldGroup group) { var dict = new Dictionary(); foreach (var kvp in group.Fields) { dict[kvp.Key] = kvp.Value.Value; } foreach (var subGroup in group.SubGroups) { dict[subGroup.Key] = GroupToDict(subGroup.Value); } return dict; } }