-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:
Juan Linietsky
2014-04-10 00:18:27 -03:00
parent b4969373b3
commit 7ea3e8267a
66 changed files with 2748 additions and 84 deletions

View File

@@ -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() {