コード例 #1
0
        internal static void DrawSelectObjectEditor(IExpressionInspector inode)
        {
            var otypes            = GetDerivedTypeInfo(typeof(UnityEngine.Object));
            var typeName          = inode.GetProperty <string>("type", null);
            var selectedTypeIndex = otypes.names.FindIndex(n => n == typeName);
            var typeLabel         = selectedTypeIndex == -1 ? null : otypes.labels[selectedTypeIndex];

            inode.DrawSelectionPopup("Type", typeLabel ?? "Select type...", otypes.labels, selectedIndex => inode.SetProperty("type", otypes.names[selectedIndex]));
            if (typeName != null)
            {
                if (selectedTypeIndex != -1)
                {
                    var selectedType  = otypes.types[selectedTypeIndex];
                    var properties    = GetTypePropertyNames(selectedType);
                    var propertyName  = inode.GetProperty <string>("field", null);
                    var propertyLabel = properties.FirstOrDefault(p => p.name == propertyName).label;

                    inode.DrawSelectionPopup("Property", propertyLabel ?? "Select property...", properties.Select(p => p.label), selectedIndex =>
                    {
                        inode.SetProperty("field", properties[selectedIndex].name);
                    });
                }
            }

            DrawMappedControl(inode);
        }
コード例 #2
0
        public static bool Draw(string selectType, IExpressionInspector inspector)
        {
            selectType = selectType.ToLowerInvariant();
            if (s_SelectorDrawers.TryGetValue(selectType, out var handler))
            {
                if (handler == null)
                {
                    return(false);
                }

                handler(inspector);
                return(true);
            }

            foreach (var methodInfo in drawerMethods)
            {
                var attribute = (ExpressionSelectDrawerAttribute)methodInfo.GetCustomAttribute(typeof(ExpressionSelectDrawerAttribute));
                if (!selectType.Equals(attribute.name, StringComparison.OrdinalIgnoreCase))
                {
                    continue;
                }

                handler = (ExpressionSelectDrawer)methodInfo.CreateDelegate(typeof(ExpressionSelectDrawer));
                s_SelectorDrawers[selectType] = handler;
                handler(inspector);
                return(true);
            }

            s_SelectorDrawers[selectType] = null;
            return(false);
        }
コード例 #3
0
        private static void DrawMappedControl(IExpressionInspector m_Node)
        {
            EditorGUI.BeginChangeCheck();
            var mapped = EditorGUILayout.Toggle("Mapped", m_Node.GetProperty(ExpressionKeyName.Mapped, false));

            if (EditorGUI.EndChangeCheck())
            {
                m_Node.SetProperty(ExpressionKeyName.Mapped, mapped);
            }
        }
コード例 #4
0
        internal static void DrawSelectReferencesEditor(IExpressionInspector m_Node)
        {
            var refPropertyType = m_Node.GetProperty("type", "");
            var refDepth        = m_Node.GetProperty("depth", 1);

            EditorGUI.BeginChangeCheck();
            refPropertyType = EditorGUILayout.DelayedTextField("Type", refPropertyType);
            refDepth        = EditorGUILayout.IntSlider("Depth", refDepth, 0, 9);
            if (EditorGUI.EndChangeCheck())
            {
                m_Node.SetProperty("type", refPropertyType);
                m_Node.SetProperty("depth", refDepth);
            }
        }
コード例 #5
0
        internal static void DrawSelectComponentEditor(IExpressionInspector inode)
        {
            var ctypes            = GetDerivedTypeInfo(typeof(Component));
            var typeName          = inode.GetProperty <string>("type", null);
            var selectedTypeIndex = ctypes.names.FindIndex(n => n == typeName);
            var typeLabel         = selectedTypeIndex == -1 ? null : ctypes.labels[selectedTypeIndex];

            inode.DrawSelectionPopup("Type", typeLabel ?? "Select type...", ctypes.labels, selectedIndex => inode.SetProperty("type", ctypes.names[selectedIndex]));
            if (typeName != null)
            {
                if (selectedTypeIndex != -1)
                {
                    var selectedType  = ctypes.types[selectedTypeIndex];
                    var properties    = GetTypePropertyNames(selectedType);
                    var propertyName  = inode.GetProperty <string>("field", null);
                    var propertyLabel = properties.FirstOrDefault(p => p.name == propertyName).label;

                    inode.DrawSelectionPopup("Property", propertyLabel ?? "Select property...", properties.Select(p => p.label), selectedIndex =>
                    {
                        inode.SetProperty("field", properties[selectedIndex].name);
                    });
                }
            }

            EditorGUILayout.BeginHorizontal();

            EditorGUI.BeginChangeCheck();
            var originalSource = EditorGUILayout.Toggle("Overrides", inode.GetProperty(ExpressionKeyName.Overrides, true));

            if (EditorGUI.EndChangeCheck())
            {
                inode.SetProperty(ExpressionKeyName.Overrides, originalSource);
            }

            DrawMappedControl(inode);

            EditorGUILayout.EndHorizontal();
        }
コード例 #6
0
 internal static void DrawSelectAssetEditor(IExpressionInspector inspector)
 {
     DrawSelectObjectEditor(inspector);
 }
コード例 #7
0
 internal static void DrawSelectDefaultEditor(IExpressionInspector m_Node)
 {
     GUILayout.Space(40f);
 }