MCPcopy Create free account
hub / github.com/DescentDevelopers/Descent3 / UpdatePlayerCameraPosition

Function UpdatePlayerCameraPosition

Descent3/Player.cpp:1630–1748  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1628// Does sampling of player position plus sets the camera positon
1629
1630void 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;

Callers 1

SetupPlayerCameraFunction · 0.85

Calls 2

fvi_FindIntersectionFunction · 0.85
ObjSetPosFunction · 0.85

Tested by

no test coverage detected