From 34d927e9e8d82748ff6230b4b6b5a302eec5e1e9 Mon Sep 17 00:00:00 2001 From: Lightling Date: Mon, 11 Jul 2022 20:09:03 -0400 Subject: [PATCH] implement value-oriented inputs --- .../Character/Core/Runtime/BaseInputModule.cs | 4 +- .../Core/Runtime/BaseModuleAction.cs | 1 + .../InputSystemModule/Runtime/InputModule.cs | 47 +++++++++ .../Runtime/FakeControllerModule.cs | 21 +++- .../SampleProject/Scenes/SampleScene.unity | 98 +++++++++++++++++-- .../SampleProjectActions.inputactions | 33 +++++++ 6 files changed, 187 insertions(+), 17 deletions(-) diff --git a/Assets/Goldenwere/GWSU/Controller/Character/Core/Runtime/BaseInputModule.cs b/Assets/Goldenwere/GWSU/Controller/Character/Core/Runtime/BaseInputModule.cs index e2c77d4..ad378c7 100644 --- a/Assets/Goldenwere/GWSU/Controller/Character/Core/Runtime/BaseInputModule.cs +++ b/Assets/Goldenwere/GWSU/Controller/Character/Core/Runtime/BaseInputModule.cs @@ -6,8 +6,8 @@ namespace Goldenwere.GWSU.CTRL.CHAR.Core public abstract class BaseInputModule : MonoBehaviour { public abstract void RegisterModuleAction(BaseModuleAction _action); - public abstract void RegisterModuleAction(BaseModuleAction _action); + public abstract void RegisterModuleAction(BaseModuleAction _action) where T : struct; public abstract void UnregisterModuleAction(BaseModuleAction _action); - public abstract void UnregisterModuleAction(BaseModuleAction _action); + public abstract void UnregisterModuleAction(BaseModuleAction _action) where T : struct; } } diff --git a/Assets/Goldenwere/GWSU/Controller/Character/Core/Runtime/BaseModuleAction.cs b/Assets/Goldenwere/GWSU/Controller/Character/Core/Runtime/BaseModuleAction.cs index e9cd62c..533f4d6 100644 --- a/Assets/Goldenwere/GWSU/Controller/Character/Core/Runtime/BaseModuleAction.cs +++ b/Assets/Goldenwere/GWSU/Controller/Character/Core/Runtime/BaseModuleAction.cs @@ -37,6 +37,7 @@ namespace Goldenwere.GWSU.CTRL.CHAR.Core } public class BaseModuleAction + where T : struct { [SerializeField] private ScriptableObject emitter; [SerializeField] private Action listener; diff --git a/Assets/Goldenwere/GWSU/Controller/Character/InputSystemModule/Runtime/InputModule.cs b/Assets/Goldenwere/GWSU/Controller/Character/InputSystemModule/Runtime/InputModule.cs index e72f829..070bce8 100644 --- a/Assets/Goldenwere/GWSU/Controller/Character/InputSystemModule/Runtime/InputModule.cs +++ b/Assets/Goldenwere/GWSU/Controller/Character/InputSystemModule/Runtime/InputModule.cs @@ -74,7 +74,54 @@ namespace Goldenwere.GWSU.CTRL.CHAR.InputSystemModule { if (TryGetReference(_action.Emitter, out InputActionReference _reference)) { + Action canceled = (InputAction.CallbackContext ctx) => + { + switch (_action.Type) + { + case ModuleActionType.Held: + _action.Listener.Invoke(ctx.ReadValue()); + break; + case ModuleActionType.HeldOrPressed: + if (!preferToggledInputs) + { + _action.Listener.Invoke(ctx.ReadValue()); + } + break; + } + }; + Action performed = (InputAction.CallbackContext ctx) => + { + switch (_action.Type) + { + case ModuleActionType.Held: + _action.Listener.Invoke(ctx.ReadValue()); + break; + } + }; + Action started = (InputAction.CallbackContext ctx) => + { + switch (_action.Type) + { + case ModuleActionType.HeldOrPressed: + case ModuleActionType.Pressed: + _action.Listener.Invoke(ctx.ReadValue()); + break; + } + }; + _reference.action.canceled += canceled; + _reference.action.performed += performed; + _reference.action.started += started; + RegisteredCallbacks.Add + ( + _action.GUID, + new Callbacks + { + canceled = canceled, + performed = performed, + started = started, + } + ); } } diff --git a/Assets/Goldenwere/GWSU/Controller/Character/InputSystemModule/Samples/SampleProject/Runtime/FakeControllerModule.cs b/Assets/Goldenwere/GWSU/Controller/Character/InputSystemModule/Samples/SampleProject/Runtime/FakeControllerModule.cs index 4840ea6..507e64f 100644 --- a/Assets/Goldenwere/GWSU/Controller/Character/InputSystemModule/Samples/SampleProject/Runtime/FakeControllerModule.cs +++ b/Assets/Goldenwere/GWSU/Controller/Character/InputSystemModule/Samples/SampleProject/Runtime/FakeControllerModule.cs @@ -14,30 +14,32 @@ namespace Goldenwere.GWSU.CTRL.CHAR.InputSystemModule.SampleProject private BaseModuleAction actionOnJump; private BaseModuleAction actionOnMovement; + private Vector2 valueMovement; + private void Awake() { actionOnCrouch = new BaseModuleAction(OnCrouch, emitterOnCrouch, ModuleActionType.HeldOrPressed); actionOnJump = new BaseModuleAction(OnJump, emitterOnJump, ModuleActionType.Pressed); - actionOnMovement = new BaseModuleAction(OnMovement, emitterOnJump, ModuleActionType.Held); + actionOnMovement = new BaseModuleAction(OnMovement, emitterOnMovement, ModuleActionType.Held); } private void OnEnable() { module.RegisterModuleAction(actionOnCrouch); module.RegisterModuleAction(actionOnJump); - //module.RegisterModuleAction(actionOnMovement); + module.RegisterModuleAction(actionOnMovement); } private void OnDisable() { module.UnregisterModuleAction(actionOnCrouch); module.UnregisterModuleAction(actionOnJump); - //module.UnregisterModuleAction(actionOnMovement); + module.UnregisterModuleAction(actionOnMovement); } private void OnCrouch() { - Debug.Log($"Crouched"); + Debug.Log($"Crouched"); } private void OnJump() @@ -47,7 +49,16 @@ namespace Goldenwere.GWSU.CTRL.CHAR.InputSystemModule.SampleProject private void OnMovement(Vector2 value) { - Debug.Log($"Value was: {value}"); + valueMovement = value; + } + + private void OnGUI() + { + GUI.Label( + new Rect(10, 10, Screen.width - 10, 64), + $"{valueMovement}", + new GUIStyle { fontSize = 64 } + ); } } } diff --git a/Assets/Goldenwere/GWSU/Controller/Character/InputSystemModule/Samples/SampleProject/Scenes/SampleScene.unity b/Assets/Goldenwere/GWSU/Controller/Character/InputSystemModule/Samples/SampleProject/Scenes/SampleScene.unity index 26d67e3..884c3fc 100644 --- a/Assets/Goldenwere/GWSU/Controller/Character/InputSystemModule/Samples/SampleProject/Scenes/SampleScene.unity +++ b/Assets/Goldenwere/GWSU/Controller/Character/InputSystemModule/Samples/SampleProject/Scenes/SampleScene.unity @@ -43,7 +43,7 @@ RenderSettings: --- !u!157 &3 LightmapSettings: m_ObjectHideFlags: 0 - serializedVersion: 12 + serializedVersion: 11 m_GIWorkflowMode: 1 m_GISettings: serializedVersion: 2 @@ -98,7 +98,7 @@ LightmapSettings: m_TrainingDataDestination: TrainingData m_LightProbeSampleCountMultiplier: 4 m_LightingDataAsset: {fileID: 0} - m_LightingSettings: {fileID: 0} + m_UseShadowmask: 1 --- !u!196 &4 NavMeshSettings: serializedVersion: 2 @@ -118,8 +118,6 @@ NavMeshSettings: manualTileSize: 0 tileSize: 256 accuratePlacement: 0 - maxJobWorkers: 0 - preserveTilesOutsideBounds: 0 debug: m_Flags: 0 m_NavMeshData: {fileID: 0} @@ -155,6 +153,7 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: - {fileID: 443109687} + - {fileID: 350861879} m_Father: {fileID: 0} m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -189,6 +188,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 2ae55851646730b41a9efe1ad3aa3b5b, type: 3} m_Name: m_EditorClassIdentifier: + preferToggledInputs: 0 --- !u!114 &20562263 MonoBehaviour: m_ObjectHideFlags: 0 @@ -217,7 +217,7 @@ MonoBehaviour: m_EditorClassIdentifier: m_Actions: {fileID: -944628639613478452, guid: bb0e344ec4e5dad429861af9c6ac5bab, type: 3} - m_NotificationBehavior: 0 + m_NotificationBehavior: 3 m_UIInputModule: {fileID: 0} m_DeviceLostEvent: m_PersistentCalls: @@ -265,6 +265,89 @@ Transform: m_Father: {fileID: 0} m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &350861878 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 350861879} + - component: {fileID: 350861881} + - component: {fileID: 350861880} + m_Layer: 0 + m_Name: Camera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &350861879 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 350861878} + m_LocalRotation: {x: 0.2164396, y: 0, z: 0, w: 0.97629607} + m_LocalPosition: {x: 0, y: 3, z: -2.5} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 20562260} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 25, y: 0, z: 0} +--- !u!81 &350861880 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 350861878} + m_Enabled: 1 +--- !u!20 &350861881 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 350861878} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 --- !u!1 &443109686 GameObject: m_ObjectHideFlags: 0 @@ -343,7 +426,6 @@ MeshRenderer: m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 - m_RayTraceProcedural: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -368,7 +450,6 @@ MeshRenderer: m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} --- !u!33 &602988447 MeshFilter: m_ObjectHideFlags: 0 @@ -453,7 +534,6 @@ Light: m_UseColorTemperature: 0 m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} m_UseBoundingSphereOverride: 0 - m_UseViewFrustumForShadowCasterCull: 1 m_ShadowRadius: 0 m_ShadowAngle: 0 --- !u!4 &863730473 @@ -518,7 +598,6 @@ MeshRenderer: m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 - m_RayTraceProcedural: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -543,7 +622,6 @@ MeshRenderer: m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} --- !u!33 &1463555310 MeshFilter: m_ObjectHideFlags: 0 diff --git a/Assets/Goldenwere/GWSU/Controller/Character/InputSystemModule/Samples/SampleProject/Settings/SampleProjectActions.inputactions b/Assets/Goldenwere/GWSU/Controller/Character/InputSystemModule/Samples/SampleProject/Settings/SampleProjectActions.inputactions index 1187368..fab52d2 100644 --- a/Assets/Goldenwere/GWSU/Controller/Character/InputSystemModule/Samples/SampleProject/Settings/SampleProjectActions.inputactions +++ b/Assets/Goldenwere/GWSU/Controller/Character/InputSystemModule/Samples/SampleProject/Settings/SampleProjectActions.inputactions @@ -144,6 +144,17 @@ "isComposite": false, "isPartOfComposite": true }, + { + "name": "", + "id": "c7d6f12e-584e-4cf2-8a7e-dce439e3090d", + "path": "/leftStick", + "interactions": "", + "processors": "", + "groups": "", + "action": "Movement", + "isComposite": false, + "isPartOfComposite": false + }, { "name": "", "id": "278ae5dd-3736-406f-84da-7131d6edd649", @@ -155,6 +166,17 @@ "isComposite": false, "isPartOfComposite": false }, + { + "name": "", + "id": "6f9a5303-598f-4014-83c7-ebd7aec92543", + "path": "/buttonSouth", + "interactions": "", + "processors": "", + "groups": "", + "action": "Jump", + "isComposite": false, + "isPartOfComposite": false + }, { "name": "", "id": "ec38fa57-693b-4a36-a820-5d76df95e551", @@ -165,6 +187,17 @@ "action": "Crouch", "isComposite": false, "isPartOfComposite": false + }, + { + "name": "", + "id": "f54cf218-de33-47e3-aaa7-b3703c548fa3", + "path": "/buttonEast", + "interactions": "", + "processors": "", + "groups": "", + "action": "Crouch", + "isComposite": false, + "isPartOfComposite": false } ] }