void CollisionShape2D::_notification(int p_what) { switch(p_what) { case NOTIFICATION_ENTER_TREE: { unparenting=false; can_update_body=get_tree()->is_editor_hint(); if (!get_tree()->is_editor_hint()) { //display above all else set_z_as_relative(false); set_z(VS::CANVAS_ITEM_Z_MAX-1); } } break; case NOTIFICATION_LOCAL_TRANSFORM_CHANGED: { if (!is_inside_tree()) break; if (can_update_body) { _update_parent(); } else if (update_shape_index>=0) { CollisionObject2D *co = get_parent()->cast_to<CollisionObject2D>(); if (co) { co->set_shape_transform(update_shape_index,get_transform()); } } } break; case NOTIFICATION_EXIT_TREE: { can_update_body=false; } break; /* case NOTIFICATION_TRANSFORM_CHANGED: { if (!is_inside_scene()) break; _update_parent(); } break;*/ case NOTIFICATION_DRAW: { if (!get_tree()->is_editor_hint() && !get_tree()->is_debugging_collisions_hint()) { break; } if (!shape.is_valid()) { break; } rect=Rect2(); Color draw_col=get_tree()->get_debug_collisions_color(); shape->draw(get_canvas_item(),draw_col); rect=shape->get_rect(); rect=rect.grow(3); } break; case NOTIFICATION_UNPARENTED: { unparenting = true; _update_parent(); } break; } }
void CollisionPolygon2D::_notification(int p_what) { switch(p_what) { case NOTIFICATION_ENTER_TREE: { unparenting=false; can_update_body=get_tree()->is_editor_hint(); if (!get_tree()->is_editor_hint()) { //display above all else set_z_as_relative(false); set_z(VS::CANVAS_ITEM_Z_MAX-1); } } break; case NOTIFICATION_EXIT_TREE: { can_update_body=false; } break; case NOTIFICATION_LOCAL_TRANSFORM_CHANGED: { if (!is_inside_tree()) break; if (can_update_body) { _update_parent(); } else if (shape_from>=0 && shape_to>=0) { CollisionObject2D *co = get_parent()->cast_to<CollisionObject2D>(); for(int i=shape_from;i<=shape_to;i++) { co->set_shape_transform(i,get_transform()); } } } break; case NOTIFICATION_DRAW: { if (!get_tree()->is_editor_hint() && !get_tree()->is_debugging_collisions_hint()) { break; } for(int i=0;i<polygon.size();i++) { Vector2 p = polygon[i]; Vector2 n = polygon[(i+1)%polygon.size()]; draw_line(p,n,Color(0.9,0.2,0.0,0.8),3); } #define DEBUG_DECOMPOSE #if defined(TOOLS_ENABLED) && defined (DEBUG_DECOMPOSE) Vector< Vector<Vector2> > decomp = _decompose_in_convex(); Color c(0.4,0.9,0.1); for(int i=0;i<decomp.size();i++) { c.set_hsv( Math::fmod(c.get_h() + 0.738,1),c.get_s(),c.get_v(),0.5); draw_colored_polygon(decomp[i],c); } #else draw_colored_polygon(polygon,get_tree()->get_debug_collisions_color()); #endif } break; case NOTIFICATION_UNPARENTED: { unparenting = true; _update_parent(); } break; } }