> For the complete documentation index, see [llms.txt](https://kdoore.gitbook.io/cs2335/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://kdoore.gitbook.io/cs2335/overview-branchlogic/dialogtrigger.md).

# DialogTrigger

## Triggering Dialog with Collider2D interactions

This script provides a way to have a Collider2D that is configured as a trigger, so that it can have a Conversation ScriptableObject triggered to be executed by the DialogManager.   See version 2 below, it also includes logic to use key-value pair data to determine if a dialog should be replayed when revisiting a scene.  The DialogManager version2 has logic that sets conversations as completed by default so they won't be replayed when returning to a scene. &#x20;

### DialogTrigger.cs (Important:  see version 2 below)&#x20;

```csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

/// <summary>
/// This class provides a logic for the player to trigger dialog using a 2D collider
/// This script will be added to a gameObject with a  collider2D with isTrigger true
///
/// THis script requires that the dialogManager instance which will execute the dialog
/// must be populated in the inspector panel
/// as well as the ConversationList scriptableObject that will be displayed when triggered
///
/// This can be used on multiple objects within a scene, where each instance will have it's own
/// conversation to be exectued. 
/// </summary>
public class DialogTrigger : MonoBehaviour
{
    public ConversationList convList;   //populate in the inspector
    public DialogManager dialogManager; //Populate in the Inspector
   

    private void OnTriggerEnter2D(Collider2D collision)
    {
        if (collision.CompareTag("Player"))
        {
            Debug.Log("Collided with DialogTrigger");
            if (dialogManager != null) //populated in the inspector
            {
                dialogManager.TriggeredDialog(convList); //pass the convList as a parameter into the DialogManager
                Debug.Log("Trigger dialog");
            }
            else
            {
                Debug.Log("Couldn't find dialogManager to trigger");
            }
        }

    }
}  //end class

```

### DialogTrigger version2

In this version, a series of values associated with a given key, will determine conditions when the conversation will be replayed in a scene.  This requires that the key-value pair: key: ConvList.name value: "completed" be removed from the choiceData dictionary so that the DialogManager will replay the script.

```csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

/// <summary>
/// This class provides a logic for the player to trigger dialog using a 2D collider
/// This script will be added to a gameObject with a  collider2D with isTrigger true
///
/// THis script requires that the dialogManager instance which will execute the dialog
/// must be populated in the inspector panel
/// as well as the ConversationList scriptableObject that will be displayed when triggered
///
/// This can be used on multiple objects within a scene, where each instance will have it's own
/// conversation to be exectued. 
/// </summary>
public class DialogTrigger : MonoBehaviour
{
    public ConversationList convList;   //populate in the inspector
    public DialogManager dialogManager; //Populate in the Inspector

    [SerializeField]
    string key; //value required in order to be visible

    [SerializeField]
    string[] active_values; //set values that determine visibility within each scene

    private void Start()
    {
        //what NPC state is the condition that requires this to be replayed
        //example:  ZombieState == "hungry"
        string curValue = GameData.instanceRef.GetChoice(key); 

        bool activate = false;
     
            //add logic to see if conversation should be replayed - replay, make conversation active if this state is true
            for ( int i=0; i< active_values.Length; i++)
        {
            if( curValue == active_values[i])
            {
                activate = true;
                Debug.Log("reactivated conversation " + convList.name );
            }
        }
            if(activate)  //activate by removing the key from the dictionary to remove value 'completed'
        {
            GameData.instanceRef.RemoveChoice(convList.name);  //key to remove is ConvList.name
        }
    }

    private void OnTriggerEnter2D(Collider2D collision)
    {
        if (collision.CompareTag("Player"))
        {
            Debug.Log("Collided with DialogTrigger");
            if (dialogManager != null) //populated in the inspector
            {
                dialogManager.TriggeredDialog(convList); //pass the convList as a parameter into the DialogManager
                Debug.Log("Trigger dialog");
                Destroy(this.gameObject); //destroy trigger gameObject so that it doesn't get retriggered in the scene
            }
            else
            {
                Debug.Log("Couldn't find dialogManager to trigger");
            }
        }

    }
}  //end class

```
