using System;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
namespace EasyTalk.Display
{
///
/// A UI component used to display a character image.
///
public class CharacterImageDisplay : ConversationDisplayListener
{
///
/// The Image component used to display the character image.
///
[Tooltip("An image component used to display the character icon.")]
[SerializeField]
private Image characterIconImage;
///
/// A List of Character Image configurations mapping character names to sprites to use for each character.
///
[SerializeField]
private List characterImages = new List();
///
/// Searches for an image component to use on the GameObject if one isn't set for the character image.
///
private void Awake()
{
if(characterIconImage == null)
{
characterIconImage = GetComponent();
}
}
///
/// Updates the character image sprite to show the sprite for the current character.
///
/// The derived/translated name of the character a sprite should be shown for (ignored in this method).
/// The original/source name of the character a sprite should be shown for.
public override void OnCharacterNameUpdated(string characterName, string sourceName)
{
base.OnCharacterNameUpdated(characterName, sourceName);
if (characterIconImage != null)
{
characterIconImage.enabled = true;
CharacterImage defaultIcon = null;
bool iconSet = false;
foreach (CharacterImage icon in characterImages)
{
if (icon.characterName.ToLower().Equals(sourceName.ToLower()))
{
characterIconImage.sprite = icon.sprite;
iconSet = true;
break;
}
else if (icon.characterName.ToLower().Equals("default"))
{
defaultIcon = icon;
}
}
if (!iconSet)
{
if (defaultIcon != null)
{
characterIconImage.sprite = defaultIcon.sprite;
}
else
{
characterIconImage.enabled = false;
characterIconImage.sprite = null;
}
}
}
}
///
/// Disables the character image when reset.
///
public override void OnReset()
{
base.OnReset();
if (characterIconImage != null)
{
characterIconImage.enabled = false;
}
}
}
///
/// Configuration class for mapping a character name to a sprite.
///
[Serializable]
public class CharacterImage
{
///
/// The character name.
///
[SerializeField]
public string characterName;
///
/// The sprite to use for the character.
///
[SerializeField]
public Sprite sprite;
}
}