123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- using System;
- using Leap.Unity.Attributes;
- using UnityEngine;
- namespace Leap.Unity
- {
- public class PinchDetector : AbstractHoldDetector
- {
- public bool IsPinching
- {
- get
- {
- return this.IsHolding;
- }
- }
- public bool DidStartPinch
- {
- get
- {
- return this.DidStartHold;
- }
- }
- public bool DidEndPinch
- {
- get
- {
- return this.DidRelease;
- }
- }
- protected virtual void OnValidate()
- {
- this.ActivateDistance = Mathf.Max(0f, this.ActivateDistance);
- this.DeactivateDistance = Mathf.Max(0f, this.DeactivateDistance);
- if (this.DeactivateDistance < this.ActivateDistance)
- {
- this.DeactivateDistance = this.ActivateDistance;
- }
- }
- protected override void ensureUpToDate()
- {
- if (Time.frameCount == this._lastUpdateFrame)
- {
- return;
- }
- this._lastUpdateFrame = Time.frameCount;
- this._didChange = false;
- Hand leapHand = this._handModel.GetLeapHand();
- if (leapHand == null || !this._handModel.IsTracked)
- {
- this.changeState(false);
- return;
- }
- this._distance = leapHand.PinchDistance * 0.001f;
- this._rotation = leapHand.Basis.CalculateRotation();
- this._position = ((leapHand.Fingers[0].TipPosition + leapHand.Fingers[1].TipPosition) * 0.5f).ToVector3();
- if (base.IsActive)
- {
- if (this._distance > this.DeactivateDistance)
- {
- this.changeState(false);
- }
- }
- else if (this._distance < this.ActivateDistance)
- {
- this.changeState(true);
- }
- if (base.IsActive)
- {
- this._lastPosition = this._position;
- this._lastRotation = this._rotation;
- this._lastDistance = this._distance;
- this._lastDirection = this._direction;
- this._lastNormal = this._normal;
- }
- if (this.ControlsTransform)
- {
- base.transform.position = this._position;
- base.transform.rotation = this._rotation;
- }
- }
- protected const float MM_TO_M = 0.001f;
- public float ActivateDistance = 0.03f;
- public float DeactivateDistance = 0.04f;
- [MinValue(0f)]
- [SerializeField]
- protected float _activatePinchDist = 0.03f;
- [MinValue(0f)]
- [SerializeField]
- protected float _deactivatePinchDist = 0.04f;
- protected bool _isPinching;
- protected float _lastPinchTime;
- protected float _lastUnpinchTime;
- protected Vector3 _pinchPos;
- protected Quaternion _pinchRotation;
- }
- }
|