public string ParseData(List <string> codeWords)
        {
            if (codeWords.Count % parametersOnLine != 2)
            {
                return($"Please follow this snippet: \n{GetSnippet()}");
            }

            StringId = codeWords[1];

            for (int i = 2; i < codeWords.Count; i += parametersOnLine)
            {
                string stateId = codeWords[i];
                bool   flipX, flipY;
                int    timesRotate90;

                string    animId = codeWords[i + 1];
                Animation anim   = AnimatingObjectsLib.Instance.Get(animId) as Animation;
                if (anim == null)
                {
                    return($"Animation Id {animId} is not found");
                }

                try
                {
                    flipX = bool.Parse(codeWords[i + 2]);
                    flipY = bool.Parse(codeWords[i + 3]);
                }
                catch
                {
                    return($"FlipX and FlipY must be either {Boolean.TrueString} or {Boolean.FalseString}");
                }

                try
                {
                    timesRotate90 = int.Parse(codeWords[i + 4]);
                }
                catch (Exception e)
                {
                    if (e is FormatException || e is OverflowException)
                    {
                        return($"Times_Rotate_90 must be a positive integer and not exceed 2^32");
                    }

                    return($"{Utils.UnknownErrorMsg}: {e.Message}");
                }

                StateAnimation state = new StateAnimation(stateId, anim, flipX, flipY, timesRotate90);
                States.Add(state);
                TotalDuration += state.TotalDuration;
            }

            return("");
        }
        private string GenerateInput_StateAnimation()
        {
            string result = "[STATE_ANIMATIONS]\n";

            result += "#ID\tAnimId\tFlipX\tFlipY\tTimesR90\n";

            foreach (var item in data)
            {
                if (item.Value is StateAnimation)
                {
                    StateAnimation state = item.Value as StateAnimation;

                    int id       = intIds[state.StringId];
                    int animId   = intIds[state.AnimationId];
                    int flipX    = state.FlipX? 1:0;
                    int flipY    = state.FlipY? 1:0;
                    int timesR90 = state.TimesRotate90;

                    result += $"{id}\t{animId}\t{flipX}\t{flipY}\t{timesR90}\n";
                }
            }

            return(result);
        }