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: {
|
case NOTIFICATION_ENTER_WORLD: {
|
||||||
ERR_FAIL_COND(get_world().is_null());
|
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());
|
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();
|
portal_update();
|
||||||
update_gizmo();
|
update_gizmo();
|
||||||
|
|
||||||
|
@ -192,7 +195,14 @@ void Portal::_notification(int p_what) {
|
||||||
|
|
||||||
void Portal::set_portal_active(bool p_active) {
|
void Portal::set_portal_active(bool p_active) {
|
||||||
_settings_active = 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 {
|
bool Portal::get_portal_active() const {
|
||||||
|
|
Loading…
Reference in a new issue