예제 #1
0
void updateUserState(const nite::UserData& user, uint64_t ts)
{
	if (user.isNew())
	{
		USER_MESSAGE("New");
	}
	else if (user.isVisible() && !g_visibleUsers[user.getId()])
		printf("[%08" PRIu64 "] User #%d:\tVisible\n", ts, user.getId());
	else if (!user.isVisible() && g_visibleUsers[user.getId()])
		printf("[%08" PRIu64 "] User #%d:\tOut of Scene\n", ts, user.getId());
	else if (user.isLost())
	{
		USER_MESSAGE("Lost");
	}
	g_visibleUsers[user.getId()] = user.isVisible();


	if(g_skeletonStates[user.getId()] != user.getSkeleton().getState())
	{
		switch(g_skeletonStates[user.getId()] = user.getSkeleton().getState())
		{
		case nite::SKELETON_NONE:
			USER_MESSAGE("Stopped tracking.")
			break;
		case nite::SKELETON_CALIBRATING:
			USER_MESSAGE("Calibrating...")
			break;
		case nite::SKELETON_TRACKED:
			USER_MESSAGE("Tracking!")
			break;
		case nite::SKELETON_CALIBRATION_ERROR_NOT_IN_POSE:
		case nite::SKELETON_CALIBRATION_ERROR_HANDS:
		case nite::SKELETON_CALIBRATION_ERROR_LEGS:
		case nite::SKELETON_CALIBRATION_ERROR_HEAD:
		case nite::SKELETON_CALIBRATION_ERROR_TORSO:
			USER_MESSAGE("Calibration Failed... :-|")
			break;
		}
	}
}
void updateUserState(const nite::UserData& user, unsigned long long ts)
{
	if (user.isNew())
		USER_MESSAGE("New")
	else if (user.isVisible() && !g_visibleUsers[user.getId()])
	USER_MESSAGE("Visible")
	else if (!user.isVisible() && g_visibleUsers[user.getId()])
	USER_MESSAGE("Out of Scene")
	else if (user.isLost())
	USER_MESSAGE("Lost")

	g_visibleUsers[user.getId()] = user.isVisible();


	if(g_skeletonStates[user.getId()] != user.getSkeleton().getState())
	{
		switch(g_skeletonStates[user.getId()] = user.getSkeleton().getState())
		{
		case nite::SKELETON_NONE:
			USER_MESSAGE("Stopped tracking.")
				break;
		case nite::SKELETON_CALIBRATING:
			USER_MESSAGE("Calibrating...")
				break;
		case nite::SKELETON_TRACKED:
			USER_MESSAGE("Tracking!")
				break;
		case nite::SKELETON_CALIBRATION_ERROR_NOT_IN_POSE:
		case nite::SKELETON_CALIBRATION_ERROR_HANDS:
		case nite::SKELETON_CALIBRATION_ERROR_LEGS:
		case nite::SKELETON_CALIBRATION_ERROR_HEAD:
		case nite::SKELETON_CALIBRATION_ERROR_TORSO:
			USER_MESSAGE("Calibration Failed... :-|")
				break;
		}
	}
}
예제 #3
0
/**
 * update and event out on state of user and skeleton tracking
 */
void updateUserState(const nite::UserData& user)
{
    if (user.isNew()) {
        eventIDToSend = NEW_USER;
        async.data = (void*) &eventIDToSend;
        uv_async_send(&async);
    } else if (!isUserVisible && user.isVisible() && user.getId() == 1) {
        isUserVisible = 1;
        eventIDToSend = USER_IS_VISIBLE;
        async.data = (void*) &eventIDToSend;
        uv_async_send(&async);
    } else if (isUserVisible && !user.isVisible() && user.getId() == 1) {
        isUserVisible = 0;
        eventIDToSend = USER_IS_OUT_OF_SCENE;
        async.data = (void*) &eventIDToSend;
        uv_async_send(&async);
    }

    g_visibleUsers[user.getId()] = user.isVisible();

    if(g_skeletonStates[user.getId()] != user.getSkeleton().getState())
    {
        switch(g_skeletonStates[user.getId()] = user.getSkeleton().getState())
        {
            case nite::SKELETON_NONE:
                if (isSkeletonTracking) {
                    isSkeletonTracking = false;
                    isSkeletonCalibrating = false;
                    eventIDToSend = SKELETON_STOPPED_TRACKING;
                    async.data = (void*) &eventIDToSend;
                    uv_async_send(&async);
                }
                break;
            case nite::SKELETON_CALIBRATING:
                if (!isSkeletonCalibrating) {
                    isSkeletonCalibrating = true;
                    eventIDToSend = SKELETON_CALIBRATING;
                    async.data = (void*) &eventIDToSend;
                    uv_async_send(&async);
                }
                break;
            case nite::SKELETON_TRACKED:
                if (!isSkeletonTracking) {
                    isSkeletonTracking = true;
                    isSkeletonCalibrating = false;
                    eventIDToSend = SKELETON_TRACKING;
                    async.data = (void*) &eventIDToSend;
                    uv_async_send(&async);
                }
                break;
            case nite::SKELETON_CALIBRATION_ERROR_NOT_IN_POSE:
            case nite::SKELETON_CALIBRATION_ERROR_HANDS:
            case nite::SKELETON_CALIBRATION_ERROR_LEGS:
            case nite::SKELETON_CALIBRATION_ERROR_HEAD:
            case nite::SKELETON_CALIBRATION_ERROR_TORSO:
                eventIDToSend = SKELETON_CALIBRATION_FAILED;
                async.data = (void*) &eventIDToSend;
                uv_async_send(&async);
                isSkeletonTracking = false;
                isSkeletonCalibrating = false;
                break;
        }
    }
}