예제 #1
0
 void Instance_OnDialogueNodeReached(DialogueNodeComponent node)
 {
     if (enabled && gameObject.activeInHierarchy && node == _dialogueNode)
     {
         TriggerEvent();
     }
 }
예제 #2
0
    public override void OnInspectorGUI()
    {
        base.OnInspectorGUI();

        GUILayout.Space(25);

        if (GUILayout.Button("Add Dialogue Node", GUILayout.ExpandWidth(false)))
        {
            CreateSuccessorNode();
        }
        GUILayout.BeginHorizontal();
        GUILayout.Label("Speaker", GUILayout.ExpandWidth(false));
        _speaker = GUILayout.TextField(_speaker);
        GUILayout.EndHorizontal();
        GUILayout.Label("Message:", GUILayout.ExpandWidth(false));
        _message = GUILayout.TextArea(_message);

        GUILayout.Space(20);
        if (GUILayout.Button("Add Jump Node", GUILayout.ExpandWidth(false)))
        {
            CreateJumpNode();
        }

        GUILayout.BeginHorizontal();
        GUILayout.Label("Jump Target", GUILayout.ExpandWidth(false));
        _jumpTarget = EditorGUILayout.ObjectField(_jumpTarget, typeof(DialogueNodeComponent), true) as DialogueNodeComponent;
        GUILayout.EndHorizontal();
    }
 void Instance_OnDialogueNodeCompleted(DialogueNodeComponent node)
 {
     if (node == _dialogueNode)
     {
         TriggerEvent();
     }
 }
예제 #4
0
 void Instance_OnDialogueBranchTaken(DialogueNodeComponent currentNode, DialogueTransitionNodeComponent node)
 {
     if (enabled && gameObject.activeInHierarchy && node == _transitionNode)
     {
         TriggerEvent();
     }
 }
예제 #5
0
        private void SetActionButtons(DialogueNodeComponent dialogueNode)
        {
            if (dialogueNode.HasBranch)
            {
                foreach (DialogueTransitionNodeComponent transitionNode in dialogueNode.DialogueTransitions)
                {
                    // Create a button.
                    DialogueButton button = GameObject.Instantiate(_buttonPrefab) as DialogueButton;

                    button.ButtonText = transitionNode.DialogueTransitionData.TransitionText;

                    button.transform.SetParent(_buttonArea);
                    button.transform.localScale = Vector3.one;
                    button.IsTransition         = true;
                    button.TransitionNode       = transitionNode;
                    button.ButtonPressed.AddListener(ButtonPressed);
                    button.gameObject.SetActive(true);
                }
            }
            else
            {
                // Just do one button.
                DialogueButton button = GameObject.Instantiate(_buttonPrefab) as DialogueButton;
                button.ButtonText = "Continue...";
                button.transform.SetParent(_buttonArea);
                button.transform.localScale = Vector3.one;
                button.ButtonPressed.AddListener(ButtonPressed);
                button.gameObject.SetActive(true);
            }
        }
예제 #6
0
        public void Show(DialogueNodeComponent dialogueNode)
        {
            ClearButtons();
            _currentNode = dialogueNode;
            if (_currentNode == null)
            {
                this.gameObject.SetActive(false);
                MetablastUI.Instance.BiologView.SetTint(0f);
                return;
            }
            else
            {
                gameObject.SetActive(true);
            }

            MessageFrameTitle = dialogueNode.DialogueData.Sender;
            _allowProgression = false;
            _textAnimator.ShowText(dialogueNode.DialogueData.Message, (t) => MessageText = t,
                                   () =>
            {
                //Debug.Log("Setting buttons");
                SetActionButtons(dialogueNode);
                _allowProgression = true;
            });
        }
