Added the controller name and info to the testgamepad window
Also added instructions for using the Virtual Controllermain
parent
3cbf16b944
commit
e425fdd416
|
@ -15,6 +15,7 @@
|
|||
#include <SDL3/SDL.h>
|
||||
#include <SDL3/SDL_main.h>
|
||||
#include <SDL3/SDL_test.h>
|
||||
#include <SDL3/SDL_test_font.h>
|
||||
|
||||
#include "gamepadutils.h"
|
||||
#include "testutils.h"
|
||||
|
@ -23,7 +24,7 @@
|
|||
#include <emscripten/emscripten.h>
|
||||
#endif
|
||||
|
||||
#define TITLE_HEIGHT 32
|
||||
#define TITLE_HEIGHT 48
|
||||
#define PANEL_SPACING 25
|
||||
#define PANEL_WIDTH 250
|
||||
#define GAMEPAD_WIDTH 512
|
||||
|
@ -548,6 +549,51 @@ static void VirtualGamepadMouseUp(float x, float y)
|
|||
}
|
||||
}
|
||||
|
||||
static void DrawGamepadWaiting(SDL_Renderer *renderer)
|
||||
{
|
||||
const char *text = "Waiting for gamepad, press A to add a virtual controller";
|
||||
float x, y;
|
||||
|
||||
x = (float)SCREEN_WIDTH / 2 - (FONT_CHARACTER_SIZE * SDL_strlen(text)) / 2;
|
||||
y = (float)TITLE_HEIGHT / 2 - FONT_CHARACTER_SIZE / 2;
|
||||
SDLTest_DrawString(renderer, x, y, text);
|
||||
}
|
||||
|
||||
static void DrawGamepadInfo(SDL_Renderer *renderer, SDL_Gamepad *gamepad)
|
||||
{
|
||||
const char *name;
|
||||
const char *serial;
|
||||
char text[128];
|
||||
float x, y;
|
||||
|
||||
name = SDL_GetGamepadName(gamepad);
|
||||
if (name && *name) {
|
||||
x = (float)SCREEN_WIDTH / 2 - (FONT_CHARACTER_SIZE * SDL_strlen(name)) / 2;
|
||||
y = (float)TITLE_HEIGHT / 2 - FONT_CHARACTER_SIZE / 2;
|
||||
SDLTest_DrawString(renderer, x, y, name);
|
||||
}
|
||||
|
||||
if (SDL_IsJoystickVirtual(SDL_GetGamepadInstanceID(gamepad))) {
|
||||
SDL_strlcpy(text, "Click on the gamepad image below to generate input", sizeof(text));
|
||||
x = (float)SCREEN_WIDTH / 2 - (FONT_CHARACTER_SIZE * SDL_strlen(text)) / 2;
|
||||
y = (float)TITLE_HEIGHT / 2 - FONT_CHARACTER_SIZE / 2 + FONT_LINE_HEIGHT + 2.0f;
|
||||
SDLTest_DrawString(renderer, x, y, text);
|
||||
}
|
||||
|
||||
SDL_snprintf(text, SDL_arraysize(text), "VID: 0x%.4x PID: 0x%.4x", SDL_GetGamepadVendor(gamepad), SDL_GetGamepadProduct(gamepad));
|
||||
y = (float)SCREEN_HEIGHT - 8.0f - FONT_LINE_HEIGHT;
|
||||
x = (float)SCREEN_WIDTH - 8.0f - (FONT_CHARACTER_SIZE * SDL_strlen(text));
|
||||
SDLTest_DrawString(renderer, x, y, text);
|
||||
|
||||
serial = SDL_GetGamepadSerial(gamepad);
|
||||
if (serial && *serial) {
|
||||
SDL_snprintf(text, SDL_arraysize(text), "Serial: %s", serial);
|
||||
x = (float)SCREEN_WIDTH / 2 - (FONT_CHARACTER_SIZE * SDL_strlen(text)) / 2;
|
||||
y = (float)SCREEN_HEIGHT - 8.0f - FONT_LINE_HEIGHT;
|
||||
SDLTest_DrawString(renderer, x, y, text);
|
||||
}
|
||||
}
|
||||
|
||||
static void loop(void *arg)
|
||||
{
|
||||
SDL_Event event;
|
||||
|
@ -687,16 +733,18 @@ static void loop(void *arg)
|
|||
/* blank screen, set up for drawing this frame. */
|
||||
SDL_SetRenderDrawColor(screen, 0xFF, 0xFF, 0xFF, SDL_ALPHA_OPAQUE);
|
||||
SDL_RenderClear(screen);
|
||||
SDL_SetRenderDrawColor(screen, 0x10, 0x10, 0x10, SDL_ALPHA_OPAQUE);
|
||||
|
||||
if (gamepad) {
|
||||
SetGamepadImageShowingFront(image, ShowingFront());
|
||||
UpdateGamepadImageFromGamepad(image, gamepad);
|
||||
RenderGamepadImage(image);
|
||||
|
||||
SDL_SetRenderDrawColor(screen, 0x10, 0x10, 0x10, SDL_ALPHA_OPAQUE);
|
||||
RenderGamepadDisplay(gamepad_elements, gamepad);
|
||||
RenderJoystickDisplay(joystick_elements, SDL_GetGamepadJoystick(gamepad));
|
||||
|
||||
DrawGamepadInfo(screen, gamepad);
|
||||
|
||||
/* Update LED based on left thumbstick position */
|
||||
{
|
||||
Sint16 x = SDL_GetGamepadAxis(gamepad, SDL_GAMEPAD_AXIS_LEFTX);
|
||||
|
@ -745,6 +793,8 @@ static void loop(void *arg)
|
|||
SDL_RumbleGamepadTriggers(gamepad, left_rumble, right_rumble, 250);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
DrawGamepadWaiting(screen);
|
||||
}
|
||||
SDL_Delay(16);
|
||||
SDL_RenderPresent(screen);
|
||||
|
|
Loading…
Reference in New Issue