core_gestures_detection.lua 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. -------------------------------------------------------------------------------------------
  2. --
  3. -- raylib [core] example - Gestures Detection
  4. --
  5. -- This example has been created using raylib 1.6 (www.raylib.com)
  6. -- raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
  7. --
  8. -- Copyright (c) 2014-2016 Ramon Santamaria (@raysan5)
  9. --
  10. -------------------------------------------------------------------------------------------
  11. MAX_GESTURE_STRINGS = 20
  12. -- Initialization
  13. -------------------------------------------------------------------------------------------
  14. local screenWidth = 800
  15. local screenHeight = 450
  16. InitWindow(screenWidth, screenHeight, "raylib [core] example - gestures detection")
  17. local touchPosition = Vector2(0, 0)
  18. local touchArea = Rectangle(220, 10, screenWidth - 230, screenHeight - 20)
  19. local gesturesCount = 0
  20. local gestureStrings = {}
  21. for i = 1, MAX_GESTURE_STRINGS do gestureStrings[i] = "" end
  22. local currentGesture = Gestures.NONE
  23. local lastGesture = Gestures.NONE
  24. --SetGesturesEnabled(0b0000000000001001) -- Enable only some gestures to be detected
  25. SetTargetFPS(60)
  26. -------------------------------------------------------------------------------------------
  27. -- Main game loop
  28. while not WindowShouldClose() do -- Detect window close button or ESC key
  29. -- Update
  30. ---------------------------------------------------------------------------------------
  31. lastGesture = currentGesture
  32. currentGesture = GetGestureDetected()
  33. touchPosition = GetTouchPosition(0)
  34. if (CheckCollisionPointRec(touchPosition, touchArea) and (currentGesture ~= Gestures.NONE)) then
  35. if (currentGesture ~= lastGesture) then
  36. -- Store gesture string
  37. if (currentGesture == Gestures.TAP) then gestureStrings[gesturesCount] = "GESTURE TAP"
  38. elseif (currentGesture == Gestures.DOUBLETAP) then gestureStrings[gesturesCount] = "GESTURE DOUBLETAP"
  39. elseif (currentGesture == Gestures.HOLD) then gestureStrings[gesturesCount] = "GESTURE HOLD"
  40. elseif (currentGesture == Gestures.DRAG) then gestureStrings[gesturesCount] = "GESTURE DRAG"
  41. elseif (currentGesture == Gestures.SWIPE_RIGHT) then gestureStrings[gesturesCount] = "GESTURE SWIPE RIGHT"
  42. elseif (currentGesture == Gestures.SWIPE_LEFT) then gestureStrings[gesturesCount] = "GESTURE SWIPE LEFT"
  43. elseif (currentGesture == Gestures.SWIPE_UP) then gestureStrings[gesturesCount] = "GESTURE SWIPE UP"
  44. elseif (currentGesture == Gestures.SWIPE_DOWN) then gestureStrings[gesturesCount] = "GESTURE SWIPE DOWN"
  45. elseif (currentGesture == Gestures.PINCH_IN) then gestureStrings[gesturesCount] = "GESTURE PINCH IN"
  46. elseif (currentGesture == Gestures.PINCH_OUT) then gestureStrings[gesturesCount] = "GESTURE PINCH OUT"
  47. end
  48. gesturesCount = gesturesCount + 1
  49. -- Reset gestures strings
  50. if (gesturesCount >= MAX_GESTURE_STRINGS) then
  51. for i = 1, MAX_GESTURE_STRINGS do gestureStrings[i] = "\0" end
  52. gesturesCount = 0
  53. end
  54. end
  55. end
  56. ---------------------------------------------------------------------------------------
  57. -- Draw
  58. ---------------------------------------------------------------------------------------
  59. BeginDrawing()
  60. ClearBackground(RAYWHITE)
  61. DrawRectangleRec(touchArea, GRAY)
  62. DrawRectangle(225, 15, screenWidth - 240, screenHeight - 30, RAYWHITE)
  63. DrawText("GESTURES TEST AREA", screenWidth - 270, screenHeight - 40, 20, Fade(GRAY, 0.5))
  64. for i = 1, gesturesCount do
  65. if ((i - 1)%2 == 0) then DrawRectangle(10, 30 + 20*(i - 1), 200, 20, Fade(LIGHTGRAY, 0.5))
  66. else DrawRectangle(10, 30 + 20*(i - 1), 200, 20, Fade(LIGHTGRAY, 0.3)) end
  67. if (i < gesturesCount) then DrawText(gestureStrings[i], 35, 36 + 20*(i - 1), 10, DARKGRAY)
  68. else DrawText(gestureStrings[i], 35, 36 + 20*(i - 1), 10, MAROON) end
  69. end
  70. DrawRectangleLines(10, 29, 200, screenHeight - 50, GRAY)
  71. DrawText("DETECTED GESTURES", 50, 15, 10, GRAY)
  72. if (currentGesture ~= GESTURE_NONE) then DrawCircleV(touchPosition, 30, MAROON) end
  73. EndDrawing()
  74. ---------------------------------------------------------------------------------------
  75. end
  76. -- De-Initialization
  77. -------------------------------------------------------------------------------------------
  78. CloseWindow() -- Close window and OpenGL context
  79. -------------------------------------------------------------------------------------------