예제 #7
0
    public static void CreateJumpNode(GameObject parent, DialogueNodeComponent targetNode)
    {
        GameObject jumpObject = new GameObject();

        jumpObject.transform.parent = parent.transform;
        jumpObject.name             = "DialogueJump_" + targetNode.name;

        DialogueJumpNode jumpNode = jumpObject.AddComponent <DialogueJumpNode>();

        jumpNode.JumpTarget = targetNode;
    }
    public override void OnInspectorGUI()
    {
        base.OnInspectorGUI();

        DialogueNodeComponent nodeTarget = (DialogueNodeComponent)target;

        if (nodeTarget.DialogueData == null)
        {
            nodeTarget.DialogueData = new DialogueNodeData();
        }

        GUILayout.Label("Sender");
        nodeTarget.DialogueData.Sender = GUILayout.TextField(nodeTarget.DialogueData.Sender);
        GUILayout.Label("Message");
        nodeTarget.DialogueData.Message = GUILayout.TextArea(nodeTarget.DialogueData.Message);


        nodeTarget.PausesGame = GUILayout.Toggle(nodeTarget.PausesGame, "Pause Game");

        GUILayout.Space(25);

        if (GUILayout.Button("Add Transition Node", GUILayout.ExpandWidth(false)))
        {
            CreateTransitionNode();
        }
        GUILayout.BeginHorizontal();
        GUILayout.Label("Transition Text:", GUILayout.ExpandWidth(false));
        _transitionNodeText = GUILayout.TextField(_transitionNodeText);
        GUILayout.EndHorizontal();

        GUILayout.Space(20);
        if (GUILayout.Button("Add Dialogue Node", GUILayout.ExpandWidth(false)))
        {
            CreateSuccessorNode();
        }
        GUILayout.BeginHorizontal();
        GUILayout.Label("Speaker", GUILayout.ExpandWidth(false));
        _speaker = GUILayout.TextField(_speaker);
        GUILayout.EndHorizontal();
        GUILayout.Label("Message:", GUILayout.ExpandWidth(false));
        _message = GUILayout.TextArea(_message);

        GUILayout.Space(20);
        if (GUILayout.Button("Add Jump Node", GUILayout.ExpandWidth(false)))
        {
            CreateJumpNode();
        }

        GUILayout.BeginHorizontal();
        GUILayout.Label("Jump Target", GUILayout.ExpandWidth(false));
        _jumpTarget = EditorGUILayout.ObjectField(_jumpTarget, typeof(DialogueNodeComponent), true) as DialogueNodeComponent;
        GUILayout.EndHorizontal();
    }
예제 #9
0
 public void StartDialogue(DialogueNodeComponent dialogueRoot)
 {
     if (dialogueRoot.PausesGame && GameState.Instance.PauseLevel < PauseLevel.Dialogue)
     {
         GameState.Instance.PauseLevel = PauseLevel.Dialogue;
     }
     _view.Show(dialogueRoot);
     if (OnDialogueNodeReached != null)
     {
         OnDialogueNodeReached(dialogueRoot);
     }
 }
예제 #10
0
    public static void CreateDialogueSuccessor(GameObject parent, string speaker, string message)
    {
        GameObject successorObject = new GameObject();

        successorObject.transform.parent = parent.transform;
        successorObject.name             = "Dialogue_" + speaker;

        DialogueNodeComponent nodeComponent = successorObject.AddComponent <DialogueNodeComponent>();

        nodeComponent.DialogueData         = new DialogueNodeData();
        nodeComponent.DialogueData.Sender  = speaker;
        nodeComponent.DialogueData.Message = message;
    }
예제 #11
0
    protected virtual void Start()
    {
        foreach (Transform child in transform)
        {
            _childrenNodes.AddRange(child.GetComponents <DialogueTransitionNodeComponent>());

            DialogueNodeComponent successor = child.GetComponent <DialogueNodeComponent>();
            if (successor)
            {
                _successor = successor;
            }
        }

        if (HasBranch && _successor)
        {
            DebugFormatter.LogError(this, "Dialogue node has both branch transitions and immediate successor. Dialogue nodes can contain one or the other, but not both.");
        }
    }
예제 #12
0
    void _view_OnDialogueBranchTaken(DialogueNodeComponent currentNode, DialogueTransitionNodeComponent node)
    {
        if (OnDialogueNodeCompleted != null)
        {
            OnDialogueNodeCompleted(currentNode);
        }

        _view.Show(node.DialogueNodeComponent);

        if (OnDialogueBranchTaken != null)
        {
            OnDialogueBranchTaken(currentNode, node);
        }
        if (OnDialogueNodeReached != null)
        {
            OnDialogueNodeReached(node.DialogueNodeComponent);
        }
    }
예제 #13
0
    void _view_OnDialogueViewProgressed(DialogueNodeComponent node)
    {
        if (OnDialogueNodeCompleted != null)
        {
            OnDialogueNodeCompleted(node);
        }

        if (node.NextDialogueNode == null && GameState.Instance.PauseLevel == PauseLevel.Dialogue)
        {
            GameState.Instance.PauseLevel = PauseLevel.Unpaused;
            _view.Show(node.NextDialogueNode);
            return;
        }

        _view.Show(node.NextDialogueNode);
        if (OnDialogueNodeReached != null)
        {
            OnDialogueNodeReached(node.NextDialogueNode);
        }
    }
    void Start()
    {
        foreach (Transform child in transform)
        {
            DialogueNodeComponent dialogue = child.GetComponent <DialogueNodeComponent>();

            if (dialogue != null)
            {
                if (_successorNode == null)
                {
                    _successorNode = dialogue;
                }
                else
                {
                    Debug.Log("No??");
                    DebugFormatter.LogError(this, "Found multiple dialogue node children. A {0} component can only have one {1} child.", GetType().Name, typeof(DialogueNodeComponent).Name);
                    return;
                }
            }
        }
    }
