From e8645b20625022451132d1f94596e1f8dc841083 Mon Sep 17 00:00:00 2001 From: Kp Date: Mon, 12 Mar 2018 03:43:47 +0000 Subject: [PATCH] Pass vertex factory to compute_center_point_on_side --- common/main/gameseg.h | 6 +++--- similar/editor/curves.cpp | 4 ++-- similar/editor/group.cpp | 10 +++++----- similar/editor/med.cpp | 4 ++-- similar/editor/segment.cpp | 8 ++++---- similar/main/ai.cpp | 2 +- similar/main/aipath.cpp | 4 ++-- similar/main/collide.cpp | 2 +- similar/main/endlevel.cpp | 10 +++++----- similar/main/fireball.cpp | 2 +- similar/main/game.cpp | 2 +- similar/main/gameseg.cpp | 8 ++++---- similar/main/gameseq.cpp | 2 +- similar/main/switch.cpp | 6 +++--- similar/main/wall.cpp | 12 ++++++------ 15 files changed, 41 insertions(+), 41 deletions(-) diff --git a/common/main/gameseg.h b/common/main/gameseg.h index 53a672fac..ef4fc088d 100644 --- a/common/main/gameseg.h +++ b/common/main/gameseg.h @@ -59,11 +59,11 @@ using vertex_vertnum_array_list = array; #ifdef dsx namespace dsx { extern int Doing_lighting_hack_flag; -void compute_center_point_on_side(vms_vector &vp, const segment &sp, unsigned side); -static inline vms_vector compute_center_point_on_side(const segment &sp, const unsigned side) +void compute_center_point_on_side(fvcvertptr &vcvertptr, vms_vector &vp, const segment &sp, unsigned side); +static inline vms_vector compute_center_point_on_side(fvcvertptr &vcvertptr, const segment &sp, const unsigned side) { vms_vector v; - return compute_center_point_on_side(v, sp, side), v; + return compute_center_point_on_side(vcvertptr, v, sp, side), v; } void compute_segment_center(fvcvertptr &vcvertptr, vms_vector &vp, const segment &sp); static inline vms_vector compute_segment_center(fvcvertptr &vcvertptr, const segment &sp) diff --git a/similar/editor/curves.cpp b/similar/editor/curves.cpp index 500c723e0..4093c635f 100644 --- a/similar/editor/curves.cpp +++ b/similar/editor/curves.cpp @@ -142,7 +142,7 @@ int generate_curve( fix r1scale, fix r4scale ) { fixang rangle, uangle; const vcsegptr_t cursegp = Cursegp; - compute_center_point_on_side(p1, cursegp, Curside); + compute_center_point_on_side(vcvertptr, p1, cursegp, Curside); switch( Curside ) { case WLEFT: @@ -169,7 +169,7 @@ int generate_curve( fix r1scale, fix r4scale ) { } const vcsegptr_t markedsegp = Markedsegp; - compute_center_point_on_side(p4, markedsegp, Markedside); + compute_center_point_on_side(vcvertptr, p4, markedsegp, Markedside); switch( Markedside ) { case WLEFT: diff --git a/similar/editor/group.cpp b/similar/editor/group.cpp index 12ccb0a7b..929b74b8a 100644 --- a/similar/editor/group.cpp +++ b/similar/editor/group.cpp @@ -366,7 +366,7 @@ static inline vms_matrix med_create_group_rotation_matrix(int delta_flag, const static void med_rotate_group(const vms_matrix &rotmat, group::segment_array_type_t &group_seglist, const vcsegptr_t first_seg, int first_side) { array vertex_list; - const auto rotate_center = compute_center_point_on_side(first_seg, first_side); + const auto &&rotate_center = compute_center_point_on_side(vcvertptr, first_seg, first_side); // Create list of points to rotate. vertex_list = {}; @@ -600,7 +600,7 @@ static int med_copy_group(int delta_flag, const vmsegptridx_t base_seg, int base // Now do the copy // First, xlate all vertices so center of group_seg:group_side is at origin - const auto srcv = compute_center_point_on_side(group_seg,group_side); + const auto &&srcv = compute_center_point_on_side(vcvertptr, group_seg, group_side); range_for (auto &&v, vmvertptridx) if (in_vertex_list[v]) vm_vec_sub2(*v, srcv); @@ -617,7 +617,7 @@ static int med_copy_group(int delta_flag, const vmsegptridx_t base_seg, int base med_rotate_group(rotmat, GroupList[new_current_group].segments, group_seg, group_side); // Now xlate all vertices so group_seg:group_side shares center point with base_seg:base_side - const auto destv = compute_center_point_on_side(base_seg,base_side); + const auto &&destv = compute_center_point_on_side(vcvertptr, base_seg, base_side); range_for (auto &&v, vmvertptridx) if (in_vertex_list[v]) vm_vec_add2(*v, destv); @@ -741,7 +741,7 @@ static int med_move_group(int delta_flag, const vmsegptridx_t base_seg, int base // Now do the move // First, xlate all vertices so center of group_seg:group_side is at origin - const auto srcv = compute_center_point_on_side(group_seg,group_side); + const auto &&srcv = compute_center_point_on_side(vcvertptr, group_seg, group_side); range_for (auto &&v, vmvertptridx) if (in_vertex_list[v]) vm_vec_sub2(*v, srcv); @@ -758,7 +758,7 @@ static int med_move_group(int delta_flag, const vmsegptridx_t base_seg, int base med_rotate_group(rotmat, GroupList[current_group].segments, group_seg, group_side); // Now xlate all vertices so group_seg:group_side shares center point with base_seg:base_side - const auto destv = compute_center_point_on_side(base_seg,base_side); + const auto &&destv = compute_center_point_on_side(vcvertptr, base_seg, base_side); range_for (auto &&v, vmvertptridx) if (in_vertex_list[v]) vm_vec_add2(*v, destv); diff --git a/similar/editor/med.cpp b/similar/editor/med.cpp index d280bf146..e4f3afa20 100644 --- a/similar/editor/med.cpp +++ b/similar/editor/med.cpp @@ -559,7 +559,7 @@ static void move_player_2_segment_and_rotate(const vmsegptridx_t seg, const unsi static int edgenum=0; compute_segment_center(vcvertptr, ConsoleObject->pos,seg); - auto vp = compute_center_point_on_side(seg,side); + auto vp = compute_center_point_on_side(vcvertptr, seg, side); vm_vec_sub2(vp,ConsoleObject->pos); auto &sv = Side_to_verts[Curside]; @@ -590,7 +590,7 @@ int SetPlayerFromCursegMinusOne() static int edgenum=0; const auto view_vec = vm_vec_negated(Cursegp->sides[Curside].normals[0]); - const auto side_center = compute_center_point_on_side(Cursegp,Curside); + const auto &&side_center = compute_center_point_on_side(vcvertptr, Cursegp, Curside); const auto view_vec2 = vm_vec_copy_scale(view_vec,view_dist); vm_vec_sub(ConsoleObject->pos,side_center,view_vec2); diff --git a/similar/editor/segment.cpp b/similar/editor/segment.cpp index af45ca281..b42f2eff6 100644 --- a/similar/editor/segment.cpp +++ b/similar/editor/segment.cpp @@ -829,7 +829,7 @@ static int med_attach_segment_rotated(const vmsegptridx_t destseg, const vmsegpt vm_transpose_matrix(rotmat2); // added 12:33 pm, 10/01/93 // Compute and rotate the center point of the attaching face. - const auto vc0 = compute_center_point_on_side(newseg,newside); + const auto &&vc0 = compute_center_point_on_side(vcvertptr, newseg, newside); const auto vr = vm_vec_rotate(vc0,rotmat2); // Now rotate the free vertices in the segment @@ -838,7 +838,7 @@ static int med_attach_segment_rotated(const vmsegptridx_t destseg, const vmsegpt vm_vec_rotate(tvs[v], vcvertptr(newseg->verts[v + 4]), rotmat2); // Now translate the new segment so that the center point of the attaching faces are the same. - const auto vc1 = compute_center_point_on_side(destseg,destside); + const auto &&vc1 = compute_center_point_on_side(vcvertptr, destseg, destside); const auto xlate_vec = vm_vec_sub(vc1,vr); // Create and add the 4 new vertices. @@ -1649,7 +1649,7 @@ int med_find_closest_threshold_segment_side(const vmsegptridx_t sp, int side, im if (IS_CHILD(sp->children[side])) return 0; - const auto vsc = compute_center_point_on_side(sp, side); + const auto &&vsc = compute_center_point_on_side(vcvertptr, sp, side); closest_seg_dist = JOINT_THRESHOLD; @@ -1659,7 +1659,7 @@ int med_find_closest_threshold_segment_side(const vmsegptridx_t sp, int side, im if (segp != sp) for (s=0;schildren[s])) { - const auto vtc = compute_center_point_on_side(segp, s); + const auto &&vtc = compute_center_point_on_side(vcvertptr, segp, s); current_dist = vm_vec_dist( vsc, vtc ); if (current_dist < closest_seg_dist) { adj_sp = segp; diff --git a/similar/main/ai.cpp b/similar/main/ai.cpp index 35b1146b1..1485d3c7d 100644 --- a/similar/main/ai.cpp +++ b/similar/main/ai.cpp @@ -3817,7 +3817,7 @@ _exit_cheat: if (!ai_multiplayer_awareness(obj, 62)) return; - const auto &¢er_point = compute_center_point_on_side(vcsegptr(obj->segnum), aip->GOALSIDE); + const auto &¢er_point = compute_center_point_on_side(vcvertptr, vcsegptr(obj->segnum), aip->GOALSIDE); const auto goal_vector = vm_vec_normalized_quick(vm_vec_sub(center_point, obj->pos)); ai_turn_towards_vector(goal_vector, obj, robptr.turn_time[Difficulty_level]); move_towards_vector(obj, goal_vector, 0); diff --git a/similar/main/aipath.cpp b/similar/main/aipath.cpp index 83300232b..7ddf6619e 100644 --- a/similar/main/aipath.cpp +++ b/similar/main/aipath.cpp @@ -109,7 +109,7 @@ static uint_fast32_t insert_center_points(segment_array &segments, point_seg *ps Assert(connect_side != side_none); // Impossible! These two segments must be connected, they were created by create_path_points (which was created by mk!) if (connect_side == side_none) // Try to blow past the assert, this should at least prevent a hang. connect_side = 0; - const auto &¢er_point = compute_center_point_on_side(seg1, connect_side); + const auto &¢er_point = compute_center_point_on_side(vcvertptr, seg1, connect_side); auto new_point = vm_vec_sub(psegs[i-1].point, center_point); new_point.x /= 16; new_point.y /= 16; @@ -356,7 +356,7 @@ if ((objp->type == OBJ_ROBOT) && (objp->ctype.ai_info.behavior == ai_behavior::A fvi_info hit_data; int hit_type; - const auto center_point = compute_center_point_on_side(segp, snum); + const auto &¢er_point = compute_center_point_on_side(vcvertptr, segp, snum); fq.p0 = &objp->pos; fq.startseg = objp->segnum; diff --git a/similar/main/collide.cpp b/similar/main/collide.cpp index 2276220b1..aa28e757e 100644 --- a/similar/main/collide.cpp +++ b/similar/main/collide.cpp @@ -2214,7 +2214,7 @@ static vms_vector find_exit_direction(vms_vector result, const vcobjptr_t objp, { for (unsigned side = MAX_SIDES_PER_SEGMENT; side --;) if (WALL_IS_DOORWAY(segp, side) & WID_FLY_FLAG) { - const auto exit_point = compute_center_point_on_side(segp, side); + const auto &&exit_point = compute_center_point_on_side(vcvertptr, segp, side); vm_vec_add2(result, vm_vec_normalized_quick(vm_vec_sub(exit_point, objp->pos))); break; } diff --git a/similar/main/endlevel.cpp b/similar/main/endlevel.cpp index 6aac64e37..4982753d1 100644 --- a/similar/main/endlevel.cpp +++ b/similar/main/endlevel.cpp @@ -874,7 +874,7 @@ static int find_exit_side(const object_base &obj) fix d; if (pseg->children[i]!=segment_none) { - auto sidevec = compute_center_point_on_side(pseg,i); + auto sidevec = compute_center_point_on_side(vcvertptr, pseg, i); vm_vec_normalized_dir_quick(sidevec,sidevec,segcenter); d = vm_vec_dot(sidevec,prefvec); @@ -1181,7 +1181,7 @@ void do_endlevel_flythrough(flythrough_data *flydata) //update target point & angles //where we are heading (center of exit_side) - auto dest_point = compute_center_point_on_side(pseg,exit_side); + auto dest_point = compute_center_point_on_side(vcvertptr, pseg, exit_side); const vms_vector nextcenter = (pseg->children[exit_side] == segment_exit) ? dest_point : compute_segment_center(vcvertptr, vcsegptr(pseg->children[exit_side])); @@ -1202,8 +1202,8 @@ void do_endlevel_flythrough(flythrough_data *flydata) s1 = i; } - const auto s0p = compute_center_point_on_side(pseg,s0); - const auto s1p = compute_center_point_on_side(pseg,s1); + const auto &&s0p = compute_center_point_on_side(vcvertptr, pseg, s0); + const auto &&s1p = compute_center_point_on_side(vcvertptr, pseg, s1); dist = fixmul(vm_vec_dist(s0p,s1p),flydata->offset_frac); if (dist-flydata->offset_dist > MAX_SLIDE_PER_SEGMENT) @@ -1463,7 +1463,7 @@ try_again: const auto &&exit_seg = vmsegptr(exit_segnum); compute_segment_center(vcvertptr, mine_exit_point, exit_seg); extract_orient_from_segment(&mine_exit_orient, exit_seg); - compute_center_point_on_side(mine_side_exit_point, exit_seg, exit_side); + compute_center_point_on_side(vcvertptr, mine_side_exit_point, exit_seg, exit_side); vm_vec_scale_add(mine_ground_exit_point,mine_exit_point,mine_exit_orient.uvec,-i2f(20)); diff --git a/similar/main/fireball.cpp b/similar/main/fireball.cpp index bc7f2be4f..078796016 100644 --- a/similar/main/fireball.cpp +++ b/similar/main/fireball.cpp @@ -1320,7 +1320,7 @@ void explode_wall(const vmsegptridx_t segnum,int sidenum) w.time = 0; //play one long sound for whole door wall explosion - const auto pos = compute_center_point_on_side(segnum,sidenum); + const auto &&pos = compute_center_point_on_side(vcvertptr, segnum, sidenum); digi_link_sound_to_pos( SOUND_EXPLODING_WALL,segnum, sidenum, pos, 0, F1_0 ); } diff --git a/similar/main/game.cpp b/similar/main/game.cpp index cd6e575ea..ba3999e99 100644 --- a/similar/main/game.cpp +++ b/similar/main/game.cpp @@ -507,7 +507,7 @@ void move_player_2_segment(const vmsegptridx_t seg,int side) { const auto &&console = vmobjptridx(ConsoleObject); compute_segment_center(vcvertptr, console->pos, seg); - auto vp = compute_center_point_on_side(seg,side); + auto vp = compute_center_point_on_side(vcvertptr, seg, side); vm_vec_sub2(vp, console->pos); vm_vector_2_matrix(console->orient, vp, nullptr, nullptr); obj_relink(vmobjptr, vmsegptr, console, seg); diff --git a/similar/main/gameseg.cpp b/similar/main/gameseg.cpp index bd99cc5af..552210d1f 100644 --- a/similar/main/gameseg.cpp +++ b/similar/main/gameseg.cpp @@ -103,7 +103,7 @@ static uint_fast32_t find_connect_child(const vcsegidx_t base_seg, const array &verts, const unsigned side) +static void compute_center_point_on_side(fvcvertptr &vcvertptr, vms_vector &r, const array &verts, const unsigned side) { vms_vector vp; vm_vec_zero(vp); @@ -133,9 +133,9 @@ unsigned Num_static_lights; // ------------------------------------------------------------------------------------------ // Compute the center point of a side of a segment. // The center point is defined to be the average of the 4 points defining the side. -void compute_center_point_on_side(vms_vector &vp, const segment &sp, const unsigned side) +void compute_center_point_on_side(fvcvertptr &vcvertptr, vms_vector &vp, const segment &sp, const unsigned side) { - compute_center_point_on_side(vp, sp.verts, side); + compute_center_point_on_side(vcvertptr, vp, sp.verts, side); } // ------------------------------------------------------------------------------------------ @@ -1185,7 +1185,7 @@ static int check_for_degenerate_side(const vcsegptr_t sp, int sidenum) int degeneracy_flag = 0; const auto segc = compute_segment_center(vcvertptr, sp); - const auto sidec = compute_center_point_on_side(sp, sidenum); + const auto &&sidec = compute_center_point_on_side(vcvertptr, sp, sidenum); const auto vec_to_center = vm_vec_sub(segc, sidec); //vm_vec_sub(&vec1, &Vertices[sp->verts[vp[1]]], &Vertices[sp->verts[vp[0]]]); diff --git a/similar/main/gameseq.cpp b/similar/main/gameseq.cpp index f55a05c56..89cb8025b 100644 --- a/similar/main/gameseq.cpp +++ b/similar/main/gameseq.cpp @@ -615,7 +615,7 @@ static void set_sound_sources(fvcsegptridx &vcsegptridx) } #endif - const auto pnt = compute_center_point_on_side(seg,sidenum); + const auto &&pnt = compute_center_point_on_side(vcvertptr, seg, sidenum); digi_link_sound_to_pos(sn, seg, sidenum, pnt, 1, F1_0/2); } } diff --git a/similar/main/switch.cpp b/similar/main/switch.cpp index 7d4d1dcb6..dbd410c67 100644 --- a/similar/main/switch.cpp +++ b/similar/main/switch.cpp @@ -196,7 +196,7 @@ static int do_change_walls(const trigger &t, const uint8_t new_wall_type) case TT_OPEN_WALL: if ((TmapInfo[segp->sides[side].tmap_num].flags & TMI_FORCE_FIELD)) { ret |= 2; - const auto pos = compute_center_point_on_side(segp, side ); + const auto &&pos = compute_center_point_on_side(vcvertptr, segp, side); digi_link_sound_to_pos( SOUND_FORCEFIELD_OFF, segp, side, pos, 0, F1_0 ); digi_kill_sound_linked_to_segment(segp,side,SOUND_FORCEFIELD_HUM); wall0.type = new_wall_type; @@ -214,7 +214,7 @@ static int do_change_walls(const trigger &t, const uint8_t new_wall_type) if ((TmapInfo[segp->sides[side].tmap_num].flags & TMI_FORCE_FIELD)) { ret |= 2; { - const auto pos = compute_center_point_on_side(segp, side ); + const auto &&pos = compute_center_point_on_side(vcvertptr, segp, side); digi_link_sound_to_pos(SOUND_FORCEFIELD_HUM,segp,side,pos,1, F1_0/2); } case TT_ILLUSORY_WALL: @@ -270,7 +270,7 @@ static void do_il_off(const trigger &t) #elif defined(DXX_BUILD_DESCENT_II) const auto op = [](const vmsegptridx_t &seg, unsigned side) { wall_illusion_off(seg, side); - const auto &&cp = compute_center_point_on_side(seg, side); + const auto &&cp = compute_center_point_on_side(vcvertptr, seg, side); digi_link_sound_to_pos(SOUND_WALL_REMOVED, seg, side, cp, 0, F1_0); }; #endif diff --git a/similar/main/wall.cpp b/similar/main/wall.cpp index 9d2f1d1ca..067238c99 100644 --- a/similar/main/wall.cpp +++ b/similar/main/wall.cpp @@ -441,7 +441,7 @@ void wall_open_door(const vmsegptridx_t seg, int side) if ( Newdemo_state != ND_STATE_PLAYBACK ) { // NOTE THE LINK TO ABOVE!!!! - const auto cp = compute_center_point_on_side(seg, side ); + const auto &&cp = compute_center_point_on_side(vcvertptr, seg, side); if (WallAnims[w->clip_num].open_sound > -1 ) digi_link_sound_to_pos( WallAnims[w->clip_num].open_sound, seg, side, cp, 0, F1_0 ); @@ -507,7 +507,7 @@ void start_wall_cloak(const vmsegptridx_t seg, int side) Assert(w->linked_wall == wall_none); if ( Newdemo_state != ND_STATE_PLAYBACK ) { - const auto cp = compute_center_point_on_side(seg, side ); + const auto &&cp = compute_center_point_on_side(vcvertptr, seg, side); digi_link_sound_to_pos( SOUND_WALL_CLOAK_ON, seg, side, cp, 0, F1_0 ); } @@ -583,7 +583,7 @@ void start_wall_decloak(const vmsegptridx_t seg, int side) Assert(w->linked_wall == wall_none); if ( Newdemo_state != ND_STATE_PLAYBACK ) { - const auto cp = compute_center_point_on_side(seg, side ); + const auto &&cp = compute_center_point_on_side(vcvertptr, seg, side); digi_link_sound_to_pos( SOUND_WALL_CLOAK_OFF, seg, side, cp, 0, F1_0 ); } @@ -733,7 +733,7 @@ void wall_close_door(const vmsegptridx_t seg, int side) if ( Newdemo_state != ND_STATE_PLAYBACK ) { // NOTE THE LINK TO ABOVE!!!! - const auto cp = compute_center_point_on_side(seg, side ); + const auto &&cp = compute_center_point_on_side(vcvertptr, seg, side); if (WallAnims[w->clip_num].open_sound > -1 ) digi_link_sound_to_pos( WallAnims[w->clip_num].open_sound, seg, side, cp, 0, F1_0 ); @@ -872,7 +872,7 @@ static bool do_door_close(active_door &d) { //first time if (WallAnims[wp.clip_num].close_sound > -1 ) { - digi_link_sound_to_pos(WallAnims[wp.clip_num].close_sound, seg, side, compute_center_point_on_side(seg, side), 0, F1_0); + digi_link_sound_to_pos(WallAnims[wp.clip_num].close_sound, seg, side, compute_center_point_on_side(vcvertptr, seg, side), 0, F1_0); } } } @@ -1392,7 +1392,7 @@ static void bng_process_segment(const object &objp, fix damage, const vmsegptrid tm &= 0x3fff; //tm without flags if ((((ec=TmapInfo[tm].eclip_num)!=-1) && ((db=Effects[ec].dest_bm_num)!=-1 && !(Effects[ec].flags&EF_ONE_SHOT))) || (ec==-1 && (TmapInfo[tm].destroyed!=-1))) { - const auto pnt = compute_center_point_on_side(segp, sidenum); + const auto &&pnt = compute_center_point_on_side(vcvertptr, segp, sidenum); dist = vm_vec_dist_quick(pnt, objp.pos); if (dist < damage/2) { dist = find_connected_distance(pnt, segp, objp.pos, segp.absolute_sibling(objp.segnum), MAX_BLAST_GLASS_DEPTH, WID_RENDPAST_FLAG);