PageRenderTime 47ms CodeModel.GetById 20ms RepoModel.GetById 0ms app.codeStats 0ms

/School_Project_GameBuild-master/GameBuild/GameBuild/Game/AnimationComponent.cs

https://github.com/Oscillation/School_Project_GameBuild
C# | 210 lines | 149 code | 27 blank | 34 comment | 11 complexity | d81e6a476768eb7870530d69a29aa0da MD5 | raw file
  1. /*
  2. ____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
  3. / / \
  4. / / ooOOOOOOOOOOOOOOOOOOOO ssSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS ccCCCCCCCCCCCCCCCCCCCCCCCCCC iiIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII llLLLLLLLLLL llLLLLLLLLLL aaAAAAAAAAAAAAAAAA ttTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT iiIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII ooOOOOOOOOOOOOOOOOOOOO nnNNNNNNNNNN nnNNNNNNNNNN \
  5. / / ooOOOOOOOOOOOOOOOOOOOOOOOOOOOO ssSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS ccCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC iiIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII llLLLLLLLLLL llLLLLLLLLLL aaAAAAAAAAAAAAAAAA ttTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT iiIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII ooOOOOOOOOOOOOOOOOOOOOOOOOOOOO nnNNNNNNNNNNNN nnNNNNNNNNNN \
  6. | | ooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO ssSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS ccCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC iiIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII llLLLLLLLLLL llLLLLLLLLLL aaAAAAAAAAAAAAAAAAAA ttTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT iiIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII ooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO nnNNNNNNNNNNNN nnNNNNNNNNNN |
  7. | | ooOOOOOOOOOOOO ooOOOOOOOOOOOO ssSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS ccCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC iiIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII llLLLLLLLLLL llLLLLLLLLLL aaAAAAAAAAAAAAAAAAAA ttTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT iiIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII ooOOOOOOOOOOOO ooOOOOOOOOOOOO nnNNNNNNNNNNNNNN nnNNNNNNNNNN |
  8. | | ooOOOOOOOO ooOOOOOOOO ssSSSSSSSSS ccCCCCCCCC iiIIIIIIIIII llLLLLLLLLLL llLLLLLLLLLL aaAAAAAAAAAAAAAAAAAAAA ttTTTTTTTTTT iiIIIIIIIIII ooOOOOOOOO ooOOOOOOOO nnNNNNNNNNNNNNNN nnNNNNNNNNNN |
  9. | | ooOOOOOOOO ooOOOOOOOO ssSSSSSSSSS ccCCCCCCCC iiIIIIIIIIII llLLLLLLLLLL llLLLLLLLLLL aaAAAAAAAAAAAAAAAAAAAA ttTTTTTTTTTT iiIIIIIIIIII ooOOOOOOOO ooOOOOOOOO nnNNNNNNNNNNNNNNNN nnNNNNNNNNNN |
  10. | | ooOOOOOOOO ooOOOOOOOO ssSSSSSSSSS ccCCCCCCCC iiIIIIIIIIII llLLLLLLLLLL llLLLLLLLLLL aaAAAAAAAAAAaaAAAAAAAAAA ttTTTTTTTTTT iiIIIIIIIIII ooOOOOOOOO ooOOOOOOOO nnNNNNNNNNNNNNNNNN nnNNNNNNNNNN |
  11. | | ooOOOOOOOO ooOOOOOOOO ssSSSSSSSSS ccCCCCCCCC iiIIIIIIIIII llLLLLLLLLLL llLLLLLLLLLL aaAAAAAAAAAAaaAAAAAAAAAA ttTTTTTTTTTT iiIIIIIIIIII ooOOOOOOOO ooOOOOOOOO nnNNNNNNNNNNNNNNNNNN nnNNNNNNNNNN |
  12. | | ooOOOOOOOO ooOOOOOOOO ssSSSSSSSSS ccCCCCCCCC iiIIIIIIIIII llLLLLLLLLLL llLLLLLLLLLL aaAAAAAAAAAA aaAAAAAAAAAA ttTTTTTTTTTT iiIIIIIIIIII ooOOOOOOOO ooOOOOOOOO nnNNNNNNNNNNNNNNNNNN nnNNNNNNNNNN |
  13. | | ooOOOOOOOO ooOOOOOOOO ssSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS ccCCCCCCCC iiIIIIIIIIII llLLLLLLLLLL llLLLLLLLLLL aaAAAAAAAAAA aaAAAAAAAAAA ttTTTTTTTTTT iiIIIIIIIIII ooOOOOOOOO ooOOOOOOOO nnNNNNNNNNNNNNNNNNNNNNnnNNNNNNNNNN |
  14. | | ooOOOOOOOO ooOOOOOOOO ssSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS ccCCCCCCCC iiIIIIIIIIII llLLLLLLLLLL llLLLLLLLLLL aaAAAAAAAAAA aaAAAAAAAAAA ttTTTTTTTTTT iiIIIIIIIIII ooOOOOOOOO ooOOOOOOOO nnNNNNNNNNNNnnNNNNNNNNNNNNNNNNNNNN |
  15. | | ooOOOOOOOO ooOOOOOOOO ssSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS ccCCCCCCCC iiIIIIIIIIII llLLLLLLLLLL llLLLLLLLLLL aaAAAAAAAAAA aaAAAAAAAAAA ttTTTTTTTTTT iiIIIIIIIIII ooOOOOOOOO ooOOOOOOOO nnNNNNNNNNNNnnNNNNNNNNNNNNNNNNNNNN |
  16. | | ooOOOOOOOO ooOOOOOOOO ssSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS ccCCCCCCCC iiIIIIIIIIII llLLLLLLLLLL llLLLLLLLLLL aaAAAAAAAAAAAAAAAAAAAAAAAAAAAA ttTTTTTTTTTT iiIIIIIIIIII ooOOOOOOOO ooOOOOOOOO nnNNNNNNNNNN nnNNNNNNNNNNNNNNNNNN |
  17. | | ooOOOOOOOO ooOOOOOOOO ssSSSSSSSSS ccCCCCCCCC iiIIIIIIIIII llLLLLLLLLLL llLLLLLLLLLL aaAAAAAAAAAAAAAAAAAAAAAAAAAAAA ttTTTTTTTTTT iiIIIIIIIIII ooOOOOOOOO ooOOOOOOOO nnNNNNNNNNNN nnNNNNNNNNNNNNNNNNNN |
  18. | | ooOOOOOOOO ooOOOOOOOO ssSSSSSSSSS ccCCCCCCCC iiIIIIIIIIII llLLLLLLLLLL llLLLLLLLLLL aaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ttTTTTTTTTTT iiIIIIIIIIII ooOOOOOOOO ooOOOOOOOO nnNNNNNNNNNN nnNNNNNNNNNNNNNNNN |
  19. | | ooOOOOOOOO ooOOOOOOOO ssSSSSSSSSS ccCCCCCCCC iiIIIIIIIIII llLLLLLLLLLL llLLLLLLLLLL aaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ttTTTTTTTTTT iiIIIIIIIIII ooOOOOOOOO ooOOOOOOOO nnNNNNNNNNNN nnNNNNNNNNNNNNNNNN |
  20. | | ooOOOOOOOO ooOOOOOOOO ssSSSSSSSSS ccCCCCCCCC iiIIIIIIIIII llLLLLLLLLLL llLLLLLLLLLL aaAAAAAAAAAA aaAAAAAAAAAA ttTTTTTTTTTT iiIIIIIIIIII ooOOOOOOOO ooOOOOOOOO nnNNNNNNNNNN nnNNNNNNNNNNNNNN |
  21. | | ooOOOOOOOOOOOO ooOOOOOOOOOOOO ssSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS ccCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC iiIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII llLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL llLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL aaAAAAAAAAAA aaAAAAAAAAAA ttTTTTTTTTTT iiIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII ooOOOOOOOOOOOO ooOOOOOOOOOOOO nnNNNNNNNNNN nnNNNNNNNNNNNNNN |
  22. | | ooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO ssSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS ccCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC iiIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII llLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL llLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL aaAAAAAAAAAA aaAAAAAAAAAA ttTTTTTTTTTT iiIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII ooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO nnNNNNNNNNNN nnNNNNNNNNNNNN |
  23. \ \ ooOOOOOOOOOOOOOOOOOOOOOOOOOOOO ssSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS ccCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC iiIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII llLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL llLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL aaAAAAAAAAAA aaAAAAAAAAAA ttTTTTTTTTTT iiIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII ooOOOOOOOOOOOOOOOOOOOOOOOOOOOO nnNNNNNNNNNN nnNNNNNNNNNNNN /
  24. \ \ ooOOOOOOOOOOOOOOOOOOOO ssSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS ccCCCCCCCCCCCCCCCCCCCCCCCCCC iiIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII llLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL llLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL aaAAAAAAAAAA aaAAAAAAAAAA ttTTTTTTTTTT iiIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII ooOOOOOOOOOOOOOOOOOOOO nnNNNNNNNNNN nnNNNNNNNNNN /
  25. \_\___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________/
  26. */
  27. using System;
  28. using System.Collections.Generic;
  29. using System.Linq;
  30. using System.Text;
  31. using Microsoft.Xna.Framework;
  32. using Microsoft.Xna.Framework.Graphics;
  33. namespace GameBuild
  34. {
  35. public class AnimationComponent
  36. {
  37. #region Declarations
  38. public bool playing;
  39. bool loop;
  40. //bool paused; //never used, only set
  41. int spriteSheetWidth, spriteSheetHeight;
  42. int frameWidth, frameHeight;
  43. Point defaultFrame;
  44. public Point currentFrame;
  45. int maxFrameCount;
  46. float frameDelay; //milliseconds
  47. float timer;
  48. const float DEFAULT_DELAY = 50;
  49. public int MaxFrameCount
  50. {
  51. get { return maxFrameCount; }
  52. set { maxFrameCount = value; }
  53. }
  54. #endregion
  55. #region Constructors
  56. public AnimationComponent(int spriteSheetWidth, int spriteSheetHeight, int frameWidth, int frameHeight)
  57. {
  58. this.spriteSheetWidth = spriteSheetWidth;
  59. this.spriteSheetHeight = spriteSheetHeight;
  60. this.frameWidth = frameWidth;
  61. this.frameHeight = frameHeight;
  62. this.frameDelay = DEFAULT_DELAY;
  63. timer = 0;
  64. this.defaultFrame = Point.Zero;
  65. currentFrame = defaultFrame;
  66. playing = false;
  67. loop = false;
  68. //paused = false;
  69. maxFrameCount = spriteSheetWidth;
  70. }
  71. public AnimationComponent(int spriteSheetWidth, int spriteSheetHeight, int frameWidth, int frameHeight, float frameDelay, Point defaultFrame)
  72. {
  73. this.spriteSheetWidth = spriteSheetWidth;
  74. this.spriteSheetHeight = spriteSheetHeight;
  75. this.frameWidth = frameWidth;
  76. this.frameHeight = frameHeight;
  77. this.frameDelay = frameDelay;
  78. timer = 0;
  79. this.defaultFrame = defaultFrame;
  80. currentFrame = defaultFrame;
  81. playing = false;
  82. loop = false;
  83. //paused = false;
  84. maxFrameCount = spriteSheetWidth-1; //cuz the points work off of a Zero based index
  85. }
  86. #endregion
  87. private Rectangle PointToFrame(Point p)
  88. {
  89. return new Rectangle(p.X*frameWidth, p.Y*frameHeight, frameWidth, frameHeight);
  90. }
  91. public void UpdateAnimation(GameTime gameTime)
  92. {
  93. if (playing)
  94. {
  95. timer += (float)gameTime.ElapsedGameTime.TotalMilliseconds;
  96. if (timer > frameDelay)
  97. {
  98. ResetTimer();
  99. currentFrame.X++;
  100. if (currentFrame.X > maxFrameCount && loop)
  101. {
  102. currentFrame.X = 0;
  103. }
  104. else if (currentFrame.X > maxFrameCount)
  105. {
  106. StopAnimation();
  107. }
  108. }
  109. }
  110. }
  111. public bool IsAnimationPlaying(int animation)
  112. {
  113. if (currentFrame.Y == animation && playing)
  114. return true;
  115. else
  116. return false;
  117. }
  118. private void ResetTimer()
  119. {
  120. timer = 0;
  121. }
  122. public void PlayAnimation(int animation)
  123. {
  124. if (animation < spriteSheetHeight)
  125. {
  126. ResetTimer();
  127. currentFrame.Y = animation;
  128. currentFrame.X = 0;
  129. playing = true;
  130. loop = false;
  131. }
  132. else
  133. {
  134. //ExceptionAnimationOutOfBounds();
  135. }
  136. }
  137. public void LoopAnimation(int animation)
  138. {
  139. //paused = false;
  140. if (animation < spriteSheetHeight)
  141. {
  142. currentFrame.Y = animation;
  143. currentFrame.X = 0;
  144. playing = true;
  145. loop = true;
  146. }
  147. else
  148. {
  149. //ExceptionAnimationOutOfBounds();
  150. }
  151. }
  152. public void StopAnimation()
  153. {
  154. playing = false;
  155. loop = false;
  156. currentFrame = defaultFrame;
  157. ResetTimer();
  158. }
  159. public void PauseAnimation()
  160. {
  161. playing = false;
  162. //paused = true;
  163. }
  164. public void ResumeAnimation()
  165. {
  166. playing = true;
  167. //paused = false;
  168. }
  169. public void ResetAnimation()
  170. {
  171. playing = false;
  172. currentFrame.X = 0;
  173. }
  174. public Rectangle GetFrame()
  175. {
  176. return PointToFrame(currentFrame);
  177. }
  178. private void ExceptionAnimationOutOfBounds()
  179. {
  180. throw new Exception("Animation is out of bounds of the sprite sheet.");
  181. }
  182. }
  183. }