RosettaCodeData/Task/Joystick-position/PicoLisp/joystick-position.l
Ingy döt Net db842d013d A-M baby
2013-04-10 21:29:02 -07:00

40 lines
1 KiB
Text

(load "@lib/openGl.l")
(setq *JoyX 0.0 *JoyY 0.0)
(glutInit)
(glutInitDisplayMode (| GLUT_RGBA GLUT_DOUBLE GLUT_ALPHA GLUT_DEPTH))
(glutInitWindowSize 400 400)
(glutCreateWindow "Joystick")
(glClearColor 0.3 0.3 0.5 0)
(displayPrg
(glClear GL_COLOR_BUFFER_BIT)
(glBegin GL_LINES)
(glVertex2f *JoyX (- *JoyY 0.1)) # Draw crosshair
(glVertex2f *JoyX (+ *JoyY 0.1))
(glVertex2f (- *JoyX 0.1) *JoyY)
(glVertex2f (+ *JoyX 0.1) *JoyY)
(glEnd)
(glFlush)
(glutSwapBuffers) )
# Track joystick position
(native `*GlutLib "glutJoystickFunc" NIL
(lisp 'joystickFunc
'((Btn X Y Z)
(msg # Display buttons
(make
(for (B 1 (n0 Btn) (inc B))
(and (bit? 1 Btn) (link B))
(setq Btn (>> 1 Btn)) ) ) )
(setq # Move crosshair
*JoyX (*/ X 1.0 1000)
*JoyY (*/ Y 1.0 1000) )
(glutPostRedisplay) ) )
100 )
# Exit upon mouse click
(mouseFunc '((Btn State X Y) (bye)))
(glutMainLoop)