/// <summary>
        /// Gets the folderId and fileId for the given SpriterObject based on the current character map or default
        /// </summary>
        protected virtual bool GetSpriteIds(SpriterObject obj, out int folderId, out int fileId)
        {
            folderId = obj.FolderId;
            fileId   = obj.FileId;

            if (CharacterMap == null)
            {
                return(true);
            }

            for (int i = 0; i < CharacterMap.Maps.Length; ++i)
            {
                SpriterMapInstruction map = CharacterMap.Maps[i];
                if (map.FolderId != folderId || map.FileId != fileId)
                {
                    continue;
                }
                if (map.TargetFolderId < 0 || map.TargetFileId < 0)
                {
                    return(false);
                }
                folderId = map.TargetFolderId;
                fileId   = map.TargetFileId;
                return(true);
            }

            return(false);
        }
        protected virtual void ApplyCharMap(SpriterCharacterMap charMap)
        {
            if (charMap == null)
            {
                charMapValues.Clear();
                return;
            }

            for (int i = 0; i < charMap.Maps.Length; ++i)
            {
                SpriterMapInstruction map = charMap.Maps[i];
                TSprite sprite            = GetFromDict(map.FolderId, map.FileId, sprites);
                if (sprite == null)
                {
                    continue;
                }

                charMapValues[sprite] = new KeyValuePair <int, int>(map.TargetFolderId, map.TargetFileId);
            }
        }