diff --git a/common/include/vecmat.h b/common/include/vecmat.h index caec30b1c..8f5555dc8 100644 --- a/common/include/vecmat.h +++ b/common/include/vecmat.h @@ -274,7 +274,7 @@ fixang vm_vec_delta_ang_norm (const vms_vector &v0, const vms_vector &v1, const //computes a matrix from a set of three angles. returns ptr to matrix -vms_matrix &vm_angles_2_matrix (vms_matrix &m, const vms_angvec &a); +void vm_angles_2_matrix (vms_matrix &m, const vms_angvec &a); static inline vms_matrix vm_angles_2_matrix (const vms_angvec &a) __attribute_warn_unused_result; static inline vms_matrix vm_angles_2_matrix (const vms_angvec &a) { diff --git a/common/maths/vecmat.cpp b/common/maths/vecmat.cpp index 1c98c92fe..509979013 100644 --- a/common/maths/vecmat.cpp +++ b/common/maths/vecmat.cpp @@ -426,13 +426,13 @@ static vms_matrix *sincos_2_matrix(vms_matrix *m,fix sinp,fix cosp,fix sinb,fix } //computes a matrix from a set of three angles. returns ptr to matrix -vms_matrix &vm_angles_2_matrix(vms_matrix &m,const vms_angvec &a) +void vm_angles_2_matrix(vms_matrix &m,const vms_angvec &a) { fix sinp,cosp,sinb,cosb,sinh,cosh; fix_sincos(a.p,&sinp,&cosp); fix_sincos(a.b,&sinb,&cosb); fix_sincos(a.h,&sinh,&cosh); - return *sincos_2_matrix(&m,sinp,cosp,sinb,cosb,sinh,cosh); + sincos_2_matrix(&m,sinp,cosp,sinb,cosb,sinh,cosh); } //computes a matrix from a forward vector and an angle diff --git a/similar/editor/medmisc.cpp b/similar/editor/medmisc.cpp index 1cbbc92f6..138e5e7ec 100644 --- a/similar/editor/medmisc.cpp +++ b/similar/editor/medmisc.cpp @@ -167,12 +167,10 @@ int medlisp_scale_segment(void) int medlisp_rotate_segment(void) { - vms_matrix rotmat; - Seg_orientation.p = func_get_param(0); Seg_orientation.b = func_get_param(1); Seg_orientation.h = func_get_param(2); - med_rotate_segment(Cursegp,vm_angles_2_matrix(rotmat,Seg_orientation)); + med_rotate_segment(Cursegp,vm_angles_2_matrix(Seg_orientation)); Update_flags |= UF_WORLD_CHANGED | UF_VIEWPOINT_MOVED; mine_changed = 1; return 1; diff --git a/similar/editor/segment.cpp b/similar/editor/segment.cpp index c09639c26..68cea0ce7 100644 --- a/similar/editor/segment.cpp +++ b/similar/editor/segment.cpp @@ -554,37 +554,31 @@ void med_extract_matrix_from_segment(const vcsegptr_t sp,vms_matrix *rotmat) void update_matrix_based_on_side(vms_matrix &rotmat,int destside) { vms_angvec rotvec; - vms_matrix r1; switch (destside) { case WLEFT: vm_angvec_make(&rotvec,0,0,-16384); - vm_angles_2_matrix(r1,rotvec); - rotmat = vm_matrix_x_matrix(rotmat, r1); + rotmat = vm_matrix_x_matrix(rotmat, vm_angles_2_matrix(rotvec)); break; case WTOP: vm_angvec_make(&rotvec,-16384,0,0); - vm_angles_2_matrix(r1,rotvec); - rotmat = vm_matrix_x_matrix(rotmat, r1); + rotmat = vm_matrix_x_matrix(rotmat, vm_angles_2_matrix(rotvec)); break; case WRIGHT: vm_angvec_make(&rotvec,0,0,16384); - vm_angles_2_matrix(r1,rotvec); - rotmat = vm_matrix_x_matrix(rotmat, r1); + rotmat = vm_matrix_x_matrix(rotmat, vm_angles_2_matrix(rotvec)); break; case WBOTTOM: vm_angvec_make(&rotvec,+16384,-32768,0); // bank was -32768, but I think that was an erroneous compensation - vm_angles_2_matrix(r1,rotvec); - rotmat = vm_matrix_x_matrix(rotmat, r1); + rotmat = vm_matrix_x_matrix(rotmat, vm_angles_2_matrix(rotvec)); break; case WFRONT: vm_angvec_make(&rotvec,0,0,-32768); - vm_angles_2_matrix(r1,rotvec); - rotmat = vm_matrix_x_matrix(rotmat, r1); + rotmat = vm_matrix_x_matrix(rotmat, vm_angles_2_matrix(rotvec)); break; case WBACK: @@ -906,9 +900,7 @@ int med_attach_segment(const vsegptridx_t destseg, const vsegptr_t newseg, int d segment *ocursegp = Cursegp; vms_angvec tang = {0,0,0}; - vms_matrix rotmat; - - vm_angles_2_matrix(rotmat,tang); + const auto &&rotmat = vm_angles_2_matrix(tang); rval = med_attach_segment_rotated(destseg,newseg,destside,newside,rotmat); med_propagate_tmaps_to_segments(ocursegp,Cursegp,0); med_propagate_tmaps_to_back_side(Cursegp, Side_opposite[newside],0); diff --git a/similar/main/automap.cpp b/similar/main/automap.cpp index 92de55831..cbe9bc51f 100644 --- a/similar/main/automap.cpp +++ b/similar/main/automap.cpp @@ -745,8 +745,6 @@ static window_event_result automap_key_command(window *wind,const d_event &event static window_event_result automap_process_input(window *wind,const d_event &event, automap *am) { - vms_matrix tempm; - Controls = am->controls; kconfig_read_controls(event, 1); am->controls = Controls; @@ -784,7 +782,7 @@ static window_event_result automap_process_input(window *wind,const d_event &eve tangles.h = fixdiv( am->controls.heading_time, ROT_SPEED_DIVISOR ); tangles.b = fixdiv( am->controls.bank_time, ROT_SPEED_DIVISOR*2 ); - vm_angles_2_matrix(tempm, tangles); + const auto &&tempm = vm_angles_2_matrix(tangles); am->viewMatrix = vm_matrix_x_matrix(am->viewMatrix,tempm); check_and_fix_matrix(am->viewMatrix); } @@ -826,7 +824,7 @@ static window_event_result automap_process_input(window *wind,const d_event &eve old_vt = am->view_target; tangles1 = am->tangles; - vm_angles_2_matrix(tempm,tangles1); + const auto &&tempm = vm_angles_2_matrix(tangles1); vm_matrix_x_matrix(am->viewMatrix,Objects[Players[Player_num].objnum].orient,tempm); vm_vec_scale_add2( am->view_target, am->viewMatrix.uvec, am->controls.vertical_thrust_time*SLIDE_SPEED ); vm_vec_scale_add2( am->view_target, am->viewMatrix.rvec, am->controls.sideways_thrust_time*SLIDE_SPEED ); @@ -834,7 +832,7 @@ static window_event_result automap_process_input(window *wind,const d_event &eve am->view_target = old_vt; } - vm_angles_2_matrix(tempm,am->tangles); + const auto &&tempm = vm_angles_2_matrix(am->tangles); vm_matrix_x_matrix(am->viewMatrix,Objects[Players[Player_num].objnum].orient,tempm); clamp_fix_lh(am->viewDist, ZOOM_MIN_VALUE, ZOOM_MAX_VALUE); diff --git a/similar/main/controls.cpp b/similar/main/controls.cpp index fa65099f3..425e2b407 100644 --- a/similar/main/controls.cpp +++ b/similar/main/controls.cpp @@ -70,7 +70,6 @@ void read_flying_controls(const vobjptr_t obj) if (Guided_missile[Player_num] && Guided_missile[Player_num]->signature==Guided_missile_sig[Player_num]) { vms_angvec rotangs; - vms_matrix rotmat; fix speed; //this is a horrible hack. guided missile stuff should not be @@ -82,7 +81,7 @@ void read_flying_controls(const vobjptr_t obj) rotangs.b = Controls.bank_time / 2 + Seismic_tremor_magnitude/16; rotangs.h = Controls.heading_time / 2 + Seismic_tremor_magnitude/64; - vm_angles_2_matrix(rotmat,rotangs); + const auto &&rotmat = vm_angles_2_matrix(rotangs); Guided_missile[Player_num]->orient = vm_matrix_x_matrix(Guided_missile[Player_num]->orient, rotmat); speed = Weapon_info[Guided_missile[Player_num]->id].speed[Difficulty_level]; diff --git a/similar/main/endlevel.cpp b/similar/main/endlevel.cpp index 980b9f99a..02acc3dc0 100644 --- a/similar/main/endlevel.cpp +++ b/similar/main/endlevel.cpp @@ -1105,10 +1105,9 @@ static void endlevel_render_mine(fix eye_offset) } if (Endlevel_sequence == EL_LOOKBACK) { - vms_matrix headm; vms_angvec angles = {0,0,0x7fff}; - vm_angles_2_matrix(headm,angles); + const auto &&headm = vm_angles_2_matrix(angles); const auto viewm = vm_matrix_x_matrix(Viewer->orient,headm); g3_set_view_matrix(Viewer_eye,viewm,Render_zoom); } @@ -1294,7 +1293,6 @@ int _do_slew_movement(const vobjptr_t obj, int check_keys ) { int moved = 0; vms_vector svel; //scaled velocity (per this frame) - vms_matrix rotmat; vms_angvec rotang; if (keyd_pressed[KEY_PAD5]) @@ -1321,7 +1319,7 @@ int _do_slew_movement(const vobjptr_t obj, int check_keys ) moved = rotang.pitch | rotang.bank | rotang.head; - vm_angles_2_matrix(rotmat,rotang); + const auto &&rotmat = vm_angles_2_matrix(rotang); const auto new_pm = vm_transposed_matrix(obj->orient = vm_matrix_x_matrix(obj->orient,rotmat)); //make those columns rows @@ -1491,7 +1489,6 @@ try_again: case 5: //earth pos case 7: { //station pos - vms_matrix tm; vms_angvec ta; int pitch,head; @@ -1501,7 +1498,7 @@ try_again: ta.p = -i2f(pitch)/360; ta.b = 0; - vm_angles_2_matrix(tm,ta); + const auto &&tm = vm_angles_2_matrix(ta); if (var==5) satellite_pos = tm.fvec; @@ -1552,9 +1549,7 @@ try_again: //compute orientation of surface { - vms_matrix exit_orient; - - vm_angles_2_matrix(exit_orient,exit_angles); + auto &&exit_orient = vm_angles_2_matrix(exit_angles); vm_transpose_matrix(exit_orient); vm_matrix_x_matrix(surface_orient,mine_exit_orient,exit_orient); diff --git a/similar/main/morph.cpp b/similar/main/morph.cpp index 2f8f1ab06..f5fcea960 100644 --- a/similar/main/morph.cpp +++ b/similar/main/morph.cpp @@ -399,11 +399,7 @@ static void draw_model(polygon_model_points &robot_points, polymodel *pm, int su g3_draw_morphing_model(&pm->model_data[pm->submodel_ptrs[submodel_num]],&texture_list[0],anim_angles,light,&md->morph_vecs[md->submodel_startpoints[submodel_num]], robot_points); } else { - - vms_matrix orient; - - vm_angles_2_matrix(orient,anim_angles[mn]); - + const auto &&orient = vm_angles_2_matrix(anim_angles[mn]); g3_start_instance_matrix(pm->submodel_offsets[mn],&orient); draw_model(robot_points,pm,mn,anim_angles,light,md); g3_done_instance(); diff --git a/similar/main/object.cpp b/similar/main/object.cpp index 20f3f27f6..146d8dd72 100644 --- a/similar/main/object.cpp +++ b/similar/main/object.cpp @@ -1596,15 +1596,13 @@ void obj_relink_all(void) static void spin_object(const vobjptr_t obj) { vms_angvec rotangs; - vms_matrix rotmat; - Assert(obj->movement_type == MT_SPINNING); rotangs.p = fixmul(obj->mtype.spin_rate.x,FrameTime); rotangs.h = fixmul(obj->mtype.spin_rate.y,FrameTime); rotangs.b = fixmul(obj->mtype.spin_rate.z,FrameTime); - vm_angles_2_matrix(rotmat,rotangs); + const auto &&rotmat = vm_angles_2_matrix(rotangs); obj->orient = vm_matrix_x_matrix(obj->orient,rotmat); check_and_fix_matrix(obj->orient); } diff --git a/similar/main/physics.cpp b/similar/main/physics.cpp index 63c2c60ee..906bf9d46 100644 --- a/similar/main/physics.cpp +++ b/similar/main/physics.cpp @@ -118,15 +118,13 @@ static void do_physics_align_object(const vobjptr_t obj) delta_ang += obj->mtype.phys_info.turnroll; if (abs(delta_ang) > DAMP_ANG) { - vms_matrix rotmat; - roll_ang = fixmul(FrameTime,ROLL_RATE); if (abs(delta_ang) < roll_ang) roll_ang = delta_ang; else if (delta_ang<0) roll_ang = -roll_ang; tangles.p = tangles.h = 0; tangles.b = roll_ang; - vm_angles_2_matrix(rotmat,tangles); + const auto &&rotmat = vm_angles_2_matrix(tangles); obj->orient = vm_matrix_x_matrix(obj->orient,rotmat); } else floor_levelling=0; @@ -184,7 +182,6 @@ int Dont_move_ai_objects=0; static void do_physics_sim_rot(const vobjptr_t obj) { vms_angvec tangles; - vms_matrix rotmat; //fix rotdrag_scale; physics_info *pi; @@ -246,7 +243,7 @@ static void do_physics_sim_rot(const vobjptr_t obj) if (obj->mtype.phys_info.turnroll) { tangles.p = tangles.h = 0; tangles.b = -obj->mtype.phys_info.turnroll; - vm_angles_2_matrix(rotmat,tangles); + const auto &&rotmat = vm_angles_2_matrix(tangles); obj->orient = vm_matrix_x_matrix(obj->orient,rotmat); } @@ -254,7 +251,7 @@ static void do_physics_sim_rot(const vobjptr_t obj) tangles.h = fixmul(obj->mtype.phys_info.rotvel.y,FrameTime); tangles.b = fixmul(obj->mtype.phys_info.rotvel.z,FrameTime); - vm_angles_2_matrix(rotmat,tangles); + const auto &&rotmat = vm_angles_2_matrix(tangles); obj->orient = vm_matrix_x_matrix(obj->orient,rotmat); if (obj->mtype.phys_info.flags & PF_TURNROLL) @@ -264,7 +261,7 @@ static void do_physics_sim_rot(const vobjptr_t obj) if (obj->mtype.phys_info.turnroll) { tangles.p = tangles.h = 0; tangles.b = obj->mtype.phys_info.turnroll; - vm_angles_2_matrix(rotmat,tangles); + const auto &&rotmat = vm_angles_2_matrix(tangles); obj->orient = vm_matrix_x_matrix(obj->orient,rotmat); } diff --git a/similar/main/polyobj.cpp b/similar/main/polyobj.cpp index d3046e974..2124b04df 100644 --- a/similar/main/polyobj.cpp +++ b/similar/main/polyobj.cpp @@ -695,21 +695,20 @@ void init_polygon_models() void draw_model_picture(uint_fast32_t mn,vms_angvec *orient_angles) { vms_vector temp_pos=ZERO_VECTOR; - vms_matrix temp_orient = IDENTITY_MATRIX; g3s_lrgb lrgb = { f1_0, f1_0, f1_0 }; Assert(mnsegnum; if (Rear_view && (Viewer==ConsoleObject)) { - vms_matrix headm; vms_angvec Player_head_angles; Player_head_angles.p = Player_head_angles.b = 0; Player_head_angles.h = 0x7fff; - vm_angles_2_matrix(headm,Player_head_angles); + const auto &&headm = vm_angles_2_matrix(Player_head_angles); const auto viewm = vm_matrix_x_matrix(Viewer->orient,headm); g3_set_view_matrix(Viewer_eye,viewm,Render_zoom); } else { diff --git a/similar/main/slew.cpp b/similar/main/slew.cpp index 416d04edc..4a3dab081 100644 --- a/similar/main/slew.cpp +++ b/similar/main/slew.cpp @@ -88,7 +88,6 @@ static int do_slew_movement(const vobjptridx_t obj, int check_keys ) { int moved = 0; vms_vector svel; //scaled velocity (per this frame) - vms_matrix rotmat; vms_angvec rotang; if (!slew_obj || slew_obj->control_type!=CT_SLEW) return 0; @@ -129,7 +128,7 @@ static int do_slew_movement(const vobjptridx_t obj, int check_keys ) moved = rotang.p | rotang.b | rotang.h; - vm_angles_2_matrix(rotmat,rotang); + const auto &&rotmat = vm_angles_2_matrix(rotang); const auto new_pm = vm_transposed_matrix(obj->orient = vm_matrix_x_matrix(obj->orient,rotmat)); //make those columns rows moved |= obj->mtype.phys_info.velocity.x | obj->mtype.phys_info.velocity.y | obj->mtype.phys_info.velocity.z;