public void Init(FSMStateNode node, List <FSMVisualCondition> conditions, Port port, int selectedPortIndex) { fsmNode = node; this.selectedPort = port; this.selectedPortIndex = selectedPortIndex; this.conditions = conditions; }
/// <summary> /// 添加节点 /// </summary> public FSMStateNode AddNode(Vector2 position) { var node = new FSMStateNode(this); node.SetPosition(new Rect(position, defaultNodeSize)); node.RefreshExpandedState(); node.RefreshPorts(); AddElement(node); return(node); }
private void Save() { // 新建的FSMAsset,还未保存 if (!currentFSMAsset) { currentFSMAsset = CreateInstance <FSMData>(); var path = OpenSavePanel(); AssetDatabase.CreateAsset(currentFSMAsset, path); AssetDatabase.Refresh(); } currentFSMAsset.NodeDatas = new List <FSMStateNodeData>(); currentFSMAsset.PortDatas = new List <FSMPortData>(); graphView.nodes.ForEach(tempNode => { FSMStateNode node = tempNode as FSMStateNode; var fsmStateNodeData = new FSMStateNodeData(); fsmStateNodeData.GUID = node.viewDataKey; fsmStateNodeData.Position = node.GetPosition().position; int portIndex = 0; foreach (Port port in node.outputContainer.Children()) { var portData = new FSMPortData(); var edge = port.connections.First(); portData.FromNodeGUID = node.viewDataKey; portData.ToNodeGUID = edge.input.node.viewDataKey; portData.Index = portIndex; portData.ConditionGUID = node.PortIndexToConditions[portIndex]; portIndex++; currentFSMAsset.PortDatas.Add(portData); } ; currentFSMAsset.NodeDatas.Add(fsmStateNodeData); }); EditorUtility.SetDirty(currentFSMAsset); AssetDatabase.SaveAssets(); }
private void Load(FSMData asset) { if (!asset) { return; } currentFSMAsset = asset; if (currentFSMAsset.NodeDatas == null || currentFSMAsset.NodeDatas.Count == 0) { return; } // 清除Node和Edge foreach (var edge in graphView.edges.ToList()) { graphView.RemoveElement(edge); } foreach (var node in graphView.nodes.ToList()) { graphView.RemoveElement(node); } foreach (var data in currentFSMAsset.NodeDatas) { var node = graphView.AddNode(data.Position); node.viewDataKey = data.GUID; node.SetPosition(new Rect(data.Position, new Vector2(200f, 150f))); } if (currentFSMAsset.PortDatas == null || currentFSMAsset.PortDatas.Count == 0) { return; } foreach (var portData in currentFSMAsset.PortDatas) { FSMStateNode fromNode = null; FSMStateNode toNode = null; foreach (FSMStateNode tempNode in graphView.nodes.ToList()) { if (tempNode.viewDataKey == portData.FromNodeGUID) { fromNode = tempNode; } if (tempNode.viewDataKey == portData.ToNodeGUID) { toNode = tempNode; } } if (fromNode == null || toNode == null) { continue; } var fromPort = fromNode.AddCondition(); if (!string.IsNullOrEmpty(portData.ConditionGUID)) { fromNode.SetCondition(portData.Index, fromPort, portData.ConditionGUID); } graphView.Add(fromPort.ConnectTo(toNode.InputPort)); } ; }
public void Init(FSMStateNode node, List <FSMVisualState> stateTypes) { fsmNode = node; this.states = stateTypes; }