UNPKG

artistic-engine

Version:

General purpose html5 canvas rendering game engine

1 lines 5.42 kB
var t={d:(e,s)=>{for(var i in s)t.o(s,i)&&!t.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,get:s[i]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e)},e={};t.d(e,{rh:()=>s,VJ:()=>i,Pw:()=>o});class s{constructor(t,e=window){this.listening=!1,this.events=new Map,this.defaultTarget=e,Array.isArray(t)?this.updateEvent(...t):this.updateEvent(t)}updateEvent(...t){for(const e of t){let t=this.events.get(e.event);const s=e.target??this.defaultTarget;null==t&&(t=new Set,this.events.set(e.event,t)),t.add(s),this.listening&&null!=this.listener&&s.addEventListener(e.event,this.listener)}}setListener(t){this.unregisterEvent(),this.listener=t}registerEvent(){null!=this.listener&&this.events.forEach(((t,e)=>{t.forEach((t=>{t.addEventListener(e,this.listener)}))}))}unregisterEvent(){this.events.forEach(((t,e)=>{t.forEach((t=>t.removeEventListener(e,this.listener??null)))}))}}class i extends s{constructor(t){super([{event:"keyup"},{event:"keydown"}],t)}}class r{constructor(...t){this.values=[...t],this.size=t.length}get Size(){return this.size}copy(t,e=!1){if(this.size>t.size&&!e)throw new Error(`Copying vector of size ${this.size} to ${t.size} will cause data loss.\nInclude force option if intended.`);return t.overwrite(this.values),t}isequal(t,e){if(this.size!==t.size)return!1;const s=this.values.slice(),i=t.values.slice();return s.every(((t,s)=>null==e?t==i[s]:t.toFixed(e)==i[s].toFixed(e)))}shift(t=1){t%=this.size;const e=this.values.slice(0,-t);return e.unshift(...this.values.slice(-t)),this.values=e,this}overwrite(t){let e=0;this.values=this.values.map((function(){return t[e++]||0}))}}class n extends r{constructor(t=0,e=0){super(t,e)}get X(){return this.values[0]}get Y(){return this.values[1]}set X(t){this.values[0]=t}set Y(t){this.values[1]=t}}class h{constructor(t=1,e=0,s=0,i=1,r=0,n=0){this.values=[t,e,s,i,r,n]}get m11(){return this.values[0]}get m21(){return this.values[1]}get m12(){return this.values[2]}get m22(){return this.values[3]}get ox(){return this.values[4]}get oy(){return this.values[5]}get Determinant(){return this.m11*this.m22-this.m12*this.m21}get isInvertible(){return 0!==this.Determinant}get isIdentity(){return 1===this.m11&&1===this.m22&&0===this.m12&&0===this.m21&&0===this.ox&&0===this.oy}set m11(t){this.values[0]=t}set m21(t){this.values[1]=t}set m12(t){this.values[2]=t}set m22(t){this.values[3]=t}set ox(t){this.values[4]=t}set oy(t){this.values[5]=t}static fromDOM(t){return new this(t.a,t.b,t.c,t.d,t.e,t.f)}translate(t,e){return this.linear(1,0,0,1,t,e)}scale(t,e){return void 0===e?this.scale(t,t):this.linear(t,0,0,e,0,0)}linear(t,e,s,i,r,n){return this.values=[t*this.m11+s*this.m21,e*this.m11+i*this.m21,t*this.m12+s*this.m22,e*this.m12+i*this.m22,this.m11*r+this.m12*n+this.ox,this.m21*r+this.m22*n+this.oy],this}rotate(t){const e=Math.sin(t),s=Math.cos(t);return this.linear(s,e,-e,s,0,0)}apply(t,e){let s;if(t instanceof n)s=t,e=t.Y,t=t.X,s.X=this.m11*t+this.m12*e+this.ox,s.Y=this.m21*t+this.m22*e+this.oy;else{if(void 0===e)throw new Error("Transform#apply method requires two number parameters or one Vector2D.");s=new n(this.m11*t+this.m12*e+this.ox,this.m21*t+this.m22*e+this.oy)}return s}multiply(t){return this.linear(...t.values)}invert(){const t=this.Determinant;if(0===t)throw new Error("This transform is not invertible");const e=this.m22/t,s=-1*this.m12/t,i=(this.m12*this.oy-this.m22*this.ox)/t,r=-1*this.m21/t,n=this.m11/t,h=-1*(this.m11*this.oy-this.m21*this.ox)/t;return this.m11=e,this.m12=s,this.ox=i,this.m21=r,this.m22=n,this.oy=h,this}skew(t=0,e=0){return this.linear(1,t,e,1,0,0),this}reset(){return this.m11=1,this.m22=1,this.m12=0,this.m21=0,this.ox=0,this.oy=0,this}copy(){return new h(...this.values)}copyTo(t){t.m11=this.m11,t.m21=this.m21,t.m12=this.m12,t.m22=this.m22,t.ox=this.ox,t.oy=this.oy}toDOM(){return new DOMMatrix([this.m11,this.m21,this.m12,this.m22,this.ox,this.oy])}}class o extends s{constructor(t){super([{event:"pointerover"},{event:"pointerenter"},{event:"pointerdown"},{event:"pointermove"},{event:"pointerup"},{event:"pointercancel"},{event:"pointerout"},{event:"pointerleave"}],t.Canvas),this.iPointerListeners=[],this.fift=!0,this.tempVector=new n,this.baseTransform=new h,this.tempTransform=new h,this.engine=t,super.setListener((t=>{const e=t,{left:s,top:i}=this.engine.Canvas.getBoundingClientRect();this.baseTransform.reset().translate(s,i).multiply(this.engine.Camera);for(let t=0;t<this.iPointerListeners.length;t++){const s=this.iPointerListeners[this.fift?t:this.iPointerListeners.length-t-1];if(!1===s.PointerRegistered||s.Root!==this.engine.Scene)continue;this.baseTransform.copyTo(this.tempTransform),this.tempVector.X=e.clientX,this.tempVector.Y=e.clientY,this.tempTransform.translate(s.AbsoluteX,s.AbsoluteY).multiply(s.Transform).invert(),this.tempTransform.apply(this.tempVector);const i=this.tempVector.X>0&&this.tempVector.Y>0&&this.tempVector.X<s.W&&this.tempVector.Y<s.H;if(s.onPointer(e.type,e.button,this.tempVector.X,this.tempVector.Y,i,e))return}}))}registerPointerListener(...t){this.iPointerListeners.push(...t)}unregisterPointerListener(...t){for(const e of t){const t=this.iPointerListeners.indexOf(e);-1!==t&&this.iPointerListeners.splice(t,1)}}setListenSequenceFirstInFirstTrigger(t){this.fift=t}setListener(){throw new Error("Directly modifying pointer listener is forbidden")}}var a=e.rh,l=e.VJ,u=e.Pw;export{a as EventGroup,l as KeyboardEventGroup,u as PointerEventGroup};