()
| 484 | } |
| 485 | |
| 486 | create_mesh() { |
| 487 | /*console.log("previous values: ") |
| 488 | console.log(this.previous_values) |
| 489 | console.log("attributes changed: ") |
| 490 | console.log(this.attributes_changed)*/ |
| 491 | this.meshes = []; |
| 492 | let sequence_index_original; |
| 493 | let sequence_index_previous_original; |
| 494 | |
| 495 | let sequence_index = sequence_index_original = this.model.get("sequence_index"); |
| 496 | let sequence_index_previous = sequence_index_previous_original = sequence_index; |
| 497 | |
| 498 | if (typeof this.previous_values.sequence_index !== "undefined") { |
| 499 | sequence_index_previous = sequence_index_previous_original = this.previous_values.sequence_index; |
| 500 | } |
| 501 | |
| 502 | let time_offset; |
| 503 | let time_delta; |
| 504 | |
| 505 | if (sequence_index >= sequence_index_previous) { |
| 506 | time_offset = sequence_index_previous - Math.floor(sequence_index_previous); |
| 507 | time_delta = sequence_index - sequence_index_previous; |
| 508 | sequence_index = Math.ceil(sequence_index); |
| 509 | sequence_index_previous = Math.floor(sequence_index_previous); |
| 510 | // if we are at integer sequence frame, we can simply interpolate |
| 511 | if ((sequence_index_previous !== sequence_index_previous_original) || (sequence_index !== sequence_index_original)) { |
| 512 | // but when we are not, we should interpolate from the nearest sequence frame to get a proper animation |
| 513 | if ((sequence_index - sequence_index_previous) > 1) { |
| 514 | sequence_index_previous = sequence_index - 1; |
| 515 | time_delta = sequence_index_original - sequence_index_previous; |
| 516 | time_offset = 0; |
| 517 | } |
| 518 | } |
| 519 | } else { |
| 520 | time_offset = Math.ceil(sequence_index_previous) - sequence_index_previous; |
| 521 | time_delta = sequence_index_previous - sequence_index; |
| 522 | sequence_index = Math.floor(sequence_index); |
| 523 | sequence_index_previous = Math.ceil(sequence_index_previous); |
| 524 | if ((sequence_index_previous !== sequence_index_previous_original) || (sequence_index !== sequence_index_original)) { |
| 525 | if ((sequence_index_previous - sequence_index) > 1) { |
| 526 | sequence_index_previous = sequence_index + 1; |
| 527 | time_offset = 0; |
| 528 | time_delta = sequence_index_previous - sequence_index_original; |
| 529 | } |
| 530 | } |
| 531 | } |
| 532 | |
| 533 | if (time_delta > 1) { // we're going over a 'keyframe' border |
| 534 | time_delta = time_delta % 1; |
| 535 | |
| 536 | if (time_delta === 0) { |
| 537 | // special case |
| 538 | time_delta = 1.; |
| 539 | } |
| 540 | } |
| 541 | |
| 542 | if (time_delta === 0) { |
| 543 | // occurs when we don't change keyframes, but just a property |
no test coverage detected