コード例 #1
0
        public PropertyView(uNodeProperty property, ExplorerPropertyData data = null)
        {
            if (data == null)
            {
                data = new ExplorerPropertyData();
            }
            data.guid               = uNodeUtility.GetObjectID(property).ToString();
            expanded                = data.expanded;
            this.data               = data;
            this.property           = property;
            title                   = $"{property.Name} : {property.type.DisplayName(false, false)}";
            titleIcon.image         = uNodeEditorUtility.GetTypeIcon(typeof(TypeIcons.PropertyIcon));
            expanded                = data.expanded;
            expandedElement.visible = false;

            onExpandClicked += () => {
                if (!isInSearch)
                {
                    data.expanded = expanded;
                    Save();
                }
            };
            if (ExplorerManager.explorerData.showSummary)
            {
                if (!string.IsNullOrWhiteSpace(property.summary))
                {
                    var summary = new SummaryView(property.summary);
                    headerContainer.Add(summary);
                }
            }
            if (ExplorerManager.explorerData.showTypeIcon)
            {
                typeIcon = new Image()
                {
                    name  = "type-icon",
                    image = uNodeEditorUtility.GetIcon(property.type),
                };
                titleContainer.Add(typeIcon);
                typeIcon.PlaceInFront(titleIcon);
            }
        }
コード例 #2
0
ファイル: NodeReturnView.cs プロジェクト: hagusen/AI-Testing
        protected override void InitializeView()
        {
            base.InitializeView();
            // titleIcon.image = null;
            NodeReturn node = targetNode as NodeReturn;

            if (!node.returnAnyType)
            {
                var parent = node.parentComponent;
                if (parent != null && parent is uNodeProperty)
                {
                    uNodeProperty m = parent as uNodeProperty;
                    if (m.CanGetValue() && m.ReturnType() != typeof(void))
                    {
                        AddInputValuePort(
                            new PortData()
                        {
                            portID         = "return",
                            onValueChanged = (o) => {
                                RegisterUndo();
                                node.returnValue = o as MemberData;
                            },
                            getPortName  = () => "",
                            getPortType  = () => m.ReturnType(),
                            getPortValue = () => node.returnValue,
                        }
                            );
                    }
                }
                else if (node.rootObject != null && node.rootObject is uNodeFunction)
                {
                    uNodeFunction m = node.rootObject as uNodeFunction;
                    if (m.ReturnType() != typeof(void))
                    {
                        AddInputValuePort(
                            new PortData()
                        {
                            portID         = "return",
                            onValueChanged = (o) => {
                                RegisterUndo();
                                node.returnValue = o as MemberData;
                            },
                            getPortName  = () => "",
                            getPortType  = () => m.ReturnType(),
                            getPortValue = () => node.returnValue,
                        }
                            );
                    }
                }
            }
            else
            {
                AddInputValuePort(
                    new PortData()
                {
                    portID         = "return",
                    onValueChanged = (o) => {
                        RegisterUndo();
                        node.returnValue = o as MemberData;
                    },
                    getPortName  = () => "",
                    getPortType  = () => typeof(object),
                    getPortValue = () => node.returnValue,
                }
                    );
            }
            if (uNodeUtility.preferredDisplay != DisplayKind.Full)
            {
                ConstructCompactTitle("return");
            }
        }
コード例 #3
0
 public HierarchyPropertyTree(uNodeProperty property, int depth) : base(property.GetHashCode(), depth, $"{property.Name} : {property.type.DisplayName(false, false)}")
 {
     this.property = property;
     icon          = uNodeEditorUtility.GetTypeIcon(property.type) as Texture2D;
 }
