示例#1
0
 private void SweepForwardGesture(KinematicsTracker tracker)
 {
     if (OnSweepForward != null)
     {
         OnSweepForward(tracker);
     }
 }
示例#2
0
 private void SweepVerticalGesture(KinematicsTracker tracker)
 {
     if (OnSweepVertical != null)
     {
         OnSweepVertical(tracker);
     }
 }
示例#3
0
 private void FistCloseGesture(KinematicsTracker tracker)
 {
     if (OnCloseFist != null)
     {
         OnCloseFist(tracker);
     }
 }
示例#4
0
 private void OnDiscarded(KinematicsTracker palm)
 {
     if (GameFSM.Instance.Current.Hand.Count > HandIndex && Cmp.IsSelected)
     {
         GameFSM.Instance.StartCoroutine(DiscardCoroutine(palm.GetAverageVelocity(InputController.Instance.GestureDuration).x));
     }
 }
示例#5
0
 private void SweepSideGesture(KinematicsTracker tracker)
 {
     if (OnSweepSideways != null)
     {
         OnSweepSideways(tracker);
     }
 }
示例#6
0
 private void GestureResponse(KinematicsTracker palm)
 {
     if (touching.Contains(palm))
     {
         ChooseElementsState state = (ChooseElementsState)GameFSM.Instance.CurrentState;
         state.OnChosen(this, Choice);
     }
 }
示例#7
0
 protected override void OnExitTrigger(KinematicsTracker tracker)
 {
     base.OnExitTrigger(tracker);
     if (touching.Count == 0)
     {
         sizeTw.Target = 0.0f;
     }
 }
示例#8
0
 private void OnGestured(KinematicsTracker tracker)
 {
     if (gameObject.activeSelf && touching.Contains(tracker) &&
         GameFSM.Instance.CurrentState is ChooseToDiscardState)
     {
         GameFSM.Instance.StartCoroutine(DrawCardsCoroutine(GameFSM.Instance.Current));
     }
 }
示例#9
0
 private void OnGestured(KinematicsTracker tracker)
 {
     if (gameObject.activeSelf && touching.Contains(tracker) &&
         GameFSM.Instance.CurrentState is ChooseToDiscardState)
     {
         GameFSM.Instance.StartCoroutine(DrawCardsCoroutine(GameFSM.Instance.Current));
     }
 }
示例#10
0
    void Update()
    {
        if (DisableAllGestures)
        {
            return;
        }

        for (int i = 0; i < PalmTrackers.Length; ++i)
        {
            KinematicsTracker palmT   = PalmTrackers[i],
                              fingerT = FingerTrackers[i];
            if (palmT != null)
            {
                palmT.Debugging = Debugging;

                if (trackerCalmTime[i] <= 0.0f)
                {
                    Vector3 avgVel    = palmT.GetAverageVelocity(GestureDuration);
                    Vector3 palmPos   = palmT.PositionLogs[palmT.GetLogIndex(0)],
                            fingerPos = fingerT.PositionLogs[fingerT.GetLogIndex(0)];

                    if (Mathf.Abs(avgVel.x) >= VelThreshold)
                    {
                        SweepSideGesture(palmT);
                        trackerCalmTime[i] = CalmTime;
                    }
                    else if (Mathf.Abs(avgVel.y) >= VelThreshold)
                    {
                        SweepVerticalGesture(palmT);
                        trackerCalmTime[i] = CalmTime;
                    }
                    else if (Mathf.Abs(avgVel.z) >= VelThreshold)
                    {
                        SweepForwardGesture(palmT);
                        trackerCalmTime[i] = CalmTime;
                    }
                    else if ((Horz(palmPos) - Horz(fingerPos)).sqrMagnitude <= (FistCloseDistThreshold * FistCloseDistThreshold))
                    {
                        fistCloseTime[i] += Time.deltaTime;
                        if (fistCloseTime[i] >= CloseFistTime)
                        {
                            fistCloseTime[i]   = 0.0f;
                            trackerCalmTime[i] = CalmTime;
                            FistCloseGesture(palmT);
                        }
                    }
                }
                else
                {
                    trackerCalmTime[i] -= Time.deltaTime;
                }
            }
        }
    }
