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; } }