コード例 #4
0
        public static void RefactorProperty(uNodeProperty property, string name)
        {
            name = uNodeUtility.AutoCorrectName(name);
            var  graph       = property.owner;
            bool hasVariable = false;

            if (graph.Properties != null && graph.Properties.Count > 0)
            {
                foreach (var V in graph.Properties)
                {
                    if (V.Name == name)
                    {
                        hasVariable = true;
                        break;
                    }
                }
            }
            if (graph.Variables != null && graph.Variables.Count > 0)
            {
                foreach (var V in graph.Variables)
                {
                    if (V.Name == name)
                    {
                        hasVariable = true;
                        break;
                    }
                }
            }
            if (hasVariable)
            {
                return;
            }
            Undo.SetCurrentGroupName("Rename Property: " + property.Name);
            HashSet <GameObject> referencedGraphs = new HashSet <GameObject>();

            if (graph != null)
            {
                RuntimeProperty runtime = null;
                if (graph is IIndependentGraph)
                {
                    if (GraphUtility.IsTempGraphObject(graph.gameObject))
                    {
                        var prefab = uNodeEditorUtility.GetGameObjectSource(graph.gameObject, null);
                        if (prefab != null)
                        {
                            var oriGraph = prefab.GetComponent <uNodeRoot>();
                            if (oriGraph != null)
                            {
                                runtime = ReflectionUtils.GetRuntimeType(oriGraph).GetProperty(property.Name) as RuntimeProperty;
                            }
                        }
                    }
                    else
                    {
                        runtime = ReflectionUtils.GetRuntimeType(graph).GetProperty(property.Name) as RuntimeProperty;
                    }
                }
                PropertyInfo nativeMember = null;
                if (graph.GeneratedTypeName.ToType(false) != null)
                {
                    var type = graph.GeneratedTypeName.ToType(false);
                    nativeMember = type.GetProperty(property.Name, MemberData.flags);
                }
                var graphPrefabs = uNodeEditorUtility.FindPrefabsOfType <uNodeRoot>();
                foreach (var prefab in graphPrefabs)
                {
                    var        gameObject    = prefab;
                    GameObject prefabContent = null;
                    if (GraphUtility.HasTempGraphObject(prefab))
                    {
                        gameObject = GraphUtility.GetTempGraphObject(prefab);
                    }
                    else if (uNodeEditorUtility.IsPrefab(prefab))
                    {
                        prefabContent = PrefabUtility.LoadPrefabContents(AssetDatabase.GetAssetPath(prefab));
                        gameObject    = prefabContent;
                    }
                    var  scripts = gameObject.GetComponentsInChildren <MonoBehaviour>(true);
                    bool hasUndo = false;
                    Func <object, bool> scriptValidation = (obj) => {
                        MemberData member = obj as MemberData;
                        if (member != null && member.startType is RuntimeType)
                        {
                            var members = member.GetMembers(false);
                            if (members != null)
                            {
                                for (int i = 0; i < members.Length; i++)
                                {
                                    var m = members[i];
                                    if (member.namePath.Length > i + 1)
                                    {
                                        if (m == runtime || m == nativeMember)
                                        {
                                            if (!hasUndo && prefabContent == null)
                                            {
                                                uNodeEditorUtility.RegisterFullHierarchyUndo(gameObject);
                                                hasUndo = true;
                                            }
                                            var path = member.namePath;
                                            path[i + 1] = name;
                                            member.name = string.Join(".", path);
                                            if (m == nativeMember)
                                            {
                                                referencedGraphs.Add(prefab);
                                            }
                                            return(true);
                                        }
                                    }
                                }
                            }
                        }
                        return(false);
                    };
                    if (runtime != null || nativeMember != null)
                    {
                        bool hasChanged = false;
                        Array.ForEach(scripts, script => {
                            bool flag = AnalizerUtility.AnalizeObject(script, scriptValidation);
                            if (flag)
                            {
                                hasChanged = true;
                                hasUndo    = false;
                                uNodeGUIUtility.GUIChanged(script);
                                uNodeEditorUtility.MarkDirty(script);
                            }
                        });
                        if (hasChanged)
                        {
                            if (gameObject != prefab)
                            {
                                uNodeEditorUtility.RegisterFullHierarchyUndo(prefab);
                                if (prefabContent == null)
                                {
                                    //Save the temporary graph
                                    GraphUtility.AutoSaveGraph(gameObject);
                                }
                                else
                                {
                                    //Save the prefab contents and unload it
                                    uNodeEditorUtility.SavePrefabAsset(gameObject, prefab);
                                }
                            }
                            uNodeEditorUtility.MarkDirty(prefab);
                        }
                    }
                    if (prefabContent != null)
                    {
                        PrefabUtility.UnloadPrefabContents(prefabContent);
                    }
                }
            }
            uNodeEditorUtility.RegisterFullHierarchyUndo(graph.gameObject);
            string oldVarName = property.Name;

            property.Name = name;
            graph.Refresh();
            Func <object, bool> validation = delegate(object OBJ) {
                return(CallbackRenameProperty(OBJ, graph, property.name, oldVarName));
            };

            Array.ForEach(graph.nodes, item => AnalizerUtility.AnalizeObject(item, validation));
            if (GraphUtility.IsTempGraphObject(graph.gameObject))
            {
                var prefab = uNodeEditorUtility.GetGameObjectSource(graph.gameObject, null);
                uNodeEditorUtility.RegisterFullHierarchyUndo(prefab);
                GraphUtility.AutoSaveGraph(graph.gameObject);
            }
            uNodeEditor.ClearGraphCache();
            uNodeEditor.window?.Refresh(true);
            DoCompileReferences(graph, referencedGraphs);
        }