public static void WriteEntityGroupSetupFunction(UTinyCodeWriter writer, UTinyProject project, UTinyEntityGroup entityGroup, bool writeEntityGroupComponent = true, bool writeEntityLayer = true) { var entityIndex = 0; var entityIndexMap = new Dictionary <UTinyEntity.Reference, int>(); using (writer.Scope("function(w)")) { entityIndexMap.Clear(); foreach (var reference in entityGroup.Entities) { var entity = reference.Dereference(entityGroup.Registry); ++entityIndex; entityIndexMap[reference] = entityIndex; writer.Line($"var e{entityIndex} = w.create({EscapeJsString(entity.Name)});"); } if (writeEntityGroupComponent) { foreach (var reference in entityGroup.Entities) { var index = entityIndexMap[reference]; writer.Line($"e{index}.addComponent(this.Component);"); } } if (writeEntityLayer) { foreach (var reference in entityGroup.Entities) { var index = entityIndexMap[reference]; var entity = reference.Dereference(entityGroup.Registry); writer.Line($"e{index}.addComponent({GetFullyQualifiedLayerName(LayerMask.LayerToName(entity.Layer))});"); } } var context = new VisitorContext { Project = project, Module = project.Module.Dereference(project.Registry), Registry = project.Registry, Writer = writer, EntityIndexMap = entityIndexMap }; entityIndex = 0; foreach (var reference in entityGroup.Entities) { var entity = reference.Dereference(entityGroup.Registry); ++entityIndex; foreach (var component in entity.Components) { var type = component.Type.Dereference(component.Registry); if (null == type) { Debug.LogError($"{UTinyConstants.ApplicationName}: Missing component type, ComponentType=[{component.Type.Name}] Entity=[{entity.Name}] Group=[{entityGroup.Name}]"); continue; } var index = ++context.ComponentIndex; writer.Line($"var c{index} = e{entityIndex}.addComponent({UTinyBuildPipeline.GetJsTypeName(type)});"); component.Properties.Visit(new ComponentVisitor { VisitorContext = context, Path = $"c{index}", Entity = $"e{entityIndex}" }); } } writer.WriteIndent(); writer.WriteRaw("return ["); for (var i = 0; i < entityIndex; i++) { writer.WriteRaw(i != 0 ? $", e{i + 1}" : $"e{i + 1}"); } writer.WriteRaw("];\n"); } writer.Line().Line(); }