@ -20,9 +20,9 @@
# include "raylib.h"
/ / NOTE : Gamepad name ID depends on drivers and OS
# define XBOX360_LEGACY_NAME_ID "Xbox Controller "
# define XBOX360_NAME_ID "Xbox 360 Controller "
# define PS3_NAME_ID "Sony PLAYSTATION(R)3 Controller "
# define XBOX_ALIAS_1 "xbox "
# define XBOX_ALIAS_2 "x-box "
# define PS_ALIAS "playstation "
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ / Program main entry point
@ -41,6 +41,14 @@ int main(void)
Texture2D texPs3Pad = LoadTexture ( " resources/ps3.png " ) ;
Texture2D texXboxPad = LoadTexture ( " resources/xbox.png " ) ;
/ / Set axis deadzones
const float leftStickDeadzoneX = 0.1f ;
const float leftStickDeadzoneY = 0.1f ;
const float rightStickDeadzoneX = 0.1f ;
const float rightStickDeadzoneY = 0.1f ;
const float leftTriggerDeadzone = - 0.9f ;
const float rightTriggerDeadzone = - 0.9f ;
SetTargetFPS ( 60 ) ; / / Set our game to run at 60 frames - per - second
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@ -67,7 +75,23 @@ int main(void)
{
DrawText ( TextFormat ( " GP%d: %s " , gamepad , GetGamepadName ( gamepad ) ) , 10 , 10 , 10 , BLACK ) ;
if ( TextIsEqual ( GetGamepadName ( gamepad ) , XBOX360_LEGACY_NAME_ID ) | | TextIsEqual ( GetGamepadName ( gamepad ) , XBOX360_NAME_ID ) )
/ / Get axis values
float leftStickX = GetGamepadAxisMovement ( gamepad , GAMEPAD_AXIS_LEFT_X ) ;
float leftStickY = GetGamepadAxisMovement ( gamepad , GAMEPAD_AXIS_LEFT_Y ) ;
float rightStickX = GetGamepadAxisMovement ( gamepad , GAMEPAD_AXIS_RIGHT_X ) ;
float rightStickY = GetGamepadAxisMovement ( gamepad , GAMEPAD_AXIS_RIGHT_Y ) ;
float leftTrigger = GetGamepadAxisMovement ( gamepad , GAMEPAD_AXIS_LEFT_TRIGGER ) ;
float rightTrigger = GetGamepadAxisMovement ( gamepad , GAMEPAD_AXIS_RIGHT_TRIGGER ) ;
/ / Calculate deadzones
if ( leftStickX > - leftStickDeadzoneX & & leftStickX < leftStickDeadzoneX ) leftStickX = 0.0f ;
if ( leftStickY > - leftStickDeadzoneY & & leftStickY < leftStickDeadzoneY ) leftStickY = 0.0f ;
if ( rightStickX > - rightStickDeadzoneX & & rightStickX < rightStickDeadzoneX ) rightStickX = 0.0f ;
if ( rightStickY > - rightStickDeadzoneY & & rightStickY < rightStickDeadzoneY ) rightStickY = 0.0f ;
if ( leftTrigger < leftTriggerDeadzone ) leftTrigger = - 1.0f ;
if ( rightTrigger < rightTriggerDeadzone ) rightTrigger = - 1.0f ;
if ( TextFindIndex ( TextToLower ( GetGamepadName ( gamepad ) ) , XBOX_ALIAS_1 ) > - 1 | | TextFindIndex ( TextToLower ( GetGamepadName ( gamepad ) ) , XBOX_ALIAS_2 ) > - 1 )
{
DrawTexture ( texXboxPad , 0 , 0 , DARKGRAY ) ;
@ -95,32 +119,31 @@ int main(void)
if ( IsGamepadButtonDown ( gamepad , GAMEPAD_BUTTON_RIGHT_TRIGGER_1 ) ) DrawCircle ( 536 , 61 , 20 , RED ) ;
/ / Draw axis : left joystick
Color leftGamepadColor = BLACK ;
if ( IsGamepadButtonDown ( gamepad , GAMEPAD_BUTTON_LEFT_THUMB ) ) leftGamepadColor = RED ;
DrawCircle ( 259 , 152 , 39 , BLACK ) ;
DrawCircle ( 259 , 152 , 34 , LIGHTGRAY ) ;
DrawCircle ( 259 + ( int ) ( GetGamepadAxisMovement ( gamepad , GAMEPAD_AXIS_LEFT_X ) * 20 ) ,
152 + ( int ) ( GetGamepadAxisMovement ( gamepad , GAMEPAD_AXIS_LEFT_Y ) * 20 ) , 25 , leftGamepadColor ) ;
DrawCircle ( 259 + ( int ) ( leftStickX * 20 ) ,
152 + ( int ) ( leftStickY * 20 ) , 25 , leftGamepadColor ) ;
/ / Draw axis : right joystick
Color rightGamepadColor = BLACK ;
if ( IsGamepadButtonDown ( gamepad , GAMEPAD_BUTTON_RIGHT_THUMB ) ) rightGamepadColor = RED ;
DrawCircle ( 461 , 237 , 38 , BLACK ) ;
DrawCircle ( 461 , 237 , 33 , LIGHTGRAY ) ;
DrawCircle ( 461 + ( int ) ( GetGamepadAxisMovement ( gamepad , GAMEPAD_AXIS_RIGHT_X ) * 20 ) ,
237 + ( int ) ( GetGamepadAxisMovement ( gamepad , GAMEPAD_AXIS_RIGHT_Y ) * 20 ) , 25 , rightGamepadColor ) ;
DrawCircle ( 461 + ( int ) ( rightStickX * 20 ) ,
237 + ( int ) ( rightStickY * 20 ) , 25 , rightGamepadColor ) ;
/ / Draw axis : left - right triggers
DrawRectangle ( 170 , 30 , 15 , 70 , GRAY ) ;
DrawRectangle ( 604 , 30 , 15 , 70 , GRAY ) ;
DrawRectangle ( 170 , 30 , 15 , ( int ) ( ( ( 1 + GetGamepadAxisMovement ( gamepad , GAMEPAD_AXIS_LEFT_TRIGGER ) ) / 2 ) * 70 ) , RED ) ;
DrawRectangle ( 604 , 30 , 15 , ( int ) ( ( ( 1 + GetGamepadAxisMovement ( gamepad , GAMEPAD_AXIS_RIGHT_TRIGGER ) ) / 2 ) * 70 ) , RED ) ;
DrawRectangle ( 170 , 30 , 15 , ( int ) ( ( ( 1 + leftTrigger ) / 2 ) * 70 ) , RED ) ;
DrawRectangle ( 604 , 30 , 15 , ( int ) ( ( ( 1 + rightTrigger ) / 2 ) * 70 ) , RED ) ;
/ / DrawText ( TextFormat ( " Xbox axis LT: %02.02f " , GetGamepadAxisMovement ( gamepad , GAMEPAD_AXIS_LEFT_TRIGGER ) ) , 10 , 40 , 10 , BLACK ) ;
/ / DrawText ( TextFormat ( " Xbox axis RT: %02.02f " , GetGamepadAxisMovement ( gamepad , GAMEPAD_AXIS_RIGHT_TRIGGER ) ) , 10 , 60 , 10 , BLACK ) ;
}
else if ( TextIsEqual ( GetGamepadName ( gamepad ) , PS3_NAME_ID ) )
else if ( TextFindIndex ( TextToLower ( GetGamepadName ( gamepad ) ) , PS_ALIAS ) > - 1 )
{
DrawTexture ( texPs3Pad , 0 , 0 , DARKGRAY ) ;
@ -150,30 +173,85 @@ int main(void)
/ / Draw axis : left joystick
Color leftGamepadColor = BLACK ;
if ( IsGamepadButtonDown ( gamepad , GAMEPAD_BUTTON_LEFT_THUMB ) ) leftGamepadColor = RED ;
DrawCircle ( 319 , 255 , 35 , leftGamepadColor ) ;
DrawCircle ( 319 , 255 , 35 , BLACK ) ;
DrawCircle ( 319 , 255 , 31 , LIGHTGRAY ) ;
DrawCircle ( 319 + ( int ) ( GetGamepadAxisMovement ( gamepad , GAMEPAD_AXIS_LEFT_X ) * 20 ) ,
255 + ( int ) ( GetGamepadAxisMovement ( gamepad , GAMEPAD_AXIS_LEFT_Y ) * 20 ) , 25 , leftGamepadColor ) ;
DrawCircle ( 319 + ( int ) ( leftStickX * 20 ) ,
255 + ( int ) ( leftStickY * 20 ) , 25 , leftGamepadColor ) ;
/ / Draw axis : right joystick
Color rightGamepadColor = BLACK ;
if ( IsGamepadButtonDown ( gamepad , GAMEPAD_BUTTON_RIGHT_THUMB ) ) rightGamepadColor = RED ;
DrawCircle ( 475 , 255 , 35 , BLACK ) ;
DrawCircle ( 475 , 255 , 31 , LIGHTGRAY ) ;
DrawCircle ( 475 + ( int ) ( GetGamepadAxisMovement ( gamepad , GAMEPAD_AXIS_RIGHT_X ) * 20 ) ,
255 + ( int ) ( GetGamepadAxisMovement ( gamepad , GAMEPAD_AXIS_RIGHT_Y ) * 20 ) , 25 , rightGamepadColor ) ;
DrawCircle ( 475 + ( int ) ( rightStickX * 20 ) ,
255 + ( int ) ( rightStickY * 20 ) , 25 , rightGamepadColor ) ;
/ / Draw axis : left - right triggers
DrawRectangle ( 169 , 48 , 15 , 70 , GRAY ) ;
DrawRectangle ( 611 , 48 , 15 , 70 , GRAY ) ;
DrawRectangle ( 169 , 48 , 15 , ( int ) ( ( ( 1 - GetGamepadAxisMovement ( gamepad , GAMEPAD_AXIS_LEFT_TRIGGER ) ) / 2 ) * 70 ) , RED ) ;
DrawRectangle ( 611 , 48 , 15 , ( int ) ( ( ( 1 - GetGamepadAxisMovement ( gamepad , GAMEPAD_AXIS_RIGHT_TRIGGER ) ) / 2 ) * 70 ) , RED ) ;
DrawRectangle ( 169 , 48 , 15 , ( int ) ( ( ( 1 + leftTrigger ) / 2 ) * 70 ) , RED ) ;
DrawRectangle ( 611 , 48 , 15 , ( int ) ( ( ( 1 + rightTrigger ) / 2 ) * 70 ) , RED ) ;
}
else
{
DrawText ( " - GENERIC GAMEPAD - " , 280 , 180 , 20 , GRAY ) ;
/ / TODO : Draw generic gamepad
/ / Draw background : generic
DrawRectangleRounded ( ( Rectangle ) { 175 , 110 , 460 , 220 } , 0.3f , 0.0f , DARKGRAY ) ;
/ / Draw buttons : basic
DrawCircle ( 365 , 170 , 12 , RAYWHITE ) ;
DrawCircle ( 405 , 170 , 12 , RAYWHITE ) ;
DrawCircle ( 445 , 170 , 12 , RAYWHITE ) ;
DrawCircle ( 516 , 191 , 17 , RAYWHITE ) ;
DrawCircle ( 551 , 227 , 17 , RAYWHITE ) ;
DrawCircle ( 587 , 191 , 17 , RAYWHITE ) ;
DrawCircle ( 551 , 155 , 17 , RAYWHITE ) ;
if ( IsGamepadButtonDown ( gamepad , GAMEPAD_BUTTON_MIDDLE_LEFT ) ) DrawCircle ( 365 , 170 , 10 , RED ) ;
if ( IsGamepadButtonDown ( gamepad , GAMEPAD_BUTTON_MIDDLE ) ) DrawCircle ( 405 , 170 , 10 , GREEN ) ;
if ( IsGamepadButtonDown ( gamepad , GAMEPAD_BUTTON_MIDDLE_RIGHT ) ) DrawCircle ( 445 , 170 , 10 , BLUE ) ;
if ( IsGamepadButtonDown ( gamepad , GAMEPAD_BUTTON_RIGHT_FACE_LEFT ) ) DrawCircle ( 516 , 191 , 15 , GOLD ) ;
if ( IsGamepadButtonDown ( gamepad , GAMEPAD_BUTTON_RIGHT_FACE_DOWN ) ) DrawCircle ( 551 , 227 , 15 , BLUE ) ;
if ( IsGamepadButtonDown ( gamepad , GAMEPAD_BUTTON_RIGHT_FACE_RIGHT ) ) DrawCircle ( 587 , 191 , 15 , GREEN ) ;
if ( IsGamepadButtonDown ( gamepad , GAMEPAD_BUTTON_RIGHT_FACE_UP ) ) DrawCircle ( 551 , 155 , 15 , RED ) ;
/ / Draw buttons : d - pad
DrawRectangle ( 245 , 145 , 28 , 88 , RAYWHITE ) ;
DrawRectangle ( 215 , 174 , 88 , 29 , RAYWHITE ) ;
DrawRectangle ( 247 , 147 , 24 , 84 , BLACK ) ;
DrawRectangle ( 217 , 176 , 84 , 25 , BLACK ) ;
if ( IsGamepadButtonDown ( gamepad , GAMEPAD_BUTTON_LEFT_FACE_UP ) ) DrawRectangle ( 247 , 147 , 24 , 29 , RED ) ;
if ( IsGamepadButtonDown ( gamepad , GAMEPAD_BUTTON_LEFT_FACE_DOWN ) ) DrawRectangle ( 247 , 147 + 54 , 24 , 30 , RED ) ;
if ( IsGamepadButtonDown ( gamepad , GAMEPAD_BUTTON_LEFT_FACE_LEFT ) ) DrawRectangle ( 217 , 176 , 30 , 25 , RED ) ;
if ( IsGamepadButtonDown ( gamepad , GAMEPAD_BUTTON_LEFT_FACE_RIGHT ) ) DrawRectangle ( 217 + 54 , 176 , 30 , 25 , RED ) ;
/ / Draw buttons : left - right back
DrawRectangleRounded ( ( Rectangle ) { 215 , 98 , 100 , 10 } , 0.5f , 0.0f , DARKGRAY ) ;
DrawRectangleRounded ( ( Rectangle ) { 495 , 98 , 100 , 10 } , 0.5f , 0.0f , DARKGRAY ) ;
if ( IsGamepadButtonDown ( gamepad , GAMEPAD_BUTTON_LEFT_TRIGGER_1 ) ) DrawRectangleRounded ( ( Rectangle ) { 215 , 98 , 100 , 10 } , 0.5f , 0.0f , RED ) ;
if ( IsGamepadButtonDown ( gamepad , GAMEPAD_BUTTON_RIGHT_TRIGGER_1 ) ) DrawRectangleRounded ( ( Rectangle ) { 495 , 98 , 100 , 10 } , 0.5f , 0.0f , RED ) ;
/ / Draw axis : left joystick
Color leftGamepadColor = BLACK ;
if ( IsGamepadButtonDown ( gamepad , GAMEPAD_BUTTON_LEFT_THUMB ) ) leftGamepadColor = RED ;
DrawCircle ( 345 , 260 , 40 , BLACK ) ;
DrawCircle ( 345 , 260 , 35 , LIGHTGRAY ) ;
DrawCircle ( 345 + ( int ) ( leftStickX * 20 ) ,
260 + ( int ) ( leftStickY * 20 ) , 25 , leftGamepadColor ) ;
/ / Draw axis : right joystick
Color rightGamepadColor = BLACK ;
if ( IsGamepadButtonDown ( gamepad , GAMEPAD_BUTTON_RIGHT_THUMB ) ) rightGamepadColor = RED ;
DrawCircle ( 465 , 260 , 40 , BLACK ) ;
DrawCircle ( 465 , 260 , 35 , LIGHTGRAY ) ;
DrawCircle ( 465 + ( int ) ( rightStickX * 20 ) ,
260 + ( int ) ( rightStickY * 20 ) , 25 , rightGamepadColor ) ;
/ / Draw axis : left - right triggers
DrawRectangle ( 151 , 110 , 15 , 70 , GRAY ) ;
DrawRectangle ( 644 , 110 , 15 , 70 , GRAY ) ;
DrawRectangle ( 151 , 110 , 15 , ( int ) ( ( ( 1 + leftTrigger ) / 2 ) * 70 ) , RED ) ;
DrawRectangle ( 644 , 110 , 15 , ( int ) ( ( ( 1 + rightTrigger ) / 2 ) * 70 ) , RED ) ;
}
DrawText ( TextFormat ( " DETECTED AXIS [%i]: " , GetGamepadAxisCount ( 0 ) ) , 10 , 50 , 10 , MAROON ) ;