ThrowBall/Assets/Plugins/RayFire/Tutorial/Scripts/DemolitionEventScript.cs

81 lines
3.3 KiB
C#

using UnityEngine;
// IMPORTANT! You should add RayFire namespace to use RayFire component's event.
using RayFire;
namespace RayFire
{
// Tutorial script. Allows to subscribe to Rigid component demolition.
public class DemolitionEventScript : MonoBehaviour
{
// Define if script should subscribe to global demolition event
public bool globalSubscription = false;
// Local Rigid component which will be checked for demolition.
// You can get RayfireRigid component which you want to check for demolition in any way you want.
// This is just a tutorial way to define it.
public bool localSubscription = false;
public RayfireRigid localRigidComponent;
// /////////////////////////////////////////////////////////
// Subscribe/Unsubscribe
// /////////////////////////////////////////////////////////
// Subscribe to event
void OnEnable()
{
// Subscribe to global demolition event. Every demolition will invoke subscribed methods.
if (globalSubscription == true)
RFDemolitionEvent.GlobalEvent += GlobalMethod;
// Subscribe to local demolition event. Demolition of specific Rigid component will invoke subscribed methods.
if (localSubscription == true && localRigidComponent != null)
localRigidComponent.demolitionEvent.LocalEvent += LocalMethod;
}
// Unsubscribe from event
void OnDisable()
{
// Unsubscribe from global demolition event.
if (globalSubscription == true)
RFDemolitionEvent.GlobalEvent -= GlobalMethod;
// Unsubscribe from local demolition event.
if (localSubscription == true && localRigidComponent != null)
localRigidComponent.demolitionEvent.LocalEvent -= LocalMethod;
}
// /////////////////////////////////////////////////////////
// Subscription Methods
// /////////////////////////////////////////////////////////
// IMPORTANT!. Subscribed method should has following signature.
// Void return type and one RayfireRigid input parameter.
// RayfireRigid input parameter is Rigid component which was demolished.
// In this way you can get demolition data.
// Method for local demolition subscription
void LocalMethod(RayfireRigid rigid)
{
// Show amount of fragments
Debug.Log ("Local demolition: " + rigid.name + " was just demolished and created " + rigid.fragments.Count.ToString() + " fragments");
// Show contact point
Debug.Log ("Contact point: " + rigid.limitations.contactVector3.ToString());
transform.position = rigid.limitations.contactVector3;
}
// Method for global demolition subscription
void GlobalMethod(RayfireRigid rigid)
{
// Show amount of fragments
Debug.Log ("Global demolition: " + rigid.name + " was just demolished and created " + rigid.fragments.Count.ToString() + " fragments");
// Show contact point
Debug.Log ("Contact point: " + rigid.limitations.contactVector3.ToString());
transform.position = rigid.limitations.contactVector3;
}
}
}