Web: Support pointer lock
This commit is contained in:
parent
ca338b3318
commit
d2d4b17633
1 changed files with 47 additions and 8 deletions
55
src/core.c
55
src/core.c
|
@ -343,7 +343,9 @@ static int32_t AndroidInputCallback(struct android_app *app, AInputEvent *event)
|
||||||
|
|
||||||
#if defined(PLATFORM_WEB)
|
#if defined(PLATFORM_WEB)
|
||||||
static EM_BOOL EmscriptenFullscreenChangeCallback(int eventType, const EmscriptenFullscreenChangeEvent *e, void *userData);
|
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 EmscriptenKeyboardCallback(int eventType, const EmscriptenKeyboardEvent *keyEvent, void *userData);
|
||||||
|
static EM_BOOL EmscriptenMouseCallback(int eventType, const EmscriptenMouseEvent *mouseEvent, void *userData);
|
||||||
|
static EM_BOOL EmscriptenTouchCallback(int eventType, const EmscriptenTouchEvent *touchEvent, void *userData);
|
||||||
static EM_BOOL EmscriptenGamepadCallback(int eventType, const EmscriptenGamepadEvent *gamepadEvent, void *userData);
|
static EM_BOOL EmscriptenGamepadCallback(int eventType, const EmscriptenGamepadEvent *gamepadEvent, void *userData);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -399,15 +401,21 @@ void InitWindow(int width, int height, const char *title)
|
||||||
#if defined(PLATFORM_WEB)
|
#if defined(PLATFORM_WEB)
|
||||||
emscripten_set_fullscreenchange_callback(0, 0, 1, EmscriptenFullscreenChangeCallback);
|
emscripten_set_fullscreenchange_callback(0, 0, 1, EmscriptenFullscreenChangeCallback);
|
||||||
|
|
||||||
// NOTE: Some code examples
|
// Support keyboard events
|
||||||
|
emscripten_set_keypress_callback("#canvas", NULL, 1, EmscriptenKeyboardCallback);
|
||||||
|
|
||||||
|
// Support mouse events
|
||||||
|
emscripten_set_click_callback("#canvas", NULL, 1, EmscriptenMouseCallback);
|
||||||
|
|
||||||
|
// Support touch events
|
||||||
|
emscripten_set_touchstart_callback("#canvas", NULL, 1, EmscriptenTouchCallback);
|
||||||
|
emscripten_set_touchend_callback("#canvas", NULL, 1, EmscriptenTouchCallback);
|
||||||
|
emscripten_set_touchmove_callback("#canvas", NULL, 1, EmscriptenTouchCallback);
|
||||||
|
emscripten_set_touchcancel_callback("#canvas", NULL, 1, EmscriptenTouchCallback);
|
||||||
//emscripten_set_touchstart_callback(0, NULL, 1, Emscripten_HandleTouch);
|
//emscripten_set_touchstart_callback(0, NULL, 1, Emscripten_HandleTouch);
|
||||||
//emscripten_set_touchend_callback("#canvas", data, 0, Emscripten_HandleTouch);
|
//emscripten_set_touchend_callback("#canvas", data, 0, Emscripten_HandleTouch);
|
||||||
emscripten_set_touchstart_callback("#canvas", NULL, 1, EmscriptenInputCallback);
|
|
||||||
emscripten_set_touchend_callback("#canvas", NULL, 1, EmscriptenInputCallback);
|
|
||||||
emscripten_set_touchmove_callback("#canvas", NULL, 1, EmscriptenInputCallback);
|
|
||||||
emscripten_set_touchcancel_callback("#canvas", NULL, 1, EmscriptenInputCallback);
|
|
||||||
|
|
||||||
// Support gamepad (not provided by GLFW3 on emscripten)
|
// Support gamepad events (not provided by GLFW3 on emscripten)
|
||||||
emscripten_set_gamepadconnected_callback(NULL, 1, EmscriptenGamepadCallback);
|
emscripten_set_gamepadconnected_callback(NULL, 1, EmscriptenGamepadCallback);
|
||||||
emscripten_set_gamepaddisconnected_callback(NULL, 1, EmscriptenGamepadCallback);
|
emscripten_set_gamepaddisconnected_callback(NULL, 1, EmscriptenGamepadCallback);
|
||||||
#endif
|
#endif
|
||||||
|
@ -2700,8 +2708,39 @@ static EM_BOOL EmscriptenFullscreenChangeCallback(int eventType, const Emscripte
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Register keyboard input events
|
||||||
|
static EM_BOOL EmscriptenKeyboardCallback(int eventType, const EmscriptenKeyboardEvent *keyEvent, void *userData)
|
||||||
|
{
|
||||||
|
if ((eventType == EMSCRIPTEN_EVENT_KEYPRESS) && (strcmp(keyEvent->code, "Escape") == 0))
|
||||||
|
{
|
||||||
|
emscripten_exit_pointerlock();
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Register mouse input events
|
||||||
|
static EM_BOOL EmscriptenMouseCallback(int eventType, const EmscriptenMouseEvent *mouseEvent, void *userData)
|
||||||
|
{
|
||||||
|
if (eventType == EMSCRIPTEN_EVENT_CLICK)
|
||||||
|
{
|
||||||
|
EmscriptenPointerlockChangeEvent plce;
|
||||||
|
emscripten_get_pointerlock_status(&plce);
|
||||||
|
|
||||||
|
if (!plce.isActive) emscripten_request_pointerlock(0, 1);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
emscripten_exit_pointerlock();
|
||||||
|
emscripten_get_pointerlock_status(&plce);
|
||||||
|
//if (plce.isActive) TraceLog(WARNING, "Pointer lock exit did not work!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
// Register touch input events
|
// Register touch input events
|
||||||
static EM_BOOL EmscriptenInputCallback(int eventType, const EmscriptenTouchEvent *touchEvent, void *userData)
|
static EM_BOOL EmscriptenTouchCallback(int eventType, const EmscriptenTouchEvent *touchEvent, void *userData)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
for (int i = 0; i < touchEvent->numTouches; i++)
|
for (int i = 0; i < touchEvent->numTouches; i++)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue