@yuebai008/cli
Version:
Command line interface for rapid qg-minigame development
1 lines • 1.89 kB
JavaScript
import*as SDK from"../../core/sdk/sdk.js";export class InputModel extends SDK.SDKModel.SDKModel{inputAgent;activeTouchOffsetTop;activeTouchParams;constructor(e){super(e),this.inputAgent=e.inputAgent(),this.activeTouchOffsetTop=null,this.activeTouchParams=null}emitKeyEvent(e){let t;switch(e.type){case"keydown":t="keyDown";break;case"keyup":t="keyUp";break;case"keypress":t="char";break;default:return}const o=e,s="keypress"===e.type?String.fromCharCode(o.charCode):void 0;this.inputAgent.invoke_dispatchKeyEvent({type:t,modifiers:this.modifiersForEvent(o),text:s,unmodifiedText:s?s.toLowerCase():void 0,keyIdentifier:o.keyIdentifier,code:o.code,key:o.key,windowsVirtualKeyCode:o.keyCode,nativeVirtualKeyCode:o.keyCode,autoRepeat:!1,isKeypad:!1,isSystemKey:!1})}emitTouchFromMouseEvent(e,t,o){const s=["none","left","middle","right"],i={mousedown:"mousePressed",mouseup:"mouseReleased",mousemove:"mouseMoved",mousewheel:"mouseWheel"},u=e.type;if(!(u in i))return;const n=e;if(!(n.which in s))return;if("mousewheel"!==u&&"none"===s[n.which])return;"mousedown"!==u&&null!==this.activeTouchOffsetTop||(this.activeTouchOffsetTop=t);const a=Math.round(n.offsetX/o);let c=Math.round(n.offsetY/o);c=Math.round(c-this.activeTouchOffsetTop);const r={type:i[u],x:a,y:c,modifiers:0,button:s[n.which],clickCount:0};if("mousewheel"===e.type){const e=n;r.deltaX=e.deltaX/o,r.deltaY=-e.deltaY/o}else this.activeTouchParams=r;"mouseup"===e.type&&(this.activeTouchOffsetTop=null),this.inputAgent.invoke_emulateTouchFromMouseEvent(r)}cancelTouch(){if(null!==this.activeTouchParams){const e=this.activeTouchParams;this.activeTouchParams=null,e.type="mouseReleased",this.inputAgent.invoke_emulateTouchFromMouseEvent(e)}}modifiersForEvent(e){return(e.altKey?1:0)|(e.ctrlKey?2:0)|(e.metaKey?4:0)|(e.shiftKey?8:0)}}SDK.SDKModel.SDKModel.register(InputModel,{capabilities:SDK.Target.Capability.Input,autostart:!1});