/* var fenway = new google.maps.LatLng(42.345573,-71.098326); var mapOptions = { center: fenway, zoom: 14 }; var map = new google.maps.Map( document.getElementById('map-canvas'), mapOptions); var panoramaOptions = { position: fenway, pov: { heading: 34, pitch: 10 } }; var panorama = new google.maps.StreetViewPanorama(document.getElementById('pano'),panoramaOptions); map.setStreetView(panorama); */ "use strict"; var SkeletonTrackingState = { NotTracked: 0, Position: 1, Tracked: 2 }; var jointTrackingState = { Inferred: 1, NotTracked: 0, Tracked: 2 }; //need to work out which means its tracked, probably wrong right now var JointType = { HipCenter: 0, Spine: 1, ShoulderCenter: 2, Head: 3, ShoulderLeft: 4, ElbowLeft: 5, WristLeft: 6, HandLeft: 7, ShoulderRight: 8, ElbowRight: 9, WristRight: 10, HandRight: 11, HipLeft: 12, KneeLeft: 13, Ankle: 14, FootLeft: 15, HipRight: 16, KneeRight: 17, AnkleRight: 18, FootRight: 19 } var offset = 0; var handPointer = null; var pressExtentY; var pressOriginY; var jumps; $( document ).ready( function() { function testBox( col ) { var b = document.createElement( 'div' ); b.style.width = '200px'; b.style.height = '50px'; b.style.position = 'relative'; b.style.top = '150px'; b.style.backgroundColor = col; b.style.fontSize = 'x-large'; document.body.appendChild( b ); return b; } //var s4 = testBox('red'); //var s3 = testBox('green'); var streamImageWidth = 640; var streamImageHeight = 480; var streamImageResolution = streamImageWidth.toString() + "x" + streamImageHeight.toString(); var isSensorConnected = false; var engagedUser = null; var cursor = null; var userViewerCanvasElement = null; var backgroundRemovalCanvasElement = null; var inPress = false; var isGripping = false; // Log errors encountered during sensor configuration function configError( statusText, errorData ) { console.log( ( errorData != null ) ? JSON.stringify( errorData ) : statusText ); } // Determine if the specified object has any properties or not function isEmptyObject( obj ) { if ( obj == null ) { return true; } var numProperties = 0; for ( var prop in obj ) { if ( obj.hasOwnProperty( prop ) ) { ++numProperties; } } return numProperties <= 0; } // Show or hide the cursor function setCursorVisibility( isVisible ) { if ( cursor == null ) { return; } if ( isVisible ) { cursor.show(); } else { cursor.hide(); } } // Show or hide a canvas element function setCanvasVisibility( canvasElement, isVisible ) { if ( canvasElement == null ) { return; } var canvasQuery = $( canvasElement ); if ( isVisible ) { if ( !canvasQuery.hasClass( "showing" ) ) { // Clear canvas before showing it var canvasContext = canvasElement.getContext( "2d" ); canvasContext.clearRect( 0, 0, streamImageWidth, streamImageHeight ); } canvasQuery.addClass( "showing" ); } else { canvasQuery.removeClass( "showing" ); } } window.addEventListener( "handPointerGrip", function() { //alert("I'm cool") //linkHop(); isGripping = true; $('#kinect-cursor-normal').attr("xlink:href","#kinect-grip-hand-base"); //alert(handPointer.isInGripInteraction); /* var uiController = new KinectUIController(); var othercursor = document.getElementById(uiController.CURSOR_ID); console.log(JSON.stringify(cursor)); console.log(JSON.stringify(othercursor)); $(othercursor).addClass("kinect-grip-hand-base"); */ } ); window.addEventListener( "handPointerGripRelease", function() { isGripping = false; $('#kinect-cursor-normal').attr("xlink:href","#kinect-open-hand-base"); if(selectedLink) {console.log("jumping to" + selectedLink); panorama.setPano(selectedLink.pano); selectedLink = null;} } ); var pressOrigin; var pressExtent = 0; window.addEventListener( "handPointerPress", function() { //alert("I'm cool") if ( !inPress ) { inPress = true; } } ); /* window.addEventListener( "handPointerPressRelease",function(){ //alert("I'm not cool") //console.log("Press extended " + (pressExtent - pressOrigin) + " distance units"); var extent = (pressExtent - pressOrigin); document.getElementById("kinectgripthing").innerHTML = "press extent: " + extent.toFixed(2) + "
" + "pressOrigin = " + pressOrigin.toFixed(2) + '
' + "pressDest = " + pressExtent.toFixed(2); if(extent > .07){ if(!isGripping) linkHop(); else { steps = skipSteps; jumpLoop(panorama.getPano()); } } if(inPress) inPress = false; });*/ /*document.getElementById( "pano" ).addEventListener( "handPointerLeave", function() { isGripping = false; $('#kinect-cursor-normal').attr("xlink:href","#kinect-open-hand-base"); } );*/ /* document.getElementById( "pano" ).addEventListener( "handPointerEnter", function() { console.log("Hand Entered"); if(handPointer){ if(handPointer.IsInGripInteraction){ $('#kinect-cursor-normal').attr("xlink:href","#kinect-grip-hand-base"); isGripping = true; console.log("found hand grip"); } else{ $('#kinect-cursor-normal').attr("xlink:href","#kinect-open-hand-base"); isGripping = false; console.log("found hand normal"); } } else { $('#kinect-cursor-normal').attr("xlink:href","#kinect-open-hand-base"); console.log("I goofed");} } ); */ // Update sensor state and perform UI transitions (showing/hiding appropriate UI elements) // related to sensor status or engagement state changes var delayedConfigTimeoutId = null; function updateUserState( newIsSensorConnected, newEngagedUser, sensorToConfig ) { var hasEngagedUser = engagedUser != null; var newHasEngagedUser = newEngagedUser != null; // If there's a pending configuration change when state changes again, cancel previous timeout if ( delayedConfigTimeoutId != null ) { clearTimeout( delayedConfigTimeoutId ); delayedConfigTimeoutId = null; } if ( ( isSensorConnected != newIsSensorConnected ) || ( engagedUser != newEngagedUser ) ) { if ( newIsSensorConnected ) { var immediateConfig = {}; var delayedConfig = {}; immediateConfig[ Kinect.INTERACTION_STREAM_NAME ] = { "enabled": true }; immediateConfig[ Kinect.USERVIEWER_STREAM_NAME ] = { "resolution": streamImageResolution }; immediateConfig[ Kinect.BACKGROUNDREMOVAL_STREAM_NAME ] = { "resolution": streamImageResolution }; immediateConfig[ Kinect.SKELETON_STREAM_NAME ] = { "enabled": true }; setCursorVisibility( newHasEngagedUser ); setCanvasVisibility(userViewerCanvasElement, !newHasEngagedUser); setCanvasVisibility( backgroundRemovalCanvasElement, newHasEngagedUser ); if ( newHasEngagedUser ) { immediateConfig[ Kinect.BACKGROUNDREMOVAL_STREAM_NAME ].enabled = true; immediateConfig[ Kinect.BACKGROUNDREMOVAL_STREAM_NAME ].trackingId = newEngagedUser; delayedConfig[ Kinect.USERVIEWER_STREAM_NAME ] = { "enabled": false }; } else { immediateConfig[ Kinect.USERVIEWER_STREAM_NAME ].enabled = true; if ( hasEngagedUser ) { delayedConfig[ Kinect.BACKGROUNDREMOVAL_STREAM_NAME ] = { "enabled": false }; } } // Perform immediate configuration sensorToConfig.postConfig( immediateConfig, configError ); // schedule delayed configuration for 2 seconds later if ( !isEmptyObject( delayedConfig ) ) { delayedConfigTimeoutId = setTimeout( function() { sensorToConfig.postConfig( delayedConfig, configError ); delayedConfigTimeoutId = null; }, 2000 ); } } else { setCursorVisibility( false ); setCanvasVisibility(userViewerCanvasElement, false); setCanvasVisibility( backgroundRemovalCanvasElement, false ); } } isSensorConnected = newIsSensorConnected; engagedUser = newEngagedUser; } // Get the id of the engaged user, if present, or null if there is no engaged user function findEngagedUser( userStates ) { var engagedUserId = null; for ( var i = 0; i < userStates.length; ++i ) { var entry = userStates[ i ]; if ( entry.userState == "engaged" ) { engagedUserId = entry.id; break; } } return engagedUserId; } // Respond to user state change event function onUserStatesChanged( newUserStates ) { var newEngagedUser = findEngagedUser( newUserStates ); updateUserState( isSensorConnected, newEngagedUser, sensor ); } // Create sensor and UI adapter layers var sensor = Kinect.sensor( Kinect.DEFAULT_SENSOR_NAME, function( sensorToConfig, isConnected ) { if ( isConnected ) { // Determine what is the engagement state upon connection sensorToConfig.getConfig( function( data ) { var engagedUserId = findEngagedUser( data[ Kinect.INTERACTION_STREAM_NAME ].userStates ); //alert( JSON.stringify( data ) ); updateUserState( true, engagedUserId, sensorToConfig ); } ); } else { updateUserState( false, engagedUser, sensorToConfig ); } } ); var uiAdapter = KinectUI.createAdapter( sensor ); //KinectUI.setIsGripTarget(document.getElementById("kinectgripthing"), true); //KinectUI.setIsGripTarget(document.getElementById("pano"), true); uiAdapter.promoteButtons(); cursor = uiAdapter.createDefaultCursor(); userViewerCanvasElement = document.getElementById("userViewerCanvas"); backgroundRemovalCanvasElement = document.getElementById( "backgroundRemovalCanvas" ); //uiAdapter.bindStreamToCanvas(Kinect.USERVIEWER_STREAM_NAME, userViewerCanvasElement); uiAdapter.bindStreamToCanvas( Kinect.BACKGROUNDREMOVAL_STREAM_NAME, backgroundRemovalCanvasElement ); var oldHeading = 0; sensor.addStreamFrameHandler( function( frame ) { //document.getElementById("kinectgripthing").innerHTML="pie" +offset+ " pie2 " + isGripping; switch ( frame.stream ) { case Kinect.SKELETON_STREAM_NAME: for ( var iSkeleton = 0; iSkeleton < frame.skeletons.length; ++iSkeleton ) { var skeleton = frame.skeletons[ iSkeleton ]; if ( skeleton.trackingState == 2 && skeleton.trackingId == engagedUser ) { //console.log("number of uiAdapter handPointers is " + uiAdapter.handPointers.length); for(var j = 0; j < uiAdapter.handPointers.length; j++){ if(uiAdapter.handPointers[j].getIsPrimaryHandOfPrimaryUser() && uiAdapter.handPointers[j].isTracked) { handPointer = uiAdapter.handPointers[j]; pressExtentY = handPointer.rawY; if ( !isGripping ) { pressOriginY = handPointer.rawY; } else { var diffY = ( -pressExtentY + pressOriginY ); var newJumps = Math.round( diffY * 15 ); //if ( jumps != newJumps ) { steps = jumps = newJumps; //alert(jumps); //document.getElementById( "kinectgripthing" ).innerHTML = "press extentY: " + diffY.toFixed( 2 ) + "
" + "pressOriginY = " + pressOriginY.toFixed( 2 ) + '
' + "newJumps = " + newJumps; //jumpLoop( panorama.getPano() ); selecto(steps); //} } if ( !inPress ) { pressOrigin = handPointer.rawZ; } else if ( inPress ) { pressExtent = handPointer.rawZ; //console.log(cursor); var extent = ( pressExtent - pressOrigin ); //document.getElementById( "kinectgripthing" ).innerHTML = "extent check has failed
pressOrigin = " + pressOrigin.toFixed( 2 ) + '
' + "pressDest = " + pressExtent.toFixed( 2 )+ "
" + "press extent: " + extent.toFixed( 2 ); if ( extent > .05 ) { //document.getElementById( "kinectgripthing" ).innerHTML = "extent check has passed
pressOrigin = " + pressOrigin.toFixed( 2 ) + '
' + "pressDest = " + pressExtent.toFixed( 2 ) + "
" + "press extent: " + extent.toFixed( 2 ); /*console.log( "link hopping" ); linkHop();*/ inPress = false; } } break;} } var x = skeleton.boneOrientations[ JointType.ShoulderCenter ].absoluteRotation.matrix.m13; var y = skeleton.boneOrientations[ JointType.ShoulderCenter ].absoluteRotation.matrix.m23; var z = skeleton.boneOrientations[ JointType.ShoulderCenter ].absoluteRotation.matrix.m33; //var tilt = skeleton.joints[JointType.Head].position.z - skeleton.joints[JointType.ShoulderCenter].position.z; var len = x * x + z * z; x = x / len; z = z / len; var orient = Math.atan2( x, z ); var heading = orient * ( 180 / Math.PI ) * 2 + 70; var pitch = y * 180 - 20; //heading = 0.9 * oldHeading + 0.1 * heading; //if(heading > 360){alert("heading hsa gone full circle and more")} oldHeading = heading; var pov = panorama.getPov(); //alert(cursor); //console.log(cursor.IsInGripInteraction); //if the user is not gripping, move their view if ( !isGripping ) { pov.heading = heading + offset; pov.pitch = pitch; panorama.setPov( pov ); SyncThreeCamera( pov.heading, pov.pitch ); } else { offset = ( pov.heading + 360 ) - ( heading + 360 ); offset = offset % 360; //alert(offset); } } //SyncThreeCamera(pov.heading, pov.pitch) //var kin = document.getElementById("kinectgripthing"); //kin.innerHTML = x + "
" + y + "
" + z +"
" + Math.atan2(x, z); //kin.innerHTML = "Heading is " + "
" + heading; //if(g){console.log(JSON.stringify(skeleton)); g = !g} //s1.left = skeleton.joint[] /*skeleton.trackingId; skeleton.trackingState; skeleton.position;*/ } break; } } ); //braeden done sensor.addEventHandler( function( event ) { switch ( event.category ) { case Kinect.USERSTATE_EVENT_CATEGORY: switch ( event.eventType ) { case Kinect.USERSTATESCHANGED_EVENT_TYPE: onUserStatesChanged( event.userStates ); break; } break; } } ); } ); function modePov( list ) { var count = 0; var mode; for ( var i = 0; i < list.length - 1; i++ ) { var tempCount = 0; for ( var j = 1; j < list.length; j++ ) { console.log( list[ i ].heading + " against " + list[ j ].heading ) if ( list[ i ].heading == list[ i ].heading ) { tempCount++; //alert("BANG BANG"); } } if ( tempCount > count ) { mode = list[ i ]; count = tempCount; } //console.log("setting mode from heading " + mode.heading); } console.log( "mode had frequency of " + count ); //console.log(list); return mode; } document.addEventListener( 'keydown', function( e ) { var keyCode = e.keyCode; /*sensor.getConfig((function(data){ alert("ALERT ALERT Keydown detected \r\n" + JSON.stringify(data)) }));*/ } ); function linkHop() { var panoLink = pickHop( panorama.getLinks()); console.log(panoLink); panorama.setPano(panoLink.pano); } function keyDownTextField(e){ var keyCode = e.keyCode; if(keyCode == 69){ selectedLink = selecto(4); } }