Esempio n. 1
0
        public void AnimateControl(NotepadListItem nli, AnimationFlag af)
        {
            switch (af)
            {
            case AnimationFlag.NotepadItemOPEN:
                AnimationLib.OpacityControl(nli, 0, 1, GlobalPreferences.ANIMATION_SPEED_SEC);
                AnimationLib.MoveToTargetX(nli, 0, -ActualWidth, GlobalPreferences.ANIMATION_SPEED_SEC);
                break;

            //Cant really do this. Animations are async so i'd have to have a timed delay when
            //removing the item from the NotepadList, which would be... a bit complex.
            //If anyone wants to try and add that delay (using tasks maybe, have a go)
            //(and msg me or something with the code, and ill add it)
            case AnimationFlag.NotepadItemCLOSE:
                //AnimationLib.OpacityControl(nli, 1, 0, AnimationSpeedSeconds);
                //AnimationLib.MoveToTargetX(nli, -ActualWidth, 0, AnimationSpeedSeconds * 15);
                //
                //Task.Run(async () =>
                //{
                //    await Task.Delay(TimeSpan.FromSeconds(AnimationSpeedSeconds));
                //    await Application.Current.Dispatcher.InvokeAsync(() => { ViewModel.NotepadItems.Remove(nli); });
                //});
                break;
            }
        }
Esempio n. 2
0
//        void GoBack(AnimationFlag animationFlag)
//        {
//            GoBack();
//        }


        public void GoBack(AnimationFlag animationFlag)
        {
            var nav = CurrentNavigationController();

            if (nav != null)
            {
                nav.PopViewController(true);
            }
        }
Esempio n. 3
0
        public static AnimationFlag GetAnimFlags(ushort Flag)
        {
            AnimationFlag flag = new AnimationFlag();

            flag.TranslationX = BitsUtil.Int.GetBit(Flag, 0);
            flag.TranslationY = BitsUtil.Int.GetBit(Flag, 1);
            flag.TranslationZ = BitsUtil.Int.GetBit(Flag, 2);
            flag.RotationX    = BitsUtil.Int.GetBit(Flag, 3);
            flag.RotationY    = BitsUtil.Int.GetBit(Flag, 4);
            flag.RotationZ    = BitsUtil.Int.GetBit(Flag, 5);
            flag.ScaleX       = BitsUtil.Int.GetBit(Flag, 6);
            flag.ScaleY       = BitsUtil.Int.GetBit(Flag, 7);
            flag.ScaleZ       = BitsUtil.Int.GetBit(Flag, 8);

            return(flag);
        }
Esempio n. 4
0
        public void GoBack(AnimationFlag animationFlag)
        {
            Activity.GoBack();
            switch (animationFlag)
            {
            case AnimationFlag.Grow:
            case AnimationFlag.Up:
            case AnimationFlag.Forward:
                _activity.OverridePendingTransition(Resource.Animation.pull_in_right, Resource.Animation.push_out_left);
                break;

            case AnimationFlag.Down:
            case AnimationFlag.Back:
                _activity.OverridePendingTransition(Resource.Animation.pull_in_left, Resource.Animation.push_out_right);
                break;
            }
        }
Esempio n. 5
0
        private void StartIntentAndAnimate(Intent intent, string pageKey = "", AnimationFlag animationFlag = AnimationFlag.Forward)
        {
            Activity.NextPageKey = pageKey;

            _activity.StartActivity(intent);

            switch (animationFlag)
            {
            case AnimationFlag.Grow:
            case AnimationFlag.Up:
            case AnimationFlag.Forward:
                _activity.OverridePendingTransition(Resource.Animation.pull_in_right, Resource.Animation.push_out_left);
                break;

            case AnimationFlag.Down:
            case AnimationFlag.Back:
                _activity.OverridePendingTransition(Resource.Animation.pull_in_left, Resource.Animation.push_out_right);
                break;
            }
        }
