public virtual IEnumerable <NodeAsset> Apply(NodeAsset parentNode, INodeAsset node)
        {
            NodeAsset transformedNode = null;

            if (node.Mesh != null)
            {
                var transformedMaterials = node.Mesh.Materials.Select(Map).ToList();
                foreach (var transformedMesh in Map(node.Mesh.Mesh))
                {
                    if (transformedNode != null)
                    {
                        yield return(transformedNode);
                    }
                    transformedNode      = CreateNodeCopy(parentNode, node);
                    transformedNode.Mesh = new MeshInstance(transformedMesh, transformedMaterials);
                }
            }

            transformedNode = transformedNode ?? CreateNodeCopy(parentNode, node);
            if (node.Camera != null)
            {
                transformedNode.Camera = Map(node.Camera);
            }
            if (node.Light != null)
            {
                transformedNode.Light = Map(node.Light);
            }
            yield return(transformedNode);
        }
Esempio n. 2
0
 public static void NodeGraphToolbar(XNode.NodeGraph nodeGraph)
 {
     Elements.BeginToolbarHorizontal();
     if (Elements.ToolbarButton(ToolTips.runPreset))
     {
         NodeAsset.Parse(nodeGraph);
     }
     if (Elements.ToolbarButton(ToolTips.deletePreset))
     {
         if (EditorUtility.DisplayDialog("Delete Preset", "Are you sure you wish to delete this preset? Once deleted it can't be undone.", "Ok", "Cancel"))
         {
             XNodeEditor.NodeEditorWindow.focusedWindow.Close();
             AssetDatabase.DeleteAsset(AssetDatabase.GetAssetPath(nodeGraph));
             MapManager.RefreshPresetsList();
         }
     }
     if (Elements.ToolbarButton(ToolTips.renamePreset))
     {
         XNodeEditor.RenamePreset.Show(nodeGraph);
     }
     if (Elements.ToolbarButton(ToolTips.presetWiki))
     {
         Application.OpenURL("https://github.com/RustMapMaking/Rust-Map-Editor-Unity/wiki/Node-System");
     }
     Elements.EndToolbarHorizontal();
 }
        public virtual void LoadData(AnimationGraphView graphView, NodeAsset nodeAsset, Dictionary <NodeAsset, BaseNodeUI> nodeMap)
        {
            ID = string.IsNullOrEmpty(nodeAsset.ID) ? Guid.NewGuid().ToString() : nodeAsset.ID;

            NameField.SetValueWithoutNotify(string.IsNullOrEmpty(nodeAsset.Data.Name) ? DefaultName : nodeAsset.Data.Name);
            _speedField.SetValueWithoutNotify(nodeAsset.Data.Speed);
        }
Esempio n. 4
0
        public override void GenerateLinkData(NodeAsset nodeAsset, Dictionary <Node, NodeAsset> nodeMap)
        {
            NodeAsset outputNodeAsset = InputPort.connections.Count() > 0 ? nodeMap[InputPort.connections.First().output.node] : null;

            nodeAsset.InputPorts.Add(new NodeInputPortAsset {
                SourceNodeAsset = outputNodeAsset, Weight = 1f
            });
        }
        public override void LoadData(AnimationGraphView graphView, NodeAsset nodeAsset, Dictionary <NodeAsset, BaseNodeUI> nodeMap)
        {
            base.LoadData(graphView, nodeAsset, nodeMap);

            StateMachineNodeAsset = (StateMachineNodeAsset)nodeAsset;

            LoadDataWithCallback(graphView, nodeAsset, nodeMap, portAsset => GenerateStatePort(((StateMachineNodeInputPortAsset)portAsset).StateName));
        }
