using Darkmatter.Core; using System; using UnityEngine; namespace Darkmatter.Domain { public class ChaseState : State { public ChaseState(EnemyStateMachine runner) : base(runner) { } private EnemyConfigSO enemyConfig => runner.enemyConfig; private IEnemyAnimController enemyAnimController => runner.enemyAnimController; private IEnemyPawn enemyPawn => runner.enemyPawn; public override void Enter() { base.Enter(); Debug.Log("Entered Chase State"); runner.SetSpeed(enemyConfig.chaseSpeed); enemyAnimController.PlayeChaseAnim(true); enemyPawn.OnHealthDecreased += HandleHealth; } private void HandleHealth(float health) { if (health <= 0) { runner.Die(); } } public override void Update() { if (enemyPawn.isDead) return; base.Update(); HandleChase(); CheckForStateBreak(); Debug.Log("Updated Chase State"); } private void CheckForStateBreak() { if (!runner.PlayerInChasingRange()) { runner.ChangeState(new PatrolState(runner)); } else if(runner.PlayerInAttackRange()) { runner.ChangeState(new AttackState(runner)); } } private void HandleChase() { enemyPawn.SetDestination(enemyPawn.PlayerTarget.position); } public override void Exit() { base.Exit(); Debug.Log("Exiting Chase State"); enemyAnimController.PlayeChaseAnim(false); enemyPawn.OnHealthDecreased -= HandleHealth; } } }