Esempio n. 6
0
        public static Pam Read(Stream stream)
        {
            Pam pam = new Pam();

            pam.header   = BinaryMapping.ReadObject <Header>(stream);
            pam.animList = new List <AnimationInfo>();

            for (int i = 0; i < pam.header.AnimationCount; i++)
            {
                pam.animList.Add(new AnimationInfo());
                pam.animList[i].AnimEntry = BinaryMapping.ReadObject <AnimationEntry>(stream);
            }

            // Get all anims in PAM pack.
            for (int j = 0; j < pam.animList.Count; j++)
            {
                stream.Seek(pam.animList[j].AnimEntry.AnimationOffset, SeekOrigin.Begin);
                pam.animList[j].AnimHeader = BinaryMapping.ReadObject <AnimationHeader>(stream);

                byte   BoneNum  = pam.animList[j].AnimHeader.BoneCount;
                ushort frameNum = pam.animList[j].AnimHeader.FrameCount;

                pam.animList[j].ChannelFlags = new List <ushort>();

                // Channel Flags
                for (int k = 0; k < BoneNum; k++)
                {
                    pam.animList[j].ChannelFlags.Add(stream.ReadUInt16());
                }

                pam.animList[j].BoneChannels = new List <BoneChannel>();

                // Channel Header & Data
                for (int l = 0; l < BoneNum; l++)
                {
                    BoneChannel   boneChannel = new BoneChannel();
                    AnimationFlag flg         = GetAnimFlags(pam.animList[j].ChannelFlags[l]);
                    ushort        frameCnt    = pam.animList[j].AnimHeader.FrameCount;

                    /** TRANSLATION **/

                    if (flg.TranslationX)
                    {
                        ushort keyframeCnt = 0;
                        boneChannel.TranslationX                 = new AnimationData();
                        boneChannel.TranslationX.Header          = new ChannelHeader();
                        boneChannel.TranslationX.Header.MaxValue = stream.ReadFloat();
                        boneChannel.TranslationX.Header.MinValue = stream.ReadFloat();
                        if (frameCnt > 255)
                        {
                            keyframeCnt = boneChannel.TranslationX.Header.KeyframeCount_16bits = stream.ReadUInt16();
                        }
                        else
                        {
                            keyframeCnt = boneChannel.TranslationX.Header.KeyframeCount_8bits = (byte)stream.ReadByte();
                        }

                        if (keyframeCnt != 1)
                        {
                            boneChannel.TranslationX.Keyframes = new List <KeyframeEntry>();
                            for (ushort z = 0; z < keyframeCnt; z++)
                            {
                                KeyframeEntry ent = new KeyframeEntry();
                                if (keyframeCnt == frameCnt)
                                {
                                    ent.FrameID_16bits = z;
                                    ent.Value          = stream.ReadUInt16();
                                    boneChannel.TranslationX.Keyframes.Add(ent);
                                }
                                else
                                {
                                    if (frameCnt > 255)
                                    {
                                        ent.FrameID_16bits = stream.ReadUInt16();
                                    }
                                    else
                                    {
                                        ent.FrameID_8bits = (byte)stream.ReadByte();
                                    }
                                    ent.Value = stream.ReadUInt16();
                                    boneChannel.TranslationX.Keyframes.Add(ent);
                                }
                            }
                        }
                    }

                    if (flg.TranslationY)
                    {
                        ushort keyframeCnt = 0;
                        boneChannel.TranslationY                 = new AnimationData();
                        boneChannel.TranslationY.Header          = new ChannelHeader();
                        boneChannel.TranslationY.Header.MaxValue = stream.ReadFloat();
                        boneChannel.TranslationY.Header.MinValue = stream.ReadFloat();
                        if (frameCnt > 255)
                        {
                            keyframeCnt = boneChannel.TranslationY.Header.KeyframeCount_16bits = stream.ReadUInt16();
                        }
                        else
                        {
                            keyframeCnt = boneChannel.TranslationY.Header.KeyframeCount_8bits = (byte)stream.ReadByte();
                        }

                        if (keyframeCnt != 1)
                        {
                            boneChannel.TranslationY.Keyframes = new List <KeyframeEntry>();
                            for (ushort z = 0; z < keyframeCnt; z++)
                            {
                                KeyframeEntry ent = new KeyframeEntry();

                                if (keyframeCnt == frameCnt)
                                {
                                    ent.FrameID_16bits = z;
                                    ent.Value          = stream.ReadUInt16();
                                    boneChannel.TranslationY.Keyframes.Add(ent);
                                }
                                else
                                {
                                    if (frameCnt > 255)
                                    {
                                        ent.FrameID_16bits = stream.ReadUInt16();
                                    }
                                    else
                                    {
                                        ent.FrameID_8bits = (byte)stream.ReadByte();
                                    }
                                    ent.Value = stream.ReadUInt16();
                                    boneChannel.TranslationY.Keyframes.Add(ent);
                                }
                            }
                        }
                    }

                    if (flg.TranslationZ)
                    {
                        ushort keyframeCnt = 0;
                        boneChannel.TranslationZ                 = new AnimationData();
                        boneChannel.TranslationZ.Header          = new ChannelHeader();
                        boneChannel.TranslationZ.Header.MaxValue = stream.ReadFloat();
                        boneChannel.TranslationZ.Header.MinValue = stream.ReadFloat();
                        if (frameCnt > 255)
                        {
                            keyframeCnt = boneChannel.TranslationZ.Header.KeyframeCount_16bits = stream.ReadUInt16();
                        }
                        else
                        {
                            keyframeCnt = boneChannel.TranslationZ.Header.KeyframeCount_8bits = (byte)stream.ReadByte();
                        }

                        if (keyframeCnt != 1)
                        {
                            boneChannel.TranslationZ.Keyframes = new List <KeyframeEntry>();
                            for (ushort z = 0; z < keyframeCnt; z++)
                            {
                                KeyframeEntry ent = new KeyframeEntry();
                                if (keyframeCnt == frameCnt)
                                {
                                    ent.FrameID_16bits = z;
                                    ent.Value          = stream.ReadUInt16();
                                    boneChannel.TranslationZ.Keyframes.Add(ent);
                                }
                                else
                                {
                                    if (frameCnt > 255)
                                    {
                                        ent.FrameID_16bits = stream.ReadUInt16();
                                    }
                                    else
                                    {
                                        ent.FrameID_8bits = (byte)stream.ReadByte();
                                    }
                                    ent.Value = stream.ReadUInt16();
                                    boneChannel.TranslationZ.Keyframes.Add(ent);
                                }
                            }
                        }
                    }

                    /** ROTATION **/

                    if (flg.RotationX)
                    {
                        ushort keyframeCnt = 0;
                        boneChannel.RotationX                 = new AnimationData();
                        boneChannel.RotationX.Header          = new ChannelHeader();
                        boneChannel.RotationX.Header.MaxValue = stream.ReadFloat();
                        boneChannel.RotationX.Header.MinValue = stream.ReadFloat();
                        if (frameCnt > 255)
                        {
                            keyframeCnt = boneChannel.RotationX.Header.KeyframeCount_16bits = stream.ReadUInt16();
                        }
                        else
                        {
                            keyframeCnt = boneChannel.RotationX.Header.KeyframeCount_8bits = (byte)stream.ReadByte();
                        }

                        if (keyframeCnt != 1)
                        {
                            boneChannel.RotationX.Keyframes = new List <KeyframeEntry>();
                            for (ushort z = 0; z < keyframeCnt; z++)
                            {
                                KeyframeEntry ent = new KeyframeEntry();
                                if (keyframeCnt == frameCnt)
                                {
                                    ent.FrameID_16bits = z;
                                    ent.Value          = stream.ReadUInt16();
                                    boneChannel.RotationX.Keyframes.Add(ent);
                                }
                                else
                                {
                                    if (frameCnt > 255)
                                    {
                                        ent.FrameID_16bits = stream.ReadUInt16();
                                    }
                                    else
                                    {
                                        ent.FrameID_8bits = (byte)stream.ReadByte();
                                    }
                                    ent.Value = stream.ReadUInt16();
                                    boneChannel.RotationX.Keyframes.Add(ent);
                                }
                            }
                        }
                    }

                    if (flg.RotationY)
                    {
                        ushort keyframeCnt = 0;
                        boneChannel.RotationY                 = new AnimationData();
                        boneChannel.RotationY.Header          = new ChannelHeader();
                        boneChannel.RotationY.Header.MaxValue = stream.ReadFloat();
                        boneChannel.RotationY.Header.MinValue = stream.ReadFloat();
                        if (frameCnt > 255)
                        {
                            keyframeCnt = boneChannel.RotationY.Header.KeyframeCount_16bits = stream.ReadUInt16();
                        }
                        else
                        {
                            keyframeCnt = boneChannel.RotationY.Header.KeyframeCount_8bits = (byte)stream.ReadByte();
                        }

                        if (keyframeCnt != 1)
                        {
                            boneChannel.RotationY.Keyframes = new List <KeyframeEntry>();
                            for (ushort z = 0; z < keyframeCnt; z++)
                            {
                                KeyframeEntry ent = new KeyframeEntry();
                                if (keyframeCnt == frameCnt)
                                {
                                    ent.FrameID_16bits = z;
                                    ent.Value          = stream.ReadUInt16();
                                    boneChannel.RotationY.Keyframes.Add(ent);
                                }
                                else
                                {
                                    if (frameCnt > 255)
                                    {
                                        ent.FrameID_16bits = stream.ReadUInt16();
                                    }
                                    else
                                    {
                                        ent.FrameID_8bits = (byte)stream.ReadByte();
                                    }
                                    ent.Value = stream.ReadUInt16();
                                    boneChannel.RotationY.Keyframes.Add(ent);
                                }
                            }
                        }
                    }

                    if (flg.RotationZ)
                    {
                        ushort keyframeCnt = 0;
                        boneChannel.RotationZ                 = new AnimationData();
                        boneChannel.RotationZ.Header          = new ChannelHeader();
                        boneChannel.RotationZ.Header.MaxValue = stream.ReadFloat();
                        boneChannel.RotationZ.Header.MinValue = stream.ReadFloat();
                        if (frameCnt > 255)
                        {
                            keyframeCnt = boneChannel.RotationZ.Header.KeyframeCount_16bits = stream.ReadUInt16();
                        }
                        else
                        {
                            keyframeCnt = boneChannel.RotationZ.Header.KeyframeCount_8bits = (byte)stream.ReadByte();
                        }

                        if (keyframeCnt != 1)
                        {
                            boneChannel.RotationZ.Keyframes = new List <KeyframeEntry>();
                            for (ushort z = 0; z < keyframeCnt; z++)
                            {
                                KeyframeEntry ent = new KeyframeEntry();
                                if (keyframeCnt == frameCnt)
                                {
                                    ent.FrameID_16bits = z;
                                    ent.Value          = stream.ReadUInt16();
                                    boneChannel.RotationZ.Keyframes.Add(ent);
                                }
                                else
                                {
                                    if (frameCnt > 255)
                                    {
                                        ent.FrameID_16bits = stream.ReadUInt16();
                                    }
                                    else
                                    {
                                        ent.FrameID_8bits = (byte)stream.ReadByte();
                                    }
                                    ent.Value = stream.ReadUInt16();
                                    boneChannel.RotationZ.Keyframes.Add(ent);
                                }
                            }
                        }
                    }

                    /** SCALE **/

                    if (flg.ScaleX)
                    {
                        ushort keyframeCnt = 0;
                        boneChannel.ScaleX                 = new AnimationData();
                        boneChannel.ScaleX.Header          = new ChannelHeader();
                        boneChannel.ScaleX.Header.MaxValue = stream.ReadFloat();
                        boneChannel.ScaleX.Header.MinValue = stream.ReadFloat();
                        if (frameCnt > 255)
                        {
                            keyframeCnt = boneChannel.ScaleX.Header.KeyframeCount_16bits = stream.ReadUInt16();
                        }
                        else
                        {
                            keyframeCnt = boneChannel.ScaleX.Header.KeyframeCount_8bits = (byte)stream.ReadByte();
                        }

                        if (keyframeCnt != 1)
                        {
                            boneChannel.ScaleX.Keyframes = new List <KeyframeEntry>();
                            for (ushort z = 0; z < keyframeCnt; z++)
                            {
                                KeyframeEntry ent = new KeyframeEntry();
                                if (keyframeCnt == frameCnt)
                                {
                                    ent.FrameID_16bits = z;
                                    ent.Value          = stream.ReadUInt16();
                                    boneChannel.ScaleX.Keyframes.Add(ent);
                                }
                                else
                                {
                                    if (frameCnt > 255)
                                    {
                                        ent.FrameID_16bits = stream.ReadUInt16();
                                    }
                                    else
                                    {
                                        ent.FrameID_8bits = (byte)stream.ReadByte();
                                    }
                                    ent.Value = stream.ReadUInt16();
                                    boneChannel.ScaleX.Keyframes.Add(ent);
                                }
                            }
                        }
                    }

                    if (flg.ScaleY)
                    {
                        ushort keyframeCnt = 0;
                        boneChannel.ScaleY                 = new AnimationData();
                        boneChannel.ScaleY.Header          = new ChannelHeader();
                        boneChannel.ScaleY.Header.MaxValue = stream.ReadFloat();
                        boneChannel.ScaleY.Header.MinValue = stream.ReadFloat();
                        if (frameCnt > 255)
                        {
                            keyframeCnt = boneChannel.ScaleY.Header.KeyframeCount_16bits = stream.ReadUInt16();
                        }
                        else
                        {
                            keyframeCnt = boneChannel.ScaleY.Header.KeyframeCount_8bits = (byte)stream.ReadByte();
                        }

                        if (keyframeCnt != 1)
                        {
                            boneChannel.ScaleY.Keyframes = new List <KeyframeEntry>();
                            for (ushort z = 0; z < keyframeCnt; z++)
                            {
                                KeyframeEntry ent = new KeyframeEntry();
                                if (keyframeCnt == frameCnt)
                                {
                                    ent.FrameID_16bits = z;
                                    ent.Value          = stream.ReadUInt16();
                                    boneChannel.ScaleY.Keyframes.Add(ent);
                                }
                                else
                                {
                                    if (frameCnt > 255)
                                    {
                                        ent.FrameID_16bits = stream.ReadUInt16();
                                    }
                                    else
                                    {
                                        ent.FrameID_8bits = (byte)stream.ReadByte();
                                    }
                                    ent.Value = stream.ReadUInt16();
                                    boneChannel.ScaleY.Keyframes.Add(ent);
                                }
                            }
                        }
                    }

                    if (flg.ScaleZ)
                    {
                        ushort keyframeCnt = 0;
                        boneChannel.ScaleZ                 = new AnimationData();
                        boneChannel.ScaleZ.Header          = new ChannelHeader();
                        boneChannel.ScaleZ.Header.MaxValue = stream.ReadFloat();
                        boneChannel.ScaleZ.Header.MinValue = stream.ReadFloat();
                        if (frameCnt > 255)
                        {
                            keyframeCnt = boneChannel.ScaleZ.Header.KeyframeCount_16bits = stream.ReadUInt16();
                        }
                        else
                        {
                            keyframeCnt = boneChannel.ScaleZ.Header.KeyframeCount_8bits = (byte)stream.ReadByte();
                        }

                        if (keyframeCnt != 1)
                        {
                            boneChannel.ScaleZ.Keyframes = new List <KeyframeEntry>();
                            for (ushort z = 0; z < keyframeCnt; z++)
                            {
                                KeyframeEntry ent = new KeyframeEntry();
                                if (keyframeCnt == frameCnt)
                                {
                                    ent.FrameID_16bits = z;
                                    ent.Value          = stream.ReadUInt16();
                                    boneChannel.ScaleZ.Keyframes.Add(ent);
                                }
                                else
                                {
                                    if (frameCnt > 255)
                                    {
                                        ent.FrameID_16bits = stream.ReadUInt16();
                                    }
                                    else
                                    {
                                        ent.FrameID_8bits = (byte)stream.ReadByte();
                                    }
                                    ent.Value = stream.ReadUInt16();
                                    boneChannel.ScaleZ.Keyframes.Add(ent);
                                }
                            }
                        }
                    }

                    pam.animList[j].BoneChannels.Add(boneChannel);
                }
            }

            return(pam);
        }
