static value openflkinect_update_skeletons(value ref) { val_check_kind(ref, k_Kinect); Kinect* k = static_cast<Kinect*>(val_data(ref)); vector<Skeleton> trackedSkels = k->skeletons(); value skeletons = alloc_array(trackedSkels.size()); for ( int i=0; i<trackedSkels.size(); i++ ) { Skeleton& s = trackedSkels[i]; value skeleton = alloc_empty_object(); val_array_set_i(skeletons, i, skeleton); if ( trackedSkels[i].size() > 0 ) { alloc_field( skeleton, val_id( "isTracked" ), alloc_bool( true ) ); value bones = alloc_array( trackedSkels[i].size() ); alloc_field(skeleton, val_id("bones"), bones); for ( int j=0; j<trackedSkels[i].size(); j++ ) { int k = 0; for ( boneIt it = trackedSkels[i].begin(); it != trackedSkels[i].end(); ++it ) { //cout << it->second.orientation.startJoint << endl; value b = get_bone(it->second); val_array_set_i(bones, k++, b); } } } else { alloc_field( skeleton, val_id( "isTracked" ), alloc_bool( false ) ); } } return skeletons; }