gamecontroller.monkey2 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. Namespace test
  2. #Import "<std>"
  3. #Import "<mojo>"
  4. #Import "gamecontrollerdb.txt"
  5. Using std..
  6. Using mojo..
  7. Function Format:String( v:Float )
  8. Local s:=Sgn(v)
  9. Local n:=Int( Abs(v)*100 )
  10. Return (s>=0 ? "+" Else "-")+(n/100)+"."+(n Mod 100)
  11. End
  12. Class Player
  13. Field id:Int
  14. Field controller:GameController
  15. Global used:=New StringMap<Bool>
  16. Method New( id:Int )
  17. Self.id=id
  18. End
  19. Method Update( canvas:Canvas )
  20. canvas.DrawText( "Player "+id,0,0 )
  21. 'check if attached
  22. If Not controller?.Attached
  23. controller=GameController.Open( id )
  24. If Not controller
  25. canvas.DrawText( "No game controller available",0,16 )
  26. Return
  27. Endif
  28. Endif
  29. 'draw controller info.
  30. canvas.DrawText( "Name="+controller.Name,0,16 )
  31. For Local i:=0 Until 6
  32. Local axis:=Cast<GameControllerAxis>( i )
  33. Local name:="A"+i'GameController.GetAxisName( axis )
  34. Local v:=Format( controller.GetAxis( axis ) )
  35. canvas.DrawText( name+"="+v,i * 80,32 )
  36. Next
  37. For Local i:=0 Until 15
  38. Local button:=Cast<GameControllerButton>( i )
  39. Local name:="B"+i'"GameController.GetButtonName( button )
  40. canvas.DrawText( name+"="+Int( controller.ButtonDown( button ) ),(i Mod 8)*80,(i/8)*16+48 )
  41. Next
  42. End
  43. End
  44. '***** MainWindow *****
  45. Class MainWindow Extends Window
  46. Field players:=New Player[4]
  47. Method New()
  48. Super.New( "Game controller test",640,480 )
  49. GameController.AddMappingsFromFile( "asset::gamecontrollerdb.txt" )
  50. For Local i:=0 Until 4
  51. players[i]=New Player( i )
  52. Next
  53. End
  54. Method OnRender( canvas:Canvas ) Override
  55. RequestRender()
  56. canvas.DrawText( "NumJoysticks="+Joystick.NumJoysticks(),0,0 )
  57. canvas.PushMatrix()
  58. canvas.Translate( 0,16 )
  59. For Local i:=0 Until 4
  60. players[i].Update( canvas )
  61. canvas.Translate( 0,96 )
  62. Next
  63. canvas.PopMatrix()
  64. End
  65. End
  66. Function Main()
  67. New AppInstance
  68. New MainWindow
  69. App.Run()
  70. End