Merge pull request #57546 from lawnjelly/portals_fix_dynamic_particles

This commit is contained in:
Rémi Verschelde 2022-02-02 14:57:21 +01:00 committed by GitHub
commit 821a1a1882
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 9 additions and 4 deletions

View File

@ -1281,13 +1281,17 @@ void RoomManager::_process_static(Room *p_room, Spatial *p_node, Vector<Vector3>
bool ignore = false;
VisualInstance *vi = Object::cast_to<VisualInstance>(p_node);
bool is_dynamic = false;
// we are only interested in VIs with static or dynamic mode
if (vi) {
switch (vi->get_portal_mode()) {
default: {
ignore = true;
} break;
case CullInstance::PORTAL_MODE_DYNAMIC:
case CullInstance::PORTAL_MODE_DYNAMIC: {
is_dynamic = true;
} break;
case CullInstance::PORTAL_MODE_STATIC:
break;
}
@ -1335,7 +1339,7 @@ void RoomManager::_process_static(Room *p_room, Spatial *p_node, Vector<Vector3>
// NOTE the is_visible check MAY cause problems if conversion run on nodes that
// aren't properly in the tree. It can optionally be removed. Certainly calling is_visible_in_tree
// DID cause problems.
if (mi->get_include_in_bound() && mi->is_visible()) {
if (!is_dynamic && mi->get_include_in_bound() && mi->is_visible()) {
r_room_pts.append_array(object_pts);
}
@ -1353,12 +1357,13 @@ void RoomManager::_process_static(Room *p_room, Spatial *p_node, Vector<Vector3>
AABB aabb;
// attempt to recognise this GeometryInstance and read back the geometry
if (_bound_findpoints_geom_instance(gi, object_pts, aabb)) {
// Note: never attempt to add dynamics to the room aabb
if (is_dynamic || _bound_findpoints_geom_instance(gi, object_pts, aabb)) {
// need to keep track of room bound
// NOTE the is_visible check MAY cause problems if conversion run on nodes that
// aren't properly in the tree. It can optionally be removed. Certainly calling is_visible_in_tree
// DID cause problems.
if (gi->get_include_in_bound() && gi->is_visible()) {
if (!is_dynamic && gi->get_include_in_bound() && gi->is_visible()) {
r_room_pts.append_array(object_pts);
}