protected internal override void OnRemoveConnection(ConnectionPort port, ConnectionPort connection)
        {
            base.OnRemoveConnection(port, connection);
            if (port.direction == Direction.In)
            {
                if (attachedTo == connection.body as RPGTalkNode)
                {
                    if (port.connections.Count == 0)
                    {
                        startOfCutscene = true;
                        attachedTo      = null;
                        CutsceneTitle   = "Cutscene_" + (NodeEditor.curNodeCanvas as RPGTalkNodeCanvas).GetCorrectCutsceneAutoTitle().ToString();
                    }
                    else
                    {
                        attachedTo = port.connections[0].body as RPGTalkNode;
                    }
                }
                else if (attachedToChoice == connection.body as RPGTalkChoiceNode)
                {
                    //removed choice I came from
                    attachedToChoice = null;
                    CutsceneTitle    = "Cutscene_" + (NodeEditor.curNodeCanvas as RPGTalkNodeCanvas).GetCorrectCutsceneAutoTitle().ToString();
                }
                else if (attachedToChoice == connection.body as RPGTalkSaveNode)
                {
                    //removed choice I came from
                    attachedToSave = null;
                    CutsceneTitle  = "Cutscene_" + (NodeEditor.curNodeCanvas as RPGTalkNodeCanvas).GetCorrectCutsceneAutoTitle().ToString();
                }
            }
            else
            {
                //Remove choice
                if (connection.body is RPGTalkChoiceNode)
                {
                    choices.Remove(connection.body as RPGTalkChoiceNode);
                }

                //Remove choice
                if (connection.body is RPGTalkSaveNode)
                {
                    saves.Remove(connection.body as RPGTalkSaveNode);
                }
            }

            (NodeEditor.curNodeCanvas as RPGTalkNodeCanvas).GetNextLineInTxt();
        }
        protected internal override void OnAddConnection(ConnectionPort port, ConnectionPort connection)
        {
            base.OnAddConnection(port, connection);
            if (port.direction == Direction.In)
            {
                if (connection.body.isChildOf(this))
                {
                    return;
                }

                if (connection.body is RPGTalkNode)
                {
                    startOfCutscene = false;
                    if (attachedTo == null)
                    {
                        attachedTo    = connection.body as RPGTalkNode;
                        CutsceneTitle = attachedTo.CutsceneTitle;
                    }
                }
                else if (connection.body is RPGTalkChoiceNode)
                {
                    if (attachedToChoice == null)
                    {
                        attachedToChoice = connection.body as RPGTalkChoiceNode;
                    }
                    //I am the result of a choice
                    if (attachedToChoice.attachedTo != null)
                    {
                        CutsceneTitle = "FollowUp_" + attachedToChoice.attachedTo.CutsceneTitle + "_" + attachedToChoice.Title;
                    }
                    else
                    {
                        CutsceneTitle = "FollowUp_" + attachedToChoice.Title;
                    }
                }
                else
                {
                    if (attachedToSave == null)
                    {
                        attachedToSave = connection.body as RPGTalkSaveNode;
                    }
                    //I am the result of a choice
                    if (attachedToSave.attachedTo != null)
                    {
                        CutsceneTitle = "FollowUp_" + attachedToSave.attachedTo.CutsceneTitle + "_" + attachedToSave.Title;
                    }
                    else
                    {
                        CutsceneTitle = "FollowUp_" + attachedToSave.Title;
                    }
                }
            }
            else
            {
                //make sure that will be only one connection to RPGTalkNode
                List <ConnectionPort> toDelete = new List <ConnectionPort>();
                foreach (ConnectionPort connected in outputPorts[0].connections)
                {
                    if (connection.body is RPGTalkNode)
                    {
                        if (connected != connection)
                        {
                            toDelete.Add(connected);
                        }
                    }
                    else if (connection.body is RPGTalkChoiceNode)
                    {
                        if (connected != connection && (connected.body is RPGTalkNode || connected.body is RPGTalkSaveNode))
                        {
                            toDelete.Add(connected);
                        }
                    }
                    else
                    {
                        if (connected != connection && (connected.body is RPGTalkNode || connected.body is RPGTalkChoiceNode))
                        {
                            toDelete.Add(connected);
                        }
                    }
                }

                foreach (ConnectionPort deleteMe in toDelete)
                {
                    outputPorts[0].RemoveConnection(deleteMe);
                }

                //Add choice
                if (connection.body is RPGTalkChoiceNode)
                {
                    choices.Add(connection.body as RPGTalkChoiceNode);
                }

                //Add save
                if (connection.body is RPGTalkSaveNode)
                {
                    saves.Add(connection.body as RPGTalkSaveNode);
                }
            }

            (NodeEditor.curNodeCanvas as RPGTalkNodeCanvas).GetNextLineInTxt();
        }