FBJoystick.cs 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. using System;
  2. using UnityEngine;
  3. namespace FBInput
  4. {
  5. public class FBJoystick : AbstractTouchElement
  6. {
  7. public Vector2 Axis { get; private set; }
  8. private void Awake()
  9. {
  10. this._radiusSqr = this.Radius * this.Radius;
  11. this._transform = base.transform;
  12. this.SetDefaultState();
  13. }
  14. protected override void OnTouchDown(Vector2 touchPosition)
  15. {
  16. this._transform.localPosition = touchPosition;
  17. this._anchor = touchPosition;
  18. this.BackgroundSprite.color = Color.white;
  19. this.ThumbSprite.color = Color.white;
  20. }
  21. protected override void OnTouchUp(Vector2 localPosition)
  22. {
  23. this.SetDefaultState();
  24. }
  25. protected override void OnTouch(Vector2 localPosition)
  26. {
  27. Vector2 vector = localPosition - this._anchor;
  28. if (vector.sqrMagnitude < this._radiusSqr)
  29. {
  30. vector /= this.Radius;
  31. }
  32. else
  33. {
  34. vector = vector.normalized;
  35. }
  36. if (vector.sqrMagnitude >= FBJoystick.DeadZoneRadiusSqr)
  37. {
  38. this.Axis = ((!base.IsActive) ? Vector2.zero : vector);
  39. }
  40. this.ThumbSprite.transform.localPosition = this.Axis * this.Radius;
  41. }
  42. private void SetDefaultState()
  43. {
  44. this.Axis = Vector2.zero;
  45. this.BackgroundSprite.color = new Color(1f, 1f, 1f, 0.5f);
  46. this.ThumbSprite.color = new Color(1f, 1f, 1f, 0.5f);
  47. }
  48. protected override bool TestTouchArea(Vector2 screenPosition)
  49. {
  50. return screenPosition.x < (float)UITools.ScreenWidth / 2f;
  51. }
  52. public static readonly float DeadZoneRadius = 0.2f;
  53. private static readonly float DeadZoneRadiusSqr = FBJoystick.DeadZoneRadius * FBJoystick.DeadZoneRadius;
  54. [SerializeField]
  55. public UISprite BackgroundSprite;
  56. [SerializeField]
  57. public UISprite ThumbSprite;
  58. [SerializeField]
  59. public float Radius;
  60. private Vector2 _anchor;
  61. private Transform _transform;
  62. private float _radiusSqr;
  63. }
  64. }