using System;
using UnityEngine.Events;
namespace UnityEngine.XR.Content.Interaction
{
///
/// Detects a collision with a tagged collider, replacing this object with a 'broken' version
///
public class Breakable : MonoBehaviour
{
[Serializable] public class BreakEvent : UnityEvent { }
[SerializeField]
[Tooltip("The 'broken' version of this object.")]
GameObject m_BrokenVersion;
[SerializeField]
[Tooltip("The tag a collider must have to cause this object to break.")]
string m_ColliderTag = "Destroyer";
[SerializeField]
[Tooltip("Events to fire when a matching object collides and break this object. " +
"The first parameter is the colliding object, the second parameter is the 'broken' version.")]
BreakEvent m_OnBreak = new BreakEvent();
bool m_Destroyed = false;
///
/// Events to fire when a matching object collides and break this object.
/// The first parameter is the colliding object, the second parameter is the 'broken' version.
///
public BreakEvent onBreak => m_OnBreak;
void OnCollisionEnter(Collision collision)
{
if (m_Destroyed)
return;
if (collision.gameObject.tag.Equals(m_ColliderTag, System.StringComparison.InvariantCultureIgnoreCase))
{
m_Destroyed = true;
var brokenVersion = Instantiate(m_BrokenVersion, transform.position, transform.rotation);
m_OnBreak.Invoke(collision.gameObject, brokenVersion);
Destroy(gameObject);
}
}
}
}