litecanvas 0.66.6 → 0.67.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/dist.js +13 -17
- package/dist/dist.min.js +1 -1
- package/package.json +1 -1
- package/src/index.js +15 -18
package/dist/dist.js
CHANGED
|
@@ -60,14 +60,14 @@
|
|
|
60
60
|
};
|
|
61
61
|
settings = Object.assign(defaults, settings);
|
|
62
62
|
let _initialized = false, _plugins = [], _canvas = settings.canvas || document.createElement("canvas"), _fullscreen = settings.fullscreen, _autoscale = settings.autoscale, _animated = settings.animate, _scale = 1, _ctx, _timeScale = 1, _lastFrame, _step, _stepMs, _accumulated = 0, _focused = true, _drawCount = 0, _nextFpsUpdate = 0, _fontFamily = "sans-serif", _fontStyle = "", _fontSize = 32, _rng_seed = Date.now(), _events = {
|
|
63
|
-
init:
|
|
64
|
-
update:
|
|
65
|
-
draw:
|
|
66
|
-
resized:
|
|
67
|
-
tap:
|
|
68
|
-
untap:
|
|
69
|
-
tapping:
|
|
70
|
-
tapped:
|
|
63
|
+
init: null,
|
|
64
|
+
update: null,
|
|
65
|
+
draw: null,
|
|
66
|
+
resized: null,
|
|
67
|
+
tap: null,
|
|
68
|
+
untap: null,
|
|
69
|
+
tapping: null,
|
|
70
|
+
tapped: null
|
|
71
71
|
}, _helpers = {
|
|
72
72
|
settings: Object.assign({}, settings),
|
|
73
73
|
colors
|
|
@@ -631,17 +631,13 @@
|
|
|
631
631
|
* Add a game event listener
|
|
632
632
|
*
|
|
633
633
|
* @param {string} eventName the event type name
|
|
634
|
-
* @param {
|
|
635
|
-
* @returns {
|
|
634
|
+
* @param {Function} callback the function that is called when the event occurs
|
|
635
|
+
* @returns {Function} a function to remove the listener
|
|
636
636
|
*/
|
|
637
637
|
listen(eventName, callback) {
|
|
638
|
-
_events[eventName] = _events[eventName] ||
|
|
639
|
-
_events[eventName].
|
|
640
|
-
return () =>
|
|
641
|
-
_events[eventName] = _events[eventName].filter(
|
|
642
|
-
(x) => callback !== x
|
|
643
|
-
);
|
|
644
|
-
};
|
|
638
|
+
_events[eventName] = _events[eventName] || /* @__PURE__ */ new Set();
|
|
639
|
+
_events[eventName].add(callback);
|
|
640
|
+
return () => _events[eventName].delete(callback);
|
|
645
641
|
},
|
|
646
642
|
/**
|
|
647
643
|
* Call all listeners attached to a game event
|
package/dist/dist.min.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
(()=>{var e=new AudioContext,t=(t=1,a=.05,l=220,n=0,i=0,
|
|
1
|
+
(()=>{var e=new AudioContext,t=(t=1,a=.05,l=220,n=0,i=0,o=.1,r=0,s=1,c=0,f=0,p=0,u=0,d=0,g=0,h=0,m=0,v=0,T=1,b=0,x=0,E=0)=>{let y=Math,w=2*y.PI,H=c*=500*w/44100/44100,D=l*=(1-a+2*a*y.random(a=[]))*w/44100,I=0,S=0,k=0,A=1,C=0,O=0,P=0,X=E<0?-1:1,L=w*X*E*2/44100,W=y.cos(L),z=y.sin,Y=z(L)/4,F=1+Y,M=-2*W/F,_=(1-Y)/F,B=(1+X*W)/2/F,G=-(X+W)/F,R=0,N=0,j=0,U=0;for(n=44100*n+9,b*=44100,i*=44100,o*=44100,v*=44100,f*=500*w/85766121e6,h*=w/44100,p*=w/44100,u*=44100,d=44100*d|0,t*=.3*(globalThis.zzfxV||1),X=n+b+i+o+v|0;k<X;a[k++]=P*t)++O%(100*m|0)||(P=r?1<r?2<r?3<r?z(I*I):y.max(y.min(y.tan(I),1),-1):1-(2*I/w%2+2)%2:1-4*y.abs(y.round(I/w)-I/w):z(I),P=(d?1-x+x*z(w*k/d):1)*(P<0?-1:1)*y.abs(P)**s*(k<n?k/n:k<n+b?1-(k-n)/b*(1-T):k<n+b+i?T:k<X-v?(X-k-v)/o*T:0),P=v?P/2+(v>k?0:(k<X-v?1:(X-k)/v)*a[k-v|0]/2/t):P,E&&(P=U=B*R+G*(R=N)+B*(N=P)-_*j-M*(j=U))),I+=(L=(l+=c+=f)*y.cos(h*S++))+L*g*z(k**5),A&&++A>u&&(l+=p,D+=p,A=0),!d||++C%d||(l=D,c=H,A=A||1);(t=e.createBuffer(1,X,44100)).getChannelData(0).set(a),(l=e.createBufferSource()).buffer=t,l.connect(e.destination),l.start()},a=["#111","#6a7799","#aec2c2","#FFF1E8","#e83b3b","#fabc20","#155fd9","#3cbcfc","#327345","#63c64d","#6c2c1f","#ac7c00"];globalThis.litecanvas=function(e={}){let l=globalThis,n=Math.PI,i=2*n,o=requestAnimationFrame,r=(e,t,a)=>e.addEventListener(t,a);e=Object.assign({fps:60,fullscreen:!0,width:null,height:null,autoscale:!0,pixelart:!1,antialias:!1,canvas:null,global:!0,loop:null,pauseOnBlur:!0,tapEvents:!0,keyboardEvents:!0,animate:!0},e);let s=!1,c=[],f=e.canvas||document.createElement("canvas"),p=e.fullscreen,u=e.autoscale,d=e.animate,g=1,h,m=1,v,T,b,x=0,E=!0,y=0,w=0,H="sans-serif",D="",I=32,S=Date.now(),k={init:null,update:null,draw:null,resized:null,tap:null,untap:null,tapping:null,tapped:null},A={settings:Object.assign({},e),colors:a},C={WIDTH:e.width,HEIGHT:e.height||e.width,CANVAS:null,ELAPSED:0,FPS:0,CENTERX:0,CENTERY:0,MOUSEX:-1,MOUSEY:-1,DEFAULT_SFX:[.5,,1675,,.06,.2,1,1.8,,,637,.06],PI:n,TWO_PI:i,HALF_PI:.5*n,lerp:(e,t,a)=>e+a*(t-e),deg2rad:e=>n/180*e,rad2deg:e=>180/n*e,clamp:(e,t,a)=>e<t?t:e>a?a:e,wrap:(e,t,a)=>e-(a-t)*Math.floor((e-t)/(a-t)),map(e,t,a,l,n,i){let o=(e-t)/(a-t)*(n-l)+l;return i?C.clamp(o,l,n):o},norm:(e,t,a)=>C.map(e,t,a,0,1),rand:(e=0,t=1)=>(S=(1664525*S+0x3c6ef35f)%0x100000000)/0x100000000*(t-e)+e,randi:(e=0,t=1)=>C.floor(C.rand(e,t+1)),seed:e=>null==e?S:S=~~e,cls(e){null==e?h.clearRect(0,0,C.WIDTH,C.HEIGHT):C.rectfill(0,0,C.WIDTH,C.HEIGHT,e)},rect(e,t,a,l,n=0,i=null){h.beginPath(),h[i?"roundRect":"rect"](~~e,~~t,a,l,i),C.stroke(n)},rectfill(e,t,a,l,n=0,i=null){h.beginPath(),h[i?"roundRect":"rect"](~~e,~~t,a,l,i),C.fill(n)},circ(e,t,a,l){h.beginPath(),h.arc(~~e,~~t,a,0,i),C.stroke(l)},circfill(e,t,a,l){h.beginPath(),h.arc(~~e,~~t,a,0,i),C.fill(l)},line(e,t,a,l,n){h.beginPath(),h.moveTo(~~e,~~t),h.lineTo(~~a,~~l),C.stroke(n)},linewidth(e){h.lineWidth=e},linedash(e,t=0){h.setLineDash(e),h.lineDashOffset=t},text(e,t,a,l=3){h.font=`${D} ${I}px ${H}`,h.fillStyle=C.getcolor(l),h.fillText(a,~~e,~~t)},textfont(e){H=e},textsize(e){I=e},textstyle(e){D=e||""},textalign(e,t){e&&(h.textAlign=e),t&&(h.textBaseline=t)},textmetrics(e,t=I){h.font=`${D} ${t}px ${H}`;let a=h.measureText(e);return a.height=a.actualBoundingBoxAscent+a.actualBoundingBoxDescent,a},image(e,t,a){h.drawImage(a,~~e,~~t)},paint(e,t,a,l={}){let n=l.canvas||new OffscreenCanvas(1,1),i=l.scale||1,o=h;if(n.width=e*i,n.height=t*i,(h=n.getContext("2d")).scale(i,i),a.pop){let e=0,t=0;for(let l of(h.imageSmoothingEnabled=!1,a)){for(let a of l)" "!==a&&"."!==a&&C.rectfill(e,t,1,1,parseInt(a,16)),e++;t++,e=0}}else a(h);return h=o,n},ctx:e=>(e&&(h=e),h),push:()=>h.save(),pop:()=>h.restore(),translate:(e,t)=>h.translate(~~e,~~t),scale:(e,t)=>h.scale(e,t||e),rotate:e=>h.rotate(e),transform:(e,t,a,l,n,i,o=!0)=>h[o?"setTransform":"transform"](e,t,a,l,n,i),alpha(e){h.globalAlpha=C.clamp(e,0,1)},path:e=>new Path2D(e),fill(e,t){h.fillStyle=C.getcolor(e),t?h.fill(t):h.fill()},stroke(e,t){h.strokeStyle=C.getcolor(e),t?h.stroke(t):h.stroke()},clip(e){h.clip(e)},sfx:(e,a=0,n=1)=>!(l.zzfxV<=0)&&(!navigator.userActivation||!!navigator.userActivation.hasBeenActive)&&(e=e||C.DEFAULT_SFX,(a>0||1!==n)&&((e=e.slice())[0]=n*(e[0]||1),e[10]=~~e[10]+a),t.apply(0,e),e),volume(e){l.zzfxV=+e},colrect:(e,t,a,l,n,i,o,r)=>e<n+o&&e+a>n&&t<i+r&&t+l>i,colcirc:(e,t,a,l,n,i)=>(l-e)**2+(n-t)**2<=(a+i)**2,use(e,t={}){e.__conf=t,s?W(e):c.push(e)},listen:(e,t)=>(k[e]=k[e]||new Set,k[e].add(t),()=>k[e].delete(t)),emit(e,t,a,l,n){L("before:"+e,t,a,l,n),L(e,t,a,l,n),L("after:"+e,t,a,l,n)},getcolor:e=>a[~~e%a.length],setvar(t,a){C[t]=a,e.global&&(l[t]=a)},resize(e,t){C.setvar("WIDTH",f.width=e),C.setvar("HEIGHT",f.height=t||e),X()},timescale(e){m=e},setfps(e){b=1e3*(T=1/e),x=0}};for(let e of["sin","cos","atan2","hypot","tan","abs","ceil","round","floor","trunc","min","max","pow","sqrt","sign","exp"])C[e]=Math[e];function O(){s=!0;let t=e.loop?e.loop:l;for(let e of Object.keys(k))t[e]&&C.listen(e,t[e]);for(let e of c)W(e);if((p||u)&&r(l,"resize",X),X(),e.tapEvents){let e=(e,t)=>[(e-f.offsetLeft)/g,(t-f.offsetTop)/g],t=new Map,a=(e,a,l)=>{let n={x:a,y:l,startX:a,startY:l,ts:performance.now()};return t.set(e,n),n},n=(e,l,n)=>{let i=t.get(e)||a(e);i.x=l,i.y=n},i=e=>e&&performance.now()-e.ts<=200,o=!1;r(f,"mousedown",t=>{t.preventDefault();let[l,n]=e(t.pageX,t.pageY);C.emit("tap",l,n,0),a(0,l,n),o=!0}),r(f,"mousemove",t=>{t.preventDefault();let[a,l]=e(t.pageX,t.pageY);C.setvar("MOUSEX",a),C.setvar("MOUSEY",l),o&&(C.emit("tapping",a,l,0),n(0,a,l))}),r(f,"mouseup",a=>{a.preventDefault();let l=t.get(0),[n,r]=e(a.pageX,a.pageY);i(l)&&C.emit("tapped",l.startX,l.startY,0),C.emit("untap",n,r,0),t.delete(0),o=!1}),r(f,"touchstart",t=>{for(let l of(t.preventDefault(),t.changedTouches)){let[t,n]=e(l.pageX,l.pageY);C.emit("tap",t,n,l.identifier+1),a(l.identifier+1,t,n)}}),r(f,"touchmove",t=>{for(let a of(t.preventDefault(),t.changedTouches)){let[t,l]=e(a.pageX,a.pageY);C.emit("tapping",t,l,a.identifier+1),n(a.identifier+1,t,l)}});let s=e=>{e.preventDefault();let a=[];if(e.targetTouches.length>0)for(let t of e.targetTouches)a.push(t.identifier+1);for(let[e,l]of t)a.includes(e)||(i(l)&&C.emit("tapped",l.startX,l.startY,e),C.emit("untap",l.x,l.y,e),t.delete(e))};r(f,"touchend",s),r(f,"touchcancel",s),r(l,"blur",()=>{for(let[e,a]of(o=!1,t))C.emit("untap",a.x,a.y,e),t.delete(e)})}if(e.keyboardEvents){let e=new Set;C.setvar("iskeydown",t=>"any"===t?e.size>0:e.has(t.toLowerCase())),r(l,"keydown",t=>{e.add(t.key.toLowerCase())}),r(l,"keyup",t=>{e.delete(t.key.toLowerCase())}),r(l,"blur",()=>e.clear())}e.pauseOnBlur&&(r(l,"blur",()=>{E=!1}),r(l,"focus",()=>{v=performance.now(),o(P),E=!0})),C.setfps(e.fps),C.emit("init",C),w=(v=performance.now())+1e3,o(P)}function P(e){let t=!d,a=e-v;for(x+=a>1e3?b:a;x>=b;)C.emit("update",T*m),C.setvar("ELAPSED",C.ELAPSED+T*m),x-=b,t=!0;t&&(C.textalign("start","top"),C.emit("draw"),y++,e+x>w&&(C.setvar("FPS",y),y=0,w=e+1e3)),v=e,E&&d&&o(P)}function X(){let t=l.innerWidth,a=l.innerHeight;p?(C.setvar("WIDTH",f.width=t),C.setvar("HEIGHT",f.height=a)):u&&(g=Math.min(t/C.WIDTH,a/C.HEIGHT),g=(e.pixelart?~~g:g)||1,f.style.width=C.WIDTH*g+"px",f.style.height=C.HEIGHT*g+"px"),C.setvar("CENTERX",C.WIDTH/2),C.setvar("CENTERY",C.HEIGHT/2),(!e.antialias||e.pixelart)&&(h.imageSmoothingEnabled=!1,f.style.imageRendering="pixelated"),C.emit("resized",g),d||o(P)}function L(e,t,a,l,n){if(k[e])for(let i of k[e])i(t,a,l,n)}function W(e){let t=e(C,A,e.__conf);if("object"==typeof t)for(let e of Object.keys(t))C.setvar(e,t[e])}if(e.global){if(l.__litecanvas)throw"global litecanvas already instantiated";Object.assign(l,C),l.__litecanvas=C}return f="string"==typeof f?document.querySelector(f):f,C.setvar("CANVAS",f),h=f.getContext("2d"),r(f,"click",()=>l.focus()),C.WIDTH>0&&(p=!1),f.width=C.WIDTH,f.height=C.HEIGHT||C.WIDTH,f.parentNode||document.body.appendChild(f),f.style.display="block",p?(f.style.position="absolute",f.style.inset=0):u&&(f.style.margin="auto"),"loading"===document.readyState?r(l,"DOMContentLoaded",()=>o(O)):o(O),C}})();
|
package/package.json
CHANGED
package/src/index.js
CHANGED
|
@@ -38,7 +38,7 @@ export default function litecanvas(settings = {}) {
|
|
|
38
38
|
|
|
39
39
|
let /** @type {boolean} */
|
|
40
40
|
_initialized = false,
|
|
41
|
-
/** @type {
|
|
41
|
+
/** @type {Function[]} */
|
|
42
42
|
_plugins = [],
|
|
43
43
|
/** @type {HTMLCanvasElement|string} _canvas */
|
|
44
44
|
_canvas = settings.canvas || document.createElement('canvas'),
|
|
@@ -78,16 +78,17 @@ export default function litecanvas(settings = {}) {
|
|
|
78
78
|
_rng_seed = Date.now(),
|
|
79
79
|
/**
|
|
80
80
|
* default game events
|
|
81
|
+
* @type {Object<string,Set<Function>>}
|
|
81
82
|
*/
|
|
82
83
|
_events = {
|
|
83
|
-
init:
|
|
84
|
-
update:
|
|
85
|
-
draw:
|
|
86
|
-
resized:
|
|
87
|
-
tap:
|
|
88
|
-
untap:
|
|
89
|
-
tapping:
|
|
90
|
-
tapped:
|
|
84
|
+
init: null,
|
|
85
|
+
update: null,
|
|
86
|
+
draw: null,
|
|
87
|
+
resized: null,
|
|
88
|
+
tap: null,
|
|
89
|
+
untap: null,
|
|
90
|
+
tapping: null,
|
|
91
|
+
tapped: null,
|
|
91
92
|
},
|
|
92
93
|
/**
|
|
93
94
|
* Helpers to be used by plugins
|
|
@@ -747,19 +748,15 @@ export default function litecanvas(settings = {}) {
|
|
|
747
748
|
* Add a game event listener
|
|
748
749
|
*
|
|
749
750
|
* @param {string} eventName the event type name
|
|
750
|
-
* @param {
|
|
751
|
-
* @returns {
|
|
751
|
+
* @param {Function} callback the function that is called when the event occurs
|
|
752
|
+
* @returns {Function} a function to remove the listener
|
|
752
753
|
*/
|
|
753
754
|
listen(eventName, callback) {
|
|
754
|
-
_events[eventName] = _events[eventName] ||
|
|
755
|
-
_events[eventName].
|
|
755
|
+
_events[eventName] = _events[eventName] || new Set()
|
|
756
|
+
_events[eventName].add(callback)
|
|
756
757
|
|
|
757
758
|
// return a function to remove this event listener
|
|
758
|
-
return () =>
|
|
759
|
-
_events[eventName] = _events[eventName].filter(
|
|
760
|
-
(x) => callback !== x
|
|
761
|
-
)
|
|
762
|
-
}
|
|
759
|
+
return () => _events[eventName].delete(callback)
|
|
763
760
|
},
|
|
764
761
|
|
|
765
762
|
/**
|