Factories for templates and objects, Sztl parsing

This commit is contained in:
2025-11-30 21:16:33 -06:00
parent a892d982da
commit 069adb5ff5
10 changed files with 421 additions and 15 deletions

View File

@@ -1,5 +1,8 @@
using System;
using Cogwheel;
using SessionZero.Cogwheel;
using SessionZero.Data;
using SessionZero.Data.Sztl;
namespace SessionZero;
@@ -28,10 +31,98 @@ public static class AppManager
{
MainWindow.ChangePage(pageName);
}
[Command(Name = "test")]
private static void Test()
public static void TestParseTemplate()
{
COGWHEEL.LogWarning($"Trim size is: {ConsoleControl.OutputTrimSize}");
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
{
// Parse template
var template = SztlParser.ParseTemplate(toml);
COGWHEEL.Log($"Template ID: {template.Id}");
COGWHEEL.Log("\nTop-Level Fields:");
foreach (var f in template.Fields)
{
COGWHEEL.Log($"- {f.Key}: Type={f.Value.Type}, Default={f.Value}, TextBlock={f.Value.IsTextBlock}");
}
COGWHEEL.Log("\nGroups:");
foreach (var g in template.SubGroups)
{
PrintGroup(g.Value, "");
}
// --- Instantiate SzDataObject ---
var obj = SzObjectFactory.CreateObject(template);
// Set some values
obj.SetFieldValue("name", "Excalibur");
obj.SetFieldValue("consumable", true);
obj.SetFieldValue("stats.value", 10);
obj.SetFieldValue("stats.weight", 2);
obj.SetFieldValue("stats.modifiers.base", 5);
// Get and log values
COGWHEEL.Log("\nInstanced Object Field Values:");
COGWHEEL.Log($"name = {obj.GetFieldValueAsString("name")}");
COGWHEEL.Log($"consumable = {obj.GetFieldValue<bool>("consumable")}");
COGWHEEL.Log($"stats.value = {obj.GetFieldValue<int>("stats.value")}");
COGWHEEL.Log($"stats.weight = {obj.GetFieldValue<int>("stats.weight")}");
COGWHEEL.Log($"stats.modifiers.base = {obj.GetFieldValue<int>("stats.modifiers.base")}");
}
catch (Exception ex)
{
COGWHEEL.Log($"Error parsing template: {ex.Message}");
}
}
private static void PrintGroup(SztlFieldGroup group, string indent)
{
COGWHEEL.Log($"{indent}Group: {group.Id}");
foreach (var f in group.Fields)
{
COGWHEEL.Log($"{indent} Field: {f.Key}, Type={f.Value.Type}, Default={f.Value}");
}
foreach (var sg in group.SubGroups)
{
PrintGroup(sg.Value, indent + " ");
}
}
}