litecanvas 0.66.5 → 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/README.md +1 -1
- package/dist/dist.js +14 -17
- package/dist/dist.min.js +1 -1
- package/package.json +1 -1
- package/src/index.js +17 -18
package/README.md
CHANGED
|
@@ -39,7 +39,7 @@ npm install litecanvas
|
|
|
39
39
|
|
|
40
40
|
```js
|
|
41
41
|
// import the engine or put the script in your HTML
|
|
42
|
-
// CDN: https://unpkg.com/
|
|
42
|
+
// CDN: https://unpkg.com/litecanvas/dist/dist.min.js
|
|
43
43
|
import litecanvas from 'litecanvas'
|
|
44
44
|
|
|
45
45
|
// you can setup other configurations here
|
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
|
|
@@ -890,6 +886,7 @@
|
|
|
890
886
|
_canvas = "string" === typeof _canvas ? document.querySelector(_canvas) : _canvas;
|
|
891
887
|
instance.setvar("CANVAS", _canvas);
|
|
892
888
|
_ctx = _canvas.getContext("2d");
|
|
889
|
+
on(_canvas, "click", () => root.focus());
|
|
893
890
|
if (instance.WIDTH > 0) {
|
|
894
891
|
_fullscreen = false;
|
|
895
892
|
}
|
package/dist/dist.min.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
(()=>{var e
|
|
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
|
/**
|
|
@@ -1091,6 +1088,8 @@ export default function litecanvas(settings = {}) {
|
|
|
1091
1088
|
instance.setvar('CANVAS', _canvas)
|
|
1092
1089
|
_ctx = _canvas.getContext('2d')
|
|
1093
1090
|
|
|
1091
|
+
on(_canvas, 'click', () => root.focus())
|
|
1092
|
+
|
|
1094
1093
|
// disable fullscreen if a width is specified
|
|
1095
1094
|
if (instance.WIDTH > 0) {
|
|
1096
1095
|
_fullscreen = false
|