/******************************************************************************************* * * raylib [core] example - Gestures Detection * * This example has been created using raylib 1.4 (www.raylib.com) * raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details) * * Copyright (c) 2016 Ramon Santamaria (@raysan5) * ********************************************************************************************/ using System.Numerics; using static Raylib_cs.Raylib; namespace Examples.Core; public class InputGestures { public const int MaxGestureStrings = 20; public static int Main() { // Initialization //-------------------------------------------------------------------------------------- const int screenWidth = 800; const int screenHeight = 450; InitWindow(screenWidth, screenHeight, "raylib [core] example - gestures detection"); Vector2 touchPosition = new(0, 0); Rectangle touchArea = new(220, 10, screenWidth - 230, screenHeight - 20); int gesturesCount = 0; string[] gestureStrings = new string[MaxGestureStrings]; Gesture currentGesture = Gesture.None; Gesture lastGesture = Gesture.None; // SetGesturesEnabled(0b0000000000001001); // Enable only some gestures to be detected SetTargetFPS(60); //-------------------------------------------------------------------------------------- // Main game loop while (!WindowShouldClose()) { // Update //---------------------------------------------------------------------------------- lastGesture = currentGesture; currentGesture = GetGestureDetected(); touchPosition = GetTouchPosition(0); if (CheckCollisionPointRec(touchPosition, touchArea) && (currentGesture != Gesture.None)) { if (currentGesture != lastGesture) { // Store gesture string switch ((Gesture)currentGesture) { case Gesture.Tap: gestureStrings[gesturesCount] = "GESTURE TAP"; break; case Gesture.DoubleTap: gestureStrings[gesturesCount] = "GESTURE DOUBLETAP"; break; case Gesture.Hold: gestureStrings[gesturesCount] = "GESTURE HOLD"; break; case Gesture.Drag: gestureStrings[gesturesCount] = "GESTURE DRAG"; break; case Gesture.SwipeRight: gestureStrings[gesturesCount] = "GESTURE SWIPE RIGHT"; break; case Gesture.SwipeLeft: gestureStrings[gesturesCount] = "GESTURE SWIPE LEFT"; break; case Gesture.SwipeUp: gestureStrings[gesturesCount] = "GESTURE SWIPE UP"; break; case Gesture.SwipeDown: gestureStrings[gesturesCount] = "GESTURE SWIPE DOWN"; break; case Gesture.PinchIn: gestureStrings[gesturesCount] = "GESTURE PINCH IN"; break; case Gesture.PinchOut: gestureStrings[gesturesCount] = "GESTURE PINCH OUT"; break; default: break; } gesturesCount++; // Reset gestures strings if (gesturesCount >= MaxGestureStrings) { for (int i = 0; i < MaxGestureStrings; i++) { gestureStrings[i] = " "; } gesturesCount = 0; } } } //---------------------------------------------------------------------------------- // Draw //---------------------------------------------------------------------------------- BeginDrawing(); ClearBackground(Color.RayWhite); DrawRectangleRec(touchArea, Color.Gray); DrawRectangle(225, 15, screenWidth - 240, screenHeight - 30, Color.RayWhite); DrawText("GESTURES TEST AREA", screenWidth - 270, screenHeight - 40, 20, ColorAlpha(Color.Gray, 0.5f)); for (int i = 0; i < gesturesCount; i++) { if (i % 2 == 0) { DrawRectangle(10, 30 + 20 * i, 200, 20, ColorAlpha(Color.LightGray, 0.5f)); } else { DrawRectangle(10, 30 + 20 * i, 200, 20, ColorAlpha(Color.LightGray, 0.3f)); } if (i < gesturesCount - 1) { DrawText(gestureStrings[i], 35, 36 + 20 * i, 10, Color.DarkGray); } else { DrawText(gestureStrings[i], 35, 36 + 20 * i, 10, Color.Maroon); } } DrawRectangleLines(10, 29, 200, screenHeight - 50, Color.Gray); DrawText("DETECTED GESTURES", 50, 15, 10, Color.Gray); if (currentGesture != Gesture.None) { DrawCircleV(touchPosition, 30, Color.Maroon); } EndDrawing(); //---------------------------------------------------------------------------------- } // De-Initialization //-------------------------------------------------------------------------------------- CloseWindow(); //-------------------------------------------------------------------------------------- return 0; } }