Use symbolic side_none for testing find_connect_side result

This commit is contained in:
Kp 2016-01-03 20:21:35 +00:00
parent 2ef83ad002
commit 5ba5910e7a
7 changed files with 43 additions and 43 deletions

View file

@ -1141,7 +1141,8 @@ static void ai_fire_laser_at_player(const vobjptridx_t obj, const vms_vector &fi
// See if these segments are connected, which should almost always be the case.
const auto &&csegp = vcsegptr(obj->segnum);
const auto conn_side = find_connect_side(gun_segnum, csegp);
if (conn_side != -1) {
if (conn_side != side_none)
{
// They are connected via conn_side in segment obj->segnum.
// See if they are unobstructed.
if (!(WALL_IS_DOORWAY(csegp, conn_side) & WID_FLY_FLAG)) {

View file

@ -105,8 +105,8 @@ static uint_fast32_t insert_center_points(point_seg *psegs, uint_fast32_t count)
psegs[2*i] = psegs[i];
const auto &&seg1 = vcsegptr(psegs[i-1].segnum);
auto connect_side = find_connect_side(vcsegptridx(psegs[i].segnum), seg1);
Assert(connect_side != -1); // Impossible! These two segments must be connected, they were created by create_path_points (which was created by mk!)
if (connect_side == -1) // Try to blow past the assert, this should at least prevent a hang.
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 &&center_point = compute_center_point_on_side(seg1, connect_side);
auto new_point = vm_vec_sub(psegs[i-1].point, center_point);

View file

@ -134,7 +134,7 @@ int_fast32_t find_connect_side(const vcsegptridx_t base_seg, const vcsegptr_t co
if (i != e)
return std::distance(b, i);
// legal to return -1, used in object_move_one(), mk, 06/08/94: Assert(0); // Illegal -- there is no connecting side between these two segments
return -1;
return side_none;
}
}
@ -481,7 +481,8 @@ int check_segment_connections(void)
auto cseg = vcsegptr(csegnum);
auto csidenum = find_connect_side(seg,cseg);
if (csidenum == -1) {
if (csidenum == side_none)
{
errors = 1;
continue;
}
@ -802,7 +803,8 @@ vm_distance find_connected_distance(const vms_vector &p0, const vcsegptridx_t se
return vm_vec_dist_quick(p0, p1);
} else {
auto conn_side = find_connect_side(seg0, seg1);
if (conn_side != -1) {
if (conn_side != side_none)
{
#if defined(DXX_BUILD_DESCENT_II)
if (WALL_IS_DOORWAY(seg1, conn_side) & wid_flag)
#endif

View file

@ -1735,7 +1735,7 @@ static void object_move_one(const vobjptridx_t obj)
{
const auto &&seg1 = seg0.absolute_sibling(i);
const auto connect_side = find_connect_side(seg1, seg0);
if (connect_side != -1)
if (connect_side != side_none)
{
check_trigger(seg0, connect_side, obj,0);
#if defined(DXX_BUILD_DESCENT_II)
@ -1785,7 +1785,8 @@ static void object_move_one(const vobjptridx_t obj)
if (previous_segment != obj->segnum) {
const auto &&psegp = vcsegptr(previous_segment);
const auto &&connect_side = find_connect_side(vcsegptridx(obj->segnum), psegp);
if (connect_side != -1) {
if (connect_side != side_none)
{
const auto wall_num = psegp->sides[connect_side].wall_num;
if ( wall_num != wall_none ) {
auto trigger_num = Walls[wall_num].trigger;

View file

@ -709,8 +709,8 @@ void do_physics_sim(const vobjptridx_t obj)
const auto orig_segp = vcsegptr(orig_segnum);
const auto &&sidenum = find_connect_side(vcsegptridx(obj->segnum), orig_segp);
if (sidenum != -1) {
if (sidenum != side_none)
{
if (! (WALL_IS_DOORWAY(orig_segp,sidenum) & WID_FLY_FLAG)) {
fix dist;

View file

@ -214,7 +214,7 @@ static int do_change_walls(uint8_t trigger_num)
{
csegp = segptridx(segp->children[side]);
cside = find_connect_side(segp, csegp);
Assert(cside != -1);
Assert(cside != side_none);
}
//segp->sides[side].wall_num = -1;
@ -623,7 +623,7 @@ void check_trigger(const vcsegptridx_t seg, short side, const vcobjptridx_t objn
const auto &&csegp = vcsegptr(seg->children[side]);
auto cside = find_connect_side(seg, csegp);
Assert(cside != -1);
Assert(cside != side_none);
wall_num = csegp->sides[cside].wall_num;
if ( wall_num == wall_none ) return;

View file

@ -197,7 +197,7 @@ static void blast_blastable_wall(const vsegptridx_t seg, int side)
const auto &&csegp = seg.absolute_sibling(seg->children[side]);
auto Connectside = find_connect_side(seg, csegp);
Assert(Connectside != -1);
Assert(Connectside != side_none);
cwall_num = csegp->sides[Connectside].wall_num;
kill_stuck_objects(seg->sides[side].wall_num);
if (cwall_num > -1)
@ -248,7 +248,7 @@ void wall_damage(const vsegptridx_t seg, int side, fix damage)
{
const auto &&csegp = seg.absolute_sibling(seg->children[side]);
auto Connectside = find_connect_side(seg, csegp);
Assert(Connectside != -1);
Assert(Connectside != side_none);
cwall_num = csegp->sides[Connectside].wall_num;
Walls[seg->sides[side].wall_num].hps -= damage;
if (cwall_num > -1)
@ -339,7 +339,7 @@ void wall_open_door(const vsegptridx_t seg, int side)
// So that door can't be shot while opening
const auto &&csegp = vcsegptr(seg->children[side]);
auto Connectside = find_connect_side(seg, csegp);
if (Connectside >= 0)
if (Connectside != side_none)
{
cwall_num = csegp->sides[Connectside].wall_num;
if (cwall_num > -1)
@ -368,7 +368,7 @@ void wall_open_door(const vsegptridx_t seg, int side)
const auto &&seg2 = vcsegptridx(w2->segnum);
Connectside = find_connect_side(seg2, vcsegptr(seg2->children[w2->sidenum]));
Assert(Connectside != -1);
Assert(Connectside != side_none);
if (cwall_num > -1)
Walls[cwall_num].state = WALL_DOOR_OPENING;
@ -413,7 +413,7 @@ void wall_close_door(int door_num)
const auto &&csegp = seg.absolute_sibling(seg->children[side]);
auto Connectside = find_connect_side(seg, csegp);
Assert(Connectside != -1);
Assert(Connectside != side_none);
Walls[seg->sides[side].wall_num].state = WALL_DOOR_CLOSED;
Walls[csegp->sides[Connectside].wall_num].state = WALL_DOOR_CLOSED;
@ -449,7 +449,7 @@ void start_wall_cloak(const vsegptridx_t seg, int side)
const auto &&csegp = vcsegptr(seg->children[side]);
auto Connectside = find_connect_side(seg, csegp);
Assert(Connectside != -1);
Assert(Connectside != side_none);
cwall_num = csegp->sides[Connectside].wall_num;
if (w->state == WALL_DOOR_DECLOAKING) { //decloaking, so reuse door
@ -569,7 +569,7 @@ void start_wall_decloak(const vsegptridx_t seg, int side)
// So that door can't be shot while opening
const auto &&csegp = vcsegptr(seg->children[side]);
auto Connectside = find_connect_side(seg, csegp);
Assert(Connectside != -1);
Assert(Connectside != side_none);
cwall_num = csegp->sides[Connectside].wall_num;
if (cwall_num > -1)
Walls[cwall_num].state = WALL_DOOR_DECLOAKING;
@ -615,7 +615,7 @@ void wall_close_door_num(int door_num)
const auto &&csegp = seg.absolute_sibling(seg->children[side]);
auto Connectside = find_connect_side(seg, csegp);
Assert(Connectside != -1);
Assert(Connectside != side_none);
cwall_num = csegp->sides[Connectside].wall_num;
Walls[seg->sides[side].wall_num].state = WALL_DOOR_CLOSED;
if (cwall_num > -1)
@ -663,10 +663,6 @@ void do_door_close(int door_num)
const auto &&seg = vcsegptridx(w->segnum);
side = w->sidenum;
const auto &&csegp = vcsegptr(seg->children[side]);
auto Connectside = find_connect_side(seg, csegp);
Assert(Connectside != -1);
//go through each object in each of two segments, and see if
//it pokes into the connecting seg
@ -674,6 +670,9 @@ void do_door_close(int door_num)
if (check_poke(objnum, seg, side))
return; //abort!
const auto &&csegp = vcsegptr(seg->children[side]);
const auto &&Connectside = find_connect_side(seg, csegp);
Assert(Connectside != side_none);
range_for (const auto &&objnum, objects_in(csegp))
if (check_poke(objnum, csegp, Connectside))
return; //abort!
@ -698,9 +697,8 @@ void do_door_close(int door_num)
// Otherwise, close it.
const auto &&csegp = seg.absolute_sibling(seg->children[side]);
auto Connectside = find_connect_side(seg, csegp);
Assert(Connectside != -1);
const auto &&Connectside = find_connect_side(seg, csegp);
Assert(Connectside != side_none);
if ( Newdemo_state != ND_STATE_PLAYBACK )
// NOTE THE LINK TO ABOVE!!
@ -756,8 +754,8 @@ static int is_door_free(const vcsegptridx_t seg,int side)
if (!is_door_side_free(seg, side))
return 0;
const auto &&csegp = vcsegptr(seg->children[side]);
auto Connectside = find_connect_side(seg, csegp);
Assert(Connectside != -1);
const auto &&Connectside = find_connect_side(seg, csegp);
Assert(Connectside != side_none);
//go through each object in each of two segments, and see if
//it pokes into the connecting seg
return is_door_side_free(csegp, Connectside);
@ -819,8 +817,8 @@ void wall_close_door(const vsegptridx_t seg, int side)
// So that door can't be shot while opening
const auto &&csegp = vcsegptr(seg->children[side]);
auto Connectside = find_connect_side(seg, csegp);
Assert(Connectside != -1);
const auto &&Connectside = find_connect_side(seg, csegp);
Assert(Connectside != side_none);
cwall_num = csegp->sides[Connectside].wall_num;
if (cwall_num > -1)
Walls[cwall_num].state = WALL_DOOR_CLOSING;
@ -884,8 +882,8 @@ void do_door_open(int door_num)
}
const auto &&csegp = seg.absolute_sibling(seg->children[side]);
auto Connectside = find_connect_side(seg, csegp);
Assert(Connectside != -1);
const auto &&Connectside = find_connect_side(seg, csegp);
Assert(Connectside != side_none);
d->time += FrameTime;
@ -978,8 +976,8 @@ void do_door_close(int door_num)
// Otherwise, close it.
const auto &&csegp = seg.absolute_sibling(seg->children[side]);
auto Connectside = find_connect_side(seg, csegp);
Assert(Connectside != -1);
const auto &&Connectside = find_connect_side(seg, csegp);
Assert(Connectside != side_none);
if ( Newdemo_state != ND_STATE_PLAYBACK )
@ -1027,14 +1025,13 @@ void do_door_close(int door_num)
// wall switches or triggers that can turn on/off illusionary walls.)
void wall_illusion_off(const vsegptridx_t seg, int side)
{
const auto &&csegp = vcsegptr(seg->children[side]);
auto cside = find_connect_side(seg, csegp);
Assert(cside != -1);
if (seg->sides[side].wall_num == wall_none) {
return;
}
const auto &&csegp = vcsegptr(seg->children[side]);
const auto &&cside = find_connect_side(seg, csegp);
Assert(cside != side_none);
Walls[seg->sides[side].wall_num].flags |= WALL_ILLUSION_OFF;
Walls[csegp->sides[cside].wall_num].flags |= WALL_ILLUSION_OFF;
@ -1049,14 +1046,13 @@ void wall_illusion_off(const vsegptridx_t seg, int side)
// wall switches or triggers that can turn on/off illusionary walls.)
void wall_illusion_on(const vsegptridx_t seg, int side)
{
const auto &&csegp = vcsegptr(seg->children[side]);
auto cside = find_connect_side(seg, csegp);
Assert(cside != -1);
if (seg->sides[side].wall_num == wall_none) {
return;
}
const auto &&csegp = vcsegptr(seg->children[side]);
const auto &&cside = find_connect_side(seg, csegp);
Assert(cside != side_none);
Walls[seg->sides[side].wall_num].flags &= ~WALL_ILLUSION_OFF;
Walls[csegp->sides[cside].wall_num].flags &= ~WALL_ILLUSION_OFF;
}