using System; using Enemies.States; using UnityEngine; namespace Enemies { public class BaseEnemy : Enemy { private void Awake() { this.health = 100; this.speed = 4; this.damage = 10; this.attackRange = .8f; SwitchState(States.Idle); } private void Update() { HandleStates(); state.Execute(); } private void HandleStates() { if (health <= 0) { SwitchState(States.Die); } if (target == null) { SwitchState(States.Target); } else { float dist = Vector2.Distance(target.transform.position, transform.position); if (currentState == States.Target) { SwitchState(States.Path); } if (currentState == States.Path) { if (dist <= attackRange) { SwitchState(target.CompareTag("Player") ? States.Attack : States.Follow); } else if (dist > viewRange) { target = null; SwitchState(States.Target); } } if (currentState == States.Attack) { if(dist > attackRange) { SwitchState(States.Path); } } } } public override void SwitchState(States s) { if (currentState == s) return; if (currentState != null) state.Exit(); state = s switch { States.Idle => new IdleState(this), States.Attack => new AttackState(this), States.Target => new TargetState(this), States.Follow => new FollowState(this), States.Path => new PathState(this), States.Die => new DieState(this), _ => new IdleState(this) }; state.Enter(); } } }