Add vm_extract_angles_matrix that returns result

This commit is contained in:
Kp 2014-11-04 01:32:43 +00:00
parent df6b4bd783
commit e2741ce899
2 changed files with 15 additions and 13 deletions

View file

@ -343,6 +343,12 @@ static inline vms_matrix vm_matrix_x_matrix(const vms_matrix &src0, const vms_ma
//extract angles from a matrix
void vm_extract_angles_matrix (vms_angvec &a, const vms_matrix &m);
static inline vms_angvec vm_extract_angles_matrix (const vms_matrix &m) __attribute_warn_unused_result;
static inline vms_angvec vm_extract_angles_matrix (const vms_matrix &m)
{
vms_angvec a;
return vm_extract_angles_matrix(a, m), a;
}
//extract heading and pitch from a vector, assuming bank==0

View file

@ -436,8 +436,10 @@ void start_endlevel_sequence()
}
vms_angvec player_angles,player_dest_angles;
vms_angvec camera_desired_angles,camera_cur_angles;
static vms_angvec player_angles,player_dest_angles;
#ifdef SLEW_ON
static vms_angvec camera_desired_angles,camera_cur_angles;
#endif
#define CHASE_TURN_RATE (0x4000/4) //max turn per second
@ -717,8 +719,6 @@ void do_endlevel_frame()
}
if (endlevel_camera->segnum == exit_segnum) {
vms_angvec cam_angles,exit_seg_angles;
Endlevel_sequence = EL_OUTSIDE;
timer = i2f(2);
@ -726,8 +726,8 @@ void do_endlevel_frame()
vm_vec_negate(endlevel_camera->orient.fvec);
vm_vec_negate(endlevel_camera->orient.rvec);
vm_extract_angles_matrix(cam_angles,endlevel_camera->orient);
vm_extract_angles_matrix(exit_seg_angles,mine_exit_orient);
const auto cam_angles = vm_extract_angles_matrix(endlevel_camera->orient);
const auto exit_seg_angles = vm_extract_angles_matrix(mine_exit_orient);
bank_rate = (-exit_seg_angles.b - cam_angles.b)/2;
ConsoleObject->control_type = endlevel_camera->control_type = CT_NONE;
@ -741,16 +741,12 @@ void do_endlevel_frame()
}
case EL_OUTSIDE: {
#ifndef SLEW_ON
vms_angvec cam_angles;
#endif
vm_vec_scale_add2(ConsoleObject->pos,ConsoleObject->orient.fvec,fixmul(FrameTime,cur_fly_speed));
#ifndef SLEW_ON
vm_vec_scale_add2(endlevel_camera->pos,endlevel_camera->orient.fvec,fixmul(FrameTime,-2*cur_fly_speed));
vm_vec_scale_add2(endlevel_camera->pos,endlevel_camera->orient.uvec,fixmul(FrameTime,-cur_fly_speed/10));
vm_extract_angles_matrix(cam_angles,endlevel_camera->orient);
auto cam_angles = vm_extract_angles_matrix(endlevel_camera->orient);
cam_angles.b += fixmul(bank_rate,FrameTime);
vm_angles_2_matrix(endlevel_camera->orient,cam_angles);
#endif
@ -1196,7 +1192,6 @@ void do_endlevel_flythrough(flythrough_data *flydata)
vms_vector nextcenter;
fix step_size,seg_time;
short entry_side,exit_side = -1;//what sides we entry and leave through
vms_angvec dest_angles; //where we want to be pointing
int up_side=0;
entry_side=0;
@ -1267,7 +1262,8 @@ void do_endlevel_flythrough(flythrough_data *flydata)
vm_vec_sub(flydata->headvec,nextcenter,curcenter);
const auto dest_orient = vm_vector_2_matrix(flydata->headvec,&pseg->sides[up_side].normals[0],nullptr);
vm_extract_angles_matrix(dest_angles,dest_orient);
//where we want to be pointing
const auto dest_angles = vm_extract_angles_matrix(dest_orient);
if (flydata->first_time)
vm_extract_angles_matrix(flydata->angles,obj->orient);