Use symbolic side_none for testing find_connect_side result
This commit is contained in:
parent
2ef83ad002
commit
5ba5910e7a
|
@ -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)) {
|
||||
|
|
|
@ -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 &¢er_point = compute_center_point_on_side(seg1, connect_side);
|
||||
auto new_point = vm_vec_sub(psegs[i-1].point, center_point);
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue