using System.Collections; using UnityEngine; using RR.Game2D.Behaviour; using RR.Game2D.Behaviour.ScriptableObjects; using RR.Game2D.Core.Managers; using UnityEngine.VFX; namespace RR.Game2D.Animations { public class EnemyAnimationEvents : MonoBehaviour, CreatureAnimationEvents { [SerializeField] private VisualEffectAsset deathVFX; private SFXAsset _stepSounds; private SFXAsset _hurtSounds; private void Awake() { // Загружаем и кэшируем звуковые эффекты из контроллера врага UpdateSFX(); } public void UpdateSFX() { // Кэшируем ссылки на звуковые эффекты из контроллера врага EnemyController controller = GetComponent(); _stepSounds = controller.sfxAsset.stepSounds; _hurtSounds = controller.sfxAsset.hurtSounds; } public void OnDeath() { throw new System.NotImplementedException(); } public void OnDeathBegin() { // Проигрываем звук получения урона if (_hurtSounds && _hurtSounds.soundEffects.Length > 0) GameManager.Instance.Audio.PlayRandomSfxAt(_hurtSounds.soundEffects, transform.position); // Переводим врага на слой "No Collision" gameObject.layer = LayerMask.NameToLayer("No Collision"); // Получаем компоненты Rigidbody2D rb = GetComponent(); Collider2D col = GetComponent(); EnemyController controller = GetComponent(); EnemyFireScript fireScript = GetComponent(); // Отключаем скрипты и коллайдер if (controller) controller.enabled = false; if (fireScript) fireScript.enabled = false; if (col) col.enabled = false; if (!rb) return; // Останавливаем физику rb.linearVelocity = Vector2.zero; rb.bodyType = RigidbodyType2D.Kinematic; } public void OnDeathEnd() { // Уничтожаем врага // Создаем визуальный эффект смерти if (deathVFX) { Collider2D col = GetComponent(); Vector3 pos = new Vector3(transform.position.x, col ? col.bounds.center.y : transform.position.y, transform.position.z); // Используем Spawn: пул сам реинициализирует, запустит Play() и вернёт объект обратно после таймаута. GameObject vfx = VFXPool.Instance.Spawn(deathVFX, pos); if (vfx) vfx.transform.rotation = transform.rotation; } Destroy(gameObject); } public void OnStep() { // Проигрываем звук шага if (_stepSounds && _stepSounds.soundEffects.Length > 0) GameManager.Instance.Audio.PlayRandomSfxAt(_stepSounds.soundEffects, transform.position); } public void OnJump() { throw new System.NotImplementedException(); } } }