96 lines
2.2 KiB
C#
96 lines
2.2 KiB
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
|
|
public class DialogueSystem : MonoBehaviour
|
|
{
|
|
[SerializeField] private Dialogue dialogue;
|
|
|
|
[SerializeField] private GameObject dialogBox;
|
|
|
|
[SerializeField] private Text dialog;
|
|
|
|
[SerializeField] private Text characterName;
|
|
|
|
[SerializeField] private Image characterSprite;
|
|
|
|
[SerializeField] private CharacterType type;
|
|
|
|
private int index;
|
|
private bool isInTurn;
|
|
|
|
private int npcId;
|
|
|
|
public Dictionary<int, List<DialogNode>> dialogNodes = new Dictionary<int, List<DialogNode>>();
|
|
private void Awake()
|
|
{
|
|
foreach (var dia in dialogue.dialogNode)
|
|
{
|
|
if (!dialogNodes.ContainsKey(dia.npcID))
|
|
{
|
|
dialogNodes.Add(dia.npcID,new List<DialogNode> { dia});
|
|
|
|
}
|
|
else
|
|
{
|
|
dialogNodes[dia.npcID].Add(dia);
|
|
}
|
|
}
|
|
}
|
|
|
|
void Update()
|
|
{
|
|
if (Input.GetKeyDown(KeyCode.E) && isInTurn)
|
|
{
|
|
Play();
|
|
}
|
|
|
|
}
|
|
private void OnTriggerEnter2D(Collider2D collision)
|
|
{
|
|
if (collision.CompareTag("Npc"))
|
|
{
|
|
Debug.Log("aaa");
|
|
isInTurn = true;
|
|
npcId = collision.GetComponent<UITip>().GetNpcId();
|
|
}
|
|
|
|
}
|
|
private void OnTriggerExit2D(Collider2D collision)
|
|
{
|
|
if (collision.CompareTag("Npc"))
|
|
{
|
|
Debug.Log("bbb");
|
|
isInTurn = false;
|
|
index = 0;
|
|
dialogBox.SetActive(false);
|
|
}
|
|
}
|
|
|
|
void Play()
|
|
{
|
|
dialogBox.SetActive(true);
|
|
DialogNode node = dialogNodes[npcId][Mathf.Clamp(index++, 0, dialogNodes[npcId].Count - 1)];
|
|
|
|
if (index - 1 == dialogNodes[npcId].Count)
|
|
{
|
|
dialog.text = "抱歉,我很忙,你可以找一下事情做";
|
|
}
|
|
else
|
|
{
|
|
dialog.text = node.dialog;
|
|
}
|
|
|
|
characterName.text = node.characterName;
|
|
characterSprite.overrideSprite = node.characterSprite;
|
|
|
|
if (index - 1 == dialogNodes[npcId].Count)
|
|
{
|
|
dialog.text = null;
|
|
dialogBox.SetActive(false);
|
|
|
|
}
|
|
}
|
|
}
|