private Dictionary
<string,
int> mSpriteIndexes
= new Dictionary
<string,
int>(); private bool mIndexesDirty = true;
//(...)
public UISpriteData GetSprite (string name)
{
if (mReplacement != null)
{
return mReplacement.GetSprite(name);
}
else if (!string.IsNullOrEmpty(name))
{
if (mSprites.Count == 0) Upgrade();
if (mIndexesDirty || mSpriteIndexes.Count != mSprites.Count) GenerateSpriteIndexes();
int index;
if (mSpriteIndexes.TryGetValue(name, out index))
{
return mSprites[index];
}
else
{
for (int i = 0, imax = mSprites.Count; i < imax; ++i)
{
UISpriteData s = mSprites[i];
// string.Equals doesn't seem to work with Flash export
if (!string.IsNullOrEmpty(s.name) && name == s.name)
return s;
}
}
}
return null;
}
(...)
void GenerateSpriteIndexes()
{
mSpriteIndexes.Clear();
for (int i = 0; i < mSprites.Count; i++)
{
var uiSpriteData = mSprites[i];
mSpriteIndexes.Add(uiSpriteData.name, i);
}
mIndexesDirty = false;
}