public void DrawConnections(EditableConnection currentlySelected) { Vector2 start = Vector2.zero; Vector2 end = Vector2.zero; float xPos = 0; float yPos = 0; for (int i = 0; i < Info.Connections.Count; i++) { bool connectingToOption = false; if (Info.Connections[i].ConnectionType == EditableConnection.eConnectiontype.Speech) { EditableSpeechConnection connection = Info.Connections[i] as EditableSpeechConnection; DialogueEditorUtil.GetConnectionDrawInfo(rect, connection.Speech, out start, out end); xPos = connection.Speech.EditorInfo.xPos; yPos = connection.Speech.EditorInfo.yPos; } else if (Info.Connections[i].ConnectionType == EditableConnection.eConnectiontype.Option) { EditableOptionConnection connection = Info.Connections[i] as EditableOptionConnection; DialogueEditorUtil.GetConnectionDrawInfo(rect, connection.Option, out start, out end); xPos = connection.Option.EditorInfo.xPos; yPos = connection.Option.EditorInfo.yPos; connectingToOption = true; } bool selected = (currentlySelected != null && currentlySelected == Info.Connections[i]); Vector2 toStart = (start - end).normalized; Vector2 toEnd = (end - start).normalized; if (selected) { Handles.DrawBezier(start, end, start + toStart, end + toEnd, SelectedColor, null, LINE_WIDTH * 3); } Handles.DrawBezier(start, end, start + toStart, end + toEnd, DefaultColor, null, LINE_WIDTH); Vector2 intersection; Vector2 boxPos = new Vector2(xPos, yPos); if (DialogueEditorUtil.DoesLineIntersectWithBox(start, end, boxPos, connectingToOption, out intersection)) { if (selected) { DialogueEditorUtil.DrawArrowTip(intersection, toEnd, SelectedColor, LINE_WIDTH * 3); } DialogueEditorUtil.DrawArrowTip(intersection, toEnd, DefaultColor); } } }
private void CopyConnectionConditions(EditableConnection editableConnection, Connection connection) { List <EditableCondition> editableConditions = editableConnection.Conditions; for (int i = 0; i < editableConditions.Count; i++) { if (editableConditions[i].ConditionType == EditableCondition.eConditionType.BoolCondition) { EditableBoolCondition ebc = editableConditions[i] as EditableBoolCondition; BoolCondition bc = new BoolCondition(); bc.ParameterName = ebc.ParameterName; switch (ebc.CheckType) { case EditableBoolCondition.eCheckType.equal: bc.CheckType = BoolCondition.eCheckType.equal; break; case EditableBoolCondition.eCheckType.notEqual: bc.CheckType = BoolCondition.eCheckType.notEqual; break; } bc.RequiredValue = ebc.RequiredValue; connection.Conditions.Add(bc); } else if (editableConditions[i].ConditionType == EditableCondition.eConditionType.IntCondition) { EditableIntCondition eic = editableConditions[i] as EditableIntCondition; IntCondition ic = new IntCondition(); ic.ParameterName = eic.ParameterName; switch (eic.CheckType) { case EditableIntCondition.eCheckType.equal: ic.CheckType = IntCondition.eCheckType.equal; break; case EditableIntCondition.eCheckType.greaterThan: ic.CheckType = IntCondition.eCheckType.greaterThan; break; case EditableIntCondition.eCheckType.lessThan: ic.CheckType = IntCondition.eCheckType.lessThan; break; } ic.RequiredValue = eic.RequiredValue; connection.Conditions.Add(ic); } } }
public static bool IsPointerNearConnection(List <UINode> uiNodes, Vector2 mousePos, out EditableConnection connection) { EditableConversationNode parent = null; EditableConversationNode child = null; if (IsPointerNearConnection(uiNodes, mousePos, out parent, out child)) { EditableConversationNode.eNodeType type = child.NodeType; for (int i = 0; i < parent.Connections.Count; i++) { if (type == EditableConversationNode.eNodeType.Speech) { EditableSpeechConnection con = parent.Connections[i] as EditableSpeechConnection; if (con.Speech == child) { connection = parent.Connections[i]; return(true); } } else if (type == EditableConversationNode.eNodeType.Option) { EditableOptionConnection con = parent.Connections[i] as EditableOptionConnection; if (con.Option == child) { connection = parent.Connections[i]; return(true); } } } } connection = null; return(false); }