示例#11
0
    protected override void Awake()
    {
        base.Awake();

        if (HandControls == null)
        {
            Debug.LogError("'HandControls' in 'InputController' component is null!");
        }
        if (LaserPointerHandPrefab == null)
        {
            Debug.LogError("'LaserPointerHandPrefab' is null!");
        }

        HandControls.onCreateHand += (handModel =>
        {
            if (handModel.gameObject.GetComponent <RigidHand>() != null)
            {
                return;
            }

            Instantiate <GameObject>(LaserPointerHandPrefab).transform.parent = handModel.palm;

            KinematicsTracker palmTrack = handModel.palm.gameObject.AddComponent <KinematicsTracker>(),
            fingerTrack = handModel.fingers[2].bones[FingerModel.NUM_BONES - 1].gameObject.AddComponent <KinematicsTracker>();
            if (PalmTrackers[0] == null)
            {
                PalmTrackers[0] = palmTrack;
                FingerTrackers[0] = fingerTrack;
                trackerCalmTime[0] = CalmTime;
                fistCloseTime[0] = 0.0f;
            }
            else
            {
                if (PalmTrackers[1] != null)
                {
                    Debug.LogError("More than two hands!");
                }
                else
                {
                    PalmTrackers[1] = palmTrack;
                    FingerTrackers[1] = fingerTrack;
                    trackerCalmTime[1] = CalmTime;
                    fistCloseTime[1] = 0.0f;
                }
            }
        });
    }
示例#12
0
 private void OnSelected(KinematicsTracker palm)
 {
     if (touching.Contains(palm) && gameObject.activeInHierarchy && Tweenee != MyTransform &&
         GameFSM.Instance.Current.Hand.Count > HandIndex)
     {
         if (Cmp.IsSelected)
         {
             TweenTarget    = 0.0f;
             Cmp.IsSelected = false;
         }
         else
         {
             TweenTarget    = 1.0f;
             Cmp.IsSelected = true;
         }
     }
 }
    private void OnGesture(KinematicsTracker palm)
    {
        Player current = GameFSM.Instance.Current;
        if (touching.Contains(palm))
        {
            switch (ThisChoice)
            {
                case Choices.ChangeCharacters:
                    //TODO: Handle.
                    break;

                case Choices.GainEnergy:
                    current.Energy[current.SecondChar] +=
                        GameConsts.Instance.Characters[current.SecondChar].PassiveEnergyPerTurn;
                    break;

                default: throw new NotImplementedException("Unknown choice " + ThisChoice);
            }

            //TODO: Change state.
            GameFSM.Instance.CurrentState = null;
        }
    }
示例#14
0
    private void OnGesture(KinematicsTracker palm)
    {
        Player current = GameFSM.Instance.Current;

        if (touching.Contains(palm))
        {
            switch (ThisChoice)
            {
            case Choices.ChangeCharacters:
                //TODO: Handle.
                break;

            case Choices.GainEnergy:
                current.Energy[current.SecondChar] +=
                    GameConsts.Instance.Characters[current.SecondChar].PassiveEnergyPerTurn;
                break;

            default: throw new NotImplementedException("Unknown choice " + ThisChoice);
            }

            //TODO: Change state.
            GameFSM.Instance.CurrentState = null;
        }
    }
 protected override void OnEnterTrigger(KinematicsTracker tracker)
 {
     base.OnEnterTrigger(tracker);
     sizeTw.Target = 1.0f;
 }
示例#16
0
 private void OnDiscarded(KinematicsTracker palm)
 {
     if (GameFSM.Instance.Current.Hand.Count > HandIndex && Cmp.IsSelected)
     {
         GameFSM.Instance.StartCoroutine(DiscardCoroutine(palm.GetAverageVelocity(InputController.Instance.GestureDuration).x));
     }
 }
