Merge branch 'main' of https://homelab.tailf7f81b.ts.net/tschesky/AppleHillsProduction
This commit is contained in:
@@ -41,7 +41,7 @@
|
|||||||
"name": "",
|
"name": "",
|
||||||
"id": "f3dcd77f-15e5-4621-af67-001e6b08e3e6",
|
"id": "f3dcd77f-15e5-4621-af67-001e6b08e3e6",
|
||||||
"path": "<Touchscreen>/Press",
|
"path": "<Touchscreen>/Press",
|
||||||
"interactions": "",
|
"interactions": "Hold",
|
||||||
"processors": "",
|
"processors": "",
|
||||||
"groups": "",
|
"groups": "",
|
||||||
"action": "TouchPress",
|
"action": "TouchPress",
|
||||||
|
|||||||
@@ -10,6 +10,8 @@ public class InputManager : MonoBehaviour
|
|||||||
private InputAction touchPositionAction;
|
private InputAction touchPositionAction;
|
||||||
private ITouchInputConsumer defaultConsumer;
|
private ITouchInputConsumer defaultConsumer;
|
||||||
|
|
||||||
|
private bool isTouchHeld = false;
|
||||||
|
|
||||||
void Awake()
|
void Awake()
|
||||||
{
|
{
|
||||||
if (Instance != null && Instance != this)
|
if (Instance != null && Instance != this)
|
||||||
@@ -33,7 +35,10 @@ public class InputManager : MonoBehaviour
|
|||||||
void OnEnable()
|
void OnEnable()
|
||||||
{
|
{
|
||||||
if (touchPressAction != null)
|
if (touchPressAction != null)
|
||||||
touchPressAction.performed += OnTouchPressPerformed;
|
{
|
||||||
|
touchPressAction.started += OnTouchPressStarted;
|
||||||
|
touchPressAction.canceled += OnTouchPressCanceled;
|
||||||
|
}
|
||||||
if (touchPositionAction != null)
|
if (touchPositionAction != null)
|
||||||
touchPositionAction.performed += OnTouchPositionPerformed;
|
touchPositionAction.performed += OnTouchPositionPerformed;
|
||||||
}
|
}
|
||||||
@@ -41,7 +46,10 @@ public class InputManager : MonoBehaviour
|
|||||||
void OnDisable()
|
void OnDisable()
|
||||||
{
|
{
|
||||||
if (touchPressAction != null)
|
if (touchPressAction != null)
|
||||||
touchPressAction.performed -= OnTouchPressPerformed;
|
{
|
||||||
|
touchPressAction.started -= OnTouchPressStarted;
|
||||||
|
touchPressAction.canceled -= OnTouchPressCanceled;
|
||||||
|
}
|
||||||
if (touchPositionAction != null)
|
if (touchPositionAction != null)
|
||||||
touchPositionAction.performed -= OnTouchPositionPerformed;
|
touchPositionAction.performed -= OnTouchPositionPerformed;
|
||||||
}
|
}
|
||||||
@@ -51,20 +59,49 @@ public class InputManager : MonoBehaviour
|
|||||||
defaultConsumer = consumer;
|
defaultConsumer = consumer;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnTouchPressPerformed(InputAction.CallbackContext ctx)
|
private void OnTouchPressStarted(InputAction.CallbackContext ctx)
|
||||||
{
|
{
|
||||||
// For button actions, you may want to use InputValue or just handle the event
|
// Touch started (finger down)
|
||||||
// If you need position, you can read it from touchPositionAction
|
isTouchHeld = true;
|
||||||
Vector3 _screenPos = Camera.main.ScreenToWorldPoint(touchPositionAction.ReadValue<Vector2>());
|
Vector3 _screenPos = Camera.main.ScreenToWorldPoint(touchPositionAction.ReadValue<Vector2>());
|
||||||
Vector2 screenPos = new Vector2(_screenPos.x, _screenPos.y);
|
Vector2 screenPos = new Vector2(_screenPos.x, _screenPos.y);
|
||||||
if (!TryDelegateToInteractable(screenPos))
|
if (!TryDelegateToInteractable(screenPos))
|
||||||
defaultConsumer?.OnTouchPress(screenPos);
|
defaultConsumer?.OnTouchPress(screenPos);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void OnTouchPressCanceled(InputAction.CallbackContext ctx)
|
||||||
|
{
|
||||||
|
// Touch released (finger up)
|
||||||
|
isTouchHeld = false;
|
||||||
|
// Optionally, you can notify consumers of release if needed
|
||||||
|
}
|
||||||
|
|
||||||
private void OnTouchPositionPerformed(InputAction.CallbackContext ctx)
|
private void OnTouchPositionPerformed(InputAction.CallbackContext ctx)
|
||||||
{
|
{
|
||||||
Vector2 pos = ctx.ReadValue<Vector2>();
|
Vector2 pos = ctx.ReadValue<Vector2>();
|
||||||
defaultConsumer?.OnTouchPosition(pos);
|
if (isTouchHeld)
|
||||||
|
{
|
||||||
|
// Convert to world position
|
||||||
|
Vector3 worldPos = Camera.main.ScreenToWorldPoint(pos);
|
||||||
|
Vector2 worldPos2D = new Vector2(worldPos.x, worldPos.y);
|
||||||
|
defaultConsumer?.OnTouchPress(worldPos2D); // Move continuously to finger position
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
defaultConsumer?.OnTouchPosition(pos); // For drag or hover
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Update()
|
||||||
|
{
|
||||||
|
// Continuously advertise the last touch position while held
|
||||||
|
if (isTouchHeld && touchPositionAction != null)
|
||||||
|
{
|
||||||
|
Vector2 pos = touchPositionAction.ReadValue<Vector2>();
|
||||||
|
Vector3 worldPos = Camera.main.ScreenToWorldPoint(pos);
|
||||||
|
Vector2 worldPos2D = new Vector2(worldPos.x, worldPos.y);
|
||||||
|
defaultConsumer?.OnTouchPress(worldPos2D);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private bool TryDelegateToInteractable(Vector2 worldPos)
|
private bool TryDelegateToInteractable(Vector2 worldPos)
|
||||||
|
|||||||
Reference in New Issue
Block a user