private static void WriteAnimationOptions(XAnimation animation, XofFileSaveData saveData)
        {
            byte[] data;

            using (var ms = new MemoryStream())
                using (var writer = new BinaryWriter(ms))
                {
                    writer.Write(animation.OpenClosedOption);
                    writer.Write(animation.PositionQualityOption);

                    data = ms.ToArray();
                }

            using (saveData.AddData(XofFileDefaultTemplates.AnimationOptionsId, null, null, data))
            {
            }
        }
        private static void WriteAnimation(XAnimation animation, XofFileSaveData saveData)
        {
            using (var child = saveData.AddData(XofFileDefaultTemplates.AnimationId, animation.Name, null, null))
            {
                if (!string.IsNullOrEmpty(animation.FrameReference))
                {
                    // TODO: XofFileDefaultTemplates.FrameId
                    child.AddDataReference(animation.FrameReference, null);
                }

                foreach (var animationKey in animation.Keys)
                {
                    WriteAnimationKey(animationKey, child);
                }

                WriteAnimationOptions(animation, child);
            }
        }
예제 #3
0
        private static void ReadAnimationOptions(XAnimation animation, XofFileEnumData enumData)
        {
            byte[] data = enumData.GetData();

            using (var ms = new MemoryStream(data, false))
                using (var reader = new BinaryReader(ms))
                {
                    animation.OpenClosedOption      = reader.ReadInt32();
                    animation.PositionQualityOption = reader.ReadInt32();

                    if (ms.Position != ms.Length)
                    {
                        throw new InvalidDataException();
                    }
                }

            if (enumData.GetChildrenCount() != 0)
            {
                throw new InvalidDataException();
            }
        }
예제 #4
0
        private static XAnimation ReadAnimation(XofFileEnumData enumData)
        {
            var animaton = new XAnimation
            {
                Name = enumData.GetName()
            };

            byte[] data = enumData.GetData();

            if (data.Length != 0)
            {
                throw new InvalidDataException();
            }

            bool frameRead            = false;
            bool animationOptionsRead = false;

            int childrenCount = enumData.GetChildrenCount();

            for (int childIndex = 0; childIndex < childrenCount; childIndex++)
            {
                using (var child = enumData.GetChild(childIndex))
                {
                    Guid type = child.GetTemplateType();

                    if (type == XofFileDefaultTemplates.FrameId)
                    {
                        if (frameRead)
                        {
                            throw new InvalidDataException();
                        }

                        if (!child.IsReference())
                        {
                            throw new InvalidDataException();
                        }

                        animaton.FrameReference = child.GetName();
                        frameRead = true;
                    }
                    else if (type == XofFileDefaultTemplates.AnimationKeyId)
                    {
                        animaton.Keys.Add(ReadAnimationKey(child));
                    }
                    else if (type == XofFileDefaultTemplates.AnimationOptionsId)
                    {
                        if (animationOptionsRead)
                        {
                            throw new InvalidDataException();
                        }

                        ReadAnimationOptions(animaton, child);
                        animationOptionsRead = true;
                    }
                    else
                    {
                        throw new InvalidDataException();
                    }
                }
            }

            return(animaton);
        }