mirror of
https://github.com/Relintai/pandemonium_engine.git
synced 2024-12-22 11:56:49 +01:00
Portals - Fix invalid room hint when reconverting room graph
In situations where rooms are converted multiple times, the previous room hint ID can reference a room number that is out of range of the new number of rooms. This fixes the bug by checking the room hint ID is within range.
This commit is contained in:
parent
cedf68bf7f
commit
50d5be10f8
@ -102,19 +102,24 @@ int PortalRoomsBSP::find_room_within(const PortalRenderer &p_portal_renderer, co
|
||||
|
||||
// first try previous room
|
||||
if (p_previous_room_id != -1) {
|
||||
const VSRoom &prev_room = p_portal_renderer.get_room(p_previous_room_id);
|
||||
if (p_previous_room_id < p_portal_renderer.get_num_rooms()) {
|
||||
const VSRoom &prev_room = p_portal_renderer.get_room(p_previous_room_id);
|
||||
|
||||
// we can only use this shortcut if the room doesn't include internal rooms.
|
||||
// otherwise the point may be inside more than one room, and we need to find the room of highest priority.
|
||||
if (!prev_room._contains_internal_rooms) {
|
||||
closest = prev_room.is_point_within(p_pos);
|
||||
closest_room_id = p_previous_room_id;
|
||||
// we can only use this shortcut if the room doesn't include internal rooms.
|
||||
// otherwise the point may be inside more than one room, and we need to find the room of highest priority.
|
||||
if (!prev_room._contains_internal_rooms) {
|
||||
closest = prev_room.is_point_within(p_pos);
|
||||
closest_room_id = p_previous_room_id;
|
||||
|
||||
if (closest < 0.0) {
|
||||
return p_previous_room_id;
|
||||
if (closest < 0.0) {
|
||||
return p_previous_room_id;
|
||||
}
|
||||
} else {
|
||||
// don't mark it as checked later, as we haven't done it because it contains internal rooms
|
||||
p_previous_room_id = -1;
|
||||
}
|
||||
} else {
|
||||
// don't mark it as checked later, as we haven't done it because it contains internal rooms
|
||||
// previous room was out of range (perhaps due to reconverting room system and the number of rooms decreasing)
|
||||
p_previous_room_id = -1;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user