litecanvas 0.62.0 → 0.64.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 +31 -21
- package/dist/dist.min.js +1 -1
- package/package.json +1 -1
- package/src/index.js +36 -24
- package/types/index.d.ts +14 -8
- package/types/types.d.ts +14 -8
package/README.md
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|

|
|
2
2
|
|
|
3
|
-
#
|
|
3
|
+
# Litecanvas
|
|
4
4
|
|
|
5
5
|
[](https://discord.com/invite/r2c3rGsvH3)
|
|
6
6
|
|
|
7
|
-
Litecanvas is a lightweight HTML5 canvas engine suitable for small games, animations
|
|
7
|
+
Litecanvas is a lightweight HTML5 canvas engine suitable for small web games, prototypes, game jams, animations, creative programming, learning game programming and game design, etc.
|
|
8
8
|
|
|
9
9
|
:warning: **This project is still under development. All feedback is appreciated!** :warning:
|
|
10
10
|
|
package/dist/dist.js
CHANGED
|
@@ -59,7 +59,7 @@
|
|
|
59
59
|
animate: true
|
|
60
60
|
};
|
|
61
61
|
settings = Object.assign(defaults, settings);
|
|
62
|
-
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
|
|
62
|
+
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, _stepMs, _accumulated = 0, _focused = true, _drawCount = 0, _drawTime = 0, _fontFamily = "sans-serif", _fontStyle = "", _fontSize = 32, _rng_seed = Date.now(), _events = {
|
|
63
63
|
init: false,
|
|
64
64
|
update: false,
|
|
65
65
|
draw: false,
|
|
@@ -615,16 +615,6 @@
|
|
|
615
615
|
* @returns {boolean}
|
|
616
616
|
*/
|
|
617
617
|
colcirc: (x1, y1, r1, x2, y2, r2) => (x2 - x1) ** 2 + (y2 - y1) ** 2 <= (r1 + r2) ** 2,
|
|
618
|
-
/**
|
|
619
|
-
* The scale of the game's delta time (dt).
|
|
620
|
-
* Values higher than 1 increase the speed of time, while values smaller than 1 decrease it.
|
|
621
|
-
* A value of 0 freezes time and is effectively equivalent to pausing.
|
|
622
|
-
*
|
|
623
|
-
* @param {number} value
|
|
624
|
-
*/
|
|
625
|
-
timescale(value) {
|
|
626
|
-
_timeScale = value;
|
|
627
|
-
},
|
|
628
618
|
/** PLUGINS API */
|
|
629
619
|
/**
|
|
630
620
|
* Prepares a plugin to be loaded
|
|
@@ -694,6 +684,26 @@
|
|
|
694
684
|
instance.setvar("WIDTH", _canvas.width = width);
|
|
695
685
|
instance.setvar("HEIGHT", _canvas.height = height || width);
|
|
696
686
|
pageResized();
|
|
687
|
+
},
|
|
688
|
+
/**
|
|
689
|
+
* The scale of the game's delta time (dt).
|
|
690
|
+
* Values higher than 1 increase the speed of time, while values smaller than 1 decrease it.
|
|
691
|
+
* A value of 0 freezes time and is effectively equivalent to pausing.
|
|
692
|
+
*
|
|
693
|
+
* @param {number} value
|
|
694
|
+
*/
|
|
695
|
+
timescale(value) {
|
|
696
|
+
_timeScale = value;
|
|
697
|
+
},
|
|
698
|
+
/**
|
|
699
|
+
* Set the target FPS at runtime.
|
|
700
|
+
*
|
|
701
|
+
* @param {number} fps
|
|
702
|
+
*/
|
|
703
|
+
setfps(fps) {
|
|
704
|
+
_step = 1 / fps;
|
|
705
|
+
_stepMs = _step * 1e3;
|
|
706
|
+
_accumulated = 0;
|
|
697
707
|
}
|
|
698
708
|
};
|
|
699
709
|
for (const k of [
|
|
@@ -835,24 +845,24 @@
|
|
|
835
845
|
}
|
|
836
846
|
if (settings.pauseOnBlur) {
|
|
837
847
|
on(root, "blur", () => {
|
|
838
|
-
|
|
848
|
+
_focused = false;
|
|
839
849
|
});
|
|
840
850
|
on(root, "focus", () => {
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
}
|
|
851
|
+
_lastFrame = performance.now();
|
|
852
|
+
raf(drawFrame);
|
|
853
|
+
_focused = true;
|
|
845
854
|
});
|
|
846
855
|
}
|
|
847
856
|
instance.emit("init", instance);
|
|
857
|
+
setfps(settings.fps);
|
|
848
858
|
_lastFrame = performance.now();
|
|
849
|
-
|
|
859
|
+
raf(drawFrame);
|
|
850
860
|
}
|
|
851
861
|
function drawFrame(now) {
|
|
852
862
|
let ticks = 0, t = now - _lastFrame;
|
|
853
863
|
_lastFrame = now;
|
|
854
864
|
_accumulated += t;
|
|
855
|
-
while (_accumulated
|
|
865
|
+
while (_accumulated > _stepMs) {
|
|
856
866
|
instance.emit("update", _step * _timeScale);
|
|
857
867
|
instance.setvar("ELAPSED", instance.ELAPSED + _step * _timeScale);
|
|
858
868
|
_accumulated -= _stepMs;
|
|
@@ -869,8 +879,8 @@
|
|
|
869
879
|
_drawTime -= 1e3;
|
|
870
880
|
}
|
|
871
881
|
}
|
|
872
|
-
if (
|
|
873
|
-
|
|
882
|
+
if (_focused && _animate) {
|
|
883
|
+
raf(drawFrame);
|
|
874
884
|
}
|
|
875
885
|
}
|
|
876
886
|
function setupCanvas() {
|
|
@@ -911,7 +921,7 @@
|
|
|
911
921
|
}
|
|
912
922
|
instance.emit("resized", _scale);
|
|
913
923
|
if (!_animate) {
|
|
914
|
-
|
|
924
|
+
raf(drawFrame);
|
|
915
925
|
}
|
|
916
926
|
}
|
|
917
927
|
function triggerEvent(eventName, arg1, arg2, arg3, arg4) {
|
package/dist/dist.min.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
(()=>{var e=/* @__PURE__ */new AudioContext,t=(t=1,a=.05,l=220,n=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,y=0)=>{let b=Math,w=2*b.PI,H=c*=500*w/44100/44100,D=l*=(1-a+2*a*b.random(a=[]))*w/44100,I=0,A=0,S=0,k=1,C=0,O=0,P=0,X=y<0?-1:1,L=w*X*y*2/44100,W=b.cos(L),z=b.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,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||1),X=n+x+r+i+v|0;S<X;a[S++]=P*t)++O%(100*m|0)||(P=o?1<o?2<o?3<o?z(I*I):b.max(b.min(b.tan(I),1),-1):1-(2*I/w%2+2)%2:1-4*b.abs(b.round(I/w)-I/w):z(I),P=(d?1-E+E*z(w*S/d):1)*(P<0?-1:1)*b.abs(P)**s*(S<n?S/n:S<n+x?1-(S-n)/x*(1-T):S<n+x+r?T:S<X-v?(X-S-v)/i*T:0),P=v?P/2+(v>S?0:(S<X-v?1:(X-S)/v)*a[S-v|0]/2/t):P,y&&(P=U=B*R+G*(R=N)+B*(N=P)-_*j-M*(j=U))),I+=(L=(l+=c+=f)*b.cos(h*A++))+L*g*z(S**5),k&&++k>u&&(l+=p,D+=p,k=0),!d||++C%d||(l=D,c=H,k=k||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","#d82800","#f8d878","#155fd9","#3cbcfc","#327345","#63c64d","#6844fc","#ac7c00"];globalThis.litecanvas=function(e={}){let l=globalThis,n=Math.PI,r=2*n,i=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"),p=e.fullscreen,u=e.autoscale,d=e.animate,g=1,h,m=1,v,T
|
|
1
|
+
(()=>{var e=/* @__PURE__ */new AudioContext,t=(t=1,a=.05,l=220,n=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,y=0)=>{let b=Math,w=2*b.PI,H=c*=500*w/44100/44100,D=l*=(1-a+2*a*b.random(a=[]))*w/44100,I=0,A=0,S=0,k=1,C=0,O=0,P=0,X=y<0?-1:1,L=w*X*y*2/44100,W=b.cos(L),z=b.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,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||1),X=n+x+r+i+v|0;S<X;a[S++]=P*t)++O%(100*m|0)||(P=o?1<o?2<o?3<o?z(I*I):b.max(b.min(b.tan(I),1),-1):1-(2*I/w%2+2)%2:1-4*b.abs(b.round(I/w)-I/w):z(I),P=(d?1-E+E*z(w*S/d):1)*(P<0?-1:1)*b.abs(P)**s*(S<n?S/n:S<n+x?1-(S-n)/x*(1-T):S<n+x+r?T:S<X-v?(X-S-v)/i*T:0),P=v?P/2+(v>S?0:(S<X-v?1:(X-S)/v)*a[S-v|0]/2/t):P,y&&(P=U=B*R+G*(R=N)+B*(N=P)-_*j-M*(j=U))),I+=(L=(l+=c+=f)*b.cos(h*A++))+L*g*z(S**5),k&&++k>u&&(l+=p,D+=p,k=0),!d||++C%d||(l=D,c=H,k=k||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","#d82800","#f8d878","#155fd9","#3cbcfc","#327345","#63c64d","#6844fc","#ac7c00"];globalThis.litecanvas=function(e={}){let l=globalThis,n=Math.PI,r=2*n,i=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"),p=e.fullscreen,u=e.autoscale,d=e.animate,g=1,h,m=1,v,T,x,E=0,y=!0,b=0,w=0,H="sans-serif",D="",I=32,A=Date.now(),S={init:!1,update:!1,draw:!1,resized:!1,tap:!1,untap:!1,tapping:!1,tapped:!1},k={settings:Object.assign({},e),colors:a},C={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:n,TWO_PI:r,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,r=!1){let i=(e-t)/(a-t)*(n-l)+l;return r?C.clamp(i,l,n):i},norm:(e,t,a)=>C.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)=>C.floor(C.rand(e,t+1)),seed:e=>null==e?A:A=~~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,r=null){h.beginPath(),h[r?"roundRect":"rect"](~~e,~~t,a,l,r),C.stroke(n)},rectfill(e,t,a,l,n=0,r=null){h.beginPath(),h[r?"roundRect":"rect"](~~e,~~t,a,l,r),C.fill(n)},circ(e,t,a,l){h.beginPath(),h.arc(~~e,~~t,a,0,r),C.stroke(l)},circfill(e,t,a,l){h.beginPath(),h.arc(~~e,~~t,a,0,r),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(Array.isArray(e)?e:[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),r=l.scale||1,i=h;if(n.width=e*r,n.height=t*r,(h=n.getContext("2d")).scale(r,r),Array.isArray(a)){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=i,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,r,i=!0)=>h[i?"setTransform":"transform"](e,t,a,l,n,r),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,r,i,o)=>e<n+i&&e+a>n&&t<r+o&&t+l>r,colcirc:(e,t,a,l,n,r)=>(l-e)**2+(n-t)**2<=(a+r)**2,use(e,t={}){e.__conf=t,s?W(e):c.push(e)},listen:(e,t)=>(S[e]=S[e]||[],S[e].push(t),()=>{S[e]=S[e].filter(e=>t!==e)}),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){x=1e3*(T=1/e),E=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,f="string"==typeof f?document.querySelector(f):f,C.setvar("CANVAS",f),h=f.getContext("2d"),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");let t=e.loop?e.loop:l;for(let e of Object.keys(S))t[e]&&C.listen(e,t[e]);for(let e of c)W(e);if(o(l,"resize",X),X(),e.tapEvents){let e=(e,t)=>[(e-f.offsetLeft)/g,(t-f.offsetTop)/g],t=/* @__PURE__ */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 r=t.get(e)||a(e);r.x=l,r.y=n},r=e=>e&&performance.now()-e.ts<=200,i=!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),i=!0}),o(f,"mousemove",t=>{t.preventDefault();let[a,l]=e(t.pageX,t.pageY);C.setvar("MOUSEX",a),C.setvar("MOUSEY",l),i&&(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);r(l)&&C.emit("tapped",l.startX,l.startY,0),C.emit("untap",n,o,0),t.delete(0),i=!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)||(r(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(i=!1,t))C.emit("untap",a.x,a.y,e),t.delete(e)})}if(e.keyboardEvents){let e=/* @__PURE__ */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",()=>{y=!1}),o(l,"focus",()=>{v=performance.now(),i(P),y=!0})),C.emit("init",C),setfps(e.fps),v=performance.now(),i(P)}function P(e){let t=0,a=e-v;for(v=e,E+=a;E>x;)C.emit("update",T*m),C.setvar("ELAPSED",C.ELAPSED+T*m),E-=x,t++;(t||!d)&&(C.textalign("start","top"),C.emit("draw"),b++,(w+=x*t)+E>=1e3&&(C.setvar("FPS",b),b=0,w-=1e3)),y&&d&&i(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||i(P)}function L(e,t,a,l,n){if(S[e])for(let r of S[e])r(t,a,l,n)}function W(e){let t=e(C,k,e.__conf);if("object"==typeof t)for(let[e,a]of Object.entries(t))C.setvar(e,a)}if(e.global){if(l.__litecanvas)throw"global litecanvas already instantiated";Object.assign(l,C),l.__litecanvas=C}return"loading"===document.readyState?o(l,"DOMContentLoaded",O):O(),C}})();
|
package/package.json
CHANGED
package/src/index.js
CHANGED
|
@@ -57,13 +57,13 @@ export default function litecanvas(settings = {}) {
|
|
|
57
57
|
/** @type {number} */
|
|
58
58
|
_lastFrame,
|
|
59
59
|
/** @type {number} */
|
|
60
|
-
_step
|
|
60
|
+
_step,
|
|
61
61
|
/** @type {number} */
|
|
62
|
-
_stepMs
|
|
62
|
+
_stepMs,
|
|
63
63
|
/** @type {number} */
|
|
64
64
|
_accumulated = 0,
|
|
65
65
|
/** @type {number} */
|
|
66
|
-
|
|
66
|
+
_focused = true,
|
|
67
67
|
/** @type {number} */
|
|
68
68
|
_drawCount = 0,
|
|
69
69
|
/** @type {number} */
|
|
@@ -732,17 +732,6 @@ export default function litecanvas(settings = {}) {
|
|
|
732
732
|
colcirc: (x1, y1, r1, x2, y2, r2) =>
|
|
733
733
|
(x2 - x1) ** 2 + (y2 - y1) ** 2 <= (r1 + r2) ** 2,
|
|
734
734
|
|
|
735
|
-
/**
|
|
736
|
-
* The scale of the game's delta time (dt).
|
|
737
|
-
* Values higher than 1 increase the speed of time, while values smaller than 1 decrease it.
|
|
738
|
-
* A value of 0 freezes time and is effectively equivalent to pausing.
|
|
739
|
-
*
|
|
740
|
-
* @param {number} value
|
|
741
|
-
*/
|
|
742
|
-
timescale(value) {
|
|
743
|
-
_timeScale = value
|
|
744
|
-
},
|
|
745
|
-
|
|
746
735
|
/** PLUGINS API */
|
|
747
736
|
/**
|
|
748
737
|
* Prepares a plugin to be loaded
|
|
@@ -820,6 +809,28 @@ export default function litecanvas(settings = {}) {
|
|
|
820
809
|
instance.setvar('HEIGHT', (_canvas.height = height || width))
|
|
821
810
|
pageResized()
|
|
822
811
|
},
|
|
812
|
+
|
|
813
|
+
/**
|
|
814
|
+
* The scale of the game's delta time (dt).
|
|
815
|
+
* Values higher than 1 increase the speed of time, while values smaller than 1 decrease it.
|
|
816
|
+
* A value of 0 freezes time and is effectively equivalent to pausing.
|
|
817
|
+
*
|
|
818
|
+
* @param {number} value
|
|
819
|
+
*/
|
|
820
|
+
timescale(value) {
|
|
821
|
+
_timeScale = value
|
|
822
|
+
},
|
|
823
|
+
|
|
824
|
+
/**
|
|
825
|
+
* Set the target FPS at runtime.
|
|
826
|
+
*
|
|
827
|
+
* @param {number} fps
|
|
828
|
+
*/
|
|
829
|
+
setfps(fps) {
|
|
830
|
+
_step = 1 / fps
|
|
831
|
+
_stepMs = _step * 1000
|
|
832
|
+
_accumulated = 0
|
|
833
|
+
},
|
|
823
834
|
}
|
|
824
835
|
|
|
825
836
|
/** Copy some functions from native `Math` object */
|
|
@@ -1011,22 +1022,23 @@ export default function litecanvas(settings = {}) {
|
|
|
1011
1022
|
// listen browser focus/blur events and pause the update/draw loop
|
|
1012
1023
|
if (settings.pauseOnBlur) {
|
|
1013
1024
|
on(root, 'blur', () => {
|
|
1014
|
-
|
|
1025
|
+
_focused = false
|
|
1015
1026
|
})
|
|
1016
1027
|
|
|
1017
1028
|
on(root, 'focus', () => {
|
|
1018
|
-
|
|
1019
|
-
|
|
1020
|
-
|
|
1021
|
-
}
|
|
1029
|
+
_lastFrame = performance.now()
|
|
1030
|
+
raf(drawFrame)
|
|
1031
|
+
_focused = true
|
|
1022
1032
|
})
|
|
1023
1033
|
}
|
|
1024
1034
|
|
|
1025
1035
|
// start the game loop
|
|
1026
1036
|
instance.emit('init', instance)
|
|
1027
1037
|
|
|
1038
|
+
setfps(settings.fps)
|
|
1039
|
+
|
|
1028
1040
|
_lastFrame = performance.now()
|
|
1029
|
-
|
|
1041
|
+
raf(drawFrame)
|
|
1030
1042
|
}
|
|
1031
1043
|
|
|
1032
1044
|
/**
|
|
@@ -1039,7 +1051,7 @@ export default function litecanvas(settings = {}) {
|
|
|
1039
1051
|
_lastFrame = now
|
|
1040
1052
|
_accumulated += t
|
|
1041
1053
|
|
|
1042
|
-
while (_accumulated
|
|
1054
|
+
while (_accumulated > _stepMs) {
|
|
1043
1055
|
instance.emit('update', _step * _timeScale)
|
|
1044
1056
|
instance.setvar('ELAPSED', instance.ELAPSED + _step * _timeScale)
|
|
1045
1057
|
_accumulated -= _stepMs
|
|
@@ -1062,8 +1074,8 @@ export default function litecanvas(settings = {}) {
|
|
|
1062
1074
|
}
|
|
1063
1075
|
}
|
|
1064
1076
|
|
|
1065
|
-
if (
|
|
1066
|
-
|
|
1077
|
+
if (_focused && _animate) {
|
|
1078
|
+
raf(drawFrame)
|
|
1067
1079
|
}
|
|
1068
1080
|
}
|
|
1069
1081
|
|
|
@@ -1123,7 +1135,7 @@ export default function litecanvas(settings = {}) {
|
|
|
1123
1135
|
instance.emit('resized', _scale)
|
|
1124
1136
|
|
|
1125
1137
|
if (!_animate) {
|
|
1126
|
-
|
|
1138
|
+
raf(drawFrame)
|
|
1127
1139
|
}
|
|
1128
1140
|
}
|
|
1129
1141
|
|
package/types/index.d.ts
CHANGED
|
@@ -580,14 +580,6 @@ declare global {
|
|
|
580
580
|
y2: number,
|
|
581
581
|
r2: number
|
|
582
582
|
): boolean
|
|
583
|
-
/**
|
|
584
|
-
* The scale of the game's delta time (dt).
|
|
585
|
-
* Values higher than 1 increase the speed of time, while values smaller than 1 decrease it.
|
|
586
|
-
* A value of 0 freezes time and is effectively equivalent to pausing.
|
|
587
|
-
*
|
|
588
|
-
* @param {number} value
|
|
589
|
-
*/
|
|
590
|
-
function timescale(value: number): void
|
|
591
583
|
|
|
592
584
|
/** PLUGINS API */
|
|
593
585
|
/**
|
|
@@ -641,4 +633,18 @@ declare global {
|
|
|
641
633
|
* @param {number} height
|
|
642
634
|
*/
|
|
643
635
|
function resize(width: number, height: number): void
|
|
636
|
+
/**
|
|
637
|
+
* The scale of the game's delta time (dt).
|
|
638
|
+
* Values higher than 1 increase the speed of time, while values smaller than 1 decrease it.
|
|
639
|
+
* A value of 0 freezes time and is effectively equivalent to pausing.
|
|
640
|
+
*
|
|
641
|
+
* @param {number} value
|
|
642
|
+
*/
|
|
643
|
+
function timescale(value: number): void
|
|
644
|
+
/**
|
|
645
|
+
* Set the target FPS at runtime.
|
|
646
|
+
*
|
|
647
|
+
* @param {number} fps
|
|
648
|
+
*/
|
|
649
|
+
function setfps(fps: number): void
|
|
644
650
|
}
|
package/types/types.d.ts
CHANGED
|
@@ -564,14 +564,6 @@ type LitecanvasInstance = {
|
|
|
564
564
|
y2: number,
|
|
565
565
|
r2: number
|
|
566
566
|
): boolean
|
|
567
|
-
/**
|
|
568
|
-
* The scale of the game's delta time (dt).
|
|
569
|
-
* Values higher than 1 increase the speed of time, while values smaller than 1 decrease it.
|
|
570
|
-
* A value of 0 freezes time and is effectively equivalent to pausing.
|
|
571
|
-
*
|
|
572
|
-
* @param {number} value
|
|
573
|
-
*/
|
|
574
|
-
timescale(value: number): void
|
|
575
567
|
|
|
576
568
|
/** PLUGINS API */
|
|
577
569
|
/**
|
|
@@ -619,6 +611,20 @@ type LitecanvasInstance = {
|
|
|
619
611
|
* @param {number} height
|
|
620
612
|
*/
|
|
621
613
|
resize(width: number, height: number): void
|
|
614
|
+
/**
|
|
615
|
+
* The scale of the game's delta time (dt).
|
|
616
|
+
* Values higher than 1 increase the speed of time, while values smaller than 1 decrease it.
|
|
617
|
+
* A value of 0 freezes time and is effectively equivalent to pausing.
|
|
618
|
+
*
|
|
619
|
+
* @param {number} value
|
|
620
|
+
*/
|
|
621
|
+
timescale(value: number): void
|
|
622
|
+
/**
|
|
623
|
+
* Set the target FPS at runtime.
|
|
624
|
+
*
|
|
625
|
+
* @param {number} fps
|
|
626
|
+
*/
|
|
627
|
+
setfps(fps: number): void
|
|
622
628
|
}
|
|
623
629
|
|
|
624
630
|
type LitecanvasOptions = {
|