103 lines
2.0 KiB
C#
103 lines
2.0 KiB
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
using UnityEngine.Events;
|
|
|
|
public class particleCollisionDetection : MonoBehaviour
|
|
{
|
|
[Header ("Main Settings")]
|
|
[Space]
|
|
|
|
public bool detectionEnabled = true;
|
|
|
|
public bool useLayermaskOnObjectsDetected;
|
|
public LayerMask layermaskToCheck;
|
|
|
|
[Space]
|
|
[Header ("Collision Max Amount Settings")]
|
|
[Space]
|
|
|
|
public bool useCollisionMaxAmount;
|
|
public int collisionMaxAmount;
|
|
|
|
[Space]
|
|
[Header ("Components")]
|
|
[Space]
|
|
|
|
public ParticleSystem mainParticleSystem;
|
|
|
|
[Space]
|
|
[Header ("Debug")]
|
|
[Space]
|
|
|
|
public bool debugCollisionPrintActive;
|
|
|
|
public int currentCollisionCounter;
|
|
|
|
[Space]
|
|
[Header ("Events Settings")]
|
|
[Space]
|
|
|
|
public bool useEventOnCollision = true;
|
|
|
|
public eventParameters.eventToCallWithVector3 eventOnCollision;
|
|
|
|
[Space]
|
|
|
|
public bool useEventOnCollisionWithGameObject;
|
|
|
|
public eventParameters.eventToCallWithGameObject eventOnCollisionWithGameObject;
|
|
|
|
public List<ParticleCollisionEvent> collisionEvents = new List<ParticleCollisionEvent> ();
|
|
|
|
|
|
void OnParticleCollision (GameObject obj)
|
|
{
|
|
if (!detectionEnabled) {
|
|
return;
|
|
}
|
|
|
|
int numCollisionEvents = mainParticleSystem.GetCollisionEvents (obj, collisionEvents);
|
|
|
|
if (debugCollisionPrintActive) {
|
|
print (numCollisionEvents);
|
|
}
|
|
|
|
if (numCollisionEvents > 0) {
|
|
|
|
if (useLayermaskOnObjectsDetected) {
|
|
if ((1 << obj.layer & layermaskToCheck.value) != 1 << obj.layer) {
|
|
return;
|
|
}
|
|
}
|
|
|
|
if (useCollisionMaxAmount) {
|
|
if (currentCollisionCounter >= collisionMaxAmount) {
|
|
return;
|
|
}
|
|
|
|
currentCollisionCounter++;
|
|
}
|
|
|
|
if (useEventOnCollision) {
|
|
eventOnCollision.Invoke (collisionEvents [0].intersection);
|
|
}
|
|
|
|
if (useEventOnCollisionWithGameObject) {
|
|
eventOnCollisionWithGameObject.Invoke (obj);
|
|
}
|
|
|
|
if (debugCollisionPrintActive) {
|
|
print (collisionEvents [0].intersection);
|
|
|
|
print ("Particle Collision Detected with object " + obj.name);
|
|
}
|
|
}
|
|
}
|
|
|
|
public void setDetectionEnabledState (bool state)
|
|
{
|
|
detectionEnabled = state;
|
|
}
|
|
}
|