summaryrefslogtreecommitdiff
path: root/scene/3d/scenario_fx.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'scene/3d/scenario_fx.cpp')
-rw-r--r--scene/3d/scenario_fx.cpp27
1 files changed, 26 insertions, 1 deletions
diff --git a/scene/3d/scenario_fx.cpp b/scene/3d/scenario_fx.cpp
index 2e22ab36d3..f01c2263fb 100644
--- a/scene/3d/scenario_fx.cpp
+++ b/scene/3d/scenario_fx.cpp
@@ -40,12 +40,17 @@ void WorldEnvironment::_notification(int p_what) {
WARN_PRINT("World already has an environment (Another WorldEnvironment?), overriding.");
}
get_world()->set_environment(environment);
+ add_to_group("_world_environment_"+itos(get_world()->get_scenario().get_id()));
+
}
} else if (p_what==NOTIFICATION_EXIT_WORLD) {
- if (environment.is_valid() && get_world()->get_environment()==environment)
+ if (environment.is_valid() && get_world()->get_environment()==environment) {
get_world()->set_environment(Ref<Environment>());
+ remove_from_group("_world_environment_"+itos(get_world()->get_scenario().get_id()));
+
+ }
}
}
@@ -53,6 +58,7 @@ void WorldEnvironment::set_environment(const Ref<Environment>& p_environment) {
if (is_inside_world() && environment.is_valid() && get_world()->get_environment()==environment) {
get_world()->set_environment(Ref<Environment>());
+ remove_from_group("_world_environment_"+itos(get_world()->get_scenario().get_id()));
//clean up
}
@@ -63,7 +69,11 @@ void WorldEnvironment::set_environment(const Ref<Environment>& p_environment) {
WARN_PRINT("World already has an environment (Another WorldEnvironment?), overriding.");
}
get_world()->set_environment(environment);
+ add_to_group("_world_environment_"+itos(get_world()->get_scenario().get_id()));
+
}
+
+ update_configuration_warning();
}
Ref<Environment> WorldEnvironment::get_environment() const {
@@ -71,6 +81,21 @@ Ref<Environment> WorldEnvironment::get_environment() const {
return environment;
}
+String WorldEnvironment::get_configuration_warning() const {
+
+ if (!is_visible() || !is_inside_tree() || !environment.is_valid())
+ return String();
+
+ List<Node*> nodes;
+ get_tree()->get_nodes_in_group("_world_environment_"+itos(get_world()->get_scenario().get_id()),&nodes);
+
+ if (nodes.size()>1) {
+ return TTR("Only one WorldEnvironment is allowed per scene (or set of instanced scenes).");
+ }
+
+ return String();
+}
+
void WorldEnvironment::_bind_methods() {