AnimationManager.cs 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. using System;
  2. using System.Linq;
  3. using Assets.HeroEditor4D.Common.Scripts.Common.Springs;
  4. using Assets.HeroEditor4D.Common.Scripts.Enums;
  5. using UnityEngine;
  6. namespace Assets.HeroEditor4D.Common.Scripts.CharacterScripts
  7. {
  8. /// <summary>
  9. /// Used to play animations.
  10. /// </summary>
  11. public class AnimationManager : MonoBehaviour
  12. {
  13. public Character4D Character;
  14. public Animator Animator;
  15. public bool IsAction
  16. {
  17. get => Animator.GetBool("Action");
  18. set => Animator.SetBool("Action", value);
  19. }
  20. /// <summary>
  21. /// Set animation parameter State that controls transition.
  22. /// </summary>
  23. public void SetState(CharacterState state)
  24. {
  25. Animator.SetInteger("State", (int) state);
  26. }
  27. /// <summary>
  28. /// Play Attack animation according to selected weapon.
  29. /// </summary>
  30. public void Attack()
  31. {
  32. switch (Character.WeaponType)
  33. {
  34. case WeaponType.Melee1H:
  35. case WeaponType.Melee2H:
  36. Slash1H();
  37. break;
  38. case WeaponType.Bow:
  39. ShotBow();
  40. break;
  41. default:
  42. //throw new NotImplementedException("This feature may be implemented in next updates.");
  43. Slash1H();
  44. break;
  45. }
  46. }
  47. /// <summary>
  48. /// Play Slash1H animation.
  49. /// </summary>
  50. public void Slash1H()
  51. {
  52. Animator.SetTrigger("Slash1H");
  53. IsAction = true;
  54. }
  55. /// <summary>
  56. /// Play Slash2H animation.
  57. /// </summary>
  58. public void Slash2H()
  59. {
  60. Animator.SetTrigger("Slash2H");
  61. IsAction = true;
  62. }
  63. public void Slash(bool twoHanded)
  64. {
  65. Animator.SetTrigger(twoHanded ? "Slash2H" : "Slash1H");
  66. IsAction = true;
  67. }
  68. /// <summary>
  69. /// Play Jab animation.
  70. /// </summary>
  71. public void Jab()
  72. {
  73. Animator.SetTrigger("Jab");
  74. IsAction = true;
  75. }
  76. /// <summary>
  77. /// Play Slash1H animation.
  78. /// </summary>
  79. public void HeavySlash1H()
  80. {
  81. Animator.SetTrigger("HeavySlash1H");
  82. IsAction = true;
  83. }
  84. /// <summary>
  85. /// Play PowerStab animation.
  86. /// </summary>
  87. public void FastStab()
  88. {
  89. Animator.SetTrigger("FastStab");
  90. IsAction = true;
  91. }
  92. /// <summary>
  93. /// Play Shot animation (bow).
  94. /// </summary>
  95. public void ShotBow()
  96. {
  97. Animator.SetTrigger("ShotBow");
  98. IsAction = true;
  99. }
  100. /// <summary>
  101. /// Play Death animation.
  102. /// </summary>
  103. public void Die()
  104. {
  105. SetState(CharacterState.Death);
  106. }
  107. /// <summary>
  108. /// Play Hit animation. This will just scale character up and down.
  109. /// Hit will not break currently playing animation, for example you can Hit character while it's playing Attack animation.
  110. /// </summary>
  111. public void Hit()
  112. {
  113. Animator.SetTrigger("Hit");
  114. }
  115. public void ShieldBlock()
  116. {
  117. SetState(CharacterState.ShieldBlock);
  118. }
  119. public void WeaponBlock()
  120. {
  121. SetState(CharacterState.WeaponBlock);
  122. }
  123. public void Evade()
  124. {
  125. Animator.SetTrigger("Evade");
  126. }
  127. public void SetTwoHanded(bool twoHanded)
  128. {
  129. Animator.SetBool("TwoHanded", twoHanded);
  130. }
  131. public void SetWeaponType(WeaponType weaponType)
  132. {
  133. Animator.SetInteger("WeaponType", (int) weaponType);
  134. }
  135. public void Fire()
  136. {
  137. Animator.SetTrigger("Fire");
  138. IsAction = true;
  139. }
  140. public void SecondaryShot()
  141. {
  142. Animator.SetTrigger("SecondaryShot");
  143. IsAction = true;
  144. }
  145. public void CrossbowShot()
  146. {
  147. Animator.SetTrigger("Fire");
  148. IsAction = true;
  149. if (Character.Parts[0].CompositeWeapon != null)
  150. {
  151. var loaded = Character.Front.CompositeWeapon.Single(i => i.name == "Side");
  152. var empty = Character.Front.CompositeWeapon.Single(i => i.name == "SideEmpty");
  153. foreach (var part in Character.Parts)
  154. {
  155. part.PrimaryWeaponRenderer.sprite = part.PrimaryWeaponRenderer.sprite == loaded ? empty : loaded;
  156. }
  157. }
  158. }
  159. /// <summary>
  160. /// Alternative way to Hit character (with a script).
  161. /// </summary>
  162. public void Spring()
  163. {
  164. ScaleSpring.Begin(this, 1f, 1.1f, 40, 2);
  165. }
  166. }
  167. }