Browse Source

Sort characters and portraits by their name in their respective lists.

master
Steve Halliwell 5 years ago
parent
commit
41a72fc8bc
  1. 25
      Assets/Fungus/Scripts/Components/Character.cs
  2. 13
      Assets/Fungus/Scripts/Utils/PortraitUtils.cs

25
Assets/Fungus/Scripts/Components/Character.cs

@ -4,7 +4,6 @@
using UnityEngine; using UnityEngine;
using UnityEngine.Serialization; using UnityEngine.Serialization;
using System.Collections.Generic; using System.Collections.Generic;
using System;
namespace Fungus namespace Fungus
{ {
@ -12,7 +11,7 @@ namespace Fungus
/// A Character that can be used in dialogue via the Say, Conversation and Portrait commands. /// A Character that can be used in dialogue via the Say, Conversation and Portrait commands.
/// </summary> /// </summary>
[ExecuteInEditMode] [ExecuteInEditMode]
public class Character : MonoBehaviour, ILocalizable public class Character : MonoBehaviour, ILocalizable, IComparer<Character>
{ {
[Tooltip("Character name as displayed in Say Dialog.")] [Tooltip("Character name as displayed in Say Dialog.")]
[SerializeField] protected string nameText; // We need a separate name as the object name is used for character variations (e.g. "Smurf Happy", "Smurf Sad") [SerializeField] protected string nameText; // We need a separate name as the object name is used for character variations (e.g. "Smurf Happy", "Smurf Sad")
@ -45,6 +44,7 @@ namespace Fungus
if (!activeCharacters.Contains(this)) if (!activeCharacters.Contains(this))
{ {
activeCharacters.Add(this); activeCharacters.Add(this);
activeCharacters.Sort(this);
} }
} }
@ -121,6 +121,18 @@ namespace Fungus
|| nameText.StartsWith(matchString, true, System.Globalization.CultureInfo.CurrentCulture); || nameText.StartsWith(matchString, true, System.Globalization.CultureInfo.CurrentCulture);
#endif #endif
} }
public int Compare(Character x, Character y)
{
if (x == y)
return 0;
if (y == null)
return 1;
if (x == null)
return -1;
return x.name.CompareTo(y.name);
}
/// <summary> /// <summary>
/// Looks for a portrait by name on a character /// Looks for a portrait by name on a character
@ -128,14 +140,14 @@ namespace Fungus
/// </summary> /// </summary>
public virtual Sprite GetPortrait(string portraitString) public virtual Sprite GetPortrait(string portraitString)
{ {
if (String.IsNullOrEmpty(portraitString)) if (string.IsNullOrEmpty(portraitString))
{ {
return null; return null;
} }
for (int i = 0; i < portraits.Count; i++) for (int i = 0; i < portraits.Count; i++)
{ {
if (portraits[i] != null && String.Compare(portraits[i].name, portraitString, true) == 0) if (portraits[i] != null && string.Compare(portraits[i].name, portraitString, true) == 0)
{ {
return portraits[i]; return portraits[i];
} }
@ -169,5 +181,10 @@ namespace Fungus
} }
#endregion #endregion
protected virtual void OnValidate()
{
portraits.Sort(PortraitUtil.PortraitCompareTo);
}
} }
} }

13
Assets/Fungus/Scripts/Utils/PortraitUtils.cs

@ -176,6 +176,19 @@ namespace Fungus
return options; return options;
} }
static public int PortraitCompareTo(Sprite x, Sprite y)
{
if (x == y)
return 0;
if (y == null)
return 1;
if (x == null)
return -1;
return x.name.CompareTo(y.name);
}
#endregion #endregion
} }
} }

Loading…
Cancel
Save