Moved the test command to a seperate "TestingCommands" class
This commit is contained in:
@@ -1,4 +1,6 @@
|
|||||||
using System;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text.Json;
|
||||||
using Cogwheel;
|
using Cogwheel;
|
||||||
using SessionZero.Cogwheel;
|
using SessionZero.Cogwheel;
|
||||||
using SessionZero.Data;
|
using SessionZero.Data;
|
||||||
@@ -31,98 +33,4 @@ public static class AppManager
|
|||||||
{
|
{
|
||||||
MainWindow.ChangePage(pageName);
|
MainWindow.ChangePage(pageName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[Command(Name = "test")]
|
|
||||||
public 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
|
|
||||||
{
|
|
||||||
// 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 + " ");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
119
SessionZero/TestingCommands.cs
Normal file
119
SessionZero/TestingCommands.cs
Normal file
@@ -0,0 +1,119 @@
|
|||||||
|
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<string, object> FieldsToDictionary(this SzObject obj)
|
||||||
|
{
|
||||||
|
var result = new Dictionary<string, object>();
|
||||||
|
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<string, object> GroupToDict(SzFieldGroup group)
|
||||||
|
{
|
||||||
|
var dict = new Dictionary<string, object>();
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -109,22 +109,18 @@ An instanced DatasetObject should only contain simple fields and values, no obje
|
|||||||
|
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
"id": "some_id",
|
"Id": "",
|
||||||
"uuid": "a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11",
|
"Uuid": "0",
|
||||||
"template_id": "core_item",
|
"template_id": "core_item",
|
||||||
"parent_dataset_id": "core_items",
|
|
||||||
"compatible_systems": ["sz_core", "d20"],
|
|
||||||
|
|
||||||
"fields": {
|
"fields": {
|
||||||
"name": "Human readable name",
|
"name": "Excalibur",
|
||||||
"description": "A description",
|
"description": null,
|
||||||
"consumable": false,
|
"consumable": true,
|
||||||
|
|
||||||
"stats": {
|
"stats": {
|
||||||
"value": 10,
|
"value": 10,
|
||||||
"weight": 2,
|
"weight": 2,
|
||||||
"modifiers": {
|
"modifiers": {
|
||||||
"base": 1
|
"base": 5
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user