gamepad.odin 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. package karl2d_gamepad_example
  2. import k2 "../.."
  3. import "core:log"
  4. Vec2 :: [2]f32
  5. button_color :: proc(button: k2.Gamepad_Button, active := k2.WHITE, inactive := k2.GRAY) -> k2.Color {
  6. return k2.gamepad_button_is_held(0, button) ? active : inactive
  7. }
  8. main :: proc() {
  9. context.logger = log.create_console_logger()
  10. k2.init(500, 300, "Karl2D Gamepad Demo")
  11. k2.set_window_position(300, 100)
  12. for !k2.shutdown_wanted() {
  13. k2.process_events()
  14. k2.clear(k2.BLACK)
  15. k2.draw_circle({120, 120}, 10, button_color(.Left_Face_Up))
  16. k2.draw_circle({120, 160}, 10, button_color(.Left_Face_Down))
  17. k2.draw_circle({100, 140}, 10, button_color(.Left_Face_Left))
  18. k2.draw_circle({140, 140}, 10, button_color(.Left_Face_Right))
  19. k2.draw_circle({320+50, 120}, 10, button_color(.Right_Face_Up))
  20. k2.draw_circle({320+50, 160}, 10, button_color(.Right_Face_Down))
  21. k2.draw_circle({300+50, 140}, 10, button_color(.Right_Face_Left))
  22. k2.draw_circle({340+50, 140}, 10, button_color(.Right_Face_Right))
  23. k2.draw_rect_vec({250 - 30, 140}, {20, 10}, button_color(.Middle_Face_Left))
  24. k2.draw_rect_vec({250 + 10, 140}, {20, 10}, button_color(.Middle_Face_Right))
  25. left_stick := Vec2 {
  26. k2.get_gamepad_axis(0, .Left_Stick_X),
  27. k2.get_gamepad_axis(0, .Left_Stick_Y),
  28. }
  29. right_stick := Vec2 {
  30. k2.get_gamepad_axis(0, .Right_Stick_X),
  31. k2.get_gamepad_axis(0, .Right_Stick_Y),
  32. }
  33. left_trigger := k2.get_gamepad_axis(0, .Left_Trigger)
  34. right_trigger := k2.get_gamepad_axis(0, .Right_Trigger)
  35. k2.set_gamepad_vibration(0, left_trigger, right_trigger)
  36. k2.draw_rect_vec({80, 50}, {20, 10}, button_color(.Left_Shoulder))
  37. k2.draw_rect_vec({50, 50} + {0, left_trigger * 20}, {20, 10}, button_color(.Left_Trigger, k2.WHITE, k2.GRAY))
  38. k2.draw_rect_vec({420, 50}, {20, 10}, button_color(.Right_Shoulder))
  39. k2.draw_rect_vec({450, 50} + {0, right_trigger * 20}, {20, 10}, button_color(.Right_Trigger, k2.WHITE, k2.GRAY))
  40. k2.draw_circle({200, 200} + 20 * left_stick, 20, button_color(.Left_Stick_Press, k2.WHITE, k2.GRAY))
  41. k2.draw_circle({300, 200} + 20 * right_stick, 20, button_color(.Right_Stick_Press, k2.WHITE, k2.GRAY))
  42. k2.present()
  43. free_all(context.temp_allocator)
  44. }
  45. k2.shutdown()
  46. }