static value openflkinect_update_interactions(value ref) { val_check_kind(ref, k_Kinect); Kinect* k = static_cast<Kinect*>(val_data(ref)); vector<NUI_USER_INFO> userInfos = k->interactionInfo(); value users = alloc_array(userInfos.size()); for ( int i=0; i<userInfos.size(); i++ ) { NUI_USER_INFO& s = userInfos[i]; value user = alloc_empty_object(); val_array_set_i(users, i, user); if ( userInfos[i].SkeletonTrackingId > 0 ) { alloc_field( user, val_id( "isTracked" ), alloc_bool( true ) ); alloc_field( user, val_id("skeletonTrackingId"), alloc_int(userInfos[i].SkeletonTrackingId )); value hands = alloc_array( NUI_USER_HANDPOINTER_COUNT ); alloc_field( user, val_id("handPointerInfos"), hands); for ( int j=0; j<NUI_USER_HANDPOINTER_COUNT; j++ ) { value hand = alloc_empty_object(); val_array_set_i(hands, j, hand); alloc_field( hand, val_id("handTypeEvent"), alloc_float( userInfos[i].HandPointerInfos[j].HandEventType )); alloc_field( hand, val_id("handType"), alloc_float( userInfos[i].HandPointerInfos[j].HandType )); alloc_field( hand, val_id("pressExtent"), alloc_float( userInfos[i].HandPointerInfos[j].PressExtent )); alloc_field( hand, val_id("rawX"), alloc_float( userInfos[i].HandPointerInfos[j].RawX )); alloc_field( hand, val_id("rawY"), alloc_float( userInfos[i].HandPointerInfos[j].RawY )); alloc_field( hand, val_id("rawZ"), alloc_float( userInfos[i].HandPointerInfos[j].RawZ )); alloc_field( hand, val_id("state"), alloc_float( userInfos[i].HandPointerInfos[j].State )); alloc_field( hand, val_id("x"), alloc_float( userInfos[i].HandPointerInfos[j].X )); alloc_field( hand, val_id("y"), alloc_float( userInfos[i].HandPointerInfos[j].Y )); val_array_set_i(hands, j, hand); } } else { alloc_field( user, val_id( "isTracked" ), alloc_bool( false ) ); } } return users; }