litecanvas 0.67.0 → 0.67.2
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 +1 -1
- package/dist/dist.js +3 -3
- package/dist/dist.min.js +1 -1
- package/package.json +2 -2
- package/src/index.js +4 -5
package/README.md
CHANGED
package/dist/dist.js
CHANGED
|
@@ -213,7 +213,7 @@
|
|
|
213
213
|
* @param {number} [max=1]
|
|
214
214
|
* @returns {number} the random number
|
|
215
215
|
*/
|
|
216
|
-
randi: (min = 0, max = 1) =>
|
|
216
|
+
randi: (min = 0, max = 1) => Math.floor(instance.rand(min, max + 1)),
|
|
217
217
|
/**
|
|
218
218
|
* If a value is passed, initializes the random number generator with an explicit seed value.
|
|
219
219
|
* Otherwise, returns the current seed state.
|
|
@@ -411,7 +411,7 @@
|
|
|
411
411
|
* @param {number} height
|
|
412
412
|
* @param {string[]|drawCallback} draw
|
|
413
413
|
* @param {object} [options]
|
|
414
|
-
* @param {number} [options.scale]
|
|
414
|
+
* @param {number} [options.scale=1]
|
|
415
415
|
* @param {OffscreenCanvas | HTMLCanvasElement} [options.canvas]
|
|
416
416
|
* @returns {OffscreenCanvas}
|
|
417
417
|
* @see https://developer.mozilla.org/en-US/docs/Web/API/OffscreenCanvas
|
|
@@ -422,7 +422,7 @@
|
|
|
422
422
|
canvas.height = height * scale;
|
|
423
423
|
_ctx = canvas.getContext("2d");
|
|
424
424
|
_ctx.scale(scale, scale);
|
|
425
|
-
if (draw.
|
|
425
|
+
if (draw.push) {
|
|
426
426
|
let x = 0, y = 0;
|
|
427
427
|
_ctx.imageSmoothingEnabled = false;
|
|
428
428
|
for (const str of draw) {
|
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,r=.1,o=0,s=1,c=0,f=0,u=0,p=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,M=z(L)/4,Y=1+M,F=-2*W/Y,_=(1-M)/Y,B=(1+X*W)/2/Y,G=-(X+W)/Y,R=0,N=0,j=0,U=0;for(n=44100*n+9,b*=44100,i*=44100,r*=44100,v*=44100,f*=500*w/85766121e6,h*=w/44100,u*=w/44100,p*=44100,d=44100*d|0,t*=.3*(globalThis.zzfxV||1),X=n+b+i+r+v|0;k<X;a[k++]=P*t)++O%(100*m|0)||(P=o?1<o?2<o?3<o?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)/r*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-F*(j=U))),I+=(L=(l+=c+=f)*y.cos(h*S++))+L*g*z(k**5),A&&++A>p&&(l+=u,D+=u,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,r=requestAnimationFrame,o=(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"),u=e.fullscreen,p=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 r=(e-t)/(a-t)*(n-l)+l;return i?C.clamp(r,l,n):r},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)=>Math.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,r=h;if(n.width=e*i,n.height=t*i,(h=n.getContext("2d")).scale(i,i),a.push){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=r,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,r=!0)=>h[r?"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,r,o)=>e<n+r&&e+a>n&&t<i+o&&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((u||p)&&o(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,r=!1;o(f,"mousedown",t=>{t.preventDefault();let[l,n]=e(t.pageX,t.pageY);C.emit("tap",l,n,0),a(0,l,n),r=!0}),o(f,"mousemove",t=>{t.preventDefault();let[a,l]=e(t.pageX,t.pageY);C.setvar("MOUSEX",a),C.setvar("MOUSEY",l),r&&(C.emit("tapping",a,l,0),n(0,a,l))}),o(f,"mouseup",a=>{a.preventDefault();let l=t.get(0),[n,o]=e(a.pageX,a.pageY);i(l)&&C.emit("tapped",l.startX,l.startY,0),C.emit("untap",n,o,0),t.delete(0),r=!1}),o(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)}}),o(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))};o(f,"touchend",s),o(f,"touchcancel",s),o(l,"blur",()=>{for(let[e,a]of(r=!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())),o(l,"keydown",t=>{e.add(t.key.toLowerCase())}),o(l,"keyup",t=>{e.delete(t.key.toLowerCase())}),o(l,"blur",()=>e.clear())}e.pauseOnBlur&&(o(l,"blur",()=>{E=!1}),o(l,"focus",()=>{v=performance.now(),r(P),E=!0})),C.setfps(e.fps),C.emit("init",C),w=(v=performance.now())+1e3,r(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&&r(P)}function X(){let t=l.innerWidth,a=l.innerHeight;u?(C.setvar("WIDTH",f.width=t),C.setvar("HEIGHT",f.height=a)):p&&(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||r(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"),o(f,"click",()=>l.focus()),C.WIDTH>0&&(u=!1),f.width=C.WIDTH,f.height=C.HEIGHT||C.WIDTH,f.parentNode||document.body.appendChild(f),f.style.display="block",u?(f.style.position="absolute",f.style.inset=0):p&&(f.style.margin="auto"),"loading"===document.readyState?o(l,"DOMContentLoaded",()=>r(O)):r(O),C}})();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "litecanvas",
|
|
3
|
-
"version": "0.67.
|
|
3
|
+
"version": "0.67.2",
|
|
4
4
|
"description": "Lightweight HTML5 canvas engine suitable for small games and animations.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Luiz Bills <luizbills@pm.me>",
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
"dev:test": "ava --watch",
|
|
27
27
|
"dev": "esbuild src/web.js --bundle --watch --outfile=dist/dist.js --servedir=.",
|
|
28
28
|
"build": "node script/build.js",
|
|
29
|
-
"gzip-size": "gzip -c dist/dist.min.js | wc -c | xargs printf \" Gzip size: %s bytes\n\"",
|
|
29
|
+
"gzip-size": "gzip -9 -c dist/dist.min.js | wc -c | xargs printf \" Gzip size: %s bytes\n\"",
|
|
30
30
|
"format": "npx prettier -w src/* samples/* types/*",
|
|
31
31
|
"prepare": "npm run build && npm run gzip-size",
|
|
32
32
|
"prepublishOnly": "npm test"
|
package/src/index.js
CHANGED
|
@@ -267,8 +267,7 @@ export default function litecanvas(settings = {}) {
|
|
|
267
267
|
* @param {number} [max=1]
|
|
268
268
|
* @returns {number} the random number
|
|
269
269
|
*/
|
|
270
|
-
randi: (min = 0, max = 1) =>
|
|
271
|
-
instance.floor(instance.rand(min, max + 1)),
|
|
270
|
+
randi: (min = 0, max = 1) => Math.floor(instance.rand(min, max + 1)),
|
|
272
271
|
|
|
273
272
|
/**
|
|
274
273
|
* If a value is passed, initializes the random number generator with an explicit seed value.
|
|
@@ -486,7 +485,7 @@ export default function litecanvas(settings = {}) {
|
|
|
486
485
|
* @param {number} height
|
|
487
486
|
* @param {string[]|drawCallback} draw
|
|
488
487
|
* @param {object} [options]
|
|
489
|
-
* @param {number} [options.scale]
|
|
488
|
+
* @param {number} [options.scale=1]
|
|
490
489
|
* @param {OffscreenCanvas | HTMLCanvasElement} [options.canvas]
|
|
491
490
|
* @returns {OffscreenCanvas}
|
|
492
491
|
* @see https://developer.mozilla.org/en-US/docs/Web/API/OffscreenCanvas
|
|
@@ -503,7 +502,7 @@ export default function litecanvas(settings = {}) {
|
|
|
503
502
|
_ctx.scale(scale, scale)
|
|
504
503
|
|
|
505
504
|
// draw pixel art if `draw` is a array
|
|
506
|
-
if (draw.
|
|
505
|
+
if (draw.push) {
|
|
507
506
|
let x = 0,
|
|
508
507
|
y = 0
|
|
509
508
|
|
|
@@ -512,7 +511,7 @@ export default function litecanvas(settings = {}) {
|
|
|
512
511
|
for (const str of draw) {
|
|
513
512
|
for (const color of str) {
|
|
514
513
|
if (' ' !== color && '.' !== color) {
|
|
515
|
-
// support for 16-color
|
|
514
|
+
// support for 16-color palette using hex (from 0 to f)
|
|
516
515
|
instance.rectfill(x, y, 1, 1, parseInt(color, 16))
|
|
517
516
|
}
|
|
518
517
|
x++
|