From a79bb365f9bd322d2014a285a5fc088f27358ebe Mon Sep 17 00:00:00 2001 From: Kp Date: Sun, 26 Oct 2014 21:28:38 +0000 Subject: [PATCH] Pass get_seg_masks arg by & --- common/main/gameseg.h | 4 ++-- similar/editor/eobject.cpp | 31 +++++++++++++++---------------- similar/editor/kgame.cpp | 2 +- similar/main/fvi.cpp | 14 +++++++------- similar/main/gameseg.cpp | 10 +++++----- similar/main/object.cpp | 4 ++-- similar/main/physics.cpp | 6 +++--- similar/main/render.cpp | 2 +- similar/main/wall.cpp | 2 +- 9 files changed, 37 insertions(+), 38 deletions(-) diff --git a/common/main/gameseg.h b/common/main/gameseg.h index 77d809b26..55b0d29f6 100644 --- a/common/main/gameseg.h +++ b/common/main/gameseg.h @@ -87,10 +87,10 @@ extern int get_num_faces(side *sidep); //returns 3 different bitmasks with info telling if this sphere is in //this segment. See segmasks structure for info on fields -segmasks get_seg_masks(const vms_vector *checkp, segnum_t segnum, fix rad, const char *calling_file, int calling_linenum); +segmasks get_seg_masks(const vms_vector &checkp, segnum_t segnum, fix rad, const char *calling_file, int calling_linenum); //this macro returns true if the segnum for an object is correct -#define check_obj_seg(obj) (get_seg_masks(&(obj)->pos, (obj)->segnum, 0, __FILE__, __LINE__).centermask == 0) +#define check_obj_seg(obj) (get_seg_masks((obj)->pos, (obj)->segnum, 0, __FILE__, __LINE__).centermask == 0) //Tries to find a segment for a point, in the following way: // 1. Check the given segment diff --git a/similar/editor/eobject.cpp b/similar/editor/eobject.cpp index 23bb85435..3a8febfdf 100644 --- a/similar/editor/eobject.cpp +++ b/similar/editor/eobject.cpp @@ -459,11 +459,11 @@ int ObjectDelete(void) // Object has moved to another segment, (or at least poked through). // If still in mine, that is legal, so relink into new segment. // Return value: 0 = in mine, 1 = not in mine -static int move_object_within_mine(vobjptridx_t obj, vms_vector *newpos ) +static int move_object_within_mine(vobjptridx_t obj, const vms_vector &newpos) { range_for (auto segnum, highest_valid(Segments)) { - segmasks result = get_seg_masks(&obj->pos, segnum, 0, __FILE__, __LINE__); + segmasks result = get_seg_masks(obj->pos, segnum, 0, __FILE__, __LINE__); if (result.centermask == 0) { int fate; @@ -473,7 +473,7 @@ static int move_object_within_mine(vobjptridx_t obj, vms_vector *newpos ) // See if the radius pokes through any wall. fq.p0 = &obj->pos; fq.startseg = obj->segnum; - fq.p1 = newpos; + fq.p1 = &newpos; fq.rad = obj->size; fq.thisobjnum = object_none; fq.ignore_obj_list = NULL; @@ -484,7 +484,7 @@ static int move_object_within_mine(vobjptridx_t obj, vms_vector *newpos ) if (fate != HIT_WALL) { if ( segnum != obj->segnum ) obj_relink( obj, segnum); - obj->pos = *newpos; + obj->pos = newpos; return 0; } } @@ -496,7 +496,7 @@ static int move_object_within_mine(vobjptridx_t obj, vms_vector *newpos ) // Return 0 if object is in expected segment, else return 1 -static int verify_object_seg(object *objp, vms_vector *newpos) +static int verify_object_seg(object *objp, const vms_vector &newpos) { segmasks result = get_seg_masks(newpos, objp->segnum, objp->size, __FILE__, __LINE__); @@ -526,7 +526,7 @@ int ObjectMoveForward(void) vm_vec_add(newpos, obj->pos, vm_vec_scale(fvec, OBJ_SCALE)); - if (!verify_object_seg(obj, &newpos)) + if (!verify_object_seg(obj, newpos)) obj->pos = newpos; Update_flags |= UF_WORLD_CHANGED; @@ -553,7 +553,7 @@ int ObjectMoveBack(void) vm_vec_sub(newpos, obj->pos, vm_vec_scale(fvec, OBJ_SCALE)); - if (!verify_object_seg(obj, &newpos)) + if (!verify_object_seg(obj, newpos)) obj->pos = newpos; Update_flags |= UF_WORLD_CHANGED; @@ -580,7 +580,7 @@ int ObjectMoveLeft(void) vm_vec_sub(newpos, obj->pos, vm_vec_scale(rvec, OBJ_SCALE)); - if (!verify_object_seg(obj, &newpos)) + if (!verify_object_seg(obj, newpos)) obj->pos = newpos; Update_flags |= UF_WORLD_CHANGED; @@ -607,7 +607,7 @@ int ObjectMoveRight(void) vm_vec_add(newpos, obj->pos, vm_vec_scale(rvec, OBJ_SCALE)); - if (!verify_object_seg(obj, &newpos)) + if (!verify_object_seg(obj, newpos)) obj->pos = newpos; Update_flags |= UF_WORLD_CHANGED; @@ -652,7 +652,7 @@ int ObjectMoveUp(void) vm_vec_add(newpos, obj->pos, vm_vec_scale(uvec, OBJ_SCALE)); - if (!verify_object_seg(obj, &newpos)) + if (!verify_object_seg(obj, newpos)) obj->pos = newpos; Update_flags |= UF_WORLD_CHANGED; @@ -679,7 +679,7 @@ int ObjectMoveDown(void) vm_vec_sub(newpos, obj->pos, vm_vec_scale(uvec, OBJ_SCALE)); - if (!verify_object_seg(obj, &newpos)) + if (!verify_object_seg(obj, newpos)) obj->pos = newpos; Update_flags |= UF_WORLD_CHANGED; @@ -776,12 +776,12 @@ int ObjectIncreaseHeadingBig() {return rotate_object(Cur_object_index, 0, 0, (RO // t = - ---------------------- // VxFx + VyFy + VzFz -static void move_object_to_position(vobjptridx_t objp, vms_vector *newpos) +static void move_object_to_position(vobjptridx_t objp, const vms_vector &newpos) { segmasks result = get_seg_masks(newpos, objp->segnum, objp->size, __FILE__, __LINE__); if (result.facemask == 0) { - objp->pos = *newpos; + objp->pos = newpos; } else { if (verify_object_seg(objp, newpos)) { int fate; @@ -839,7 +839,7 @@ static void move_object_to_position(vobjptridx_t objp, vms_vector *newpos) fq.p0 = &temp_viewer_obj.pos; fq.startseg = temp_viewer_obj.segnum; - fq.p1 = newpos; + fq.p1 = &newpos; fq.rad = temp_viewer_obj.size; fq.thisobjnum = object_none; fq.ignore_obj_list = NULL; @@ -865,8 +865,7 @@ static void move_object_to_vector(const vms_vector &vec_through_screen, fix delt { vms_vector result; vm_vec_scale_add(result, Viewer->pos, vec_through_screen, vm_vec_dist(Viewer->pos, Objects[Cur_object_index].pos) + delta_distance); - move_object_to_position(Cur_object_index, &result); - + move_object_to_position(Cur_object_index, result); } static void move_object_to_mouse_click_delta(fix delta_distance) diff --git a/similar/editor/kgame.cpp b/similar/editor/kgame.cpp index 31278850f..fe9b7c5de 100644 --- a/similar/editor/kgame.cpp +++ b/similar/editor/kgame.cpp @@ -110,7 +110,7 @@ int SaveGameData() Perm_player_segnum = segment_none; if (Perm_player_segnum!=segment_none) { - if (get_seg_masks(&Perm_player_position, Perm_player_segnum, 0, __FILE__, __LINE__).centermask == 0) + if (get_seg_masks(Perm_player_position, Perm_player_segnum, 0, __FILE__, __LINE__).centermask == 0) { ConsoleObject->pos = Perm_player_position; obj_relink(ConsoleObject-Objects,Perm_player_segnum); diff --git a/similar/main/fvi.cpp b/similar/main/fvi.cpp index 0c94fb315..be61989ad 100644 --- a/similar/main/fvi.cpp +++ b/similar/main/fvi.cpp @@ -661,7 +661,7 @@ int find_vector_intersection(fvi_query *fq,fvi_info *hit_data) } // Viewer is not in segment as claimed, so say there is no hit. - if(!(get_seg_masks(fq->p0, fq->startseg, 0, __FILE__, __LINE__).centermask == 0)) + if(!(get_seg_masks(*fq->p0, fq->startseg, 0, __FILE__, __LINE__).centermask == 0)) { hit_data->hit_type = HIT_BAD_P0; @@ -682,14 +682,14 @@ int find_vector_intersection(fvi_query *fq,fvi_info *hit_data) hit_type = fvi_sub(&hit_pnt,&hit_seg2,fq->p0,fq->startseg,fq->p1,fq->rad,fq->thisobjnum,fq->ignore_obj_list,fq->flags,hit_data->seglist,segment_exit,visited); segnum_t hit_seg; - if (hit_seg2 != segment_none && !get_seg_masks(&hit_pnt, hit_seg2, 0, __FILE__, __LINE__).centermask) + if (hit_seg2 != segment_none && !get_seg_masks(hit_pnt, hit_seg2, 0, __FILE__, __LINE__).centermask) hit_seg = hit_seg2; else hit_seg = find_point_seg(hit_pnt,fq->startseg); //MATT: TAKE OUT THIS HACK AND FIX THE BUGS! if (hit_type == HIT_WALL && hit_seg==segment_none) - if (fvi_hit_seg2 != segment_none && get_seg_masks(&hit_pnt, fvi_hit_seg2, 0, __FILE__, __LINE__).centermask == 0) + if (fvi_hit_seg2 != segment_none && get_seg_masks(hit_pnt, fvi_hit_seg2, 0, __FILE__, __LINE__).centermask == 0) hit_seg = fvi_hit_seg2; if (hit_seg == segment_none) { @@ -872,9 +872,9 @@ static int fvi_sub(vms_vector *intp,segnum_t *ints,const vms_vector *p0,segnum_t //now, check segment walls - startmask = get_seg_masks(p0, startseg, rad, __FILE__, __LINE__).facemask; + startmask = get_seg_masks(*p0, startseg, rad, __FILE__, __LINE__).facemask; - masks = get_seg_masks(p1, startseg, rad, __FILE__, __LINE__); //on back of which faces? + masks = get_seg_masks(*p1, startseg, rad, __FILE__, __LINE__); //on back of which faces? endmask = masks.facemask; //@@sidemask = masks.sidemask; centermask = masks.centermask; @@ -1005,7 +1005,7 @@ static int fvi_sub(vms_vector *intp,segnum_t *ints,const vms_vector *p0,segnum_t wall_norm = seg->sides[side].normals[face]; - if (get_seg_masks(&hit_point, startseg, rad, __FILE__, __LINE__).centermask == 0) + if (get_seg_masks(hit_point, startseg, rad, __FILE__, __LINE__).centermask == 0) hit_seg = startseg; //hit in this segment else fvi_hit_seg2 = startseg; @@ -1218,7 +1218,7 @@ static int sphere_intersects_wall(vms_vector *pnt,segnum_t segnum,fix rad,segnum visited[segnum] = true; ++visited.count; - facemask = get_seg_masks(pnt, segnum, rad, __FILE__, __LINE__).facemask; + facemask = get_seg_masks(*pnt, segnum, rad, __FILE__, __LINE__).facemask; seg = &Segments[segnum]; diff --git a/similar/main/gameseg.cpp b/similar/main/gameseg.cpp index 87a3b398e..838f2c8e1 100644 --- a/similar/main/gameseg.cpp +++ b/similar/main/gameseg.cpp @@ -306,7 +306,7 @@ void create_abs_vertex_lists(int *num_faces, vertex_array_list_t &vertices, segn //returns 3 different bitmasks with info telling if this sphere is in //this segment. See segmasks structure for info on fields -segmasks get_seg_masks(const vms_vector *checkp, segnum_t segnum, fix rad, const char *calling_file, int calling_linenum) +segmasks get_seg_masks(const vms_vector &checkp, segnum_t segnum, fix rad, const char *calling_file, int calling_linenum) { int sn,facebit,sidebit; segmasks masks; @@ -315,7 +315,7 @@ segmasks get_seg_masks(const vms_vector *checkp, segnum_t segnum, fix rad, const segment *seg; if (segnum < 0 || segnum > Highest_segment_index) - Error("segnum == %i (%i) in get_seg_masks() \ncheckp: %i,%i,%i, rad: %i \nfrom file: %s, line: %i \nMission: %s (%i) \nPlease report this bug.\n",segnum,Highest_segment_index,checkp->x,checkp->y,checkp->z,rad,calling_file,calling_linenum, Current_mission_filename, Current_level_num); + Error("segnum == %i (%i) in get_seg_masks() \ncheckp: %i,%i,%i, rad: %i \nfrom file: %s, line: %i \nMission: %s (%i) \nPlease report this bug.\n",segnum,Highest_segment_index,checkp.x,checkp.y,checkp.z,rad,calling_file,calling_linenum, Current_mission_filename, Current_level_num); Assert((segnum <= Highest_segment_index) && (segnum >= 0)); @@ -358,7 +358,7 @@ segmasks get_seg_masks(const vms_vector *checkp, segnum_t segnum, fix rad, const for (int fn=0;fn<2;fn++,facebit<<=1) { - dist = vm_dist_to_plane(*checkp, s->normals[fn], Vertices[vertnum]); + dist = vm_dist_to_plane(checkp, s->normals[fn], Vertices[vertnum]); if (dist < -PLANE_DIST_TOLERANCE) //in front of face center_count++; @@ -396,7 +396,7 @@ segmasks get_seg_masks(const vms_vector *checkp, segnum_t segnum, fix rad, const auto b = begin(vertex_list); vertnum = *std::min_element(b, std::next(b, 4)); - dist = vm_dist_to_plane(*checkp, s->normals[0], Vertices[vertnum]); + dist = vm_dist_to_plane(checkp, s->normals[0], Vertices[vertnum]); if (dist < -PLANE_DIST_TOLERANCE) @@ -709,7 +709,7 @@ segnum_t find_point_seg(const vms_vector &p,segnum_t segnum) // Matt: This really should be fixed, though. We're probably screwing up our lighting in a few places. if (!Doing_lighting_hack_flag) { range_for (auto newseg, highest_valid(Segments)) - if (get_seg_masks(&p, newseg, 0, __FILE__, __LINE__).centermask == 0) + if (get_seg_masks(p, newseg, 0, __FILE__, __LINE__).centermask == 0) return newseg; return segment_none; //no segment found diff --git a/similar/main/object.cpp b/similar/main/object.cpp index 5b48370cb..fa5f40279 100644 --- a/similar/main/object.cpp +++ b/similar/main/object.cpp @@ -1102,7 +1102,7 @@ objptridx_t obj_create(object_type_t type, ubyte id,segnum_t segnum,const vms_ve if (type==OBJ_DEBRIS && Debris_object_count>=Max_debris_objects && !PERSISTENT_DEBRIS) return object_none; - if (get_seg_masks(pos, segnum, 0, __FILE__, __LINE__).centermask != 0) + if (get_seg_masks(*pos, segnum, 0, __FILE__, __LINE__).centermask != 0) if ((segnum=find_point_seg(*pos,segnum))==segment_none) { return object_none; //don't create this object } @@ -1765,7 +1765,7 @@ void object_move_one(vobjptridx_t obj) int sidemask,under_lavafall=0; static int lavafall_hiss_playing[MAX_PLAYERS]={0}; - sidemask = get_seg_masks(&obj->pos, obj->segnum, obj->size, __FILE__, __LINE__).sidemask; + sidemask = get_seg_masks(obj->pos, obj->segnum, obj->size, __FILE__, __LINE__).sidemask; if (sidemask) { int sidenum,bit,wall_num; diff --git a/similar/main/physics.cpp b/similar/main/physics.cpp index f16b205a5..3e9cd9b93 100644 --- a/similar/main/physics.cpp +++ b/similar/main/physics.cpp @@ -340,7 +340,7 @@ void do_physics_sim(vobjptridx_t obj) #ifdef EXTRA_DEBUG //check for correct object segment - if(!get_seg_masks(&obj->pos, obj->segnum, 0, __FILE__, __LINE__).centermask == 0) + if(!get_seg_masks(obj->pos, obj->segnum, 0, __FILE__, __LINE__).centermask == 0) { if (!update_object_seg(obj)) { if (!(Game_mode & GM_MULTI)) @@ -484,7 +484,7 @@ void do_physics_sim(vobjptridx_t obj) obj_relink(obj, iseg ); //if start point not in segment, move object to center of segment - if (get_seg_masks(&obj->pos, obj->segnum, 0, __FILE__, __LINE__).centermask !=0 ) + if (get_seg_masks(obj->pos, obj->segnum, 0, __FILE__, __LINE__).centermask !=0 ) { segnum_t n; @@ -762,7 +762,7 @@ void do_physics_sim(vobjptridx_t obj) //--WE ALWYS WANT THIS IN, MATT AND MIKE DECISION ON 12/10/94, TWO MONTHS AFTER FINAL #ifndef NDEBUG //if end point not in segment, move object to last pos, or segment center - if (get_seg_masks(&obj->pos, obj->segnum, 0, __FILE__, __LINE__).centermask != 0) + if (get_seg_masks(obj->pos, obj->segnum, 0, __FILE__, __LINE__).centermask != 0) { if (find_object_seg(obj)==segment_none) { segnum_t n; diff --git a/similar/main/render.cpp b/similar/main/render.cpp index 22da0e188..1076ac43b 100644 --- a/similar/main/render.cpp +++ b/similar/main/render.cpp @@ -1309,7 +1309,7 @@ static void build_object_lists(render_state_t &rstate) #if defined(DXX_BUILD_DESCENT_I) did_migrate = 0; #endif - m = get_seg_masks(&obj->pos, new_segnum, obj->size, __FILE__, __LINE__); + m = get_seg_masks(obj->pos, new_segnum, obj->size, __FILE__, __LINE__); if (m.sidemask) { int sn,sf; diff --git a/similar/main/wall.cpp b/similar/main/wall.cpp index f10fa0f1a..3e3f4acf2 100644 --- a/similar/main/wall.cpp +++ b/similar/main/wall.cpp @@ -693,7 +693,7 @@ static int check_poke(objnum_t objnum,segnum_t segnum,int side) //note: don't let objects with zero size block door - if (obj->size && get_seg_masks(&obj->pos, segnum, obj->size, __FILE__, __LINE__).sidemask & (1 << side)) + if (obj->size && get_seg_masks(obj->pos, segnum, obj->size, __FILE__, __LINE__).sidemask & (1 << side)) return 1; //pokes through side! else return 0; //does not!