using Koptilnya.StateMachine; using Mirror; using UnityEngine; namespace Characters.Enemy.States { public class ChaseState : State { private readonly Enemy _enemy; private readonly AudioClip _agressiveClip; public ChaseState(Enemy enemy) : base(EnemyState.Chase) { _enemy = enemy; _agressiveClip = Resources.Load("Audio/EnemySounds/FX/agressive2"); } public override void Enter() { if (_enemy.isServer) { _enemy.SetSpeedMul(1f); _enemy.SetAimRigWeight(1f); } if (_enemy.isClient) { _enemy.audioSource.clip = _agressiveClip; _enemy.audioSource.loop = true; _enemy.audioSource.Play(); } } [ServerCallback] public override void Update() { _enemy.agent.destination = _enemy.targetTransform.position; var distanceToTarget = _enemy.DistanceToTarget; if (distanceToTarget < _enemy.aggressionDistance) { _enemy.aimTransform.position = _enemy.targetTransform.position + _enemy.targetTransform.up * 1.2f; if (distanceToTarget < 1f) { _enemy.ChangeState(EnemyState.Attack); return; } _enemy.targetTransform = _enemy.GetClosestTarget(); } if (!_enemy.HasTarget) { _enemy.ChangeState(EnemyState.Idle); } } public override void Exit() { if (_enemy.isServer) { _enemy.SetAimRigWeight(0f); } if (_enemy.isClient) { _enemy.audioSource.loop = false; _enemy.audioSource.Stop(); } } } }