/// <summary> /// Retorna o estado de rastreamento do gesto atual /// </summary> /// <param name="esqueletoUsuario"></param> /// <returns></returns> public override TrackState Track(Skeleton esqueletoUsuario) { if (esqueletoUsuario == null) { RestartTracker(); } if (ValidPosition(esqueletoUsuario)) { Estado = TrackState.EM_EXECUCAO; if (CurrentKeyFrame.Value == KeyFrames.Last.Value) { Estado = TrackState.IDENTIFICADO; } else { if (FrameCounter >= CurrentKeyFrame.Value.QuadroLimiteInferior && FrameCounter <= CurrentKeyFrame.Value.QuadroLimiteSuperior) { NextKeyFrame(); } else if (FrameCounter < CurrentKeyFrame.Value.QuadroLimiteInferior) { Tracking(); } else if (FrameCounter > CurrentKeyFrame.Value.QuadroLimiteSuperior) { RestartTracker(); } } } else if (CurrentKeyFrame.Value.QuadroLimiteSuperior < FrameCounter) { RestartTracker(); } else { Tracking(); } var index = KeyFrames.TakeWhile(n => n != CurrentKeyFrame.Value).Count(); ConsoleLog.WriteLog("(" + index + ")" + CurrentKeyFrame.Value.PoseChave.ToString() + " / " + Estado + " / " + FrameCounter, ConsoleStatesEnum.NOTICE); return(Estado); }