TurnBasedStrategyCourse/Assets/Scripts/DestructableCrate.cs

28 lines
1.2 KiB
C#

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);
}
}
}