#region File Description //----------------------------------------------------------------------------- // AnimationReader.cs // // Microsoft XNA Community Game Platform // Copyright (C) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- #endregion #region Using Statements using System; using System.Collections.Generic; using System.Text; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Content; #endregion namespace RobotGameData.GameObject { /// /// Content Pipeline class for loading AnimationSequence data from XNB format. /// public class AnimationReader : ContentTypeReader { ContentReader input = null; protected override AnimationSequence Read(ContentReader input, AnimationSequence existingInstance) { this.input = input; return ReadAnimationSequence(); } private AnimationSequence ReadAnimationSequence() { AnimationSequence animationSequence = new AnimationSequence(); animationSequence.KeyFrameSequenceCount = input.ReadInt32(); animationSequence.Duration = input.ReadSingle(); if (animationSequence.KeyFrameSequenceCount > 0) { animationSequence.KeyFrameSequences = new List(); for (int i = 0; i < animationSequence.KeyFrameSequenceCount; i++) animationSequence.KeyFrameSequences.Add(ReadKeyFrameSequence()); } return animationSequence; } private KeyFrameSequence ReadKeyFrameSequence() { KeyFrameSequence keyFrameSequence = new KeyFrameSequence(); keyFrameSequence.BoneName = input.ReadString(); keyFrameSequence.KeyCount = input.ReadInt32(); keyFrameSequence.Duration = input.ReadSingle(); keyFrameSequence.KeyInterval = input.ReadSingle(); keyFrameSequence.HasTranslation = input.ReadBoolean(); keyFrameSequence.HasRotation = input.ReadBoolean(); keyFrameSequence.HasScale = input.ReadBoolean(); keyFrameSequence.HasTime = input.ReadBoolean(); keyFrameSequence.FixedTranslation = input.ReadBoolean(); keyFrameSequence.FixedRotation = input.ReadBoolean(); keyFrameSequence.FixedScale = input.ReadBoolean(); // read position values. int translationCount = input.ReadInt32(); if (translationCount > 0) { keyFrameSequence.Translation = new List(); for (int i = 0; i < translationCount; i++) keyFrameSequence.Translation.Add(input.ReadVector3()); } // read rotation values. int rotationCount = input.ReadInt32(); if (rotationCount > 0) { keyFrameSequence.Rotation = new List(); for (int i = 0; i < rotationCount; i++) keyFrameSequence.Rotation.Add(input.ReadQuaternion()); } // read scale values. int scaleCount = input.ReadInt32(); if (scaleCount > 0) { keyFrameSequence.Scale = new List(); for (int i = 0; i < scaleCount; i++) keyFrameSequence.Scale.Add(input.ReadVector3()); } // read time values. int timeCount = input.ReadInt32(); if (timeCount > 0) { keyFrameSequence.Time = new List(); for (int i = 0; i < timeCount; i++) keyFrameSequence.Time.Add(input.ReadSingle()); } return keyFrameSequence; } } }