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() {} 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) VFXPool.Instance.Spawn(deathVFX, transform.position, 1f); // 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(); } } }