(ref_time)
| 393 | } |
| 394 | |
| 395 | getFrame(ref_time) { |
| 396 | let index = this.getIndex(ref_time); |
| 397 | if (index < 0 || index >= this.frames.length) { |
| 398 | return null; |
| 399 | } |
| 400 | let frame = new Float32Array(this.frames[index]); |
| 401 | // we floored the index, but might need to interpolate subframes |
| 402 | if (index + 1 < this.frames.length) { |
| 403 | const diff = ref_time - this.getTime(index); |
| 404 | const diff_next = this.getTime(index + 1) - ref_time; |
| 405 | let next_frame = this.frames[index + 1]; |
| 406 | let s = diff_next / (diff + diff_next); |
| 407 | frame = this.interpolate_frame(frame, next_frame, s); |
| 408 | } |
| 409 | return frame; |
| 410 | } |
| 411 | |
| 412 | update(change, ref_time) { |
| 413 | let f = this.getFrame(ref_time); |
no test coverage detected