@ -89,6 +89,7 @@ void Node::_notification(int p_notification) {
data . network_owner = this ;
}
if ( data . input )
add_to_group ( " _vp_input " + itos ( get_viewport ( ) - > get_instance_ID ( ) ) ) ;
if ( data . unhandled_input )
@ -128,6 +129,26 @@ void Node::_notification(int p_notification) {
if ( get_script_instance ( ) ) {
if ( get_script_instance ( ) - > has_method ( SceneStringNames : : get_singleton ( ) - > _input ) ) {
set_process_input ( true ) ;
}
if ( get_script_instance ( ) - > has_method ( SceneStringNames : : get_singleton ( ) - > _unhandled_input ) ) {
set_process_unhandled_input ( true ) ;
}
if ( get_script_instance ( ) - > has_method ( SceneStringNames : : get_singleton ( ) - > _unhandled_key_input ) ) {
set_process_unhandled_key_input ( true ) ;
}
if ( get_script_instance ( ) - > has_method ( SceneStringNames : : get_singleton ( ) - > _process ) ) {
set_process ( true ) ;
}
if ( get_script_instance ( ) - > has_method ( SceneStringNames : : get_singleton ( ) - > _fixed_process ) ) {
set_fixed_process ( true ) ;
}
Variant : : CallError err ;
get_script_instance ( ) - > call_multilevel_reversed ( SceneStringNames : : get_singleton ( ) - > _ready , NULL , 0 ) ;
}
@ -173,7 +194,10 @@ void Node::_propagate_ready() {
data . children [ i ] - > _propagate_ready ( ) ;
}
data . blocked - - ;
notification ( NOTIFICATION_READY ) ;
if ( data . ready_first ) {
notification ( NOTIFICATION_READY ) ;
data . ready_first = false ;
}
}
@ -294,6 +318,7 @@ void Node::_propagate_exit_tree() {
data . tree - > tree_changed ( ) ;
data . inside_tree = false ;
data . ready_notified = false ;
data . tree = NULL ;
data . depth = - 1 ;
@ -401,6 +426,33 @@ void Node::set_fixed_process(bool p_process) {
_change_notify ( " fixed_process " ) ;
}
bool Node : : is_fixed_processing ( ) const {
return data . fixed_process ;
}
void Node : : set_fixed_process_internal ( bool p_process_internal ) {
if ( data . fixed_process_internal = = p_process_internal )
return ;
data . fixed_process_internal = p_process_internal ;
if ( data . fixed_process_internal )
add_to_group ( " fixed_process_internal " , false ) ;
else
remove_from_group ( " fixed_process_internal " ) ;
data . fixed_process_internal = p_process_internal ;
_change_notify ( " fixed_process_internal " ) ;
}
bool Node : : is_fixed_processing_internal ( ) const {
return data . fixed_process_internal ;
}
void Node : : set_pause_mode ( PauseMode p_mode ) {
if ( data . pause_mode = = p_mode )
@ -1115,6 +1167,14 @@ float Node::get_fixed_process_delta_time() const {
return 0 ;
}
float Node : : get_process_delta_time ( ) const {
if ( data . tree )
return data . tree - > get_idle_process_time ( ) ;
else
return 0 ;
}
void Node : : set_process ( bool p_idle_process ) {
if ( data . idle_process = = p_idle_process )
@ -1131,22 +1191,31 @@ void Node::set_process(bool p_idle_process) {
_change_notify ( " idle_process " ) ;
}
float Node : : get_process_delta_time ( ) const {
if ( data . tree )
return data . tree - > get_idle_process_time ( ) ;
else
return 0 ;
bool Node : : is_processing ( ) const {
return data . idle_process ;
}
bool Node : : is_fixed_processing ( ) const {
void Node : : set_process_internal ( bool p_idle_process_internal ) {
return data . fixed_process ;
if ( data . idle_process_internal = = p_idle_process_internal )
return ;
data . idle_process_internal = p_idle_process_internal ;
if ( data . idle_process_internal )
add_to_group ( " idle_process_internal " , false ) ;
else
remove_from_group ( " idle_process_internal " ) ;
data . idle_process_internal = p_idle_process_internal ;
_change_notify ( " idle_process_internal " ) ;
}
bool Node : : is_processing ( ) const {
bool Node : : is_processing _internal ( ) const {
return data . idle_process ;
return data . idle_process _internal ;
}
@ -2813,6 +2882,10 @@ bool Node::is_displayed_folded() const {
return data . display_folded ;
}
void Node : : request_ready ( ) {
data . ready_first = true ;
}
void Node : : _bind_methods ( ) {
_GLOBAL_DEF ( " editor/node_name_num_separator " , 0 ) ;
@ -2858,8 +2931,8 @@ void Node::_bind_methods() {
ClassDB : : bind_method ( _MD ( " set_fixed_process " , " enable " ) , & Node : : set_fixed_process ) ;
ClassDB : : bind_method ( _MD ( " get_fixed_process_delta_time " ) , & Node : : get_fixed_process_delta_time ) ;
ClassDB : : bind_method ( _MD ( " is_fixed_processing " ) , & Node : : is_fixed_processing ) ;
ClassDB : : bind_method ( _MD ( " set_process " , " enable " ) , & Node : : set_process ) ;
ClassDB : : bind_method ( _MD ( " get_process_delta_time " ) , & Node : : get_process_delta_time ) ;
ClassDB : : bind_method ( _MD ( " set_process " , " enable " ) , & Node : : set_process ) ;
ClassDB : : bind_method ( _MD ( " is_processing " ) , & Node : : is_processing ) ;
ClassDB : : bind_method ( _MD ( " set_process_input " , " enable " ) , & Node : : set_process_input ) ;
ClassDB : : bind_method ( _MD ( " is_processing_input " ) , & Node : : is_processing_input ) ;
@ -2875,6 +2948,12 @@ void Node::_bind_methods() {
ClassDB : : bind_method ( _MD ( " set_display_folded " , " fold " ) , & Node : : set_display_folded ) ;
ClassDB : : bind_method ( _MD ( " is_displayed_folded " ) , & Node : : is_displayed_folded ) ;
ClassDB : : bind_method ( _MD ( " set_process_internal " , " enable " ) , & Node : : set_process_internal ) ;
ClassDB : : bind_method ( _MD ( " is_processing_internal " ) , & Node : : is_processing_internal ) ;
ClassDB : : bind_method ( _MD ( " set_fixed_process_internal " , " enable " ) , & Node : : set_fixed_process_internal ) ;
ClassDB : : bind_method ( _MD ( " is_fixed_processing_internal " ) , & Node : : is_fixed_processing_internal ) ;
ClassDB : : bind_method ( _MD ( " get_tree:SceneTree " ) , & Node : : get_tree ) ;
ClassDB : : bind_method ( _MD ( " duplicate:Node " , " use_instancing " ) , & Node : : duplicate , DEFVAL ( false ) ) ;
@ -2888,6 +2967,8 @@ void Node::_bind_methods() {
ClassDB : : bind_method ( _MD ( " queue_free " ) , & Node : : queue_delete ) ;
ClassDB : : bind_method ( _MD ( " request_ready " ) , & Node : : request_ready ) ;
ClassDB : : bind_method ( _MD ( " set_network_mode " , " mode " ) , & Node : : set_network_mode ) ;
ClassDB : : bind_method ( _MD ( " get_network_mode " ) , & Node : : get_network_mode ) ;
@ -2946,6 +3027,9 @@ void Node::_bind_methods() {
BIND_CONSTANT ( NOTIFICATION_DRAG_BEGIN ) ;
BIND_CONSTANT ( NOTIFICATION_DRAG_END ) ;
BIND_CONSTANT ( NOTIFICATION_PATH_CHANGED ) ;
BIND_CONSTANT ( NOTIFICATION_TRANSLATION_CHANGED ) ;
BIND_CONSTANT ( NOTIFICATION_INTERNAL_PROCESS ) ;
BIND_CONSTANT ( NOTIFICATION_INTERNAL_FIXED_PROCESS ) ;
BIND_CONSTANT ( NETWORK_MODE_INHERIT ) ;
@ -3008,6 +3092,8 @@ Node::Node() {
data . tree = NULL ;
data . fixed_process = false ;
data . idle_process = false ;
data . fixed_process_internal = false ;
data . idle_process_internal = false ;
data . inside_tree = false ;
data . ready_notified = false ;
@ -3026,6 +3112,7 @@ Node::Node() {
data . viewport = NULL ;
data . use_placeholder = false ;
data . display_folded = false ;
data . ready_first = true ;
}