AnimationReader.cs 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. #region File Description
  2. //-----------------------------------------------------------------------------
  3. // AnimationReader.cs
  4. //
  5. // Microsoft XNA Community Game Platform
  6. // Copyright (C) Microsoft Corporation. All rights reserved.
  7. //-----------------------------------------------------------------------------
  8. #endregion
  9. #region Using Statements
  10. using System;
  11. using System.Collections.Generic;
  12. using System.Text;
  13. using Microsoft.Xna.Framework;
  14. using Microsoft.Xna.Framework.Graphics;
  15. using Microsoft.Xna.Framework.Content;
  16. #endregion
  17. namespace RobotGameData.GameObject
  18. {
  19. /// <summary>
  20. /// Content Pipeline class for loading AnimationSequence data from XNB format.
  21. /// </summary>
  22. public class AnimationReader : ContentTypeReader<AnimationSequence>
  23. {
  24. ContentReader input = null;
  25. protected override AnimationSequence Read(ContentReader input,
  26. AnimationSequence existingInstance)
  27. {
  28. this.input = input;
  29. return ReadAnimationSequence();
  30. }
  31. private AnimationSequence ReadAnimationSequence()
  32. {
  33. AnimationSequence animationSequence = new AnimationSequence();
  34. animationSequence.KeyFrameSequenceCount = input.ReadInt32();
  35. animationSequence.Duration = input.ReadSingle();
  36. if (animationSequence.KeyFrameSequenceCount > 0)
  37. {
  38. animationSequence.KeyFrameSequences = new List<KeyFrameSequence>();
  39. for (int i = 0; i < animationSequence.KeyFrameSequenceCount; i++)
  40. animationSequence.KeyFrameSequences.Add(ReadKeyFrameSequence());
  41. }
  42. return animationSequence;
  43. }
  44. private KeyFrameSequence ReadKeyFrameSequence()
  45. {
  46. KeyFrameSequence keyFrameSequence = new KeyFrameSequence();
  47. keyFrameSequence.BoneName = input.ReadString();
  48. keyFrameSequence.KeyCount = input.ReadInt32();
  49. keyFrameSequence.Duration = input.ReadSingle();
  50. keyFrameSequence.KeyInterval = input.ReadSingle();
  51. keyFrameSequence.HasTranslation = input.ReadBoolean();
  52. keyFrameSequence.HasRotation = input.ReadBoolean();
  53. keyFrameSequence.HasScale = input.ReadBoolean();
  54. keyFrameSequence.HasTime = input.ReadBoolean();
  55. keyFrameSequence.FixedTranslation = input.ReadBoolean();
  56. keyFrameSequence.FixedRotation = input.ReadBoolean();
  57. keyFrameSequence.FixedScale = input.ReadBoolean();
  58. // read position values.
  59. int translationCount = input.ReadInt32();
  60. if (translationCount > 0)
  61. {
  62. keyFrameSequence.Translation = new List<Vector3>();
  63. for (int i = 0; i < translationCount; i++)
  64. keyFrameSequence.Translation.Add(input.ReadVector3());
  65. }
  66. // read rotation values.
  67. int rotationCount = input.ReadInt32();
  68. if (rotationCount > 0)
  69. {
  70. keyFrameSequence.Rotation = new List<Quaternion>();
  71. for (int i = 0; i < rotationCount; i++)
  72. keyFrameSequence.Rotation.Add(input.ReadQuaternion());
  73. }
  74. // read scale values.
  75. int scaleCount = input.ReadInt32();
  76. if (scaleCount > 0)
  77. {
  78. keyFrameSequence.Scale = new List<Vector3>();
  79. for (int i = 0; i < scaleCount; i++)
  80. keyFrameSequence.Scale.Add(input.ReadVector3());
  81. }
  82. // read time values.
  83. int timeCount = input.ReadInt32();
  84. if (timeCount > 0)
  85. {
  86. keyFrameSequence.Time = new List<float>();
  87. for (int i = 0; i < timeCount; i++)
  88. keyFrameSequence.Time.Add(input.ReadSingle());
  89. }
  90. return keyFrameSequence;
  91. }
  92. }
  93. }