public Port GenerateInputPortsOnNode(RoomNode _roomNode, string _overridedName = "") { Port l_generatedPort = GeneratePort(_roomNode, Direction.Input, Port.Capacity.Single); string portName; portName = string.IsNullOrEmpty(_overridedName) ? "Input" : _overridedName;//si no ponemos nombre, que se muestre el por defecto //generamos el campo de texto donde pondremos el nombre de la conexion TextField portText = new TextField(); portText.value = portName; //asignamos el valor del puerto a la nueva string portText.RegisterValueChangedCallback(evt => l_generatedPort.portName = evt.newValue); //capturamos el evento de cambiar el nombre en el textField y le asignamos ese nombre al puertoGenerado l_generatedPort.contentContainer.Add(portText); l_generatedPort.portName = portName; //boton para borrar el puerto Button deleteInputPortButton = new Button(); deleteInputPortButton.text = "-"; deleteInputPortButton.clickable.clicked += () => RemovePort(_roomNode, l_generatedPort, "input"); l_generatedPort.contentContainer.Add(deleteInputPortButton); _roomNode.inputContainer.Add(l_generatedPort); _roomNode.RefreshPorts(); _roomNode.RefreshExpandedState(); return(l_generatedPort); }
private void RemovePort(RoomNode _roomNode, Port _portToRemove, string _portDirection) { List <Edge> edgesToList; //identificamos los puertos que provengan de este room node & nos aseguramos de que este port proviene de este room node if (_portDirection == "out") { _roomNode.outputContainer.Remove(_portToRemove); edgesToList = edges.ToList().Where(x => x.output.portName == _portToRemove.portName && x.output.node == _portToRemove.node).ToList(); if (edgesToList.Any()) { Edge targetEdge = edgesToList.First(); targetEdge.input.Disconnect(targetEdge); RemoveElement(edgesToList.First()); } } else { _roomNode.inputContainer.Remove(_portToRemove); edgesToList = edges.ToList().Where(x => x.input.portName == _portToRemove.portName && x.input.node == _portToRemove.node).ToList(); if (edgesToList.Any()) { Edge targetEdge = edgesToList.First(); targetEdge.output.Disconnect(targetEdge); RemoveElement(edgesToList.First()); } } _roomNode.RefreshPorts(); _roomNode.RefreshExpandedState(); }
public RoomNode CreateRoomNode(string _roomName, bool _isTerminal = true) { RoomNode l_roomNode = new RoomNode { title = _roomName, roomID = Guid.NewGuid().ToString(), roomType = _roomName, isTerminal = _isTerminal }; //set node position and size l_roomNode.SetPosition(new Rect(20, 20, 200, 300)); //boton para marcar si es terminal o no Toggle l_isTerminalRoom = new Toggle(); l_isTerminalRoom.text = "isTerminal"; l_isTerminalRoom.RegisterValueChangedCallback(evt => l_roomNode.isTerminal = evt.newValue); l_isTerminalRoom.value = l_roomNode.isTerminal; l_isTerminalRoom.SetValueWithoutNotify(l_isTerminalRoom.value); l_roomNode.titleContainer.Add(l_isTerminalRoom); l_roomNode.RefreshExpandedState(); //creamos un textField donde poner el tipo de habitacion TextField l_roomTypeTextField = new TextField(string.Empty); //registramos un callback que hara lo siguiente cuando se llame; l_roomTypeTextField.RegisterValueChangedCallback(evt => { l_roomNode.roomType = evt.newValue; //cambiamos el tipo de hab. al nuevo valor l_roomNode.title = evt.newValue; //actualizamos el titulo del nodo con el nuevo valor }); //para no triggear el callback de arriba, utilizamos el without notify y actualizamos los textos l_roomTypeTextField.SetValueWithoutNotify(l_roomNode.title); //ponemos el nombre generado l_roomNode.mainContainer.Add(l_roomTypeTextField); //añadimos el nombre al titulo del nodo Button l_addInputPortButton = new Button(); l_addInputPortButton.text = "Add Input"; l_addInputPortButton.clickable.clicked += () => GenerateInputPortsOnNode(l_roomNode); l_roomNode.titleContainer.Add(l_addInputPortButton); //botton para añadir puertos de salida Button l_addOutPortButton = new Button(); l_addOutPortButton.text = "Add Output"; l_addOutPortButton.clickable.clicked += () => GenerateOutputPortsOnNode(l_roomNode); l_roomNode.titleContainer.Add(l_addOutPortButton); //if (l_roomNode.IsSelected(l_roomNode)) { m_selectedRoomNode = l_roomNode; Debug.Log("selected room " +); } return(l_roomNode); }
private void CreateLoadedNodes() { foreach (RoomNodeData rData in m_graphToLoadCache.m_roomNodeDataList) { RoomNode l_tempRoom = m_targetGraph.CreateRoomNode(rData.nodeType, rData.isTerminal); l_tempRoom.roomID = rData.nodeID; l_tempRoom.RefreshExpandedState(); m_targetGraph.AddElement(l_tempRoom); List <RoomNodeConnectionsData> l_tempOutRoomPorts = m_graphToLoadCache.m_roomConnectionsDataList.Where(x => x.baseNodeId == rData.nodeID).ToList(); l_tempOutRoomPorts.ForEach(x => m_targetGraph.GenerateOutputPortsOnNode(l_tempRoom, x.basePortName)); List <RoomNodeConnectionsData> l_tempInputRoomPorts = m_graphToLoadCache.m_roomConnectionsDataList.Where(x => x.targetNodeId == rData.nodeID).ToList(); l_tempInputRoomPorts.ForEach(x => m_targetGraph.GenerateInputPortsOnNode(l_tempRoom, x.targetPortName)); } }
//agregar mas puertos de conexion out al nodo public Port GenerateOutputPortsOnNode(RoomNode _roomNode, string _overridedName = "") { Port l_generatedPort = GeneratePort(_roomNode, Direction.Output, Port.Capacity.Single); //asignar nombre al puerto de salida //int outputPortCount = _roomNode.outputContainer.Query(name: "connector").ToList().Count; string l_portName; l_portName = string.IsNullOrEmpty(_overridedName) ? "Output" : _overridedName;//si no ponemos nombre, que se muestre 'output' por defecto //borrar las etiquetas(nombres) anteriores //Label oldPortName = generatedPort.contentContainer.Q<Label>("type");//cogemos los elementos <Label> de la cola del nodo //generatedPort.contentContainer.Remove(oldPortName); //generamos el campo de texto donde pondremos el nombre de la conexion TextField l_portText = new TextField(); l_portText.value = l_portName; //asignamos el valor del puerto a la nueva string l_portText.RegisterValueChangedCallback(evt => l_generatedPort.portName = evt.newValue); //capturamos el evento de cambiar el nombre en el textField y le asignamos ese nombre al puertoGenerado l_generatedPort.contentContainer.Add(l_portText); l_generatedPort.portName = l_portName; //boton para borrar el puerto Button l_deleteOutPortButton = new Button(); l_deleteOutPortButton.text = "-"; l_deleteOutPortButton.clickable.clicked += () => RemovePort(_roomNode, l_generatedPort, "out"); l_generatedPort.contentContainer.Add(l_deleteOutPortButton); _roomNode.outputContainer.Add(l_generatedPort); _roomNode.RefreshPorts(); //actualizamos la lista de puertos _roomNode.RefreshExpandedState(); //hacer visibles los nuevos elementos del container return(l_generatedPort); }