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); } }
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(); } }
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); }