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);
                }
            }
        }
예제 #2
0
        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);
                }
            }
        }
예제 #3
0
        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);
        }