Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System.Collections;
- using UnityEngine;
- public class MeleeEnemy : Enemy
- {
- bool isAttacking;
- protected override void HandleState()
- {
- switch (currentState)
- {
- case EnemyState.Idle:
- if (IsPlayerInRange(attackRange))
- TransitionState(EnemyState.MeleeAttack);
- else
- TransitionState(EnemyState.MoveToPlayer);
- break;
- case EnemyState.MoveToPlayer:
- MoveToPlayer();
- if (IsPlayerInRange(attackRange))
- TransitionState(EnemyState.MeleeAttack);
- break;
- case EnemyState.MeleeAttack:
- StopMoving();
- LookAtPlayer();
- if (!isAttacking && !IsPlayerInRange(attackRange))
- TransitionState(EnemyState.MoveToPlayer);
- else if (!isAttacking && CanAttack() && !GameManager.instance.gameIsPaused)
- {
- lastAttackTime = Time.time;
- animator.SetTrigger("AttackPunch");
- if(hitMovementTrail)
- hitMovementTrail.SetActive(true);
- StartCoroutine(PlayAttackSound());
- isAttacking = true;
- }
- break;
- case EnemyState.Die:
- Die();
- break;
- default:
- isRunning = false;
- TransitionState(EnemyState.MoveToPlayer);
- break;
- }
- }
- protected override void OnEnable()
- {
- base.OnEnable();
- isAttacking = false;
- }
- IEnumerator PlayAttackSound()
- {
- yield return new WaitForSeconds(enemySo.playAfterTime);
- if(attackAudioSource) attackAudioSource.PlayOneShot(enemySo.attackAudio);
- }
- public void ResetAttack()
- {
- //isAttacking = false;
- if(hitMovementTrail)
- hitMovementTrail.SetActive(false);
- StartCoroutine(RandomTimeAfterAttack());
- }
- private IEnumerator RandomTimeAfterAttack()
- {
- var randomTime = Random.Range(0, 0.2f);
- yield return new WaitForSeconds(randomTime);
- isAttacking = false;
- }
- private IEnumerator RandomTimeAllowMove()
- {
- yield return new WaitForSeconds(0.5f);
- var randomTime = Random.Range(0, 0.5f);
- yield return new WaitForSeconds(randomTime);
- TransitionState(EnemyState.MoveToPlayer);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment