SpriteNameFileIdPairExt[] GetSerializedNameFileIdTable(SerializedObject so) { var nameFileIdTableSo = so.FindProperty("m_SpriteSheet.m_NameFileIdTable"); var arraySize = nameFileIdTableSo.arraySize; var nameFileIdPairs = new SpriteNameFileIdPairExt[arraySize]; if (nameFileIdPairs.Length > 0) { var sp = nameFileIdTableSo.GetArrayElementAtIndex(0); for (var i = 0; i < nameFileIdTableSo.arraySize; ++i) { var spriteNameFileId = SpriteNameFileIdPairExt.GetValue(sp); // check if this internal nid is already in one of the sprite. // We don't check name as changing internal id can cause reference to be lost var spriteRect = m_SpritesMultiple.FirstOrDefault(x => x.internalID == spriteNameFileId.internalID); if (spriteRect != null) { spriteNameFileId.SetFileGUID(spriteRect.spriteID); } nameFileIdPairs[i] = spriteNameFileId; sp.Next(false); } } return(nameFileIdPairs); }
void ISpriteNameFileIdDataProvider.SetNameFileIdPairs(IEnumerable <SpriteNameFileIdPair> pairs) { var newFileIdPair = new SpriteNameFileIdPairExt[pairs.Count()]; var count = 0; foreach (var pair in pairs) { var guid = pair.GetFileGUID(); var internalId = (long)guid.GetHashCode(); //check if guid is in current name id table var idPair = m_NameFileIdPairs.FirstOrDefault(x => x.GetFileGUID() == guid); if (idPair != null) { internalId = idPair.internalID; } else { // check if guid is in current sprite list var sr = m_SpritesMultiple.FirstOrDefault(x => x.spriteID == guid); if (sr != null) { internalId = sr.internalID; } } newFileIdPair[count] = new SpriteNameFileIdPairExt(pair.name, guid, internalId); count++; } m_NameFileIdPairs = newFileIdPair; }