implement value-oriented inputs
This commit is contained in:
parent
b517bd6b87
commit
34d927e9e8
6 changed files with 187 additions and 17 deletions
|
@ -6,8 +6,8 @@ namespace Goldenwere.GWSU.CTRL.CHAR.Core
|
||||||
public abstract class BaseInputModule : MonoBehaviour
|
public abstract class BaseInputModule : MonoBehaviour
|
||||||
{
|
{
|
||||||
public abstract void RegisterModuleAction(BaseModuleAction _action);
|
public abstract void RegisterModuleAction(BaseModuleAction _action);
|
||||||
public abstract void RegisterModuleAction<T>(BaseModuleAction<T> _action);
|
public abstract void RegisterModuleAction<T>(BaseModuleAction<T> _action) where T : struct;
|
||||||
public abstract void UnregisterModuleAction(BaseModuleAction _action);
|
public abstract void UnregisterModuleAction(BaseModuleAction _action);
|
||||||
public abstract void UnregisterModuleAction<T>(BaseModuleAction<T> _action);
|
public abstract void UnregisterModuleAction<T>(BaseModuleAction<T> _action) where T : struct;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -37,6 +37,7 @@ namespace Goldenwere.GWSU.CTRL.CHAR.Core
|
||||||
}
|
}
|
||||||
|
|
||||||
public class BaseModuleAction<T>
|
public class BaseModuleAction<T>
|
||||||
|
where T : struct
|
||||||
{
|
{
|
||||||
[SerializeField] private ScriptableObject emitter;
|
[SerializeField] private ScriptableObject emitter;
|
||||||
[SerializeField] private Action<T> listener;
|
[SerializeField] private Action<T> listener;
|
||||||
|
|
|
@ -74,7 +74,54 @@ namespace Goldenwere.GWSU.CTRL.CHAR.InputSystemModule
|
||||||
{
|
{
|
||||||
if (TryGetReference(_action.Emitter, out InputActionReference _reference))
|
if (TryGetReference(_action.Emitter, out InputActionReference _reference))
|
||||||
{
|
{
|
||||||
|
Action<InputAction.CallbackContext> canceled = (InputAction.CallbackContext ctx) =>
|
||||||
|
{
|
||||||
|
switch (_action.Type)
|
||||||
|
{
|
||||||
|
case ModuleActionType.Held:
|
||||||
|
_action.Listener.Invoke(ctx.ReadValue<T>());
|
||||||
|
break;
|
||||||
|
case ModuleActionType.HeldOrPressed:
|
||||||
|
if (!preferToggledInputs)
|
||||||
|
{
|
||||||
|
_action.Listener.Invoke(ctx.ReadValue<T>());
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
Action<InputAction.CallbackContext> performed = (InputAction.CallbackContext ctx) =>
|
||||||
|
{
|
||||||
|
switch (_action.Type)
|
||||||
|
{
|
||||||
|
case ModuleActionType.Held:
|
||||||
|
_action.Listener.Invoke(ctx.ReadValue<T>());
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
Action<InputAction.CallbackContext> started = (InputAction.CallbackContext ctx) =>
|
||||||
|
{
|
||||||
|
switch (_action.Type)
|
||||||
|
{
|
||||||
|
case ModuleActionType.HeldOrPressed:
|
||||||
|
case ModuleActionType.Pressed:
|
||||||
|
_action.Listener.Invoke(ctx.ReadValue<T>());
|
||||||
|
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,
|
||||||
|
}
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -14,30 +14,32 @@ namespace Goldenwere.GWSU.CTRL.CHAR.InputSystemModule.SampleProject
|
||||||
private BaseModuleAction actionOnJump;
|
private BaseModuleAction actionOnJump;
|
||||||
private BaseModuleAction<Vector2> actionOnMovement;
|
private BaseModuleAction<Vector2> actionOnMovement;
|
||||||
|
|
||||||
|
private Vector2 valueMovement;
|
||||||
|
|
||||||
private void Awake()
|
private void Awake()
|
||||||
{
|
{
|
||||||
actionOnCrouch = new BaseModuleAction(OnCrouch, emitterOnCrouch, ModuleActionType.HeldOrPressed);
|
actionOnCrouch = new BaseModuleAction(OnCrouch, emitterOnCrouch, ModuleActionType.HeldOrPressed);
|
||||||
actionOnJump = new BaseModuleAction(OnJump, emitterOnJump, ModuleActionType.Pressed);
|
actionOnJump = new BaseModuleAction(OnJump, emitterOnJump, ModuleActionType.Pressed);
|
||||||
actionOnMovement = new BaseModuleAction<Vector2>(OnMovement, emitterOnJump, ModuleActionType.Held);
|
actionOnMovement = new BaseModuleAction<Vector2>(OnMovement, emitterOnMovement, ModuleActionType.Held);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnEnable()
|
private void OnEnable()
|
||||||
{
|
{
|
||||||
module.RegisterModuleAction(actionOnCrouch);
|
module.RegisterModuleAction(actionOnCrouch);
|
||||||
module.RegisterModuleAction(actionOnJump);
|
module.RegisterModuleAction(actionOnJump);
|
||||||
//module.RegisterModuleAction(actionOnMovement);
|
module.RegisterModuleAction(actionOnMovement);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnDisable()
|
private void OnDisable()
|
||||||
{
|
{
|
||||||
module.UnregisterModuleAction(actionOnCrouch);
|
module.UnregisterModuleAction(actionOnCrouch);
|
||||||
module.UnregisterModuleAction(actionOnJump);
|
module.UnregisterModuleAction(actionOnJump);
|
||||||
//module.UnregisterModuleAction(actionOnMovement);
|
module.UnregisterModuleAction(actionOnMovement);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnCrouch()
|
private void OnCrouch()
|
||||||
{
|
{
|
||||||
Debug.Log($"Crouched");
|
Debug.Log($"Crouched");
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnJump()
|
private void OnJump()
|
||||||
|
@ -47,7 +49,16 @@ namespace Goldenwere.GWSU.CTRL.CHAR.InputSystemModule.SampleProject
|
||||||
|
|
||||||
private void OnMovement(Vector2 value)
|
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 }
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -43,7 +43,7 @@ RenderSettings:
|
||||||
--- !u!157 &3
|
--- !u!157 &3
|
||||||
LightmapSettings:
|
LightmapSettings:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
serializedVersion: 12
|
serializedVersion: 11
|
||||||
m_GIWorkflowMode: 1
|
m_GIWorkflowMode: 1
|
||||||
m_GISettings:
|
m_GISettings:
|
||||||
serializedVersion: 2
|
serializedVersion: 2
|
||||||
|
@ -98,7 +98,7 @@ LightmapSettings:
|
||||||
m_TrainingDataDestination: TrainingData
|
m_TrainingDataDestination: TrainingData
|
||||||
m_LightProbeSampleCountMultiplier: 4
|
m_LightProbeSampleCountMultiplier: 4
|
||||||
m_LightingDataAsset: {fileID: 0}
|
m_LightingDataAsset: {fileID: 0}
|
||||||
m_LightingSettings: {fileID: 0}
|
m_UseShadowmask: 1
|
||||||
--- !u!196 &4
|
--- !u!196 &4
|
||||||
NavMeshSettings:
|
NavMeshSettings:
|
||||||
serializedVersion: 2
|
serializedVersion: 2
|
||||||
|
@ -118,8 +118,6 @@ NavMeshSettings:
|
||||||
manualTileSize: 0
|
manualTileSize: 0
|
||||||
tileSize: 256
|
tileSize: 256
|
||||||
accuratePlacement: 0
|
accuratePlacement: 0
|
||||||
maxJobWorkers: 0
|
|
||||||
preserveTilesOutsideBounds: 0
|
|
||||||
debug:
|
debug:
|
||||||
m_Flags: 0
|
m_Flags: 0
|
||||||
m_NavMeshData: {fileID: 0}
|
m_NavMeshData: {fileID: 0}
|
||||||
|
@ -155,6 +153,7 @@ Transform:
|
||||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||||
m_Children:
|
m_Children:
|
||||||
- {fileID: 443109687}
|
- {fileID: 443109687}
|
||||||
|
- {fileID: 350861879}
|
||||||
m_Father: {fileID: 0}
|
m_Father: {fileID: 0}
|
||||||
m_RootOrder: 2
|
m_RootOrder: 2
|
||||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
|
@ -189,6 +188,7 @@ MonoBehaviour:
|
||||||
m_Script: {fileID: 11500000, guid: 2ae55851646730b41a9efe1ad3aa3b5b, type: 3}
|
m_Script: {fileID: 11500000, guid: 2ae55851646730b41a9efe1ad3aa3b5b, type: 3}
|
||||||
m_Name:
|
m_Name:
|
||||||
m_EditorClassIdentifier:
|
m_EditorClassIdentifier:
|
||||||
|
preferToggledInputs: 0
|
||||||
--- !u!114 &20562263
|
--- !u!114 &20562263
|
||||||
MonoBehaviour:
|
MonoBehaviour:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
|
@ -217,7 +217,7 @@ MonoBehaviour:
|
||||||
m_EditorClassIdentifier:
|
m_EditorClassIdentifier:
|
||||||
m_Actions: {fileID: -944628639613478452, guid: bb0e344ec4e5dad429861af9c6ac5bab,
|
m_Actions: {fileID: -944628639613478452, guid: bb0e344ec4e5dad429861af9c6ac5bab,
|
||||||
type: 3}
|
type: 3}
|
||||||
m_NotificationBehavior: 0
|
m_NotificationBehavior: 3
|
||||||
m_UIInputModule: {fileID: 0}
|
m_UIInputModule: {fileID: 0}
|
||||||
m_DeviceLostEvent:
|
m_DeviceLostEvent:
|
||||||
m_PersistentCalls:
|
m_PersistentCalls:
|
||||||
|
@ -265,6 +265,89 @@ Transform:
|
||||||
m_Father: {fileID: 0}
|
m_Father: {fileID: 0}
|
||||||
m_RootOrder: 1
|
m_RootOrder: 1
|
||||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
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
|
--- !u!1 &443109686
|
||||||
GameObject:
|
GameObject:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
|
@ -343,7 +426,6 @@ MeshRenderer:
|
||||||
m_LightProbeUsage: 1
|
m_LightProbeUsage: 1
|
||||||
m_ReflectionProbeUsage: 1
|
m_ReflectionProbeUsage: 1
|
||||||
m_RayTracingMode: 2
|
m_RayTracingMode: 2
|
||||||
m_RayTraceProcedural: 0
|
|
||||||
m_RenderingLayerMask: 1
|
m_RenderingLayerMask: 1
|
||||||
m_RendererPriority: 0
|
m_RendererPriority: 0
|
||||||
m_Materials:
|
m_Materials:
|
||||||
|
@ -368,7 +450,6 @@ MeshRenderer:
|
||||||
m_SortingLayerID: 0
|
m_SortingLayerID: 0
|
||||||
m_SortingLayer: 0
|
m_SortingLayer: 0
|
||||||
m_SortingOrder: 0
|
m_SortingOrder: 0
|
||||||
m_AdditionalVertexStreams: {fileID: 0}
|
|
||||||
--- !u!33 &602988447
|
--- !u!33 &602988447
|
||||||
MeshFilter:
|
MeshFilter:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
|
@ -453,7 +534,6 @@ Light:
|
||||||
m_UseColorTemperature: 0
|
m_UseColorTemperature: 0
|
||||||
m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0}
|
m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0}
|
||||||
m_UseBoundingSphereOverride: 0
|
m_UseBoundingSphereOverride: 0
|
||||||
m_UseViewFrustumForShadowCasterCull: 1
|
|
||||||
m_ShadowRadius: 0
|
m_ShadowRadius: 0
|
||||||
m_ShadowAngle: 0
|
m_ShadowAngle: 0
|
||||||
--- !u!4 &863730473
|
--- !u!4 &863730473
|
||||||
|
@ -518,7 +598,6 @@ MeshRenderer:
|
||||||
m_LightProbeUsage: 1
|
m_LightProbeUsage: 1
|
||||||
m_ReflectionProbeUsage: 1
|
m_ReflectionProbeUsage: 1
|
||||||
m_RayTracingMode: 2
|
m_RayTracingMode: 2
|
||||||
m_RayTraceProcedural: 0
|
|
||||||
m_RenderingLayerMask: 1
|
m_RenderingLayerMask: 1
|
||||||
m_RendererPriority: 0
|
m_RendererPriority: 0
|
||||||
m_Materials:
|
m_Materials:
|
||||||
|
@ -543,7 +622,6 @@ MeshRenderer:
|
||||||
m_SortingLayerID: 0
|
m_SortingLayerID: 0
|
||||||
m_SortingLayer: 0
|
m_SortingLayer: 0
|
||||||
m_SortingOrder: 0
|
m_SortingOrder: 0
|
||||||
m_AdditionalVertexStreams: {fileID: 0}
|
|
||||||
--- !u!33 &1463555310
|
--- !u!33 &1463555310
|
||||||
MeshFilter:
|
MeshFilter:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
|
|
|
@ -144,6 +144,17 @@
|
||||||
"isComposite": false,
|
"isComposite": false,
|
||||||
"isPartOfComposite": true
|
"isPartOfComposite": true
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "",
|
||||||
|
"id": "c7d6f12e-584e-4cf2-8a7e-dce439e3090d",
|
||||||
|
"path": "<Gamepad>/leftStick",
|
||||||
|
"interactions": "",
|
||||||
|
"processors": "",
|
||||||
|
"groups": "",
|
||||||
|
"action": "Movement",
|
||||||
|
"isComposite": false,
|
||||||
|
"isPartOfComposite": false
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "",
|
"name": "",
|
||||||
"id": "278ae5dd-3736-406f-84da-7131d6edd649",
|
"id": "278ae5dd-3736-406f-84da-7131d6edd649",
|
||||||
|
@ -155,6 +166,17 @@
|
||||||
"isComposite": false,
|
"isComposite": false,
|
||||||
"isPartOfComposite": false
|
"isPartOfComposite": false
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "",
|
||||||
|
"id": "6f9a5303-598f-4014-83c7-ebd7aec92543",
|
||||||
|
"path": "<Gamepad>/buttonSouth",
|
||||||
|
"interactions": "",
|
||||||
|
"processors": "",
|
||||||
|
"groups": "",
|
||||||
|
"action": "Jump",
|
||||||
|
"isComposite": false,
|
||||||
|
"isPartOfComposite": false
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "",
|
"name": "",
|
||||||
"id": "ec38fa57-693b-4a36-a820-5d76df95e551",
|
"id": "ec38fa57-693b-4a36-a820-5d76df95e551",
|
||||||
|
@ -165,6 +187,17 @@
|
||||||
"action": "Crouch",
|
"action": "Crouch",
|
||||||
"isComposite": false,
|
"isComposite": false,
|
||||||
"isPartOfComposite": false
|
"isPartOfComposite": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "",
|
||||||
|
"id": "f54cf218-de33-47e3-aaa7-b3703c548fa3",
|
||||||
|
"path": "<Gamepad>/buttonEast",
|
||||||
|
"interactions": "",
|
||||||
|
"processors": "",
|
||||||
|
"groups": "",
|
||||||
|
"action": "Crouch",
|
||||||
|
"isComposite": false,
|
||||||
|
"isPartOfComposite": false
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue