void Update()
{
if (kinectInitialized)
{
// check user limits and update sensor data
bLimitedUsers = maxTrackedUsers < 6 || minUserDistance > 0.5f || maxUserDistance != 0f;
KinectInterop.UpdateSensorData(sensorData);
if (useMultiSourceReader)
{
KinectInterop.GetMultiSourceFrame(sensorData);
}
// poll color map
if (computeColorMap)
{
if (KinectInterop.PollColorFrame(sensorData))
{
UpdateColorMap();
}
}
// poll user map
if (computeUserMap)
{
if (KinectInterop.PollDepthFrame(sensorData, bLimitedUsers, dictUserIdToIndex.Values))
{
UpdateUserMap();
}
}
// poll infrared map
if (computeInfraredMap)
{
if (KinectInterop.PollInfraredFrame(sensorData))
{
UpdateInfraredMap();
}
}
// poll or play body frame
bool bNewBodyFrame = false;
if (sensorData == null || !sensorData.isPlayModeEnabled)
{
bNewBodyFrame = KinectInterop.PollBodyFrame(sensorData, ref bodyFrame, ref kinectToWorld);
}
else
{
if (sensorData.playModeData.Length != 0)
{
bNewBodyFrame = KinectInterop.SetBodyFrameFromCsv(sensorData.playModeData, sensorData, ref bodyFrame, ref kinectToWorld);
sensorData.playModeData = string.Empty;
}
}
// process the body frame
if (bNewBodyFrame)
{
// filter the tracked joint positions
if (smoothing != Smoothing.None)
{
jointPositionFilter.UpdateFilter(ref bodyFrame);
}
ProcessBodyFrameData();
}
if (useMultiSourceReader)
{
KinectInterop.FreeMultiSourceFrame(sensorData);
}
// update the avatars
if (!lateUpdateAvatars)
{
foreach (AvatarController controller in avatarControllers)
{
//int userIndex = controller ? controller.playerIndex : -1;
Int64 userId = controller ? controller.playerId : 0;
//if((userIndex >= 0) && (userIndex < alUserIds.Count))
if (userId != 0 && dictUserIdToIndex.ContainsKey(userId))
{
//Int64 userId = alUserIds[userIndex];
controller.UpdateAvatar(userId);
}
}
}
// check for gestures
foreach (Int64 userId in alUserIds)
{
if (!playerGesturesData.ContainsKey(userId))
continue;
// Check for player's gestures
CheckForGestures(userId);
// Check for complete gestures
List<KinectGestures.GestureData> gesturesData = playerGesturesData[userId];
int userIndex = GetUserIndexById(userId);
foreach (KinectGestures.GestureData gestureData in gesturesData)
{
if (gestureData.complete)
{
// if(gestureData.gesture == KinectGestures.Gestures.Click)
// {
// if(controlMouseCursor)
// {
// MouseControl.MouseClick();
// }
// }
foreach (KinectGestures.GestureListenerInterface listener in gestureListeners)
{
if (listener != null && listener.GestureCompleted(userId, userIndex, gestureData.gesture, (KinectInterop.JointType)gestureData.joint, gestureData.screenPos))
{
ResetPlayerGestures(userId);
}
}
}
else if (gestureData.cancelled)
{
foreach (KinectGestures.GestureListenerInterface listener in gestureListeners)
{
if (listener != null && listener.GestureCancelled(userId, userIndex, gestureData.gesture, (KinectInterop.JointType)gestureData.joint))
{
ResetGesture(userId, gestureData.gesture);
}
}
}
else if (gestureData.progress >= 0.1f)
{
// if((gestureData.gesture == KinectGestures.Gestures.RightHandCursor ||
// gestureData.gesture == KinectGestures.Gestures.LeftHandCursor) &&
// gestureData.progress >= 0.5f)
// {
// if(handCursor != null)
// {
// handCursor.transform.position = Vector3.Lerp(handCursor.transform.position, gestureData.screenPos, 3 * Time.deltaTime);
// }
//
// if(controlMouseCursor)
// {
// MouseControl.MouseMove(gestureData.screenPos);
// }
// }
foreach (KinectGestures.GestureListenerInterface listener in gestureListeners)
{
if (listener != null)
{
listener.GestureInProgress(userId, userIndex, gestureData.gesture, gestureData.progress,
(KinectInterop.JointType)gestureData.joint, gestureData.screenPos);
}
}
}
}
}
}
}