diff --git a/Assets/Scenes/SampleScene.unity b/Assets/Scenes/SampleScene.unity
index 3879564..95948f7 100644
--- a/Assets/Scenes/SampleScene.unity
+++ b/Assets/Scenes/SampleScene.unity
@@ -759,6 +759,52 @@ MonoBehaviour:
m_LightCookieSize: {x: 1, y: 1}
m_LightCookieOffset: {x: 0, y: 0}
m_SoftShadowQuality: 1
+--- !u!1 &432444065
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 432444066}
+ - component: {fileID: 432444067}
+ m_Layer: 0
+ m_Name: Triggerable music
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &432444066
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 432444065}
+ serializedVersion: 2
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children:
+ - {fileID: 1512154480}
+ m_Father: {fileID: 621578838}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &432444067
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 432444065}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0c3454cc62eba27469e9581fb0fb8703, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ music: {fileID: 1512154481}
--- !u!1 &493760349
GameObject:
m_ObjectHideFlags: 0
@@ -814,6 +860,130 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 5a895e8a798ee0b4a9a5ea33d6b07f4b, type: 3}
m_Name:
m_EditorClassIdentifier:
+--- !u!1 &621578834
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 621578838}
+ - component: {fileID: 621578837}
+ - component: {fileID: 621578836}
+ - component: {fileID: 621578835}
+ - component: {fileID: 621578839}
+ m_Layer: 0
+ m_Name: TriggerZone
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!65 &621578835
+BoxCollider:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 621578834}
+ m_Material: {fileID: 0}
+ m_IncludeLayers:
+ serializedVersion: 2
+ m_Bits: 0
+ m_ExcludeLayers:
+ serializedVersion: 2
+ m_Bits: 0
+ m_LayerOverridePriority: 0
+ m_IsTrigger: 1
+ m_ProvidesContacts: 0
+ m_Enabled: 1
+ serializedVersion: 3
+ m_Size: {x: 1, y: 1, z: 1}
+ m_Center: {x: 0, y: 0, z: 0}
+--- !u!23 &621578836
+MeshRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 621578834}
+ m_Enabled: 1
+ m_CastShadows: 1
+ m_ReceiveShadows: 1
+ m_DynamicOccludee: 1
+ m_StaticShadowCaster: 0
+ m_MotionVectors: 1
+ m_LightProbeUsage: 1
+ m_ReflectionProbeUsage: 1
+ m_RayTracingMode: 2
+ m_RayTraceProcedural: 0
+ m_RayTracingAccelStructBuildFlagsOverride: 0
+ m_RayTracingAccelStructBuildFlags: 1
+ m_SmallMeshCulling: 1
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, type: 2}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_ReceiveGI: 1
+ m_PreserveUVs: 0
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_StitchLightmapSeams: 1
+ m_SelectedEditorRenderState: 3
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 0
+ m_AdditionalVertexStreams: {fileID: 0}
+--- !u!33 &621578837
+MeshFilter:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 621578834}
+ m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!4 &621578838
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 621578834}
+ serializedVersion: 2
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 4.22, y: 0.71, z: -7.71}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children:
+ - {fileID: 432444066}
+ m_Father: {fileID: 0}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &621578839
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 621578834}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: eb3300468ed86d74d9fce3c293a89442, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ activableTriggers:
+ - {fileID: 432444067}
--- !u!1 &990919146
GameObject:
m_ObjectHideFlags: 0
@@ -857,6 +1027,7 @@ GameObject:
- component: {fileID: 1192843595}
- component: {fileID: 1192843594}
- component: {fileID: 1192843593}
+ - component: {fileID: 1192843596}
m_Layer: 0
m_Name: Slope
m_TagString: Untagged
@@ -876,7 +1047,8 @@ Transform:
m_LocalPosition: {x: -5.5, y: 1.13, z: -6.62}
m_LocalScale: {x: 0.5, y: 1, z: 0.5}
m_ConstrainProportionsScale: 0
- m_Children: []
+ m_Children:
+ - {fileID: 1646350200}
m_Father: {fileID: 90518572}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: -28.7}
--- !u!64 &1192843593
@@ -954,6 +1126,110 @@ MeshFilter:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1192843591}
m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!114 &1192843596
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1192843591}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: ce02cde7ea924d943a1cae7e8fa23c97, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ triggerables:
+ - {fileID: 1646350201}
+--- !u!1 &1512154479
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1512154480}
+ - component: {fileID: 1512154481}
+ m_Layer: 0
+ m_Name: Music
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &1512154480
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1512154479}
+ serializedVersion: 2
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 432444066}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &1512154481
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1512154479}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 287885c28387db147b2ed37b247e9fc2, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ sound: {fileID: 8300000, guid: 2e41a111eebf71843a1cbf93be5a9e1c, type: 3}
+--- !u!1 &1646350199
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1646350200}
+ - component: {fileID: 1646350201}
+ m_Layer: 0
+ m_Name: Triggerable sound
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &1646350200
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1646350199}
+ serializedVersion: 2
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: -12.26, y: -0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 1192843592}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &1646350201
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1646350199}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: f05e67e6db6841f45b446a26d1d0d31d, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ audioSource: {fileID: 8300000, guid: 2e41a111eebf71843a1cbf93be5a9e1c, type: 3}
--- !u!1 &1697224667
GameObject:
m_ObjectHideFlags: 0
@@ -1279,3 +1555,4 @@ SceneRoots:
- {fileID: 90518572}
- {fileID: 266152667}
- {fileID: 169666005}
+ - {fileID: 621578838}
diff --git a/Assets/Scripts/Trigger/Trigger/IActivableTrigger.cs b/Assets/Scripts/Trigger/Trigger/IActivableTrigger.cs
new file mode 100644
index 0000000..b876c90
--- /dev/null
+++ b/Assets/Scripts/Trigger/Trigger/IActivableTrigger.cs
@@ -0,0 +1,26 @@
+using System.Collections.Generic;
+using UnityEngine;
+
+///
+/// An abstract class for anything that needs to trigger activable events (on/off state)
+///
+public abstract class IActivableTrigger : MonoBehaviour
+{
+ [SerializeField] List activableTriggers;
+
+ protected void OnTriggerActivate()
+ {
+ foreach (IActivableTriggerable activableTrigger in activableTriggers)
+ {
+ activableTrigger.OnTriggerActivate();
+ }
+ }
+
+ protected void OnTriggerDeactivate()
+ {
+ foreach (IActivableTriggerable activableTrigger in activableTriggers)
+ {
+ activableTrigger.OnTriggerDeactivate();
+ }
+ }
+}
diff --git a/Assets/Scripts/Trigger/Trigger/IActivableTrigger.cs.meta b/Assets/Scripts/Trigger/Trigger/IActivableTrigger.cs.meta
new file mode 100644
index 0000000..208683b
--- /dev/null
+++ b/Assets/Scripts/Trigger/Trigger/IActivableTrigger.cs.meta
@@ -0,0 +1,2 @@
+fileFormatVersion: 2
+guid: a01a8874461ebab4fb27d80b3864597a
\ No newline at end of file
diff --git a/Assets/Scripts/Trigger/Trigger/TriggerArea.cs b/Assets/Scripts/Trigger/Trigger/TriggerArea.cs
new file mode 100644
index 0000000..db4a046
--- /dev/null
+++ b/Assets/Scripts/Trigger/Trigger/TriggerArea.cs
@@ -0,0 +1,18 @@
+using UnityEngine;
+
+///
+/// An area that triggers when colliding (triggers once when entering, once when exiting)
+///
+[RequireComponent(typeof(Collider))]
+public class TriggerArea : IActivableTrigger
+{
+ private void OnTriggerEnter(Collider other)
+ {
+ OnTriggerActivate();
+ }
+
+ private void OnTriggerExit(Collider other)
+ {
+ OnTriggerDeactivate();
+ }
+}
diff --git a/Assets/Scripts/Trigger/Trigger/TriggerArea.cs.meta b/Assets/Scripts/Trigger/Trigger/TriggerArea.cs.meta
new file mode 100644
index 0000000..cde8289
--- /dev/null
+++ b/Assets/Scripts/Trigger/Trigger/TriggerArea.cs.meta
@@ -0,0 +1,2 @@
+fileFormatVersion: 2
+guid: eb3300468ed86d74d9fce3c293a89442
\ No newline at end of file
diff --git a/Assets/Scripts/Trigger/Triggerable/IActivableTriggerable.cs b/Assets/Scripts/Trigger/Triggerable/IActivableTriggerable.cs
new file mode 100644
index 0000000..f788fca
--- /dev/null
+++ b/Assets/Scripts/Trigger/Triggerable/IActivableTriggerable.cs
@@ -0,0 +1,10 @@
+using UnityEngine;
+
+///
+/// An abstract class for any triggerable object that has an on/off state
+///
+public abstract class IActivableTriggerable : MonoBehaviour
+{
+ public abstract void OnTriggerActivate();
+ public abstract void OnTriggerDeactivate();
+}
diff --git a/Assets/Scripts/Trigger/Triggerable/IActivableTriggerable.cs.meta b/Assets/Scripts/Trigger/Triggerable/IActivableTriggerable.cs.meta
new file mode 100644
index 0000000..b8b992f
--- /dev/null
+++ b/Assets/Scripts/Trigger/Triggerable/IActivableTriggerable.cs.meta
@@ -0,0 +1,2 @@
+fileFormatVersion: 2
+guid: 64b9105c3da058a4698864040a90a844
\ No newline at end of file
diff --git a/Assets/Scripts/Trigger/Triggerable/TriggerableMusic.cs b/Assets/Scripts/Trigger/Triggerable/TriggerableMusic.cs
new file mode 100644
index 0000000..4a4fc18
--- /dev/null
+++ b/Assets/Scripts/Trigger/Triggerable/TriggerableMusic.cs
@@ -0,0 +1,25 @@
+using UnityEngine;
+
+///
+/// A triggerable music. Trigger can activate and deactivate the music.
+///
+public class TriggerableMusic : IActivableTriggerable
+{
+ [SerializeField] ILoopableSound music;
+
+ public override void OnTriggerActivate()
+ {
+ if (music != null)
+ {
+ MusicManager.Instance.StartMusic(music);
+ }
+ }
+
+ public override void OnTriggerDeactivate()
+ {
+ if (music != null)
+ {
+ MusicManager.Instance.StopMusic(music);
+ }
+ }
+}
diff --git a/Assets/Scripts/Trigger/Triggerable/TriggerableMusic.cs.meta b/Assets/Scripts/Trigger/Triggerable/TriggerableMusic.cs.meta
new file mode 100644
index 0000000..30caf82
--- /dev/null
+++ b/Assets/Scripts/Trigger/Triggerable/TriggerableMusic.cs.meta
@@ -0,0 +1,2 @@
+fileFormatVersion: 2
+guid: 0c3454cc62eba27469e9581fb0fb8703
\ No newline at end of file