void Camera2D::set_custom_viewport(Node *p_viewport) { ERR_FAIL_NULL(p_viewport); if (is_inside_tree()) { remove_from_group(group_name); remove_from_group(canvas_group_name); } custom_viewport = Object::cast_to<Viewport>(p_viewport); if (custom_viewport) { custom_viewport_id = custom_viewport->get_instance_id(); } else { custom_viewport_id = 0; } if (is_inside_tree()) { if (custom_viewport) viewport = custom_viewport; else viewport = get_viewport(); RID vp = viewport->get_viewport_rid(); group_name = "__cameras_" + itos(vp.get_id()); canvas_group_name = "__cameras_c" + itos(canvas.get_id()); add_to_group(group_name); add_to_group(canvas_group_name); } }
void CanvasModulate::_notification(int p_what) { if (p_what==NOTIFICATION_ENTER_CANVAS) { if (is_visible()) { VS::get_singleton()->canvas_set_modulate(get_canvas(),color); add_to_group("_canvas_modulate_"+itos(get_canvas().get_id())); } } else if (p_what==NOTIFICATION_EXIT_CANVAS) { if (is_visible()) { VS::get_singleton()->canvas_set_modulate(get_canvas(),Color(1,1,1,1)); remove_from_group("_canvas_modulate_"+itos(get_canvas().get_id())); } } else if (p_what==NOTIFICATION_VISIBILITY_CHANGED) { if (is_visible()) { VS::get_singleton()->canvas_set_modulate(get_canvas(),color); add_to_group("_canvas_modulate_"+itos(get_canvas().get_id())); } else { VS::get_singleton()->canvas_set_modulate(get_canvas(),Color(1,1,1,1)); remove_from_group("_canvas_modulate_"+itos(get_canvas().get_id())); } update_configuration_warning(); } }
void Camera2D::_notification(int p_what) { switch(p_what) { case NOTIFICATION_FIXED_PROCESS: { _update_scroll(); } break; case NOTIFICATION_TRANSFORM_CHANGED: { if (!is_fixed_processing()) _update_scroll(); } break; case NOTIFICATION_ENTER_SCENE: { viewport = NULL; Node *n=this; while(n){ viewport = n->cast_to<Viewport>(); if (viewport) break; n=n->get_parent(); } canvas = get_canvas(); RID vp = viewport->get_viewport(); group_name = "__cameras_"+itos(vp.get_id()); canvas_group_name ="__cameras_c"+itos(canvas.get_id()); add_to_group(group_name); add_to_group(canvas_group_name); _update_scroll(); first=true; } break; case NOTIFICATION_EXIT_SCENE: { if (is_current()) { if (viewport) { viewport->set_canvas_transform( Matrix32() ); } } remove_from_group(group_name); remove_from_group(canvas_group_name); viewport=NULL; } break; } }
void Node::set_process_input(bool p_enable) { if (p_enable==data.input) return; data.input=p_enable; if (p_enable) add_to_group("input"); else remove_from_group("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_tree()) 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())); }
void LegIKController::_notification(int p_what) { switch(p_what) { case NOTIFICATION_READY: { _ready(); } break; case NOTIFICATION_ENTER_TREE: { add_to_group("ik_group"); } break; case NOTIFICATION_EXIT_TREE: { remove_from_group("ik_group"); } break; } }
void Node::set_process(bool p_idle_process) { if (data.idle_process==p_idle_process) return; data.idle_process=p_idle_process; if (data.idle_process) add_to_group("idle_process",false); else remove_from_group("idle_process"); data.idle_process=p_idle_process; _change_notify("idle_process"); }
void WorldEnvironment::set_environment(const Ref<Environment> &p_environment) { if (is_inside_tree() && environment.is_valid() && get_viewport()->find_world()->get_environment() == environment) { get_viewport()->find_world()->set_environment(Ref<Environment>()); remove_from_group("_world_environment_" + itos(get_viewport()->find_world()->get_scenario().get_id())); //clean up } environment = p_environment; if (is_inside_tree() && environment.is_valid()) { if (get_viewport()->find_world()->get_environment().is_valid()) { WARN_PRINT("World already has an environment (Another WorldEnvironment?), overriding."); } get_viewport()->find_world()->set_environment(environment); add_to_group("_world_environment_" + itos(get_viewport()->find_world()->get_scenario().get_id())); } update_configuration_warning(); }
void WorldEnvironment::_notification(int p_what) { if (p_what == Spatial::NOTIFICATION_ENTER_WORLD || p_what == Spatial::NOTIFICATION_ENTER_TREE) { if (environment.is_valid()) { if (get_viewport()->find_world()->get_environment().is_valid()) { WARN_PRINT("World already has an environment (Another WorldEnvironment?), overriding."); } get_viewport()->find_world()->set_environment(environment); add_to_group("_world_environment_" + itos(get_viewport()->find_world()->get_scenario().get_id())); } } else if (p_what == Spatial::NOTIFICATION_EXIT_WORLD || p_what == Spatial::NOTIFICATION_EXIT_TREE) { if (environment.is_valid() && get_viewport()->find_world()->get_environment() == environment) { get_viewport()->find_world()->set_environment(Ref<Environment>()); remove_from_group("_world_environment_" + itos(get_viewport()->find_world()->get_scenario().get_id())); } } }
static void groups_changed_cb (EmpathyRosterModel *model, FolksIndividual *individual, const gchar *group, gboolean is_member, EmpathyRosterView *self) { if (!self->priv->show_groups) { gtk_list_box_invalidate_sort (GTK_LIST_BOX (self)); return; } if (is_member) { add_to_group (self, individual, group); } else { remove_from_group (self, individual, group); } }
static void add_to_group (EmpathyRosterView *self, FolksIndividual *individual, const gchar *group) { GtkWidget *contact; GHashTable *contacts; EmpathyRosterGroup *roster_group = NULL; contacts = g_hash_table_lookup (self->priv->roster_contacts, individual); if (contacts == NULL) return; if (g_hash_table_lookup (contacts, group) != NULL) return; if (tp_strdiff (group, NO_GROUP)) roster_group = ensure_roster_group (self, group); contact = add_roster_contact (self, individual, group); g_hash_table_insert (contacts, g_strdup (group), contact); if (roster_group != NULL) { update_group_widgets (self, roster_group, EMPATHY_ROSTER_CONTACT (contact), TRUE); } if (tp_strdiff (group, NO_GROUP) && tp_strdiff (group, EMPATHY_ROSTER_MODEL_GROUP_UNGROUPED) && g_hash_table_size (contacts) == 2 /* 1:Ungrouped and 2:first group */) { remove_from_group (self, individual, EMPATHY_ROSTER_MODEL_GROUP_UNGROUPED); } }
void Viewport::_notification(int p_what) { switch( p_what ) { case NOTIFICATION_ENTER_SCENE: { if (!render_target) _vp_enter_scene(); this->parent=NULL; Node *parent=get_parent(); if (parent) { while(parent && !(this->parent=parent->cast_to<Viewport>())) { parent=parent->get_parent(); } } current_canvas=find_world_2d()->get_canvas(); VisualServer::get_singleton()->viewport_set_scenario(viewport,find_world()->get_scenario()); VisualServer::get_singleton()->viewport_attach_canvas(viewport,current_canvas); _update_listener(); _update_listener_2d(); _update_rect(); if (world_2d.is_valid()) { find_world_2d()->_register_viewport(this,Rect2()); //best to defer this and not do it here, as it can annoy a lot of setup logic if user //adds a node and then moves it, will get enter/exit screen/viewport notifications //unnecesarily // update_worlds(); } add_to_group("_viewports"); } break; case NOTIFICATION_READY: { #ifndef _3D_DISABLED if (cameras.size() && !camera) { //there are cameras but no current camera, pick first in tree and make it current Camera *first=NULL; for(Set<Camera*>::Element *E=cameras.front();E;E=E->next()) { if (first==NULL || first->is_greater_than(E->get())) { first=E->get(); } } if (first) first->make_current(); } #endif } break; case NOTIFICATION_EXIT_SCENE: { if (world_2d.is_valid()) world_2d->_remove_viewport(this); if (!render_target) _vp_exit_scene(); VisualServer::get_singleton()->viewport_set_scenario(viewport,RID()); SpatialSoundServer::get_singleton()->listener_set_space(listener,RID()); VisualServer::get_singleton()->viewport_remove_canvas(viewport,current_canvas); remove_from_group("_viewports"); } break; } }
void message_handle(kolibri_IPC_message_t *message){ char *msg = (char *)message+sizeof(kolibri_IPC_message_t); char cmd = msg[0]; thread_list_t *thread = find_tid(main_group_list, message->tid); group_list_t *group; int i; if (cmd == KOBRA_CMD_REGISTER && !thread) { kobra_register(message->tid); } else if (thread) { switch (cmd) { case KOBRA_CMD_JOIN: if (message->length < 3 || msg[message->length-1] != '\0') { // Here should be some error handler return; } if (!(group = find_group(msg+1))){ group = create_group(msg+1); } add_to_group(group, message->tid); break; case KOBRA_CMD_UNJOIN: if (message->length < 3 || msg[message->length-1] != '\0') { // Here should be some error handler return; } if ((group = find_group(msg+1)) && (thread = find_tid(group, message->tid))) { remove_from_group(group, thread); } break; case KOBRA_CMD_SEND: if (message->length < 4) { // Here should be some error handler return; } // Check if group name is correct for (i = 1; i < message->length-1 && msg[i]; ++i); if (msg[i]) { // Here should be some error handler return; } group = find_group(msg+1); if (!group) { // Here should be some error handler return; } send_group_message(group, message->tid, msg+i+1, message->length-i-1); break; case KOBRA_CMD_GET_LIST_NAME: // This is temporary realisation kolibri_IPC_send(message->tid, KOBRA_MEMAREA_NAME, KOBRA_MEMAREA_NAME_LENGTH); default: // Here should be some error handler return; } } }
void Camera2D::_notification(int p_what) { switch(p_what) { case NOTIFICATION_FIXED_PROCESS: { _update_scroll(); } break; case NOTIFICATION_TRANSFORM_CHANGED: { if (!is_fixed_processing()) _update_scroll(); } break; case NOTIFICATION_ENTER_TREE: { viewport = NULL; Node *n=this; while(n){ viewport = n->cast_to<Viewport>(); if (viewport) break; n=n->get_parent(); } canvas = get_canvas(); RID vp = viewport->get_viewport(); group_name = "__cameras_"+itos(vp.get_id()); canvas_group_name ="__cameras_c"+itos(canvas.get_id()); add_to_group(group_name); add_to_group(canvas_group_name); _update_scroll(); first=true; } break; case NOTIFICATION_EXIT_TREE: { if (is_current()) { if (viewport) { viewport->set_canvas_transform( Matrix32() ); } } remove_from_group(group_name); remove_from_group(canvas_group_name); viewport=NULL; } break; case NOTIFICATION_DRAW: { if (!is_inside_tree() || !get_tree()->is_editor_hint()) break; Color area_axis_color(0.5, 0.42, 0.87, 0.63); float area_axis_width = 1; if(current) area_axis_width = 3; Matrix32 inv_camera_transform = get_camera_transform().affine_inverse(); Size2 screen_size = get_viewport_rect().size; Vector2 screen_endpoints[4]= { inv_camera_transform.xform(Vector2(0, 0)), inv_camera_transform.xform(Vector2(screen_size.width,0)), inv_camera_transform.xform(Vector2(screen_size.width, screen_size.height)), inv_camera_transform.xform(Vector2(0, screen_size.height)) }; Matrix32 inv_transform = get_transform().affine_inverse(); // undo global space draw_set_transform(inv_transform.get_origin(), inv_transform.get_rotation(), inv_transform.get_scale()); for(int i=0;i<4;i++) { draw_line(screen_endpoints[i], screen_endpoints[(i+1)%4], area_axis_color, area_axis_width); } } break; } }
void Camera::_notification(int p_what) { switch(p_what) { case NOTIFICATION_ENTER_WORLD: { viewport_ptr=NULL; { //find viewport stuff Node *parent=get_parent(); while(parent) { Viewport* viewport = parent->cast_to<Viewport>(); if (viewport) { viewport_ptr=viewport; break; } parent=parent->get_parent(); } } camera_group = "_vp_cameras"+itos(get_viewport()->get_instance_ID()); add_to_group(camera_group); if (viewport_ptr) viewport_ptr->cameras.insert(this); if (current) make_current(); } break; case NOTIFICATION_TRANSFORM_CHANGED: { _request_camera_update(); } break; case NOTIFICATION_EXIT_WORLD: { if (is_current()) { clear_current(); current=true; //keep it true } else { current=false; } if (viewport_ptr) viewport_ptr->cameras.erase(this); viewport_ptr=NULL; remove_from_group(camera_group); } break; case NOTIFICATION_BECAME_CURRENT: { if (get_world().is_valid()) { get_world()->_register_camera(this); } } break; case NOTIFICATION_LOST_CURRENT: { if (get_world().is_valid()) { get_world()->_remove_camera(this); } } break; } }
void Node::_notification(int p_notification) { switch(p_notification) { case NOTIFICATION_PROCESS: { if (get_script_instance()) { 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); } } break; case NOTIFICATION_FIXED_PROCESS: { if (get_script_instance()) { 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); } } break; case NOTIFICATION_ENTER_TREE: { if (data.pause_mode==PAUSE_MODE_INHERIT) { if (data.parent) data.pause_owner=data.parent->data.pause_owner; else data.pause_owner=NULL; } else { 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_tree()->node_count++; } break; case NOTIFICATION_EXIT_TREE: { get_tree()->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: { if (get_script_instance()) { Variant::CallError err; 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; } break; case NOTIFICATION_PREDELETE: { set_owner(NULL); while ( data.owned.size() ) { data.owned.front()->get()->set_owner(NULL); } if (data.parent) { data.parent->remove_child(this); } // kill children as cleanly as possible while( data.children.size() ) { Node *child = data.children[0]; remove_child(child); memdelete( child ); } } break; } }
void Camera2D::_notification(int p_what) { switch (p_what) { case NOTIFICATION_FIXED_PROCESS: { _update_scroll(); } break; case NOTIFICATION_TRANSFORM_CHANGED: { if (!is_fixed_processing()) _update_scroll(); } break; case NOTIFICATION_ENTER_TREE: { if (custom_viewport && ObjectDB::get_instance(custom_viewport_id)) { viewport = custom_viewport; } else { viewport = get_viewport(); } canvas = get_canvas(); RID vp = viewport->get_viewport_rid(); group_name = "__cameras_" + itos(vp.get_id()); canvas_group_name = "__cameras_c" + itos(canvas.get_id()); add_to_group(group_name); add_to_group(canvas_group_name); if (Engine::get_singleton()->is_editor_hint()) { set_fixed_process(false); } _update_scroll(); first = true; } break; case NOTIFICATION_EXIT_TREE: { if (is_current()) { if (viewport && !(custom_viewport && !ObjectDB::get_instance(custom_viewport_id))) { viewport->set_canvas_transform(Transform2D()); } } remove_from_group(group_name); remove_from_group(canvas_group_name); viewport = NULL; } break; case NOTIFICATION_DRAW: { if (!is_inside_tree() || !Engine::get_singleton()->is_editor_hint()) break; if (screen_drawing_enabled) { Color area_axis_color(0.5, 0.42, 0.87, 0.63); float area_axis_width = 1; if (is_current()) { area_axis_width = 3; area_axis_color.a = 0.83; } Transform2D inv_camera_transform = get_camera_transform().affine_inverse(); Size2 screen_size = get_viewport_rect().size; Vector2 screen_endpoints[4] = { inv_camera_transform.xform(Vector2(0, 0)), inv_camera_transform.xform(Vector2(screen_size.width, 0)), inv_camera_transform.xform(Vector2(screen_size.width, screen_size.height)), inv_camera_transform.xform(Vector2(0, screen_size.height)) }; Transform2D inv_transform = get_global_transform().affine_inverse(); // undo global space for (int i = 0; i < 4; i++) { draw_line(inv_transform.xform(screen_endpoints[i]), inv_transform.xform(screen_endpoints[(i + 1) % 4]), area_axis_color, area_axis_width); } } if (limit_drawing_enabled) { Color limit_drawing_color(1, 1, 0, 0.63); float limit_drawing_width = 1; if (is_current()) { limit_drawing_color.a = 0.83; limit_drawing_width = 3; } Vector2 camera_origin = get_global_transform().get_origin(); Vector2 camera_scale = get_global_transform().get_scale().abs(); Vector2 limit_points[4] = { (Vector2(limit[MARGIN_LEFT], limit[MARGIN_TOP]) - camera_origin) / camera_scale, (Vector2(limit[MARGIN_RIGHT], limit[MARGIN_TOP]) - camera_origin) / camera_scale, (Vector2(limit[MARGIN_RIGHT], limit[MARGIN_BOTTOM]) - camera_origin) / camera_scale, (Vector2(limit[MARGIN_LEFT], limit[MARGIN_BOTTOM]) - camera_origin) / camera_scale }; for (int i = 0; i < 4; i++) { draw_line(limit_points[i], limit_points[(i + 1) % 4], limit_drawing_color, limit_drawing_width); } } if (margin_drawing_enabled) { Color margin_drawing_color(0, 1, 1, 0.63); float margin_drawing_width = 1; if (is_current()) { margin_drawing_width = 3; margin_drawing_color.a = 0.83; } Transform2D inv_camera_transform = get_camera_transform().affine_inverse(); Size2 screen_size = get_viewport_rect().size; Vector2 margin_endpoints[4] = { inv_camera_transform.xform(Vector2((screen_size.width / 2) - ((screen_size.width / 2) * drag_margin[MARGIN_LEFT]), (screen_size.height / 2) - ((screen_size.height / 2) * drag_margin[MARGIN_TOP]))), inv_camera_transform.xform(Vector2((screen_size.width / 2) + ((screen_size.width / 2) * drag_margin[MARGIN_RIGHT]), (screen_size.height / 2) - ((screen_size.height / 2) * drag_margin[MARGIN_TOP]))), inv_camera_transform.xform(Vector2((screen_size.width / 2) + ((screen_size.width / 2) * drag_margin[MARGIN_RIGHT]), (screen_size.height / 2) + ((screen_size.height / 2) * drag_margin[MARGIN_BOTTOM]))), inv_camera_transform.xform(Vector2((screen_size.width / 2) - ((screen_size.width / 2) * drag_margin[MARGIN_LEFT]), (screen_size.height / 2) + ((screen_size.height / 2) * drag_margin[MARGIN_BOTTOM]))) }; Transform2D inv_transform = get_global_transform().affine_inverse(); // undo global space for (int i = 0; i < 4; i++) { draw_line(inv_transform.xform(margin_endpoints[i]), inv_transform.xform(margin_endpoints[(i + 1) % 4]), margin_drawing_color, margin_drawing_width); } } } break; } }