Eonirr

Untitled

Apr 13th, 2026
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.57 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. MoveToPlayer();
  22.  
  23. if (IsPlayerInRange(attackRange))
  24. TransitionState(EnemyState.MeleeAttack);
  25. break;
  26.  
  27. case EnemyState.MeleeAttack:
  28.  
  29. StopMoving();
  30. LookAtPlayer();
  31.  
  32. if (!isAttacking && !IsPlayerInRange(attackRange))
  33. TransitionState(EnemyState.MoveToPlayer);
  34. else if (!isAttacking && CanAttack() && !GameManager.instance.gameIsPaused)
  35. {
  36. lastAttackTime = Time.time;
  37. animator.SetTrigger("AttackPunch");
  38.  
  39. if(hitMovementTrail)
  40. hitMovementTrail.SetActive(true);
  41.  
  42. StartCoroutine(PlayAttackSound());
  43.  
  44. isAttacking = true;
  45. }
  46. break;
  47.  
  48. case EnemyState.Die:
  49. Die();
  50. break;
  51.  
  52. default:
  53. isRunning = false;
  54. TransitionState(EnemyState.MoveToPlayer);
  55. break;
  56. }
  57. }
  58.  
  59. protected override void OnEnable()
  60. {
  61. base.OnEnable();
  62. isAttacking = false;
  63. }
  64.  
  65. IEnumerator PlayAttackSound()
  66. {
  67. yield return new WaitForSeconds(enemySo.playAfterTime);
  68. if(attackAudioSource) attackAudioSource.PlayOneShot(enemySo.attackAudio);
  69. }
  70.  
  71. public void ResetAttack()
  72. {
  73. //isAttacking = false;
  74. if(hitMovementTrail)
  75. hitMovementTrail.SetActive(false);
  76.  
  77. StartCoroutine(RandomTimeAfterAttack());
  78. }
  79.  
  80. private IEnumerator RandomTimeAfterAttack()
  81. {
  82. var randomTime = Random.Range(0, 0.2f);
  83.  
  84. yield return new WaitForSeconds(randomTime);
  85.  
  86. isAttacking = false;
  87. }
  88.  
  89. private IEnumerator RandomTimeAllowMove()
  90. {
  91. yield return new WaitForSeconds(0.5f);
  92.  
  93. var randomTime = Random.Range(0, 0.5f);
  94.  
  95. yield return new WaitForSeconds(randomTime);
  96.  
  97. TransitionState(EnemyState.MoveToPlayer);
  98. }
  99. }
  100.  
Advertisement
Add Comment
Please, Sign In to add comment