/* * *.qtn * * enum Class { * Rogue, Warrior, Mage * } * * * component Character { * int Health; * int Level; * int Mana; * Class Class; * } * * signals, events, input-blocks. * */ static void Main(string[] args) { // Assembly-CSharp.dll, main unity dll // Roslyn Source Generators ... unity support is "iffy" const string OUTPUT_PATH = "../../../../CodeGeneration.Target/Generated.cs"; var input = new List <CG_Type>(); var foo = new CG_Class() { Name = "Foo" }; foo.Fields.Add((typeof(int), "test")); var bar = new CG_Struct() { Name = "Bar" }; bar.Fields.Add((typeof(int), "test")); input.Add(foo); input.Add(bar); var builder = new CodeBuilder(); builder.Using("System.Runtime.InteropServices"); using (builder.BeginNamespace("TestNamespace")) { foreach (var type in input) { if (type is CG_Class cls) { GenerateClass(builder, cls); } if (type is CG_Struct str) { GenerateStruct(builder, str); } } } File.WriteAllText(OUTPUT_PATH, builder.ToString()); }
static void GenerateStruct(CodeBuilder builder, CG_Struct str) { using (builder.BeginStruct(str.Name, LayoutKind.Sequential)) { GenerateFields(builder, str.Fields); } }