fix: reset interpolator on change
This commit is contained in:
parent
29df4c3dcb
commit
b912fee2e7
|
@ -1,6 +1,6 @@
|
|||
export default class Interpolator {
|
||||
duration = 0;
|
||||
latest;
|
||||
latest = null;
|
||||
location = 0;
|
||||
penultimate;
|
||||
tracking = [];
|
||||
|
@ -94,18 +94,31 @@ const interpolate = (now) => {
|
|||
|
||||
onmessage = async (event) => {
|
||||
interpolator.accept(event.data);
|
||||
if (interpolator.penultimate && 'Tick' === event.data.type) {
|
||||
postMessage({
|
||||
type: 'Tick',
|
||||
payload: {
|
||||
ecs: interpolator.penultimate.payload.ecs,
|
||||
elapsed: last ? (performance.now() - last) / 1000 : 0,
|
||||
frame: interpolator.penultimate.payload.frame,
|
||||
},
|
||||
});
|
||||
if (!handle) {
|
||||
last = performance.now();
|
||||
handle = requestAnimationFrame(interpolate);
|
||||
switch (event.data.type) {
|
||||
case 'EcsChange': {
|
||||
if (handle) {
|
||||
cancelAnimationFrame(handle)
|
||||
handle = null;
|
||||
}
|
||||
interpolator.latest = null;
|
||||
break;
|
||||
}
|
||||
case 'Tick': {
|
||||
if (interpolator.penultimate) {
|
||||
postMessage({
|
||||
type: 'Tick',
|
||||
payload: {
|
||||
ecs: interpolator.penultimate.payload.ecs,
|
||||
elapsed: last ? (performance.now() - last) / 1000 : 0,
|
||||
frame: interpolator.penultimate.payload.frame,
|
||||
},
|
||||
});
|
||||
if (!handle) {
|
||||
last = performance.now();
|
||||
handle = requestAnimationFrame(interpolate);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue
Block a user