From 40af32939eaaa0ba6f64c50ba233657dd0b295f2 Mon Sep 17 00:00:00 2001 From: Trey Shaw Date: Wed, 25 Mar 2026 17:58:18 -0500 Subject: [PATCH] tool system with switching --- Assets/Doug.prefab | 628 +++++++++++++++++++++++++++-- Assets/Flashlight.cs | 16 + Assets/Flashlight.cs.meta | 2 + Assets/Scenes/SampleScene.unity | 17 +- Assets/Scripts/PlayerController.cs | 83 +++- Assets/Scripts/Shovel.cs | 9 +- Assets/Scripts/Tool.cs | 14 + Assets/Scripts/Tool.cs.meta | 2 + 8 files changed, 727 insertions(+), 44 deletions(-) create mode 100644 Assets/Flashlight.cs create mode 100644 Assets/Flashlight.cs.meta create mode 100644 Assets/Scripts/Tool.cs create mode 100644 Assets/Scripts/Tool.cs.meta diff --git a/Assets/Doug.prefab b/Assets/Doug.prefab index 96b4481..79ba437 100644 --- a/Assets/Doug.prefab +++ b/Assets/Doug.prefab @@ -1,5 +1,38 @@ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: +--- !u!1 &1023268663229779293 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6581087177990818461} + m_Layer: 0 + m_Name: Hand + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6581087177990818461 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1023268663229779293} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 1.083} + m_LocalScale: {x: 6.6666665, y: 2.2222223, z: 6.6666665} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 6959836037467520223} + - {fileID: 7557613548437949332} + m_Father: {fileID: 5056434560497563343} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1125603919066053951 GameObject: m_ObjectHideFlags: 0 @@ -9,6 +42,8 @@ GameObject: serializedVersion: 6 m_Component: - component: {fileID: 6959836037467520223} + - component: {fileID: 948123141231275876} + - component: {fileID: 4827837832244238221} m_Layer: 0 m_Name: Shovel m_TagString: Untagged @@ -25,13 +60,57 @@ Transform: m_GameObject: {fileID: 1125603919066053951} serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0.036, z: 1.2} - m_LocalScale: {x: 1, y: 0.33333334, z: 1} + m_LocalPosition: {x: 0, y: 0.016199952, z: 0.01755007} + m_LocalScale: {x: 0.15, y: 0.14999999, z: 0.15} m_ConstrainProportionsScale: 0 m_Children: - {fileID: 5087686311669304310} - m_Father: {fileID: 5056434560497563343} + - {fileID: 2468530988803718223} + m_Father: {fileID: 6581087177990818461} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &948123141231275876 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1125603919066053951} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 21ea1f4973209f34aa1bfb2f1dda5454, type: 3} + m_Name: + m_EditorClassIdentifier: + useTimeSec: 0 + altUseTimeSec: 0 + inUse: 0 + shovelAnimator: {fileID: 5869871001686353059} +--- !u!54 &4827837832244238221 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1125603919066053951} + serializedVersion: 5 + m_Mass: 1 + m_LinearDamping: 0 + m_AngularDamping: 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: 1 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 --- !u!1 &1916516550038109929 GameObject: m_ObjectHideFlags: 0 @@ -135,7 +214,6 @@ GameObject: - component: {fileID: 5585783075348051809} - component: {fileID: 670108961065253884} - component: {fileID: 5869871001686353059} - - component: {fileID: 1217545746741926108} m_Layer: 0 m_Name: Graphics m_TagString: Shovel @@ -259,19 +337,6 @@ Animator: m_AllowConstantClipSamplingOptimization: 1 m_KeepAnimatorStateOnDisable: 0 m_WriteDefaultValuesOnDisable: 0 ---- !u!114 &1217545746741926108 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3190285794953641333} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 21ea1f4973209f34aa1bfb2f1dda5454, type: 3} - m_Name: - m_EditorClassIdentifier: - shovelAnimator: {fileID: 5869871001686353059} --- !u!1 &4277011611965729865 GameObject: m_ObjectHideFlags: 0 @@ -298,11 +363,11 @@ Transform: m_GameObject: {fileID: 4277011611965729865} serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 2.27} - m_LocalScale: {x: 6.6666665, y: 2.2222223, z: 6.6666665} + m_LocalPosition: {x: 0, y: -0.10800043, z: 1.0700003} + m_LocalScale: {x: 6.666666, y: 6.666666, z: 6.666666} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 5056434560497563343} + m_Father: {fileID: 6959836037467520223} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &7817425351971793234 MonoBehaviour: @@ -364,6 +429,297 @@ Transform: - {fileID: 6872729306491234319} m_Father: {fileID: 5526037850913171920} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &4399772550338401164 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3607049389377970013} + - component: {fileID: 4750294420236449561} + - component: {fileID: 3242203504905187101} + - component: {fileID: 4995711197384224017} + m_Layer: 0 + m_Name: body + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3607049389377970013 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4399772550338401164} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.09949005, y: -0.05806017, z: -0.035559893} + m_LocalScale: {x: 0.32688943, y: 0.11612, z: 0.11612} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7557613548437949332} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &4750294420236449561 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4399772550338401164} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &3242203504905187101 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4399772550338401164} + 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_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + 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_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_MaskInteraction: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!65 &4995711197384224017 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4399772550338401164} + 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!1 &4520988229109227435 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7557613548437949332} + - component: {fileID: 2884873557578242522} + m_Layer: 0 + m_Name: Flashlight + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &7557613548437949332 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4520988229109227435} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: 0.6899884, z: -0, w: 0.72382045} + m_LocalPosition: {x: -0.091, y: 0.074, z: -0.027511} + m_LocalScale: {x: 0.51386, y: 0.51386, z: 0.51386} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 3607049389377970013} + - {fileID: 8289196538023342208} + - {fileID: 7936160325569085957} + - {fileID: 892315111995737186} + m_Father: {fileID: 6581087177990818461} + m_LocalEulerAnglesHint: {x: 0, y: 87.258, z: 0} +--- !u!114 &2884873557578242522 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4520988229109227435} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: edd0364a446d1fd489dd8bbb53de613a, type: 3} + m_Name: + m_EditorClassIdentifier: Assembly-CSharp::Flashlight + useTimeSec: 0 + altUseTimeSec: 0 + inUse: 0 + lightSrc: {fileID: 2715587763268303228} +--- !u!1 &4672178086213347511 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8289196538023342208} + - component: {fileID: 2715587763268303228} + - component: {fileID: 7534668295693810183} + m_Layer: 0 + m_Name: Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8289196538023342208 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4672178086213347511} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -0.68998605, z: 0, w: 0.7238227} + m_LocalPosition: {x: -0.08640012, y: -0.058060054, z: -0.035559893} + m_LocalScale: {x: 1.9460555, y: 1.9460558, z: 1.9460548} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7557613548437949332} + m_LocalEulerAnglesHint: {x: 0, y: -87.258, z: 0} +--- !u!108 &2715587763268303228 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4672178086213347511} + m_Enabled: 1 + serializedVersion: 12 + m_Type: 0 + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_Intensity: 1 + m_Range: 4 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.80208 + m_CookieSize2D: {x: 0.5, y: 0.5} + m_Shadows: + m_Type: 0 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_UseViewFrustumForShadowCasterCull: 1 + m_ForceVisible: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 + m_LightUnit: 1 + m_LuxAtDistance: 1 + m_EnableSpotReflector: 1 +--- !u!114 &7534668295693810183 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4672178086213347511} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 474bcb49853aa07438625e644c072ee6, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.RenderPipelines.Universal.Runtime::UnityEngine.Rendering.Universal.UniversalAdditionalLightData + m_UsePipelineSettings: 1 + m_AdditionalLightsShadowResolutionTier: 2 + m_CustomShadowLayers: 0 + m_LightCookieSize: {x: 1, y: 1} + m_LightCookieOffset: {x: 0, y: 0} + m_SoftShadowQuality: 0 + m_RenderingLayersMask: + serializedVersion: 0 + m_Bits: 1 + m_ShadowRenderingLayersMask: + serializedVersion: 0 + m_Bits: 1 + m_Version: 4 + m_LightLayerMask: 1 + m_ShadowLayerMask: 1 + m_RenderingLayers: 1 + m_ShadowRenderingLayers: 1 --- !u!1 &5784121484016646142 GameObject: m_ObjectHideFlags: 0 @@ -532,8 +888,7 @@ Transform: m_LocalScale: {x: 1, y: 3, z: 1} m_ConstrainProportionsScale: 0 m_Children: - - {fileID: 6959836037467520223} - - {fileID: 2468530988803718223} + - {fileID: 6581087177990818461} m_Father: {fileID: 5526037850913171920} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!33 &307011212944932494 @@ -593,6 +948,118 @@ MeshRenderer: m_SortingOrder: 0 m_MaskInteraction: 0 m_AdditionalVertexStreams: {fileID: 0} +--- !u!1 &6442667867807280322 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7936160325569085957} + - component: {fileID: 2363399320178166799} + - component: {fileID: 1511884288047282703} + - component: {fileID: 2980056174314669725} + m_Layer: 0 + m_Name: top + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7936160325569085957 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6442667867807280322} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.0864, y: -0.05806017, z: -0.035559893} + m_LocalScale: {x: 0.1313874, y: 0.15512471, z: 0.15512471} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7557613548437949332} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &2363399320178166799 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6442667867807280322} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1511884288047282703 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6442667867807280322} + 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_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + 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_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_MaskInteraction: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!65 &2980056174314669725 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6442667867807280322} + 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!1 &9054701043111961555 GameObject: m_ObjectHideFlags: 0 @@ -643,8 +1110,11 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: DougBody: {fileID: 6233083279635182816} - Shovel: {fileID: 1217545746741926108} + tools: + - {fileID: 948123141231275876} + - {fileID: 2884873557578242522} walkSpeed: 2 + sprintMultiplier: 1.5 gravity: 10 --- !u!114 &5478143440182735446 MonoBehaviour: @@ -696,3 +1166,115 @@ CharacterController: m_SkinWidth: 0.03 m_MinMoveDistance: 0.001 m_Center: {x: 0, y: -0.51, z: 0} +--- !u!1 &9105254285813222465 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 892315111995737186} + - component: {fileID: 4763897214437240128} + - component: {fileID: 2333020697873716876} + - component: {fileID: 1929639563888177600} + m_Layer: 0 + m_Name: button + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &892315111995737186 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9105254285813222465} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.046, y: -0.022, z: -0.035559893} + m_LocalScale: {x: 0.036128603, y: 0.072857425, z: 0.022073613} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7557613548437949332} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &4763897214437240128 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9105254285813222465} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &2333020697873716876 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9105254285813222465} + 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_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + 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_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_MaskInteraction: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!65 &1929639563888177600 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9105254285813222465} + 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} diff --git a/Assets/Flashlight.cs b/Assets/Flashlight.cs new file mode 100644 index 0000000..3fb0a67 --- /dev/null +++ b/Assets/Flashlight.cs @@ -0,0 +1,16 @@ +using UnityEngine; + +public class Flashlight : Tool +{ + public Light lightSrc; + + public override void Use() + { + lightSrc.enabled = !lightSrc.enabled; + } + + public override void UseAlt() + { + + } +} diff --git a/Assets/Flashlight.cs.meta b/Assets/Flashlight.cs.meta new file mode 100644 index 0000000..b2df0c2 --- /dev/null +++ b/Assets/Flashlight.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: edd0364a446d1fd489dd8bbb53de613a \ No newline at end of file diff --git a/Assets/Scenes/SampleScene.unity b/Assets/Scenes/SampleScene.unity index 09ca600..7821280 100644 --- a/Assets/Scenes/SampleScene.unity +++ b/Assets/Scenes/SampleScene.unity @@ -4281,6 +4281,17 @@ Transform: m_Children: [] m_Father: {fileID: 1055802463} m_LocalEulerAnglesHint: {x: 0, y: 90, z: 0} +--- !u!114 &1095744520 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 1217545746741926108, guid: 0fd9b22e9158e474a96c42de5ee0d85f, type: 3} + m_PrefabInstance: {fileID: 5777350187431524276} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 21ea1f4973209f34aa1bfb2f1dda5454, type: 3} + m_Name: + m_EditorClassIdentifier: --- !u!1 &1114011169 GameObject: m_ObjectHideFlags: 0 @@ -8391,10 +8402,10 @@ PrefabInstance: serializedVersion: 3 m_TransformParent: {fileID: 0} m_Modifications: - - target: {fileID: 5412473048133157928, guid: 0fd9b22e9158e474a96c42de5ee0d85f, type: 3} - propertyPath: blackScreenObject + - target: {fileID: 1480974628599415149, guid: 0fd9b22e9158e474a96c42de5ee0d85f, type: 3} + propertyPath: activeTool value: - objectReference: {fileID: 1047025329} + objectReference: {fileID: 1095744520} - target: {fileID: 5526037850913171920, guid: 0fd9b22e9158e474a96c42de5ee0d85f, type: 3} propertyPath: m_LocalPosition.x value: -0.60945 diff --git a/Assets/Scripts/PlayerController.cs b/Assets/Scripts/PlayerController.cs index 8105223..33c39a5 100644 --- a/Assets/Scripts/PlayerController.cs +++ b/Assets/Scripts/PlayerController.cs @@ -5,15 +5,16 @@ public class PlayerController : MonoBehaviour { public GameObject DougBody; - public Shovel Shovel; + + public Tool[] tools; + + int activeToolIndex; + float toolUseTimestamp = 0; + public float walkSpeed; public float sprintMultiplier = 1.5f; public float gravity = 10; - float digTime = 0.9f; - float digTimestamp = 0; - bool isDigging = false; - Interactable nearestInteractable; private CharacterController characterController; private CameraController cameraController; @@ -24,6 +25,7 @@ public class PlayerController : MonoBehaviour // Start is called once before the first execution of Update after the MonoBehaviour is created void Start() { + activeToolIndex = 0; characterController = GetComponent(); cameraController = GetComponent(); } @@ -35,13 +37,13 @@ void Update() if (hasControl) { - if (!isDigging) + if (!tools[activeToolIndex].inUse) { RotatePlayerTowardMouse(); TryInteract(); } - DigDetector(); + ToolUseDetector(); ApplyWalk(); // TODO: This is just for testing, remove or clean up if used @@ -57,6 +59,7 @@ void Update() } } + CheckWeaponChange(); CheckSprint(); ApplyGravity(); DoMovement(); @@ -77,6 +80,21 @@ private void CheckSprint() } } + /// + /// Checks if weapon is being switched by scroll wheel + /// + private void CheckWeaponChange() + { + if (Input.mouseScrollDelta.y > 0) + { + SwitchTools(true); + } + else if (Input.mouseScrollDelta.y < 0) + { + SwitchTools(false); + } + } + /// /// Apply walking inputs to moveDir /// @@ -85,7 +103,7 @@ void ApplyWalk() float verticalMovement = 0; float horizontalMovement = 0; - if (!isDigging) + if (!tools[activeToolIndex].inUse) { verticalMovement = Input.GetAxisRaw("Vertical"); horizontalMovement = Input.GetAxisRaw("Horizontal"); @@ -151,24 +169,30 @@ public void WalkInDirection(Vector3 direction) } /// - /// Detect input for digging (will eventually be tool agnostic) + /// Detect input for tool use /// - void DigDetector() + void ToolUseDetector() { - if (!isDigging) + if (!tools[activeToolIndex].inUse) { if (Input.GetMouseButtonDown(0)) { - Shovel.Dig(); - isDigging = true; - digTimestamp = Time.time + digTime; // fuck coroutines fr fr + tools[activeToolIndex].Use(); + tools[activeToolIndex].inUse = true; + toolUseTimestamp = Time.time + tools[activeToolIndex].useTimeSec; // fuck coroutines fr fr + } + else if (Input.GetMouseButtonDown(1)) + { + tools[activeToolIndex].UseAlt(); + tools[activeToolIndex].inUse = true; + toolUseTimestamp = Time.time + tools[activeToolIndex].altUseTimeSec; } } else { - if (Time.time > digTimestamp) + if (Time.time > toolUseTimestamp) { - isDigging = false; + tools[activeToolIndex].inUse = false; } } } @@ -244,4 +268,31 @@ public bool GetCharacterHasControl() { return hasControl; } + + /// + /// Switches the tools in hand. + /// + /// Are we moving up (-1) the list? + /// + private void SwitchTools(bool up) + { + // calculate index of next tool + int newIndex = up ? activeToolIndex - 1 : activeToolIndex + 1; + + if (newIndex < 0) + { + newIndex = tools.Length + newIndex; + } + else if (newIndex >= tools.Length) + { + newIndex = newIndex % tools.Length; + } + + // disable current tool + tools[activeToolIndex].gameObject.SetActive(false); + + // load new tool + activeToolIndex = newIndex; + tools[activeToolIndex].gameObject.SetActive(true); + } } diff --git a/Assets/Scripts/Shovel.cs b/Assets/Scripts/Shovel.cs index 3149ae2..d6295f6 100644 --- a/Assets/Scripts/Shovel.cs +++ b/Assets/Scripts/Shovel.cs @@ -1,14 +1,19 @@ using UnityEngine; -public class Shovel : MonoBehaviour +public class Shovel : Tool { public Animator shovelAnimator; - public void Dig() + public override void Use() { shovelAnimator.SetTrigger("Dig"); } + public override void UseAlt() + { + // no tool + } + // this only works if this script is sitting on the object with the collider!! private void OnTriggerEnter(Collider other) { diff --git a/Assets/Scripts/Tool.cs b/Assets/Scripts/Tool.cs new file mode 100644 index 0000000..ecd21b6 --- /dev/null +++ b/Assets/Scripts/Tool.cs @@ -0,0 +1,14 @@ +using UnityEngine; + +public abstract class Tool : MonoBehaviour +{ + public float useTimeSec; + public float altUseTimeSec; + public bool inUse; + + // primary (left click) + public abstract void Use(); + + // secondary (right click) + public abstract void UseAlt(); +} diff --git a/Assets/Scripts/Tool.cs.meta b/Assets/Scripts/Tool.cs.meta new file mode 100644 index 0000000..dd483f9 --- /dev/null +++ b/Assets/Scripts/Tool.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 72d72769aaaeff0479ea6b811b94d1df \ No newline at end of file