protected void OnEndConnection(RoomNode roomNode, Event e) { if (connectionFrom == null) { return; } var from = connectionFrom; var to = roomNode; var connection = CreateInstance <Connection>(); connection.From = connectionFrom.Data; connection.To = roomNode.Data; if (from != to && !connectionNodes.Any(x => (x.From == @from && x.To == to) || (x.To == @from && x.From == to))) { Data.Connections.Add(connection); AssetDatabase.AddObjectToAsset(connection, Data); CreateConnection(connection, @from, to); } connectionFrom = null; connectionProgress = null; GUI.changed = true; }
public override void OnGUI() { var e = Event.current; var modeChanged = false; if (e.control && editorMode == EditorMode.Drag) { editorMode = EditorMode.MakeConnections; modeChanged = true; } else if (!e.control && editorMode == EditorMode.MakeConnections) { modeChanged = true; editorMode = EditorMode.Drag; } if (modeChanged) { connectionProgress = null; connectionFrom = null; roomNodes.ForEach(x => x.Mode = editorMode); } base.OnGUI(); DrawMenuBar(); }
protected ConnectionNode CreateConnection(Connection data, RoomNode from, RoomNode to) { var node = new ConnectionNode(data, from, to, connectionHandleStyle, 12); node.OnDelete += () => OnDeleteConnectionNode(node); connectionNodes.Add(node); return(node); }
protected void OnStartConnection(RoomNode roomNode, Event e) { if (connectionFrom == null) { connectionFrom = roomNode; connectionProgress = new ConnectionProgressNode(); connectionProgress.From = roomNode.Rect.center; } }
protected RoomNode CreateNode(Room data) { var node = new RoomNode(data, 40, 40, roomNodeStyle, editorMode); node.OnDelete += () => OnDeleteRoomNode(node); node.OnStartConnection += (e) => OnStartConnection(node, e); node.OnEndConnection += (e) => OnEndConnection(node, e); roomNodes.Add(node); return(node); }
private void OnDeleteRoomNode(RoomNode node) { Data.Rooms.Remove(node.Data); DestroyImmediate(node.Data, true); roomNodes.Remove(node); var connectionsToRemove = new List <ConnectionNode>(); foreach (var connectionNode in connectionNodes) { if (connectionNode.From == node || connectionNode.To == node) { connectionsToRemove.Add(connectionNode); } } foreach (var connectionNode in connectionsToRemove) { OnDeleteConnectionNode(connectionNode); } }
public void Initialize() { SetupStyles(); var roomToRoomNodes = new Dictionary <Room, RoomNode>(); roomNodes = new List <RoomNode>(); foreach (var data in Data.Rooms) { var roomNode = CreateNode(data); roomToRoomNodes.Add(data, roomNode); } connectionNodes = new List <ConnectionNode>(); foreach (var data in Data.Connections) { CreateConnection(data, roomToRoomNodes[data.From], roomToRoomNodes[data.To]); } editorMode = EditorMode.Drag; connectionFrom = null; connectionProgress = null; StaticData = Data; }