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; } }
bool IsFlagMatch(HandFlag left, HandFlag right, HandStateCondition condition) { return(((left & condition.Left) == left) && ((right & condition.Right) == right)); }