private string GenComponentsFile() { CSharpWriter writer = new CSharpWriter(); writer.Write($"public static partial class {context.Name}Components"); using (new CSharpWriter.Scop(writer)) { writer.Write($"static {context.Name}Components()"); using (new CSharpWriter.Scop(writer)) { writer.Write($"OnContextCreat = DoContentInit;").NewLine(); writer.Write($"ComponentCount = {componentTypes.Count};").NewLine(); writer.Write("InitComponentsIdentity();"); } writer.Write($"static void InitComponentsIdentity()"); using (new CSharpWriter.Scop(writer)) { for (int i = 0; i < componentTypes.Count; ++i) { var type = componentTypes[i]; if (typeof(LiteECS.IUnique).IsAssignableFrom(type)) { writer.Write($"LiteECS.ComponentIdentity<{type.FullName}>.Unique = true;").NewLine(); } writer.Write($"LiteECS.ComponentIdentity<{type.FullName}>.Id = {i};"); if (i < componentTypes.Count - 1) { writer.NewLine(); } } } writer.Write($"static void DoContentInit({context.Name}Context context)"); using (new CSharpWriter.Scop(writer)) { for (int i = 0; i < componentTypes.Count; ++i) { var type = componentTypes[i]; if (typeof(LiteECS.IUnique).IsAssignableFrom(type)) { writer.Write($"context.InitUniqueComponentCollector<{type.FullName}>();"); } else { writer.Write($"context.InitComponentCollector<{type.FullName}>();"); } if (i < componentTypes.Count - 1) { writer.NewLine(); } } } } return(writer.ToString()); }