Esempio n. 7
0
 public void NavigateTo(string pageKey, object parameter, List <NavigationFlag> navigationFlags, AnimationFlag animationFlags = AnimationFlag.Forward)
 {
     NavigateTo(pageKey, parameter);
 }
Esempio n. 8
0
        public void NavigateTo(string pageKey, object parameter, List <NavigationFlag> navigationFlags, AnimationFlag animationFlag = AnimationFlag.Forward)
        {
            Intent intent = null;

            lock (_pagesByKey)
            {
                if (!_pagesByKey.ContainsKey(pageKey))
                {
                    throw new ArgumentException(
                              string.Format(
                                  "No such page: {0}. Did you forget to call NavigationService.Configure?",
                                  pageKey),
                              "pageKey");
                }

                intent = new Intent(_activity, _pagesByKey[pageKey]);
            }

            if (navigationFlags != null && navigationFlags.Any())
            {
                foreach (var flag in navigationFlags)
                {
                    switch (flag)
                    {
                    case NavigationFlag.ClearStack:
                        intent.AddFlags(ActivityFlags.ClearTop);
                        break;

                    case NavigationFlag.SingleInstance:
                        intent.AddFlags(ActivityFlags.SingleTop);
                        break;

                    case NavigationFlag.ClearTask:
                        intent.AddFlags(ActivityFlags.ClearTask);
                        break;

                    case NavigationFlag.NewTask:
                        intent.AddFlags(ActivityFlags.NewTask);
                        break;
                    }
                }
            }

            if (parameter != null)
            {
                lock (_parametersByKey)
                {
                    var guid = Guid.NewGuid().ToString();
                    _parametersByKey.Add(guid, parameter);
                    intent.PutExtra(ParameterKeyName, guid);
                }
            }

            StartIntentAndAnimate(intent, pageKey, animationFlag);
        }
