Pass get_seg_masks arg by &

This commit is contained in:
Kp 2014-10-26 21:28:38 +00:00
parent 3412bf4b3a
commit a79bb365f9
9 changed files with 37 additions and 38 deletions

View file

@ -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

View file

@ -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)

View file

@ -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);

View file

@ -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];

View file

@ -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

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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!