Try to work around Chrome's mouse-grab woes.

git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@6172 fc73d0e0-1445-4013-8a0c-d673dee63da5
This commit is contained in:
Spoike 2022-01-28 10:48:07 +00:00
parent 86d2f0e0d4
commit 29b5f51077
1 changed files with 21 additions and 4 deletions

View File

@ -187,11 +187,27 @@ mergeInto(LibraryManager.library,
if (!document.fullscreenElement) if (!document.fullscreenElement)
if (FTEC.evcb.wantfullscreen != 0) if (FTEC.evcb.wantfullscreen != 0)
if ({{{makeDynCall('i')}}}(FTEC.evcb.wantfullscreen)) if ({{{makeDynCall('i')}}}(FTEC.evcb.wantfullscreen))
Module['canvas'].requestFullscreen(); {
try
{
Module['canvas'].requestFullscreen();
}
catch(e)
{
console.log("requestFullscreen:");
console.log(e);
}
}
if (FTEC.pointerwantlock != 0 && FTEC.pointerislocked == 0) if (FTEC.pointerwantlock != 0 && FTEC.pointerislocked == 0)
{ {
FTEC.pointerislocked = -1; //don't repeat the request on every click. firefox has a fit at that, so require the mouse to leave the element or something before we retry. FTEC.pointerislocked = -1; //don't repeat the request on every click. firefox has a fit at that, so require the mouse to leave the element or something before we retry.
Module['canvas'].requestPointerLock({unadjustedMovement: true}); Module['canvas'].requestPointerLock({unadjustedMovement: true}).catch(()=>{
Module['canvas'].requestPointerLock().then(()=>{
console.log("Your shitty browser doesn't support disabling mouse acceleration.");
}).catch(()=>{
FTEC.pointerislocked = 0; //failure. no real idea why. try again next frame though...
});
});
} }
//fallthrough //fallthrough
case 'mouseup': case 'mouseup':
@ -306,6 +322,7 @@ mergeInto(LibraryManager.library,
{{{makeDynCall('viiii')}}}(FTEC.evcb.jbutton, gp.index, j, 0, true); {{{makeDynCall('viiii')}}}(FTEC.evcb.jbutton, gp.index, j, 0, true);
console.log("Gamepad disconnected from index %d: %s", gp.index, gp.id); console.log("Gamepad disconnected from index %d: %s", gp.index, gp.id);
break; break;
case 'pointerlockerror':
case 'pointerlockchange': case 'pointerlockchange':
case 'mozpointerlockchange': case 'mozpointerlockchange':
case 'webkitpointerlockchange': case 'webkitpointerlockchange':
@ -405,7 +422,7 @@ mergeInto(LibraryManager.library,
'touchstart', 'touchend', 'touchcancel', 'touchleave', 'touchmove', 'touchstart', 'touchend', 'touchcancel', 'touchleave', 'touchmove',
'dragenter', 'dragover', 'drop', 'dragenter', 'dragover', 'drop',
'message', 'resize', 'message', 'resize',
'pointerlockchange', 'mozpointerlockchange', 'webkitpointerlockchange', 'pointerlockerror', 'pointerlockchange', 'mozpointerlockchange', 'webkitpointerlockchange',
'focus', 'blur']; //try to fix alt-tab 'focus', 'blur']; //try to fix alt-tab
events.forEach(function(event) events.forEach(function(event)
{ {
@ -413,7 +430,7 @@ mergeInto(LibraryManager.library,
}); });
var docevents = ['keypress', 'keydown', 'keyup', var docevents = ['keypress', 'keydown', 'keyup',
'pointerlockchange', 'mozpointerlockchange', 'webkitpointerlockchange']; 'pointerlockerror', 'pointerlockchange', 'mozpointerlockchange', 'webkitpointerlockchange'];
docevents.forEach(function(event) docevents.forEach(function(event)
{ {
document.addEventListener(event, FTEC.handleevent, true); document.addEventListener(event, FTEC.handleevent, true);