using System; using Grid; using UnityEngine; using Random = UnityEngine.Random; public class DestructableCrate : MonoBehaviour { [SerializeField] private Transform crateDestroyedPrefab; public GridPosition GridPosition { get; private set; } private void Start() => GridPosition = LevelGrid.Instance.GetGridPosition(transform.position); public static event EventHandler OnAnyDestroyed; public void Damage() { Transform crateDestroyedTransform = Instantiate(crateDestroyedPrefab, transform.position, transform.rotation); ApplyExplosionToChildren(crateDestroyedTransform, Random.Range(150f, 250f), transform.position, Random.Range(10f, 20f)); Destroy(gameObject); OnAnyDestroyed?.Invoke(this, EventArgs.Empty); } private static void ApplyExplosionToChildren(Transform root, float explosionForce, Vector3 explosionPosition, float explosionRadius) { foreach (Transform child in root) { if (!child.TryGetComponent(out Rigidbody childRigidbody)) continue; childRigidbody.AddExplosionForce(explosionForce, explosionPosition, explosionRadius); ApplyExplosionToChildren(child, explosionForce, explosionPosition, explosionRadius); } } }