#region File Description //----------------------------------------------------------------------------- // AnimationWriter.cs // // Microsoft XNA Community Game Platform // Copyright (C) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- #endregion #region Using Statements using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler; using RobotGameData.GameObject; #endregion namespace AnimationPipeline { public class WriteContentData { AnimationSequence data = null; public AnimationSequence Data { get { return data; } } public WriteContentData() { this.data = new AnimationSequence(); } public WriteContentData(AnimationSequence data) { this.data = data; } } /// /// Content Pipeline class for saving AnimationSequence data into XNB format. /// [ContentTypeWriter] public class AnimationWriter : ContentTypeWriter { ContentWriter output = null; protected override void Write(ContentWriter output, WriteContentData value) { this.output = output; WriteAnimationSequence(value.Data); } public override string GetRuntimeType(TargetPlatform targetPlatform) { return typeof(AnimationSequence).AssemblyQualifiedName; } public override string GetRuntimeReader(TargetPlatform targetPlatform) { return "RobotGameData.GameObject.AnimationReader, " + "RobotGameData, Version=1.0.0.0, Culture=neutral"; } private void WriteAnimationSequence(AnimationSequence value) { output.Write(value.KeyFrameSequenceCount); output.Write(value.Duration); for (int i = 0; i < value.KeyFrameSequences.Count; i++) { WriteKeyFrameSequence(value.KeyFrameSequences[i]); } } private void WriteKeyFrameSequence(KeyFrameSequence value) { output.Write(value.BoneName); output.Write(value.KeyCount); output.Write(value.Duration); output.Write(value.KeyInterval); output.Write(value.HasTranslation); output.Write(value.HasRotation); output.Write(value.HasScale); output.Write(value.HasTime); output.Write(value.FixedTranslation); output.Write(value.FixedRotation); output.Write(value.FixedScale); // write position values. output.Write(value.Translation.Count); for (int i = 0; i < value.Translation.Count; i++) output.Write(value.Translation[i]); // write rotation values. output.Write(value.Rotation.Count); for (int i = 0; i < value.Rotation.Count; i++) output.Write(value.Rotation[i]); // write scale values. output.Write(value.Scale.Count); for (int i = 0; i < value.Scale.Count; i++) output.Write(value.Scale[i]); // write time values. output.Write(value.Time.Count); for (int i = 0; i < value.Time.Count; i++) output.Write(value.Time[i]); } } }