initial upload
This commit is contained in:
86
Assets/Convai/Scripts/Runtime/UI/Chat/QuestionAnswerUI.cs
Normal file
86
Assets/Convai/Scripts/Runtime/UI/Chat/QuestionAnswerUI.cs
Normal file
@ -0,0 +1,86 @@
|
||||
using TMPro;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Convai.Scripts.Runtime.UI
|
||||
{
|
||||
/// <summary>
|
||||
/// The QuestionAnswerUI class is responsible for managing the UI elements
|
||||
/// that display questions and answers in a conversational interface.
|
||||
/// </summary>
|
||||
public class QuestionAnswerUI : ChatUIBase
|
||||
{
|
||||
private Message _answer;
|
||||
private GameObject _feedbackButtons;
|
||||
private Message _question;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes the UI with the provided prefab.
|
||||
/// </summary>
|
||||
/// <param name="uiPrefab">The UI prefab to instantiate.</param>
|
||||
public override void Initialize(GameObject uiPrefab)
|
||||
{
|
||||
UIInstance = Instantiate(uiPrefab);
|
||||
_question = new Message
|
||||
{
|
||||
SenderTextObject = UIInstance.transform.Find("Background").Find("Question").Find("Sender").GetComponent<TMP_Text>(),
|
||||
MessageTextObject = UIInstance.transform.Find("Background").Find("Question").Find("Text").GetComponent<TMP_Text>()
|
||||
};
|
||||
_answer = new Message
|
||||
{
|
||||
SenderTextObject = UIInstance.transform.Find("Background").Find("Answer").Find("Sender").GetComponent<TMP_Text>(),
|
||||
MessageTextObject = UIInstance.transform.Find("Background").Find("Answer").Find("AnswerText").Find("Text").GetComponent<TMP_Text>()
|
||||
};
|
||||
UIInstance.SetActive(false);
|
||||
_feedbackButtons = _answer.MessageTextObject.transform.GetChild(0).gameObject;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sends the character's text to the UI, formatted with the character's color.
|
||||
/// </summary>
|
||||
/// <param name="charName">The name of the character speaking.</param>
|
||||
/// <param name="text">The text spoken by the character.</param>
|
||||
/// <param name="characterTextColor">The color associated with the character.</param>
|
||||
public override void SendCharacterText(string charName, string text, Color characterTextColor)
|
||||
{
|
||||
if (string.IsNullOrEmpty(text)) return;
|
||||
|
||||
if (_answer != null)
|
||||
{
|
||||
_feedbackButtons.SetActive(false);
|
||||
_answer.SenderTextObject.text = FormatSpeakerName(charName, characterTextColor);
|
||||
_answer.MessageTextObject.text = text;
|
||||
_answer.RTLUpdate();
|
||||
_feedbackButtons.SetActive(true);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sends the player's text to the UI, formatted with the player's color.
|
||||
/// </summary>
|
||||
/// <param name="playerName">The name of the player speaking.</param>
|
||||
/// <param name="text">The text spoken by the player.</param>
|
||||
/// <param name="playerTextColor">The color associated with the player.</param>
|
||||
public override void SendPlayerText(string playerName, string text, Color playerTextColor)
|
||||
{
|
||||
if (_question != null)
|
||||
{
|
||||
_question.SenderTextObject.text = FormatSpeakerName(playerName, playerTextColor);
|
||||
_question.MessageTextObject.text = text;
|
||||
_answer.RTLUpdate();
|
||||
_feedbackButtons.SetActive(false);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Formats the speaker's name with the color tag
|
||||
/// </summary>
|
||||
/// <param name="speakerName">The name of the speaker.</param>
|
||||
/// <param name="speakerColor">The color associated with the speaker.</param>
|
||||
/// <returns>Formatted speaker name.</returns>
|
||||
private string FormatSpeakerName(string speakerName, Color speakerColor)
|
||||
{
|
||||
string colorHex = ColorUtility.ToHtmlStringRGBA(speakerColor);
|
||||
return $"<color=#{colorHex}>{speakerName}</color>: ";
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user