Esempio n. 6
0
        private void SaveAnimationGraph()
        {
            if (AnimationGraphAsset == null)
            {
                return;
            }

            AnimationGraphAsset.Nodes.Clear();

            Dictionary <Node, NodeAsset> nodeUIMap = new Dictionary <Node, NodeAsset>();

            GraphView.nodes.ForEach(n =>
            {
                if (!(n is BaseNodeUI nodeUI))
                {
                    return;
                }

                NodeAsset nodeAsset  = nodeUI.GenerateData();
                nodeAsset.Name       = nodeUI.NameField.value;
                nodeAsset.ID         = nodeUI.ID;
                nodeAsset.Position   = n.GetPosition().position;
                nodeAsset.IsExpanded = n.expanded;
                AnimationGraphAsset.Nodes.Add(nodeAsset);
                nodeUIMap.Add(n, nodeAsset);
            });

            GraphView.nodes.ForEach(n =>
            {
                if (!(n is BaseNodeUI nodeUI))
                {
                    return;
                }

                nodeUI.GenerateLinkData(nodeUIMap[n], nodeUIMap);
            });

            if (GraphView.OutputIndicatorNode != null)
            {
                AnimationGraphAsset.OutputIndicatorNode = new NodeAsset {
                    Position = GraphView.OutputIndicatorNode.GetPosition().position, IsExpanded = GraphView.OutputIndicatorNode.expanded
                };

                if (GraphView.OutputNode != null)
                {
                    AnimationGraphAsset.OutputNode = nodeUIMap[GraphView.OutputNode];
                }
            }
            else
            {
                AnimationGraphAsset.OutputIndicatorNode = null;
                AnimationGraphAsset.OutputNode          = null;
            }

            EditorUtility.SetDirty(AnimationGraphAsset);
            AssetDatabase.SaveAssets();
            AssetDatabase.Refresh();
        }
        private static NodeAsset CreateNodeCopy(NodeAsset parentNode, INodeAsset node)
        {
            NodeAsset transformedNode;

            transformedNode = new NodeAsset(node.Id);
            transformedNode.Transform.CopyFrom(node.Transform);
            transformedNode.Parent = parentNode;
            return(transformedNode);
        }
 private void AttachChildren(Node node, NodeAsset parentAsset, ReaderContext context)
 {
     foreach (var childNode in node.VisualChildren)
     {
         var nodeAsset = (NodeAsset)context.Nodes[childNode.LogicalIndex];
         nodeAsset.Parent = parentAsset;
         AttachChildren(childNode, nodeAsset, context);
     }
 }
Esempio n. 9
0
    public static void ShowWindowWithAsset(NodeAsset asset = null)
    {
        var win = EditorWindow.GetWindow(typeof(TreeNodeWindowEditor)) as TreeNodeWindowEditor;

        if (asset != null)
        {
            win.rootAsset = asset.Value;
            win.parse();
        }
    }
Esempio n. 10
0
    private static void ShowEditor()
    {
        UnityEngine.Object obj  = Selection.activeObject;
        string             path = AssetDatabase.GetAssetPath(obj);

        NodeAsset nodeAsset = AssetDatabase.LoadAssetAtPath <NodeAsset>(path);

        Node.SetNodeAsset(nodeAsset, Path.GetFileNameWithoutExtension(path));

        TreeNodeEditor.ShowWindow();
    }
        public override void GenerateLinkData(NodeAsset nodeAsset, Dictionary <Node, NodeAsset> nodeMap)
        {
            nodeAsset.InputPorts.Clear();

            StatePorts.ForEach(p =>
            {
                NodeAsset outputNodeAsset = p.connections.Count() > 0 ? nodeMap[p.connections.First().output.node] : null;
                nodeAsset.InputPorts.Add(new StateMachineNodeInputPortAsset {
                    SourceNodeAsset = outputNodeAsset, Weight = 0f, StateName = p.portName
                });
            });
        }
Esempio n. 12
0
        private void ApplyOnSubtree(NodeAsset transformedParent, INodeAsset node)
        {
            NodeAsset parent = null;

            foreach (var transformedNode in Apply(transformedParent, node))
            {
                parent = transformedNode;
            }
            if (parent != null)
            {
                foreach (var childNode in node.ChildNodes)
                {
                    ApplyOnSubtree(parent, childNode);
                }
            }
        }
Esempio n. 13
0
    public static void CreateAsset(NodeValue nodeValue, string fileName)
    {
        // 实例化类  Bullet
        ScriptableObject nodeAsset = ScriptableObject.CreateInstance <NodeAsset>();

        // 如果实例化 Bullet 类为空,返回
        if (!nodeAsset)
        {
            Debug.LogWarning("Bullet not found");
            return;
        }

        fileName = string.IsNullOrEmpty(fileName) ? (typeof(NodeAsset).ToString()) : fileName;
        // 自定义资源保存路径
        //将类名 Bullet 转换为字符串
        //拼接保存自定义资源(.asset) 路径
        string path = string.Format("Assets/Resources/NodeAsset/{0}.asset", fileName);

        if (File.Exists(path))
        {
            if (!EditorUtility.DisplayDialog("已存在文件", "是否替换新文件", "替换", "取消"))
            {
                return;
            }
        }

        // 如果项目总不包含该路径,创建一个
        string directory = Path.GetDirectoryName(path);

        if (!Directory.Exists(directory))
        {
            Directory.CreateDirectory(directory);
        }

        NodeAsset node = (NodeAsset)nodeAsset;

        node.nodeValue = nodeValue;

        EditorUtility.SetDirty(nodeAsset);

        // 生成自定义资源到指定路径
        AssetDatabase.CreateAsset(nodeAsset, path);

        EditorUtility.SetDirty(nodeAsset);

        AssetDatabase.Refresh();
    }
