Add: trigger system

Trigger system that can activate any event
This commit is contained in:
Banane_Rotative
2026-01-19 22:58:25 +01:00
parent 18c2d44c31
commit bda9e7283b
11 changed files with 110 additions and 0 deletions

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: ff2572641226ba24f8e06342e11d6dc6
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: b7081abff2504cd488ce34e2964895f5
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,26 @@
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// An abstract class for anything that needs to trigger one-shot events
/// </summary>
public abstract class ITrigger : MonoBehaviour
{
[SerializeField] List<ITriggerable> triggerables;
protected void OnTrigger(Vector3 position)
{
foreach (ITriggerable triggerable in triggerables)
{
triggerable.Trigger(position);
}
}
protected void OnTrigger()
{
foreach (var triggerable in triggerables)
{
triggerable.Trigger();
}
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 5b27634977cf89f4897128f2bfc9c40e

View File

@@ -0,0 +1,17 @@
using UnityEngine;
/// <summary>
/// A collision trigger that triggers one-shot event when colliding with an object
/// </summary>
[RequireComponent(typeof(Collider))]
public class TriggerCollision : ITrigger
{
private void OnCollisionEnter(Collision collision)
{
if (collision.contactCount > 0)
{
Vector3 contactPoint = collision.GetContact(0).point;
OnTrigger(contactPoint);
}
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: ce02cde7ea924d943a1cae7e8fa23c97

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 923b6e673582c4b4487ef8daea9b0bd2
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,10 @@
using UnityEngine;
/// <summary>
/// An abstract class for any triggerable object
/// </summary>
public abstract class ITriggerable : MonoBehaviour
{
public abstract void Trigger();
public abstract void Trigger(Vector3 position);
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: db3db78b9c1317d42abe3ef387daea90

View File

@@ -0,0 +1,25 @@
using UnityEngine;
/// <summary>
/// A triggerable sound. Trigger plays the sound.
/// </summary>
public class TriggerableSound : ITriggerable
{
[SerializeField] AudioClip audioSource;
public override void Trigger()
{
if (audioSource != null)
{
SoundManager.Instance.PlaySoundAt(transform.position, audioSource);
}
}
public override void Trigger(Vector3 position)
{
if (audioSource != null)
{
SoundManager.Instance.PlaySoundAt(position, audioSource);
}
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: f05e67e6db6841f45b446a26d1d0d31d