示例#17
0
 private void OnSelected(KinematicsTracker palm)
 {
     if (touching.Contains(palm) && gameObject.activeInHierarchy && Tweenee != MyTransform &&
         GameFSM.Instance.Current.Hand.Count > HandIndex)
     {
         if (Cmp.IsSelected)
         {
             TweenTarget = 0.0f;
             Cmp.IsSelected = false;
         }
         else
         {
             TweenTarget = 1.0f;
             Cmp.IsSelected = true;
         }
     }
 }
示例#18
0
 /// <summary>
 /// Reacts to a sideways sweeping gesture.
 /// </summary>
 public virtual void OnSweepSideways(KinematicsTracker palmMovement)
 {
 }
示例#19
0
 /// <summary>
 /// Reacts to a vertical sweeping gesture.
 /// </summary>
 public virtual void OnSweepVertical(KinematicsTracker palmMovement)
 {
 }
示例#20
0
 protected virtual void OnExitTrigger(KinematicsTracker tracker)
 {
 }
示例#21
0
 protected override void OnEnterTrigger(KinematicsTracker tracker)
 {
     base.OnEnterTrigger(tracker);
     sizeTw.Target = 1.0f;
 }
示例#22
0
 private Vector3 GetWorldForward(KinematicsTracker tracker)
 {
     return tracker.ForwardLogs[tracker.GetLogIndex(0)];
 }
 protected override void OnExitTrigger(KinematicsTracker tracker)
 {
     base.OnExitTrigger(tracker);
     if (touching.Count == 0)
         sizeTw.Target = 0.0f;
 }
示例#24
0
 /// <summary>
 /// Reacts to a closing fist gesture.
 /// </summary>
 public virtual void OnCloseFist(KinematicsTracker palmMovement)
 {
 }
示例#25
0
    void Start()
    {
        Hand = GetComponent<HandModel>();
        EyeCenter = transform.parent.parent.parent;

        PalmTracker = AddTrackerTo(Hand.palm.gameObject);

        FingerTrackers = new KinematicsTracker[5];
        IsFingerPointing = new bool[5];
        for (int i = 0; i < 5; ++i)
        {
            FingerTrackers[i] = AddTrackerTo(Hand, i);
            IsFingerPointing[i] = false;
        }

        mySpells = SpellConstants.Instance.Spells.Select(sp => sp.MakeCopy()).ToList();
    }
示例#26
0
 private Vector3 GetWorldPos(KinematicsTracker tracker)
 {
     return tracker.PositionLogs[tracker.GetLogIndex(0)];
 }
示例#27
0
 protected virtual void OnDuringTrigger(KinematicsTracker tracker)
 {
 }
示例#28
0
 /// <summary>
 /// Reacts to a closing fist gesture.
 /// </summary>
 public virtual void OnCloseFist(KinematicsTracker palmMovement)
 {
 }
示例#29
0
 protected virtual void OnExitTrigger(KinematicsTracker tracker)
 {
 }
示例#30
0
 /// <summary>
 /// Reacts to a forward/back sweeping gesture.
 /// </summary>
 public virtual void OnSweepForward(KinematicsTracker palmMovement)
 {
 }
示例#31
0
 /// <summary>
 /// Reacts to a forward/back sweeping gesture.
 /// </summary>
 public virtual void OnSweepForward(KinematicsTracker palmMovement)
 {
 }
示例#32
0
 protected virtual void OnDuringTrigger(KinematicsTracker tracker)
 {
 }
示例#33
0
 protected override void OnExitTrigger(KinematicsTracker tracker)
 {
     UnityEngine.Debug.Log("Exited trigger");
 }
示例#34
0
 /// <summary>
 /// Reacts to a sideways sweeping gesture.
 /// </summary>
 public virtual void OnSweepSideways(KinematicsTracker palmMovement)
 {
 }
示例#35
0
 /// <summary>
 /// Reacts to a vertical sweeping gesture.
 /// </summary>
 public virtual void OnSweepVertical(KinematicsTracker palmMovement)
 {
 }
示例#36
0
 protected override void OnExitTrigger(KinematicsTracker tracker)
 {
     UnityEngine.Debug.Log("Exited trigger");
 }