예제 #15
0
    public void Show(DialogueNodeComponent dialogueNode)
    {
        MetablastUI.Instance.BiologView.SetTint(0.5f);
        _currentNode = dialogueNode;
        if (_currentNode == null)
        {
            _dialogueFrame.Visible = false;
            MetablastUI.Instance.BiologView.SetTint(0f);
            return;
        }
        else
        {
            _dialogueFrame.Visible = true;
        }
        _currentNode = dialogueNode;

        MessageFrameTitle          = dialogueNode.DialogueData.Sender;
        MessageText                = dialogueNode.DialogueData.Message;
        _lastDisplayCharacterIndex = 0;
        SetActionButtons(dialogueNode);

        _timeAtLastChar = Time.time;
    }
예제 #16
0
    public void SetActionButtons(DialogueNodeComponent dialogueNode)
    {
        foreach (Control actionButton in _actionButtonsFrame.Controls)
        {
            actionButton.MouseClick -= button_MouseClick;
        }
        _actionButtonsFrame.Controls.Clear();

        if (dialogueNode.HasBranch)
        {
            foreach (DialogueTransitionNodeComponent transitionNode in dialogueNode.DialogueTransitions)
            {
                Button button = new Button();
                button.AutoSize    = AutoSize.Horizontal;
                button.Dock        = DockStyle.Left;
                button.Margin      = new Margin(4, 0, 0, 0);
                button.Text        = transitionNode.DialogueTransitionData.TransitionText;
                button.Style       = "Button - Pointed";
                button.Tag         = transitionNode;
                button.MouseClick += button_MouseClick;
                _actionButtonsFrame.Controls.Add(button);
            }
        }
        else
        {
            Button button = new Button();
            button.AutoSize    = AutoSize.Horizontal;
            button.Dock        = DockStyle.Left;
            button.Margin      = new Margin(4, 0, 0, 0);
            button.Text        = "Continue...";
            button.Style       = "Button - Pointed";
            button.MouseClick += continueButton_MouseClick;
            _actionButtonsFrame.Controls.Add(button);
        }
        _actionButtonsFrame.ForceFlowLayout();
    }
예제 #17
0
 private void CreateJumpNode()
 {
     DialogueEditorHelper.CreateJumpNode((target as DialogueTransitionNodeComponent).gameObject, _jumpTarget);
     _jumpTarget = null;
 }
예제 #18
0
    private string GetHTMLForDialogueNode(DialogueNodeComponent nodeComponent, HashSet <DialogueNodeComponent> encounteredNodes)
    {
        if (encounteredNodes.Contains(nodeComponent))
        {
            return("<H4 style=\"margin-bottom:5px\";>Reference: " + nodeComponent.name + "</H4>\n");
        }
        else
        {
            encounteredNodes.Add(nodeComponent);
        }

        string toReturn = "<H4 style=\"margin-bottom:5px\";>" + nodeComponent.name + "</H4>\n";

        toReturn += "<div style=\"margin-left:25px;border:2px solid;margin-bottom:25px;padding-left:20px\";>";
        toReturn += "<p>";

        toReturn += "<body><i>Sender:</i> " + nodeComponent.DialogueData.Sender + "</body><br>\n";
        toReturn += "<body><i>Message:</i> " + nodeComponent.DialogueData.Message + "</body>\n";
        toReturn += "<br>\n";


        DialogueNodeComponent successor = null;
        List <DialogueTransitionNodeComponent> transitions = new List <DialogueTransitionNodeComponent>();

        foreach (Transform child in nodeComponent.transform)
        {
            transitions.AddRange(child.GetComponents <DialogueTransitionNodeComponent>());
            successor = child.GetComponent <DialogueNodeComponent>() ?? successor;
        }

        if (successor)
        {
            toReturn += "<div style=\"margin-left:25px\";>";
            toReturn += "<p>";
            if (successor is DialogueJumpNode)
            {
                if ((successor as DialogueJumpNode).JumpTarget)
                {
                    toReturn += GetHTMLForDialogueNode((successor as DialogueJumpNode).JumpTarget, encounteredNodes);
                }
            }
            else
            {
                toReturn += GetHTMLForDialogueNode(successor, encounteredNodes);
            }
            toReturn += "</p>";
            toReturn += "</div>";
        }

        foreach (DialogueTransitionNodeComponent transition in transitions)
        {
            string text = transition.DialogueTransitionData.TransitionText;
            toReturn += "<H4 style=\"margin-bottom:5px\";>Transition (" + text + ")</H4>";

            DialogueNodeComponent transitionSucessor = null;
            foreach (Transform child in transition.transform)
            {
                transitionSucessor = child.GetComponent <DialogueNodeComponent>() ?? transitionSucessor;
            }
            toReturn += GetHTMLForDialogueNode(transitionSucessor, encounteredNodes);
        }
        toReturn += "</p>";
        toReturn += "</div>";

        return(toReturn);
    }