gamepad.odin 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. package karl2d_gamepad_example
  2. import k2 "../.."
  3. import "core:fmt"
  4. import "core:log"
  5. gamepad_demo :: proc(gamepad: k2.Gamepad_Index, offset: k2.Vec2) {
  6. if !k2.is_gamepad_active(gamepad) {
  7. title := fmt.tprintf("Gamepad %v (not connected)", gamepad + 1)
  8. ts := k2.measure_text(title, 30)
  9. k2.draw_text(title, offset + {250, 60} - {ts.x/2, 0}, 30, k2.WHITE)
  10. return
  11. }
  12. title := fmt.tprintf("Gamepad %v", gamepad + 1)
  13. ts := k2.measure_text(title, 30)
  14. k2.draw_text(title, offset + {250, 60} - {ts.x/2, 0}, 30, k2.WHITE)
  15. button_color :: proc(
  16. gamepad: k2.Gamepad_Index,
  17. button: k2.Gamepad_Button,
  18. active := k2.WHITE,
  19. inactive := k2.GRAY,
  20. ) -> k2.Color {
  21. return k2.gamepad_button_is_held(gamepad, button) ? active : inactive
  22. }
  23. g := gamepad
  24. o := offset
  25. k2.draw_circle(o + {120, 120}, 10, button_color(g, .Left_Face_Up))
  26. k2.draw_circle(o + {120, 160}, 10, button_color(g, .Left_Face_Down))
  27. k2.draw_circle(o + {100, 140}, 10, button_color(g, .Left_Face_Left))
  28. k2.draw_circle(o + {140, 140}, 10, button_color(g, .Left_Face_Right))
  29. k2.draw_circle(o + {320+50, 120}, 10, button_color(g, .Right_Face_Up))
  30. k2.draw_circle(o + {320+50, 160}, 10, button_color(g, .Right_Face_Down))
  31. k2.draw_circle(o + {300+50, 140}, 10, button_color(g, .Right_Face_Left))
  32. k2.draw_circle(o + {340+50, 140}, 10, button_color(g, .Right_Face_Right))
  33. k2.draw_rect_vec(o + {250 - 30, 140}, {20, 10}, button_color(g, .Middle_Face_Left))
  34. k2.draw_rect_vec(o + {250 + 10, 140}, {20, 10}, button_color(g, .Middle_Face_Right))
  35. left_stick := k2.Vec2 {
  36. k2.get_gamepad_axis(gamepad, .Left_Stick_X),
  37. k2.get_gamepad_axis(gamepad, .Left_Stick_Y),
  38. }
  39. right_stick := k2.Vec2 {
  40. k2.get_gamepad_axis(gamepad, .Right_Stick_X),
  41. k2.get_gamepad_axis(gamepad, .Right_Stick_Y),
  42. }
  43. left_trigger := k2.get_gamepad_axis(gamepad, .Left_Trigger)
  44. right_trigger := k2.get_gamepad_axis(gamepad, .Right_Trigger)
  45. k2.set_gamepad_vibration(gamepad, left_trigger, right_trigger)
  46. k2.draw_rect_vec(o + {80, 50}, {20, 10}, button_color(g, .Left_Shoulder))
  47. k2.draw_rect_vec(o + {50, 50} + {0, left_trigger * 20}, {20, 10}, button_color(g, .Left_Trigger, k2.WHITE, k2.GRAY))
  48. k2.draw_rect_vec(o + {420, 50}, {20, 10}, button_color(g, .Right_Shoulder))
  49. k2.draw_rect_vec(o + {450, 50} + {0, right_trigger * 20}, {20, 10}, button_color(g, .Right_Trigger, k2.WHITE, k2.GRAY))
  50. k2.draw_circle(o + {200, 200} + 20 * left_stick, 20, button_color(g, .Left_Stick_Press, k2.WHITE, k2.GRAY))
  51. k2.draw_circle(o + {300, 200} + 20 * right_stick, 20, button_color(g, .Right_Stick_Press, k2.WHITE, k2.GRAY))
  52. }
  53. main :: proc() {
  54. context.logger = log.create_console_logger()
  55. init()
  56. for !k2.shutdown_wanted() {
  57. step(0)
  58. }
  59. shutdown()
  60. }
  61. init :: proc() {
  62. k2.init(1000, 600, "Karl2D Gamepad Demo")
  63. }
  64. step :: proc(dt: f32) -> bool {
  65. k2.process_events()
  66. k2.clear(k2.BLACK)
  67. gamepad_demo(0, {0, 0})
  68. gamepad_demo(1, {500, 0})
  69. gamepad_demo(2, {0, 300})
  70. gamepad_demo(3, {500, 300})
  71. k2.present()
  72. free_all(context.temp_allocator)
  73. return true
  74. }
  75. shutdown :: proc() {
  76. k2.shutdown()
  77. }