// // Stateful mouse listener // class StatefulMouse { Hid mouse; HidMsg mouseMsg; 0 => int DEBUG; 0 => int mouseX => int mouseY => int mouseX0 => int mouseY0 => int mouseX1 => int mouseY1 => int mouseX2 => int mouseY2 => int wheelX => int wheelY; 0 => int button0down => int button1down => int button2down; fun void listen( int m ) { // open mouse 0, exit on fail if( !mouse.openMouse( m ) ) me.exit(); <<< "mouse '" + mouse.name() + "' ready", "" >>>; while( true ) { mouse => now; while( mouse.recv( mouseMsg ) ) { // mouse button down if( mouseMsg.isButtonDown() ) { if(DEBUG) <<< "mouse button", mouseMsg.which, "down" >>>; if( mouseMsg.which == 0 ) 1 => button0down; else if( mouseMsg.which == 1 ) 1 => button1down; else if( mouseMsg.which == 2 ) 1 => button2down; } // mouse button up if( mouseMsg.isButtonUp() ) { if(DEBUG) <<< "mouse button", mouseMsg.which, "up" >>>; if( mouseMsg.which == 0 ) 0 => button0down; else if( mouseMsg.which == 1 ) 0 => button1down; else if( mouseMsg.which == 2 ) 0 => button2down; } // mouse motion if( mouseMsg.isMouseMotion() ) { if( mouseMsg.deltaX ) { if(DEBUG) <<< "mouse motion:", mouseMsg.deltaX, "on x-axis" >>>; if( button0down ) mouseMsg.deltaX +=> mouseX0; else if( button1down ) mouseMsg.deltaX +=> mouseX1; else if( button2down ) mouseMsg.deltaX +=> mouseX2; mouseMsg.deltaX +=> mouseX; } if( mouseMsg.deltaY ) { if(DEBUG) <<< "mouse motion:", mouseMsg.deltaY, "on y-axis" >>>; if( button0down ) mouseMsg.deltaY +=> mouseY0; else if( button1down ) mouseMsg.deltaY +=> mouseY1; else if( button2down ) mouseMsg.deltaY +=> mouseY2; mouseMsg.deltaY +=> mouseY; } } // mouse wheel motion else if( mouseMsg.isWheelMotion() ) { if( mouseMsg.deltaX ) { if(DEBUG) <<< "mouse wheel:", mouseMsg.deltaX, "on x-axis" >>>; mouseMsg.deltaX +=> wheelX; } if( mouseMsg.deltaY ) { if(DEBUG) <<< "mouse wheel:", mouseMsg.deltaY, "on y-axis" >>>; mouseMsg.deltaY +=> wheelY; } } me.yield(); } } } } StatefulMouse sm; spork ~ sm.listen(0); while(true) { <<< sm.mouseX, sm.mouseY, sm.mouseX0, sm.mouseY0, sm.mouseX1, sm.mouseY1, sm.mouseX2, sm.mouseY2, sm.wheelX, sm.wheelY >>>; 128::samp => now; }