Example #1
0
        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));
        }
Example #7
0
 public void SetUp()
 {
     m_Stencil = ScriptableObject.CreateInstance <EcsStencil>();
     m_Sources = BuildList(m_Stencil);
 }
Example #8
0
 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);
 }