TurnBasedStrategyCourse/Assets/Scripts/Barrel.cs

28 lines
1.3 KiB
C#

using System;
using Grid;
using UnityEngine;
using Random = UnityEngine.Random;
public class Barrel : MonoBehaviour, IDestructable {
[SerializeField] private Transform barrelDestroyedPrefab;
private void Start() => GridPosition = LevelGrid.Instance.GetGridPosition(transform.position);
public GridPosition GridPosition { get; set; }
public void Damage(float damageAmount) {
Transform barrelDestroyedTransform = Instantiate(barrelDestroyedPrefab, transform.position, transform.rotation);
ApplyExplosionToChildren(barrelDestroyedTransform, Random.Range(damageAmount - 50f, damageAmount + 50f), transform.position, Random.Range(damageAmount / 10f, damageAmount / 5f));
Destroy(gameObject);
OnAnyDestroyed?.Invoke(this, EventArgs.Empty);
}
public static event EventHandler OnAnyDestroyed;
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);
}
}
}