| 1628 | // Does sampling of player position plus sets the camera positon |
| 1629 | |
| 1630 | void UpdatePlayerCameraPosition() { |
| 1631 | object *playerobj = &Objects[Players[Player_num].objnum]; |
| 1632 | vector dest_pos; |
| 1633 | matrix dest_mat; |
| 1634 | int dest_room; |
| 1635 | int total_increments = 0; |
| 1636 | |
| 1637 | // Increment our timers |
| 1638 | Player_camera_last_sample_time += Frametime; |
| 1639 | Player_camera_last_follow_time += Frametime; |
| 1640 | |
| 1641 | ASSERT(Player_camera_last_sample_time >= 0); |
| 1642 | ASSERT(Player_camera_last_follow_time >= 0); |
| 1643 | |
| 1644 | while (Player_camera_last_sample_time >= CAMERA_SAMPLE_INCREMENT) { |
| 1645 | Player_camera_last_sample_time -= CAMERA_SAMPLE_INCREMENT; |
| 1646 | total_increments++; |
| 1647 | } |
| 1648 | |
| 1649 | if (total_increments > 0) { |
| 1650 | vector delta_vec = playerobj->pos - Camera_sample_vectors[Camera_sample_index]; |
| 1651 | |
| 1652 | vector delta_r = playerobj->orient.rvec - Camera_sample_matrix[Camera_sample_index].rvec; |
| 1653 | vector delta_u = playerobj->orient.uvec - Camera_sample_matrix[Camera_sample_index].uvec; |
| 1654 | vector delta_f = playerobj->orient.fvec - Camera_sample_matrix[Camera_sample_index].fvec; |
| 1655 | |
| 1656 | delta_vec /= total_increments; |
| 1657 | delta_r /= total_increments; |
| 1658 | delta_u /= total_increments; |
| 1659 | delta_f /= total_increments; |
| 1660 | |
| 1661 | vector current_pos = Camera_sample_vectors[Camera_sample_index]; |
| 1662 | vector current_r = Camera_sample_matrix[Camera_sample_index].rvec; |
| 1663 | vector current_u = Camera_sample_matrix[Camera_sample_index].uvec; |
| 1664 | vector current_f = Camera_sample_matrix[Camera_sample_index].fvec; |
| 1665 | |
| 1666 | int current_room = Camera_sample_rooms[Camera_sample_index]; |
| 1667 | |
| 1668 | for (int i = 0; i < total_increments; i++) { |
| 1669 | Camera_sample_vectors[Camera_sample_index] = current_pos; |
| 1670 | |
| 1671 | if (i < (total_increments / 2)) |
| 1672 | Camera_sample_rooms[Camera_sample_index] = current_room; |
| 1673 | else |
| 1674 | Camera_sample_rooms[Camera_sample_index] = playerobj->roomnum; |
| 1675 | |
| 1676 | Camera_sample_matrix[Camera_sample_index].rvec = current_r; |
| 1677 | Camera_sample_matrix[Camera_sample_index].uvec = current_u; |
| 1678 | Camera_sample_matrix[Camera_sample_index].fvec = current_f; |
| 1679 | |
| 1680 | Camera_sample_index++; |
| 1681 | |
| 1682 | if (Camera_sample_index == MAX_CAMERA_SAMPLES) |
| 1683 | Camera_sample_index = 0; |
| 1684 | |
| 1685 | current_pos += delta_vec; |
| 1686 | current_r += delta_r; |
| 1687 | current_u += delta_u; |
no test coverage detected