using UnityEngine; public class BreakableWall : MapElement { [SerializeField] private float _noiseRadius = 10f; [SerializeField] private bool _emitNoiseOnBreak = true; private float _respawnElementTimer; private int _respawnTimeout = 4; private bool _needRespawn = false; private bool _characterInRange = false; private BoxCollider2D _boxCollider; private SpriteRenderer _spriteRenderer; [SerializeField] private GameObject _hitParticles; private void Start() { _respawnElementTimer = _respawnTimeout; _boxCollider = GetComponent(); _spriteRenderer = GetComponentInChildren(); } public override void Hit() { IsEnabled = false; _boxCollider.isTrigger = true; _spriteRenderer.enabled = IsEnabled; Instantiate(_hitParticles, transform.position, Quaternion.identity); // Emit noise when wall breaks if (_emitNoiseOnBreak && NoiseSystem.Instance != null) { NoiseSystem.Instance.Emit(transform.position, _noiseRadius); } _respawnElementTimer = _respawnTimeout; _needRespawn = true; } private void Update() { if (_needRespawn) { _respawnElementTimer -= Time.deltaTime; if (_respawnElementTimer <= 0) { _respawnElementTimer = _respawnTimeout; if (_characterInRange) { print("Character is dead"); } IsEnabled = true; _boxCollider.isTrigger = false; _spriteRenderer.enabled = IsEnabled; _needRespawn = false; } } } private void OnTriggerEnter2D(Collider2D collider) { var character = collider.GetComponent(); if (character) { _characterInRange = true; } } private void OnTriggerExit2D(Collider2D collider) { var character = collider.GetComponent(); if (character) { _characterInRange = false; } } }