17 lines
1.2 KiB
TypeScript
17 lines
1.2 KiB
TypeScript
import test from 'node:test';
|
|
import assert from 'node:assert/strict';
|
|
import {bindViewInput} from '../engine/view-input.ts';
|
|
test('shared player/editor controls request mouse lock and route touch look only while active',()=>{
|
|
const canvas=new EventTarget() as HTMLCanvasElement;let locks=0;const moves:number[][]=[];
|
|
canvas.requestPointerLock=async()=>{locks++;};canvas.setPointerCapture=()=>{};
|
|
const runtime={playing:true,paused:false,firstPerson:()=>true,lookBy:(x:number,y:number)=>moves.push([x,y])};
|
|
const cleanup=bindViewInput(canvas,runtime);
|
|
const send=(type:string,props:any)=>canvas.dispatchEvent(Object.assign(new Event(type),props));
|
|
send('pointerdown',{pointerType:'mouse',button:0});assert.equal(locks,1);
|
|
send('pointerdown',{pointerType:'touch',pointerId:3,clientX:10,clientY:10});
|
|
send('pointermove',{pointerId:3,clientX:20,clientY:5});assert.deepEqual(moves,[[.04,.02]]);
|
|
runtime.paused=true;send('pointerdown',{pointerType:'mouse',button:0});send('pointermove',{pointerId:3,clientX:30,clientY:0});
|
|
assert.equal(locks,1);assert.equal(moves.length,1);
|
|
runtime.paused=false;cleanup();send('pointerdown',{pointerType:'mouse',button:0});assert.equal(locks,1);
|
|
});
|