PlayerSyncLegacy.cs 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using System;
  5. public enum WeaponState
  6. {
  7. AimedIdle,
  8. AimedWalking,
  9. AimedFiring,
  10. PrepareAiming, // state for more complex bow transition where archer pulls the string and take aim
  11. Idle,
  12. IdleUnloaded, // for crossbows, after shooting
  13. IdleLow, // for spear
  14. Walking,
  15. Running,
  16. Firing,
  17. Reloading,
  18. Lowering,
  19. Raising,
  20. Swinging, // for maces, clubs
  21. Spinning, // for flail
  22. Attacking,
  23. Blocking, // for all bludgeoning weapons
  24. AttackMiss // for flail
  25. }
  26. public class PlayerSyncLegacy : MonoBehaviour {
  27. Animation myAnim = null;
  28. WeaponsBaseLegacy curWeapon = null;
  29. bool isSwitching = false;
  30. void Awake ()
  31. {
  32. instance = this;
  33. myAnim = GetComponent <Animation> ();
  34. UpdateAnimation ();
  35. }
  36. void Start ()
  37. {
  38. UpdateAnimation ();
  39. }
  40. void OnEnable ()
  41. {
  42. PlayerManager.onUpdateArmsPrefab += UpdateAnimation;
  43. }
  44. void OnDisable ()
  45. {
  46. PlayerManager.onUpdateArmsPrefab -= UpdateAnimation;
  47. }
  48. public void UpdateCurrentWeapon (WeaponsBaseLegacy _curWeapon)
  49. {
  50. this.curWeapon = _curWeapon;
  51. }
  52. public void UpdateCurrentAnimation (Animation curAnim)
  53. {
  54. this.myAnim = curAnim;
  55. }
  56. void UpdateAnimation ()
  57. {
  58. if (!curWeapon || !myAnim)
  59. return;
  60. switch (wpState)
  61. {
  62. case WeaponState.Idle:
  63. myAnim.CrossFade (curWeapon.weaponAnimations.Arms_Idle.name);
  64. break;
  65. case WeaponState.Walking:
  66. if (curWeapon.weaponAnimations.Arms_Walk)
  67. myAnim.CrossFade (curWeapon.weaponAnimations.Arms_Walk.name);
  68. break;
  69. case WeaponState.Running:
  70. if (curWeapon.weaponAnimations.Arms_Sprint)
  71. myAnim.CrossFade (curWeapon.weaponAnimations.Arms_Sprint.name);
  72. break;
  73. case WeaponState.Firing:
  74. myAnim.Play (curWeapon.weaponAnimations.Arms_Fire.name);
  75. break;
  76. case WeaponState.Reloading:
  77. if (curWeapon.weaponAnimations.Arms_Reload) {
  78. myAnim.Play (curWeapon.weaponAnimations.Arms_Reload.name);
  79. curWeapon.StartCoroutine (curWeapon.ReloadNormal ());
  80. }
  81. break;
  82. case WeaponState.Lowering:
  83. StartCoroutine (PlayDisableClip (curWeapon.weaponAnimations.Arms_Lower));
  84. break;
  85. case WeaponState.Raising:
  86. StartCoroutine (PlayRaiseClip (curWeapon.weaponAnimations.Arms_Raise));
  87. break;
  88. case WeaponState.PrepareAiming:
  89. myAnim.Play (curWeapon.weaponAnimations.Arms_IdleToADS.name);
  90. break;
  91. case WeaponState.AimedIdle:
  92. if (curWeapon.weaponAnimations.ADS_Idle)
  93. myAnim.CrossFade (curWeapon.weaponAnimations.ADS_Idle.name, 0.2f);
  94. break;
  95. case WeaponState.AimedWalking:
  96. if (curWeapon.weaponAnimations.ADS_Walk)
  97. myAnim.CrossFade (curWeapon.weaponAnimations.ADS_Walk.name, 0.2f);
  98. break;
  99. case WeaponState.AimedFiring:
  100. if (curWeapon.weaponAnimations.ADS_Fire)
  101. myAnim.Play (curWeapon.weaponAnimations.ADS_Fire.name);
  102. break;
  103. case WeaponState.Attacking:
  104. myAnim.Play (curWeapon.weaponAnimations.Arms_Attack.name);
  105. break;
  106. case WeaponState.AttackMiss:
  107. myAnim.Play (curWeapon.weaponAnimations.Arms_Miss.name);
  108. break;
  109. case WeaponState.Swinging:
  110. myAnim.Play (curWeapon.weaponAnimations.Arms_Swing.name);
  111. break;
  112. case WeaponState.Spinning:
  113. myAnim.CrossFade (curWeapon.weaponAnimations.Arms_Spin.name);
  114. break;
  115. case WeaponState.Blocking:
  116. StartCoroutine (Block ());
  117. break;
  118. case WeaponState.IdleLow:
  119. myAnim.CrossFade (curWeapon.weaponAnimations.Arms_IdleLow.name);
  120. break;
  121. default :
  122. break;
  123. }
  124. }
  125. IEnumerator Block ()
  126. {
  127. while (wpState == WeaponState.Blocking)
  128. {
  129. if (curWeapon.blockHit)
  130. {
  131. myAnim.Play (curWeapon.weaponAnimations.Arms_BlockHit.name);
  132. // myAnim.CrossFade (curWeapon.weaponAnimations.Arms_BlockHit.name);
  133. yield return StartCoroutine (WaitAnimationFinish (curWeapon.weaponAnimations.Arms_BlockHit));
  134. curWeapon.blockHit = false;
  135. }
  136. else
  137. {
  138. myAnim.CrossFade (curWeapon.weaponAnimations.Arms_BlockIdle.name);
  139. }
  140. yield return null;
  141. }
  142. yield return null;
  143. }
  144. IEnumerator PlayDisableClip (AnimationClip clip)
  145. {
  146. if (isSwitching) yield break;
  147. isSwitching = true;
  148. myAnim.Play (clip.name);
  149. yield return StartCoroutine (WaitAnimationFinish (clip));
  150. isSwitching = false;
  151. if (onFinishedDisablingAnimation != null)
  152. onFinishedDisablingAnimation ();
  153. }
  154. IEnumerator PlayRaiseClip (AnimationClip clip)
  155. {
  156. myAnim.Play (clip.name);
  157. if (curWeapon.weaponAnimations.Weapon_Raise)
  158. {
  159. if (onStartRaisingAnimation != null)
  160. {
  161. onStartRaisingAnimation (curWeapon.weaponAnimations.Weapon_Raise.name);
  162. }
  163. }
  164. yield return StartCoroutine (WaitAnimationFinish (clip));
  165. if (onFinishedRaisingAnimation != null)
  166. onFinishedRaisingAnimation ();
  167. }
  168. IEnumerator WaitAnimationFinish (AnimationClip clip)
  169. {
  170. float reloadTime = clip.length;
  171. yield return new WaitForSeconds (reloadTime);
  172. }
  173. public static event Action onFinishedDisablingAnimation;
  174. public static event Action onFinishedRaisingAnimation;
  175. public static event Action <string> onStartRaisingAnimation;
  176. private static PlayerSyncLegacy instance = null;
  177. public static PlayerSyncLegacy Instance
  178. {
  179. get
  180. {
  181. if (instance == null)
  182. instance = GameObject.FindObjectOfType <PlayerSyncLegacy> ();
  183. return instance;
  184. }
  185. }
  186. private WeaponState wpState;
  187. public WeaponState WpState
  188. {
  189. get
  190. {
  191. return wpState;
  192. }
  193. set
  194. {
  195. wpState = value;
  196. UpdateAnimation ();
  197. }
  198. }
  199. PlayerManager pManager
  200. {
  201. get
  202. {
  203. return PlayerManager.Instance;
  204. }
  205. }
  206. }