Merge pull request #88807 from lawnjelly/portals_fix_enter_tree_order
[3.x] Portals - defer setting active in `VisualServer` until enter tree
This commit is contained in:
commit
1869243644
1 changed files with 13 additions and 3 deletions
|
@ -162,10 +162,13 @@ void Portal::_notification(int p_what) {
|
|||
case NOTIFICATION_ENTER_WORLD: {
|
||||
ERR_FAIL_COND(get_world().is_null());
|
||||
|
||||
// defer full creation of the visual server portal to when the editor portal is in the scene tree
|
||||
// Defer full creation of the visual server portal to when the editor portal is in the scene tree.
|
||||
VisualServer::get_singleton()->portal_set_scenario(_portal_rid, get_world()->get_scenario());
|
||||
|
||||
// we can't calculate world points until we have entered the tree
|
||||
// Update any components in visual server that require the scenario to be set.
|
||||
VisualServer::get_singleton()->portal_set_active(_portal_rid, _settings_active);
|
||||
|
||||
// We can't calculate world points until we have entered the tree.
|
||||
portal_update();
|
||||
update_gizmo();
|
||||
|
||||
|
@ -192,7 +195,14 @@ void Portal::_notification(int p_what) {
|
|||
|
||||
void Portal::set_portal_active(bool p_active) {
|
||||
_settings_active = p_active;
|
||||
VisualServer::get_singleton()->portal_set_active(_portal_rid, p_active);
|
||||
|
||||
// This can be called prior to entering the tree when loading packed scene,
|
||||
// where the scenario has not yet been set (and thus the visual server portal
|
||||
// is not yet fully created).
|
||||
// We therefore defer setting this until entering the tree.
|
||||
if (is_inside_tree()) {
|
||||
VisualServer::get_singleton()->portal_set_active(_portal_rid, p_active);
|
||||
}
|
||||
}
|
||||
|
||||
bool Portal::get_portal_active() const {
|
||||
|
|
Loading…
Reference in a new issue