Update Joystick.cs
This commit is contained in:
@@ -6,8 +6,8 @@ using UnityEngine.EventSystems;
|
||||
|
||||
public class Joystick : MonoBehaviour, IPointerDownHandler, IDragHandler, IPointerUpHandler
|
||||
{
|
||||
public float Horizontal { get { return (snapX) ? SnapFloat(input.x, AxisOptions.Horizontal) : input.x; } }
|
||||
public float Vertical { get { return (snapY) ? SnapFloat(input.y, AxisOptions.Vertical) : input.y; } }
|
||||
public float Horizontal { get { return SnapToDiscrete(input.x); } }
|
||||
public float Vertical { get { return SnapToDiscrete(input.y); } }
|
||||
public Vector2 Direction { get { return new Vector2(Horizontal, Vertical); } }
|
||||
|
||||
public float HandleRange
|
||||
@@ -40,6 +40,7 @@ public class Joystick : MonoBehaviour, IPointerDownHandler, IDragHandler, IPoint
|
||||
private Camera cam;
|
||||
|
||||
private Vector2 input = Vector2.zero;
|
||||
private Vector2 previousSnappedInput = Vector2.zero;
|
||||
|
||||
protected virtual void Start()
|
||||
{
|
||||
@@ -60,8 +61,8 @@ public class Joystick : MonoBehaviour, IPointerDownHandler, IDragHandler, IPoint
|
||||
|
||||
public virtual void OnPointerDown(PointerEventData eventData)
|
||||
{
|
||||
previousSnappedInput = Vector2.zero;
|
||||
OnDrag(eventData);
|
||||
EventBus.Publish(new JoystickPressEvent());
|
||||
}
|
||||
|
||||
public void OnDrag(PointerEventData eventData)
|
||||
@@ -76,6 +77,18 @@ public class Joystick : MonoBehaviour, IPointerDownHandler, IDragHandler, IPoint
|
||||
FormatInput();
|
||||
HandleInput(input.magnitude, input.normalized, radius, cam);
|
||||
handle.anchoredPosition = input * radius * handleRange;
|
||||
|
||||
// Send event when value changes to -1 or 1
|
||||
Vector2 currentSnapped = new Vector2(Horizontal, Vertical);
|
||||
if ((currentSnapped.x == -1 || currentSnapped.x == 1 || currentSnapped.y == -1 || currentSnapped.y == 1) &&
|
||||
currentSnapped != previousSnappedInput)
|
||||
{
|
||||
EventBus.Publish(new JoystickPressEvent());
|
||||
}
|
||||
else if (currentSnapped == Vector2.zero && previousSnappedInput != Vector2.zero) {
|
||||
EventBus.Publish(new JoystickRealeaseEvent());
|
||||
}
|
||||
previousSnappedInput = currentSnapped;
|
||||
}
|
||||
|
||||
protected virtual void HandleInput(float magnitude, Vector2 normalised, Vector2 radius, Camera cam)
|
||||
@@ -97,6 +110,14 @@ public class Joystick : MonoBehaviour, IPointerDownHandler, IDragHandler, IPoint
|
||||
input = new Vector2(0f, input.y);
|
||||
}
|
||||
|
||||
private float SnapToDiscrete(float value)
|
||||
{
|
||||
// Snap to -1, 1, or 0
|
||||
if (value == 0)
|
||||
return 0;
|
||||
return value > 0 ? 1 : -1;
|
||||
}
|
||||
|
||||
private float SnapFloat(float value, AxisOptions snapAxis)
|
||||
{
|
||||
if (value == 0)
|
||||
@@ -135,6 +156,7 @@ public class Joystick : MonoBehaviour, IPointerDownHandler, IDragHandler, IPoint
|
||||
{
|
||||
input = Vector2.zero;
|
||||
handle.anchoredPosition = Vector2.zero;
|
||||
previousSnappedInput = Vector2.zero;
|
||||
|
||||
EventBus.Publish(new JoystickRealeaseEvent());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user