Advertisement
xraven13

a

Sep 23rd, 2013
52
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.04 KB | None | 0 0
  1. private var attackState:Int = 0;
  2.  
  3. private var STATE_ATTACK_IDLE:Int = 0;
  4. private var STATE_ATTACK_LEFT_SWING:Int = 1;
  5. private var STATE_ATTACK_LEFT_SWING_FINISHED_WAITING:Int = 2;
  6. private var STATE_ATTACK_LEFT_SWING_RETURNING:Int = 3;
  7. private var STATE_ATTACK_LEFT_SWING_TO_RIGHT_SWING:Int = 4;
  8.  
  9. private var STATE_ATTACK_RIGHT_SWING:Int = 5;
  10. private var STATE_ATTACK_RIGHT_SWING_FINISHED_WAITING:Int = 6;
  11. private var STATE_ATTACK_RIGHT_SWING_RETURNING:Int = 7;
  12. private var STATE_ATTACK_RIGHT_SWING_TO_LEFT_SWING:Int = 8;
  13.  
  14. private var STATE_FROM_BLOCK_TO_ATTACK:Int = 9;
  15. private var STATE_FROM_IDLE_TO_LEFT:Int = 10;
  16. private var ENTER_STATE_ATTACK_LEFT_SWING:Int = 11;
  17. private var ENTER_STATE_ATTACK_RIGHT_SWING:Int = 12;
  18.  
  19. private var reduceStaminaFromAttack:Bool = false;
  20. private var dontUpdateAnimNextFrame:Bool = false;
  21.  
  22.  
  23. private function animationStart( animState:FlxSpAnimation, animName:String, timer:Float = 0, resetTimerOfCurrentAnimation:Bool = true ):Animation
  24. {
  25. var animation:Animation = spine.animation( animState );
  26. if ( animation != null && resetTimerOfCurrentAnimation ) animation.timer = 0;
  27. animState.setAnimationByName( animName, false );
  28. animation = null;
  29. animation = spine.animation( animState );
  30. animation.timer = timer;
  31. return animation;
  32. }
  33.  
  34. private function animationUpdate( animState:FlxSpAnimation, updateSpeed:Float = 1, updateEndPercentage:Float = -1 ):Bool
  35. {
  36. var animation:Animation = spine.animation( animState );
  37. var duration:Float = animation.getDuration();
  38. if ( updateEndPercentage != -1 ) duration *= updateEndPercentage ;
  39.  
  40.  
  41. animation.timer += updateSpeed ;
  42. if ( animation.timer >= duration )
  43. {
  44. animation.timer = duration;
  45. animation.apply( skeleton, animation.timer, false );
  46.  
  47. return true;
  48. }
  49. else
  50. {
  51. return false;
  52. }
  53. }
  54.  
  55.  
  56. public var lastAttackTimePassed:Float = 0;
  57.  
  58. private function attack():Void
  59. {
  60. isAttacking = false;
  61.  
  62. if ( attackState == STATE_ATTACK_IDLE )
  63. {
  64. lastAttackTimePassed += FlxG.elapsed;
  65. }
  66. else
  67. {
  68. lastAttackTimePassed = 0;
  69. }
  70.  
  71. var animation:Animation = spine.animation( attackAnimState );
  72.  
  73. var timeElapsed:Float = this.timeElapsed;
  74. if ( FlxG.mouse.pressedRight && attackState != STATE_ATTACK_LEFT_SWING && attackState != STATE_ATTACK_RIGHT_SWING )
  75. {
  76. timeElapsed *= 4;
  77. }
  78. //logs([ spine.getCompletePercentage( attackAnimState ) ] );
  79. if ( attackState == STATE_ATTACK_IDLE )
  80. {
  81. if ( checkCanAttack( true ) )
  82. {
  83. if ( isBlocking == false )
  84. {
  85.  
  86. reduceStamina( ATTACK_STAMINA_COST );
  87. animation = animationStart( attackAnimState, "AttackNarrow01Start", 0 );
  88. attackState = STATE_FROM_IDLE_TO_LEFT;
  89. causedDamage = isAttacking = false;
  90. }
  91. else
  92. {
  93. attackState = STATE_FROM_BLOCK_TO_ATTACK;
  94. }
  95.  
  96. }
  97. }
  98. else if ( attackState == STATE_FROM_IDLE_TO_LEFT )
  99. {
  100. if ( animationUpdate( attackAnimState, 1 * timeElapsed ) )
  101. {
  102. attackState = ENTER_STATE_ATTACK_LEFT_SWING;
  103. }
  104. }
  105. else if ( attackState == STATE_FROM_BLOCK_TO_ATTACK )
  106. {
  107. if ( isBlocking == false )
  108. {
  109. reduceStamina( ATTACK_STAMINA_COST );
  110. attackState = ENTER_STATE_ATTACK_LEFT_SWING;
  111. }
  112. }
  113. else if ( attackState == ENTER_STATE_ATTACK_LEFT_SWING )
  114. {
  115. animation = animationStart( attackAnimState, "AttackNarrow01", 0 );
  116. attackState = STATE_ATTACK_LEFT_SWING;
  117. causedDamage = isAttacking = false;
  118. }
  119. else if ( attackState == STATE_ATTACK_LEFT_SWING )
  120. {
  121. if ( nextAttackState == false && reduceStaminaFromAttack )
  122. {
  123. reduceStaminaFromAttack = false;
  124. reduceStamina( ATTACK_STAMINA_COST );
  125. }
  126.  
  127. if ( spine.getTime( attackAnimState ) > 0.2 ) isAttacking = true;
  128.  
  129. if ( checkCanAttack() && nextAttackState == false )
  130. {
  131. reduceStaminaFromAttack = true;
  132. nextAttackState = true;
  133. }
  134.  
  135. if ( animationUpdate( attackAnimState, 1.1 * timeElapsed ) )
  136. {
  137. if ( nextAttackState )
  138. {
  139. attackState = ENTER_STATE_ATTACK_RIGHT_SWING;
  140. nextAttackState = false;
  141. }
  142. else
  143. {
  144. attackState = STATE_ATTACK_LEFT_SWING_FINISHED_WAITING;
  145. }
  146. }
  147. }
  148. else if ( attackState == ENTER_STATE_ATTACK_RIGHT_SWING )
  149. {
  150. causedDamage = isAttacking = false;
  151. attackState = STATE_ATTACK_RIGHT_SWING;
  152. animation = animationStart( attackAnimState, "AttackNarrow02", 0 );
  153. }
  154. else if ( attackState == STATE_ATTACK_LEFT_SWING_FINISHED_WAITING )
  155. {
  156. attackWaitingTimer += timeElapsed;
  157. if ( checkCanAttack() )
  158. {
  159. reduceStaminaFromAttack = true;
  160. attackState = ENTER_STATE_ATTACK_RIGHT_SWING;
  161. }
  162. else if ( attackWaitingTimer > 0.1 )
  163. {
  164. attackWaitingTimer = 0;
  165. attackState = STATE_ATTACK_LEFT_SWING_RETURNING;
  166. animation = animationStart( attackAnimState, "AttackNarrow01Return", 0.1 );
  167. }
  168.  
  169. }
  170. else if ( attackState == STATE_ATTACK_LEFT_SWING_RETURNING )
  171. {
  172. if ( checkCanAttack() || spine.getCompletePercentage( attackAnimState ) > 0.4 && checkCanAttack( true ) )
  173. {
  174. reduceStaminaFromAttack = true;
  175. attackState = STATE_ATTACK_LEFT_SWING_TO_RIGHT_SWING;
  176. }
  177.  
  178. if( animationUpdate( attackAnimState, 0.5 * timeElapsed ) )
  179. {
  180. attackState = STATE_ATTACK_IDLE;
  181. animation = animationStart( attackAnimState, "HeroIdle01", 0 );
  182. }
  183. }
  184. else if ( attackState == STATE_ATTACK_LEFT_SWING_TO_RIGHT_SWING )
  185. {
  186. animation.timer -= 2 * timeElapsed;
  187. if ( animation.timer <= 0.1 )
  188. {
  189. animation.timer = 0.1;
  190. animation.apply( skeleton, animation.timer, false );
  191. dontUpdateAnimNextFrame = true;
  192. attackState = ENTER_STATE_ATTACK_RIGHT_SWING;
  193. }
  194. }
  195. else if ( attackState == STATE_ATTACK_RIGHT_SWING )
  196. {
  197. if ( nextAttackState == false && reduceStaminaFromAttack )
  198. {
  199. reduceStaminaFromAttack = false;
  200. reduceStamina( ATTACK_STAMINA_COST );
  201. }
  202. if ( spine.getTime( attackAnimState ) > 0.2 ) isAttacking = true;
  203. if ( checkCanAttack() && nextAttackState == false )
  204. {
  205. reduceStaminaFromAttack = true;
  206. nextAttackState = true;
  207. }
  208.  
  209. if ( animationUpdate( attackAnimState, 1.1 * timeElapsed, 0.99 ) )
  210. {
  211.  
  212. if ( nextAttackState )
  213. {
  214. attackState = ENTER_STATE_ATTACK_LEFT_SWING;
  215. nextAttackState = false;
  216. }
  217. else
  218. {
  219. attackWaitingTimer = 0;
  220. attackState = STATE_ATTACK_RIGHT_SWING_FINISHED_WAITING;
  221. }
  222. }
  223.  
  224. }
  225. else if ( attackState == STATE_ATTACK_RIGHT_SWING_FINISHED_WAITING )
  226. {
  227. attackWaitingTimer += timeElapsed;
  228. if ( checkCanAttack() )
  229. {
  230. reduceStaminaFromAttack = true;
  231. attackState = ENTER_STATE_ATTACK_LEFT_SWING;
  232. }
  233. else if ( attackWaitingTimer > 0.1 )
  234. {
  235. attackWaitingTimer = 0;
  236. attackState = STATE_ATTACK_RIGHT_SWING_RETURNING;
  237. animation = animationStart( attackAnimState, "AttackNarrow02Return", 0 );
  238. }
  239.  
  240. }
  241. else if ( attackState == STATE_ATTACK_RIGHT_SWING_RETURNING )
  242. {
  243. if ( checkCanAttack() || spine.getCompletePercentage( attackAnimState ) > 0.33 && checkCanAttack( true ) )
  244. {
  245. reduceStaminaFromAttack = true;
  246. attackState = STATE_ATTACK_RIGHT_SWING_TO_LEFT_SWING;
  247. }
  248.  
  249. if ( animationUpdate( attackAnimState, 0.5 * timeElapsed ) )
  250. {
  251. attackState = STATE_ATTACK_IDLE;
  252. animation = animationStart( attackAnimState, "HeroIdle01", 0);
  253. }
  254.  
  255. }
  256. else if ( attackState == STATE_ATTACK_RIGHT_SWING_TO_LEFT_SWING )
  257. {
  258. animation.timer -= 2 * timeElapsed;
  259. if ( animation.timer <= 0 )
  260. {
  261. attackState = ENTER_STATE_ATTACK_LEFT_SWING;
  262. }
  263. }
  264.  
  265.  
  266.  
  267. if ( dontUpdateAnimNextFrame == false )
  268. {
  269. animation.apply( skeleton, animation.timer, false );
  270. }
  271. dontUpdateAnimNextFrame = false;
  272.  
  273. if ( isAttacking )
  274. {
  275. checkOverlapWithEnemies();
  276. }
  277.  
  278.  
  279. }
  280.  
  281. private var attackWaitingTimer:Float = 0;
  282. private var nextAttackState:Bool = false;
  283.  
  284. private function checkCanAttack( free:Bool = false ):Bool
  285. {
  286. return ( FlxG.mouse.justPressed && ( free || stamina >= ATTACK_STAMINA_COST ) );
  287. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement