Пример #1
0
        static ExpressionStatementSyntax BuildLastCallFrameExpression(string instanceId, int recordedValuesCount)
        {
            Object            graph = null;
            AbstractNodeAsset asset = EditorUtility.InstanceIDToObject(Convert.ToInt32(instanceId)) as AbstractNodeAsset;

            if (asset)
            {
                graph = asset.Model.GraphModel as GraphModel;
            }

            if (graph == null)
            {
                return(null);
            }

            return(SyntaxFactory.ExpressionStatement(
                       SyntaxFactory.InvocationExpression(
                           SyntaxFactory.MemberAccessExpression(
                               SyntaxKind.SimpleMemberAccessExpression,
                               SyntaxFactory.IdentifierName("Debugger"),
                               SyntaxFactory.IdentifierName("SetLastCallFrame")))
                       .WithArgumentList(
                           SyntaxFactory.ArgumentList(
                               SyntaxFactory.SeparatedList(
                                   new[]
            {
                SyntaxFactory.Argument(
                    SyntaxFactory.LiteralExpression(
                        SyntaxKind.NumericLiteralExpression,
                        SyntaxFactory.Literal(asset.GetInstanceID()))),
                SyntaxFactory.Argument(
                    SyntaxFactory.LiteralExpression(
                        SyntaxKind.NumericLiteralExpression,
                        SyntaxFactory.Literal(graph.GetInstanceID()))),
                SyntaxFactory.Argument(
                    SyntaxFactory.MemberAccessExpression(
                        SyntaxKind.SimpleMemberAccessExpression,
                        SyntaxFactory.IdentifierName("Time"),
                        SyntaxFactory.IdentifierName("frameCount"))),
                SyntaxFactory.Argument(
                    SyntaxFactory.LiteralExpression(
                        SyntaxKind.StringLiteralExpression,
                        SyntaxFactory.Literal(asset.Model.Title))),
                SyntaxFactory.Argument(
                    SyntaxFactory.LiteralExpression(
                        SyntaxKind.NumericLiteralExpression,
                        SyntaxFactory.Literal(recordedValuesCount))),
            })))));
        }
Пример #2
0
        void DrawInspector(AbstractNodeAsset asset, Action onChangedCallback)
        {
            if (asset == null)
            {
                return;
            }

            EditorGUI.BeginChangeCheck();
            var obj = new SerializedObject(asset);

            obj.Update();
            var iterator = obj.FindProperty("m_NodeModel");

            for (var enterChildren = true; iterator.NextVisible(enterChildren); enterChildren = false)
            {
                if (k_ExcludedPropertyNames.Contains(iterator.name))
                {
                    continue;
                }

                var label = new GUIContent(iterator.displayName);

                var field = GetFieldViaPath(asset.GetType(), iterator.propertyPath);
                var typeSearcherAttribute = field?.GetCustomAttribute <TypeSearcherAttribute>();

                if (typeSearcherAttribute != null)
                {
                    TypeReferencePicker(iterator, typeSearcherAttribute, label, onChangedCallback);
                }
                else
                {
                    EditorGUILayout.PropertyField(iterator, label, true);
                }
            }

            obj.ApplyModifiedProperties();

            if (EditorGUI.EndChangeCheck())
            {
                onChangedCallback();
            }

            FieldInfo GetFieldViaPath(Type type, string path)
            {
                Type      parentType = type;
                FieldInfo fi         = type.GetField(path, BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);

                string[] perDot = path.Split('.');
                foreach (string fieldName in perDot)
                {
                    fi = parentType.GetField(fieldName, BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
                    if (fi != null)
                    {
                        parentType = fi.FieldType;
                    }
                    else
                    {
                        return(null);
                    }
                }
                if (fi != null)
                {
                    return(fi);
                }
                return(null);
            }
        }