Files
FueraDeEscala/Assets/Game Kit Controller/Scripts/Abilities System/particleCollisionDetection.cs
Robii Aragon fd87a6ffd5 add ckg
plantilla base para movimiento básico
2026-02-05 05:07:55 -08:00

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