From f689225b8c277bbce96511aaa628f8a391452795 Mon Sep 17 00:00:00 2001 From: MuhamadAjiW <16521119@mahasiswa.itb.ac.id> Date: Sat, 20 Apr 2024 23:31:05 +0700 Subject: [PATCH] feat: Interactable items --- Assets/Scenes/SampleScene.unity | 490 ++++++++++++++---- .../Mobs/Dummy/DummyAnimationController.cs | 6 +- Assets/Scripts/Core/Game/Data/GameInput.cs | 9 +- .../Scripts/Core/Objects/Interactables.meta | 8 + .../Interactables/InteractableObject.cs | 19 + .../Interactables/InteractableObject.cs.meta | 11 + .../Interactables/TestInteractable.meta | 8 + .../TestInteractable/TestInteractable.cs | 17 + .../TestInteractable/TestInteractable.cs.meta | 11 + .../TestInteractableAnimationController.cs | 25 + ...estInteractableAnimationController.cs.meta | 11 + Assets/Scripts/Core/Player/Player.cs | 18 +- .../Core/Player/PlayerAnimationController.cs | 6 +- .../Core/Player/PlayerInputController.cs | 7 +- .../Core/Player/PlayerStateController.cs | 2 + .../Controller/AnimationController.cs | 6 + .../Library/Interfaces/IInteractable.cs | 9 + .../Library/Interfaces/IInteractable.cs.meta | 11 + ProjectSettings/DynamicsManager.asset | 2 +- ProjectSettings/TagManager.asset | 2 +- 20 files changed, 569 insertions(+), 109 deletions(-) create mode 100644 Assets/Scripts/Core/Objects/Interactables.meta create mode 100644 Assets/Scripts/Core/Objects/Interactables/InteractableObject.cs create mode 100644 Assets/Scripts/Core/Objects/Interactables/InteractableObject.cs.meta create mode 100644 Assets/Scripts/Core/Objects/Interactables/TestInteractable.meta create mode 100644 Assets/Scripts/Core/Objects/Interactables/TestInteractable/TestInteractable.cs create mode 100644 Assets/Scripts/Core/Objects/Interactables/TestInteractable/TestInteractable.cs.meta create mode 100644 Assets/Scripts/Core/Objects/Interactables/TestInteractable/TestInteractableAnimationController.cs create mode 100644 Assets/Scripts/Core/Objects/Interactables/TestInteractable/TestInteractableAnimationController.cs.meta create mode 100644 Assets/Scripts/Library/Interfaces/IInteractable.cs create mode 100644 Assets/Scripts/Library/Interfaces/IInteractable.cs.meta diff --git a/Assets/Scenes/SampleScene.unity b/Assets/Scenes/SampleScene.unity index 75386b6a..4c19e5e8 100644 --- a/Assets/Scenes/SampleScene.unity +++ b/Assets/Scenes/SampleScene.unity @@ -323,6 +323,111 @@ Transform: - {fileID: 2127634081} m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &315870489 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 315870490} + - component: {fileID: 315870493} + - component: {fileID: 315870492} + - component: {fileID: 315870491} + m_Layer: 0 + m_Name: Model + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &315870490 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 315870489} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0.5, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1628232501} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &315870491 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 315870489} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + 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 &315870492 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 315870489} + 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_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + 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 &315870493 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 315870489} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} --- !u!1 &484130344 GameObject: m_ObjectHideFlags: 0 @@ -353,7 +458,6 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: - - {fileID: 1374546119} - {fileID: 117855957} - {fileID: 542408818} m_Father: {fileID: 239523007} @@ -420,6 +524,139 @@ Transform: m_CorrespondingSourceObject: {fileID: 42222099870390294, guid: 390863d613c9cc344aa16e3796881ed1, type: 3} m_PrefabInstance: {fileID: 2621625618582748302} m_PrefabAsset: {fileID: 0} +--- !u!1 &576314395 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 576314396} + - component: {fileID: 576314399} + - component: {fileID: 576314398} + - component: {fileID: 576314397} + - component: {fileID: 576314400} + m_Layer: 0 + m_Name: Marker + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &576314396 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 576314395} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2.08, y: 2, z: 3.57} + m_LocalScale: {x: 1, y: 4, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1098815287} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &576314397 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 576314395} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + 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 &576314398 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 576314395} + 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_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + 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 &576314399 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 576314395} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!54 &576314400 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 576314395} + serializedVersion: 4 + m_Mass: 1 + m_Drag: 0 + m_AngularDrag: 0.05 + m_CenterOfMass: {x: 0, y: 0, z: 0} + m_InertiaTensor: {x: 1, y: 1, z: 1} + m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ImplicitCom: 1 + m_ImplicitTensor: 1 + m_UseGravity: 0 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 126 + m_CollisionDetection: 0 --- !u!1 &675919034 GameObject: m_ObjectHideFlags: 0 @@ -726,9 +963,143 @@ Transform: m_LocalPosition: {x: 0, y: -0.125, z: 0} m_LocalScale: {x: 100, y: 0.25, z: 100} m_ConstrainProportionsScale: 0 - m_Children: [] + m_Children: + - {fileID: 779633712} m_Father: {fileID: 1098815287} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &779633711 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 779633712} + - component: {fileID: 779633716} + - component: {fileID: 779633715} + - component: {fileID: 779633714} + - component: {fileID: 779633713} + m_Layer: 0 + m_Name: UnderFloor + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &779633712 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 779633711} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: -5, z: 0} + m_LocalScale: {x: 1, y: 10, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 770593023} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!54 &779633713 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 779633711} + serializedVersion: 4 + m_Mass: 0.0000001 + m_Drag: 0 + m_AngularDrag: 0 + m_CenterOfMass: {x: 0, y: 0, z: 0} + m_InertiaTensor: {x: 1, y: 1, z: 1} + m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ImplicitCom: 1 + m_ImplicitTensor: 1 + m_UseGravity: 0 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 126 + m_CollisionDetection: 0 +--- !u!65 &779633714 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 779633711} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + 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 &779633715 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 779633711} + 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_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + 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 &779633716 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 779633711} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} --- !u!1 &963194225 GameObject: m_ObjectHideFlags: 0 @@ -741,7 +1112,6 @@ GameObject: - component: {fileID: 963194227} - component: {fileID: 963194226} - component: {fileID: 963194229} - - component: {fileID: 963194230} m_Layer: 0 m_Name: MainCamera m_TagString: Untagged @@ -836,30 +1206,8 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: target: {fileID: 117855957} - followingTime: 0.2 + followingTime: 0.1 mouseSensitivity: 2 - mouseTurn: {x: 0, y: 0} ---- !u!65 &963194230 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 963194225} - 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!4 &1093326602 stripped Transform: m_CorrespondingSourceObject: {fileID: 8728181779748450929, guid: 1a7698227caac3d429dceb8aa5056502, type: 3} @@ -897,6 +1245,8 @@ Transform: m_Children: - {fileID: 705507995} - {fileID: 770593023} + - {fileID: 576314396} + - {fileID: 1628232501} m_Father: {fileID: 239523007} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &1098815288 @@ -911,7 +1261,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: c54dc993f0d1e36499ea37e182a87cbc, type: 3} m_Name: m_EditorClassIdentifier: ---- !u!1 &1374546118 +--- !u!1 &1628232500 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -919,39 +1269,39 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 1374546119} - - component: {fileID: 1374546122} - - component: {fileID: 1374546121} - - component: {fileID: 1374546120} - m_Layer: 7 - m_Name: Marker + - component: {fileID: 1628232501} + - component: {fileID: 1628232503} + - component: {fileID: 1628232502} + m_Layer: 12 + m_Name: TestInteractable m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &1374546119 +--- !u!4 &1628232501 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1374546118} + m_GameObject: {fileID: 1628232500} serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 5, y: 2.5, z: 5} - m_LocalScale: {x: 5, y: 5, z: 5} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 3, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 484130345} + m_Children: + - {fileID: 315870490} + m_Father: {fileID: 1098815287} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!65 &1374546120 +--- !u!65 &1628232502 BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1374546118} + m_GameObject: {fileID: 1628232500} m_Material: {fileID: 0} m_IncludeLayers: serializedVersion: 2 @@ -960,62 +1310,24 @@ BoxCollider: serializedVersion: 2 m_Bits: 0 m_LayerOverridePriority: 0 - m_IsTrigger: 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 &1374546121 -MeshRenderer: + m_Center: {x: -1, y: 0.5, z: 0} +--- !u!114 &1628232503 +MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1374546118} + m_GameObject: {fileID: 1628232500} 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_RenderingLayerMask: 1 - m_RendererPriority: 0 - m_Materials: - - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} - 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 &1374546122 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1374546118} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: afc0fd7c16afe4a42a82353df9b3a73b, type: 3} + m_Name: + m_EditorClassIdentifier: --- !u!1 &2127634080 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/Scripts/Core/Entities/Mobs/Dummy/DummyAnimationController.cs b/Assets/Scripts/Core/Entities/Mobs/Dummy/DummyAnimationController.cs index 5b9556c9..2d47baaa 100644 --- a/Assets/Scripts/Core/Entities/Mobs/Dummy/DummyAnimationController.cs +++ b/Assets/Scripts/Core/Entities/Mobs/Dummy/DummyAnimationController.cs @@ -8,12 +8,8 @@ public class DummyAnimationController : AnimationController{ private readonly Dummy dummy; // Constructor - public DummyAnimationController(Dummy dummy){ + public DummyAnimationController(Dummy dummy) : base(dummy) { this.dummy = dummy; - model = dummy.transform.Find("Model"); - animator = model.GetComponent<Animator>(); - meshRenderer = model.GetComponent<MeshRenderer>(); - dummy.OnDamagedEvent += IndicateDamaged; dummy.stateController.OnDamageDelayOverEvent += IndicateUnamaged; } diff --git a/Assets/Scripts/Core/Game/Data/GameInput.cs b/Assets/Scripts/Core/Game/Data/GameInput.cs index 37ac6ace..1bb69dd5 100644 --- a/Assets/Scripts/Core/Game/Data/GameInput.cs +++ b/Assets/Scripts/Core/Game/Data/GameInput.cs @@ -1,3 +1,4 @@ +using System; using UnityEngine; public class GameInput : MonoBehaviour { @@ -5,10 +6,10 @@ public class GameInput : MonoBehaviour { public static GameInput instance; // Attributes - public KeyCode backButton = KeyCode.Escape; - public KeyCode attackButton = KeyCode.Z; - public KeyCode attackAlternateButton = KeyCode.X; - public KeyCode interactButton = KeyCode.C; + [NonSerialized] public KeyCode backButton = KeyCode.Escape; + [NonSerialized] public KeyCode attackButton = KeyCode.Z; + [NonSerialized] public KeyCode attackAlternateButton = KeyCode.X; + [NonSerialized] public KeyCode interactButton = KeyCode.C; // Constructor protected void Awake(){ diff --git a/Assets/Scripts/Core/Objects/Interactables.meta b/Assets/Scripts/Core/Objects/Interactables.meta new file mode 100644 index 00000000..e71038f6 --- /dev/null +++ b/Assets/Scripts/Core/Objects/Interactables.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f6c1c6289ba0f0841bba1d13d1473858 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Core/Objects/Interactables/InteractableObject.cs b/Assets/Scripts/Core/Objects/Interactables/InteractableObject.cs new file mode 100644 index 00000000..cbd1d37f --- /dev/null +++ b/Assets/Scripts/Core/Objects/Interactables/InteractableObject.cs @@ -0,0 +1,19 @@ +using System; +using UnityEngine; + +public abstract class InteractableObject : MonoBehaviour, IInteractable{ + // Attributes + public event Action OnInteractAreaExitEvent; + public event Action OnInteractAreaEnterEvent; + + // Function + public abstract void Interact(); + + public void InvokeOnInteractAreaEnterEvent(){ + OnInteractAreaEnterEvent?.Invoke(); + } + + public void InvokeOnInteractAreaExitEvent(){ + OnInteractAreaExitEvent?.Invoke(); + } +} \ No newline at end of file diff --git a/Assets/Scripts/Core/Objects/Interactables/InteractableObject.cs.meta b/Assets/Scripts/Core/Objects/Interactables/InteractableObject.cs.meta new file mode 100644 index 00000000..c0f4bcaf --- /dev/null +++ b/Assets/Scripts/Core/Objects/Interactables/InteractableObject.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 781ad64a453c24349bdd28bc5764d18d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Core/Objects/Interactables/TestInteractable.meta b/Assets/Scripts/Core/Objects/Interactables/TestInteractable.meta new file mode 100644 index 00000000..3bbaa042 --- /dev/null +++ b/Assets/Scripts/Core/Objects/Interactables/TestInteractable.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0366eb0d236cb3344a509e8d4ac8decf +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Core/Objects/Interactables/TestInteractable/TestInteractable.cs b/Assets/Scripts/Core/Objects/Interactables/TestInteractable/TestInteractable.cs new file mode 100644 index 00000000..fb7f9c47 --- /dev/null +++ b/Assets/Scripts/Core/Objects/Interactables/TestInteractable/TestInteractable.cs @@ -0,0 +1,17 @@ +using System; +using UnityEngine; + +public class TestInteractable : InteractableObject { + // Attributes + private TestInteractableAnimationController animationController; + + // Constructor + protected void Start(){ + animationController = new TestInteractableAnimationController(this); + } + + // Function + public override void Interact(){ + Debug.Log("Test Interactable interacted"); + } +} \ No newline at end of file diff --git a/Assets/Scripts/Core/Objects/Interactables/TestInteractable/TestInteractable.cs.meta b/Assets/Scripts/Core/Objects/Interactables/TestInteractable/TestInteractable.cs.meta new file mode 100644 index 00000000..9695c8ed --- /dev/null +++ b/Assets/Scripts/Core/Objects/Interactables/TestInteractable/TestInteractable.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: afc0fd7c16afe4a42a82353df9b3a73b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Core/Objects/Interactables/TestInteractable/TestInteractableAnimationController.cs b/Assets/Scripts/Core/Objects/Interactables/TestInteractable/TestInteractableAnimationController.cs new file mode 100644 index 00000000..be1a8021 --- /dev/null +++ b/Assets/Scripts/Core/Objects/Interactables/TestInteractable/TestInteractableAnimationController.cs @@ -0,0 +1,25 @@ + +using UnityEngine; + +public class TestInteractableAnimationController : AnimationController{ + // Attributes + private readonly TestInteractable testInteractable; + + // Constructor + public TestInteractableAnimationController(TestInteractable testInteractable) : base(testInteractable) { + this.testInteractable = testInteractable; + testInteractable.OnInteractAreaEnterEvent += IndicateInteractable; + testInteractable.OnInteractAreaExitEvent += IndicateUninteractable; + } + + // Functions + private void IndicateInteractable(){ + Debug.Log("Test Interactable is interactable now"); + meshRenderer.material.color = Color.yellow; + } + + private void IndicateUninteractable(){ + Debug.Log("Test Interactable is uninteractable now"); + meshRenderer.material.color = Color.white; + } +} \ No newline at end of file diff --git a/Assets/Scripts/Core/Objects/Interactables/TestInteractable/TestInteractableAnimationController.cs.meta b/Assets/Scripts/Core/Objects/Interactables/TestInteractable/TestInteractableAnimationController.cs.meta new file mode 100644 index 00000000..22d02383 --- /dev/null +++ b/Assets/Scripts/Core/Objects/Interactables/TestInteractable/TestInteractableAnimationController.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bf936058791cb07489b259780ebf9c8f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Core/Player/Player.cs b/Assets/Scripts/Core/Player/Player.cs index 36a20534..44c47ea3 100644 --- a/Assets/Scripts/Core/Player/Player.cs +++ b/Assets/Scripts/Core/Player/Player.cs @@ -30,17 +30,31 @@ public class Player : PlayerEntity { } // Functions - new void Update(){ + protected new void Update(){ base.Update(); inputController.HandleInputs(); } - new void FixedUpdate(){ + protected new void FixedUpdate(){ base.FixedUpdate(); movementController.HandleMovement(); stateController.UpdateState(); } + + protected void OnTriggerEnter(Collider otherCollider){ + otherCollider.transform.TryGetComponent<IInteractable>(out var interactable); + if(interactable == null) return; + interactable.InvokeOnInteractAreaEnterEvent(); + stateController.currentInteractables.Add(interactable); + } + + protected void OnTriggerExit(Collider otherCollider){ + otherCollider.transform.TryGetComponent<IInteractable>(out var interactable); + if(interactable == null) return; + interactable.InvokeOnInteractAreaExitEvent(); + stateController.currentInteractables.Remove(interactable); + } } diff --git a/Assets/Scripts/Core/Player/PlayerAnimationController.cs b/Assets/Scripts/Core/Player/PlayerAnimationController.cs index aefafe9b..d1ff9f09 100644 --- a/Assets/Scripts/Core/Player/PlayerAnimationController.cs +++ b/Assets/Scripts/Core/Player/PlayerAnimationController.cs @@ -11,12 +11,8 @@ public class PlayerAnimationController : AnimationController{ private readonly PlayerStateController playerStateController; // Constructor - public PlayerAnimationController(Player player){ + public PlayerAnimationController(Player player) : base(player) { this.player = player; - model = player.transform.Find("Model"); - animator = model.GetComponent<Animator>(); - meshRenderer = model.GetComponent<MeshRenderer>(); - player.stateController.OnStateChangeEvent += AnimateStates; } diff --git a/Assets/Scripts/Core/Player/PlayerInputController.cs b/Assets/Scripts/Core/Player/PlayerInputController.cs index 85e9ba17..4ebfcfcc 100644 --- a/Assets/Scripts/Core/Player/PlayerInputController.cs +++ b/Assets/Scripts/Core/Player/PlayerInputController.cs @@ -18,18 +18,21 @@ public class PlayerInputController{ movementInputZ = Input.GetAxisRaw("Vertical"); if(Input.GetKeyDown(GameInput.instance.attackButton)){ + Debug.Log("Player is Attacking"); if(player.Weapon == null) return; player.Weapon.Attack(); } else if(Input.GetKeyDown(GameInput.instance.attackAlternateButton)){ + Debug.Log("Player is Attacking (alternate)"); if(player.Weapon == null) return; player.Weapon.AttackAlternate(); } else if(Input.GetKeyDown(GameInput.instance.interactButton)){ - ObjectManager.instance.LogObjects(); - EntityManager.instance.LogObjects(); + Debug.Log("Player is interacting"); + IInteractable interactable = player.stateController.currentInteractables[player.stateController.currentInteractables.Count - 1]; + interactable.Interact(); } } } \ No newline at end of file diff --git a/Assets/Scripts/Core/Player/PlayerStateController.cs b/Assets/Scripts/Core/Player/PlayerStateController.cs index c61b8764..60cec8c2 100644 --- a/Assets/Scripts/Core/Player/PlayerStateController.cs +++ b/Assets/Scripts/Core/Player/PlayerStateController.cs @@ -1,8 +1,10 @@ +using System.Collections.Generic; using UnityEngine; public class PlayerStateController : DamageableEntityStateController { // Attributes private readonly Player player; + public List<IInteractable> currentInteractables = new(); // Contstructor public PlayerStateController(Player player) : base(player){ diff --git a/Assets/Scripts/Library/BaseClasses/Controller/AnimationController.cs b/Assets/Scripts/Library/BaseClasses/Controller/AnimationController.cs index 78afaaf4..cb89f776 100644 --- a/Assets/Scripts/Library/BaseClasses/Controller/AnimationController.cs +++ b/Assets/Scripts/Library/BaseClasses/Controller/AnimationController.cs @@ -5,4 +5,10 @@ public abstract class AnimationController { public Transform model; public MeshRenderer meshRenderer; public Animator animator; + + public AnimationController(MonoBehaviour dummy){ + model = dummy.transform.Find("Model"); + animator = model.GetComponent<Animator>(); + meshRenderer = model.GetComponent<MeshRenderer>(); + } } \ No newline at end of file diff --git a/Assets/Scripts/Library/Interfaces/IInteractable.cs b/Assets/Scripts/Library/Interfaces/IInteractable.cs new file mode 100644 index 00000000..60759163 --- /dev/null +++ b/Assets/Scripts/Library/Interfaces/IInteractable.cs @@ -0,0 +1,9 @@ +using System; + +public interface IInteractable{ + public void Interact(); + public event Action OnInteractAreaExitEvent; + public event Action OnInteractAreaEnterEvent; + public void InvokeOnInteractAreaExitEvent(); + public void InvokeOnInteractAreaEnterEvent(); +} \ No newline at end of file diff --git a/Assets/Scripts/Library/Interfaces/IInteractable.cs.meta b/Assets/Scripts/Library/Interfaces/IInteractable.cs.meta new file mode 100644 index 00000000..a379d571 --- /dev/null +++ b/Assets/Scripts/Library/Interfaces/IInteractable.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6dbba419075ee6045a2d4646d6865d36 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ProjectSettings/DynamicsManager.asset b/ProjectSettings/DynamicsManager.asset index 818c73dd..43778413 100644 --- a/ProjectSettings/DynamicsManager.asset +++ b/ProjectSettings/DynamicsManager.asset @@ -18,7 +18,7 @@ PhysicsManager: m_ClothInterCollisionDistance: 0 m_ClothInterCollisionStiffness: 0 m_ContactsGeneration: 1 - m_LayerCollisionMatrix: fffffffffff0fffffff0fffffff8fffffff0fffffff0fffffffefffffff5ffff81f0ffff41f0ffffc1f0ffff49f0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff + m_LayerCollisionMatrix: ffefffffffe0ffffffe0ffffffe0ffffffe0ffffffe0fffffffeffffffe5ffff81e0ffff41e0ffffc1e0ffff41e0ffff40e0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff m_SimulationMode: 0 m_AutoSyncTransforms: 0 m_ReuseCollisionCallbacks: 1 diff --git a/ProjectSettings/TagManager.asset b/ProjectSettings/TagManager.asset index 6cd419fc..5033ce2f 100644 --- a/ProjectSettings/TagManager.asset +++ b/ProjectSettings/TagManager.asset @@ -20,7 +20,7 @@ TagManager: - EnemyAttack - EnvironmentAttack - Collectible - - + - Interactable - - - -- GitLab