diff options
Diffstat (limited to 'Client/Assembly-CSharp/VirtualJoystick.cs')
-rw-r--r-- | Client/Assembly-CSharp/VirtualJoystick.cs | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/Client/Assembly-CSharp/VirtualJoystick.cs b/Client/Assembly-CSharp/VirtualJoystick.cs new file mode 100644 index 0000000..25aaa72 --- /dev/null +++ b/Client/Assembly-CSharp/VirtualJoystick.cs @@ -0,0 +1,59 @@ +using System; +using UnityEngine; + +public class VirtualJoystick : MonoBehaviour, IVirtualJoystick +{ + public Vector2 Delta { get; private set; } + + public float InnerRadius = 0.64f; + + public float OuterRadius = 1.28f; + + public CircleCollider2D Outer; + + public SpriteRenderer Inner; + + private Controller myController = new Controller(); + + protected virtual void FixedUpdate() + { + this.myController.Update(); + DragState dragState = this.myController.CheckDrag(this.Outer, false); + if (dragState - DragState.TouchStart <= 1) + { + float maxLength = this.OuterRadius - this.InnerRadius; + Vector2 vector = this.myController.DragPosition - base.transform.position; + float magnitude = vector.magnitude; + Vector2 a = new Vector2(Mathf.Sqrt(Mathf.Abs(vector.x)) * Mathf.Sign(vector.x), Mathf.Sqrt(Mathf.Abs(vector.y)) * Mathf.Sign(vector.y)); + this.Delta = Vector2.ClampMagnitude(a / this.OuterRadius, 1f); + this.Inner.transform.localPosition = Vector3.ClampMagnitude(vector, maxLength) + Vector3.back; + return; + } + if (dragState != DragState.Released) + { + return; + } + this.Delta = Vector2.zero; + this.Inner.transform.localPosition = Vector3.back; + } + + public virtual void UpdateJoystick(FingerBehaviour finger, Vector2 velocity, bool syncFinger) + { + Vector3 vector = this.Inner.transform.localPosition; + Vector3 vector2 = velocity.normalized * this.InnerRadius; + vector2.z = vector.z; + if (syncFinger) + { + vector = Vector3.Lerp(vector, vector2, Time.fixedDeltaTime * 5f); + this.Inner.transform.localPosition = vector; + vector = this.Inner.transform.position; + vector.z = -26f; + finger.transform.position = vector; + return; + } + if (this.Inner.gameObject != finger.gameObject) + { + this.Inner.transform.localPosition = vector2; + } + } +} |