123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- using System;
- using FBInput;
- using UnityEngine;
- public class FBTouchPad : AbstractTouchElement
- {
- public Vector2 Axis { get; private set; }
- private bool _dynamicJoystickOpen
- {
- get
- {
- return R.Settings.DynamicJoystickOpen;
- }
- }
- private void Awake()
- {
- this.UpdateRadiusAndPosition();
- this._lastAnchor = new Vector2(100000f, 100000f);
- this.SetDefaultState();
- }
- protected override void OnTouchDown(Vector2 touchPosition)
- {
- if ((touchPosition - this._lastAnchor).sqrMagnitude > 4f * this._radiusSqr && this._dynamicJoystickOpen)
- {
- base.transform.localPosition = touchPosition;
- this._anchor = touchPosition;
- }
- this.BackgroundSprite.color = Color.white;
- }
- protected override void OnTouchUp(Vector2 localPosition)
- {
- this._lastAnchor = this._anchor;
- 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 >= FBTouchPad.DeadZoneRadiusSqr)
- {
- this.Axis = ((!base.IsActive) ? Vector2.zero : vector);
- float num = 57.29578f * Mathf.Atan2(this.Axis.y, this.Axis.x);
- num = (float)Mathf.RoundToInt(num / 45f) * 45f;
- this.HintHandle.rotation = Quaternion.Euler(num * Vector3.forward);
- this.HintSprite.color = Color.white;
- }
- else
- {
- this.HintSprite.color = new Color(1f, 1f, 1f, 0f);
- }
- }
- private void SetDefaultState()
- {
- this.Axis = Vector2.zero;
- this.BackgroundSprite.color = new Color(1f, 1f, 1f, 0.5f);
- this.HintSprite.color = new Color(1f, 1f, 1f, 0f);
- }
- protected override bool TestTouchArea(Vector2 screenPosition)
- {
- return (this._dynamicJoystickOpen || (screenPosition - this._anchor).sqrMagnitude <= 4f * this._radiusSqr) && screenPosition.x < (float)UITools.ScreenWidth / 2f;
- }
- public void UpdateRadiusAndPosition()
- {
- this._radius = ((!this._dynamicJoystickOpen) ? (this.Radius * 1.5f) : this.Radius);
- this._radiusSqr = this._radius * this._radius;
- base.transform.localPosition = this._defaultPosition;
- this._anchor = base.transform.localPosition;
- }
- public static readonly float DeadZoneRadius = 0.1f;
- private static readonly float DeadZoneRadiusSqr = FBTouchPad.DeadZoneRadius * FBTouchPad.DeadZoneRadius;
- [SerializeField]
- public UISprite BackgroundSprite;
- [SerializeField]
- public Transform HintHandle;
- [SerializeField]
- public UISprite HintSprite;
- [SerializeField]
- public float Radius;
- [SerializeField]
- private Vector3 _defaultPosition;
- private float _radius;
- private Vector2 _anchor;
- private Vector2 _lastAnchor;
- private float _radiusSqr;
- }
|