AnimationWriter.cs 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. #region File Description
  2. //-----------------------------------------------------------------------------
  3. // AnimationWriter.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 Microsoft.Xna.Framework;
  11. using Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler;
  12. using RobotGameData.GameObject;
  13. #endregion
  14. namespace AnimationPipeline
  15. {
  16. public class WriteContentData
  17. {
  18. AnimationSequence data = null;
  19. public AnimationSequence Data
  20. {
  21. get { return data; }
  22. }
  23. public WriteContentData()
  24. {
  25. this.data = new AnimationSequence();
  26. }
  27. public WriteContentData(AnimationSequence data)
  28. {
  29. this.data = data;
  30. }
  31. }
  32. /// <summary>
  33. /// Content Pipeline class for saving AnimationSequence data into XNB format.
  34. /// </summary>
  35. [ContentTypeWriter]
  36. public class AnimationWriter : ContentTypeWriter<WriteContentData>
  37. {
  38. ContentWriter output = null;
  39. protected override void Write(ContentWriter output, WriteContentData value)
  40. {
  41. this.output = output;
  42. WriteAnimationSequence(value.Data);
  43. }
  44. public override string GetRuntimeType(TargetPlatform targetPlatform)
  45. {
  46. return typeof(AnimationSequence).AssemblyQualifiedName;
  47. }
  48. public override string GetRuntimeReader(TargetPlatform targetPlatform)
  49. {
  50. return "RobotGameData.GameObject.AnimationReader, " +
  51. "RobotGameData, Version=1.0.0.0, Culture=neutral";
  52. }
  53. private void WriteAnimationSequence(AnimationSequence value)
  54. {
  55. output.Write(value.KeyFrameSequenceCount);
  56. output.Write(value.Duration);
  57. for (int i = 0; i < value.KeyFrameSequences.Count; i++)
  58. {
  59. WriteKeyFrameSequence(value.KeyFrameSequences[i]);
  60. }
  61. }
  62. private void WriteKeyFrameSequence(KeyFrameSequence value)
  63. {
  64. output.Write(value.BoneName);
  65. output.Write(value.KeyCount);
  66. output.Write(value.Duration);
  67. output.Write(value.KeyInterval);
  68. output.Write(value.HasTranslation);
  69. output.Write(value.HasRotation);
  70. output.Write(value.HasScale);
  71. output.Write(value.HasTime);
  72. output.Write(value.FixedTranslation);
  73. output.Write(value.FixedRotation);
  74. output.Write(value.FixedScale);
  75. // write position values.
  76. output.Write(value.Translation.Count);
  77. for (int i = 0; i < value.Translation.Count; i++)
  78. output.Write(value.Translation[i]);
  79. // write rotation values.
  80. output.Write(value.Rotation.Count);
  81. for (int i = 0; i < value.Rotation.Count; i++)
  82. output.Write(value.Rotation[i]);
  83. // write scale values.
  84. output.Write(value.Scale.Count);
  85. for (int i = 0; i < value.Scale.Count; i++)
  86. output.Write(value.Scale[i]);
  87. // write time values.
  88. output.Write(value.Time.Count);
  89. for (int i = 0; i < value.Time.Count; i++)
  90. output.Write(value.Time[i]);
  91. }
  92. }
  93. }