Esempio n. 9
0
 public bool HasFlags(AnimationFlag flag)
 {
     return(Flags.Contains(flag));
 }
Esempio n. 10
0
        /// <summary>
        /// Helper method to read all animations from a Puppet file and return a list of them
        /// </summary>
        /// <param name="sectionReader">BinaryReader instance containing the Animation section data</param>
        /// <param name="version">Version of the Puppet file</param>
        /// <returns>List of animations from the Puppet file</returns>
        public static List <Animation> ReadAllAnimations(BinaryReader sectionReader, Version version)
        {
            List <Animation> Animations = new List <Animation>();

            while (sectionReader.BaseStream.Position < sectionReader.BaseStream.Length)
            {
                Animation animation = new Animation();

                animation.BoneID = sectionReader.ReadByte();

                // Once the root bone is reached (ID 255) stop reading animations
                if (animation.BoneID == 255)
                {
                    break;
                }

                // Bone ID 254 have two additional bytes after the ID (FE 00) to skip over
                if (animation.BoneID == 254)
                {
                    animation.SubID    = sectionReader.ReadByte();
                    animation.SubSubID = sectionReader.ReadByte();
                }

                uint positionDataCount = sectionReader.ReadUInt32();
                animation.PositionData = new PositionData[positionDataCount];

                for (int i = 0; i < positionDataCount; i++)
                {
                    PositionData positionData = new PositionData {
                        Time = sectionReader.ReadSingle(),
                        X    = sectionReader.ReadSingle(),
                        Y    = sectionReader.ReadSingle(),
                        Z    = sectionReader.ReadSingle(),
                    };

                    animation.PositionData[i] = positionData;
                }

                uint rotationDataCount = sectionReader.ReadUInt32();
                animation.RotationData = new RotationData[rotationDataCount];

                if (version.Minor == 0)
                {
                    // TODO: Check if this is an unknown value or just padding
                    animation.Unknown1 = sectionReader.ReadUInt32();
                }

                for (int i = 0; i < rotationDataCount; i++)
                {
                    RotationData rotationData;

                    if (version.Minor >= 2)
                    {
                        rotationData = new RotationData {
                            Time = sectionReader.ReadSingle(),
                            X    = sectionReader.ReadSingle(),
                            Y    = sectionReader.ReadSingle(),
                            Z    = sectionReader.ReadSingle(),
                            W    = sectionReader.ReadSingle()
                        };
                    }
                    else
                    {
                        rotationData = new RotationData {
                            X    = sectionReader.ReadSingle(),
                            Y    = sectionReader.ReadSingle(),
                            Z    = sectionReader.ReadSingle(),
                            W    = sectionReader.ReadSingle(),
                            Time = sectionReader.ReadSingle()
                        };
                    }

                    animation.RotationData[i] = rotationData;
                }

                if (version.Minor >= 2)
                {
                    uint scalingDataCount = sectionReader.ReadUInt32();
                    animation.ScalingData = new ScalingData[scalingDataCount];

                    for (int i = 0; i < scalingDataCount; i++)
                    {
                        ScalingData scalingData = new ScalingData {
                            Time = sectionReader.ReadSingle(),
                            X    = sectionReader.ReadSingle(),
                            Y    = sectionReader.ReadSingle(),
                            Z    = sectionReader.ReadSingle()
                        };

                        animation.ScalingData[i] = scalingData;
                    }
                }

                if (version.Minor >= 3)
                {
                    uint animationFlagCount = sectionReader.ReadUInt32();
                    animation.AnimationFlags = new AnimationFlag[animationFlagCount];

                    for (int i = 0; i < animationFlagCount; i++)
                    {
                        AnimationFlag animationFlag = new AnimationFlag {
                            Time  = sectionReader.ReadSingle(),
                            Value = sectionReader.ReadSingle()
                        };

                        animation.AnimationFlags[i] = animationFlag;
                    }
                }

                Animations.Add(animation);
            }

            return(Animations);
        }