Pass get_seg_masks arg by &
This commit is contained in:
parent
3412bf4b3a
commit
a79bb365f9
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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];
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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!
|
||||
|
|
Loading…
Reference in a new issue