Skip to content

Commit b6940cf

Browse files
committed
update engine
1 parent 4c46dc7 commit b6940cf

File tree

2 files changed

+37
-25
lines changed

2 files changed

+37
-25
lines changed

public/litecanvas.js

+34-22
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@
6363
animate: true
6464
};
6565
settings = Object.assign(defaults, settings);
66-
let _initialized = false, _plugins = [], _canvas = settings.canvas || document.createElement("canvas"), _fullscreen = settings.fullscreen, _autoscale = settings.autoscale, _animated = settings.animate, _scale = 1, _ctx, _outline_fix = 0.5, _timeScale = 1, _lastFrameTime, _fixedDeltaTime, _accumulated, _focused = true, _fontFamily = "sans-serif", _fontSize = 32, _rng_seed = Date.now(), _global = settings.global, _events = {
66+
let _initialized = false, _plugins = [], _canvas = settings.canvas || document.createElement("canvas"), _fullscreen = settings.fullscreen, _autoscale = settings.autoscale, _animated = settings.animate, _scale = 1, _ctx, _outline_fix = 0.5, _timeScale = 1, _lastFrameTime, _deltaTime, _accumulated = 0, _rafid, _fontFamily = "sans-serif", _fontSize = 32, _rng_seed = Date.now(), _global = settings.global, _events = {
6767
init: null,
6868
update: null,
6969
draw: null,
@@ -593,11 +593,20 @@
593593
textalign(align, baseline) {
594594
if (true) {
595595
assert(
596-
null == align || "string" === typeof align,
596+
null == align || ["left", "right", "center", "start", "end"].includes(
597+
align
598+
),
597599
"textalign: 1st param must be a string"
598600
);
599601
assert(
600-
null == baseline || "string" === typeof baseline,
602+
null == baseline || [
603+
"top",
604+
"bottom",
605+
"middle",
606+
"hanging",
607+
"alphabetic",
608+
"ideographic"
609+
].includes(baseline),
601610
"textalign: 2nd param must be a string"
602611
);
603612
}
@@ -1015,7 +1024,6 @@
10151024
"setvar: 1st param must be a string"
10161025
);
10171026
if (value == null) {
1018-
console.warn(`setvar: key "${key}" was defined as ${value}`);
10191027
}
10201028
}
10211029
instance[key] = value;
@@ -1063,8 +1071,7 @@
10631071
"setfps: 1st param must be a positive number"
10641072
);
10651073
}
1066-
_fixedDeltaTime = 1 / ~~value;
1067-
_accumulated = 0;
1074+
_deltaTime = 1 / ~~value;
10681075
},
10691076
/**
10701077
* Stops the litecanvas instance and remove all event listeners.
@@ -1074,7 +1081,8 @@
10741081
for (const removeListener of _browserEventListeners) {
10751082
removeListener();
10761083
}
1077-
_focused = _events = false;
1084+
cancelAnimationFrame(_rafid);
1085+
_events = false;
10781086
if (_global) {
10791087
for (const key in instance) {
10801088
delete root[key];
@@ -1231,38 +1239,42 @@
12311239
}
12321240
if (settings.pauseOnBlur) {
12331241
on(root, "blur", () => {
1234-
_focused = false;
1242+
_rafid = cancelAnimationFrame(_rafid);
12351243
});
12361244
on(root, "focus", () => {
1237-
_focused = true;
1238-
raf(drawFrame);
1245+
if (!_rafid) {
1246+
_lastFrameTime = performance.now();
1247+
_rafid = raf(drawFrame);
1248+
}
12391249
});
12401250
}
12411251
instance.setfps(60);
12421252
instance.emit("init", instance);
12431253
_lastFrameTime = performance.now();
1244-
raf(drawFrame);
1254+
_rafid = raf(drawFrame);
12451255
}
12461256
function drawFrame(now) {
1247-
let shouldRender = !_animated, frameTime = (now - _lastFrameTime) / 1e3, frameTimeMax = _fixedDeltaTime * 5;
1248-
_accumulated += frameTime > frameTimeMax ? frameTimeMax : frameTime;
1257+
if (_animated) {
1258+
_rafid = raf(drawFrame);
1259+
}
1260+
let updated = 0, frameTime = (now - _lastFrameTime) / 1e3;
1261+
_accumulated += frameTime;
12491262
_lastFrameTime = now;
1250-
while (_accumulated >= _fixedDeltaTime) {
1251-
instance.emit("update", _fixedDeltaTime * _timeScale);
1263+
if (!_animated) {
1264+
_accumulated = _deltaTime;
1265+
}
1266+
for (; _accumulated >= _deltaTime; _accumulated -= _deltaTime) {
1267+
instance.emit("update", _deltaTime * _timeScale);
12521268
instance.setvar(
12531269
"ELAPSED",
1254-
instance.ELAPSED + _fixedDeltaTime * _timeScale
1270+
instance.ELAPSED + _deltaTime * _timeScale
12551271
);
1256-
_accumulated -= _fixedDeltaTime;
1257-
shouldRender = true;
1272+
updated++;
12581273
}
1259-
if (shouldRender) {
1274+
if (updated) {
12601275
instance.textalign("start", "top");
12611276
instance.emit("draw");
12621277
}
1263-
if (_focused && _animated) {
1264-
raf(drawFrame);
1265-
}
12661278
}
12671279
function setupCanvas() {
12681280
_canvas = "string" === typeof _canvas ? document.querySelector(_canvas) : _canvas;

public/sw.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
const cacheName = "luizbills.litecanvas-editor-v1";
2-
const version = "2.68.0";
2+
const version = "2.69.0";
33

44
const precacheResources = [
55
"/",
@@ -29,7 +29,7 @@ const precacheResources = [
2929

3030
self.addEventListener("install", (event) => {
3131
event.waitUntil(
32-
caches.open(cacheName).then((cache) => cache.addAll(precacheResources)),
32+
caches.open(cacheName).then((cache) => cache.addAll(precacheResources))
3333
);
3434
});
3535

@@ -42,7 +42,7 @@ self.addEventListener("fetch", (event) => {
4242
return cachedResponse;
4343
}
4444
return fetch(event.request);
45-
}),
45+
})
4646
);
4747
});
4848

0 commit comments

Comments
 (0)