diff options
Diffstat (limited to 'scene/main/node.cpp')
| -rw-r--r-- | scene/main/node.cpp | 1318 |
1 files changed, 595 insertions, 723 deletions
diff --git a/scene/main/node.cpp b/scene/main/node.cpp index 5702f5bb3..8f02de4c4 100644 --- a/scene/main/node.cpp +++ b/scene/main/node.cpp @@ -27,62 +27,59 @@ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /*************************************************************************/ #include "node.h" -#include "print_string.h" +#include "instance_placeholder.h" +#include "io/resource_loader.h" #include "message_queue.h" -#include "scene/scene_string_names.h" +#include "print_string.h" #include "scene/resources/packed_scene.h" -#include "io/resource_loader.h" +#include "scene/scene_string_names.h" #include "viewport.h" -#include "instance_placeholder.h" VARIANT_ENUM_CAST(Node::PauseMode); - - - void Node::_notification(int p_notification) { - switch(p_notification) { + switch (p_notification) { case NOTIFICATION_PROCESS: { if (get_script_instance()) { - Variant time=get_process_delta_time(); - const Variant*ptr[1]={&time}; + Variant time = get_process_delta_time(); + const Variant *ptr[1] = { &time }; Variant::CallError err; - get_script_instance()->call_multilevel(SceneStringNames::get_singleton()->_process,ptr,1); + get_script_instance()->call_multilevel(SceneStringNames::get_singleton()->_process, ptr, 1); } } break; case NOTIFICATION_FIXED_PROCESS: { if (get_script_instance()) { - Variant time=get_fixed_process_delta_time(); - const Variant*ptr[1]={&time}; + Variant time = get_fixed_process_delta_time(); + const Variant *ptr[1] = { &time }; Variant::CallError err; - get_script_instance()->call_multilevel(SceneStringNames::get_singleton()->_fixed_process,ptr,1); + get_script_instance()->call_multilevel(SceneStringNames::get_singleton()->_fixed_process, ptr, 1); } } break; case NOTIFICATION_ENTER_TREE: { - if (data.pause_mode==PAUSE_MODE_INHERIT) { + if (data.pause_mode == PAUSE_MODE_INHERIT) { if (data.parent) - data.pause_owner=data.parent->data.pause_owner; + data.pause_owner = data.parent->data.pause_owner; else - data.pause_owner=NULL; + data.pause_owner = NULL; } else { - data.pause_owner=this; + data.pause_owner = this; } if (data.input) - add_to_group("_vp_input"+itos(get_viewport()->get_instance_ID())); + 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())); + 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())); + add_to_group("_vp_unhandled_key_input" + itos(get_viewport()->get_instance_ID())); get_tree()->node_count++; @@ -91,11 +88,11 @@ void Node::_notification(int p_notification) { get_tree()->node_count--; if (data.input) - remove_from_group("_vp_input"+itos(get_viewport()->get_instance_ID())); + 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())); + 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())); + remove_from_group("_vp_unhandled_key_input" + itos(get_viewport()->get_instance_ID())); } break; case NOTIFICATION_READY: { @@ -103,19 +100,19 @@ void Node::_notification(int p_notification) { if (get_script_instance()) { Variant::CallError err; - get_script_instance()->call_multilevel_reversed(SceneStringNames::get_singleton()->_ready,NULL,0); + get_script_instance()->call_multilevel_reversed(SceneStringNames::get_singleton()->_ready, NULL, 0); } //emit_signal(SceneStringNames::get_singleton()->enter_tree); } break; case NOTIFICATION_POSTINITIALIZE: { - data.in_constructor=false; + data.in_constructor = false; } break; case NOTIFICATION_PREDELETE: { set_owner(NULL); - while ( data.owned.size() ) { + while (data.owned.size()) { data.owned.front()->get()->set_owner(NULL); } @@ -126,69 +123,64 @@ void Node::_notification(int p_notification) { } // kill children as cleanly as possible - while( data.children.size() ) { + while (data.children.size()) { Node *child = data.children[0]; remove_child(child); - memdelete( child ); + memdelete(child); } } break; } } - void Node::_propagate_ready() { - data.ready_notified=true; + data.ready_notified = true; data.blocked++; - for (int i=0;i<data.children.size();i++) { + for (int i = 0; i < data.children.size(); i++) { data.children[i]->_propagate_ready(); } data.blocked--; notification(NOTIFICATION_READY); - } - void Node::_propagate_enter_tree() { // this needs to happen to all childs before any enter_tree if (data.parent) { - data.tree=data.parent->data.tree; - data.depth=data.parent->data.depth+1; + data.tree = data.parent->data.tree; + data.depth = data.parent->data.depth + 1; } else { - data.depth=1; + data.depth = 1; } data.viewport = cast_to<Viewport>(); if (!data.viewport) data.viewport = data.parent->data.viewport; - data.inside_tree=true; + data.inside_tree = true; - for (Map< StringName, GroupData>::Element *E=data.grouped.front();E;E=E->next()) { - E->get().group=data.tree->add_to_group(E->key(),this); + for (Map<StringName, GroupData>::Element *E = data.grouped.front(); E; E = E->next()) { + E->get().group = data.tree->add_to_group(E->key(), this); } - notification(NOTIFICATION_ENTER_TREE); if (get_script_instance()) { Variant::CallError err; - get_script_instance()->call_multilevel_reversed(SceneStringNames::get_singleton()->_enter_tree,NULL,0); + get_script_instance()->call_multilevel_reversed(SceneStringNames::get_singleton()->_enter_tree, NULL, 0); } emit_signal(SceneStringNames::get_singleton()->enter_tree); - data.blocked++; //block while adding children - for (int i=0;i<data.children.size();i++) { + for (int i = 0; i < data.children.size(); i++) { if (!data.children[i]->is_inside_tree()) // could have been added in enter_tree data.children[i]->_propagate_enter_tree(); @@ -198,7 +190,7 @@ void Node::_propagate_enter_tree() { #ifdef DEBUG_ENABLED - if (ScriptDebugger::get_singleton() && data.filename!=String()) { + if (ScriptDebugger::get_singleton() && data.filename != String()) { //used for live edit data.tree->live_scene_edit_cache[data.filename].insert(this); } @@ -206,27 +198,25 @@ void Node::_propagate_enter_tree() { // enter groups } - - void Node::_propagate_exit_tree() { - //block while removing children +//block while removing children #ifdef DEBUG_ENABLED - if (ScriptDebugger::get_singleton() && data.filename!=String()) { + if (ScriptDebugger::get_singleton() && data.filename != String()) { //used for live edit - Map<String,Set<Node*> >::Element *E=data.tree->live_scene_edit_cache.find(data.filename); + Map<String, Set<Node *> >::Element *E = data.tree->live_scene_edit_cache.find(data.filename); if (E) { E->get().erase(this); - if (E->get().size()==0) { + if (E->get().size() == 0) { data.tree->live_scene_edit_cache.erase(E); } } - Map<Node*,Map<ObjectID,Node*> >::Element *F=data.tree->live_edit_remove_list.find(this); + Map<Node *, Map<ObjectID, Node *> >::Element *F = data.tree->live_edit_remove_list.find(this); if (F) { - for (Map<ObjectID,Node*>::Element*G=F->get().front();G;G=G->next()) { + for (Map<ObjectID, Node *>::Element *G = F->get().front(); G; G = G->next()) { memdelete(G->get()); } @@ -236,7 +226,7 @@ void Node::_propagate_exit_tree() { #endif data.blocked++; - for (int i=data.children.size()-1;i>=0;i--) { + for (int i = data.children.size() - 1; i >= 0; i--) { data.children[i]->_propagate_exit_tree(); } @@ -246,52 +236,45 @@ void Node::_propagate_exit_tree() { if (get_script_instance()) { Variant::CallError err; - get_script_instance()->call_multilevel(SceneStringNames::get_singleton()->_exit_tree,NULL,0); + get_script_instance()->call_multilevel(SceneStringNames::get_singleton()->_exit_tree, NULL, 0); } emit_signal(SceneStringNames::get_singleton()->exit_tree); - notification(NOTIFICATION_EXIT_TREE,true); + notification(NOTIFICATION_EXIT_TREE, true); if (data.tree) data.tree->node_removed(this); // exit groups - for (Map< StringName, GroupData>::Element *E=data.grouped.front();E;E=E->next()) { - data.tree->remove_from_group(E->key(),this); - E->get().group=NULL; + for (Map<StringName, GroupData>::Element *E = data.grouped.front(); E; E = E->next()) { + data.tree->remove_from_group(E->key(), this); + E->get().group = NULL; } - data.viewport = NULL; if (data.tree) data.tree->tree_changed(); - data.inside_tree=false; - data.tree=NULL; - data.depth=-1; - + data.inside_tree = false; + data.tree = NULL; + data.depth = -1; } - - - - -void Node::move_child(Node *p_child,int p_pos) { +void Node::move_child(Node *p_child, int p_pos) { ERR_FAIL_NULL(p_child); - ERR_EXPLAIN("Invalid new child position: "+itos(p_pos)); - ERR_FAIL_INDEX( p_pos, data.children.size()+1 ); + ERR_EXPLAIN("Invalid new child position: " + itos(p_pos)); + ERR_FAIL_INDEX(p_pos, data.children.size() + 1); ERR_EXPLAIN("child is not a child of this node."); - ERR_FAIL_COND(p_child->data.parent!=this); - if (data.blocked>0) { + ERR_FAIL_COND(p_child->data.parent != this); + if (data.blocked > 0) { ERR_EXPLAIN("Parent node is busy setting up children, move_child() failed. Consider using call_deferred(\"move_child\") instead (or \"popup\" if this is from a popup)."); - ERR_FAIL_COND(data.blocked>0); + ERR_FAIL_COND(data.blocked > 0); } - - data.children.remove( p_child->data.pos ); - data.children.insert( p_pos, p_child ); + data.children.remove(p_child->data.pos); + data.children.insert(p_pos, p_child); if (data.tree) { data.tree->tree_changed(); @@ -299,22 +282,20 @@ void Node::move_child(Node *p_child,int p_pos) { data.blocked++; //new pos first - for (int i=0;i<data.children.size();i++) { + for (int i = 0; i < data.children.size(); i++) { - data.children[i]->data.pos=i; + data.children[i]->data.pos = i; } // notification second move_child_notify(p_child); - for (int i=0;i<data.children.size();i++) { - data.children[i]->notification( NOTIFICATION_MOVED_IN_PARENT ); - + for (int i = 0; i < data.children.size(); i++) { + data.children[i]->notification(NOTIFICATION_MOVED_IN_PARENT); } - for (const Map< StringName, GroupData>::Element *E=p_child->data.grouped.front();E;E=E->next()) { - E->get().group->changed=true; + for (const Map<StringName, GroupData>::Element *E = p_child->data.grouped.front(); E; E = E->next()) { + E->get().group->changed = true; } data.blocked--; - } void Node::raise() { @@ -322,8 +303,7 @@ void Node::raise() { if (!data.parent) return; - data.parent->move_child(this,data.parent->data.children.size()-1); - + data.parent->move_child(this, data.parent->data.children.size() - 1); } void Node::add_child_notify(Node *p_child) { @@ -355,46 +335,43 @@ void Node::move_child_notify(Node *p_child) { void Node::set_fixed_process(bool p_process) { - if (data.fixed_process==p_process) + if (data.fixed_process == p_process) return; - data.fixed_process=p_process; + data.fixed_process = p_process; if (data.fixed_process) - add_to_group("fixed_process",false); + add_to_group("fixed_process", false); else remove_from_group("fixed_process"); - data.fixed_process=p_process; + data.fixed_process = p_process; _change_notify("fixed_process"); } void Node::set_pause_mode(PauseMode p_mode) { - if (data.pause_mode==p_mode) + if (data.pause_mode == p_mode) return; - bool prev_inherits=data.pause_mode==PAUSE_MODE_INHERIT; - data.pause_mode=p_mode; + bool prev_inherits = data.pause_mode == PAUSE_MODE_INHERIT; + data.pause_mode = p_mode; if (!is_inside_tree()) return; //pointless - if ((data.pause_mode==PAUSE_MODE_INHERIT) == prev_inherits) + if ((data.pause_mode == PAUSE_MODE_INHERIT) == prev_inherits) return; ///nothing changed - Node *owner=NULL; + Node *owner = NULL; - if (data.pause_mode==PAUSE_MODE_INHERIT) { + if (data.pause_mode == PAUSE_MODE_INHERIT) { if (data.parent) - owner=data.parent->data.pause_owner; + owner = data.parent->data.pause_owner; } else { - owner=this; + owner = this; } _propagate_pause_owner(owner); - - - } Node::PauseMode Node::get_pause_mode() const { @@ -402,12 +379,12 @@ Node::PauseMode Node::get_pause_mode() const { return data.pause_mode; } -void Node::_propagate_pause_owner(Node*p_owner) { +void Node::_propagate_pause_owner(Node *p_owner) { - if (data.pause_mode!=PAUSE_MODE_INHERIT) + if (data.pause_mode != PAUSE_MODE_INHERIT) return; - data.pause_owner=p_owner; - for(int i=0;i<data.children.size();i++) { + data.pause_owner = p_owner; + for (int i = 0; i < data.children.size(); i++) { data.children[i]->_propagate_pause_owner(p_owner); } @@ -415,32 +392,30 @@ void Node::_propagate_pause_owner(Node*p_owner) { bool Node::can_process() const { - ERR_FAIL_COND_V( !is_inside_tree(), false ); + ERR_FAIL_COND_V(!is_inside_tree(), false); if (get_tree()->is_paused()) { - if (data.pause_mode==PAUSE_MODE_STOP) + if (data.pause_mode == PAUSE_MODE_STOP) return false; - if (data.pause_mode==PAUSE_MODE_PROCESS) + if (data.pause_mode == PAUSE_MODE_PROCESS) return true; - if (data.pause_mode==PAUSE_MODE_INHERIT) { + if (data.pause_mode == PAUSE_MODE_INHERIT) { if (!data.pause_owner) return false; //clearly no pause owner by default - if (data.pause_owner->data.pause_mode==PAUSE_MODE_PROCESS) + if (data.pause_owner->data.pause_mode == PAUSE_MODE_PROCESS) return true; - if (data.pause_owner->data.pause_mode==PAUSE_MODE_STOP) + if (data.pause_owner->data.pause_mode == PAUSE_MODE_STOP) return false; } - } return true; } - float Node::get_fixed_process_delta_time() const { if (data.tree) @@ -451,17 +426,17 @@ float Node::get_fixed_process_delta_time() const { void Node::set_process(bool p_idle_process) { - if (data.idle_process==p_idle_process) + if (data.idle_process == p_idle_process) return; - data.idle_process=p_idle_process; + data.idle_process = p_idle_process; if (data.idle_process) - add_to_group("idle_process",false); + add_to_group("idle_process", false); else remove_from_group("idle_process"); - data.idle_process=p_idle_process; + data.idle_process = p_idle_process; _change_notify("idle_process"); } @@ -483,22 +458,19 @@ bool Node::is_processing() const { return data.idle_process; } - void Node::set_process_input(bool p_enable) { - if (p_enable==data.input) + if (p_enable == data.input) return; - data.input=p_enable; + data.input = p_enable; if (!is_inside_tree()) return; if (p_enable) - add_to_group("_vp_input"+itos(get_viewport()->get_instance_ID())); + add_to_group("_vp_input" + itos(get_viewport()->get_instance_ID())); else - remove_from_group("_vp_input"+itos(get_viewport()->get_instance_ID())); - - + remove_from_group("_vp_input" + itos(get_viewport()->get_instance_ID())); } bool Node::is_processing_input() const { @@ -507,61 +479,56 @@ bool Node::is_processing_input() const { void Node::set_process_unhandled_input(bool p_enable) { - if (p_enable==data.unhandled_input) + if (p_enable == data.unhandled_input) return; - data.unhandled_input=p_enable; + data.unhandled_input = p_enable; if (!is_inside_tree()) return; if (p_enable) - add_to_group("_vp_unhandled_input"+itos(get_viewport()->get_instance_ID())); + add_to_group("_vp_unhandled_input" + itos(get_viewport()->get_instance_ID())); else - remove_from_group("_vp_unhandled_input"+itos(get_viewport()->get_instance_ID())); + 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) + if (p_enable == data.unhandled_key_input) return; - data.unhandled_key_input=p_enable; + data.unhandled_key_input = p_enable; if (!is_inside_tree()) return; if (p_enable) - add_to_group("_vp_unhandled_key_input"+itos(get_viewport()->get_instance_ID())); + 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())); + 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; } -void Node::_set_name_nocheck(const StringName& p_name) { - - data.name=p_name; +void Node::_set_name_nocheck(const StringName &p_name) { + data.name = p_name; } -void Node::set_name(const String& p_name) { +void Node::set_name(const String &p_name) { - String name=p_name.replace(":","").replace("/","").replace("@",""); + String name = p_name.replace(":", "").replace("/", "").replace("@", ""); - ERR_FAIL_COND(name==""); - data.name=name; + ERR_FAIL_COND(name == ""); + data.name = name; if (data.parent) { @@ -575,7 +542,7 @@ void Node::set_name(const String& p_name) { } } -static bool node_hrcr=false; +static bool node_hrcr = false; static SafeRefCount node_hrcr_count; void Node::init_node_hrcr() { @@ -584,40 +551,37 @@ void Node::init_node_hrcr() { void Node::set_human_readable_collision_renaming(bool p_enabled) { - node_hrcr=p_enabled; + node_hrcr = p_enabled; } - - -String Node::validate_child_name(const String& p_name) const { +String Node::validate_child_name(const String &p_name) const { //this approach to autoset node names is human readable but very slow //it's turned on while running in the editor String basename = p_name; - if (basename==String()) { + if (basename == String()) { return String(); } - int val=1; + int val = 1; - for(;;) { + for (;;) { - String attempted = val > 1 ? (basename + " " +itos(val) ) : basename; + String attempted = val > 1 ? (basename + " " + itos(val)) : basename; - bool found=false; + bool found = false; - for (int i=0;i<data.children.size();i++) { + for (int i = 0; i < data.children.size(); i++) { //if (data.children[i]==p_child) // continue; if (data.children[i]->get_name() == attempted) { - found=true; + found = true; break; } - } if (found) { @@ -631,7 +595,6 @@ String Node::validate_child_name(const String& p_name) const { } return basename; - } void Node::_validate_child_name(Node *p_child, bool p_force_human_readable) { @@ -645,28 +608,27 @@ void Node::_validate_child_name(Node *p_child, bool p_force_human_readable) { String basename = p_child->data.name; - if (basename=="") { + if (basename == "") { basename = p_child->get_type(); } - int val=1; + int val = 1; - for(;;) { + for (;;) { - String attempted = val > 1 ? (basename + " " +itos(val) ) : basename; + String attempted = val > 1 ? (basename + " " + itos(val)) : basename; - bool found=false; + bool found = false; - for (int i=0;i<data.children.size();i++) { + for (int i = 0; i < data.children.size(); i++) { - if (data.children[i]==p_child) + if (data.children[i] == p_child) continue; if (data.children[i]->get_name() == attempted) { - found=true; + found = true; break; } - } if (found) { @@ -675,7 +637,7 @@ void Node::_validate_child_name(Node *p_child, bool p_force_human_readable) { continue; } - p_child->data.name=attempted; + p_child->data.name = attempted; break; } } else { @@ -683,21 +645,21 @@ void Node::_validate_child_name(Node *p_child, bool p_force_human_readable) { //this approach to autoset node names is fast but not as readable //it's the default and reserves the '@' character for unique names. - bool unique=true; + bool unique = true; - if (p_child->data.name==StringName() || p_child->data.name.operator String()[0]=='@') { + if (p_child->data.name == StringName() || p_child->data.name.operator String()[0] == '@') { //new unique name must be assigned - unique=false; + unique = false; } else { //check if exists - Node **childs=data.children.ptr(); + Node **childs = data.children.ptr(); int cc = data.children.size(); - for(int i=0;i<cc;i++) { - if (childs[i]==p_child) + for (int i = 0; i < cc; i++) { + if (childs[i] == p_child) continue; - if (childs[i]->data.name==p_child->data.name) { - unique=false; + if (childs[i]->data.name == p_child->data.name) { + unique = false; break; } } @@ -706,19 +668,19 @@ void Node::_validate_child_name(Node *p_child, bool p_force_human_readable) { if (!unique) { node_hrcr_count.ref(); - String name = "@"+String(p_child->get_name())+"@"+itos(node_hrcr_count.get()); - p_child->data.name=name; + String name = "@" + String(p_child->get_name()) + "@" + itos(node_hrcr_count.get()); + p_child->data.name = name; } } } -void Node::_add_child_nocheck(Node* p_child,const StringName& p_name) { +void Node::_add_child_nocheck(Node *p_child, const StringName &p_name) { //add a child node quickly, without name validation - p_child->data.name=p_name; - p_child->data.pos=data.children.size(); - data.children.push_back( p_child ); - p_child->data.parent=this; + p_child->data.name = p_name; + p_child->data.pos = data.children.size(); + data.children.push_back(p_child); + p_child->data.parent = this; p_child->notification(NOTIFICATION_PARENTED); if (data.tree) { @@ -727,37 +689,33 @@ void Node::_add_child_nocheck(Node* p_child,const StringName& p_name) { /* Notify */ //recognize childs created in this node constructor - p_child->data.parent_owned=data.in_constructor; + p_child->data.parent_owned = data.in_constructor; add_child_notify(p_child); - - } - void Node::add_child(Node *p_child, bool p_legible_unique_name) { ERR_FAIL_NULL(p_child); /* Fail if node has a parent */ - if (p_child==this) { - ERR_EXPLAIN("Can't add child "+p_child->get_name()+" to itself.") - ERR_FAIL_COND( p_child==this ); // adding to itself! + if (p_child == this) { + ERR_EXPLAIN("Can't add child " + p_child->get_name() + " to itself.") + ERR_FAIL_COND(p_child == this); // adding to itself! } ERR_EXPLAIN("Can't add child, already has a parent"); - ERR_FAIL_COND( p_child->data.parent ); + ERR_FAIL_COND(p_child->data.parent); - if (data.blocked>0) { + if (data.blocked > 0) { ERR_EXPLAIN("Parent node is busy setting up children, add_node() failed. Consider using call_deferred(\"add_child\",child) instead."); - ERR_FAIL_COND(data.blocked>0); + ERR_FAIL_COND(data.blocked > 0); } ERR_EXPLAIN("Can't add child while a notification is happening"); - ERR_FAIL_COND( data.blocked > 0 ); + ERR_FAIL_COND(data.blocked > 0); /* Validate name */ - _validate_child_name(p_child,p_legible_unique_name); - - _add_child_nocheck(p_child,p_child->data.name); + _validate_child_name(p_child, p_legible_unique_name); + _add_child_nocheck(p_child, p_child->data.name); } void Node::add_child_below_node(Node *p_node, Node *p_child, bool p_legible_unique_name) { @@ -770,39 +728,32 @@ void Node::add_child_below_node(Node *p_node, Node *p_child, bool p_legible_uniq } } - void Node::_propagate_validate_owner() { if (data.owner) { - bool found=false; + bool found = false; Node *parent = data.parent; - while(parent) { - + while (parent) { - if (parent==data.owner) { + if (parent == data.owner) { - found=true; + found = true; break; } - parent=parent->data.parent; + parent = parent->data.parent; } - if (!found) { - data.owner->data.owned.erase(data.OW); - data.owner=NULL; + data.owner = NULL; } - } - - for(int i=0;i<data.children.size();i++) { - + for (int i = 0; i < data.children.size(); i++) { data.children[i]->_propagate_validate_owner(); } @@ -811,28 +762,27 @@ void Node::_propagate_validate_owner() { void Node::remove_child(Node *p_child) { ERR_FAIL_NULL(p_child); - if (data.blocked>0) { + if (data.blocked > 0) { ERR_EXPLAIN("Parent node is busy setting up children, remove_node() failed. Consider using call_deferred(\"remove_child\",child) instead."); - ERR_FAIL_COND(data.blocked>0); + ERR_FAIL_COND(data.blocked > 0); } - int idx=-1; - for (int i=0;i<data.children.size();i++) { + int idx = -1; + for (int i = 0; i < data.children.size(); i++) { - if (data.children[i]==p_child) { + if (data.children[i] == p_child) { - idx=i; + idx = i; break; } } - ERR_FAIL_COND( idx==-1 ); + ERR_FAIL_COND(idx == -1); //ERR_FAIL_COND( p_child->data.blocked > 0 ); - //if (data.scene) { does not matter - p_child->_set_tree(NULL); + p_child->_set_tree(NULL); //} remove_child_notify(p_child); @@ -840,19 +790,16 @@ void Node::remove_child(Node *p_child) { data.children.remove(idx); - for (int i=idx;i<data.children.size();i++) { + for (int i = idx; i < data.children.size(); i++) { - data.children[i]->data.pos=i; + data.children[i]->data.pos = i; } - p_child->data.parent=NULL; - p_child->data.pos=-1; - - + p_child->data.parent = NULL; + p_child->data.pos = -1; // validate owner p_child->_propagate_validate_owner(); - } int Node::get_child_count() const { @@ -861,75 +808,72 @@ int Node::get_child_count() const { } Node *Node::get_child(int p_index) const { - ERR_FAIL_INDEX_V( p_index, data.children.size(), NULL ); + ERR_FAIL_INDEX_V(p_index, data.children.size(), NULL); return data.children[p_index]; } +Node *Node::_get_child_by_name(const StringName &p_name) const { -Node *Node::_get_child_by_name(const StringName& p_name) const { + int cc = data.children.size(); + Node *const *cd = data.children.ptr(); - int cc=data.children.size(); - Node* const* cd=data.children.ptr(); - - for(int i=0;i<cc;i++){ - if (cd[i]->data.name==p_name) + for (int i = 0; i < cc; i++) { + if (cd[i]->data.name == p_name) return cd[i]; } return NULL; } -Node *Node::_get_node(const NodePath& p_path) const { +Node *Node::_get_node(const NodePath &p_path) const { if (!data.inside_tree && p_path.is_absolute()) { ERR_EXPLAIN("Can't use get_node() with absolute paths from outside the active scene tree."); ERR_FAIL_V(NULL); } - Node *current=NULL; - Node *root=NULL; + Node *current = NULL; + Node *root = NULL; if (!p_path.is_absolute()) { - current=const_cast<Node*>(this); //start from this + current = const_cast<Node *>(this); //start from this } else { - root=const_cast<Node*>(this); + root = const_cast<Node *>(this); while (root->data.parent) - root=root->data.parent; //start from root + root = root->data.parent; //start from root } - - for(int i=0;i<p_path.get_name_count();i++) { - + for (int i = 0; i < p_path.get_name_count(); i++) { StringName name = p_path.get_name(i); Node *next = NULL; - if (name==SceneStringNames::get_singleton()->dot) { // . + if (name == SceneStringNames::get_singleton()->dot) { // . - next=current; + next = current; - } else if (name==SceneStringNames::get_singleton()->doubledot) { // .. + } else if (name == SceneStringNames::get_singleton()->doubledot) { // .. - if (current==NULL || !current->data.parent) + if (current == NULL || !current->data.parent) return NULL; - next=current->data.parent; - } else if (current==NULL) { + next = current->data.parent; + } else if (current == NULL) { - if (name==root->get_name()) - next=root; + if (name == root->get_name()) + next = root; } else { - next=NULL; + next = NULL; - for(int j=0;j<current->data.children.size();j++) { + for (int j = 0; j < current->data.children.size(); j++) { Node *child = current->data.children[j]; - if ( child->data.name == name ) { + if (child->data.name == name) { next = child; break; @@ -939,33 +883,32 @@ Node *Node::_get_node(const NodePath& p_path) const { return NULL; }; } - current=next; + current = next; } return current; } -Node *Node::get_node(const NodePath& p_path) const { +Node *Node::get_node(const NodePath &p_path) const { Node *node = _get_node(p_path); if (!node) { - ERR_EXPLAIN("Node not found: "+p_path); - ERR_FAIL_COND_V(!node,NULL); + ERR_EXPLAIN("Node not found: " + p_path); + ERR_FAIL_COND_V(!node, NULL); } return node; } -bool Node::has_node(const NodePath& p_path) const { +bool Node::has_node(const NodePath &p_path) const { - return _get_node(p_path)!=NULL; + return _get_node(p_path) != NULL; } +Node *Node::find_node(const String &p_mask, bool p_recursive, bool p_owned) const { -Node* Node::find_node(const String& p_mask,bool p_recursive,bool p_owned) const { - - Node * const*cptr = data.children.ptr(); + Node *const *cptr = data.children.ptr(); int ccount = data.children.size(); - for(int i=0;i<ccount;i++) { + for (int i = 0; i < ccount; i++) { if (p_owned && !cptr[i]->data.owner) continue; if (cptr[i]->data.name.operator String().match(p_mask)) @@ -974,12 +917,11 @@ Node* Node::find_node(const String& p_mask,bool p_recursive,bool p_owned) const if (!p_recursive) continue; - Node* ret = cptr[i]->find_node(p_mask,true,p_owned); + Node *ret = cptr[i]->find_node(p_mask, true, p_owned); if (ret) return ret; } return NULL; - } Node *Node::get_parent() const { @@ -987,16 +929,15 @@ Node *Node::get_parent() const { return data.parent; } - bool Node::is_a_parent_of(const Node *p_node) const { - ERR_FAIL_NULL_V(p_node,false); - Node *p=p_node->data.parent; - while(p) { + ERR_FAIL_NULL_V(p_node, false); + Node *p = p_node->data.parent; + while (p) { - if (p==this) + if (p == this) return true; - p=p->data.parent; + p = p->data.parent; } return false; @@ -1004,12 +945,12 @@ bool Node::is_a_parent_of(const Node *p_node) const { bool Node::is_greater_than(const Node *p_node) const { - ERR_FAIL_NULL_V(p_node,false); - ERR_FAIL_COND_V( !data.inside_tree, false ); - ERR_FAIL_COND_V( !p_node->data.inside_tree, false ); + ERR_FAIL_NULL_V(p_node, false); + ERR_FAIL_COND_V(!data.inside_tree, false); + ERR_FAIL_COND_V(!p_node->data.inside_tree, false); - ERR_FAIL_COND_V( data.depth<0, false); - ERR_FAIL_COND_V( p_node->data.depth<0, false); + ERR_FAIL_COND_V(data.depth < 0, false); + ERR_FAIL_COND_V(p_node->data.depth < 0, false); #ifdef NO_ALLOCA Vector<int> this_stack; @@ -1019,46 +960,46 @@ bool Node::is_greater_than(const Node *p_node) const { #else - int *this_stack=(int*)alloca(sizeof(int)*data.depth); - int *that_stack=(int*)alloca(sizeof(int)*p_node->data.depth); + int *this_stack = (int *)alloca(sizeof(int) * data.depth); + int *that_stack = (int *)alloca(sizeof(int) * p_node->data.depth); #endif const Node *n = this; - int idx=data.depth-1; - while(n) { - ERR_FAIL_INDEX_V(idx, data.depth,false); - this_stack[idx--]=n->data.pos; - n=n->data.parent; + int idx = data.depth - 1; + while (n) { + ERR_FAIL_INDEX_V(idx, data.depth, false); + this_stack[idx--] = n->data.pos; + n = n->data.parent; } - ERR_FAIL_COND_V(idx!=-1,false); + ERR_FAIL_COND_V(idx != -1, false); n = p_node; - idx=p_node->data.depth-1; - while(n) { - ERR_FAIL_INDEX_V(idx, p_node->data.depth,false); - that_stack[idx--]=n->data.pos; + idx = p_node->data.depth - 1; + while (n) { + ERR_FAIL_INDEX_V(idx, p_node->data.depth, false); + that_stack[idx--] = n->data.pos; - n=n->data.parent; + n = n->data.parent; } - ERR_FAIL_COND_V(idx!=-1,false); - idx=0; + ERR_FAIL_COND_V(idx != -1, false); + idx = 0; bool res; - while(true) { + while (true) { // using -2 since out-of-tree or nonroot nodes have -1 - int this_idx = (idx >= data.depth)? -2 : this_stack[idx]; - int that_idx = (idx >= p_node->data.depth)? -2 : that_stack[idx]; + int this_idx = (idx >= data.depth) ? -2 : this_stack[idx]; + int that_idx = (idx >= p_node->data.depth) ? -2 : that_stack[idx]; if (this_idx > that_idx) { - res=true; + res = true; break; } else if (this_idx < that_idx) { - res=false; + res = false; break; - } else if (this_idx == -2 ) { - res=false; // equal + } else if (this_idx == -2) { + res = false; // equal break; } idx++; @@ -1067,25 +1008,23 @@ bool Node::is_greater_than(const Node *p_node) const { return res; } -void Node::get_owned_by(Node *p_by,List<Node*> *p_owned) { +void Node::get_owned_by(Node *p_by, List<Node *> *p_owned) { - if (data.owner==p_by) + if (data.owner == p_by) p_owned->push_back(this); - for (int i=0;i<get_child_count();i++) - get_child(i)->get_owned_by(p_by,p_owned); - + for (int i = 0; i < get_child_count(); i++) + get_child(i)->get_owned_by(p_by, p_owned); } +void Node::_set_owner_nocheck(Node *p_owner) { -void Node::_set_owner_nocheck(Node* p_owner) { - - if (data.owner==p_owner) + if (data.owner == p_owner) return; ERR_FAIL_COND(data.owner); - data.owner=p_owner; - data.owner->data.owned.push_back( this ); + data.owner = p_owner; + data.owner->data.owned.push_back(this); data.OW = data.owner->data.owned.back(); } @@ -1093,27 +1032,27 @@ void Node::set_owner(Node *p_owner) { if (data.owner) { - data.owner->data.owned.erase( data.OW ); - data.OW=NULL; - data.owner=NULL; + data.owner->data.owned.erase(data.OW); + data.OW = NULL; + data.owner = NULL; } - ERR_FAIL_COND(p_owner==this); + ERR_FAIL_COND(p_owner == this); if (!p_owner) return; - Node *check=this->get_parent(); - bool owner_valid=false; + Node *check = this->get_parent(); + bool owner_valid = false; - while(check) { + while (check) { - if (check==p_owner) { - owner_valid=true; + if (check == p_owner) { + owner_valid = true; break; } - check=check->data.parent; + check = check->data.parent; } ERR_FAIL_COND(!owner_valid); @@ -1125,115 +1064,113 @@ Node *Node::get_owner() const { return data.owner; } +Node *Node::find_common_parent_with(const Node *p_node) const { -Node* Node::find_common_parent_with(const Node *p_node) const { + if (this == p_node) + return const_cast<Node *>(p_node); - if (this==p_node) - return const_cast<Node*>(p_node); + Set<const Node *> visited; - Set<const Node*> visited; - - const Node *n=this; + const Node *n = this; - while(n) { + while (n) { visited.insert(n); - n=n->data.parent; + n = n->data.parent; } - const Node *common_parent=p_node; + const Node *common_parent = p_node; - while(common_parent) { + while (common_parent) { if (visited.has(common_parent)) break; - common_parent=common_parent->data.parent; + common_parent = common_parent->data.parent; } if (!common_parent) return NULL; - return const_cast<Node*>(common_parent); - + return const_cast<Node *>(common_parent); } NodePath Node::get_path_to(const Node *p_node) const { - ERR_FAIL_NULL_V(p_node,NodePath()); + ERR_FAIL_NULL_V(p_node, NodePath()); - if (this==p_node) + if (this == p_node) return NodePath("."); - Set<const Node*> visited; + Set<const Node *> visited; - const Node *n=this; + const Node *n = this; - while(n) { + while (n) { visited.insert(n); - n=n->data.parent; + n = n->data.parent; } - const Node *common_parent=p_node; + const Node *common_parent = p_node; - while(common_parent) { + while (common_parent) { if (visited.has(common_parent)) break; - common_parent=common_parent->data.parent; + common_parent = common_parent->data.parent; } - ERR_FAIL_COND_V(!common_parent,NodePath()); //nodes not in the same tree + ERR_FAIL_COND_V(!common_parent, NodePath()); //nodes not in the same tree visited.clear(); Vector<StringName> path; - n=p_node; + n = p_node; - while(n!=common_parent) { + while (n != common_parent) { - path.push_back( n->get_name() ); - n=n->data.parent; + path.push_back(n->get_name()); + n = n->data.parent; } - n=this; - StringName up=String(".."); + n = this; + StringName up = String(".."); - while(n!=common_parent) { + while (n != common_parent) { - path.push_back( up ); - n=n->data.parent; + path.push_back(up); + n = n->data.parent; } path.invert(); - return NodePath(path,false); + return NodePath(path, false); } NodePath Node::get_path() const { - ERR_FAIL_COND_V(!is_inside_tree(),NodePath()); + ERR_FAIL_COND_V(!is_inside_tree(), NodePath()); const Node *n = this; Vector<StringName> path; - while(n) { + while (n) { path.push_back(n->get_name()); - n=n->data.parent; + n = n->data.parent; } path.invert(); - return NodePath( path, true ); + return NodePath(path, true); } -bool Node::is_in_group(const StringName& p_identifier) const { +bool Node::is_in_group(const StringName &p_identifier) const { return data.grouped.has(p_identifier); } -void Node::add_to_group(const StringName& p_identifier,bool p_persistent) { +void Node::add_to_group(const StringName &p_identifier, bool p_persistent) { ERR_FAIL_COND(!p_identifier.operator String().length()); @@ -1243,32 +1180,28 @@ void Node::add_to_group(const StringName& p_identifier,bool p_persistent) { GroupData gd; if (data.tree) { - gd.group=data.tree->add_to_group(p_identifier,this); + gd.group = data.tree->add_to_group(p_identifier, this); } else { - gd.group=NULL; + gd.group = NULL; } - gd.persistent=p_persistent; - - data.grouped[p_identifier]=gd; + gd.persistent = p_persistent; + data.grouped[p_identifier] = gd; } -void Node::remove_from_group(const StringName& p_identifier) { +void Node::remove_from_group(const StringName &p_identifier) { + ERR_FAIL_COND(!data.grouped.has(p_identifier)); - ERR_FAIL_COND(!data.grouped.has(p_identifier) ); - - - Map< StringName, GroupData>::Element *E=data.grouped.find(p_identifier); + Map<StringName, GroupData>::Element *E = data.grouped.find(p_identifier); ERR_FAIL_COND(!E); if (data.tree) - data.tree->remove_from_group(E->key(),this); + data.tree->remove_from_group(E->key(), this); data.grouped.erase(E); - } Array Node::_get_groups() const { @@ -1276,7 +1209,7 @@ Array Node::_get_groups() const { Array groups; List<GroupInfo> gi; get_groups(&gi); - for (List<GroupInfo>::Element *E=gi.front();E;E=E->next()) { + for (List<GroupInfo>::Element *E = gi.front(); E; E = E->next()) { groups.push_back(E->get().name); } @@ -1285,33 +1218,27 @@ Array Node::_get_groups() const { void Node::get_groups(List<GroupInfo> *p_groups) const { - - for (const Map< StringName, GroupData>::Element *E=data.grouped.front();E;E=E->next()) { + for (const Map<StringName, GroupData>::Element *E = data.grouped.front(); E; E = E->next()) { GroupInfo gi; - gi.name=E->key(); - gi.persistent=E->get().persistent; + gi.name = E->key(); + gi.persistent = E->get().persistent; p_groups->push_back(gi); } - } bool Node::has_persistent_groups() const { - - for (const Map< StringName, GroupData>::Element *E=data.grouped.front();E;E=E->next()) { + for (const Map<StringName, GroupData>::Element *E = data.grouped.front(); E; E = E->next()) { if (E->get().persistent) return true; } - return false; - - } void Node::_print_tree(const Node *p_node) { print_line(String(p_node->get_path_to(this))); - for (int i=0;i<data.children.size();i++) + for (int i = 0; i < data.children.size(); i++) data.children[i]->_print_tree(p_node); } @@ -1320,16 +1247,15 @@ void Node::print_tree() { _print_tree(this); } - void Node::_propagate_reverse_notification(int p_notification) { data.blocked++; - for (int i=data.children.size()-1;i>=0;i--) { + for (int i = data.children.size() - 1; i >= 0; i--) { data.children[i]->_propagate_reverse_notification(p_notification); } - notification(p_notification,true); + notification(p_notification, true); data.blocked--; } @@ -1340,15 +1266,15 @@ void Node::_propagate_deferred_notification(int p_notification, bool p_reverse) data.blocked++; if (!p_reverse) - MessageQueue::get_singleton()->push_notification(this,p_notification); + MessageQueue::get_singleton()->push_notification(this, p_notification); - for (int i=0;i<data.children.size();i++) { + for (int i = 0; i < data.children.size(); i++) { - data.children[i]->_propagate_deferred_notification(p_notification,p_reverse); + data.children[i]->_propagate_deferred_notification(p_notification, p_reverse); } if (p_reverse) - MessageQueue::get_singleton()->push_notification(this,p_notification); + MessageQueue::get_singleton()->push_notification(this, p_notification); data.blocked--; } @@ -1358,21 +1284,20 @@ void Node::propagate_notification(int p_notification) { data.blocked++; notification(p_notification); - for (int i=0;i<data.children.size();i++) { + for (int i = 0; i < data.children.size(); i++) { data.children[i]->propagate_notification(p_notification); } data.blocked--; } - -void Node::_propagate_replace_owner(Node *p_owner,Node* p_by_owner) { - if (get_owner()==p_owner) +void Node::_propagate_replace_owner(Node *p_owner, Node *p_by_owner) { + if (get_owner() == p_owner) set_owner(p_by_owner); data.blocked++; - for (int i=0;i<data.children.size();i++) - data.children[i]->_propagate_replace_owner(p_owner,p_by_owner); + for (int i = 0; i < data.children.size(); i++) + data.children[i]->_propagate_replace_owner(p_owner, p_by_owner); data.blocked--; } @@ -1384,21 +1309,21 @@ void Node::remove_and_skip() { ERR_FAIL_COND(!data.parent); - Node *new_owner=get_owner(); + Node *new_owner = get_owner(); - List<Node*> children; + List<Node *> children; - while(true) { + while (true) { - bool clear=true; - for (int i=0;i<data.children.size();i++) { + bool clear = true; + for (int i = 0; i < data.children.size(); i++) { if (!data.children[i]->get_owner()) continue; remove_child(data.children[i]); - data.children[i]->_propagate_replace_owner(this,NULL); + data.children[i]->_propagate_replace_owner(this, NULL); children.push_back(data.children[i]); - clear=false; + clear = false; break; } @@ -1406,27 +1331,27 @@ void Node::remove_and_skip() { break; } - while(!children.empty()) { + while (!children.empty()) { - Node *c=children.front()->get(); + Node *c = children.front()->get(); data.parent->add_child(c); - c->_propagate_replace_owner(NULL,new_owner); + c->_propagate_replace_owner(NULL, new_owner); children.pop_front(); } data.parent->remove_child(this); } -void Node::set_filename(const String& p_filename) { +void Node::set_filename(const String &p_filename) { - data.filename=p_filename; + data.filename = p_filename; } String Node::get_filename() const { return data.filename; } -void Node::set_editable_instance(Node* p_node,bool p_editable) { +void Node::set_editable_instance(Node *p_node, bool p_editable) { ERR_FAIL_NULL(p_node); ERR_FAIL_COND(!is_a_parent_of(p_node)); @@ -1434,30 +1359,28 @@ void Node::set_editable_instance(Node* p_node,bool p_editable) { if (!p_editable) data.editable_instances.erase(p); else - data.editable_instances[p]=true; - + data.editable_instances[p] = true; } bool Node::is_editable_instance(Node *p_node) const { if (!p_node) return false; //easier, null is never editable :) - ERR_FAIL_COND_V(!is_a_parent_of(p_node),false); + ERR_FAIL_COND_V(!is_a_parent_of(p_node), false); NodePath p = get_path_to(p_node); return data.editable_instances.has(p); } -void Node::set_editable_instances(const HashMap<NodePath,int>& p_editable_instances) { +void Node::set_editable_instances(const HashMap<NodePath, int> &p_editable_instances) { - data.editable_instances=p_editable_instances; + data.editable_instances = p_editable_instances; } -HashMap<NodePath,int> Node::get_editable_instances() const { +HashMap<NodePath, int> Node::get_editable_instances() const { return data.editable_instances; } - #if 0 void Node::generate_instance_state() { @@ -1511,32 +1434,32 @@ Dictionary Node::get_instance_state() const { #endif -void Node::set_scene_instance_state(const Ref<SceneState>& p_state) { +void Node::set_scene_instance_state(const Ref<SceneState> &p_state) { - data.instance_state=p_state; + data.instance_state = p_state; } -Ref<SceneState> Node::get_scene_instance_state() const{ +Ref<SceneState> Node::get_scene_instance_state() const { return data.instance_state; } -void Node::set_scene_inherited_state(const Ref<SceneState>& p_state) { +void Node::set_scene_inherited_state(const Ref<SceneState> &p_state) { - data.inherited_state=p_state; + data.inherited_state = p_state; } -Ref<SceneState> Node::get_scene_inherited_state() const{ +Ref<SceneState> Node::get_scene_inherited_state() const { return data.inherited_state; } void Node::set_scene_instance_load_placeholder(bool p_enable) { - data.use_placeholder=p_enable; + data.use_placeholder = p_enable; } -bool Node::get_scene_instance_load_placeholder() const{ +bool Node::get_scene_instance_load_placeholder() const { return data.use_placeholder; } @@ -1546,43 +1469,39 @@ int Node::get_position_in_parent() const { return data.pos; } +Node *Node::_duplicate(bool p_use_instancing, int p_flags) const { + Node *node = NULL; -Node *Node::_duplicate(bool p_use_instancing,int p_flags) const { - - - Node *node=NULL; - - bool instanced=false; + bool instanced = false; if (cast_to<InstancePlaceholder>()) { const InstancePlaceholder *ip = cast_to<const InstancePlaceholder>(); - InstancePlaceholder *nip = memnew( InstancePlaceholder ); - nip->set_instance_path( ip->get_instance_path() ); - node=nip; + InstancePlaceholder *nip = memnew(InstancePlaceholder); + nip->set_instance_path(ip->get_instance_path()); + node = nip; - } else if (p_use_instancing && get_filename()!=String()) { + } else if (p_use_instancing && get_filename() != String()) { Ref<PackedScene> res = ResourceLoader::load(get_filename()); - ERR_FAIL_COND_V(res.is_null(),NULL); - node=res->instance(); - ERR_FAIL_COND_V(!node,NULL); + ERR_FAIL_COND_V(res.is_null(), NULL); + node = res->instance(); + ERR_FAIL_COND_V(!node, NULL); - instanced=true; + instanced = true; } else { Object *obj = ObjectTypeDB::instance(get_type()); - ERR_FAIL_COND_V(!obj,NULL); + ERR_FAIL_COND_V(!obj, NULL); node = obj->cast_to<Node>(); if (!node) memdelete(obj); - ERR_FAIL_COND_V(!node,NULL); + ERR_FAIL_COND_V(!node, NULL); } - - if (get_filename()!="") { //an instance + if (get_filename() != "") { //an instance node->set_filename(get_filename()); } @@ -1590,16 +1509,15 @@ Node *Node::_duplicate(bool p_use_instancing,int p_flags) const { get_property_list(&plist); - for(List<PropertyInfo>::Element *E=plist.front();E;E=E->next()) { + for (List<PropertyInfo>::Element *E = plist.front(); E; E = E->next()) { - if (!(E->get().usage&PROPERTY_USAGE_STORAGE)) + if (!(E->get().usage & PROPERTY_USAGE_STORAGE)) continue; String name = E->get().name; - if (!(p_flags&DUPLICATE_SCRIPTS) && name=="script/script") + if (!(p_flags & DUPLICATE_SCRIPTS) && name == "script/script") continue; - node->set( name, get(name) ); - + node->set(name, get(name)); } node->set_name(get_name()); @@ -1607,7 +1525,7 @@ Node *Node::_duplicate(bool p_use_instancing,int p_flags) const { if (p_flags & DUPLICATE_GROUPS) { List<GroupInfo> gi; get_groups(&gi); - for (List<GroupInfo>::Element *E=gi.front();E;E=E->next()) { + for (List<GroupInfo>::Element *E = gi.front(); E; E = E->next()) { node->add_to_group(E->get().name, E->get().persistent); } @@ -1616,14 +1534,14 @@ Node *Node::_duplicate(bool p_use_instancing,int p_flags) const { if (p_flags & DUPLICATE_SIGNALS) _duplicate_signals(this, node); - for(int i=0;i<get_child_count();i++) { + for (int i = 0; i < get_child_count(); i++) { if (get_child(i)->data.parent_owned) continue; - if (instanced && get_child(i)->data.owner==this) + if (instanced && get_child(i)->data.owner == this) continue; //part of instance - Node *dup = get_child(i)->duplicate(p_use_instancing,p_flags); + Node *dup = get_child(i)->duplicate(p_use_instancing, p_flags); if (!dup) { memdelete(node); @@ -1633,40 +1551,38 @@ Node *Node::_duplicate(bool p_use_instancing,int p_flags) const { node->add_child(dup); } - return node; } -Node *Node::duplicate(bool p_use_instancing,int p_flags) const { +Node *Node::duplicate(bool p_use_instancing, int p_flags) const { - Node* dupe = _duplicate(p_use_instancing,p_flags); + Node *dupe = _duplicate(p_use_instancing, p_flags); - if (dupe && (p_flags&DUPLICATE_SIGNALS)) { - _duplicate_signals(this,dupe); + if (dupe && (p_flags & DUPLICATE_SIGNALS)) { + _duplicate_signals(this, dupe); } return dupe; } +void Node::_duplicate_and_reown(Node *p_new_parent, const Map<Node *, Node *> &p_reown_map) const { -void Node::_duplicate_and_reown(Node* p_new_parent, const Map<Node*,Node*>& p_reown_map) const { - - if (get_owner()!=get_parent()->get_owner()) + if (get_owner() != get_parent()->get_owner()) return; - Node *node=NULL; + Node *node = NULL; - if (get_filename()!="") { + if (get_filename() != "") { Ref<PackedScene> res = ResourceLoader::load(get_filename()); ERR_FAIL_COND(res.is_null()); - node=res->instance(); + node = res->instance(); ERR_FAIL_COND(!node); } else { Object *obj = ObjectTypeDB::instance(get_type()); if (!obj) { - print_line("could not duplicate: "+String(get_type())); + print_line("could not duplicate: " + String(get_type())); } ERR_FAIL_COND(!obj); node = obj->cast_to<Node>(); @@ -1674,32 +1590,29 @@ void Node::_duplicate_and_reown(Node* p_new_parent, const Map<Node*,Node*>& p_re memdelete(obj); } - List<PropertyInfo> plist; get_property_list(&plist); - for(List<PropertyInfo>::Element *E=plist.front();E;E=E->next()) { + for (List<PropertyInfo>::Element *E = plist.front(); E; E = E->next()) { - if (!(E->get().usage&PROPERTY_USAGE_STORAGE)) + if (!(E->get().usage & PROPERTY_USAGE_STORAGE)) continue; String name = E->get().name; - node->set( name, get(name) ); - + node->set(name, get(name)); } node->set_name(get_name()); p_new_parent->add_child(node); - Node *owner=get_owner(); + Node *owner = get_owner(); if (p_reown_map.has(owner)) - owner=p_reown_map[owner]; - + owner = p_reown_map[owner]; if (owner) { NodePath p = get_path_to(owner); - if (owner!=this) { + if (owner != this) { Node *new_owner = node->get_node(p); if (new_owner) { node->set_owner(new_owner); @@ -1707,26 +1620,23 @@ void Node::_duplicate_and_reown(Node* p_new_parent, const Map<Node*,Node*>& p_re } } - for(int i=0;i<get_child_count();i++) { + for (int i = 0; i < get_child_count(); i++) { - get_child(i)->_duplicate_and_reown(node,p_reown_map); + get_child(i)->_duplicate_and_reown(node, p_reown_map); } - } +void Node::_duplicate_signals(const Node *p_original, Node *p_copy) const { -void Node::_duplicate_signals(const Node* p_original,Node* p_copy) const { - - if (this!=p_original && (get_owner()!=p_original && get_owner()!=p_original->get_owner())) + if (this != p_original && (get_owner() != p_original && get_owner() != p_original->get_owner())) return; List<Connection> conns; get_all_signal_connections(&conns); + for (List<Connection>::Element *E = conns.front(); E; E = E->next()) { - for (List<Connection>::Element *E=conns.front();E;E=E->next()) { - - if (E->get().flags&CONNECT_PERSIST) { + if (E->get().flags & CONNECT_PERSIST) { //user connected NodePath p = p_original->get_path_to(this); Node *copy = p_copy->get_node(p); @@ -1738,37 +1648,32 @@ void Node::_duplicate_signals(const Node* p_original,Node* p_copy) const { NodePath ptarget = p_original->get_path_to(target); Node *copytarget = p_copy->get_node(ptarget); - if (copy && copytarget) { - copy->connect(E->get().signal,copytarget,E->get().method,E->get().binds,CONNECT_PERSIST); + copy->connect(E->get().signal, copytarget, E->get().method, E->get().binds, CONNECT_PERSIST); } - } } - for(int i=0;i<get_child_count();i++) { - get_child(i)->_duplicate_signals(p_original,p_copy); + for (int i = 0; i < get_child_count(); i++) { + get_child(i)->_duplicate_signals(p_original, p_copy); } - } +Node *Node::duplicate_and_reown(const Map<Node *, Node *> &p_reown_map) const { -Node *Node::duplicate_and_reown(const Map<Node*,Node*>& p_reown_map) const { - - - ERR_FAIL_COND_V(get_filename()!="",NULL); + ERR_FAIL_COND_V(get_filename() != "", NULL); - Node *node=NULL; + Node *node = NULL; Object *obj = ObjectTypeDB::instance(get_type()); if (!obj) { - print_line("could not duplicate: "+String(get_type())); + print_line("could not duplicate: " + String(get_type())); } - ERR_FAIL_COND_V(!obj,NULL); + ERR_FAIL_COND_V(!obj, NULL); node = obj->cast_to<Node>(); if (!node) memdelete(obj); - ERR_FAIL_COND_V(!node,NULL); + ERR_FAIL_COND_V(!node, NULL); node->set_name(get_name()); @@ -1776,35 +1681,31 @@ Node *Node::duplicate_and_reown(const Map<Node*,Node*>& p_reown_map) const { get_property_list(&plist); - for(List<PropertyInfo>::Element *E=plist.front();E;E=E->next()) { + for (List<PropertyInfo>::Element *E = plist.front(); E; E = E->next()) { - if (!(E->get().usage&PROPERTY_USAGE_STORAGE)) + if (!(E->get().usage & PROPERTY_USAGE_STORAGE)) continue; String name = E->get().name; - node->set( name, get(name) ); - + node->set(name, get(name)); } + for (int i = 0; i < get_child_count(); i++) { - for(int i=0;i<get_child_count();i++) { - - get_child(i)->_duplicate_and_reown(node,p_reown_map); + get_child(i)->_duplicate_and_reown(node, p_reown_map); } - _duplicate_signals(this,node); + _duplicate_signals(this, node); return node; - } -static void find_owned_by(Node* p_by, Node* p_node, List<Node*> *p_owned) { +static void find_owned_by(Node *p_by, Node *p_node, List<Node *> *p_owned) { - - if (p_node->get_owner()==p_by) + if (p_node->get_owner() == p_by) p_owned->push_back(p_node); - for(int i=0;i<p_node->get_child_count();i++) { + for (int i = 0; i < p_node->get_child_count(); i++) { - find_owned_by(p_by,p_node->get_child(i),p_owned); + find_owned_by(p_by, p_node->get_child(i), p_owned); } } @@ -1814,14 +1715,14 @@ struct _NodeReplaceByPair { Variant value; }; -void Node::replace_by(Node* p_node,bool p_keep_data) { +void Node::replace_by(Node *p_node, bool p_keep_data) { ERR_FAIL_NULL(p_node); ERR_FAIL_COND(p_node->data.parent); - List<Node*> owned = data.owned; - List<Node*> owned_by_owner; - Node *owner = (data.owner==this)?p_node:data.owner; + List<Node *> owned = data.owned; + List<Node *> owned_by_owner; + Node *owner = (data.owner == this) ? p_node : data.owner; List<_NodeReplaceByPair> replace_data; @@ -1830,27 +1731,27 @@ void Node::replace_by(Node* p_node,bool p_keep_data) { List<PropertyInfo> plist; get_property_list(&plist); - for(List<PropertyInfo>::Element *E=plist.front();E;E=E->next() ) { + for (List<PropertyInfo>::Element *E = plist.front(); E; E = E->next()) { _NodeReplaceByPair rd; - if (!(E->get().usage&PROPERTY_USAGE_STORAGE)) + if (!(E->get().usage & PROPERTY_USAGE_STORAGE)) continue; - rd.name=E->get().name; - rd.value=get(rd.name); + rd.name = E->get().name; + rd.value = get(rd.name); } List<GroupInfo> groups; get_groups(&groups); - for(List<GroupInfo>::Element *E=groups.front();E;E=E->next()) + for (List<GroupInfo>::Element *E = groups.front(); E; E = E->next()) p_node->add_to_group(E->get().name, E->get().persistent); } _replace_connections_target(p_node); if (data.owner) { - for(int i=0;i<get_child_count();i++) - find_owned_by(data.owner,get_child(i),&owned_by_owner); + for (int i = 0; i < get_child_count(); i++) + find_owned_by(data.owner, get_child(i), &owned_by_owner); } Node *parent = data.parent; @@ -1860,73 +1761,70 @@ void Node::replace_by(Node* p_node,bool p_keep_data) { parent->remove_child(this); parent->add_child(p_node); - parent->move_child(p_node,pos_in_parent); + parent->move_child(p_node, pos_in_parent); } - while(get_child_count()) { + while (get_child_count()) { - Node * child = get_child(0); + Node *child = get_child(0); remove_child(child); p_node->add_child(child); } p_node->set_owner(owner); - for(int i=0;i<owned.size();i++) + for (int i = 0; i < owned.size(); i++) owned[i]->set_owner(p_node); - for(int i=0;i<owned_by_owner.size();i++) + for (int i = 0; i < owned_by_owner.size(); i++) owned_by_owner[i]->set_owner(owner); p_node->set_filename(get_filename()); - for (List<_NodeReplaceByPair>::Element *E=replace_data.front();E;E=E->next()) { + for (List<_NodeReplaceByPair>::Element *E = replace_data.front(); E; E = E->next()) { - p_node->set(E->get().name,E->get().value); + p_node->set(E->get().name, E->get().value); } - } -void Node::_replace_connections_target(Node* p_new_target) { +void Node::_replace_connections_target(Node *p_new_target) { List<Connection> cl; get_signals_connected_to_this(&cl); - for(List<Connection>::Element *E=cl.front();E;E=E->next()) { + for (List<Connection>::Element *E = cl.front(); E; E = E->next()) { - Connection &c=E->get(); + Connection &c = E->get(); - c.source->disconnect(c.signal,this,c.method); - c.source->connect(c.signal,p_new_target,c.method,c.binds,c.flags); + c.source->disconnect(c.signal, this, c.method); + c.source->connect(c.signal, p_new_target, c.method, c.binds, c.flags); } } Vector<Variant> Node::make_binds(VARIANT_ARG_DECLARE) { - Vector<Variant> ret; - if (p_arg1.get_type()==Variant::NIL) + if (p_arg1.get_type() == Variant::NIL) return ret; else ret.push_back(p_arg1); - if (p_arg2.get_type()==Variant::NIL) + if (p_arg2.get_type() == Variant::NIL) return ret; else ret.push_back(p_arg2); - - if (p_arg3.get_type()==Variant::NIL) + if (p_arg3.get_type() == Variant::NIL) return ret; else ret.push_back(p_arg3); - if (p_arg4.get_type()==Variant::NIL) + if (p_arg4.get_type() == Variant::NIL) return ret; else ret.push_back(p_arg4); - if (p_arg5.get_type()==Variant::NIL) + if (p_arg5.get_type() == Variant::NIL) return ret; else ret.push_back(p_arg5); @@ -1934,9 +1832,7 @@ Vector<Variant> Node::make_binds(VARIANT_ARG_DECLARE) { return ret; } - - -bool Node::has_node_and_resource(const NodePath& p_path) const { +bool Node::has_node_and_resource(const NodePath &p_path) const { if (!has_node(p_path)) return false; @@ -1945,23 +1841,21 @@ bool Node::has_node_and_resource(const NodePath& p_path) const { if (p_path.get_subname_count()) { RES r; - for(int j=0;j<p_path.get_subname_count();j++) { - r = j==0 ? node->get(p_path.get_subname(j)) : r->get(p_path.get_subname(j)); + for (int j = 0; j < p_path.get_subname_count(); j++) { + r = j == 0 ? node->get(p_path.get_subname(j)) : r->get(p_path.get_subname(j)); if (r.is_null()) return false; } } - return true; } - -Array Node::_get_node_and_resource(const NodePath& p_path) { +Array Node::_get_node_and_resource(const NodePath &p_path) { Node *node; RES res; - node = get_node_and_resource(p_path,res); + node = get_node_and_resource(p_path, res); Array result; if (node) @@ -1977,7 +1871,7 @@ Array Node::_get_node_and_resource(const NodePath& p_path) { return result; } -Node *Node::get_node_and_resource(const NodePath& p_path,RES& r_res) const { +Node *Node::get_node_and_resource(const NodePath &p_path, RES &r_res) const { Node *node = get_node(p_path); r_res = RES(); @@ -1986,9 +1880,9 @@ Node *Node::get_node_and_resource(const NodePath& p_path,RES& r_res) const { if (p_path.get_subname_count()) { - for(int j=0;j<p_path.get_subname_count();j++) { - r_res = j==0 ? node->get(p_path.get_subname(j)) : r_res->get(p_path.get_subname(j)); - ERR_FAIL_COND_V( r_res.is_null(), node ); + for (int j = 0; j < p_path.get_subname_count(); j++) { + r_res = j == 0 ? node->get(p_path.get_subname(j)) : r_res->get(p_path.get_subname(j)); + ERR_FAIL_COND_V(r_res.is_null(), node); } } @@ -1997,40 +1891,35 @@ Node *Node::get_node_and_resource(const NodePath& p_path,RES& r_res) const { void Node::_set_tree(SceneTree *p_tree) { - SceneTree *tree_changed_a=NULL; - SceneTree *tree_changed_b=NULL; + SceneTree *tree_changed_a = NULL; + SceneTree *tree_changed_b = NULL; -// ERR_FAIL_COND(p_scene && data.parent && !data.parent->data.scene); //nobug if both are null + // ERR_FAIL_COND(p_scene && data.parent && !data.parent->data.scene); //nobug if both are null if (data.tree) { _propagate_exit_tree(); - tree_changed_a=data.tree; + tree_changed_a = data.tree; } - - data.tree=p_tree; + data.tree = p_tree; if (data.tree) { - _propagate_enter_tree(); if (!data.parent || data.parent->data.ready_notified) { // No parent (root) or parent ready _propagate_ready(); //reverse_notification(NOTIFICATION_READY); } - tree_changed_b=data.tree; - + tree_changed_b = data.tree; } if (tree_changed_a) tree_changed_a->tree_changed(); if (tree_changed_b) tree_changed_b->tree_changed(); - } - static void _Node_debug_sn(Object *p_obj) { Node *n = p_obj->cast_to<Node>(); @@ -2040,18 +1929,17 @@ static void _Node_debug_sn(Object *p_obj) { if (n->is_inside_tree()) return; - Node *p=n; - while(p->get_parent()) { - p=p->get_parent(); + Node *p = n; + while (p->get_parent()) { + p = p->get_parent(); } String path; - if (p==n) - path=n->get_name(); + if (p == n) + path = n->get_name(); else - path=String(p->get_name())+"/"+p->get_path_to(n); - print_line(itos(p_obj->get_instance_ID())+"- Stray Node: "+path+" (Type: "+n->get_type()+")"); - + path = String(p->get_name()) + "/" + p->get_path_to(n); + print_line(itos(p_obj->get_instance_ID()) + "- Stray Node: " + path + " (Type: " + n->get_type() + ")"); } void Node::_print_stray_nodes() { @@ -2069,7 +1957,7 @@ void Node::print_stray_nodes() { void Node::queue_delete() { - ERR_FAIL_COND( !is_inside_tree() ); + ERR_FAIL_COND(!is_inside_tree()); get_tree()->queue_delete(this); } @@ -2078,17 +1966,16 @@ Array Node::_get_children() const { Array arr; int cc = get_child_count(); arr.resize(cc); - for(int i=0;i<cc;i++) - arr[i]=get_child(i); + for (int i = 0; i < cc; i++) + arr[i] = get_child(i); return arr; } #ifdef TOOLS_ENABLED -void Node::set_import_path(const NodePath& p_import_path) { +void Node::set_import_path(const NodePath &p_import_path) { - - data.import_path=p_import_path; + data.import_path = p_import_path; } NodePath Node::get_import_path() const { @@ -2098,35 +1985,33 @@ NodePath Node::get_import_path() const { #endif -static void _add_nodes_to_options(const Node *p_base,const Node *p_node,List<String>*r_options) { +static void _add_nodes_to_options(const Node *p_base, const Node *p_node, List<String> *r_options) { - if (p_node!=p_base && !p_node->get_owner()) + if (p_node != p_base && !p_node->get_owner()) return; String n = p_base->get_path_to(p_node); - r_options->push_back("\""+n+"\""); - for(int i=0;i<p_node->get_child_count();i++) { - _add_nodes_to_options(p_base,p_node->get_child(i),r_options); + r_options->push_back("\"" + n + "\""); + for (int i = 0; i < p_node->get_child_count(); i++) { + _add_nodes_to_options(p_base, p_node->get_child(i), r_options); } } -void Node::get_argument_options(const StringName& p_function,int p_idx,List<String>*r_options) const { +void Node::get_argument_options(const StringName &p_function, int p_idx, List<String> *r_options) const { - String pf=p_function; - if ((pf=="has_node" || pf=="get_node") && p_idx==0) { + String pf = p_function; + if ((pf == "has_node" || pf == "get_node") && p_idx == 0) { - _add_nodes_to_options(this,this,r_options); + _add_nodes_to_options(this, this, r_options); } - Object::get_argument_options(p_function,p_idx,r_options); + Object::get_argument_options(p_function, p_idx, r_options); } - void Node::clear_internal_tree_resource_paths() { clear_internal_resource_paths(); - for(int i=0;i<data.children.size();i++) { + for (int i = 0; i < data.children.size(); i++) { data.children[i]->clear_internal_tree_resource_paths(); } - } String Node::get_configuration_warning() const { @@ -2139,11 +2024,10 @@ void Node::update_configuration_warning() { #ifdef TOOLS_ENABLED if (!is_inside_tree()) return; - if (get_tree()->get_edited_scene_root() && (get_tree()->get_edited_scene_root()==this || get_tree()->get_edited_scene_root()->is_a_parent_of(this))) { - get_tree()->emit_signal(SceneStringNames::get_singleton()->node_configuration_warning_changed,this); + if (get_tree()->get_edited_scene_root() && (get_tree()->get_edited_scene_root() == this || get_tree()->get_edited_scene_root()->is_a_parent_of(this))) { + get_tree()->emit_signal(SceneStringNames::get_singleton()->node_configuration_warning_changed, this); } #endif - } bool Node::is_owned_by_parent() const { @@ -2151,7 +2035,7 @@ bool Node::is_owned_by_parent() const { } void Node::set_display_folded(bool p_folded) { - data.display_folded=p_folded; + data.display_folded = p_folded; } bool Node::is_displayed_folded() const { @@ -2161,174 +2045,162 @@ bool Node::is_displayed_folded() const { void Node::_bind_methods() { - ObjectTypeDB::bind_method(_MD("_add_child_below_node","node:Node","child_node:Node","legible_unique_name"),&Node::add_child_below_node,DEFVAL(false)); + ObjectTypeDB::bind_method(_MD("_add_child_below_node", "node:Node", "child_node:Node", "legible_unique_name"), &Node::add_child_below_node, DEFVAL(false)); - ObjectTypeDB::bind_method(_MD("set_name","name"),&Node::set_name); - ObjectTypeDB::bind_method(_MD("get_name"),&Node::get_name); - ObjectTypeDB::bind_method(_MD("add_child","node:Node","legible_unique_name"),&Node::add_child,DEFVAL(false)); - ObjectTypeDB::bind_method(_MD("remove_child","node:Node"),&Node::remove_child); + ObjectTypeDB::bind_method(_MD("set_name", "name"), &Node::set_name); + ObjectTypeDB::bind_method(_MD("get_name"), &Node::get_name); + ObjectTypeDB::bind_method(_MD("add_child", "node:Node", "legible_unique_name"), &Node::add_child, DEFVAL(false)); + ObjectTypeDB::bind_method(_MD("remove_child", "node:Node"), &Node::remove_child); //ObjectTypeDB::bind_method(_MD("remove_and_delete_child","node:Node"),&Node::remove_and_delete_child); - ObjectTypeDB::bind_method(_MD("get_child_count"),&Node::get_child_count); - ObjectTypeDB::bind_method(_MD("get_children"),&Node::_get_children); - ObjectTypeDB::bind_method(_MD("get_child:Node","idx"),&Node::get_child); - ObjectTypeDB::bind_method(_MD("has_node","path"),&Node::has_node); - ObjectTypeDB::bind_method(_MD("get_node:Node","path"),&Node::get_node); - ObjectTypeDB::bind_method(_MD("get_parent:Node"),&Node::get_parent); - ObjectTypeDB::bind_method(_MD("find_node:Node","mask","recursive","owned"),&Node::find_node,DEFVAL(true),DEFVAL(true)); - ObjectTypeDB::bind_method(_MD("has_node_and_resource","path"),&Node::has_node_and_resource); - ObjectTypeDB::bind_method(_MD("get_node_and_resource","path"),&Node::_get_node_and_resource); - - ObjectTypeDB::bind_method(_MD("is_inside_tree"),&Node::is_inside_tree); - ObjectTypeDB::bind_method(_MD("is_a_parent_of","node:Node"),&Node::is_a_parent_of); - ObjectTypeDB::bind_method(_MD("is_greater_than","node:Node"),&Node::is_greater_than); - ObjectTypeDB::bind_method(_MD("get_path"),&Node::get_path); - ObjectTypeDB::bind_method(_MD("get_path_to","node:Node"),&Node::get_path_to); - ObjectTypeDB::bind_method(_MD("add_to_group","group","persistent"),&Node::add_to_group,DEFVAL(false)); - ObjectTypeDB::bind_method(_MD("remove_from_group","group"),&Node::remove_from_group); - ObjectTypeDB::bind_method(_MD("is_in_group","group"),&Node::is_in_group); - ObjectTypeDB::bind_method(_MD("move_child","child_node:Node","to_pos"),&Node::move_child); - ObjectTypeDB::bind_method(_MD("get_groups"),&Node::_get_groups); - ObjectTypeDB::bind_method(_MD("raise"),&Node::raise); - ObjectTypeDB::bind_method(_MD("set_owner","owner:Node"),&Node::set_owner); - ObjectTypeDB::bind_method(_MD("get_owner:Node"),&Node::get_owner); - ObjectTypeDB::bind_method(_MD("remove_and_skip"),&Node::remove_and_skip); - ObjectTypeDB::bind_method(_MD("get_index"),&Node::get_index); - ObjectTypeDB::bind_method(_MD("print_tree"),&Node::print_tree); - ObjectTypeDB::bind_method(_MD("set_filename","filename"),&Node::set_filename); - ObjectTypeDB::bind_method(_MD("get_filename"),&Node::get_filename); - ObjectTypeDB::bind_method(_MD("propagate_notification","what"),&Node::propagate_notification); - ObjectTypeDB::bind_method(_MD("set_fixed_process","enable"),&Node::set_fixed_process); - ObjectTypeDB::bind_method(_MD("get_fixed_process_delta_time"),&Node::get_fixed_process_delta_time); - ObjectTypeDB::bind_method(_MD("is_fixed_processing"),&Node::is_fixed_processing); - ObjectTypeDB::bind_method(_MD("set_process","enable"),&Node::set_process); - ObjectTypeDB::bind_method(_MD("get_process_delta_time"),&Node::get_process_delta_time); - ObjectTypeDB::bind_method(_MD("is_processing"),&Node::is_processing); - ObjectTypeDB::bind_method(_MD("set_process_input","enable"),&Node::set_process_input); - 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); - ObjectTypeDB::bind_method(_MD("print_stray_nodes"),&Node::_print_stray_nodes); - ObjectTypeDB::bind_method(_MD("get_position_in_parent"),&Node::get_position_in_parent); - ObjectTypeDB::bind_method(_MD("set_display_folded","fold"),&Node::set_display_folded); - ObjectTypeDB::bind_method(_MD("is_displayed_folded"),&Node::is_displayed_folded); + ObjectTypeDB::bind_method(_MD("get_child_count"), &Node::get_child_count); + ObjectTypeDB::bind_method(_MD("get_children"), &Node::_get_children); + ObjectTypeDB::bind_method(_MD("get_child:Node", "idx"), &Node::get_child); + ObjectTypeDB::bind_method(_MD("has_node", "path"), &Node::has_node); + ObjectTypeDB::bind_method(_MD("get_node:Node", "path"), &Node::get_node); + ObjectTypeDB::bind_method(_MD("get_parent:Node"), &Node::get_parent); + ObjectTypeDB::bind_method(_MD("find_node:Node", "mask", "recursive", "owned"), &Node::find_node, DEFVAL(true), DEFVAL(true)); + ObjectTypeDB::bind_method(_MD("has_node_and_resource", "path"), &Node::has_node_and_resource); + ObjectTypeDB::bind_method(_MD("get_node_and_resource", "path"), &Node::_get_node_and_resource); - ObjectTypeDB::bind_method(_MD("get_tree:SceneTree"),&Node::get_tree); + ObjectTypeDB::bind_method(_MD("is_inside_tree"), &Node::is_inside_tree); + ObjectTypeDB::bind_method(_MD("is_a_parent_of", "node:Node"), &Node::is_a_parent_of); + ObjectTypeDB::bind_method(_MD("is_greater_than", "node:Node"), &Node::is_greater_than); + ObjectTypeDB::bind_method(_MD("get_path"), &Node::get_path); + ObjectTypeDB::bind_method(_MD("get_path_to", "node:Node"), &Node::get_path_to); + ObjectTypeDB::bind_method(_MD("add_to_group", "group", "persistent"), &Node::add_to_group, DEFVAL(false)); + ObjectTypeDB::bind_method(_MD("remove_from_group", "group"), &Node::remove_from_group); + ObjectTypeDB::bind_method(_MD("is_in_group", "group"), &Node::is_in_group); + ObjectTypeDB::bind_method(_MD("move_child", "child_node:Node", "to_pos"), &Node::move_child); + ObjectTypeDB::bind_method(_MD("get_groups"), &Node::_get_groups); + ObjectTypeDB::bind_method(_MD("raise"), &Node::raise); + ObjectTypeDB::bind_method(_MD("set_owner", "owner:Node"), &Node::set_owner); + ObjectTypeDB::bind_method(_MD("get_owner:Node"), &Node::get_owner); + ObjectTypeDB::bind_method(_MD("remove_and_skip"), &Node::remove_and_skip); + ObjectTypeDB::bind_method(_MD("get_index"), &Node::get_index); + ObjectTypeDB::bind_method(_MD("print_tree"), &Node::print_tree); + ObjectTypeDB::bind_method(_MD("set_filename", "filename"), &Node::set_filename); + ObjectTypeDB::bind_method(_MD("get_filename"), &Node::get_filename); + ObjectTypeDB::bind_method(_MD("propagate_notification", "what"), &Node::propagate_notification); + ObjectTypeDB::bind_method(_MD("set_fixed_process", "enable"), &Node::set_fixed_process); + ObjectTypeDB::bind_method(_MD("get_fixed_process_delta_time"), &Node::get_fixed_process_delta_time); + ObjectTypeDB::bind_method(_MD("is_fixed_processing"), &Node::is_fixed_processing); + ObjectTypeDB::bind_method(_MD("set_process", "enable"), &Node::set_process); + ObjectTypeDB::bind_method(_MD("get_process_delta_time"), &Node::get_process_delta_time); + ObjectTypeDB::bind_method(_MD("is_processing"), &Node::is_processing); + ObjectTypeDB::bind_method(_MD("set_process_input", "enable"), &Node::set_process_input); + 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); + ObjectTypeDB::bind_method(_MD("print_stray_nodes"), &Node::_print_stray_nodes); + ObjectTypeDB::bind_method(_MD("get_position_in_parent"), &Node::get_position_in_parent); + ObjectTypeDB::bind_method(_MD("set_display_folded", "fold"), &Node::set_display_folded); + ObjectTypeDB::bind_method(_MD("is_displayed_folded"), &Node::is_displayed_folded); - ObjectTypeDB::bind_method(_MD("duplicate:Node","use_instancing","flags"),&Node::duplicate,DEFVAL(false),DEFVAL(DUPLICATE_SIGNALS|DUPLICATE_GROUPS|DUPLICATE_SCRIPTS)); - ObjectTypeDB::bind_method(_MD("replace_by","node:Node","keep_data"),&Node::replace_by,DEFVAL(false)); + ObjectTypeDB::bind_method(_MD("get_tree:SceneTree"), &Node::get_tree); - ObjectTypeDB::bind_method(_MD("set_scene_instance_load_placeholder","load_placeholder"),&Node::set_scene_instance_load_placeholder); - ObjectTypeDB::bind_method(_MD("get_scene_instance_load_placeholder"),&Node::get_scene_instance_load_placeholder); - - - ObjectTypeDB::bind_method(_MD("get_viewport"),&Node::get_viewport); - - ObjectTypeDB::bind_method(_MD("queue_free"),&Node::queue_delete); + ObjectTypeDB::bind_method(_MD("duplicate:Node", "use_instancing", "flags"), &Node::duplicate, DEFVAL(false), DEFVAL(DUPLICATE_SIGNALS | DUPLICATE_GROUPS | DUPLICATE_SCRIPTS)); + ObjectTypeDB::bind_method(_MD("replace_by", "node:Node", "keep_data"), &Node::replace_by, DEFVAL(false)); + ObjectTypeDB::bind_method(_MD("set_scene_instance_load_placeholder", "load_placeholder"), &Node::set_scene_instance_load_placeholder); + ObjectTypeDB::bind_method(_MD("get_scene_instance_load_placeholder"), &Node::get_scene_instance_load_placeholder); + ObjectTypeDB::bind_method(_MD("get_viewport"), &Node::get_viewport); + ObjectTypeDB::bind_method(_MD("queue_free"), &Node::queue_delete); #ifdef TOOLS_ENABLED - ObjectTypeDB::bind_method(_MD("_set_import_path","import_path"),&Node::set_import_path); - ObjectTypeDB::bind_method(_MD("_get_import_path"),&Node::get_import_path); - ADD_PROPERTYNZ( PropertyInfo(Variant::NODE_PATH,"_import_path",PROPERTY_HINT_NONE,"",PROPERTY_USAGE_NOEDITOR),_SCS("_set_import_path"),_SCS("_get_import_path")); + ObjectTypeDB::bind_method(_MD("_set_import_path", "import_path"), &Node::set_import_path); + ObjectTypeDB::bind_method(_MD("_get_import_path"), &Node::get_import_path); + ADD_PROPERTYNZ(PropertyInfo(Variant::NODE_PATH, "_import_path", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR), _SCS("_set_import_path"), _SCS("_get_import_path")); #endif - BIND_CONSTANT( NOTIFICATION_ENTER_TREE ); - BIND_CONSTANT( NOTIFICATION_EXIT_TREE ); - BIND_CONSTANT( NOTIFICATION_MOVED_IN_PARENT ); + BIND_CONSTANT(NOTIFICATION_ENTER_TREE); + BIND_CONSTANT(NOTIFICATION_EXIT_TREE); + BIND_CONSTANT(NOTIFICATION_MOVED_IN_PARENT); //BIND_CONSTANT( NOTIFICATION_PARENT_DECONFIGURED ); - BIND_CONSTANT( NOTIFICATION_READY ); - BIND_CONSTANT( NOTIFICATION_FIXED_PROCESS ); - BIND_CONSTANT( NOTIFICATION_PROCESS ); - BIND_CONSTANT( NOTIFICATION_PARENTED ); - BIND_CONSTANT( NOTIFICATION_UNPARENTED ); - BIND_CONSTANT( NOTIFICATION_PAUSED ); - BIND_CONSTANT( NOTIFICATION_UNPAUSED ); - BIND_CONSTANT( NOTIFICATION_INSTANCED ); - BIND_CONSTANT( NOTIFICATION_DRAG_BEGIN ); - BIND_CONSTANT( NOTIFICATION_DRAG_END ); - + BIND_CONSTANT(NOTIFICATION_READY); + BIND_CONSTANT(NOTIFICATION_FIXED_PROCESS); + BIND_CONSTANT(NOTIFICATION_PROCESS); + BIND_CONSTANT(NOTIFICATION_PARENTED); + BIND_CONSTANT(NOTIFICATION_UNPARENTED); + BIND_CONSTANT(NOTIFICATION_PAUSED); + BIND_CONSTANT(NOTIFICATION_UNPAUSED); + BIND_CONSTANT(NOTIFICATION_INSTANCED); + BIND_CONSTANT(NOTIFICATION_DRAG_BEGIN); + BIND_CONSTANT(NOTIFICATION_DRAG_END); + BIND_CONSTANT(PAUSE_MODE_INHERIT); + BIND_CONSTANT(PAUSE_MODE_STOP); + BIND_CONSTANT(PAUSE_MODE_PROCESS); - BIND_CONSTANT( PAUSE_MODE_INHERIT ); - BIND_CONSTANT( PAUSE_MODE_STOP ); - BIND_CONSTANT( PAUSE_MODE_PROCESS ); + BIND_CONSTANT(DUPLICATE_SIGNALS); + BIND_CONSTANT(DUPLICATE_GROUPS); + BIND_CONSTANT(DUPLICATE_SCRIPTS); - BIND_CONSTANT( DUPLICATE_SIGNALS ); - BIND_CONSTANT( DUPLICATE_GROUPS ); - BIND_CONSTANT( DUPLICATE_SCRIPTS ); + ADD_SIGNAL(MethodInfo("renamed")); + ADD_SIGNAL(MethodInfo("enter_tree")); + ADD_SIGNAL(MethodInfo("exit_tree")); - ADD_SIGNAL( MethodInfo("renamed") ); - ADD_SIGNAL( MethodInfo("enter_tree") ); - ADD_SIGNAL( MethodInfo("exit_tree") ); - -// ADD_PROPERTYNZ( PropertyInfo( Variant::BOOL, "process/process" ),_SCS("set_process"),_SCS("is_processing") ); -// ADD_PROPERTYNZ( PropertyInfo( Variant::BOOL, "process/fixed_process" ), _SCS("set_fixed_process"),_SCS("is_fixed_processing") ); + // ADD_PROPERTYNZ( PropertyInfo( Variant::BOOL, "process/process" ),_SCS("set_process"),_SCS("is_processing") ); + // ADD_PROPERTYNZ( PropertyInfo( Variant::BOOL, "process/fixed_process" ), _SCS("set_fixed_process"),_SCS("is_fixed_processing") ); //ADD_PROPERTYNZ( PropertyInfo( Variant::BOOL, "process/input" ), _SCS("set_process_input"),_SCS("is_processing_input" ) ); //ADD_PROPERTYNZ( PropertyInfo( Variant::BOOL, "process/unhandled_input" ), _SCS("set_process_unhandled_input"),_SCS("is_processing_unhandled_input" ) ); - ADD_PROPERTYNZ( PropertyInfo( Variant::INT, "process/pause_mode",PROPERTY_HINT_ENUM,"Inherit,Stop,Process" ), _SCS("set_pause_mode"),_SCS("get_pause_mode" ) ); - ADD_PROPERTYNZ( PropertyInfo( Variant::BOOL, "editor/display_folded",PROPERTY_HINT_NONE,"",PROPERTY_USAGE_NOEDITOR ), _SCS("set_display_folded"),_SCS("is_displayed_folded" ) ); + ADD_PROPERTYNZ(PropertyInfo(Variant::INT, "process/pause_mode", PROPERTY_HINT_ENUM, "Inherit,Stop,Process"), _SCS("set_pause_mode"), _SCS("get_pause_mode")); + ADD_PROPERTYNZ(PropertyInfo(Variant::BOOL, "editor/display_folded", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR), _SCS("set_display_folded"), _SCS("is_displayed_folded")); - BIND_VMETHOD( MethodInfo("_process",PropertyInfo(Variant::REAL,"delta")) ); - BIND_VMETHOD( MethodInfo("_fixed_process",PropertyInfo(Variant::REAL,"delta")) ); - BIND_VMETHOD( MethodInfo("_enter_tree") ); - BIND_VMETHOD( MethodInfo("_exit_tree") ); - BIND_VMETHOD( MethodInfo("_ready") ); - BIND_VMETHOD( MethodInfo("_input",PropertyInfo(Variant::INPUT_EVENT,"event")) ); - BIND_VMETHOD( MethodInfo("_unhandled_input",PropertyInfo(Variant::INPUT_EVENT,"event")) ); - BIND_VMETHOD( MethodInfo("_unhandled_key_input",PropertyInfo(Variant::INPUT_EVENT,"key_event")) ); + BIND_VMETHOD(MethodInfo("_process", PropertyInfo(Variant::REAL, "delta"))); + BIND_VMETHOD(MethodInfo("_fixed_process", PropertyInfo(Variant::REAL, "delta"))); + BIND_VMETHOD(MethodInfo("_enter_tree")); + BIND_VMETHOD(MethodInfo("_exit_tree")); + BIND_VMETHOD(MethodInfo("_ready")); + BIND_VMETHOD(MethodInfo("_input", PropertyInfo(Variant::INPUT_EVENT, "event"))); + BIND_VMETHOD(MethodInfo("_unhandled_input", PropertyInfo(Variant::INPUT_EVENT, "event"))); + BIND_VMETHOD(MethodInfo("_unhandled_key_input", PropertyInfo(Variant::INPUT_EVENT, "key_event"))); //ObjectTypeDB::bind_method(_MD("get_child",&Node::get_child,PH("index"))); //ObjectTypeDB::bind_method(_MD("get_node",&Node::get_node,PH("path"))); } - Node::Node() { - data.pos=-1; - data.depth=-1; - data.blocked=0; - data.parent=NULL; - data.tree=NULL; - data.fixed_process=false; - data.idle_process=false; - data.inside_tree=false; - data.ready_notified=false; + data.pos = -1; + data.depth = -1; + data.blocked = 0; + data.parent = NULL; + data.tree = NULL; + data.fixed_process = false; + data.idle_process = false; + data.inside_tree = false; + data.ready_notified = false; - data.owner=NULL; - 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; - data.use_placeholder=false; - data.display_folded=false; + data.owner = NULL; + 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; + data.use_placeholder = false; + data.display_folded = false; } Node::~Node() { - data.grouped.clear(); data.owned.clear(); data.children.clear(); - ERR_FAIL_COND(data.parent); ERR_FAIL_COND(data.children.size()); - - } - //////////////////////////////// |
