<snapdata remixID="15129085"><project name="Cursor lock" app="Snap! 11.0.8, https://snap.berkeley.edu" version="2"><notes>Requires Javascript extensions to be enabled in the editor.</notes><thumbnail>data:image/png;base64,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</thumbnail><scenes select="1"><scene name="Cursor lock"><notes>Requires Javascript extensions to be enabled in the editor.</notes><hidden></hidden><headers></headers><code></code><blocks><block-definition s="enable pointer lock" type="command" category="sensing" helper="true"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l></l></list><l>(async () =&gt; {&#xD;    mouseMovement = [0, 0];&#xD;    await document.body.requestPointerLock();&#xD;    if (document.pointerLockElement) {pointerLockEnabled = true;}&#xD;    pointerLockEnabled = true;&#xD;    mouseTimeout = null;&#xD;    document.addEventListener("mousemove", (e) =&gt; {&#xD;        clearTimeout(mouseTimeout);&#xD;        mouseTimeout = setTimeout(() =&gt; {&#xD;            mouseMovement = [0, 0]&#xD;        }, 5)&#xD;        mouseMovement = [e.movementX, e.movementY];&#xD;    }, false);&#xD;    document.addEventListener(&apos;pointerlockchange&apos;, () =&gt; {&#xD;        if (!document.pointerLockElement) {pointerLockEnabled = false;} else {pointerLockEnabled = true;}&#xD;    });&#xD;})()</l></block><list></list></block></script></block-definition><block-definition s="set pointer lock to %&apos;val&apos;" type="command" category="sensing"><header></header><code></code><translations></translations><inputs><input type="%b" initial="1">true</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>val</l></list><l>(async () =&gt; {&#xD;    if (val) {&#xD;    mouseMovement = [0, 0];&#xD;    await document.body.requestPointerLock();&#xD;    if (document.pointerLockElement) {pointerLockEnabled = true;}&#xD;    pointerLockEnabled = true;&#xD;    mouseTimeout = null;&#xD;    document.addEventListener("mousemove", (e) =&gt; {&#xD;        clearTimeout(mouseTimeout);&#xD;        mouseTimeout = setTimeout(() =&gt; {&#xD;            mouseMovement = [0, 0]&#xD;        }, 5)&#xD;        mouseMovement = [e.movementX, e.movementY];&#xD;    }, false);&#xD;    document.addEventListener(&apos;pointerlockchange&apos;, () =&gt; {&#xD;        if (!document.pointerLockElement) {pointerLockEnabled = false;} else {pointerLockEnabled = true;}&#xD;    });&#xD;    } else {&#xD;        document.exitPointerLock();&#xD;        pointerLockEnabled = false;&#xD;    }&#xD;})()</l></block><list><block var="val"/></list></block></script></block-definition><block-definition s="mouse movement" type="reporter" category="sensing" helper="true" space="true"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportNewList"><list><block s="evaluate"><block s="reportJSFunction"><list><l></l></list><l>return typeof pointerLockEnabled != "undefined" ? mouseMovement[0] : 0;</l></block><list></list></block><block s="evaluate"><block s="reportJSFunction"><list><l></l></list><l>return typeof pointerLockEnabled != "undefined" ? mouseMovement[1] : 0;</l></block><list></list></block></list></block></block></script></block-definition><block-definition s="pointer lock enabled?" type="predicate" category="sensing"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l></l></list><l>return typeof pointerLockEnabled !== &apos;undefined&apos; ? pointerLockEnabled : false</l></block><list></list></block></block></script></block-definition><block-definition s="pointer movement" type="reporter" category="sensing" space="true"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportNewList"><list><block s="evaluate"><block s="reportJSFunction"><list><l></l></list><l>return typeof pointerLockEnabled != "undefined" ? mouseMovement[0] : 0;</l></block><list></list></block><block s="evaluate"><block s="reportJSFunction"><list><l></l></list><l>return typeof pointerLockEnabled != "undefined" ? mouseMovement[1] : 0;</l></block><list></list></block></list></block></block></script></block-definition><block-definition s="pointer x movement" type="reporter" category="sensing"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l></l></list><l>return typeof pointerLockEnabled != "undefined" ? mouseMovement[0] : 0;</l></block><list></list></block></block></script></block-definition><block-definition s="pointer y movement" type="reporter" category="sensing"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l></l></list><l>return typeof pointerLockEnabled != "undefined" ? mouseMovement[1] : 0;</l></block><list></list></block></block></script></block-definition></blocks><primitives></primitives><stage name="Stage" width="480" height="360" costume="0" color="255,255,255,1" tempo="60" threadsafe="false" penlog="false" volume="100" pan="0" lines="round" ternary="false" hyperops="true" codify="false" inheritance="true" sublistIDs="false" id="122"><pentrails>data:image/png;base64,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</pentrails><costumes><list struct="atomic" id="123"></list></costumes><sounds><list struct="atomic" id="124"></list></sounds><variables></variables><blocks></blocks><scripts></scripts><sprites select="1"><sprite name="Sprite" idx="1" x="64" y="-216" heading="90" scale="1" volume="100" pan="0" rotation="1" draggable="true" costume="0" color="80,80,80,1" pen="tip" id="129"><costumes><list struct="atomic" id="130"></list></costumes><sounds><list struct="atomic" id="131"></list></sounds><blocks></blocks><variables></variables><scripts><script x="99" y="16"><block s="receiveGo"></block><block s="gotoXY"><l>0</l><l>0</l></block><custom-block s="set pointer lock to %b"><l><bool>true</bool></l></custom-block><block s="doForever"><script><block s="doGotoObject"><block s="reportVariadicSum"><list><block s="getPosition"></block><block s="reportVariadicProduct"><list><custom-block s="mouse movement"></custom-block><block s="reportNewList"><list><l>1</l><l>-1</l></list></block></list></block></list></block></block><block s="bubble"><custom-block s="mouse movement"></custom-block></block><block s="doIf"><block s="reportVariadicAnd"><list><block s="reportMouseDown"></block><block s="reportNot"><custom-block s="pointer lock enabled?"></custom-block></block></list></block><script><custom-block s="set pointer lock to %b"><l><bool>true</bool></l></custom-block></script><list></list></block></script></block></script></scripts></sprite></sprites></stage><variables></variables></scene></scenes></project><media name="Cursor lock" app="Snap! 11.0.8, https://snap.berkeley.edu" version="2"></media></snapdata>