Пример #1
0
        void Update()
        {
            HandFlag LeftFlag  = GetFlag(GestureProvider.LeftHand);
            HandFlag RightFlag = GetFlag(GestureProvider.RightHand);

            if ((ResetCondition.LeftHandMissing && LeftFlag == HandFlag.NoHand) ||
                (ResetCondition.RightHandMissing && RightFlag == HandFlag.NoHand))
            {
                SetState(0);
                MissingCounter      = 0;
                PrepareMatchCounter = PrepareCondition.MinMatchFrames;
            }
            else if (IsFlagMatch(LeftFlag, RightFlag, PrepareCondition))
            {
                if (PrepareMatchCounter > 0)
                {
                    PrepareMatchCounter--;
                }
                else
                {
                    SetState(1);
                    MissingCounter      = PrepareCondition.MaxMissingFrames;
                    PrepareMatchCounter = 0;
                    TriggerMatchCounter = TriggerCondition.MinMatchFrames;
                }
            }
            else if (state != 0 && IsFlagMatch(LeftFlag, RightFlag, TriggerCondition))
            {
                if (TriggerMatchCounter > 0)
                {
                    TriggerMatchCounter--;
                }
                else
                {
                    SetState(2);
                    MissingCounter      = TriggerCondition.MaxMissingFrames;
                    TriggerMatchCounter = 0;
                    PrepareMatchCounter = PrepareCondition.MinMatchFrames;
                }
            }
            else if (MissingCounter > 0)
            {
                MissingCounter--;
            }
            else
            {
                SetState(0);
                MissingCounter      = 0;
                PrepareMatchCounter = PrepareCondition.MinMatchFrames;
            }
        }
Пример #2
0
 bool IsFlagMatch(HandFlag left, HandFlag right, HandStateCondition condition)
 {
     return(((left & condition.Left) == left) && ((right & condition.Right) == right));
 }