-Fixed a few bugs in Viewport
-Made a few demos using Viewport to show it's true power! -Fixed some start-up error messages.
This commit is contained in:
@@ -33,6 +33,7 @@
|
||||
#include "scene/scene_string_names.h"
|
||||
#include "scene/resources/packed_scene.h"
|
||||
#include "io/resource_loader.h"
|
||||
#include "viewport.h"
|
||||
|
||||
VARIANT_ENUM_CAST(Node::PauseMode);
|
||||
|
||||
@@ -76,12 +77,25 @@ void Node::_notification(int p_notification) {
|
||||
data.pause_owner=this;
|
||||
}
|
||||
|
||||
if (data.input)
|
||||
add_to_group("_vp_input"+itos(get_viewport()->get_instance_ID()));
|
||||
if (data.unhandled_input)
|
||||
add_to_group("_vp_unhandled_input"+itos(get_viewport()->get_instance_ID()));
|
||||
if (data.unhandled_key_input)
|
||||
add_to_group("_vp_unhandled_key_input"+itos(get_viewport()->get_instance_ID()));
|
||||
|
||||
get_scene()->node_count++;
|
||||
|
||||
} break;
|
||||
case NOTIFICATION_EXIT_SCENE: {
|
||||
|
||||
get_scene()->node_count--;
|
||||
if (data.input)
|
||||
remove_from_group("_vp_input"+itos(get_viewport()->get_instance_ID()));
|
||||
if (data.unhandled_input)
|
||||
remove_from_group("_vp_unhandled_input"+itos(get_viewport()->get_instance_ID()));
|
||||
if (data.unhandled_key_input)
|
||||
remove_from_group("_vp_unhandled_key_input"+itos(get_viewport()->get_instance_ID()));
|
||||
|
||||
} break;
|
||||
case NOTIFICATION_READY: {
|
||||
@@ -148,6 +162,9 @@ void Node::_propagate_enter_scene() {
|
||||
data.depth=1;
|
||||
}
|
||||
|
||||
data.viewport = cast_to<Viewport>();
|
||||
if (!data.viewport)
|
||||
data.viewport = data.parent->data.viewport;
|
||||
|
||||
data.inside_scene=true;
|
||||
|
||||
@@ -158,6 +175,7 @@ void Node::_propagate_enter_scene() {
|
||||
data.scene->add_to_group(*K,this);
|
||||
}
|
||||
|
||||
|
||||
notification(NOTIFICATION_ENTER_SCENE);
|
||||
|
||||
if (get_script_instance()) {
|
||||
@@ -216,6 +234,8 @@ void Node::_propagate_exit_scene() {
|
||||
data.scene->remove_from_group(*K,this);
|
||||
}
|
||||
|
||||
data.viewport = NULL;
|
||||
|
||||
if (data.scene)
|
||||
data.scene->tree_changed();
|
||||
|
||||
@@ -324,7 +344,7 @@ void Node::set_pause_mode(PauseMode p_mode) {
|
||||
if (data.pause_mode==PAUSE_MODE_INHERIT) {
|
||||
|
||||
if (data.parent)
|
||||
data.parent->data.pause_owner;
|
||||
owner=data.parent->data.pause_owner;
|
||||
} else {
|
||||
owner=this;
|
||||
}
|
||||
@@ -421,11 +441,17 @@ void Node::set_process_input(bool p_enable) {
|
||||
|
||||
if (p_enable==data.input)
|
||||
return;
|
||||
|
||||
data.input=p_enable;
|
||||
if (!is_inside_scene())
|
||||
return;
|
||||
|
||||
if (p_enable)
|
||||
add_to_group("input");
|
||||
add_to_group("_vp_input"+itos(get_viewport()->get_instance_ID()));
|
||||
else
|
||||
remove_from_group("input");
|
||||
remove_from_group("_vp_input"+itos(get_viewport()->get_instance_ID()));
|
||||
|
||||
|
||||
}
|
||||
|
||||
bool Node::is_processing_input() const {
|
||||
@@ -437,18 +463,41 @@ void Node::set_process_unhandled_input(bool p_enable) {
|
||||
if (p_enable==data.unhandled_input)
|
||||
return;
|
||||
data.unhandled_input=p_enable;
|
||||
if (!is_inside_scene())
|
||||
return;
|
||||
|
||||
if (p_enable)
|
||||
add_to_group("unhandled_input");
|
||||
add_to_group("_vp_unhandled_input"+itos(get_viewport()->get_instance_ID()));
|
||||
else
|
||||
remove_from_group("unhandled_input");
|
||||
remove_from_group("_vp_unhandled_input"+itos(get_viewport()->get_instance_ID()));
|
||||
}
|
||||
|
||||
|
||||
bool Node::is_processing_unhandled_input() const {
|
||||
return data.unhandled_input;
|
||||
}
|
||||
|
||||
|
||||
void Node::set_process_unhandled_key_input(bool p_enable) {
|
||||
|
||||
if (p_enable==data.unhandled_key_input)
|
||||
return;
|
||||
data.unhandled_key_input=p_enable;
|
||||
if (!is_inside_scene())
|
||||
return;
|
||||
|
||||
if (p_enable)
|
||||
add_to_group("_vp_unhandled_key_input"+itos(get_viewport()->get_instance_ID()));
|
||||
else
|
||||
remove_from_group("_vp_unhandled_key_input"+itos(get_viewport()->get_instance_ID()));
|
||||
}
|
||||
|
||||
|
||||
bool Node::is_processing_unhandled_key_input() const {
|
||||
return data.unhandled_key_input;
|
||||
}
|
||||
|
||||
|
||||
StringName Node::get_name() const {
|
||||
|
||||
return data.name;
|
||||
@@ -1682,6 +1731,8 @@ void Node::_bind_methods() {
|
||||
ObjectTypeDB::bind_method(_MD("is_processing_input"),&Node::is_processing_input);
|
||||
ObjectTypeDB::bind_method(_MD("set_process_unhandled_input","enable"),&Node::set_process_unhandled_input);
|
||||
ObjectTypeDB::bind_method(_MD("is_processing_unhandled_input"),&Node::is_processing_unhandled_input);
|
||||
ObjectTypeDB::bind_method(_MD("set_process_unhandled_key_input","enable"),&Node::set_process_unhandled_key_input);
|
||||
ObjectTypeDB::bind_method(_MD("is_processing_unhandled_key_input"),&Node::is_processing_unhandled_key_input);
|
||||
ObjectTypeDB::bind_method(_MD("set_pause_mode","mode"),&Node::set_pause_mode);
|
||||
ObjectTypeDB::bind_method(_MD("get_pause_mode"),&Node::get_pause_mode);
|
||||
ObjectTypeDB::bind_method(_MD("can_process"),&Node::can_process);
|
||||
@@ -1693,6 +1744,8 @@ void Node::_bind_methods() {
|
||||
ObjectTypeDB::bind_method(_MD("duplicate:Node"),&Node::duplicate);
|
||||
ObjectTypeDB::bind_method(_MD("replace_by","node:Node","keep_data"),&Node::replace_by,DEFVAL(false));
|
||||
|
||||
ObjectTypeDB::bind_method(_MD("get_viewport"),&Node::get_viewport);
|
||||
|
||||
ObjectTypeDB::bind_method(_MD("queue_free"),&Node::queue_delete);
|
||||
|
||||
BIND_CONSTANT( NOTIFICATION_ENTER_SCENE );
|
||||
@@ -1748,13 +1801,15 @@ Node::Node() {
|
||||
data.inside_scene=false;
|
||||
|
||||
data.owner=NULL;
|
||||
data.OW=false;
|
||||
data.OW=NULL;
|
||||
data.input=false;
|
||||
data.unhandled_input=false;
|
||||
data.unhandled_key_input=false;
|
||||
data.pause_mode=PAUSE_MODE_INHERIT;
|
||||
data.pause_owner=NULL;
|
||||
data.parent_owned=false;
|
||||
data.in_constructor=true;
|
||||
data.viewport=NULL;
|
||||
}
|
||||
|
||||
Node::~Node() {
|
||||
|
||||
Reference in New Issue
Block a user