Ejemplo n.º 1
0
        private static Offset <NodeInfo> ConvertToRuntimeNodeInfo(FlatBufferBuilder fbb, NodeEditorView nodeView)
        {
            FlowOutPortEditorView[]        flowOutPortViews   = nodeView.flowOutPortViews;
            Offset <NodeFlowOutPortInfo>[] flowOutInfoOffsets = new Offset <NodeFlowOutPortInfo> [flowOutPortViews.Length];
            for (int i = 0; i < flowOutPortViews.Length; i++)
            {
                flowOutInfoOffsets[i] = ConvertToRuntimeFlowOutPortInfo(fbb, flowOutPortViews[i]);
            }

            List <InputPortEditorView> inputPortViewList = nodeView.inputPortViewList;

            Offset <NodeInputFieldInfo>[] inputPortInfoOffsets = new Offset <NodeInputFieldInfo> [inputPortViewList.Count];
            for (int i = 0; i < inputPortViewList.Count; i++)
            {
                inputPortInfoOffsets[i] = ConvertToRuntimeInputPortInfo(fbb, inputPortViewList[i]);
            }

            //这里处理rightSideNodeIds数组
            VectorOffset rightSideNodeIdsVectorOffset = new VectorOffset();

            if (nodeView.ReflectionInfo.IsEntranceNode || nodeView.ReflectionInfo.IsCreateSequenceNode)
            {
                List <int> rightSideNodeIdList = new List <int>();
                nodeView.GetSequenceNodesIdsRecursive(ref rightSideNodeIdList);

                if (rightSideNodeIdList.Count > 0)
                {
                    rightSideNodeIdsVectorOffset = NodeInfo.CreateRightSideNodeIdsVector(fbb, rightSideNodeIdList.ToArray());
                }
            }

            VectorOffset flowOutVectorOffset = NodeInfo.CreateFlowOutPortInfosVector(fbb, flowOutInfoOffsets);
            VectorOffset inputVectorOffset   = NodeInfo.CreateInputPortInfosVector(fbb, inputPortInfoOffsets);
            StringOffset nodeTypeNameOffset  = fbb.CreateString(nodeView.ReflectionInfo.Type.FullName);

            NodeInfo.StartNodeInfo(fbb);
            NodeInfo.AddNodeId(fbb, nodeView.NodeId);
            NodeInfo.AddNodeClassTypeName(fbb, nodeTypeNameOffset);
            NodeInfo.AddFlowOutPortInfos(fbb, flowOutVectorOffset);
            NodeInfo.AddInputPortInfos(fbb, inputVectorOffset);
            if (nodeView.ReflectionInfo.IsEntranceNode || nodeView.ReflectionInfo.IsCreateSequenceNode)
            {
                NodeInfo.AddRightSideNodeIds(fbb, rightSideNodeIdsVectorOffset);
            }

            return(NodeInfo.EndNodeInfo(fbb));
        }