Eonirr

Untitled

Apr 13th, 2026
53
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.87 KB | None | 0 0
  1. using System.Collections;
  2. using UnityEngine;
  3.  
  4. public class MeleeEnemy : Enemy
  5. {
  6. bool isAttacking;
  7.  
  8. protected override void HandleState()
  9. {
  10. switch (currentState)
  11. {
  12. case EnemyState.Idle:
  13. if (IsPlayerInRange(attackRange))
  14. TransitionState(EnemyState.MeleeAttack);
  15. else
  16. TransitionState(EnemyState.MoveToPlayer);
  17. break;
  18.  
  19. case EnemyState.MoveToPlayer:
  20.  
  21. if (!isRunning)
  22. {
  23. if (HasParameter(animator, "Run", AnimatorControllerParameterType.Trigger))
  24. {
  25. animator.SetTrigger("Run");
  26. }
  27. isRunning = true;
  28. }
  29.  
  30. MoveToPlayer();
  31.  
  32. if (IsPlayerInRange(attackRange))
  33. TransitionState(EnemyState.MeleeAttack);
  34. break;
  35.  
  36. case EnemyState.MeleeAttack:
  37.  
  38. StopMoving();
  39. LookAtPlayer();
  40.  
  41. if (!isAttacking && !IsPlayerInRange(attackRange))
  42. TransitionState(EnemyState.MoveToPlayer);
  43. else if (!isAttacking && CanAttack() && !GameManager.instance.gameIsPaused)
  44. {
  45. lastAttackTime = Time.time;
  46. animator.SetTrigger("AttackPunch");
  47.  
  48. if(hitMovementTrail)
  49. hitMovementTrail.SetActive(true);
  50.  
  51. StartCoroutine(PlayAttackSound());
  52.  
  53. isAttacking = true;
  54. }
  55. break;
  56.  
  57. case EnemyState.Die:
  58. Die();
  59. break;
  60.  
  61. default:
  62. isRunning = false;
  63. TransitionState(EnemyState.MoveToPlayer);
  64. break;
  65. }
  66. }
  67.  
  68. protected override void OnEnable()
  69. {
  70. base.OnEnable();
  71. isAttacking = false;
  72. }
  73.  
  74. IEnumerator PlayAttackSound()
  75. {
  76. yield return new WaitForSeconds(enemySo.playAfterTime);
  77. if(attackAudioSource) attackAudioSource.PlayOneShot(enemySo.attackAudio);
  78. }
  79.  
  80. public void ResetAttack()
  81. {
  82. //isAttacking = false;
  83. if(hitMovementTrail)
  84. hitMovementTrail.SetActive(false);
  85.  
  86. StartCoroutine(RandomTimeAfterAttack());
  87. }
  88.  
  89. private IEnumerator RandomTimeAfterAttack()
  90. {
  91. var randomTime = Random.Range(0, 0.2f);
  92.  
  93. yield return new WaitForSeconds(randomTime);
  94.  
  95. isAttacking = false;
  96. }
  97.  
  98. private IEnumerator RandomTimeAllowMove()
  99. {
  100. yield return new WaitForSeconds(0.5f);
  101.  
  102. var randomTime = Random.Range(0, 0.5f);
  103.  
  104. yield return new WaitForSeconds(randomTime);
  105.  
  106. TransitionState(EnemyState.MoveToPlayer);
  107. }
  108. }
  109.  
Advertisement
Add Comment
Please, Sign In to add comment