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