Type CompileGraph(CodeGenMode mode, out CompilationResult results) { results = default; RoslynEcsTranslator translator = (RoslynEcsTranslator)GraphModel.CreateTranslator(); translator.AllowNoJobsFallback = false; // because of the hack in the translator constructor, override right after ((EcsStencil)Stencil).UseJobSystem = mode == CodeGenMode.Jobs || mode == CodeGenMode.JobsTracing; var compilationOptions = CompilationOptions.LiveEditing; if (mode == CodeGenMode.JobsTracing || mode == CodeGenMode.NoJobsTracing) { compilationOptions |= CompilationOptions.Tracing; } results = GraphModel.Compile(AssemblyType.Memory, translator, compilationOptions); var results2 = results; Assert.That(results?.status, Is.EqualTo(CompilationStatus.Succeeded), () => $"Compilation failed, errors: {String.Join("\n", results2?.errors)}\r\n{FormatCode(results2)}"); return(EcsStencil.LiveCompileGraph(GraphModel, results, includeVscriptingAssemblies: true)); }
public RootContext(EcsStencil stencil, string systemName, RoslynEcsTranslator.TranslationOptions translationOptions) : base(null) { m_Stencil = stencil; m_TranslationOptions = translationOptions; m_ClassDeclaration = ClassDeclaration(systemName) .WithModifiers( TokenList( Token(SyntaxKind.PublicKeyword))); }
public static ComponentQueryDeclarationModel CreateQueryFromGameObject(this VSGraphModel graphModel, GameObject gameObject) { EcsStencil stencil = graphModel.Stencil as EcsStencil; string queryName = gameObject.name + " Query"; List <TypeHandle> componentTypes = stencil.GetEcsComponentsForGameObject(gameObject); AddConvertToEntityComponentIfNeeded(gameObject); return(graphModel.CreateComponentGroup(queryName, componentTypes)); }
static List <TypeHandle> GetEcsComponentsForGameObject(this EcsStencil stencil, GameObject go) { using (World w = new World("Conversion world")) { Entity e = GameObjectConversionUtility.ConvertGameObjectHierarchy(go, w); List <TypeHandle> result = new List <TypeHandle>(); using (NativeArray <ComponentType> componentTypes = w.EntityManager.GetComponentTypes(e)) { result.AddRange(componentTypes .Select(t => t.GetManagedType()) .Where(t => t != typeof(LinkedEntityGroup)) // ignore LinkedEntityGroup - GameObject hierarchy .Select(t => t.GenerateTypeHandle(stencil))); } return(result); } }
public static IEnumerable <object[]> GetTypeAndMatchingConstantNodeModelType() { EcsStencil ecsStencil = new EcsStencil(); GraphModel graphModel = Activator.CreateInstance <VSGraphModel>(); graphModel.Stencil = ecsStencil; foreach (var baseType in new[] { typeof(ConstantNodeModel <>), typeof(ConstantNodeModel <,>) }) { foreach (var concreteType in GetTypes(ecsStencil, baseType)) { ConstantNodeModel nodeModel = (ConstantNodeModel)Activator.CreateInstance(concreteType); nodeModel.GraphModel = graphModel; var constantValueType = nodeModel.Type.GenerateTypeHandle(ecsStencil); yield return(new object[] { ecsStencil, constantValueType, concreteType }); } } }
Type CompileGraph(CodeGenMode mode) { RoslynEcsTranslator translator = (RoslynEcsTranslator)GraphModel.CreateTranslator(); translator.AllowNoJobsFallback = false; // because of the hack in the translator constructor, override right after ((EcsStencil)Stencil).UseJobSystem = mode == CodeGenMode.Jobs; CompilationResult results = GraphModel.Compile(AssemblyType.Memory, translator, CompilationOptions.LiveEditing); if (results?.sourceCode != null && results.sourceCode.Length != 0) { LogAssert.Expect(LogType.Log, new Regex("using.*")); Debug.Log(results.sourceCode[(int)SourceCodePhases.Initial]); } Assert.That(results?.status, Is.EqualTo(CompilationStatus.Succeeded), () => $"Compilation failed, errors: {String.Join("\n", results?.errors)}"); return(EcsStencil.LiveCompileGraph(GraphModel, results, includeVscriptingAssemblies: true)); }
public void SetUp() { m_Stencil = ScriptableObject.CreateInstance <EcsStencil>(); m_Sources = BuildList(m_Stencil); }
internal RoslynEcsTranslator(EcsStencil stencil) : base(stencil) { }
public void Test_FindConstantNodeModelTypeFromConstantValueType(EcsStencil ecsStencil, TypeHandle constantValueType, Type constantNodeModelType) { Assert.That(ecsStencil.GetConstantNodeModelType(constantValueType), Is.EqualTo(constantNodeModelType)); }
public void SetUp() { m_Stencil = new EcsStencil(); m_Sources = BuildList(m_Stencil); }