diff --git a/common/3d/instance.cpp b/common/3d/instance.cpp index ee539a5ec..4edd8ed95 100644 --- a/common/3d/instance.cpp +++ b/common/3d/instance.cpp @@ -54,17 +54,12 @@ void g3_start_instance_matrix(const vms_vector &pos,const vms_matrix *orient) //if angles==NULL, don't modify matrix. This will be like doing an offset void g3_start_instance_angles(const vms_vector &pos,const vms_angvec *angles) { - vms_matrix tm; - if (angles==NULL) { g3_start_instance_matrix(pos,NULL); return; } - - vm_angles_2_matrix(tm,*angles); - + const auto tm = vm_angles_2_matrix(*angles); g3_start_instance_matrix(pos,&tm); - } diff --git a/common/include/vecmat.h b/common/include/vecmat.h index 5e4ce5991..bfcd5fb9e 100644 --- a/common/include/vecmat.h +++ b/common/include/vecmat.h @@ -279,6 +279,12 @@ 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); +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) +{ + vms_matrix m; + return vm_angles_2_matrix(m, a), m; +} //computes a matrix from a forward vector and an angle diff --git a/similar/editor/eobject.cpp b/similar/editor/eobject.cpp index 0033445f2..52a16075a 100644 --- a/similar/editor/eobject.cpp +++ b/similar/editor/eobject.cpp @@ -672,8 +672,6 @@ int ObjectMoveDown(void) static int rotate_object(const vobjptridx_t obj, int p, int b, int h) { vms_angvec ang; - vms_matrix rotmat; - // vm_extract_angles_matrix( &ang,&obj->orient); // ang.p += p; @@ -684,7 +682,7 @@ static int rotate_object(const vobjptridx_t obj, int p, int b, int h) ang.b = b; ang.h = h; - vm_angles_2_matrix(rotmat, ang); + const auto rotmat = vm_angles_2_matrix(ang); obj->orient = vm_matrix_x_matrix(obj->orient, rotmat); // vm_angles_2_matrix(&obj->orient, &ang); diff --git a/similar/editor/group.cpp b/similar/editor/group.cpp index 3eee39357..035d1ac0a 100644 --- a/similar/editor/group.cpp +++ b/similar/editor/group.cpp @@ -816,13 +816,11 @@ static segnum_t place_new_segment_in_world(void) static int AttachSegmentNewAng(const vms_angvec &pbh) { int newseg; - vms_matrix orient_matrix; - GroupList[current_group].segments.clear(); newseg = place_new_segment_in_world(); GroupList[current_group].segments.emplace_back(newseg); - if (!med_move_group(1, Cursegp, Curside, &Segments[newseg], AttachSide, vm_angles_2_matrix(orient_matrix,pbh),0)) { + if (!med_move_group(1, Cursegp, Curside, &Segments[newseg], AttachSide, vm_angles_2_matrix(pbh),0)) { autosave_mine(mine_filename); med_propagate_tmaps_to_segments(Cursegp,&Segments[newseg],0); @@ -888,7 +886,7 @@ void add_segment_to_group(int segment_num, int group_num) int rotate_segment_new(const vms_angvec &pbh) { int newseg,baseseg,newseg_side; - vms_matrix tm1,tm2; + vms_matrix tm1; group::segment_array_type_t selected_segs_save; int child_save; int current_group_save; @@ -929,7 +927,7 @@ int rotate_segment_new(const vms_angvec &pbh) med_extract_matrix_from_segment(&Segments[newseg],&tm1); tm1 = vmd_identity_matrix; - vm_angles_2_matrix(tm2,pbh); + const auto tm2 = vm_angles_2_matrix(pbh); const auto orient_matrix = vm_matrix_x_matrix(tm1,tm2); Segments[baseseg].children[baseseg_side] = segment_none; diff --git a/similar/editor/medmisc.cpp b/similar/editor/medmisc.cpp index 8ff7785e4..674ca65ea 100644 --- a/similar/editor/medmisc.cpp +++ b/similar/editor/medmisc.cpp @@ -151,14 +151,13 @@ int medlisp_delete_segment(void) int medlisp_scale_segment(void) { - vms_matrix rotmat; vms_vector scale; scale.x = fl2f((float) func_get_param(0)); scale.y = fl2f((float) func_get_param(1)); scale.z = fl2f((float) func_get_param(2)); med_create_new_segment(scale); - 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; mine_changed = 1; diff --git a/similar/main/robot.cpp b/similar/main/robot.cpp index 9cebeee25..228e45469 100644 --- a/similar/main/robot.cpp +++ b/similar/main/robot.cpp @@ -100,7 +100,6 @@ void calc_gun_point(vms_vector &gun_point,const vcobjptr_t obj,int gun_num) polymodel *pm; robot_info *r; vms_vector pnt; - vms_matrix m; int mn; //submodel number Assert(obj->render_type==RT_POLYOBJ || obj->render_type==RT_MORPH); @@ -121,8 +120,7 @@ void calc_gun_point(vms_vector &gun_point,const vcobjptr_t obj,int gun_num) while (mn != 0) { vms_vector tpnt; - vm_angles_2_matrix(m,obj->rtype.pobj_info.anim_angles[mn]); - vm_transpose_matrix(m); + const auto m = vm_transposed_matrix(vm_angles_2_matrix(obj->rtype.pobj_info.anim_angles[mn])); vm_vec_rotate(tpnt,pnt,m); vm_vec_add(pnt,tpnt,pm->submodel_offsets[mn]); @@ -132,7 +130,7 @@ void calc_gun_point(vms_vector &gun_point,const vcobjptr_t obj,int gun_num) //now instance for the entire object - m = vm_transposed_matrix(obj->orient); + const auto m = vm_transposed_matrix(obj->orient); vm_vec_rotate(gun_point,pnt,m); vm_vec_add2(gun_point,obj->pos);