Esempio n. 14
0
    public NodeRoot GetNode(NodeAsset nodeAsset)
    {
        NodeValue nodeValue = nodeAsset.nodeValue;

        if (nodeValue == null)
        {
            Debug.LogError("RootNode is null");
            return(null);
        }

        NodeRoot rootNode = GetNodeRoot(nodeValue);

        if (rootNode.GetType().IsSubclassOf(typeof(NodeCombiner)))
        {
            IterationChild((NodeCombiner)rootNode, nodeValue);
        }

        return(rootNode);
    }
        private INodeAsset TransformNode(Node node, string id, ReaderContext context)
        {
            var nodeAsset = new NodeAsset(id);

            nodeAsset.Transform.Matrix = node.LocalMatrix;
            if (node.Mesh != null)
            {
                nodeAsset.Mesh = new MeshInstance(context.Meshes[node.Mesh.LogicalIndex],
                                                  node.Mesh.Primitives.Select(_ => context.Materials[_.Material.LogicalIndex]).ToList());
            }
            if (node.Camera != null)
            {
                nodeAsset.Camera = context.Cameras[node.Camera.LogicalIndex];
            }
            if (node.PunctualLight != null)
            {
                nodeAsset.Light = context.Lights[node.PunctualLight.LogicalIndex];
            }
            return(nodeAsset);
        }
        public void LoadDataWithCallback(AnimationGraphView graphView, NodeAsset nodeAsset, Dictionary <NodeAsset, BaseNodeUI> nodeMap, Func <NodeInputPortAsset, Port> callback)
        {
            for (int i = 0; i < nodeAsset.InputPorts.Count; i++)
            {
                Port inputPortUI = callback(nodeAsset.InputPorts[i]);

                if (nodeAsset.InputPorts[i].SourceNodeAsset != null)
                {
                    Edge edge = new Edge {
                        input = inputPortUI, output = (Port)nodeMap[nodeAsset.InputPorts[i].SourceNodeAsset].outputContainer[0]
                    };
                    edge.input.Connect(edge);
                    edge.output.Connect(edge);

                    graphView.AddElement(edge);
                }
            }

            RefreshExpandedState();
            RefreshPorts();
        }
Esempio n. 17
0
        public virtual IEnumerable <ISceneAsset> Apply(ISceneAsset scene)
        {
            var transformedScene = new SceneAsset(scene.Id);

            foreach (var node in scene.ChildNodes)
            {
                NodeAsset parent = null;
                foreach (var transformedNode in Apply(null, node))
                {
                    transformedScene.Add(transformedNode);
                    parent = transformedNode;
                }

                if (parent != null)
                {
                    foreach (var childNode in node.ChildNodes)
                    {
                        ApplyOnSubtree(parent, childNode);
                    }
                }
            }

            yield return(transformedScene);
        }
Esempio n. 18
0
 public override void GenerateLinkData(NodeAsset nodeAsset, Dictionary <Node, NodeAsset> nodeMap)
 {
 }
Esempio n. 19
0
        public override void LoadData(AnimationGraphView graphView, NodeAsset nodeAsset, Dictionary <NodeAsset, BaseNodeUI> nodeMap)
        {
            base.LoadData(graphView, nodeAsset, nodeMap);

            _clipField.SetValueWithoutNotify(((ClipNode)nodeAsset.Data).Clip);
        }
Esempio n. 20
0
 public static void SetNodeAsset(NodeAsset _nodeAsset, string _fileName)
 {
     nodeAsset = _nodeAsset;
     fileName  = _fileName;
 }
Esempio n. 21
0
 public static void Clear()
 {
     nodeAsset = null;
 }
 public abstract void GenerateLinkData(NodeAsset nodeAsset, Dictionary <Node, NodeAsset> nodeMap);
Esempio n. 23
0
        public override void LoadData(AnimationGraphView graphView, NodeAsset nodeAsset, Dictionary <NodeAsset, BaseNodeUI> nodeMap)
        {
            base.LoadData(graphView, nodeAsset, nodeMap);

            LoadDataWithCallback(graphView, nodeAsset, nodeMap, portAsset => InputPort);
        }