|
|
@ -263,9 +263,9 @@ static bool GetMouseButtonStatus(int button); // Returns if a mouse bu |
|
|
|
static void PollInputEvents(void); // Register user events |
|
|
|
static void SwapBuffers(void); // Copy back buffer to front buffers |
|
|
|
static void LogoAnimation(void); // Plays raylib logo appearing animation |
|
|
|
static void SetupViewport(void); // Set viewport parameters |
|
|
|
#if defined(PLATFORM_DESKTOP) || defined(PLATFORM_RPI) |
|
|
|
static void TakeScreenshot(void); // Takes a screenshot and saves it in the same folder as executable |
|
|
|
static void SetupViewport(void); |
|
|
|
#endif |
|
|
|
|
|
|
|
#if defined(PLATFORM_DESKTOP) || defined(PLATFORM_WEB) |
|
|
@ -292,6 +292,7 @@ static int32_t AndroidInputCallback(struct android_app *app, AInputEvent *event) |
|
|
|
#if defined(PLATFORM_WEB) |
|
|
|
static EM_BOOL EmscriptenFullscreenChangeCallback(int eventType, const EmscriptenFullscreenChangeEvent *e, void *userData); |
|
|
|
static EM_BOOL EmscriptenInputCallback(int eventType, const EmscriptenTouchEvent *touchEvent, void *userData); |
|
|
|
static EM_BOOL EmscriptenGamepadCallback(int eventType, const EmscriptenGamepadEvent *gamepadEvent, void *userData); |
|
|
|
#endif |
|
|
|
|
|
|
|
#if defined(PLATFORM_RPI) |
|
|
@ -346,9 +347,9 @@ void InitWindow(int width, int height, const char *title) |
|
|
|
emscripten_set_touchmove_callback("#canvas", NULL, 1, EmscriptenInputCallback); |
|
|
|
emscripten_set_touchcancel_callback("#canvas", NULL, 1, EmscriptenInputCallback); |
|
|
|
|
|
|
|
// l">TODO: Add gamepad support (not provided by GLFW3 on emscripten) |
|
|
|
o">//emscripten_set_gamepadconnected_callback(NULL, 1, EmscriptenInputCallback); |
|
|
|
o">//emscripten_set_gamepaddisconnected_callback(NULL, 1, EmscriptenInputCallback); |
|
|
|
// ">Support gamepad (not provided by GLFW3 on emscripten) |
|
|
|
emscripten_set_gamepadconnected_callback(NULL, 1, EmscriptenGamepadCallback); |
|
|
|
emscripten_set_gamepaddisconnected_callback(NULL, 1, EmscriptenGamepadCallback); |
|
|
|
#endif |
|
|
|
|
|
|
|
mousePosition.x = (float)screenWidth/2.0f; |
|
|
@ -1795,6 +1796,7 @@ static void InitGraphicsDevice(int width, int height) |
|
|
|
#endif |
|
|
|
} |
|
|
|
|
|
|
|
// Set viewport parameters |
|
|
|
static void SetupViewport(void) |
|
|
|
{ |
|
|
|
#ifdef __APPLE__ |
|
|
@ -1941,7 +1943,7 @@ static bool GetMouseButtonStatus(int button) |
|
|
|
#if defined(PLATFORM_DESKTOP) || defined(PLATFORM_WEB) |
|
|
|
return glfwGetMouseButton(window, button); |
|
|
|
#elif defined(PLATFORM_ANDROID) |
|
|
|
// TODO: Check for virtual mouse |
|
|
|
// TODO: Check for virtual mouse? |
|
|
|
return false; |
|
|
|
#elif defined(PLATFORM_RPI) |
|
|
|
// NOTE: Mouse buttons states are filled in PollInputEvents() |
|
|
@ -1987,8 +1989,6 @@ static void PollInputEvents(void) |
|
|
|
currentMouseWheelY = 0; |
|
|
|
#endif |
|
|
|
|
|
|
|
// NOTE: GLFW3 joystick functionality not available in web |
|
|
|
// TODO: Support joysticks using emscripten API |
|
|
|
#if defined(PLATFORM_DESKTOP) |
|
|
|
// Check if gamepads are ready |
|
|
|
// NOTE: We do it here in case of disconection |
|
|
@ -2041,6 +2041,47 @@ static void PollInputEvents(void) |
|
|
|
glfwPollEvents(); // Register keyboard/mouse events (callbacks)... and window events! |
|
|
|
#endif |
|
|
|
|
|
|
|
// Gamepad support using emscripten API |
|
|
|
// NOTE: GLFW3 joystick functionality not available in web |
|
|
|
#if defined(PLATFORM_WEB) |
|
|
|
// Get number of gamepads connected |
|
|
|
int numGamepads = emscripten_get_num_gamepads(); |
|
|
|
|
|
|
|
for (int i = 0; (i < numGamepads) && (i < MAX_GAMEPADS); i++) |
|
|
|
{ |
|
|
|
// Register previous gamepad button states |
|
|
|
for (int k = 0; k < MAX_GAMEPAD_BUTTONS; k++) previousGamepadState[i][k] = currentGamepadState[i][k]; |
|
|
|
|
|
|
|
EmscriptenGamepadEvent gamepadState; |
|
|
|
|
|
|
|
int result = emscripten_get_gamepad_status(i, &gamepadState); |
|
|
|
|
|
|
|
if (result == EMSCRIPTEN_RESULT_SUCCESS) |
|
|
|
{ |
|
|
|
// Register buttons data for every connected gamepad |
|
|
|
for (int j = 0; (j < gamepadState.numButtons) && (j < MAX_GAMEPAD_BUTTONS); j++) |
|
|
|
{ |
|
|
|
if (gamepadState.digitalButton[j] == 1) |
|
|
|
{ |
|
|
|
currentGamepadState[i][j] = 1; |
|
|
|
lastGamepadButtonPressed = j; |
|
|
|
} |
|
|
|
else currentGamepadState[i][j] = 0; |
|
|
|
|
|
|
|
//printf("Gamepad %d, button %d: Digital: %d, Analog: %g\n", gamepadState.index, j, gamepadState.digitalButton[j], gamepadState.analogButton[j]); |
|
|
|
} |
|
|
|
|
|
|
|
// Register axis data for every connected gamepad |
|
|
|
for (int j = 0; (j < gamepadState.numAxes) && (j < MAX_GAMEPAD_AXIS); j++) |
|
|
|
{ |
|
|
|
gamepadAxisState[i][j] = gamepadState.axis[j]; |
|
|
|
} |
|
|
|
|
|
|
|
gamepadAxisCount = gamepadState.numAxes; |
|
|
|
} |
|
|
|
} |
|
|
|
#endif |
|
|
|
|
|
|
|
#if defined(PLATFORM_ANDROID) |
|
|
|
// Register previous keys states |
|
|
|
// NOTE: Android supports up to 260 keys |
|
|
@ -2487,6 +2528,8 @@ static int32_t AndroidInputCallback(struct android_app *app, AInputEvent *event) |
|
|
|
#endif |
|
|
|
|
|
|
|
#if defined(PLATFORM_WEB) |
|
|
|
|
|
|
|
// Register fullscreen change events |
|
|
|
static EM_BOOL EmscriptenFullscreenChangeCallback(int eventType, const EmscriptenFullscreenChangeEvent *e, void *userData) |
|
|
|
{ |
|
|
|
//isFullscreen: int e->isFullscreen |
|
|
@ -2510,7 +2553,7 @@ static EM_BOOL EmscriptenFullscreenChangeCallback(int eventType, const Emscripte |
|
|
|
return 0; |
|
|
|
} |
|
|
|
|
|
|
|
// l">Web: Get input events |
|
|
|
// ">Register touch input events |
|
|
|
static EM_BOOL EmscriptenInputCallback(int eventType, const EmscriptenTouchEvent *touchEvent, void *userData) |
|
|
|
{ |
|
|
|
/* |
|
|
@ -2574,6 +2617,26 @@ static EM_BOOL EmscriptenInputCallback(int eventType, const EmscriptenTouchEvent |
|
|
|
|
|
|
|
return 1; |
|
|
|
} |
|
|
|
|
|
|
|
// Register connected/disconnected gamepads events |
|
|
|
static EM_BOOL EmscriptenGamepadCallback(int eventType, const EmscriptenGamepadEvent *gamepadEvent, void *userData) |
|
|
|
{ |
|
|
|
/* |
|
|
|
printf("%s: timeStamp: %g, connected: %d, index: %ld, numAxes: %d, numButtons: %d, id: \"%s\", mapping: \"%s\"\n", |
|
|
|
eventType != 0 ? emscripten_event_type_to_string(eventType) : "Gamepad state", |
|
|
|
gamepadEvent->timestamp, gamepadEvent->connected, gamepadEvent->index, gamepadEvent->numAxes, gamepadEvent->numButtons, gamepadEvent->id, gamepadEvent->mapping); |
|
|
|
|
|
|
|
for(int i = 0; i < gamepadEvent->numAxes; ++i) printf("Axis %d: %g\n", i, gamepadEvent->axis[i]); |
|
|
|
for(int i = 0; i < gamepadEvent->numButtons; ++i) printf("Button %d: Digital: %d, Analog: %g\n", i, gamepadEvent->digitalButton[i], gamepadEvent->analogButton[i]); |
|
|
|
*/ |
|
|
|
|
|
|
|
if ((gamepadEvent->connected) && (gamepadEvent->index < MAX_GAMEPADS)) gamepadReady[gamepadEvent->index] = true; |
|
|
|
else gamepadReady[gamepadEvent->index] = false; |
|
|
|
|
|
|
|
// TODO: Test gamepadEvent->index |
|
|
|
|
|
|
|
return 0; |
|
|
|
} |
|
|
|
#endif |
|
|
|
|
|
|
|
#if defined(PLATFORM_RPI) |
|
|
|