summaryrefslogtreecommitdiff
path: root/Assets/Thirdparty/Joystick Pack/Scripts/Base
diff options
context:
space:
mode:
authorAndrew Lee <alee14498@protonmail.com>2020-08-20 23:40:50 -0400
committerAndrew Lee <alee14498@protonmail.com>2020-08-20 23:40:50 -0400
commit3af4c218c0e70167db23a6303d2af30aff37d2fe (patch)
tree927f29edcf54ab562f40f3d1c6cb69287c7f5980 /Assets/Thirdparty/Joystick Pack/Scripts/Base
parentb6daed0af784f4e9bc13329dd87c671b06ee1c65 (diff)
downloadProject-Sandbox-3af4c218c0e70167db23a6303d2af30aff37d2fe.tar.gz
Project-Sandbox-3af4c218c0e70167db23a6303d2af30aff37d2fe.tar.bz2
Project-Sandbox-3af4c218c0e70167db23a6303d2af30aff37d2fe.zip
Removed a bunch of stuff; Changes
Diffstat (limited to 'Assets/Thirdparty/Joystick Pack/Scripts/Base')
-rw-r--r--Assets/Thirdparty/Joystick Pack/Scripts/Base/Joystick.cs150
-rw-r--r--Assets/Thirdparty/Joystick Pack/Scripts/Base/Joystick.cs.meta11
2 files changed, 161 insertions, 0 deletions
diff --git a/Assets/Thirdparty/Joystick Pack/Scripts/Base/Joystick.cs b/Assets/Thirdparty/Joystick Pack/Scripts/Base/Joystick.cs
new file mode 100644
index 0000000..656d714
--- /dev/null
+++ b/Assets/Thirdparty/Joystick Pack/Scripts/Base/Joystick.cs
@@ -0,0 +1,150 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+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 Vector2 Direction { get { return new Vector2(Horizontal, Vertical); } }
+
+ public float HandleRange
+ {
+ get { return handleRange; }
+ set { handleRange = Mathf.Abs(value); }
+ }
+
+ public float DeadZone
+ {
+ get { return deadZone; }
+ set { deadZone = Mathf.Abs(value); }
+ }
+
+ public AxisOptions AxisOptions { get { return AxisOptions; } set { axisOptions = value; } }
+ public bool SnapX { get { return snapX; } set { snapX = value; } }
+ public bool SnapY { get { return snapY; } set { snapY = value; } }
+
+ [SerializeField] private float handleRange = 1;
+ [SerializeField] private float deadZone = 0;
+ [SerializeField] private AxisOptions axisOptions = AxisOptions.Both;
+ [SerializeField] private bool snapX = false;
+ [SerializeField] private bool snapY = false;
+
+ [SerializeField] protected RectTransform background = null;
+ [SerializeField] private RectTransform handle = null;
+ private RectTransform baseRect = null;
+
+ private Canvas canvas;
+ private Camera cam;
+
+ private Vector2 input = Vector2.zero;
+
+ protected virtual void Start()
+ {
+ HandleRange = handleRange;
+ DeadZone = deadZone;
+ baseRect = GetComponent<RectTransform>();
+ canvas = GetComponentInParent<Canvas>();
+ if (canvas == null)
+ Debug.LogError("The Joystick is not placed inside a canvas");
+
+ Vector2 center = new Vector2(0.5f, 0.5f);
+ background.pivot = center;
+ handle.anchorMin = center;
+ handle.anchorMax = center;
+ handle.pivot = center;
+ handle.anchoredPosition = Vector2.zero;
+ }
+
+ public virtual void OnPointerDown(PointerEventData eventData)
+ {
+ OnDrag(eventData);
+ }
+
+ public void OnDrag(PointerEventData eventData)
+ {
+ cam = null;
+ if (canvas.renderMode == RenderMode.ScreenSpaceCamera)
+ cam = canvas.worldCamera;
+
+ Vector2 position = RectTransformUtility.WorldToScreenPoint(cam, background.position);
+ Vector2 radius = background.sizeDelta / 2;
+ input = (eventData.position - position) / (radius * canvas.scaleFactor);
+ FormatInput();
+ HandleInput(input.magnitude, input.normalized, radius, cam);
+ handle.anchoredPosition = input * radius * handleRange;
+ }
+
+ protected virtual void HandleInput(float magnitude, Vector2 normalised, Vector2 radius, Camera cam)
+ {
+ if (magnitude > deadZone)
+ {
+ if (magnitude > 1)
+ input = normalised;
+ }
+ else
+ input = Vector2.zero;
+ }
+
+ private void FormatInput()
+ {
+ if (axisOptions == AxisOptions.Horizontal)
+ input = new Vector2(input.x, 0f);
+ else if (axisOptions == AxisOptions.Vertical)
+ input = new Vector2(0f, input.y);
+ }
+
+ private float SnapFloat(float value, AxisOptions snapAxis)
+ {
+ if (value == 0)
+ return value;
+
+ if (axisOptions == AxisOptions.Both)
+ {
+ float angle = Vector2.Angle(input, Vector2.up);
+ if (snapAxis == AxisOptions.Horizontal)
+ {
+ if (angle < 22.5f || angle > 157.5f)
+ return 0;
+ else
+ return (value > 0) ? 1 : -1;
+ }
+ else if (snapAxis == AxisOptions.Vertical)
+ {
+ if (angle > 67.5f && angle < 112.5f)
+ return 0;
+ else
+ return (value > 0) ? 1 : -1;
+ }
+ return value;
+ }
+ else
+ {
+ if (value > 0)
+ return 1;
+ if (value < 0)
+ return -1;
+ }
+ return 0;
+ }
+
+ public virtual void OnPointerUp(PointerEventData eventData)
+ {
+ input = Vector2.zero;
+ handle.anchoredPosition = Vector2.zero;
+ }
+
+ protected Vector2 ScreenPointToAnchoredPosition(Vector2 screenPosition)
+ {
+ Vector2 localPoint = Vector2.zero;
+ if (RectTransformUtility.ScreenPointToLocalPointInRectangle(baseRect, screenPosition, cam, out localPoint))
+ {
+ Vector2 pivotOffset = baseRect.pivot * baseRect.sizeDelta;
+ return localPoint - (background.anchorMax * baseRect.sizeDelta) + pivotOffset;
+ }
+ return Vector2.zero;
+ }
+}
+
+public enum AxisOptions { Both, Horizontal, Vertical } \ No newline at end of file
diff --git a/Assets/Thirdparty/Joystick Pack/Scripts/Base/Joystick.cs.meta b/Assets/Thirdparty/Joystick Pack/Scripts/Base/Joystick.cs.meta
new file mode 100644
index 0000000..40806d8
--- /dev/null
+++ b/Assets/Thirdparty/Joystick Pack/Scripts/Base/Joystick.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: b9fca4100a7477741b3973b4ff2c405f
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant: