12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- using System;
- using UnityEngine;
- namespace FBInput
- {
- public class FBJoystick : AbstractTouchElement
- {
- public Vector2 Axis { get; private set; }
- private void Awake()
- {
- this._radiusSqr = this.Radius * this.Radius;
- this._transform = base.transform;
- this.SetDefaultState();
- }
- protected override void OnTouchDown(Vector2 touchPosition)
- {
- this._transform.localPosition = touchPosition;
- this._anchor = touchPosition;
- this.BackgroundSprite.color = Color.white;
- this.ThumbSprite.color = Color.white;
- }
- protected override void OnTouchUp(Vector2 localPosition)
- {
- this.SetDefaultState();
- }
- protected override void OnTouch(Vector2 localPosition)
- {
- Vector2 vector = localPosition - this._anchor;
- if (vector.sqrMagnitude < this._radiusSqr)
- {
- vector /= this.Radius;
- }
- else
- {
- vector = vector.normalized;
- }
- if (vector.sqrMagnitude >= FBJoystick.DeadZoneRadiusSqr)
- {
- this.Axis = ((!base.IsActive) ? Vector2.zero : vector);
- }
- this.ThumbSprite.transform.localPosition = this.Axis * this.Radius;
- }
- private void SetDefaultState()
- {
- this.Axis = Vector2.zero;
- this.BackgroundSprite.color = new Color(1f, 1f, 1f, 0.5f);
- this.ThumbSprite.color = new Color(1f, 1f, 1f, 0.5f);
- }
- protected override bool TestTouchArea(Vector2 screenPosition)
- {
- return screenPosition.x < (float)UITools.ScreenWidth / 2f;
- }
- public static readonly float DeadZoneRadius = 0.2f;
- private static readonly float DeadZoneRadiusSqr = FBJoystick.DeadZoneRadius * FBJoystick.DeadZoneRadius;
- [SerializeField]
- public UISprite BackgroundSprite;
- [SerializeField]
- public UISprite ThumbSprite;
- [SerializeField]
- public float Radius;
- private Vector2 _anchor;
- private Transform _transform;
- private float _radiusSqr;
- }
- }
|