From 3be81b01d7463a63d59dd575b7f5d7c267e3c086 Mon Sep 17 00:00:00 2001 From: raysan5 Date: Wed, 2 Nov 2016 13:39:58 +0100 Subject: [PATCH] Brand new gamepad example --- examples/core_input_gamepad.c | 165 +++++++++++++++++++++++++++++----- examples/resources/ps3.png | Bin 0 -> 19345 bytes examples/resources/xbox.png | Bin 0 -> 16177 bytes 3 files changed, 142 insertions(+), 23 deletions(-) create mode 100644 examples/resources/ps3.png create mode 100644 examples/resources/xbox.png diff --git a/examples/core_input_gamepad.c b/examples/core_input_gamepad.c index 6c356829..77d11f38 100644 --- a/examples/core_input_gamepad.c +++ b/examples/core_input_gamepad.c @@ -3,17 +3,29 @@ * raylib [core] example - Gamepad input * * NOTE: This example requires a Gamepad connected to the system -* raylib is configured to work with Xbox 360 gamepad, check raylib.h for buttons configuration +* raylib is configured to work with the following gamepads: +* Xbox 360 Controller (Xbox 360, Xbox One) +* PLAYSTATION(R)3 Controller +* Check raylib.h for buttons configuration * -* This example has been created using raylib 1.0 (www.raylib.com) +* This example has been created using raylib 1.6 (www.raylib.com) * raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details) * -* Copyright (c) 2014 Ramon Santamaria (@raysan5) +* Copyright (c) 2013-2016 Ramon Santamaria (@raysan5) * ********************************************************************************************/ #include "raylib.h" +// NOTE: Gamepad name ID depends on drivers and OS +#if defined(PLATFORM_RPI) + #define XBOX360_NAME_ID "Microsoft X-Box 360 pad" + #define PS3_NAME_ID "PLAYSTATION(R)3 Controller" +#else + #define XBOX360_NAME_ID "Xbox 360 Controller" + #define PS3_NAME_ID "PLAYSTATION(R)3 Controller" +#endif + int main() { // Initialization @@ -21,12 +33,14 @@ int main() int screenWidth = 800; int screenHeight = 450; + SetConfigFlags(FLAG_MSAA_4X_HINT); // Set MSAA 4X hint before windows creation + InitWindow(screenWidth, screenHeight, "raylib [core] example - gamepad input"); + + Texture2D texPs3Pad = LoadTexture("resources/ps3.png"); + Texture2D texXboxPad = LoadTexture("resources/xbox.png"); - Vector2 ballPosition = { (float)screenWidth/2, (float)screenHeight/2 }; - Vector2 gamepadMovement = { 0.0f, 0.0f }; - - SetTargetFPS(60); // Set target frames-per-second + SetTargetFPS(60); //-------------------------------------------------------------------------------------- // Main game loop @@ -34,20 +48,7 @@ int main() { // Update //---------------------------------------------------------------------------------- - if (IsGamepadAvailable(GAMEPAD_PLAYER1)) - { - gamepadMovement.x = GetGamepadAxisMovement(GAMEPAD_PLAYER1, GAMEPAD_XBOX_AXIS_LEFT_X); - gamepadMovement.y = GetGamepadAxisMovement(GAMEPAD_PLAYER1, GAMEPAD_XBOX_AXIS_LEFT_Y); - - ballPosition.x += gamepadMovement.x; - ballPosition.y -= gamepadMovement.y; - - if (IsGamepadButtonPressed(GAMEPAD_PLAYER1, GAMEPAD_BUTTON_A)) - { - ballPosition.x = (float)screenWidth/2; - ballPosition.y = (float)screenHeight/2; - } - } + // ... //---------------------------------------------------------------------------------- // Draw @@ -55,10 +56,125 @@ int main() BeginDrawing(); ClearBackground(RAYWHITE); + + if (IsGamepadAvailable(GAMEPAD_PLAYER1)) + { + DrawText(FormatText("GP1: %s", GetGamepadName(GAMEPAD_PLAYER1)), 10, 10, 10, BLACK); - DrawText("move the ball with gamepad", 10, 10, 20, DARKGRAY); + if (IsGamepadName(GAMEPAD_PLAYER1, XBOX360_NAME_ID)) + { + DrawTexture(texXboxPad, 0, 0, DARKGRAY); + + // Draw buttons: xbox home + if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_XBOX_BUTTON_HOME)) DrawCircle(396, 222, 13, RED); - DrawCircleV(ballPosition, 50, MAROON); + // Draw buttons: basic + if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_XBOX_BUTTON_START)) DrawCircle(436, 150, 9, RED); + if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_XBOX_BUTTON_SELECT)) DrawCircle(352, 150, 9, RED); + if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_XBOX_BUTTON_X)) DrawCircle(501, 151, 15, BLUE); + if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_XBOX_BUTTON_A)) DrawCircle(536, 187, 15, LIME); + if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_XBOX_BUTTON_B)) DrawCircle(572, 151, 15, MAROON); + if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_XBOX_BUTTON_Y)) DrawCircle(536, 115, 15, GOLD); + + // Draw buttons: d-pad + DrawRectangle(317, 202, 19, 71, BLACK); + DrawRectangle(293, 228, 69, 19, BLACK); + if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_XBOX_BUTTON_UP)) DrawRectangle(317, 202, 19, 26, RED); + if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_XBOX_BUTTON_DOWN)) DrawRectangle(317, 202 + 45, 19, 26, RED); + if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_XBOX_BUTTON_LEFT)) DrawRectangle(292, 228, 25, 19, RED); + if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_XBOX_BUTTON_RIGHT)) DrawRectangle(292 + 44, 228, 26, 19, RED); + + // Draw buttons: left-right back + if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_XBOX_BUTTON_LB)) DrawCircle(259, 61, 20, RED); + if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_XBOX_BUTTON_RB)) DrawCircle(536, 61, 20, RED); + + // Draw axis: left joystick + DrawCircle(259, 152, 39, BLACK); + DrawCircle(259, 152, 34, LIGHTGRAY); + DrawCircle(259 + (GetGamepadAxisMovement(GAMEPAD_PLAYER1, GAMEPAD_XBOX_AXIS_LEFT_X)*20), + 152 - (GetGamepadAxisMovement(GAMEPAD_PLAYER1, GAMEPAD_XBOX_AXIS_LEFT_Y)*20), 25, BLACK); + + // Draw axis: right joystick + DrawCircle(461, 237, 38, BLACK); + DrawCircle(461, 237, 33, LIGHTGRAY); + DrawCircle(461 + (GetGamepadAxisMovement(GAMEPAD_PLAYER1, GAMEPAD_XBOX_AXIS_RIGHT_X)*20), + 237 - (GetGamepadAxisMovement(GAMEPAD_PLAYER1, GAMEPAD_XBOX_AXIS_RIGHT_Y)*20), 25, BLACK); + + // Draw axis: left-right triggers + DrawRectangle(170, 30, 15, 70, GRAY); + DrawRectangle(604, 30, 15, 70, GRAY); + DrawRectangle(170, 30, 15, (((1.0f + GetGamepadAxisMovement(GAMEPAD_PLAYER1, GAMEPAD_XBOX_AXIS_LT))/2.0f)*70), RED); + DrawRectangle(604, 30, 15, (((1.0f + GetGamepadAxisMovement(GAMEPAD_PLAYER1, GAMEPAD_XBOX_AXIS_RT))/2.0f)*70), RED); + + //DrawText(FormatText("Xbox axis LT: %02.02f", GetGamepadAxisMovement(GAMEPAD_PLAYER1, GAMEPAD_XBOX_AXIS_LT)), 10, 40, 10, BLACK); + //DrawText(FormatText("Xbox axis RT: %02.02f", GetGamepadAxisMovement(GAMEPAD_PLAYER1, GAMEPAD_XBOX_AXIS_RT)), 10, 60, 10, BLACK); + } + else if (IsGamepadName(GAMEPAD_PLAYER1, PS3_NAME_ID)) + { + DrawTexture(texPs3Pad, 0, 0, DARKGRAY); + + // Draw buttons: ps + if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_PS3_BUTTON_PS)) DrawCircle(396, 222, 13, RED); + + // Draw buttons: basic + if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_PS3_BUTTON_SELECT)) DrawRectangle(328, 170, 32, 13, RED); + if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_PS3_BUTTON_START)) DrawTriangle((Vector2){ 436, 168 }, (Vector2){ 436, 185 }, (Vector2){ 464, 177 }, RED); + if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_PS3_BUTTON_TRIANGLE)) DrawCircle(557, 144, 13, LIME); + if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_PS3_BUTTON_CIRCLE)) DrawCircle(586, 173, 13, RED); + if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_PS3_BUTTON_CROSS)) DrawCircle(557, 203, 13, VIOLET); + if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_PS3_BUTTON_SQUARE)) DrawCircle(527, 173, 13, PINK); + + // Draw buttons: d-pad + DrawRectangle(225, 132, 24, 84, BLACK); + DrawRectangle(195, 161, 84, 25, BLACK); + if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_PS3_BUTTON_UP)) DrawRectangle(225, 132, 24, 29, RED); + if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_PS3_BUTTON_DOWN)) DrawRectangle(225, 132 + 54, 24, 30, RED); + if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_PS3_BUTTON_LEFT)) DrawRectangle(195, 161, 30, 25, RED); + if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_PS3_BUTTON_RIGHT)) DrawRectangle(195 + 54, 161, 30, 25, RED); + + // Draw buttons: left-right back buttons + if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_PS3_BUTTON_L1)) DrawCircle(239, 82, 20, RED); + if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_PS3_BUTTON_R1)) DrawCircle(557, 82, 20, RED); + + // Draw axis: left joystick + DrawCircle(319, 255, 35, BLACK); + DrawCircle(319, 255, 31, LIGHTGRAY); + DrawCircle(319 + (GetGamepadAxisMovement(GAMEPAD_PLAYER1, GAMEPAD_PS3_AXIS_LEFT_X)*20), + 255 + (GetGamepadAxisMovement(GAMEPAD_PLAYER1, GAMEPAD_PS3_AXIS_LEFT_Y)*20), 25, BLACK); + + // Draw axis: right joystick + DrawCircle(475, 255, 35, BLACK); + DrawCircle(475, 255, 31, LIGHTGRAY); + DrawCircle(475 + (GetGamepadAxisMovement(GAMEPAD_PLAYER1, GAMEPAD_PS3_AXIS_RIGHT_X)*20), + 255 + (GetGamepadAxisMovement(GAMEPAD_PLAYER1, GAMEPAD_PS3_AXIS_RIGHT_Y)*20), 25, BLACK); + + // Draw axis: left-right triggers + DrawRectangle(169, 48, 15, 70, GRAY); + DrawRectangle(611, 48, 15, 70, GRAY); + DrawRectangle(169, 48, 15, (((1.0f - GetGamepadAxisMovement(GAMEPAD_PLAYER1, GAMEPAD_PS3_AXIS_L2))/2.0f)*70), RED); + DrawRectangle(611, 48, 15, (((1.0f - GetGamepadAxisMovement(GAMEPAD_PLAYER1, GAMEPAD_PS3_AXIS_R2))/2.0f)*70), RED); + } + else + { + // TODO: Draw generic gamepad + } + + DrawText(FormatText("DETECTED AXIS [%i]:", GetGamepadAxisCount(GAMEPAD_PLAYER1)), 10, 50, 10, MAROON); + + for (int i = 0; i < GetGamepadAxisCount(GAMEPAD_PLAYER1); i++) + { + DrawText(FormatText("AXIS %i: %.02f", i, GetGamepadAxisMovement(GAMEPAD_PLAYER1, i)), 20, 70 + 20*i, 10, DARKGRAY); + } + + if (GetGamepadButtonPressed() != -1) DrawText(FormatText("DETECTED BUTTON: %i", GetGamepadButtonPressed()), 10, 430, 10, RED); + else DrawText("DETECTED BUTTON: NONE", 10, 430, 10, GRAY); + } + else + { + DrawText("GP1: NOT DETECTED", 10, 10, 10, GRAY); + + DrawTexture(texXboxPad, 0, 0, LIGHTGRAY); + } EndDrawing(); //---------------------------------------------------------------------------------- @@ -66,6 +182,9 @@ int main() // De-Initialization //-------------------------------------------------------------------------------------- + UnloadTexture(texPs3Pad); + UnloadTexture(texXboxPad); + CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- diff --git a/examples/resources/ps3.png b/examples/resources/ps3.png new file mode 100644 index 0000000000000000000000000000000000000000..98befacc43a657aa442d7998c2142bb64325876d GIT binary patch literal 19345 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 BXzTz0 literal 0 HcmV?d00001 diff --git a/examples/resources/xbox.png b/examples/resources/xbox.png new file mode 100644 index 0000000000000000000000000000000000000000..029c91090bb75765d26402274191cbeb10b87b2b GIT binary patch literal 16177 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 literal 0 HcmV?d00001