litecanvas 0.103.7 → 0.200.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.dev.js +16 -3
- package/dist/dist.js +7 -2
- package/dist/dist.min.js +1 -1
- package/package.json +2 -2
- package/src/index.js +23 -4
- package/src/version.js +1 -1
- package/types/global.d.ts +8 -2
- package/types/types.d.ts +8 -2
package/dist/dist.dev.js
CHANGED
|
@@ -115,7 +115,7 @@
|
|
|
115
115
|
var assert = (condition, message = "Assertion failed") => {
|
|
116
116
|
if (!condition) throw new Error("[litecanvas] " + message);
|
|
117
117
|
};
|
|
118
|
-
var version = "0.
|
|
118
|
+
var version = "0.200.0";
|
|
119
119
|
function litecanvas(settings = {}) {
|
|
120
120
|
const root = window,
|
|
121
121
|
math = Math,
|
|
@@ -881,7 +881,7 @@
|
|
|
881
881
|
);
|
|
882
882
|
loadPlugin(callback, config);
|
|
883
883
|
},
|
|
884
|
-
listen(eventName, callback) {
|
|
884
|
+
listen: (eventName, callback) => {
|
|
885
885
|
DEV: assert(
|
|
886
886
|
"string" === typeof eventName,
|
|
887
887
|
loggerPrefix + "listen() 1st param must be a string",
|
|
@@ -893,7 +893,20 @@
|
|
|
893
893
|
eventName = lowerCase(eventName);
|
|
894
894
|
_eventListeners[eventName] = _eventListeners[eventName] || new Set();
|
|
895
895
|
_eventListeners[eventName].add(callback);
|
|
896
|
-
|
|
896
|
+
},
|
|
897
|
+
unlisten: (eventName, callback) => {
|
|
898
|
+
DEV: assert(
|
|
899
|
+
"string" === typeof eventName,
|
|
900
|
+
loggerPrefix + "unlisten() 1st param must be a string",
|
|
901
|
+
);
|
|
902
|
+
DEV: assert(
|
|
903
|
+
"function" === typeof callback,
|
|
904
|
+
loggerPrefix + "unlisten() 2nd param must be a function",
|
|
905
|
+
);
|
|
906
|
+
eventName = lowerCase(eventName);
|
|
907
|
+
if (_eventListeners[eventName]) {
|
|
908
|
+
_eventListeners[eventName].delete(callback);
|
|
909
|
+
}
|
|
897
910
|
},
|
|
898
911
|
emit(eventName, arg1, arg2, arg3, arg4) {
|
|
899
912
|
DEV: assert(
|
package/dist/dist.js
CHANGED
|
@@ -409,11 +409,16 @@
|
|
|
409
409
|
use(callback, config = {}) {
|
|
410
410
|
loadPlugin(callback, config);
|
|
411
411
|
},
|
|
412
|
-
listen(eventName, callback) {
|
|
412
|
+
listen: (eventName, callback) => {
|
|
413
413
|
eventName = lowerCase(eventName);
|
|
414
414
|
_eventListeners[eventName] = _eventListeners[eventName] || new Set();
|
|
415
415
|
_eventListeners[eventName].add(callback);
|
|
416
|
-
|
|
416
|
+
},
|
|
417
|
+
unlisten: (eventName, callback) => {
|
|
418
|
+
eventName = lowerCase(eventName);
|
|
419
|
+
if (_eventListeners[eventName]) {
|
|
420
|
+
_eventListeners[eventName].delete(callback);
|
|
421
|
+
}
|
|
417
422
|
},
|
|
418
423
|
emit(eventName, arg1, arg2, arg3, arg4) {
|
|
419
424
|
if (_initialized) {
|
package/dist/dist.min.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
(()=>{var e=["#211e20","#555568","#a0a08b","#e9efec"];window.litecanvas=function(t={}){let a,l=window,n=Math,i=performance,o=2*n.PI,r=requestAnimationFrame,s=[],f=(e,t,a)=>{e.addEventListener(t,a,!1),s.push(()=>e.removeEventListener(t,a,!1))},d=(a=new AudioContext,l.zzfxV=1,(e=1,t=.05,n=220,i=0,o=0,r=.1,s=0,f=1,d=0,c=0,p=0,u=0,h=0,g=0,m=0,v=0,w=0,x=1,y=0,b=0,k=0)=>{let z=Math,E=2*z.PI,P=d*=500*E/44100/44100,T=n*=(1-t+2*t*z.random(t=[]))*E/44100,C=0,I=0,
|
|
1
|
+
(()=>{var e=["#211e20","#555568","#a0a08b","#e9efec"];window.litecanvas=function(t={}){let a,l=window,n=Math,i=performance,o=2*n.PI,r=requestAnimationFrame,s=[],f=(e,t,a)=>{e.addEventListener(t,a,!1),s.push(()=>e.removeEventListener(t,a,!1))},d=(a=new AudioContext,l.zzfxV=1,(e=1,t=.05,n=220,i=0,o=0,r=.1,s=0,f=1,d=0,c=0,p=0,u=0,h=0,g=0,m=0,v=0,w=0,x=1,y=0,b=0,k=0)=>{let z=Math,E=2*z.PI,P=d*=500*E/44100/44100,T=n*=(1-t+2*t*z.random(t=[]))*E/44100,C=0,I=0,L=0,D=1,S=0,A=0,M=0,H=k<0?-1:1,N=E*H*k*2/44100,W=z.cos(N),q=z.sin,B=q(N)/4,O=1+B,V=-2*W/O,R=(1-B)/O,F=(1+H*W)/2/O,G=-(H+W)/O,X=0,Y=0,$=0,j=0;for(i=44100*i+9,y*=44100,o*=44100,r*=44100,w*=44100,c*=500*E/85766121e6,m*=E/44100,p*=E/44100,u*=44100,h=44100*h|0,e*=.3*l.zzfxV,H=i+y+o+r+w|0;L<H;t[L++]=M*e)++A%(100*v|0)||(M=s?1<s?2<s?3<s?q(C*C):z.max(z.min(z.tan(C),1),-1):1-(2*C/E%2+2)%2:1-4*z.abs(z.round(C/E)-C/E):q(C),M=(h?1-b+b*q(E*L/h):1)*(M<0?-1:1)*z.abs(M)**f*(L<i?L/i:L<i+y?1-(L-i)/y*(1-x):L<i+y+o?x:L<H-w?(H-L-w)/r*x:0),M=w?M/2+(w>L?0:(L<H-w?1:(H-L)/w)*t[L-w|0]/2/e):M,k&&(M=j=F*X+G*(X=Y)+F*(Y=M)-R*$-V*($=j))),C+=(N=(n+=d+=c)*z.cos(m*I++))+N*g*q(L**5),D&&++D>u&&(n+=p,T+=p,D=0),!h||++S%h||(n=T,d=P,D=D||1);(e=a.createBuffer(1,H,44100)).getChannelData(0).set(t),(n=a.createBufferSource()).buffer=e,n.connect(a.destination),n.start()});t=Object.assign({width:null,height:null,autoscale:!0,canvas:null,global:!0,loop:null,tapEvents:!0,keyboardEvents:!0},t);let c=!1,p=!0,u,h=1,g,m=.5,v=1,w,x=1e3/60,y,b,k=3,z="sans-serif",E=20,P=1.2,T=Date.now(),C=e,I=[],L=[.5,0,1750,,,.3,1,,,,600,.1],D={},S={W:0,H:0,T:0,MX:-1,MY:-1,TWO_PI:o,HALF_PI:o/4,lerp:(e,t,a)=>e+a*(t-e),deg2rad:e=>n.PI/180*e,rad2deg:e=>180/n.PI*e,round:(e,t=0)=>{if(!t)return n.round(e);let a=10**t;return n.round(e*a)/a},clamp:(e,t,a)=>e<t?t:e>a?a:e,dist:(e,t,a,l)=>n.hypot(a-e,l-t),wrap:(e,t,a)=>e-(a-t)*n.floor((e-t)/(a-t)),map(e,t,a,l,n,i){let o=(e-t)/(a-t)*(n-l)+l;return i?S.clamp(o,l,n):o},norm:(e,t,a)=>S.map(e,t,a,0,1),rand:(e=0,t=1)=>(T=(1664525*T+0x3c6ef35f)%0x100000000)/0x100000000*(t-e)+e,randi:(e=0,t=1)=>~~S.rand(e,t+1),rseed(e){T=~~e},cls(e){null==e?g.clearRect(0,0,S.W,S.H):S.rectfill(0,0,S.W,S.H,e)},rect(e,t,a,l,n,i){g.beginPath(),g[i?"roundRect":"rect"](~~e-m,~~t-m,~~a+2*m,~~l+2*m,i),S.stroke(n)},rectfill(e,t,a,l,n,i){g.beginPath(),g[i?"roundRect":"rect"](~~e,~~t,~~a,~~l,i),S.fill(n)},circ(e,t,a,l){g.beginPath(),g.arc(~~e,~~t,~~a,0,o),S.stroke(l)},circfill(e,t,a,l){g.beginPath(),g.arc(~~e,~~t,~~a,0,o),S.fill(l)},oval(e,t,a,l,n){g.beginPath(),g.ellipse(~~e,~~t,~~a,~~l,0,0,o),S.stroke(n)},ovalfill(e,t,a,l,n){g.beginPath(),g.ellipse(~~e,~~t,~~a,~~l,0,0,o),S.fill(n)},shape(e){g.beginPath();for(let t=0;t<e.length;t+=2)0===t?g.moveTo(~~e[t],~~e[t+1]):g.lineTo(~~e[t],~~e[t+1]);g.lineTo(~~e[0],~~e[1])},line(e,t,a,l,n){g.beginPath();let i=.5*(0!==m&&~~e==~~a),o=.5*(0!==m&&~~t==~~l);g.moveTo(~~e+i,~~t+o),g.lineTo(~~a+i,~~l+o),S.stroke(n)},linewidth(e){g.lineWidth=~~e,m=.5*(0!=~~e%2)},linedash(e,t=0){g.setLineDash(e),g.lineDashOffset=t},text(e,t,a,l=k,n="normal"){g.font=`${n} ${E}px ${z}`,g.fillStyle=W(l);let i=(""+a).split("\n");for(let a=0;a<i.length;a++)g.fillText(i[a],~~e,~~t+E*P*a)},textgap(e){P=e},textfont(e){z=e},textsize(e){E=e},textalign(e,t){e&&(g.textAlign=e),t&&(g.textBaseline=t)},image(e,t,a){g.drawImage(a,~~e,~~t)},spr(e,t,a){let l=a.trim().split("\n");for(let a=0;a<l.length;a++){let n=l[a].trim();for(let l=0;l<n.length;l++){let i=n[l];"."!==i&&" "!==i&&S.rectfill(e+l,t+a,1,1,parseInt(i,36)||0)}}},paint(e,t,a,l={}){let n=l.canvas||new OffscreenCanvas(1,1),i=l.scale||1,o=g;return n.width=e*i,n.height=t*i,(g=n.getContext("2d")).scale(i,i),a(g),g=o,n.transferToImageBitmap()},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)},alpha(e){g.globalAlpha=S.clamp(e,0,1)},fill(e){g.fillStyle=W(e),g.fill()},stroke(e){g.strokeStyle=W(e),g.stroke()},clip(e){g.beginPath(),e(g),g.clip()},sfx:(e,t=0,a=1)=>!!l.zzfxV&&(!navigator.userActivation||!!navigator.userActivation.hasBeenActive)&&(e=e||L,(0!==t||1!==a)&&((e=e.slice())[0]=a*(e[0]||1),e[10]=~~e[10]+t),d.apply(0,e),e),volume(e){l.zzfxV=e},canvas:()=>u,use(e,t={}){var a=e,l=t;let n=a(S,l);for(let e in n)S.def(e,n[e])},listen:(e,t)=>{D[e=e.toLowerCase()]=D[e]||new Set,D[e].add(t)},unlisten:(e,t)=>{D[e=e.toLowerCase()]&&D[e].delete(t)},emit(e,t,a,l,n){c&&(N("before:"+(e=e.toLowerCase()),t,a,l,n),N(e,t,a,l,n),N("after:"+e,t,a,l,n))},pal(t,a=3){C=t||e,I=[],k=a},palc(e,t){null==e?I=[]:I[e]=t},def(e,a){S[e]=a,t.global&&(l[e]=a)},timescale(e){v=e},framerate(e){x=1e3/~~e},stat(e){let a={index:e,value:[t,c,x/1e3,h,D,C,L,v,l.zzfxV,T,E,z,I,P][e]};return S.emit("stat",a),a.value},pause(){p=!0,cancelAnimationFrame(b)},resume(){c&&p&&(p=!1,y=x,w=i.now(),b=r(M))},paused:()=>p,quit(){for(let e of(S.emit("quit"),S.pause(),c=!1,D={},s))e();if(t.global){for(let e in S)delete l[e];delete l.ENGINE}}};for(let e of"PI,sin,cos,atan2,hypot,tan,abs,ceil,floor,trunc,min,max,pow,sqrt,sign,exp".split(","))S[e]=n[e];function A(){if(t.autoscale&&f(l,"resize",H),t.tapEvents){let e=e=>[(e.pageX-u.offsetLeft)/h,(e.pageY-u.offsetTop)/h],t=new Map,a=(e,a,l)=>{let n={x:a,y:l,xi:a,yi:l,t:i.now()};return t.set(e,n),n},n=(e,l,n)=>{let i=t.get(e)||a(e);i.x=l,i.y=n},o=e=>e&&i.now()-e.t<=300,r=!1;f(u,"mousedown",t=>{if(0===t.button){t.preventDefault();let[l,n]=e(t);S.emit("tap",l,n,0),a(0,l,n),r=!0}}),f(u,"mouseup",a=>{if(0===a.button){a.preventDefault();let l=t.get(0),[n,i]=e(a);o(l)&&S.emit("tapped",l.xi,l.yi,0),S.emit("untap",n,i,0),t.delete(0),r=!1}}),f(l,"mousemove",t=>{t.preventDefault();let[a,l]=e(t);S.def("MX",a),S.def("MY",l),r&&(S.emit("tapping",a,l,0),n(0,a,l))}),f(u,"touchstart",t=>{for(let l of(t.preventDefault(),t.changedTouches)){let[t,n]=e(l);S.emit("tap",t,n,l.identifier+1),a(l.identifier+1,t,n)}}),f(u,"touchmove",t=>{for(let a of(t.preventDefault(),t.changedTouches)){let[t,l]=e(a);S.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)||(o(l)&&S.emit("tapped",l.xi,l.yi,e),S.emit("untap",l.x,l.y,e),t.delete(e))};f(u,"touchend",s),f(u,"touchcancel",s),f(l,"blur",()=>{for(let[e,a]of(r=!1,t))S.emit("untap",a.x,a.y,e),t.delete(e)})}if(t.keyboardEvents){let e=new Set,t=new Set,a=(e,t="")=>(t=t.toLowerCase())?e.has("space"===t?" ":t):e.size>0,n="";f(l,"keydown",a=>{let l=a.key.toLowerCase();e.has(l)||(e.add(l),t.add(l),n=" "===l?"space":l)}),f(l,"keyup",t=>{e.delete(t.key.toLowerCase())}),f(l,"blur",()=>e.clear()),S.listen("after:update",()=>t.clear()),S.def("iskeydown",t=>a(e,t)),S.def("iskeypressed",e=>a(t,e)),S.def("lastkey",()=>n)}c=!0,S.resume(),S.emit("init",S)}function M(){b=r(M);let e=i.now(),t=0,a=e-w;for(w=e,y+=a<100?a:x;y>=x;){t++,y-=x;let e=x/1e3*v;S.emit("update",e,t),S.def("T",S.T+e)}t&&(S.emit("draw",g),t>1&&(y=0))}function H(){let e=t.width>0?t.width:innerWidth,a=t.width>0?t.height||t.width:innerHeight;if(S.def("W",e),S.def("H",a),u.width=e,u.height=a,t.autoscale){let l=+t.autoscale;u.style.display||(u.style.display="block",u.style.margin="auto"),h=n.min(innerWidth/e,innerHeight/a),h=l>1&&h>l?l:h,u.style.width=e*h+"px",u.style.height=a*h+"px"}g.imageSmoothingEnabled=!1,S.textalign("start","top"),S.emit("resized",h)}function N(e,t,a,l,n){if(D[e])for(let i of D[e])i(t,a,l,n)}function W(e){return C[~~(I[e]??e)%C.length]}if(t.global){if(l.ENGINE)throw Error("only one global litecanvas is allowed");Object.assign(l,S),l.ENGINE=S}g=(u=(u="string"==typeof t.canvas?document.querySelector(t.canvas):t.canvas)||document.createElement("canvas")).getContext("2d"),f(u,"click",()=>focus()),H(),u.parentNode||document.body.appendChild(u),u.style.imageRendering="pixelated",u.oncontextmenu=()=>!1;let q=t.loop?t.loop:l;for(let e of"init,update,draw,tap,untap,tapping,tapped,resized".split(","))q[e]&&S.listen(e,q[e]);return"loading"===document.readyState?f(l,"DOMContentLoaded",()=>r(A)):b=r(A),S}})();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "litecanvas",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.200.0",
|
|
4
4
|
"description": "Lightweight HTML5 canvas 2D game engine suitable for small projects and creative coding. Inspired by PICO-8 and p5.js/Processing.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Luiz Bills <luizbills@pm.me>",
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
"creative coding"
|
|
33
33
|
],
|
|
34
34
|
"devDependencies": {
|
|
35
|
-
"@happy-dom/global-registrator": "^20.8.
|
|
35
|
+
"@happy-dom/global-registrator": "^20.8.4",
|
|
36
36
|
"@size-limit/preset-small-lib": "^12.0.1",
|
|
37
37
|
"@swc/core": "^1.15.18",
|
|
38
38
|
"ava": "^7.0.0",
|
package/src/index.js
CHANGED
|
@@ -1079,9 +1079,8 @@ export default function litecanvas(settings = {}) {
|
|
|
1079
1079
|
*
|
|
1080
1080
|
* @param {string} eventName the event type name
|
|
1081
1081
|
* @param {Function} callback the function that is called when the event occurs
|
|
1082
|
-
* @returns {Function} a function to remove the listener
|
|
1083
1082
|
*/
|
|
1084
|
-
listen(eventName, callback) {
|
|
1083
|
+
listen: (eventName, callback) => {
|
|
1085
1084
|
DEV: assert(
|
|
1086
1085
|
'string' === typeof eventName,
|
|
1087
1086
|
loggerPrefix + 'listen() 1st param must be a string'
|
|
@@ -1095,9 +1094,29 @@ export default function litecanvas(settings = {}) {
|
|
|
1095
1094
|
|
|
1096
1095
|
_eventListeners[eventName] = _eventListeners[eventName] || new Set()
|
|
1097
1096
|
_eventListeners[eventName].add(callback)
|
|
1097
|
+
},
|
|
1098
|
+
|
|
1099
|
+
/**
|
|
1100
|
+
* Remove a game event listener
|
|
1101
|
+
*
|
|
1102
|
+
* @param {string} eventName the event type name
|
|
1103
|
+
* @param {Function} callback the function that is called when the event occurs
|
|
1104
|
+
*/
|
|
1105
|
+
unlisten: (eventName, callback) => {
|
|
1106
|
+
DEV: assert(
|
|
1107
|
+
'string' === typeof eventName,
|
|
1108
|
+
loggerPrefix + 'unlisten() 1st param must be a string'
|
|
1109
|
+
)
|
|
1110
|
+
DEV: assert(
|
|
1111
|
+
'function' === typeof callback,
|
|
1112
|
+
loggerPrefix + 'unlisten() 2nd param must be a function'
|
|
1113
|
+
)
|
|
1114
|
+
|
|
1115
|
+
eventName = lowerCase(eventName)
|
|
1098
1116
|
|
|
1099
|
-
|
|
1100
|
-
|
|
1117
|
+
if (_eventListeners[eventName]) {
|
|
1118
|
+
_eventListeners[eventName].delete(callback)
|
|
1119
|
+
}
|
|
1101
1120
|
},
|
|
1102
1121
|
|
|
1103
1122
|
/**
|
package/src/version.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// Generated by genversion.
|
|
2
|
-
export const version = '0.
|
|
2
|
+
export const version = '0.200.0'
|
package/types/global.d.ts
CHANGED
|
@@ -551,9 +551,15 @@ declare global {
|
|
|
551
551
|
*
|
|
552
552
|
* @param event The game event type
|
|
553
553
|
* @param callback the function that is called when the event occurs
|
|
554
|
-
* @returns a function to remove the listener
|
|
555
554
|
*/
|
|
556
|
-
function listen(event: string, callback: Function):
|
|
555
|
+
function listen(event: string, callback: Function): void
|
|
556
|
+
/**
|
|
557
|
+
* Remove a game loop event listener
|
|
558
|
+
*
|
|
559
|
+
* @param event The game event type
|
|
560
|
+
* @param callback the function that is called when the event occurs
|
|
561
|
+
*/
|
|
562
|
+
function unlisten(event: string, callback: Function): void
|
|
557
563
|
/**
|
|
558
564
|
* Call all listeners attached to a game event
|
|
559
565
|
*
|
package/types/types.d.ts
CHANGED
|
@@ -535,9 +535,15 @@ type LitecanvasInstance = {
|
|
|
535
535
|
*
|
|
536
536
|
* @param event The game event type
|
|
537
537
|
* @param callback the function that is called when the event occurs
|
|
538
|
-
* @returns a function to remove the listener
|
|
539
538
|
*/
|
|
540
|
-
listen(event: string, callback: Function):
|
|
539
|
+
listen(event: string, callback: Function): void
|
|
540
|
+
/**
|
|
541
|
+
* Remove a game loop event listener
|
|
542
|
+
*
|
|
543
|
+
* @param event The game event type
|
|
544
|
+
* @param callback the function that is called when the event occurs
|
|
545
|
+
*/
|
|
546
|
+
unlisten(event: string, callback: Function): void
|
|
541
547
|
/**
|
|
542
548
|
* Call all listeners attached to a game event
|
|
543
549
|
*
|