a#5.0.0f4ū˙˙˙s˙8-l'€Ŗæ„hŒÎA,Œ€7€˙˙˙˙€Ļ€˛€Õ€ Ū€.€†€Ä€ Ū€.€H€Ģ€˙˙˙˙€1€1€˙˙˙˙ @Ū€€ Q€j€ H€ę€˙˙˙˙ €1€1€˙˙˙˙ @Ū€€Q€j€ņ€(˙˙˙˙€1€1€˙˙˙˙€Ū€€€j€˙˙˙˙€H€›€˙˙˙˙€1€1€˙˙˙˙@Ū€€Q€j€y€ € Ū€.€y€< Ū€.€Ū€CH€T˙˙˙˙€1€1€˙˙˙˙ @Ū€€!Q€j€"H€`˙˙˙˙#€1€1€˙˙˙˙$@Ū€€%Q€j€&H€l˙˙˙˙'€1€1€˙˙˙˙(@Ū€€)Q€j€*L€{+PPtrm_FileIDm_PathIDm_DefaultReferencesm_Iconm_ExecutionOrderm_ClassNamem_Namespacem_AssemblyNamem_IsEditorScriptČ0ÅōÃôL.`?^Ų0D7€˙˙˙˙€Ļ€˛€Ѐπππ#Ļ€+H€3˙˙˙˙€1€1€˙˙˙˙@Ū€€ Q€j€ ™€< Ļ€H H€Z˙˙˙˙ €1€1€˙˙˙˙@Ū€€Q€j€Ѐgπππ#Ļ€+v~ € €– €Ÿ €¨ €ą €ē €Ã €Ė €Õ €Ū  €į! €ņ" €û# €$ €% €&Õ€#˙˙˙˙'€1€1€˙˙˙˙(€Ū€€)H€j€˙˙˙˙*€1€1€˙˙˙˙+@Ū€€,Q€j€-™€*.Ū€8/AssetMetaDataguiddata[0]data[1]data[2]data[3]pathNametimeCreatedoriginalChangesetoriginalNameoriginalParentHash128originalDigestbytes[0]bytes[1]bytes[2]bytes[3]bytes[4]bytes[5]bytes[6]bytes[7]bytes[8]bytes[9]bytes[10]bytes[11]bytes[12]bytes[13]bytes[14]bytes[15]labelsassetStoreReflicenseType z{ī@îČã5^(H'7€˙˙˙˙€Ļ€˛€ Õ€ Ū€#.€,†€Ä€ Ū€#.€,H€Ģ€˙˙˙˙€1€1€˙˙˙˙ @Ū€€ Q€j€ Õ€5˙˙˙˙ €1€1€˙˙˙˙ €Ū€€€j€˙˙˙˙€H€›€˙˙˙˙€1€1€˙˙˙˙@Ū€€Q€j€y€ € Ū€#.€, €I@ž€X @Ū€#.€,H€]˙˙˙˙€1€1€˙˙˙˙@Ū€€Q€j€H€h˙˙˙˙€1€1€˙˙˙˙ @Ū€€!Q€j€"H€z˙˙˙˙#€1€1€˙˙˙˙$@Ū€€%Q€j€&MonoImporterPPtrm_FileIDm_PathIDm_DefaultReferencesexecutionOrdericonm_UserDatam_AssetBundleNamem_AssetBundleVariantŒ˙˙@  ˙˙āy¯ĐÍss˙˙KgŠvėJPœŽžG˜|1Assets/LeapMotion+OVR/SystemWipe/QuickSwitcher.cs QuickSwitcherQusing UnityEngine; using UnityEngine.UI; using System.Collections; public class QuickSwitcher : MonoBehaviour { public bool m_enabled = false; [SerializeField] private HandController m_handController; [SerializeField] private float m_minProgressToStartTransition; [SerializeField] private float m_percentageToLockTransition; [SerializeField] private Vector3 m_wipeOutPosition; [SerializeField] private LeapImageRetriever m_imageRetriever; private Vector3 m_startPosition; private enum TransitionState { ON, OFF, MANUAL, TWEENING }; private TransitionState m_currentTransitionState; // Know what the last locked state was so we know what we're transitioning to. private TransitionState m_lastLockedState; // Where are we transitioning to and from private Vector3 m_from; private Vector3 m_to; private delegate void TweenCompleteDelegate(); // Use this for initialization void Start () { m_startPosition = transform.localPosition; m_wipeOutPosition = m_startPosition + m_wipeOutPosition; m_from = m_startPosition; m_to = m_wipeOutPosition; m_lastLockedState = TransitionState.ON; SystemWipeRecognizerListener.Instance.SystemWipeUpdate += onWipeUpdate; TweenToOffPosition(); } // Update is called once per frame void Update () { } private void onWipeUpdate(object sender, SystemWipeArgs eventArgs) { if ( !m_enabled ) { return; } string debugLine = "Debug"; if ( eventArgs.WipeInfo.Status == Leap.Util.Status.SwipeAbort ) { debugLine += " | Abort"; // If the user aborts, tween back to original location if ( m_lastLockedState == TransitionState.ON ) { TweenToOnPosition(); } else { TweenToOffPosition(); } } if ( m_currentTransitionState == TransitionState.MANUAL ) { debugLine += " | Manual Control"; float percentage = Mathf.Clamp01(eventArgs.WipeInfo.Progress); debugLine += ": " + percentage; transform.localPosition = Vector3.Lerp(m_from, m_to, percentage); // If we're sure of the gesture, just go make the transition if ( percentage >= m_percentageToLockTransition ) { debugLine += " | Transition Cofirmed"; if ( m_lastLockedState == TransitionState.OFF ) { TweenToOnPosition(); } else { TweenToOffPosition(); } } } else if ( m_currentTransitionState == TransitionState.TWEENING ) { debugLine += " | Currently Tweening"; //Debug.Log(debugLine); return; } else { // We're either on or off debugLine += " | Locked"; if ( eventArgs.WipeInfo.Progress >= m_minProgressToStartTransition ) { debugLine += " | Go To Manual"; m_currentTransitionState = TransitionState.MANUAL; } } //Debug.Log(debugLine); } private void onOnPosition() { //Debug.Log("onOnPosition"); m_currentTransitionState = TransitionState.ON; m_lastLockedState = TransitionState.ON; m_from = m_startPosition; m_to = m_wipeOutPosition; m_handController.gameObject.SetActive(false); } private void onOffPosition() { //Debug.Log("onOffPosition"); m_currentTransitionState = TransitionState.OFF; m_lastLockedState = TransitionState.OFF; m_from = m_wipeOutPosition; m_to = m_startPosition; if ( m_imageRetriever != null ) { m_imageRetriever.doUpdate = false; } else { Debug.LogError("No image retreiver on: " + gameObject.name); } m_handController.gameObject.SetActive(true); } public void TweenToOnPosition() { //Debug.Log("tweenToOnPosition"); m_imageRetriever.doUpdate = true; StopAllCoroutines(); StartCoroutine(doPositionTween(0.0f, 0.1f, onOnPosition)); } public void TweenToOffPosition() { // Debug.Log("tweenToOffPosition"); StopAllCoroutines(); StartCoroutine(doPositionTween(1.0f, 0.1f, onOffPosition)); } public void TweenToPosition(float percentage, float time = 0.4f) { m_currentTransitionState = TransitionState.TWEENING; StopAllCoroutines(); StartCoroutine(doPositionTween(percentage, time)); } private IEnumerator doPositionTween(float goalPercent, float transitionTime, TweenCompleteDelegate onComplete = null) { // Debug.Log("doPositionTween: " + goalPercent); float startTime = Time.time; Vector3 from = transform.localPosition; Vector3 to = Vector3.Lerp(m_startPosition, m_wipeOutPosition, goalPercent); while ( true ) { float percentage = Mathf.Clamp01((Time.time - startTime)/transitionTime); // Debug.Log("Tween step: " + percentage); transform.localPosition = Vector3.Lerp(from, to, percentage); // Kick out of the loop if we're done if ( percentage == 1 ) { break; } else { // otherwise continue yield return 1; } } if ( onComplete != null ) { onComplete(); } } } QuickSwitcherAssembly-CSharp.dll