litecanvas 0.59.0 → 0.61.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/README.md +2 -2
- package/dist/dist.js +23 -42
- package/dist/dist.min.js +1 -1
- package/package.json +1 -1
- package/src/index.js +16 -33
- package/src/palette.js +8 -8
- package/src/types.js +1 -0
- package/types/types.d.ts +6 -0
package/README.md
CHANGED
|
@@ -86,8 +86,8 @@ Check out our [Cheatsheet](https://litecanvas.js.org/about.html).
|
|
|
86
86
|
|
|
87
87
|
Try some demos in our playground:
|
|
88
88
|
|
|
89
|
-
- [Pong](https://litecanvas.js.org?c=
|
|
90
|
-
- [Bouncing ball](https://litecanvas.js.org?c=
|
|
89
|
+
- [Pong](https://litecanvas.js.org?c=eJy1Vlly20YQ%2FccpOl8ATBACuEiWYslFM5DlKkdMkUwkJpVKwcCQnAoEoIChpdiWr%2BAT%2BC%2BHyHlygVwh3TODTZYU%2F0QsDdELenm9DBMmIA%2FjCzgGf%2BA5BuAf0mdEj2vykkivEa%2BQHg01HbNSkALpKc6bMElaj6vmccHfsZZpYk3STUK8yhovpLeaWjVUmTMWIzmoQimjrGi9m%2FA1K5EcKlKwG0EOta4ICyFfX4dJyQwj4YJFYfo2LK33UuOax2J7BMMKhy3jm604gtFTZNzahrG3B9NdKbIr%2BPnd6SWU2S6NS1hnBYgtL2ETXjHSyQsmBGdFn29SjM%2BIsrQU8GL24%2Fk0QPe%2FOOCAz4b05XpDOgbIcGBAHAcOR54WVB8XJe6%2B0t%2F%2F9duHfSyWk%2FmSXHju2EFUYIxIyddGeAzbXsYHnvYsD%2B3IGz1m%2FsXk9evfZqeni%2Bk8CM7Jj%2B8OfZnOGB14rkdeyQ8eB9KbpPqH7iGe%2B3TSx3N9v3oayPfkOZKnTxka610aCZ6lwFMuLBveN42FfqfB%2BTKYXzYdVvNW0Iez4NXLsyXswajTBqhz8eq75RkK%2FIFx2%2FIhwjxnsXXjwB%2BVJ74G6xvdMhWv20Wi2LGGvb6xJPh2zUIEd0UqydvOnHz8aN1glHLq9mBgd0LZ5XEomBWL%2BwNRRgErJLjAsSmjgrH0ea2pJ%2BAYR6KtTJ0J2VtWPDekKrKukMS2ZRRHnLD2pCesyC05zSpmVVm7fjXOUlOglmi9j2SoDaqY6pCk0WcUjzbvSRHDGWzkPQXHiapQrarqpbAyaouq4r1moZzokrcLVbWKv%2B91eNQqBw2rWhnquw9%2Bp6Tdhrd1MSscVK2kVcizklMBW23aO1bL7IneW08gFq2OVeJVV6zWGCL7BndL1N5W2qfiK5%2FYLnew1o7byCgIP3zQQT2rZW2wVJzH0G%2FSbwKoG%2F22KZpK4UFjcmc%2FaqpOKNqy6HeVT5QlCS9pCq652LYbk1yitGCRUDk6%2BmKpA2g%2Fqdala0qeF7iI7HsCbCWr7pEeXXJfEbUEQElt1SZytXcHOS7C63pvRUlpefaji4W2VJjgurXMiKWCFaYD5hUnCEy7o1Vikla11LoiSy9Gp9qGaGM5%2BQGWM3U1oM2hfbeWqvVPaEKbcAjqNU8S60sw6edBbUdmx4tI6j5Ummp3PJDBfRhIhAiCbZhueLq5g4Hl4%2B1F%2F%2Bbfn%2F%2F8569PYLoFy1koVDa2A6P77bI0fsRqtW8q65Zp4jTJ7rBdzHtBUVl4E3v2XST%2F70piVAO8Xc2Xk%2B8DmP0UzM1ODb4wh%2FvEc5%2BO%2F8tqT6G4mM7mwREl%2B1UpY6f%2FC73Is6Q%3D)
|
|
90
|
+
- [Bouncing ball](https://litecanvas.js.org?c=eJxtUstugzAQvPMVewTiBCdtpVYpPVStSu6ReraMiSy5gIyhRUn%2BvQZvg0NzsGTveGdmH0oYqKtGGlmVkEIneLimlNgTkQDsW1Vcmn64HzTr8KpZLtvG%2Fr9%2FDAIljeCs7FgTRkFQtCUfyWQpTRjB0WNBgc%2Fd2z6LNyR7331k%2B2QTbSd2%2FEIRtNDZ42zrnBkR5sbx%2Fhlf%2FcAivajYVwy58fH%2BCu8d7hlzBGhhyvcyPHhKTxJ4raw3AVVRgMgPorFRWUA4OVtgr15gLBtOJ8%2F2EsFnoK6iK0txCsv19kaUrp4exrDXgBS4Yl%2B1p0xwTMQpo1ZkE89zl7Y%2BuPjEzs%2F99KOf%2F9LDyFwKKowC%2FtRyzb5xE7hqQjrOm0vNC6mUb3jiJGj9brYAw27YwnrHpoVpdQnHIWIlfwGU6d0i)
|
|
91
91
|
- [Scroller](https://litecanvas.js.org?c=eJxVUMFOwzAMvfcrzAEtacNIxwZDsAPSJoG0AxJIO0w7hDZdI6XN1HhQgfbvOOs22CGJ7ff8nh1rUGeq%2FlSe8SgqtnWGxtVgaoPAOPxEAJX2Xq01TKC30DZzlQZ0YE%2BNFz0itQQvXqbvzxRvlKVsORQjcSvuxFjci1SKNF1Fu38W202uUAPLsbNB6pnNn17fZlPKvPnWR8nrwwR9q%2Bs1loSWBI3k3vZqAjdSQgw5nsnnjfo6bpBZzySnoHANMKsRDAnIB3oe4VycaknSdQEEJoa5MGGyn8aGn8p0UDcEHdv99sNjw4yA9I%2BVOesCiX5kWVjnGoYYjy4pPdjx1Z6LusWwMQsXP5VYpVrWChhInpg4YLHsjwWUyUAm3tRBbcjjUhzGEZ1hENjRZ%2FwCV%2F6J0w%3D%3D)
|
|
92
92
|
- [3D Projection](https://litecanvas.js.org?c=eJyNVU2P2jAQvfMrpodqnWI%2By6kt7WW3hVulrtTuRjk4JCyG4CDHFJYV%2F73jj5CYDUslROx579njGc844yqdMfGXFSRoteZbMVM8F8AFVySAlxZAxkW644lakGGA04IfUhjD7%2Bnt%2FQS%2BwuRu%2BmNyD9%2FKQQ9G8MmhOEbBRubL1K46hhANAOGAQh9%2FEbVTHA%2F8qbaYaaRXyLlQRaXuaB8o1D8RhV4Pwj2FZwqHyPKaaHWkAehcQ2oEf7GLwGt7pxGIqliliT6sNjDxlOlw91vHWna2m4SplCTKZsiS2sjq9gctNMxzCSRLFXAt%2FYyfLy6I3SwVT2qBpnbbigFmuSgU4jrChjVcMyX5nnS7XasKeRQYql5T5opZD5G23mbEGNCtP8Q4ElC9luVf5D6cuI5yhf%2FYzHeul1Eb3lbK6tqdaU5sPJU%2BcSVG%2BOjFOZFs56pglhWkH5gUYUSIvaLff%2F6iMAp0yDfbYkE0riQTRabTUxbBkFbFYUqoKT2j85QIdIpwCoRDGwYBvIcRrZwNfBpSECU1bmBNlwQUeAPhaIptg%2BeoR6EUMQoxdfeoag3EXREWhX39KxnaMPAM8TkjPjE%2B%2Bju6FOoNXfRNntksz%2FQlZahxF7nCZL4z2DkQO1HcIIqdKC4BRPgciN3o3XhsGQGoBX4B%2ByDcSZlLcjPFjpnxBGylpMWNuQR2VZkWZfk2Zdp46mUbBfYuhrZxnVRLq1qiyhwDh5XKVmOxXZv2YC0n5coqV3o%2Fq1zVlWB0bR1KHoWrCD5gfFZRuIwc4ei%2B1jW043ooaZXYUR9XpmorheZ42av6gWQJx2qw%2Bzr2xRdglhcngWmnojatE33El%2FVdK23y5%2BEtf86W8Xe58E6d%2B%2Bg784Ynj%2F%2FvyaU4XA%2FCq4e07onX592r6TsT7rEuw2f9d4i0%2BB%2FEGGLo)
|
|
93
93
|
|
package/dist/dist.js
CHANGED
|
@@ -27,18 +27,18 @@
|
|
|
27
27
|
|
|
28
28
|
// src/palette.js
|
|
29
29
|
var colors = [
|
|
30
|
-
"#
|
|
30
|
+
"#111",
|
|
31
31
|
"#6a7799",
|
|
32
32
|
"#aec2c2",
|
|
33
|
-
"#
|
|
34
|
-
"#
|
|
35
|
-
"#
|
|
36
|
-
"#
|
|
37
|
-
"#
|
|
33
|
+
"#FFF1E8",
|
|
34
|
+
"#d82800",
|
|
35
|
+
"#f8d878",
|
|
36
|
+
"#155fd9",
|
|
37
|
+
"#3cbcfc",
|
|
38
38
|
"#327345",
|
|
39
39
|
"#63c64d",
|
|
40
|
-
"#
|
|
41
|
-
"#
|
|
40
|
+
"#6844fc",
|
|
41
|
+
"#ac7c00"
|
|
42
42
|
];
|
|
43
43
|
|
|
44
44
|
// src/index.js
|
|
@@ -56,10 +56,11 @@
|
|
|
56
56
|
loop: null,
|
|
57
57
|
pauseOnBlur: true,
|
|
58
58
|
tapEvents: true,
|
|
59
|
-
keyboardEvents: true
|
|
59
|
+
keyboardEvents: true,
|
|
60
|
+
animate: true
|
|
60
61
|
};
|
|
61
62
|
settings = Object.assign(defaults, settings);
|
|
62
|
-
let _initialized = false, _plugins = [], _canvas = settings.canvas || document.createElement("canvas"), _fullscreen = settings.fullscreen, _autoscale = settings.autoscale, _scale = 1, _ctx, _timeScale = 1, _lastFrame, _step = 1 / settings.fps, _stepMs = _step * 1e3, _accumulated = 0, _rafid, _drawCount = 0, _drawTime = 0, _fontFamily = "sans-serif", _fontStyle = "", _fontSize = 32, _rng_seed = Date.now(), _events = {
|
|
63
|
+
let _initialized = false, _plugins = [], _canvas = settings.canvas || document.createElement("canvas"), _fullscreen = settings.fullscreen, _autoscale = settings.autoscale, _animate = settings.animate, _scale = 1, _ctx, _timeScale = 1, _lastFrame, _step = 1 / settings.fps, _stepMs = _step * 1e3, _accumulated = 0, _rafid, _drawCount = 0, _drawTime = 0, _fontFamily = "sans-serif", _fontStyle = "", _fontSize = 32, _rng_seed = Date.now(), _events = {
|
|
63
64
|
init: false,
|
|
64
65
|
update: false,
|
|
65
66
|
draw: false,
|
|
@@ -548,39 +549,13 @@
|
|
|
548
549
|
}
|
|
549
550
|
},
|
|
550
551
|
/**
|
|
551
|
-
*
|
|
552
|
+
* Turn given path into a clipping region.
|
|
552
553
|
*
|
|
553
|
-
*
|
|
554
|
-
* canvas state using push() before calling cliprect(), and restore it
|
|
555
|
-
* once you have finished drawing in the clipped area using pop().
|
|
556
|
-
*
|
|
557
|
-
* @param {number} x
|
|
558
|
-
* @param {number} y
|
|
559
|
-
* @param {number} width
|
|
560
|
-
* @param {number} height
|
|
561
|
-
* @see https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/clip
|
|
562
|
-
*/
|
|
563
|
-
cliprect(x, y, width, height) {
|
|
564
|
-
_ctx.beginPath();
|
|
565
|
-
_ctx.rect(x, y, width, height);
|
|
566
|
-
_ctx.clip();
|
|
567
|
-
},
|
|
568
|
-
/**
|
|
569
|
-
* Create a circular clipping region.
|
|
570
|
-
*
|
|
571
|
-
* Note: Clip paths cannot be reverted directly. You must save your
|
|
572
|
-
* canvas state using push() before calling clipcirc(), and restore it
|
|
573
|
-
* once you have finished drawing in the clipped area using pop().
|
|
574
|
-
*
|
|
575
|
-
* @param {number} x
|
|
576
|
-
* @param {number} y
|
|
577
|
-
* @param {number} radius
|
|
554
|
+
* @param {Path2D} path
|
|
578
555
|
* @see https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/clip
|
|
579
556
|
*/
|
|
580
|
-
|
|
581
|
-
_ctx.
|
|
582
|
-
_ctx.arc(x, y, radius, 0, TWO_PI);
|
|
583
|
-
_ctx.clip();
|
|
557
|
+
clip(path) {
|
|
558
|
+
_ctx.clip(path);
|
|
584
559
|
},
|
|
585
560
|
/** SOUND API */
|
|
586
561
|
/**
|
|
@@ -887,7 +862,7 @@
|
|
|
887
862
|
_accumulated -= _stepMs;
|
|
888
863
|
ticks++;
|
|
889
864
|
}
|
|
890
|
-
if (ticks) {
|
|
865
|
+
if (ticks || !_animate) {
|
|
891
866
|
instance.textalign("start", "top");
|
|
892
867
|
instance.emit("draw");
|
|
893
868
|
_drawCount++;
|
|
@@ -898,7 +873,9 @@
|
|
|
898
873
|
_drawTime -= 1e3;
|
|
899
874
|
}
|
|
900
875
|
}
|
|
901
|
-
if (_rafid
|
|
876
|
+
if (_rafid && _animate) {
|
|
877
|
+
_rafid = requestAnimationFrame(drawFrame);
|
|
878
|
+
}
|
|
902
879
|
}
|
|
903
880
|
function setupCanvas() {
|
|
904
881
|
_canvas = "string" === typeof _canvas ? document.querySelector(_canvas) : _canvas;
|
|
@@ -937,6 +914,10 @@
|
|
|
937
914
|
_canvas.style.imageRendering = "pixelated";
|
|
938
915
|
}
|
|
939
916
|
instance.emit("resized", _scale);
|
|
917
|
+
if (!_animate) {
|
|
918
|
+
_lastFrame = performance.now();
|
|
919
|
+
requestAnimationFrame(drawFrame);
|
|
920
|
+
}
|
|
940
921
|
}
|
|
941
922
|
function triggerEvent(eventName, arg1, arg2, arg3, arg4) {
|
|
942
923
|
if (!_events[eventName]) return;
|
package/dist/dist.min.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
(()=>{var e=/* @__PURE__ */new AudioContext;globalThis.zzfxV=1;var t=(t=1,a=.05,
|
|
1
|
+
(()=>{var e=/* @__PURE__ */new AudioContext;globalThis.zzfxV=1;var t=(t=1,a=.05,n=220,l=0,r=0,i=.1,o=0,s=1,c=0,f=0,p=0,u=0,d=0,g=0,h=0,m=0,v=0,T=1,x=0,E=0,b=0)=>{let y=Math,w=2*y.PI,H=c*=500*w/44100/44100,D=n*=(1-a+2*a*y.random(a=[]))*w/44100,A=0,I=0,S=0,k=1,C=0,P=0,z=0,F=b<0?-1:1,O=w*F*b*2/44100,X=y.cos(O),L=y.sin,W=L(O)/4,Y=1+W,M=-2*X/Y,_=(1-W)/Y,B=(1+F*X)/2/Y,G=-(F+X)/Y,R=0,N=0,j=0,q=0;for(l=44100*l+9,x*=44100,r*=44100,i*=44100,v*=44100,f*=500*w/85766121e6,h*=w/44100,p*=w/44100,u*=44100,d=44100*d|0,t*=.3*globalThis.zzfxV,F=l+x+r+i+v|0;S<F;a[S++]=z*t)++P%(100*m|0)||(z=o?1<o?2<o?3<o?L(A*A):y.max(y.min(y.tan(A),1),-1):1-(2*A/w%2+2)%2:1-4*y.abs(y.round(A/w)-A/w):L(A),z=(d?1-E+E*L(w*S/d):1)*(z<0?-1:1)*y.abs(z)**s*(S<l?S/l:S<l+x?1-(S-l)/x*(1-T):S<l+x+r?T:S<F-v?(F-S-v)/i*T:0),z=v?z/2+(v>S?0:(S<F-v?1:(F-S)/v)*a[S-v|0]/2/t):z,b&&(z=q=B*R+G*(R=N)+B*(N=z)-_*j-M*(j=q))),A+=(O=(n+=c+=f)*y.cos(h*I++))+O*g*L(S**5),k&&++k>u&&(n+=p,D+=p,k=0),!d||++C%d||(n=D,c=H,k=k||1);(t=e.createBuffer(1,F,44100)).getChannelData(0).set(a),(n=e.createBufferSource()).buffer=t,n.connect(e.destination),n.start()},a=["#111","#6a7799","#aec2c2","#FFF1E8","#d82800","#f8d878","#155fd9","#3cbcfc","#327345","#63c64d","#6844fc","#ac7c00"];globalThis.litecanvas=function(e={}){let n=globalThis,l=Math.PI,r=2*l,i=(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 o=!1,s=[],c=e.canvas||document.createElement("canvas"),f=e.fullscreen,p=e.autoscale,u=e.animate,d=1,g,h=1,m,v=1/e.fps,T=1e3*v,x=0,E,b=0,y=0,w="sans-serif",H="",D=32,A=Date.now(),I={init:!1,update:!1,draw:!1,resized:!1,tap:!1,untap:!1,tapping:!1,tapped:!1},S={settings:Object.assign({},e),colors:a},k={WIDTH:e.width,HEIGHT:e.height||e.width,CANVAS:null,ELAPSED:0,FPS:e.fps,CENTERX:0,CENTERY:0,MOUSEX:-1,MOUSEY:-1,DEFAULT_SFX:[.5,,1675,,.06,.2,1,1.8,,,637,.06],PI:l,TWO_PI:r,HALF_PI:.5*l,lerp:(e,t,a)=>e+a*(t-e),deg2rad:e=>l/180*e,rad2deg:e=>180/l*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,n,l,r=!1){let i=(e-t)/(a-t)*(l-n)+n;return r?k.clamp(i,n,l):i},norm:(e,t,a)=>k.map(e,t,a,0,1),rand:(e=0,t=1)=>(A=(1664525*A+0x3c6ef35f)%0x100000000)/0x100000000*(t-e)+e,randi:(e=0,t=1)=>k.floor(k.rand(e,t+1)),seed:e=>null==e?A:A=~~e,cls(e){null==e?g.clearRect(0,0,k.WIDTH,k.HEIGHT):k.rectfill(0,0,k.WIDTH,k.HEIGHT,e)},rect(e,t,a,n,l=0,r=null){g.beginPath(),g[r?"roundRect":"rect"](~~e,~~t,a,n,r),k.stroke(l)},rectfill(e,t,a,n,l=0,r=null){g.beginPath(),g[r?"roundRect":"rect"](~~e,~~t,a,n,r),k.fill(l)},circ(e,t,a,n){g.beginPath(),g.arc(~~e,~~t,a,0,r),g.closePath(),k.stroke(n)},circfill(e,t,a,n){g.beginPath(),g.arc(~~e,~~t,a,0,r),g.closePath(),k.fill(n)},line(e,t,a,n,l){g.beginPath(),g.moveTo(~~e,~~t),g.lineTo(~~a,~~n),k.stroke(l)},linewidth(e){g.lineWidth=e},linedash(e,t=0){g.setLineDash(Array.isArray(e)?e:[e]),g.lineDashOffset=t},text(e,t,a,n=3){g.font=`${H} ${D}px ${w}`,g.fillStyle=k.getcolor(n),g.fillText(a,~~e,~~t)},textfont(e){w=e},textsize(e){D=e},textstyle(e){H=e||""},textalign(e,t){e&&(g.textAlign=e),t&&(g.textBaseline=t)},textmetrics(e,t=D){g.font=`${H} ${t}px ${w}`;let a=g.measureText(e);return a.height=a.actualBoundingBoxAscent+a.actualBoundingBoxDescent,a},image(e,t,a){g.drawImage(a,~~e,~~t)},paint(e,t,a,n={}){let l=n.canvas||new OffscreenCanvas(1,1),r=n.scale||1,i=g;if(l.width=e*r,l.height=t*r,(g=l.getContext("2d")).scale(r,r),Array.isArray(a)){let e=0,t=0;for(let n of(g.imageSmoothingEnabled=!1,a)){for(let a of n)" "!==a&&"."!==a&&k.rectfill(e,t,1,1,parseInt(a,16)),e++;t++,e=0}}else a(l,g);return g=i,l},ctx:e=>(e&&(g=e),g),push:()=>g.save(),pop:()=>g.restore(),translate:(e,t)=>g.translate(~~e,~~t),scale:(e,t)=>g.scale(e,t||e),rotate:e=>g.rotate(e),transform:(e,t,a,n,l,r,i=!0)=>g[i?"setTransform":"transform"](e,t,a,n,l,r),alpha(e){g.globalAlpha=k.clamp(e,0,1)},path:e=>new Path2D(e),fill(e,t){g.fillStyle=k.getcolor(e),t?g.fill(t):g.fill()},stroke(e,t){g.strokeStyle=k.getcolor(e),t?g.stroke(t):g.stroke()},clip(e){g.clip(e)},sfx:(e,a=0,l=1)=>!(n.zzfxV<=0)&&(!navigator.userActivation||!!navigator.userActivation.hasBeenActive)&&(e=e||k.DEFAULT_SFX,(a>0||1!==l)&&((e=e.slice())[0]=l*(e[0]||1),e[10]=~~e[10]+a),t.apply(0,e),e),volume(e){n.zzfxV=+e},colrect:(e,t,a,n,l,r,i,o)=>e<l+i&&e+a>l&&t<r+o&&t+n>r,colcirc:(e,t,a,n,l,r)=>(n-e)**2+(l-t)**2<=(a+r)**2,timescale(e){h=e},use(e,t={}){e.__conf=t,o?O(e):s.push(e)},listen:(e,t)=>(I[e]=I[e]||[],I[e].push(t),()=>{I[e]=I[e].filter(e=>t!==e)}),emit(e,t,a,n,l){F("before:"+e,t,a,n,l),F(e,t,a,n,l),F("after:"+e,t,a,n,l)},getcolor:e=>a[~~e%a.length],setvar(t,a){k[t]=a,e.global&&(n[t]=a)},resize(e,t){k.setvar("WIDTH",c.width=e),k.setvar("HEIGHT",c.height=t||e),z()}};for(let e of["sin","cos","atan2","hypot","tan","abs","ceil","round","floor","trunc","min","max","pow","sqrt","sign","exp"])k[e]=Math[e];function C(){o=!0,c="string"==typeof c?document.querySelector(c):c,k.setvar("CANVAS",c),g=c.getContext("2d"),k.WIDTH>0&&(f=!1),c.width=k.WIDTH,c.height=k.HEIGHT||k.WIDTH,c.parentNode||document.body.appendChild(c),c.style.display="block",f?(c.style.position="absolute",c.style.inset=0):p&&(c.style.margin="auto");let t=e.loop?e.loop:n;for(let e of Object.keys(I))t[e]&&k.listen(e,t[e]);for(let e of s)O(e);if(i(n,"resize",z),z(),e.tapEvents){let e=(e,t)=>[(e-c.offsetLeft)/d,(t-c.offsetTop)/d],t=/* @__PURE__ */new Map,a=(e,a,n)=>{let l={x:a,y:n,startX:a,startY:n,ts:performance.now()};return t.set(e,l),l},l=(e,n,l)=>{let r=t.get(e)||a(e);r.x=n,r.y=l},r=e=>e&&performance.now()-e.ts<=200,o=!1;i(c,"mousedown",t=>{t.preventDefault();let[n,l]=e(t.pageX,t.pageY);k.emit("tap",n,l,0),a(0,n,l),o=!0}),i(c,"mousemove",t=>{t.preventDefault();let[a,n]=e(t.pageX,t.pageY);k.setvar("MOUSEX",a),k.setvar("MOUSEY",n),o&&(k.emit("tapping",a,n,0),l(0,a,n))}),i(c,"mouseup",a=>{a.preventDefault();let n=t.get(0),[l,i]=e(a.pageX,a.pageY);r(n)&&k.emit("tapped",n.startX,n.startY,0),k.emit("untap",l,i,0),t.delete(0),o=!1}),i(c,"touchstart",t=>{for(let n of(t.preventDefault(),t.changedTouches)){let[t,l]=e(n.pageX,n.pageY);k.emit("tap",t,l,n.identifier+1),a(n.identifier+1,t,l)}}),i(c,"touchmove",t=>{for(let a of(t.preventDefault(),t.changedTouches)){let[t,n]=e(a.pageX,a.pageY);k.emit("tapping",t,n,a.identifier+1),l(a.identifier+1,t,n)}});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,n]of t)a.includes(e)||(r(n)&&k.emit("tapped",n.startX,n.startY,e),k.emit("untap",n.x,n.y,e),t.delete(e))};i(c,"touchend",s),i(c,"touchcancel",s),i(n,"blur",()=>{for(let[e,a]of(o=!1,t))k.emit("untap",a.x,a.y,e),t.delete(e)})}if(e.keyboardEvents){let e=/* @__PURE__ */new Set;k.setvar("iskeydown",t=>"any"===t?e.size>0:e.has(t.toLowerCase())),i(n,"keydown",t=>{e.add(t.key.toLowerCase())}),i(n,"keyup",t=>{e.delete(t.key.toLowerCase())}),i(n,"blur",()=>e.clear())}e.pauseOnBlur&&(i(n,"blur",()=>{E=null}),i(n,"focus",()=>{E||(m=performance.now(),E=requestAnimationFrame(P))})),k.emit("init",k),m=performance.now(),E=requestAnimationFrame(P)}function P(e){let t=0,a=e-m;for(m=e,x+=a;x>=T;)k.emit("update",v*h),k.setvar("ELAPSED",k.ELAPSED+v*h),x-=T,t++;(t||!u)&&(k.textalign("start","top"),k.emit("draw"),b++,(y+=T*t)+x>=1e3&&(k.setvar("FPS",b),b=0,y-=1e3)),E&&u&&(E=requestAnimationFrame(P))}function z(){let t=n.innerWidth,a=n.innerHeight;f?(k.setvar("WIDTH",c.width=t),k.setvar("HEIGHT",c.height=a)):p&&(d=Math.min(t/k.WIDTH,a/k.HEIGHT),d=(e.pixelart?~~d:d)||1,c.style.width=k.WIDTH*d+"px",c.style.height=k.HEIGHT*d+"px"),k.setvar("CENTERX",k.WIDTH/2),k.setvar("CENTERY",k.HEIGHT/2),(!e.antialias||e.pixelart)&&(g.imageSmoothingEnabled=!1,c.style.imageRendering="pixelated"),k.emit("resized",d),u||(m=performance.now(),requestAnimationFrame(P))}function F(e,t,a,n,l){if(I[e])for(let r of I[e])r(t,a,n,l)}function O(e){let t=e(k,S,e.__conf);if("object"==typeof t)for(let[e,a]of Object.entries(t))k.setvar(e,a)}if(e.global){if(n.__litecanvas)throw"global litecanvas already instantiated";Object.assign(n,k),n.__litecanvas=k}return"loading"===document.readyState?i(n,"DOMContentLoaded",C):C(),k}})();
|
package/package.json
CHANGED
package/src/index.js
CHANGED
|
@@ -29,6 +29,7 @@ export default function litecanvas(settings = {}) {
|
|
|
29
29
|
pauseOnBlur: true,
|
|
30
30
|
tapEvents: true,
|
|
31
31
|
keyboardEvents: true,
|
|
32
|
+
animate: true,
|
|
32
33
|
}
|
|
33
34
|
|
|
34
35
|
// setup the settings default values
|
|
@@ -44,6 +45,8 @@ export default function litecanvas(settings = {}) {
|
|
|
44
45
|
_fullscreen = settings.fullscreen,
|
|
45
46
|
/** @type {boolean} */
|
|
46
47
|
_autoscale = settings.autoscale,
|
|
48
|
+
/** @type {boolean} */
|
|
49
|
+
_animate = settings.animate,
|
|
47
50
|
/** @type {number} */
|
|
48
51
|
_scale = 1,
|
|
49
52
|
/** @type {CanvasRenderingContext2D} */
|
|
@@ -643,40 +646,13 @@ export default function litecanvas(settings = {}) {
|
|
|
643
646
|
},
|
|
644
647
|
|
|
645
648
|
/**
|
|
646
|
-
*
|
|
647
|
-
*
|
|
648
|
-
* Note: Clip paths cannot be reverted directly. You must save your
|
|
649
|
-
* canvas state using push() before calling cliprect(), and restore it
|
|
650
|
-
* once you have finished drawing in the clipped area using pop().
|
|
649
|
+
* Turn given path into a clipping region.
|
|
651
650
|
*
|
|
652
|
-
* @param {
|
|
653
|
-
* @param {number} y
|
|
654
|
-
* @param {number} width
|
|
655
|
-
* @param {number} height
|
|
651
|
+
* @param {Path2D} path
|
|
656
652
|
* @see https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/clip
|
|
657
653
|
*/
|
|
658
|
-
|
|
659
|
-
_ctx.
|
|
660
|
-
_ctx.rect(x, y, width, height)
|
|
661
|
-
_ctx.clip()
|
|
662
|
-
},
|
|
663
|
-
|
|
664
|
-
/**
|
|
665
|
-
* Create a circular clipping region.
|
|
666
|
-
*
|
|
667
|
-
* Note: Clip paths cannot be reverted directly. You must save your
|
|
668
|
-
* canvas state using push() before calling clipcirc(), and restore it
|
|
669
|
-
* once you have finished drawing in the clipped area using pop().
|
|
670
|
-
*
|
|
671
|
-
* @param {number} x
|
|
672
|
-
* @param {number} y
|
|
673
|
-
* @param {number} radius
|
|
674
|
-
* @see https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/clip
|
|
675
|
-
*/
|
|
676
|
-
clipcirc(x, y, radius) {
|
|
677
|
-
_ctx.beginPath()
|
|
678
|
-
_ctx.arc(x, y, radius, 0, TWO_PI)
|
|
679
|
-
_ctx.clip()
|
|
654
|
+
clip(path) {
|
|
655
|
+
_ctx.clip(path)
|
|
680
656
|
},
|
|
681
657
|
|
|
682
658
|
/** SOUND API */
|
|
@@ -1068,7 +1044,7 @@ export default function litecanvas(settings = {}) {
|
|
|
1068
1044
|
ticks++
|
|
1069
1045
|
}
|
|
1070
1046
|
|
|
1071
|
-
if (ticks) {
|
|
1047
|
+
if (ticks || !_animate) {
|
|
1072
1048
|
// default custom values for textAlign & textBaseline
|
|
1073
1049
|
instance.textalign('start', 'top')
|
|
1074
1050
|
|
|
@@ -1083,7 +1059,9 @@ export default function litecanvas(settings = {}) {
|
|
|
1083
1059
|
}
|
|
1084
1060
|
}
|
|
1085
1061
|
|
|
1086
|
-
if (_rafid
|
|
1062
|
+
if (_rafid && _animate) {
|
|
1063
|
+
_rafid = requestAnimationFrame(drawFrame)
|
|
1064
|
+
}
|
|
1087
1065
|
}
|
|
1088
1066
|
|
|
1089
1067
|
function setupCanvas() {
|
|
@@ -1140,6 +1118,11 @@ export default function litecanvas(settings = {}) {
|
|
|
1140
1118
|
}
|
|
1141
1119
|
|
|
1142
1120
|
instance.emit('resized', _scale)
|
|
1121
|
+
|
|
1122
|
+
if (!_animate) {
|
|
1123
|
+
_lastFrame = performance.now()
|
|
1124
|
+
requestAnimationFrame(drawFrame)
|
|
1125
|
+
}
|
|
1143
1126
|
}
|
|
1144
1127
|
|
|
1145
1128
|
function triggerEvent(eventName, arg1, arg2, arg3, arg4) {
|
package/src/palette.js
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
// Default colors inspired by https://lospec.com/palette-list/trirampo
|
|
2
2
|
export const colors = [
|
|
3
|
-
'#
|
|
3
|
+
'#111',
|
|
4
4
|
'#6a7799',
|
|
5
5
|
'#aec2c2',
|
|
6
|
-
'#
|
|
6
|
+
'#FFF1E8',
|
|
7
7
|
|
|
8
|
-
'#
|
|
9
|
-
'#
|
|
10
|
-
'#
|
|
11
|
-
'#
|
|
8
|
+
'#d82800',
|
|
9
|
+
'#f8d878',
|
|
10
|
+
'#155fd9',
|
|
11
|
+
'#3cbcfc',
|
|
12
12
|
|
|
13
13
|
'#327345',
|
|
14
14
|
'#63c64d',
|
|
15
|
-
'#
|
|
16
|
-
'#
|
|
15
|
+
'#6844fc',
|
|
16
|
+
'#ac7c00',
|
|
17
17
|
]
|
package/src/types.js
CHANGED
package/types/types.d.ts
CHANGED
|
@@ -689,6 +689,12 @@ type LitecanvasOptions = {
|
|
|
689
689
|
* Useful when you want to implement your keyboard handler.
|
|
690
690
|
*/
|
|
691
691
|
keyboardEvents?: boolean
|
|
692
|
+
/**
|
|
693
|
+
* default: `true`
|
|
694
|
+
*
|
|
695
|
+
* if `false` stops the code in `update()` and `draw()` from running repeatedly. By default, tries to run these functions 60 times per second.
|
|
696
|
+
*/
|
|
697
|
+
animate?: boolean
|
|
692
698
|
}
|
|
693
699
|
|
|
694
700
|
type LitecanvasGameLoop = {
|