diff options
Diffstat (limited to 'scene/main')
-rw-r--r-- | scene/main/canvas_item.cpp | 241 | ||||
-rw-r--r-- | scene/main/canvas_item.h | 10 | ||||
-rw-r--r-- | scene/main/canvas_layer.cpp | 68 | ||||
-rw-r--r-- | scene/main/canvas_layer.h | 1 | ||||
-rw-r--r-- | scene/main/http_request.cpp | 60 | ||||
-rw-r--r-- | scene/main/http_request.h | 1 | ||||
-rw-r--r-- | scene/main/instance_placeholder.cpp | 28 | ||||
-rw-r--r-- | scene/main/instance_placeholder.h | 1 | ||||
-rw-r--r-- | scene/main/node.cpp | 649 | ||||
-rw-r--r-- | scene/main/node.h | 6 | ||||
-rw-r--r-- | scene/main/resource_preloader.cpp | 18 | ||||
-rw-r--r-- | scene/main/resource_preloader.h | 1 | ||||
-rw-r--r-- | scene/main/scene_tree.cpp | 300 | ||||
-rw-r--r-- | scene/main/scene_tree.h | 3 | ||||
-rw-r--r-- | scene/main/shader_globals_override.cpp | 12 | ||||
-rw-r--r-- | scene/main/shader_globals_override.h | 1 | ||||
-rw-r--r-- | scene/main/timer.cpp | 41 | ||||
-rw-r--r-- | scene/main/timer.h | 1 | ||||
-rw-r--r-- | scene/main/viewport.cpp | 552 | ||||
-rw-r--r-- | scene/main/viewport.h | 4 | ||||
-rw-r--r-- | scene/main/window.cpp | 86 |
21 files changed, 824 insertions, 1260 deletions
diff --git a/scene/main/canvas_item.cpp b/scene/main/canvas_item.cpp index e91826d44b..524ff346d1 100644 --- a/scene/main/canvas_item.cpp +++ b/scene/main/canvas_item.cpp @@ -48,7 +48,6 @@ Map<CanvasItemMaterial::MaterialKey, CanvasItemMaterial::ShaderData> CanvasItemM CanvasItemMaterial::ShaderNames *CanvasItemMaterial::shader_names = nullptr; void CanvasItemMaterial::init_shaders() { - dirty_materials = memnew(SelfList<CanvasItemMaterial>::List); shader_names = memnew(ShaderNames); @@ -59,19 +58,18 @@ void CanvasItemMaterial::init_shaders() { } void CanvasItemMaterial::finish_shaders() { - memdelete(dirty_materials); memdelete(shader_names); dirty_materials = nullptr; } void CanvasItemMaterial::_update_shader() { - dirty_materials->remove(&element); MaterialKey mk = _compute_key(); - if (mk.key == current_key.key) + if (mk.key == current_key.key) { return; //no update required in the end + } if (shader_map.has(current_key)) { shader_map[current_key].users--; @@ -85,7 +83,6 @@ void CanvasItemMaterial::_update_shader() { current_key = mk; if (shader_map.has(mk)) { - RS::get_singleton()->material_set_shader(_get_material(), shader_map[mk].shader); shader_map[mk].users++; return; @@ -129,7 +126,6 @@ void CanvasItemMaterial::_update_shader() { code += ";\n"; if (particles_animation) { - code += "uniform int particles_anim_h_frames;\n"; code += "uniform int particles_anim_v_frames;\n"; code += "uniform bool particles_anim_loop;\n"; @@ -165,17 +161,14 @@ void CanvasItemMaterial::_update_shader() { } void CanvasItemMaterial::flush_changes() { - MutexLock lock(material_mutex); while (dirty_materials->first()) { - dirty_materials->first()->self()->_update_shader(); } } void CanvasItemMaterial::_queue_shader_change() { - MutexLock lock(material_mutex); if (!element.in_list()) { @@ -184,13 +177,12 @@ void CanvasItemMaterial::_queue_shader_change() { } bool CanvasItemMaterial::_is_shader_dirty() const { - MutexLock lock(material_mutex); return element.in_list(); } -void CanvasItemMaterial::set_blend_mode(BlendMode p_blend_mode) { +void CanvasItemMaterial::set_blend_mode(BlendMode p_blend_mode) { blend_mode = p_blend_mode; _queue_shader_change(); } @@ -200,13 +192,11 @@ CanvasItemMaterial::BlendMode CanvasItemMaterial::get_blend_mode() const { } void CanvasItemMaterial::set_light_mode(LightMode p_light_mode) { - light_mode = p_light_mode; _queue_shader_change(); } CanvasItemMaterial::LightMode CanvasItemMaterial::get_light_mode() const { - return light_mode; } @@ -221,34 +211,29 @@ bool CanvasItemMaterial::get_particles_animation() const { } void CanvasItemMaterial::set_particles_anim_h_frames(int p_frames) { - particles_anim_h_frames = p_frames; RS::get_singleton()->material_set_param(_get_material(), shader_names->particles_anim_h_frames, p_frames); } int CanvasItemMaterial::get_particles_anim_h_frames() const { - return particles_anim_h_frames; } -void CanvasItemMaterial::set_particles_anim_v_frames(int p_frames) { +void CanvasItemMaterial::set_particles_anim_v_frames(int p_frames) { particles_anim_v_frames = p_frames; RS::get_singleton()->material_set_param(_get_material(), shader_names->particles_anim_v_frames, p_frames); } int CanvasItemMaterial::get_particles_anim_v_frames() const { - return particles_anim_v_frames; } void CanvasItemMaterial::set_particles_anim_loop(bool p_loop) { - particles_anim_loop = p_loop; RS::get_singleton()->material_set_param(_get_material(), shader_names->particles_anim_loop, particles_anim_loop); } bool CanvasItemMaterial::get_particles_anim_loop() const { - return particles_anim_loop; } @@ -259,18 +244,15 @@ void CanvasItemMaterial::_validate_property(PropertyInfo &property) const { } RID CanvasItemMaterial::get_shader_rid() const { - ERR_FAIL_COND_V(!shader_map.has(current_key), RID()); return shader_map[current_key].shader; } Shader::Mode CanvasItemMaterial::get_shader_mode() const { - return Shader::MODE_CANVAS_ITEM; } void CanvasItemMaterial::_bind_methods() { - ClassDB::bind_method(D_METHOD("set_blend_mode", "blend_mode"), &CanvasItemMaterial::set_blend_mode); ClassDB::bind_method(D_METHOD("get_blend_mode"), &CanvasItemMaterial::get_blend_mode); @@ -310,7 +292,6 @@ void CanvasItemMaterial::_bind_methods() { CanvasItemMaterial::CanvasItemMaterial() : element(this) { - blend_mode = BLEND_MODE_MIX; light_mode = LIGHT_MODE_NORMAL; particles_animation = false; @@ -325,7 +306,6 @@ CanvasItemMaterial::CanvasItemMaterial() : } CanvasItemMaterial::~CanvasItemMaterial() { - MutexLock lock(material_mutex); if (shader_map.has(current_key)) { @@ -356,15 +336,16 @@ Transform2D CanvasItem::_edit_get_transform() const { #endif bool CanvasItem::is_visible_in_tree() const { - - if (!is_inside_tree()) + if (!is_inside_tree()) { return false; + } const CanvasItem *p = this; while (p) { - if (!p->visible) + if (!p->visible) { return false; + } if (p->window && !p->window->is_visible()) { return false; } @@ -375,54 +356,56 @@ bool CanvasItem::is_visible_in_tree() const { } void CanvasItem::_propagate_visibility_changed(bool p_visible) { - if (p_visible && first_draw) { //avoid propagating it twice first_draw = false; } notification(NOTIFICATION_VISIBILITY_CHANGED); - if (p_visible) + if (p_visible) { update(); //todo optimize - else + } else { emit_signal(SceneStringNames::get_singleton()->hide); + } _block(); for (int i = 0; i < get_child_count(); i++) { - CanvasItem *c = Object::cast_to<CanvasItem>(get_child(i)); - if (c && c->visible) //should the toplevels stop propagation? i think so but.. + if (c && c->visible) { //should the toplevels stop propagation? i think so but.. c->_propagate_visibility_changed(p_visible); + } } _unblock(); } void CanvasItem::show() { - - if (visible) + if (visible) { return; + } visible = true; RenderingServer::get_singleton()->canvas_item_set_visible(canvas_item, true); - if (!is_inside_tree()) + if (!is_inside_tree()) { return; + } _propagate_visibility_changed(true); _change_notify("visible"); } void CanvasItem::hide() { - - if (!visible) + if (!visible) { return; + } visible = false; RenderingServer::get_singleton()->canvas_item_set_visible(canvas_item, false); - if (!is_inside_tree()) + if (!is_inside_tree()) { return; + } _propagate_visibility_changed(false); _change_notify("visible"); @@ -434,7 +417,6 @@ CanvasItem *CanvasItem::get_current_item_drawn() { } void CanvasItem::_update_callback() { - if (!is_inside_tree()) { pending_update = false; return; @@ -462,13 +444,13 @@ void CanvasItem::_update_callback() { } Transform2D CanvasItem::get_global_transform_with_canvas() const { - - if (canvas_layer) + if (canvas_layer) { return canvas_layer->get_transform() * get_global_transform(); - else if (is_inside_tree()) + } else if (is_inside_tree()) { return get_viewport()->get_canvas_transform() * get_global_transform(); - else + } else { return get_global_transform(); + } } Transform2D CanvasItem::get_screen_transform() const { @@ -491,12 +473,12 @@ Transform2D CanvasItem::get_global_transform() const { ERR_FAIL_COND_V(!is_inside_tree(), get_transform()); #endif if (global_invalid) { - const CanvasItem *pi = get_parent_item(); - if (pi) + if (pi) { global_transform = pi->get_global_transform() * get_transform(); - else + } else { global_transform = get_transform(); + } global_invalid = false; } @@ -505,26 +487,24 @@ Transform2D CanvasItem::get_global_transform() const { } void CanvasItem::_toplevel_raise_self() { - - if (!is_inside_tree()) + if (!is_inside_tree()) { return; + } - if (canvas_layer) + if (canvas_layer) { RenderingServer::get_singleton()->canvas_item_set_draw_index(canvas_item, canvas_layer->get_sort_index()); - else + } else { RenderingServer::get_singleton()->canvas_item_set_draw_index(canvas_item, get_viewport()->gui_get_canvas_sort_index()); + } } void CanvasItem::_enter_canvas() { - if ((!Object::cast_to<CanvasItem>(get_parent())) || toplevel) { - Node *n = this; canvas_layer = nullptr; while (n) { - canvas_layer = Object::cast_to<CanvasLayer>(n); if (canvas_layer) { break; @@ -536,25 +516,26 @@ void CanvasItem::_enter_canvas() { } RID canvas; - if (canvas_layer) + if (canvas_layer) { canvas = canvas_layer->get_canvas(); - else + } else { canvas = get_viewport()->find_world_2d()->get_canvas(); + } RenderingServer::get_singleton()->canvas_item_set_parent(canvas_item, canvas); group = "root_canvas" + itos(canvas.get_id()); add_to_group(group); - if (canvas_layer) + if (canvas_layer) { canvas_layer->reset_sort_index(); - else + } else { get_viewport()->gui_reset_canvas_sort_index(); + } get_tree()->call_group_flags(SceneTree::GROUP_CALL_UNIQUE, group, "_toplevel_raise_self"); } else { - CanvasItem *parent = get_parent_item(); canvas_layer = parent->canvas_layer; RenderingServer::get_singleton()->canvas_item_set_parent(canvas_item, parent->get_canvas_item()); @@ -568,7 +549,6 @@ void CanvasItem::_enter_canvas() { } void CanvasItem::_exit_canvas() { - notification(NOTIFICATION_EXIT_CANVAS, true); //reverse the notification RenderingServer::get_singleton()->canvas_item_set_parent(canvas_item, RID()); canvas_layer = nullptr; @@ -576,10 +556,8 @@ void CanvasItem::_exit_canvas() { } void CanvasItem::_notification(int p_what) { - switch (p_what) { case NOTIFICATION_ENTER_TREE: { - _update_texture_filter_changed(false); _update_texture_repeat_changed(false); @@ -587,8 +565,9 @@ void CanvasItem::_notification(int p_what) { Node *parent = get_parent(); if (parent) { CanvasItem *ci = Object::cast_to<CanvasItem>(parent); - if (ci) + if (ci) { C = ci->children_items.push_back(this); + } if (!ci) { //look for a window Viewport *viewport = nullptr; @@ -615,9 +594,9 @@ void CanvasItem::_notification(int p_what) { } } break; case NOTIFICATION_MOVED_IN_PARENT: { - - if (!is_inside_tree()) + if (!is_inside_tree()) { break; + } if (group != "") { get_tree()->call_group_flags(SceneTree::GROUP_CALL_UNIQUE, group, "_toplevel_raise_self"); @@ -629,8 +608,9 @@ void CanvasItem::_notification(int p_what) { } break; case NOTIFICATION_EXIT_TREE: { - if (xform_change.in_list()) + if (xform_change.in_list()) { get_tree()->xform_change_list.remove(&xform_change); + } _exit_canvas(); if (C) { Object::cast_to<CanvasItem>(get_parent())->children_items.erase(C); @@ -643,41 +623,38 @@ void CanvasItem::_notification(int p_what) { } break; case NOTIFICATION_DRAW: case NOTIFICATION_TRANSFORM_CHANGED: { - } break; case NOTIFICATION_VISIBILITY_CHANGED: { - emit_signal(SceneStringNames::get_singleton()->visibility_changed); } break; } } void CanvasItem::set_visible(bool p_visible) { - - if (p_visible) + if (p_visible) { show(); - else + } else { hide(); + } } void CanvasItem::_window_visibility_changed() { - if (visible) { _propagate_visibility_changed(window->is_visible()); } } bool CanvasItem::is_visible() const { - return visible; } void CanvasItem::update() { - - if (!is_inside_tree()) + if (!is_inside_tree()) { return; - if (pending_update) + } + if (pending_update) { return; + } pending_update = true; @@ -685,22 +662,22 @@ void CanvasItem::update() { } void CanvasItem::set_modulate(const Color &p_modulate) { - - if (modulate == p_modulate) + if (modulate == p_modulate) { return; + } modulate = p_modulate; RenderingServer::get_singleton()->canvas_item_set_modulate(canvas_item, modulate); } -Color CanvasItem::get_modulate() const { +Color CanvasItem::get_modulate() const { return modulate; } void CanvasItem::set_as_toplevel(bool p_toplevel) { - - if (toplevel == p_toplevel) + if (toplevel == p_toplevel) { return; + } if (!is_inside_tree()) { toplevel = p_toplevel; @@ -713,61 +690,57 @@ void CanvasItem::set_as_toplevel(bool p_toplevel) { } bool CanvasItem::is_set_as_toplevel() const { - return toplevel; } CanvasItem *CanvasItem::get_parent_item() const { - - if (toplevel) + if (toplevel) { return nullptr; + } return Object::cast_to<CanvasItem>(get_parent()); } void CanvasItem::set_self_modulate(const Color &p_self_modulate) { - - if (self_modulate == p_self_modulate) + if (self_modulate == p_self_modulate) { return; + } self_modulate = p_self_modulate; RenderingServer::get_singleton()->canvas_item_set_self_modulate(canvas_item, self_modulate); } -Color CanvasItem::get_self_modulate() const { +Color CanvasItem::get_self_modulate() const { return self_modulate; } void CanvasItem::set_light_mask(int p_light_mask) { - - if (light_mask == p_light_mask) + if (light_mask == p_light_mask) { return; + } light_mask = p_light_mask; RS::get_singleton()->canvas_item_set_light_mask(canvas_item, p_light_mask); } int CanvasItem::get_light_mask() const { - return light_mask; } void CanvasItem::item_rect_changed(bool p_size_changed) { - - if (p_size_changed) + if (p_size_changed) { update(); + } emit_signal(SceneStringNames::get_singleton()->item_rect_changed); } void CanvasItem::draw_line(const Point2 &p_from, const Point2 &p_to, const Color &p_color, float p_width) { - ERR_FAIL_COND_MSG(!drawing, "Drawing is only allowed inside NOTIFICATION_DRAW, _draw() function or 'draw' signal."); RenderingServer::get_singleton()->canvas_item_add_line(canvas_item, p_from, p_to, p_color, p_width); } void CanvasItem::draw_polyline(const Vector<Point2> &p_points, const Color &p_color, float p_width) { - ERR_FAIL_COND_MSG(!drawing, "Drawing is only allowed inside NOTIFICATION_DRAW, _draw() function or 'draw' signal."); Vector<Color> colors; @@ -776,14 +749,12 @@ void CanvasItem::draw_polyline(const Vector<Point2> &p_points, const Color &p_co } void CanvasItem::draw_polyline_colors(const Vector<Point2> &p_points, const Vector<Color> &p_colors, float p_width) { - ERR_FAIL_COND_MSG(!drawing, "Drawing is only allowed inside NOTIFICATION_DRAW, _draw() function or 'draw' signal."); RenderingServer::get_singleton()->canvas_item_add_polyline(canvas_item, p_points, p_colors, p_width); } void CanvasItem::draw_arc(const Vector2 &p_center, float p_radius, float p_start_angle, float p_end_angle, int p_point_count, const Color &p_color, float p_width) { - Vector<Point2> points; points.resize(p_point_count); const float delta_angle = p_end_angle - p_start_angle; @@ -796,7 +767,6 @@ void CanvasItem::draw_arc(const Vector2 &p_center, float p_radius, float p_start } void CanvasItem::draw_multiline(const Vector<Point2> &p_points, const Color &p_color, float p_width) { - ERR_FAIL_COND_MSG(!drawing, "Drawing is only allowed inside NOTIFICATION_DRAW, _draw() function or 'draw' signal."); Vector<Color> colors; @@ -805,14 +775,12 @@ void CanvasItem::draw_multiline(const Vector<Point2> &p_points, const Color &p_c } void CanvasItem::draw_multiline_colors(const Vector<Point2> &p_points, const Vector<Color> &p_colors, float p_width) { - ERR_FAIL_COND_MSG(!drawing, "Drawing is only allowed inside NOTIFICATION_DRAW, _draw() function or 'draw' signal."); RenderingServer::get_singleton()->canvas_item_add_multiline(canvas_item, p_points, p_colors, p_width); } void CanvasItem::draw_rect(const Rect2 &p_rect, const Color &p_color, bool p_filled, float p_width) { - ERR_FAIL_COND_MSG(!drawing, "Drawing is only allowed inside NOTIFICATION_DRAW, _draw() function or 'draw' signal."); if (p_filled) { @@ -859,14 +827,12 @@ void CanvasItem::draw_rect(const Rect2 &p_rect, const Color &p_color, bool p_fil } void CanvasItem::draw_circle(const Point2 &p_pos, float p_radius, const Color &p_color) { - ERR_FAIL_COND_MSG(!drawing, "Drawing is only allowed inside NOTIFICATION_DRAW, _draw() function or 'draw' signal."); RenderingServer::get_singleton()->canvas_item_add_circle(canvas_item, p_pos, p_radius, p_color); } void CanvasItem::draw_texture(const Ref<Texture2D> &p_texture, const Point2 &p_pos, const Color &p_modulate, const Ref<Texture2D> &p_normal_map, const Ref<Texture2D> &p_specular_map, const Color &p_specular_color_shininess, TextureFilter p_texture_filter, TextureRepeat p_texture_repeat) { - ERR_FAIL_COND_MSG(!drawing, "Drawing is only allowed inside NOTIFICATION_DRAW, _draw() function or 'draw' signal."); ERR_FAIL_COND(p_texture.is_null()); @@ -875,14 +841,13 @@ void CanvasItem::draw_texture(const Ref<Texture2D> &p_texture, const Point2 &p_p } void CanvasItem::draw_texture_rect(const Ref<Texture2D> &p_texture, const Rect2 &p_rect, bool p_tile, const Color &p_modulate, bool p_transpose, const Ref<Texture2D> &p_normal_map, const Ref<Texture2D> &p_specular_map, const Color &p_specular_color_shininess, TextureFilter p_texture_filter, TextureRepeat p_texture_repeat) { - ERR_FAIL_COND_MSG(!drawing, "Drawing is only allowed inside NOTIFICATION_DRAW, _draw() function or 'draw' signal."); ERR_FAIL_COND(p_texture.is_null()); p_texture->draw_rect(canvas_item, p_rect, p_tile, p_modulate, p_transpose, p_normal_map, p_specular_map, p_specular_color_shininess, RS::CanvasItemTextureFilter(p_texture_filter), RS::CanvasItemTextureRepeat(p_texture_repeat)); } -void CanvasItem::draw_texture_rect_region(const Ref<Texture2D> &p_texture, const Rect2 &p_rect, const Rect2 &p_src_rect, const Color &p_modulate, bool p_transpose, const Ref<Texture2D> &p_normal_map, const Ref<Texture2D> &p_specular_map, const Color &p_specular_color_shininess, bool p_clip_uv, TextureFilter p_texture_filter, TextureRepeat p_texture_repeat) { +void CanvasItem::draw_texture_rect_region(const Ref<Texture2D> &p_texture, const Rect2 &p_rect, const Rect2 &p_src_rect, const Color &p_modulate, bool p_transpose, const Ref<Texture2D> &p_normal_map, const Ref<Texture2D> &p_specular_map, const Color &p_specular_color_shininess, bool p_clip_uv, TextureFilter p_texture_filter, TextureRepeat p_texture_repeat) { ERR_FAIL_COND_MSG(!drawing, "Drawing is only allowed inside NOTIFICATION_DRAW, _draw() function or 'draw' signal."); ERR_FAIL_COND(p_texture.is_null()); p_texture->draw_rect_region(canvas_item, p_rect, p_src_rect, p_modulate, p_transpose, p_normal_map, p_specular_map, p_specular_color_shininess, RS::CanvasItemTextureFilter(p_texture_filter), RS::CanvasItemTextureRepeat(p_texture_repeat), p_clip_uv); @@ -895,8 +860,8 @@ void CanvasItem::draw_style_box(const Ref<StyleBox> &p_style_box, const Rect2 &p p_style_box->draw(canvas_item, p_rect); } -void CanvasItem::draw_primitive(const Vector<Point2> &p_points, const Vector<Color> &p_colors, const Vector<Point2> &p_uvs, Ref<Texture2D> p_texture, float p_width, const Ref<Texture2D> &p_normal_map, const Ref<Texture2D> &p_specular_map, const Color &p_specular_color_shininess, TextureFilter p_texture_filter, TextureRepeat p_texture_repeat) { +void CanvasItem::draw_primitive(const Vector<Point2> &p_points, const Vector<Color> &p_colors, const Vector<Point2> &p_uvs, Ref<Texture2D> p_texture, float p_width, const Ref<Texture2D> &p_normal_map, const Ref<Texture2D> &p_specular_map, const Color &p_specular_color_shininess, TextureFilter p_texture_filter, TextureRepeat p_texture_repeat) { ERR_FAIL_COND_MSG(!drawing, "Drawing is only allowed inside NOTIFICATION_DRAW, _draw() function or 'draw' signal."); RID rid = p_texture.is_valid() ? p_texture->get_rid() : RID(); @@ -905,8 +870,8 @@ void CanvasItem::draw_primitive(const Vector<Point2> &p_points, const Vector<Col RenderingServer::get_singleton()->canvas_item_add_primitive(canvas_item, p_points, p_colors, p_uvs, rid, p_width, rid_normal, rid_specular, p_specular_color_shininess, RS::CanvasItemTextureFilter(p_texture_filter), RS::CanvasItemTextureRepeat(p_texture_repeat)); } -void CanvasItem::draw_set_transform(const Point2 &p_offset, float p_rot, const Size2 &p_scale) { +void CanvasItem::draw_set_transform(const Point2 &p_offset, float p_rot, const Size2 &p_scale) { ERR_FAIL_COND_MSG(!drawing, "Drawing is only allowed inside NOTIFICATION_DRAW, _draw() function or 'draw' signal."); Transform2D xform(p_rot, p_offset); @@ -915,14 +880,12 @@ void CanvasItem::draw_set_transform(const Point2 &p_offset, float p_rot, const S } void CanvasItem::draw_set_transform_matrix(const Transform2D &p_matrix) { - ERR_FAIL_COND_MSG(!drawing, "Drawing is only allowed inside NOTIFICATION_DRAW, _draw() function or 'draw' signal."); RenderingServer::get_singleton()->canvas_item_add_set_transform(canvas_item, p_matrix); } void CanvasItem::draw_polygon(const Vector<Point2> &p_points, const Vector<Color> &p_colors, const Vector<Point2> &p_uvs, Ref<Texture2D> p_texture, const Ref<Texture2D> &p_normal_map, const Ref<Texture2D> &p_specular_map, const Color &p_specular_color_shininess, TextureFilter p_texture_filter, TextureRepeat p_texture_repeat) { - ERR_FAIL_COND_MSG(!drawing, "Drawing is only allowed inside NOTIFICATION_DRAW, _draw() function or 'draw' signal."); RID rid = p_texture.is_valid() ? p_texture->get_rid() : RID(); @@ -933,7 +896,6 @@ void CanvasItem::draw_polygon(const Vector<Point2> &p_points, const Vector<Color } void CanvasItem::draw_colored_polygon(const Vector<Point2> &p_points, const Color &p_color, const Vector<Point2> &p_uvs, Ref<Texture2D> p_texture, const Ref<Texture2D> &p_normal_map, const Ref<Texture2D> &p_specular_map, const Color &p_specular_color_shininess, TextureFilter p_texture_filter, TextureRepeat p_texture_repeat) { - ERR_FAIL_COND_MSG(!drawing, "Drawing is only allowed inside NOTIFICATION_DRAW, _draw() function or 'draw' signal."); Vector<Color> colors; @@ -946,7 +908,6 @@ void CanvasItem::draw_colored_polygon(const Vector<Point2> &p_points, const Colo } void CanvasItem::draw_mesh(const Ref<Mesh> &p_mesh, const Ref<Texture2D> &p_texture, const Ref<Texture2D> &p_normal_map, const Ref<Texture2D> &p_specular_map, const Color &p_specular_color_shininess, const Transform2D &p_transform, const Color &p_modulate, TextureFilter p_texture_filter, TextureRepeat p_texture_repeat) { - ERR_FAIL_COND(p_mesh.is_null()); RID texture_rid = p_texture.is_valid() ? p_texture->get_rid() : RID(); RID normal_map_rid = p_normal_map.is_valid() ? p_normal_map->get_rid() : RID(); @@ -954,8 +915,8 @@ void CanvasItem::draw_mesh(const Ref<Mesh> &p_mesh, const Ref<Texture2D> &p_text RenderingServer::get_singleton()->canvas_item_add_mesh(canvas_item, p_mesh->get_rid(), p_transform, p_modulate, texture_rid, normal_map_rid, specular_map_rid, p_specular_color_shininess, RS::CanvasItemTextureFilter(p_texture_filter), RS::CanvasItemTextureRepeat(p_texture_repeat)); } -void CanvasItem::draw_multimesh(const Ref<MultiMesh> &p_multimesh, const Ref<Texture2D> &p_texture, const Ref<Texture2D> &p_normal_map, const Ref<Texture2D> &p_specular_map, const Color &p_specular_color_shininess, TextureFilter p_texture_filter, TextureRepeat p_texture_repeat) { +void CanvasItem::draw_multimesh(const Ref<MultiMesh> &p_multimesh, const Ref<Texture2D> &p_texture, const Ref<Texture2D> &p_normal_map, const Ref<Texture2D> &p_specular_map, const Color &p_specular_color_shininess, TextureFilter p_texture_filter, TextureRepeat p_texture_repeat) { ERR_FAIL_COND(p_multimesh.is_null()); RID texture_rid = p_texture.is_valid() ? p_texture->get_rid() : RID(); RID normal_map_rid = p_normal_map.is_valid() ? p_normal_map->get_rid() : RID(); @@ -965,7 +926,6 @@ void CanvasItem::draw_multimesh(const Ref<MultiMesh> &p_multimesh, const Ref<Tex } void CanvasItem::draw_string(const Ref<Font> &p_font, const Point2 &p_pos, const String &p_text, const Color &p_modulate, int p_clip_w) { - ERR_FAIL_COND_MSG(!drawing, "Drawing is only allowed inside NOTIFICATION_DRAW, _draw() function or 'draw' signal."); ERR_FAIL_COND(p_font.is_null()); @@ -973,7 +933,6 @@ void CanvasItem::draw_string(const Ref<Font> &p_font, const Point2 &p_pos, const } float CanvasItem::draw_char(const Ref<Font> &p_font, const Point2 &p_pos, const String &p_char, const String &p_next, const Color &p_modulate) { - ERR_FAIL_COND_V_MSG(!drawing, 0, "Drawing is only allowed inside NOTIFICATION_DRAW, _draw() function or 'draw' signal."); ERR_FAIL_COND_V(p_char.length() != 1, 0); @@ -986,7 +945,6 @@ float CanvasItem::draw_char(const Ref<Font> &p_font, const Point2 &p_pos, const } void CanvasItem::_notify_transform(CanvasItem *p_node) { - /* This check exists to avoid re-propagating the transform * notification down the tree on dirty nodes. It provides * optimization by avoiding redundancy (nodes are dirty, will get the @@ -1001,38 +959,37 @@ void CanvasItem::_notify_transform(CanvasItem *p_node) { if (p_node->notify_transform && !p_node->xform_change.in_list()) { if (!p_node->block_transform_notify) { - if (p_node->is_inside_tree()) + if (p_node->is_inside_tree()) { get_tree()->xform_change_list.add(&p_node->xform_change); + } } } for (List<CanvasItem *>::Element *E = p_node->children_items.front(); E; E = E->next()) { - CanvasItem *ci = E->get(); - if (ci->toplevel) + if (ci->toplevel) { continue; + } _notify_transform(ci); } } Rect2 CanvasItem::get_viewport_rect() const { - ERR_FAIL_COND_V(!is_inside_tree(), Rect2()); return get_viewport()->get_visible_rect(); } RID CanvasItem::get_canvas() const { - ERR_FAIL_COND_V(!is_inside_tree(), RID()); - if (canvas_layer) + if (canvas_layer) { return canvas_layer->get_canvas(); - else + } else { return get_viewport()->find_world_2d()->get_canvas(); + } } ObjectID CanvasItem::get_canvas_layer_instance_id() const { - if (canvas_layer) { return canvas_layer->get_instance_id(); } else { @@ -1041,7 +998,6 @@ ObjectID CanvasItem::get_canvas_layer_instance_id() const { } CanvasItem *CanvasItem::get_toplevel() const { - CanvasItem *ci = const_cast<CanvasItem *>(this); while (!ci->toplevel && Object::cast_to<CanvasItem>(ci->get_parent())) { ci = Object::cast_to<CanvasItem>(ci->get_parent()); @@ -1051,7 +1007,6 @@ CanvasItem *CanvasItem::get_toplevel() const { } Ref<World2D> CanvasItem::get_world_2d() const { - ERR_FAIL_COND_V(!is_inside_tree(), Ref<World2D>()); CanvasItem *tl = get_toplevel(); @@ -1064,7 +1019,6 @@ Ref<World2D> CanvasItem::get_world_2d() const { } RID CanvasItem::get_viewport_rid() const { - ERR_FAIL_COND_V(!is_inside_tree(), RID()); return get_viewport()->get_viewport_rid(); } @@ -1074,51 +1028,45 @@ void CanvasItem::set_block_transform_notify(bool p_enable) { } bool CanvasItem::is_block_transform_notify_enabled() const { - return block_transform_notify; } void CanvasItem::set_draw_behind_parent(bool p_enable) { - - if (behind == p_enable) + if (behind == p_enable) { return; + } behind = p_enable; RenderingServer::get_singleton()->canvas_item_set_draw_behind_parent(canvas_item, behind); } bool CanvasItem::is_draw_behind_parent_enabled() const { - return behind; } void CanvasItem::set_material(const Ref<Material> &p_material) { - material = p_material; RID rid; - if (material.is_valid()) + if (material.is_valid()) { rid = material->get_rid(); + } RS::get_singleton()->canvas_item_set_material(canvas_item, rid); _change_notify(); //properties for material exposed } void CanvasItem::set_use_parent_material(bool p_use_parent_material) { - use_parent_material = p_use_parent_material; RS::get_singleton()->canvas_item_set_use_parent_material(canvas_item, p_use_parent_material); } bool CanvasItem::get_use_parent_material() const { - return use_parent_material; } Ref<Material> CanvasItem::get_material() const { - return material; } Vector2 CanvasItem::make_canvas_position_local(const Vector2 &screen_point) const { - ERR_FAIL_COND_V(!is_inside_tree(), screen_point); Transform2D local_matrix = (get_canvas_transform() * get_global_transform()).affine_inverse(); @@ -1127,7 +1075,6 @@ Vector2 CanvasItem::make_canvas_position_local(const Vector2 &screen_point) cons } Ref<InputEvent> CanvasItem::make_input_local(const Ref<InputEvent> &p_event) const { - ERR_FAIL_COND_V(p_event.is_null(), p_event); ERR_FAIL_COND_V(!is_inside_tree(), p_event); @@ -1135,13 +1082,11 @@ Ref<InputEvent> CanvasItem::make_input_local(const Ref<InputEvent> &p_event) con } Vector2 CanvasItem::get_global_mouse_position() const { - ERR_FAIL_COND_V(!get_viewport(), Vector2()); return get_canvas_transform().affine_inverse().xform(get_viewport()->get_mouse_position()); } Vector2 CanvasItem::get_local_mouse_position() const { - ERR_FAIL_COND_V(!get_viewport(), Vector2()); return get_global_transform().affine_inverse().xform(get_global_mouse_position()); @@ -1159,7 +1104,6 @@ void CanvasItem::force_update_transform() { } void CanvasItem::_bind_methods() { - ClassDB::bind_method(D_METHOD("_toplevel_raise_self"), &CanvasItem::_toplevel_raise_self); ClassDB::bind_method(D_METHOD("_update_callback"), &CanvasItem::_update_callback); @@ -1316,23 +1260,21 @@ void CanvasItem::_bind_methods() { } Transform2D CanvasItem::get_canvas_transform() const { - ERR_FAIL_COND_V(!is_inside_tree(), Transform2D()); - if (canvas_layer) + if (canvas_layer) { return canvas_layer->get_transform(); - else if (Object::cast_to<CanvasItem>(get_parent())) + } else if (Object::cast_to<CanvasItem>(get_parent())) { return Object::cast_to<CanvasItem>(get_parent())->get_canvas_transform(); - else + } else { return get_viewport()->get_canvas_transform(); + } } Transform2D CanvasItem::get_viewport_transform() const { - ERR_FAIL_COND_V(!is_inside_tree(), Transform2D()); if (canvas_layer) { - if (get_viewport()) { return get_viewport()->get_final_transform() * canvas_layer->get_transform(); } else { @@ -1353,8 +1295,9 @@ bool CanvasItem::is_local_transform_notification_enabled() const { } void CanvasItem::set_notify_transform(bool p_enable) { - if (notify_transform == p_enable) + if (notify_transform == p_enable) { return; + } notify_transform = p_enable; @@ -1369,15 +1312,14 @@ bool CanvasItem::is_transform_notification_enabled() const { } int CanvasItem::get_canvas_layer() const { - - if (canvas_layer) + if (canvas_layer) { return canvas_layer->get_layer(); - else + } else { return 0; + } } void CanvasItem::_update_texture_filter_changed(bool p_propagate) { - if (!is_inside_tree()) { return; } @@ -1434,7 +1376,6 @@ CanvasItem::TextureFilter CanvasItem::get_texture_filter() const { } void CanvasItem::_update_texture_repeat_changed(bool p_propagate) { - if (!is_inside_tree()) { return; } @@ -1488,7 +1429,6 @@ CanvasItem::TextureRepeat CanvasItem::get_texture_repeat() const { CanvasItem::CanvasItem() : xform_change(this) { - window = nullptr; canvas_item = RenderingServer::get_singleton()->canvas_item_create(); visible = true; @@ -1515,6 +1455,5 @@ CanvasItem::CanvasItem() : } CanvasItem::~CanvasItem() { - RenderingServer::get_singleton()->free(canvas_item); } diff --git a/scene/main/canvas_item.h b/scene/main/canvas_item.h index 805659376a..31edd424a1 100644 --- a/scene/main/canvas_item.h +++ b/scene/main/canvas_item.h @@ -45,7 +45,6 @@ class Font; class StyleBox; class CanvasItemMaterial : public Material { - GDCLASS(CanvasItemMaterial, Material); public: @@ -66,7 +65,6 @@ public: private: union MaterialKey { - struct { uint32_t blend_mode : 4; uint32_t light_mode : 4; @@ -99,7 +97,6 @@ private: MaterialKey current_key; _FORCE_INLINE_ MaterialKey _compute_key() const { - MaterialKey mk; mk.key = 0; mk.blend_mode = blend_mode; @@ -162,7 +159,6 @@ VARIANT_ENUM_CAST(CanvasItemMaterial::BlendMode) VARIANT_ENUM_CAST(CanvasItemMaterial::LightMode) class CanvasItem : public Node { - GDCLASS(CanvasItem, Node); public: @@ -247,11 +243,13 @@ private: protected: _FORCE_INLINE_ void _notify_transform() { - if (!is_inside_tree()) + if (!is_inside_tree()) { return; + } _notify_transform(this); - if (!block_transform_notify && notify_local_transform) + if (!block_transform_notify && notify_local_transform) { notification(NOTIFICATION_LOCAL_TRANSFORM_CHANGED); + } } void item_rect_changed(bool p_size_changed = true); diff --git a/scene/main/canvas_layer.cpp b/scene/main/canvas_layer.cpp index c1caa943e3..46cfb968f8 100644 --- a/scene/main/canvas_layer.cpp +++ b/scene/main/canvas_layer.cpp @@ -32,40 +32,37 @@ #include "viewport.h" void CanvasLayer::set_layer(int p_xform) { - layer = p_xform; - if (viewport.is_valid()) + if (viewport.is_valid()) { RenderingServer::get_singleton()->viewport_set_canvas_stacking(viewport, canvas, layer, get_index()); + } } int CanvasLayer::get_layer() const { - return layer; } void CanvasLayer::set_transform(const Transform2D &p_xform) { - transform = p_xform; locrotscale_dirty = true; - if (viewport.is_valid()) + if (viewport.is_valid()) { RenderingServer::get_singleton()->viewport_set_canvas_transform(viewport, canvas, transform); + } } Transform2D CanvasLayer::get_transform() const { - return transform; } void CanvasLayer::_update_xform() { - transform.set_rotation_and_scale(rot, scale); transform.set_origin(ofs); - if (viewport.is_valid()) + if (viewport.is_valid()) { RenderingServer::get_singleton()->viewport_set_canvas_transform(viewport, canvas, transform); + } } void CanvasLayer::_update_locrotscale() { - ofs = transform.elements[2]; rot = transform.get_rotation(); scale = transform.get_scale(); @@ -73,74 +70,68 @@ void CanvasLayer::_update_locrotscale() { } void CanvasLayer::set_offset(const Vector2 &p_offset) { - - if (locrotscale_dirty) + if (locrotscale_dirty) { _update_locrotscale(); + } ofs = p_offset; _update_xform(); } Vector2 CanvasLayer::get_offset() const { - - if (locrotscale_dirty) + if (locrotscale_dirty) { const_cast<CanvasLayer *>(this)->_update_locrotscale(); + } return ofs; } void CanvasLayer::set_rotation(real_t p_radians) { - - if (locrotscale_dirty) + if (locrotscale_dirty) { _update_locrotscale(); + } rot = p_radians; _update_xform(); } real_t CanvasLayer::get_rotation() const { - - if (locrotscale_dirty) + if (locrotscale_dirty) { const_cast<CanvasLayer *>(this)->_update_locrotscale(); + } return rot; } void CanvasLayer::set_rotation_degrees(real_t p_degrees) { - set_rotation(Math::deg2rad(p_degrees)); } real_t CanvasLayer::get_rotation_degrees() const { - return Math::rad2deg(get_rotation()); } void CanvasLayer::set_scale(const Vector2 &p_scale) { - - if (locrotscale_dirty) + if (locrotscale_dirty) { _update_locrotscale(); + } scale = p_scale; _update_xform(); } Vector2 CanvasLayer::get_scale() const { - - if (locrotscale_dirty) + if (locrotscale_dirty) { const_cast<CanvasLayer *>(this)->_update_locrotscale(); + } return scale; } void CanvasLayer::_notification(int p_what) { - switch (p_what) { - case NOTIFICATION_ENTER_TREE: { - if (custom_viewport && ObjectDB::get_instance(custom_viewport_id)) { - vp = custom_viewport; } else { vp = Node::get_viewport(); @@ -157,7 +148,6 @@ void CanvasLayer::_notification(int p_what) { } break; case NOTIFICATION_EXIT_TREE: { - vp->_canvas_layer_remove(this); RenderingServer::get_singleton()->viewport_remove_canvas(viewport, canvas); viewport = RID(); @@ -165,25 +155,24 @@ void CanvasLayer::_notification(int p_what) { } break; case NOTIFICATION_MOVED_IN_PARENT: { - - if (is_inside_tree()) + if (is_inside_tree()) { RenderingServer::get_singleton()->viewport_set_canvas_stacking(viewport, canvas, layer, get_index()); + } } break; } } Size2 CanvasLayer::get_viewport_size() const { - - if (!is_inside_tree()) + if (!is_inside_tree()) { return Size2(1, 1); + } Rect2 r = vp->get_visible_rect(); return r.size; } RID CanvasLayer::get_viewport() const { - return viewport; } @@ -204,11 +193,11 @@ void CanvasLayer::set_custom_viewport(Node *p_viewport) { } if (is_inside_tree()) { - - if (custom_viewport) + if (custom_viewport) { vp = custom_viewport; - else + } else { vp = Node::get_viewport(); + } vp->_canvas_layer_add(this); viewport = vp->get_viewport_rid(); @@ -220,7 +209,6 @@ void CanvasLayer::set_custom_viewport(Node *p_viewport) { } Node *CanvasLayer::get_custom_viewport() const { - return custom_viewport; } @@ -229,12 +217,10 @@ void CanvasLayer::reset_sort_index() { } int CanvasLayer::get_sort_index() { - return sort_index++; } RID CanvasLayer::get_canvas() const { - return canvas; } @@ -261,7 +247,6 @@ float CanvasLayer::get_follow_viewport_scale() const { } void CanvasLayer::_update_follow_viewport(bool p_force_exit) { - if (!is_inside_tree()) { return; } @@ -273,7 +258,6 @@ void CanvasLayer::_update_follow_viewport(bool p_force_exit) { } void CanvasLayer::_bind_methods() { - ClassDB::bind_method(D_METHOD("set_layer", "layer"), &CanvasLayer::set_layer); ClassDB::bind_method(D_METHOD("get_layer"), &CanvasLayer::get_layer); @@ -319,7 +303,6 @@ void CanvasLayer::_bind_methods() { } CanvasLayer::CanvasLayer() { - vp = nullptr; scale = Vector2(1, 1); rot = 0; @@ -334,6 +317,5 @@ CanvasLayer::CanvasLayer() { } CanvasLayer::~CanvasLayer() { - RS::get_singleton()->free(canvas); } diff --git a/scene/main/canvas_layer.h b/scene/main/canvas_layer.h index 91ddbca3b9..0c68b1ab69 100644 --- a/scene/main/canvas_layer.h +++ b/scene/main/canvas_layer.h @@ -36,7 +36,6 @@ class Viewport; class CanvasLayer : public Node { - GDCLASS(CanvasLayer, Node); bool locrotscale_dirty; diff --git a/scene/main/http_request.cpp b/scene/main/http_request.cpp index dc0da015ac..82ee4dde50 100644 --- a/scene/main/http_request.cpp +++ b/scene/main/http_request.cpp @@ -34,12 +34,10 @@ void HTTPRequest::_redirect_request(const String &p_new_url) { } Error HTTPRequest::_request() { - return client->connect_to_host(url, port, use_ssl, validate_ssl); } Error HTTPRequest::_parse_url(const String &p_url) { - url = p_url; use_ssl = false; @@ -85,7 +83,6 @@ Error HTTPRequest::_parse_url(const String &p_url) { } Error HTTPRequest::request(const String &p_url, const Vector<String> &p_custom_headers, bool p_ssl_validate_domain, HTTPClient::Method p_method, const String &p_request_data) { - ERR_FAIL_COND_V(!is_inside_tree(), ERR_UNCONFIGURED); ERR_FAIL_COND_V_MSG(requesting, ERR_BUSY, "HTTPRequest is processing a request. Wait for completion or cancel it before attempting a new one."); @@ -97,8 +94,9 @@ Error HTTPRequest::request(const String &p_url, const Vector<String> &p_custom_h method = p_method; Error err = _parse_url(p_url); - if (err) + if (err) { return err; + } validate_ssl = p_ssl_validate_domain; @@ -109,7 +107,6 @@ Error HTTPRequest::request(const String &p_url, const Vector<String> &p_custom_h requesting = true; if (use_threads) { - thread_done = false; thread_request_quit = false; client->set_blocking_mode(true); @@ -129,7 +126,6 @@ Error HTTPRequest::request(const String &p_url, const Vector<String> &p_custom_h } void HTTPRequest::_thread_func(void *p_userdata) { - HTTPRequest *hr = (HTTPRequest *)p_userdata; Error err = hr->_request(); @@ -138,10 +134,10 @@ void HTTPRequest::_thread_func(void *p_userdata) { hr->call_deferred("_request_done", RESULT_CANT_CONNECT, 0, PackedStringArray(), PackedByteArray()); } else { while (!hr->thread_request_quit) { - bool exit = hr->_update_connection(); - if (exit) + if (exit) { break; + } OS::get_singleton()->delay_usec(1); } } @@ -150,11 +146,11 @@ void HTTPRequest::_thread_func(void *p_userdata) { } void HTTPRequest::cancel_request() { - timer->stop(); - if (!requesting) + if (!requesting) { return; + } if (!use_threads) { set_process_internal(false); @@ -178,7 +174,6 @@ void HTTPRequest::cancel_request() { } bool HTTPRequest::_handle_response(bool *ret_value) { - if (!client->has_response()) { call_deferred("_request_done", RESULT_NO_RESPONSE, 0, PackedStringArray(), PackedByteArray()); *ret_value = true; @@ -199,7 +194,6 @@ bool HTTPRequest::_handle_response(bool *ret_value) { // Handle redirect if (max_redirects >= 0 && redirections >= max_redirects) { - call_deferred("_request_done", RESULT_REDIRECT_LIMIT_REACHED, response_code, response_headers, PackedByteArray()); *ret_value = true; return true; @@ -243,7 +237,6 @@ bool HTTPRequest::_handle_response(bool *ret_value) { } bool HTTPRequest::_update_connection() { - switch (client->get_status()) { case HTTPClient::STATUS_DISCONNECTED: { call_deferred("_request_done", RESULT_CANT_CONNECT, 0, PackedStringArray(), PackedByteArray()); @@ -265,23 +258,20 @@ bool HTTPRequest::_update_connection() { return false; } break; // Connecting to IP case HTTPClient::STATUS_CANT_CONNECT: { - call_deferred("_request_done", RESULT_CANT_CONNECT, 0, PackedStringArray(), PackedByteArray()); return true; } break; case HTTPClient::STATUS_CONNECTED: { - if (request_sent) { - if (!got_response) { - // No body bool ret_value; - if (_handle_response(&ret_value)) + if (_handle_response(&ret_value)) { return ret_value; + } call_deferred("_request_done", RESULT_SUCCESS, response_code, response_headers, PackedByteArray()); return true; @@ -315,16 +305,14 @@ bool HTTPRequest::_update_connection() { } break; // Request in progress case HTTPClient::STATUS_BODY: { - if (!got_response) { - bool ret_value; - if (_handle_response(&ret_value)) + if (_handle_response(&ret_value)) { return ret_value; + } if (!client->is_response_chunked() && client->get_response_body_length() == 0) { - call_deferred("_request_done", RESULT_SUCCESS, response_code, response_headers, PackedByteArray()); return true; } @@ -341,7 +329,6 @@ bool HTTPRequest::_update_connection() { if (download_to_file != String()) { file = FileAccess::open(download_to_file, FileAccess::WRITE); if (!file) { - call_deferred("_request_done", RESULT_DOWNLOAD_FILE_CANT_OPEN, response_code, response_headers, PackedByteArray()); return true; } @@ -370,7 +357,6 @@ bool HTTPRequest::_update_connection() { } if (body_len >= 0) { - if (downloaded == body_len) { call_deferred("_request_done", RESULT_SUCCESS, response_code, response_headers, body); return true; @@ -397,20 +383,17 @@ bool HTTPRequest::_update_connection() { } void HTTPRequest::_request_done(int p_status, int p_code, const PackedStringArray &headers, const PackedByteArray &p_data) { - cancel_request(); emit_signal("request_completed", p_status, p_code, headers, p_data); } void HTTPRequest::_notification(int p_what) { - if (p_what == NOTIFICATION_INTERNAL_PROCESS) { - - if (use_threads) + if (use_threads) { return; + } bool done = _update_connection(); if (done) { - set_process_internal(false); // cancel_request(); called from _request done now } @@ -424,42 +407,35 @@ void HTTPRequest::_notification(int p_what) { } void HTTPRequest::set_use_threads(bool p_use) { - ERR_FAIL_COND(get_http_client_status() != HTTPClient::STATUS_DISCONNECTED); use_threads = p_use; } bool HTTPRequest::is_using_threads() const { - return use_threads; } void HTTPRequest::set_body_size_limit(int p_bytes) { - ERR_FAIL_COND(get_http_client_status() != HTTPClient::STATUS_DISCONNECTED); body_size_limit = p_bytes; } int HTTPRequest::get_body_size_limit() const { - return body_size_limit; } void HTTPRequest::set_download_file(const String &p_file) { - ERR_FAIL_COND(get_http_client_status() != HTTPClient::STATUS_DISCONNECTED); download_to_file = p_file; } String HTTPRequest::get_download_file() const { - return download_to_file; } void HTTPRequest::set_download_chunk_size(int p_chunk_size) { - ERR_FAIL_COND(get_http_client_status() != HTTPClient::STATUS_DISCONNECTED); client->set_read_chunk_size(p_chunk_size); @@ -474,42 +450,36 @@ HTTPClient::Status HTTPRequest::get_http_client_status() const { } void HTTPRequest::set_max_redirects(int p_max) { - max_redirects = p_max; } int HTTPRequest::get_max_redirects() const { - return max_redirects; } int HTTPRequest::get_downloaded_bytes() const { - return downloaded; } + int HTTPRequest::get_body_size() const { return body_len; } void HTTPRequest::set_timeout(int p_timeout) { - ERR_FAIL_COND(p_timeout < 0); timeout = p_timeout; } int HTTPRequest::get_timeout() { - return timeout; } void HTTPRequest::_timeout() { - cancel_request(); call_deferred("_request_done", RESULT_TIMEOUT, 0, PackedStringArray(), PackedByteArray()); } void HTTPRequest::_bind_methods() { - ClassDB::bind_method(D_METHOD("request", "url", "custom_headers", "ssl_validate_domain", "method", "request_data"), &HTTPRequest::request, DEFVAL(PackedStringArray()), DEFVAL(true), DEFVAL(HTTPClient::METHOD_GET), DEFVAL(String())); ClassDB::bind_method(D_METHOD("cancel_request"), &HTTPRequest::cancel_request); @@ -565,7 +535,6 @@ void HTTPRequest::_bind_methods() { } HTTPRequest::HTTPRequest() { - thread = nullptr; port = 80; @@ -593,6 +562,7 @@ HTTPRequest::HTTPRequest() { } HTTPRequest::~HTTPRequest() { - if (file) + if (file) { memdelete(file); + } } diff --git a/scene/main/http_request.h b/scene/main/http_request.h index a3d95cd652..1409965d45 100644 --- a/scene/main/http_request.h +++ b/scene/main/http_request.h @@ -38,7 +38,6 @@ #include "scene/main/timer.h" class HTTPRequest : public Node { - GDCLASS(HTTPRequest, Node); public: diff --git a/scene/main/instance_placeholder.cpp b/scene/main/instance_placeholder.cpp index 062b221c84..ca8d5a2ca0 100644 --- a/scene/main/instance_placeholder.cpp +++ b/scene/main/instance_placeholder.cpp @@ -34,7 +34,6 @@ #include "scene/resources/packed_scene.h" bool InstancePlaceholder::_set(const StringName &p_name, const Variant &p_value) { - PropSet ps; ps.name = p_name; ps.value = p_value; @@ -43,7 +42,6 @@ bool InstancePlaceholder::_set(const StringName &p_name, const Variant &p_value) } bool InstancePlaceholder::_get(const StringName &p_name, Variant &r_ret) const { - for (const List<PropSet>::Element *E = stored_values.front(); E; E = E->next()) { if (E->get().name == p_name) { r_ret = E->get().value; @@ -54,7 +52,6 @@ bool InstancePlaceholder::_get(const StringName &p_name, Variant &r_ret) const { } void InstancePlaceholder::_get_property_list(List<PropertyInfo> *p_list) const { - for (const List<PropSet>::Element *E = stored_values.front(); E; E = E->next()) { PropertyInfo pi; pi.name = E->get().name; @@ -66,34 +63,35 @@ void InstancePlaceholder::_get_property_list(List<PropertyInfo> *p_list) const { } void InstancePlaceholder::set_instance_path(const String &p_name) { - path = p_name; } String InstancePlaceholder::get_instance_path() const { - return path; } Node *InstancePlaceholder::create_instance(bool p_replace, const Ref<PackedScene> &p_custom_scene) { - ERR_FAIL_COND_V(!is_inside_tree(), nullptr); Node *base = get_parent(); - if (!base) + if (!base) { return nullptr; + } Ref<PackedScene> ps; - if (p_custom_scene.is_valid()) + if (p_custom_scene.is_valid()) { ps = p_custom_scene; - else + } else { ps = ResourceLoader::load(path, "PackedScene"); + } - if (!ps.is_valid()) + if (!ps.is_valid()) { return nullptr; + } Node *scene = ps->instance(); - if (!scene) + if (!scene) { return nullptr; + } scene->set_name(get_name()); int pos = get_index(); @@ -113,24 +111,24 @@ Node *InstancePlaceholder::create_instance(bool p_replace, const Ref<PackedScene } Dictionary InstancePlaceholder::get_stored_values(bool p_with_order) { - Dictionary ret; PackedStringArray order; for (List<PropSet>::Element *E = stored_values.front(); E; E = E->next()) { ret[E->get().name] = E->get().value; - if (p_with_order) + if (p_with_order) { order.push_back(E->get().name); + } }; - if (p_with_order) + if (p_with_order) { ret[".order"] = order; + } return ret; }; void InstancePlaceholder::_bind_methods() { - ClassDB::bind_method(D_METHOD("get_stored_values", "with_order"), &InstancePlaceholder::get_stored_values, DEFVAL(false)); ClassDB::bind_method(D_METHOD("create_instance", "replace", "custom_scene"), &InstancePlaceholder::create_instance, DEFVAL(false), DEFVAL(Variant())); ClassDB::bind_method(D_METHOD("get_instance_path"), &InstancePlaceholder::get_instance_path); diff --git a/scene/main/instance_placeholder.h b/scene/main/instance_placeholder.h index 9f7b84716d..ec1f8a9b09 100644 --- a/scene/main/instance_placeholder.h +++ b/scene/main/instance_placeholder.h @@ -36,7 +36,6 @@ class PackedScene; class InstancePlaceholder : public Node { - GDCLASS(InstancePlaceholder, Node); String path; diff --git a/scene/main/node.cpp b/scene/main/node.cpp index 3d56b51e26..ad4d3c54be 100644 --- a/scene/main/node.cpp +++ b/scene/main/node.cpp @@ -51,22 +51,16 @@ VARIANT_ENUM_CAST(Node::PauseMode); int Node::orphan_node_count = 0; 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 }; get_script_instance()->call_multilevel(SceneStringNames::get_singleton()->_process, ptr, 1); } } break; case NOTIFICATION_PHYSICS_PROCESS: { - if (get_script_instance()) { - Variant time = get_physics_process_delta_time(); const Variant *ptr[1] = { &time }; get_script_instance()->call_multilevel(SceneStringNames::get_singleton()->_physics_process, ptr, 1); @@ -78,21 +72,24 @@ void Node::_notification(int p_notification) { ERR_FAIL_COND(!get_tree()); if (data.pause_mode == PAUSE_MODE_INHERIT) { - - if (data.parent) + if (data.parent) { data.pause_owner = data.parent->data.pause_owner; - else + } else { data.pause_owner = nullptr; + } } else { data.pause_owner = this; } - if (data.input) + if (data.input) { add_to_group("_vp_input" + itos(get_viewport()->get_instance_id())); - if (data.unhandled_input) + } + if (data.unhandled_input) { add_to_group("_vp_unhandled_input" + itos(get_viewport()->get_instance_id())); - if (data.unhandled_key_input) + } + if (data.unhandled_key_input) { add_to_group("_vp_unhandled_key_input" + itos(get_viewport()->get_instance_id())); + } get_tree()->node_count++; orphan_node_count--; @@ -105,12 +102,15 @@ void Node::_notification(int p_notification) { get_tree()->node_count--; orphan_node_count++; - if (data.input) + if (data.input) { remove_from_group("_vp_input" + itos(get_viewport()->get_instance_id())); - if (data.unhandled_input) + } + if (data.unhandled_input) { remove_from_group("_vp_unhandled_input" + itos(get_viewport()->get_instance_id())); - if (data.unhandled_key_input) + } + if (data.unhandled_key_input) { remove_from_group("_vp_unhandled_key_input" + itos(get_viewport()->get_instance_id())); + } data.pause_owner = nullptr; if (data.path_cache) { @@ -119,16 +119,13 @@ void Node::_notification(int p_notification) { } } break; case NOTIFICATION_PATH_CHANGED: { - if (data.path_cache) { memdelete(data.path_cache); data.path_cache = nullptr; } } break; case NOTIFICATION_READY: { - if (get_script_instance()) { - if (get_script_instance()->has_method(SceneStringNames::get_singleton()->_input)) { set_process_input(true); } @@ -157,22 +154,18 @@ void Node::_notification(int p_notification) { data.in_constructor = false; } break; case NOTIFICATION_PREDELETE: { - set_owner(nullptr); while (data.owned.size()) { - data.owned.front()->get()->set_owner(nullptr); } if (data.parent) { - data.parent->remove_child(this); } // kill children as cleanly as possible while (data.children.size()) { - Node *child = data.children[data.children.size() - 1]; //begin from the end because its faster and more consistent with creation remove_child(child); memdelete(child); @@ -183,11 +176,9 @@ void Node::_notification(int p_notification) { } void Node::_propagate_ready() { - data.ready_notified = true; data.blocked++; for (int i = 0; i < data.children.size(); i++) { - data.children[i]->_propagate_ready(); } data.blocked--; @@ -208,13 +199,13 @@ void Node::_propagate_enter_tree() { data.tree = data.parent->data.tree; data.depth = data.parent->data.depth + 1; } else { - data.depth = 1; } data.viewport = Object::cast_to<Viewport>(this); - if (!data.viewport && data.parent) + if (!data.viewport && data.parent) { data.viewport = data.parent->data.viewport; + } data.inside_tree = true; @@ -225,7 +216,6 @@ void Node::_propagate_enter_tree() { notification(NOTIFICATION_ENTER_TREE); if (get_script_instance()) { - get_script_instance()->call_multilevel_reversed(SceneStringNames::get_singleton()->_enter_tree, nullptr, 0); } @@ -237,9 +227,9 @@ void Node::_propagate_enter_tree() { //block while adding children for (int i = 0; i < data.children.size(); i++) { - - if (!data.children[i]->is_inside_tree()) // could have been added in enter_tree + if (!data.children[i]->is_inside_tree()) { // could have been added in enter_tree data.children[i]->_propagate_enter_tree(); + } } data.blocked--; @@ -251,7 +241,6 @@ void Node::_propagate_enter_tree() { } void Node::_propagate_after_exit_tree() { - data.blocked++; for (int i = 0; i < data.children.size(); i++) { data.children[i]->_propagate_after_exit_tree(); @@ -261,7 +250,6 @@ void Node::_propagate_after_exit_tree() { } void Node::_propagate_exit_tree() { - //block while removing children #ifdef DEBUG_ENABLED @@ -270,21 +258,20 @@ void Node::_propagate_exit_tree() { data.blocked++; for (int i = data.children.size() - 1; i >= 0; i--) { - data.children[i]->_propagate_exit_tree(); } data.blocked--; if (get_script_instance()) { - get_script_instance()->call_multilevel(SceneStringNames::get_singleton()->_exit_tree, nullptr, 0); } emit_signal(SceneStringNames::get_singleton()->tree_exiting); notification(NOTIFICATION_EXIT_TREE, true); - if (data.tree) + if (data.tree) { data.tree->node_removed(this); + } // exit groups @@ -295,8 +282,9 @@ void Node::_propagate_exit_tree() { data.viewport = nullptr; - if (data.tree) + if (data.tree) { data.tree->tree_changed(); + } data.inside_tree = false; data.ready_notified = false; @@ -305,7 +293,6 @@ void Node::_propagate_exit_tree() { } void Node::move_child(Node *p_child, int p_pos) { - ERR_FAIL_NULL(p_child); ERR_FAIL_INDEX_MSG(p_pos, data.children.size() + 1, "Invalid new child position: " + itos(p_pos) + "."); ERR_FAIL_COND_MSG(p_child->data.parent != this, "Child is not a child of this node."); @@ -313,11 +300,13 @@ void Node::move_child(Node *p_child, int p_pos) { // Specifying one place beyond the end // means the same as moving to the last position - if (p_pos == data.children.size()) + if (p_pos == data.children.size()) { p_pos--; + } - if (p_child->data.pos == p_pos) + if (p_child->data.pos == p_pos) { return; //do nothing + } int motion_from = MIN(p_pos, p_child->data.pos); int motion_to = MAX(p_pos, p_child->data.pos); @@ -332,7 +321,6 @@ void Node::move_child(Node *p_child, int p_pos) { data.blocked++; //new pos first for (int i = motion_from; i <= motion_to; i++) { - data.children[i]->data.pos = i; } // notification second @@ -341,94 +329,94 @@ void Node::move_child(Node *p_child, int p_pos) { data.children[i]->notification(NOTIFICATION_MOVED_IN_PARENT); } for (const Map<StringName, GroupData>::Element *E = p_child->data.grouped.front(); E; E = E->next()) { - if (E->get().group) + if (E->get().group) { E->get().group->changed = true; + } } data.blocked--; } void Node::raise() { - - if (!data.parent) + if (!data.parent) { return; + } data.parent->move_child(this, data.parent->data.children.size() - 1); } void Node::add_child_notify(Node *p_child) { - // to be used when not wanted } void Node::remove_child_notify(Node *p_child) { - // to be used when not wanted } void Node::move_child_notify(Node *p_child) { - // to be used when not wanted } void Node::set_physics_process(bool p_process) { - - if (data.physics_process == p_process) + if (data.physics_process == p_process) { return; + } data.physics_process = p_process; - if (data.physics_process) + if (data.physics_process) { add_to_group("physics_process", false); - else + } else { remove_from_group("physics_process"); + } _change_notify("physics_process"); } bool Node::is_physics_processing() const { - return data.physics_process; } void Node::set_physics_process_internal(bool p_process_internal) { - - if (data.physics_process_internal == p_process_internal) + if (data.physics_process_internal == p_process_internal) { return; + } data.physics_process_internal = p_process_internal; - if (data.physics_process_internal) + if (data.physics_process_internal) { add_to_group("physics_process_internal", false); - else + } else { remove_from_group("physics_process_internal"); + } _change_notify("physics_process_internal"); } bool Node::is_physics_processing_internal() const { - return data.physics_process_internal; } 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; - if (!is_inside_tree()) + 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 = nullptr; if (data.pause_mode == PAUSE_MODE_INHERIT) { - - if (data.parent) + if (data.parent) { owner = data.parent->data.pause_owner; + } } else { owner = this; } @@ -437,40 +425,34 @@ void Node::set_pause_mode(PauseMode p_mode) { } Node::PauseMode Node::get_pause_mode() const { - return data.pause_mode; } void Node::_propagate_pause_owner(Node *p_owner) { - - if (this != p_owner && data.pause_mode != PAUSE_MODE_INHERIT) + if (this != p_owner && data.pause_mode != PAUSE_MODE_INHERIT) { return; + } data.pause_owner = p_owner; for (int i = 0; i < data.children.size(); i++) { - data.children[i]->_propagate_pause_owner(p_owner); } } void Node::set_network_master(int p_peer_id, bool p_recursive) { - data.network_master = p_peer_id; if (p_recursive) { for (int i = 0; i < data.children.size(); i++) { - data.children[i]->set_network_master(p_peer_id, true); } } } int Node::get_network_master() const { - return data.network_master; } bool Node::is_network_master() const { - ERR_FAIL_COND_V(!is_inside_tree(), false); return get_multiplayer()->get_network_unique_id() == data.network_master; @@ -479,7 +461,6 @@ bool Node::is_network_master() const { /***** RPC CONFIG ********/ uint16_t Node::rpc_config(const StringName &p_method, MultiplayerAPI::RPCMode p_mode) { - uint16_t mid = get_node_rpc_method_id(p_method); if (mid == UINT16_MAX) { // It's new @@ -496,7 +477,6 @@ uint16_t Node::rpc_config(const StringName &p_method, MultiplayerAPI::RPCMode p_ } uint16_t Node::rset_config(const StringName &p_property, MultiplayerAPI::RPCMode p_mode) { - uint16_t pid = get_node_rset_property_id(p_property); if (pid == UINT16_MAX) { // It's new @@ -515,13 +495,13 @@ uint16_t Node::rset_config(const StringName &p_property, MultiplayerAPI::RPCMode /***** RPC FUNCTIONS ********/ void Node::rpc(const StringName &p_method, VARIANT_ARG_DECLARE) { - VARIANT_ARGPTRS; int argc = 0; for (int i = 0; i < VARIANT_ARG_MAX; i++) { - if (argptr[i]->get_type() == Variant::NIL) + if (argptr[i]->get_type() == Variant::NIL) { break; + } argc++; } @@ -529,13 +509,13 @@ void Node::rpc(const StringName &p_method, VARIANT_ARG_DECLARE) { } void Node::rpc_id(int p_peer_id, const StringName &p_method, VARIANT_ARG_DECLARE) { - VARIANT_ARGPTRS; int argc = 0; for (int i = 0; i < VARIANT_ARG_MAX; i++) { - if (argptr[i]->get_type() == Variant::NIL) + if (argptr[i]->get_type() == Variant::NIL) { break; + } argc++; } @@ -543,13 +523,13 @@ void Node::rpc_id(int p_peer_id, const StringName &p_method, VARIANT_ARG_DECLARE } void Node::rpc_unreliable(const StringName &p_method, VARIANT_ARG_DECLARE) { - VARIANT_ARGPTRS; int argc = 0; for (int i = 0; i < VARIANT_ARG_MAX; i++) { - if (argptr[i]->get_type() == Variant::NIL) + if (argptr[i]->get_type() == Variant::NIL) { break; + } argc++; } @@ -557,13 +537,13 @@ void Node::rpc_unreliable(const StringName &p_method, VARIANT_ARG_DECLARE) { } void Node::rpc_unreliable_id(int p_peer_id, const StringName &p_method, VARIANT_ARG_DECLARE) { - VARIANT_ARGPTRS; int argc = 0; for (int i = 0; i < VARIANT_ARG_MAX; i++) { - if (argptr[i]->get_type() == Variant::NIL) + if (argptr[i]->get_type() == Variant::NIL) { break; + } argc++; } @@ -571,7 +551,6 @@ void Node::rpc_unreliable_id(int p_peer_id, const StringName &p_method, VARIANT_ } Variant Node::_rpc_bind(const Variant **p_args, int p_argcount, Callable::CallError &r_error) { - if (p_argcount < 1) { r_error.error = Callable::CallError::CALL_ERROR_TOO_FEW_ARGUMENTS; r_error.argument = 1; @@ -594,7 +573,6 @@ Variant Node::_rpc_bind(const Variant **p_args, int p_argcount, Callable::CallEr } Variant Node::_rpc_id_bind(const Variant **p_args, int p_argcount, Callable::CallError &r_error) { - if (p_argcount < 2) { r_error.error = Callable::CallError::CALL_ERROR_TOO_FEW_ARGUMENTS; r_error.argument = 2; @@ -625,7 +603,6 @@ Variant Node::_rpc_id_bind(const Variant **p_args, int p_argcount, Callable::Cal } Variant Node::_rpc_unreliable_bind(const Variant **p_args, int p_argcount, Callable::CallError &r_error) { - if (p_argcount < 1) { r_error.error = Callable::CallError::CALL_ERROR_TOO_FEW_ARGUMENTS; r_error.argument = 1; @@ -648,7 +625,6 @@ Variant Node::_rpc_unreliable_bind(const Variant **p_args, int p_argcount, Calla } Variant Node::_rpc_unreliable_id_bind(const Variant **p_args, int p_argcount, Callable::CallError &r_error) { - if (p_argcount < 2) { r_error.error = Callable::CallError::CALL_ERROR_TOO_FEW_ARGUMENTS; r_error.argument = 2; @@ -690,31 +666,29 @@ void Node::rsetp(int p_peer_id, bool p_unreliable, const StringName &p_property, /******** RSET *********/ void Node::rset(const StringName &p_property, const Variant &p_value) { - rsetp(0, false, p_property, p_value); } void Node::rset_id(int p_peer_id, const StringName &p_property, const Variant &p_value) { - rsetp(p_peer_id, false, p_property, p_value); } void Node::rset_unreliable(const StringName &p_property, const Variant &p_value) { - rsetp(0, true, p_property, p_value); } void Node::rset_unreliable_id(int p_peer_id, const StringName &p_property, const Variant &p_value) { - rsetp(p_peer_id, true, p_property, p_value); } //////////// end of rpc Ref<MultiplayerAPI> Node::get_multiplayer() const { - if (multiplayer.is_valid()) + if (multiplayer.is_valid()) { return multiplayer; - if (!is_inside_tree()) + } + if (!is_inside_tree()) { return Ref<MultiplayerAPI>(); + } return get_tree()->get_multiplayer(); } @@ -723,7 +697,6 @@ Ref<MultiplayerAPI> Node::get_custom_multiplayer() const { } void Node::set_custom_multiplayer(Ref<MultiplayerAPI> p_multiplayer) { - multiplayer = p_multiplayer; } @@ -742,8 +715,9 @@ StringName Node::get_node_rpc_method(const uint16_t p_rpc_method_id) const { // Make sure this is a node generated ID. if (((1 << 15) & p_rpc_method_id) > 0) { int mid = (~(1 << 15)) & p_rpc_method_id; - if (mid < data.rpc_methods.size()) + if (mid < data.rpc_methods.size()) { return data.rpc_methods[mid].name; + } } return StringName(); } @@ -752,8 +726,9 @@ MultiplayerAPI::RPCMode Node::get_node_rpc_mode_by_id(const uint16_t p_rpc_metho // Make sure this is a node generated ID. if (((1 << 15) & p_rpc_method_id) > 0) { int mid = (~(1 << 15)) & p_rpc_method_id; - if (mid < data.rpc_methods.size()) + if (mid < data.rpc_methods.size()) { return data.rpc_methods[mid].mode; + } } return MultiplayerAPI::RPC_MODE_DISABLED; } @@ -777,8 +752,9 @@ StringName Node::get_node_rset_property(const uint16_t p_rset_property_id) const // Make sure this is a node generated ID. if (((1 << 15) & p_rset_property_id) > 0) { int mid = (~(1 << 15)) & p_rset_property_id; - if (mid < data.rpc_properties.size()) + if (mid < data.rpc_properties.size()) { return data.rpc_properties[mid].name; + } } return StringName(); } @@ -786,8 +762,9 @@ StringName Node::get_node_rset_property(const uint16_t p_rset_property_id) const MultiplayerAPI::RPCMode Node::get_node_rset_mode_by_id(const uint16_t p_rset_property_id) const { if (((1 << 15) & p_rset_property_id) > 0) { int mid = (~(1 << 15)) & p_rset_property_id; - if (mid < data.rpc_properties.size()) + if (mid < data.rpc_properties.size()) { return data.rpc_properties[mid].mode; + } } return MultiplayerAPI::RPC_MODE_DISABLED; } @@ -833,25 +810,27 @@ bool Node::can_process_notification(int p_what) const { } bool Node::can_process() const { - 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_owner) + 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; + } } } @@ -859,58 +838,58 @@ bool Node::can_process() const { } float Node::get_physics_process_delta_time() const { - - if (data.tree) + if (data.tree) { return data.tree->get_physics_process_time(); - else + } else { return 0; + } } float Node::get_process_delta_time() const { - - if (data.tree) + if (data.tree) { return data.tree->get_idle_process_time(); - else + } else { return 0; + } } 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; - if (data.idle_process) + if (data.idle_process) { add_to_group("idle_process", false); - else + } else { remove_from_group("idle_process"); + } _change_notify("idle_process"); } bool Node::is_processing() const { - return data.idle_process; } void Node::set_process_internal(bool p_idle_process_internal) { - - if (data.idle_process_internal == p_idle_process_internal) + if (data.idle_process_internal == p_idle_process_internal) { return; + } data.idle_process_internal = p_idle_process_internal; - if (data.idle_process_internal) + if (data.idle_process_internal) { add_to_group("idle_process_internal", false); - else + } else { remove_from_group("idle_process_internal"); + } _change_notify("idle_process_internal"); } bool Node::is_processing_internal() const { - return data.idle_process_internal; } @@ -940,23 +919,24 @@ void Node::set_process_priority(int p_priority) { } int Node::get_process_priority() const { - return data.process_priority; } void Node::set_process_input(bool p_enable) { - - if (p_enable == data.input) + if (p_enable == data.input) { return; + } data.input = p_enable; - if (!is_inside_tree()) + if (!is_inside_tree()) { return; + } - if (p_enable) + if (p_enable) { add_to_group("_vp_input" + itos(get_viewport()->get_instance_id())); - else + } else { remove_from_group("_vp_input" + itos(get_viewport()->get_instance_id())); + } } bool Node::is_processing_input() const { @@ -964,17 +944,19 @@ 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; - if (!is_inside_tree()) + if (!is_inside_tree()) { return; + } - if (p_enable) + if (p_enable) { add_to_group("_vp_unhandled_input" + itos(get_viewport()->get_instance_id())); - else + } else { remove_from_group("_vp_unhandled_input" + itos(get_viewport()->get_instance_id())); + } } bool Node::is_processing_unhandled_input() const { @@ -982,17 +964,19 @@ bool Node::is_processing_unhandled_input() const { } 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; - if (!is_inside_tree()) + if (!is_inside_tree()) { return; + } - if (p_enable) + if (p_enable) { add_to_group("_vp_unhandled_key_input" + itos(get_viewport()->get_instance_id())); - else + } else { remove_from_group("_vp_unhandled_key_input" + itos(get_viewport()->get_instance_id())); + } } bool Node::is_processing_unhandled_key_input() const { @@ -1000,12 +984,10 @@ bool Node::is_processing_unhandled_key_input() const { } StringName Node::get_name() const { - return data.name; } void Node::_set_name_nocheck(const StringName &p_name) { - data.name = p_name; } @@ -1023,7 +1005,6 @@ bool Node::_validate_node_name(String &p_name) { } void Node::set_name(const String &p_name) { - String name = p_name; _validate_node_name(name); @@ -1031,14 +1012,12 @@ void Node::set_name(const String &p_name) { data.name = name; if (data.parent) { - data.parent->_validate_child_name(this); } propagate_notification(NOTIFICATION_PATH_CHANGED); if (is_inside_tree()) { - emit_signal("renamed"); get_tree()->node_renamed(this); get_tree()->tree_changed(); @@ -1053,13 +1032,11 @@ void Node::init_node_hrcr() { } void Node::set_human_readable_collision_renaming(bool p_enabled) { - node_hrcr = p_enabled; } #ifdef TOOLS_ENABLED String Node::validate_child_name(Node *p_child) { - StringName name = p_child->data.name; _generate_serial_child_name(p_child, name); return name; @@ -1067,11 +1044,9 @@ String Node::validate_child_name(Node *p_child) { #endif void Node::_validate_child_name(Node *p_child, bool p_force_human_readable) { - /* Make sure the name is unique */ if (node_hrcr || p_force_human_readable) { - //this approach to autoset node names is human readable but very slow //it's turned on while running in the editor @@ -1080,7 +1055,6 @@ void Node::_validate_child_name(Node *p_child, bool p_force_human_readable) { p_child->data.name = name; } else { - //this approach to autoset node names is fast but not as readable //it's the default and reserves the '@' character for unique names. @@ -1095,8 +1069,9 @@ void Node::_validate_child_name(Node *p_child, bool p_force_human_readable) { int cc = data.children.size(); for (int i = 0; i < cc; i++) { - if (children[i] == p_child) + if (children[i] == p_child) { continue; + } if (children[i]->data.name == p_child->data.name) { unique = false; break; @@ -1105,7 +1080,6 @@ void Node::_validate_child_name(Node *p_child, bool p_force_human_readable) { } if (!unique) { - ERR_FAIL_COND(!node_hrcr_count.ref()); String name = "@" + String(p_child->get_name()) + "@" + itos(node_hrcr_count.get()); p_child->data.name = name; @@ -1115,7 +1089,6 @@ void Node::_validate_child_name(Node *p_child, bool p_force_human_readable) { // Return s + 1 as if it were an integer String increase_numeric_string(const String &s) { - String res = s; bool carry = res.length() > 0; @@ -1140,7 +1113,6 @@ String increase_numeric_string(const String &s) { } void Node::_generate_serial_child_name(const Node *p_child, StringName &name) const { - if (name == StringName()) { //no name and a new nade is needed, create one. @@ -1165,7 +1137,6 @@ void Node::_generate_serial_child_name(const Node *p_child, StringName &name) co const Node *const *children_ptr = data.children.ptr(); { - bool exists = false; for (int i = 0; i < cc; i++) { @@ -1252,7 +1223,6 @@ void Node::_add_child_nocheck(Node *p_child, const StringName &p_name) { } void Node::add_child(Node *p_child, bool p_legible_unique_name) { - ERR_FAIL_NULL(p_child); ERR_FAIL_COND_MSG(p_child == this, "Can't add child '" + p_child->get_name() + "' to itself."); // adding to itself! ERR_FAIL_COND_MSG(p_child->data.parent, "Can't add child '" + p_child->get_name() + "' to '" + get_name() + "', already has a parent '" + p_child->data.parent->get_name() + "'."); //Fail if node has a parent @@ -1265,7 +1235,6 @@ void Node::add_child(Node *p_child, bool p_legible_unique_name) { } void Node::add_child_below_node(Node *p_node, Node *p_child, bool p_legible_unique_name) { - ERR_FAIL_NULL(p_node); ERR_FAIL_NULL(p_child); @@ -1279,16 +1248,12 @@ 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; Node *parent = data.parent; while (parent) { - if (parent == data.owner) { - found = true; break; } @@ -1297,20 +1262,17 @@ void Node::_propagate_validate_owner() { } if (!found) { - data.owner->data.owned.erase(data.OW); data.owner = nullptr; } } for (int i = 0; i < data.children.size(); i++) { - data.children[i]->_propagate_validate_owner(); } } void Node::remove_child(Node *p_child) { - ERR_FAIL_NULL(p_child); ERR_FAIL_COND_MSG(data.blocked > 0, "Parent node is busy setting up children, remove_node() failed. Consider using call_deferred(\"remove_child\", child) instead."); @@ -1326,9 +1288,7 @@ void Node::remove_child(Node *p_child) { if (idx == -1) { //maybe removed while unparenting or something and index was not updated, so just in case the above fails, try this. for (int i = 0; i < child_count; i++) { - if (children[i] == p_child) { - idx = i; break; } @@ -1353,7 +1313,6 @@ void Node::remove_child(Node *p_child) { children = data.children.ptrw(); for (int i = idx; i < child_count; i++) { - children[i]->data.pos = i; children[i]->notification(NOTIFICATION_MOVED_IN_PARENT); } @@ -1370,31 +1329,29 @@ void Node::remove_child(Node *p_child) { } int Node::get_child_count() const { - return data.children.size(); } -Node *Node::get_child(int p_index) const { +Node *Node::get_child(int p_index) const { ERR_FAIL_INDEX_V(p_index, data.children.size(), nullptr); return data.children[p_index]; } Node *Node::_get_child_by_name(const StringName &p_name) const { - 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) + if (cd[i]->data.name == p_name) { return cd[i]; + } } return nullptr; } Node *Node::get_node_or_null(const NodePath &p_path) const { - if (p_path.is_empty()) { return nullptr; } @@ -1407,14 +1364,13 @@ Node *Node::get_node_or_null(const NodePath &p_path) const { if (!p_path.is_absolute()) { current = const_cast<Node *>(this); //start from this } else { - root = const_cast<Node *>(this); - while (root->data.parent) + while (root->data.parent) { root = root->data.parent; //start from root + } } for (int i = 0; i < p_path.get_name_count(); i++) { - StringName name = p_path.get_name(i); Node *next = nullptr; @@ -1424,25 +1380,23 @@ Node *Node::get_node_or_null(const NodePath &p_path) const { } else if (name == SceneStringNames::get_singleton()->doubledot) { // .. - if (current == nullptr || !current->data.parent) + if (current == nullptr || !current->data.parent) { return nullptr; + } next = current->data.parent; } else if (current == nullptr) { - - if (name == root->get_name()) + if (name == root->get_name()) { next = root; + } } else { - next = nullptr; for (int j = 0; j < current->data.children.size(); j++) { - Node *child = current->data.children[j]; if (child->data.name == name) { - next = child; break; } @@ -1458,49 +1412,48 @@ Node *Node::get_node_or_null(const NodePath &p_path) const { } Node *Node::get_node(const NodePath &p_path) const { - Node *node = get_node_or_null(p_path); ERR_FAIL_COND_V_MSG(!node, nullptr, "Node not found: " + p_path + "."); return node; } bool Node::has_node(const NodePath &p_path) const { - return get_node_or_null(p_path) != nullptr; } Node *Node::find_node(const String &p_mask, bool p_recursive, bool p_owned) const { - Node *const *cptr = data.children.ptr(); int ccount = data.children.size(); for (int i = 0; i < ccount; i++) { - if (p_owned && !cptr[i]->data.owner) + if (p_owned && !cptr[i]->data.owner) { continue; - if (cptr[i]->data.name.operator String().match(p_mask)) + } + if (cptr[i]->data.name.operator String().match(p_mask)) { return cptr[i]; + } - if (!p_recursive) + if (!p_recursive) { continue; + } Node *ret = cptr[i]->find_node(p_mask, true, p_owned); - if (ret) + if (ret) { return ret; + } } return nullptr; } Node *Node::get_parent() const { - return data.parent; } Node *Node::find_parent(const String &p_mask) const { - Node *p = data.parent; while (p) { - - if (p->data.name.operator String().match(p_mask)) + if (p->data.name.operator String().match(p_mask)) { return p; + } p = p->data.parent; } @@ -1508,13 +1461,12 @@ Node *Node::find_parent(const String &p_mask) const { } 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) { - - if (p == this) + if (p == this) { return true; + } p = p->data.parent; } @@ -1522,7 +1474,6 @@ 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); @@ -1565,7 +1516,6 @@ bool Node::is_greater_than(const Node *p_node) const { bool res; 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]; @@ -1587,18 +1537,19 @@ bool Node::is_greater_than(const Node *p_node) const { } 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++) + 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) { - - if (data.owner == p_owner) + if (data.owner == p_owner) { return; + } ERR_FAIL_COND(data.owner); data.owner = p_owner; @@ -1607,9 +1558,7 @@ void Node::_set_owner_nocheck(Node *p_owner) { } void Node::set_owner(Node *p_owner) { - if (data.owner) { - data.owner->data.owned.erase(data.OW); data.OW = nullptr; data.owner = nullptr; @@ -1617,14 +1566,14 @@ void Node::set_owner(Node *p_owner) { ERR_FAIL_COND(p_owner == this); - if (!p_owner) + if (!p_owner) { return; + } Node *check = this->get_parent(); bool owner_valid = false; while (check) { - if (check == p_owner) { owner_valid = true; break; @@ -1637,22 +1586,21 @@ void Node::set_owner(Node *p_owner) { _set_owner_nocheck(p_owner); } -Node *Node::get_owner() const { +Node *Node::get_owner() const { return data.owner; } Node *Node::find_common_parent_with(const Node *p_node) const { - - if (this == p_node) + if (this == p_node) { return const_cast<Node *>(p_node); + } Set<const Node *> visited; const Node *n = this; while (n) { - visited.insert(n); n = n->data.parent; } @@ -1660,31 +1608,31 @@ Node *Node::find_common_parent_with(const Node *p_node) const { const Node *common_parent = p_node; while (common_parent) { - - if (visited.has(common_parent)) + if (visited.has(common_parent)) { break; + } common_parent = common_parent->data.parent; } - if (!common_parent) + if (!common_parent) { return nullptr; + } return const_cast<Node *>(common_parent); } NodePath Node::get_path_to(const Node *p_node) const { - ERR_FAIL_NULL_V(p_node, NodePath()); - if (this == p_node) + if (this == p_node) { return NodePath("."); + } Set<const Node *> visited; const Node *n = this; while (n) { - visited.insert(n); n = n->data.parent; } @@ -1692,9 +1640,9 @@ NodePath Node::get_path_to(const Node *p_node) const { const Node *common_parent = p_node; while (common_parent) { - - if (visited.has(common_parent)) + if (visited.has(common_parent)) { break; + } common_parent = common_parent->data.parent; } @@ -1707,7 +1655,6 @@ NodePath Node::get_path_to(const Node *p_node) const { n = p_node; while (n != common_parent) { - path.push_back(n->get_name()); n = n->data.parent; } @@ -1716,7 +1663,6 @@ NodePath Node::get_path_to(const Node *p_node) const { StringName up = String(".."); while (n != common_parent) { - path.push_back(up); n = n->data.parent; } @@ -1727,11 +1673,11 @@ NodePath Node::get_path_to(const Node *p_node) const { } NodePath Node::get_path() const { - ERR_FAIL_COND_V_MSG(!is_inside_tree(), NodePath(), "Cannot get path of node as it is not in a scene tree."); - if (data.path_cache) + if (data.path_cache) { return *data.path_cache; + } const Node *n = this; @@ -1750,16 +1696,15 @@ NodePath Node::get_path() 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) { - ERR_FAIL_COND(!p_identifier.operator String().length()); - if (data.grouped.has(p_identifier)) + if (data.grouped.has(p_identifier)) { return; + } GroupData gd; @@ -1775,21 +1720,20 @@ void Node::add_to_group(const StringName &p_identifier, bool p_persistent) { } void Node::remove_from_group(const StringName &p_identifier) { - ERR_FAIL_COND(!data.grouped.has(p_identifier)); Map<StringName, GroupData>::Element *E = data.grouped.find(p_identifier); ERR_FAIL_COND(!E); - if (data.tree) + if (data.tree) { data.tree->remove_from_group(E->key(), this); + } data.grouped.erase(E); } Array Node::_get_groups() const { - Array groups; List<GroupInfo> gi; get_groups(&gi); @@ -1801,7 +1745,6 @@ 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()) { GroupInfo gi; gi.name = E->key(); @@ -1811,7 +1754,6 @@ void Node::get_groups(List<GroupInfo> *p_groups) const { } int Node::get_persistent_group_count() const { - int count = 0; for (const Map<StringName, GroupData>::Element *E = data.grouped.front(); E; E = E->next()) { @@ -1822,8 +1764,8 @@ int Node::get_persistent_group_count() const { return count; } -void Node::_print_tree_pretty(const String &prefix, const bool last) { +void Node::_print_tree_pretty(const String &prefix, const bool last) { String new_prefix = last ? String::utf8(" â”–â•´") : String::utf8(" â” â•´"); print_line(prefix + new_prefix + String(get_name())); for (int i = 0; i < data.children.size(); i++) { @@ -1837,21 +1779,19 @@ void Node::print_tree_pretty() { } void Node::print_tree() { - _print_tree(this); } 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); + } } void Node::_propagate_reverse_notification(int p_notification) { - data.blocked++; for (int i = data.children.size() - 1; i >= 0; i--) { - data.children[i]->_propagate_reverse_notification(p_notification); } @@ -1860,71 +1800,70 @@ void Node::_propagate_reverse_notification(int p_notification) { } void Node::_propagate_deferred_notification(int p_notification, bool p_reverse) { - ERR_FAIL_COND(!is_inside_tree()); data.blocked++; - if (!p_reverse) + if (!p_reverse) { MessageQueue::get_singleton()->push_notification(this, p_notification); + } for (int i = 0; i < data.children.size(); i++) { - data.children[i]->_propagate_deferred_notification(p_notification, p_reverse); } - if (p_reverse) + if (p_reverse) { MessageQueue::get_singleton()->push_notification(this, p_notification); + } data.blocked--; } void Node::propagate_notification(int p_notification) { - data.blocked++; notification(p_notification); for (int i = 0; i < data.children.size(); i++) { - data.children[i]->propagate_notification(p_notification); } data.blocked--; } void Node::propagate_call(const StringName &p_method, const Array &p_args, const bool p_parent_first) { - data.blocked++; - if (p_parent_first && has_method(p_method)) + if (p_parent_first && has_method(p_method)) { callv(p_method, p_args); + } for (int i = 0; i < data.children.size(); i++) { data.children[i]->propagate_call(p_method, p_args, p_parent_first); } - if (!p_parent_first && has_method(p_method)) + if (!p_parent_first && has_method(p_method)) { callv(p_method, p_args); + } data.blocked--; } void Node::_propagate_replace_owner(Node *p_owner, Node *p_by_owner) { - if (get_owner() == p_owner) + if (get_owner() == p_owner) { set_owner(p_by_owner); + } data.blocked++; - for (int i = 0; i < data.children.size(); i++) + for (int i = 0; i < data.children.size(); i++) { data.children[i]->_propagate_replace_owner(p_owner, p_by_owner); + } data.blocked--; } int Node::get_index() const { - return data.pos; } void Node::remove_and_skip() { - ERR_FAIL_COND(!data.parent); Node *new_owner = get_owner(); @@ -1932,12 +1871,12 @@ void Node::remove_and_skip() { List<Node *> children; while (true) { - bool clear = true; for (int i = 0; i < data.children.size(); i++) { Node *c_node = data.children[i]; - if (!c_node->get_owner()) + if (!c_node->get_owner()) { continue; + } remove_child(c_node); c_node->_propagate_replace_owner(this, nullptr); @@ -1946,12 +1885,12 @@ void Node::remove_and_skip() { break; } - if (clear) + if (clear) { break; + } } while (!children.empty()) { - Node *c_node = children.front()->get(); data.parent->add_child(c_node); c_node->_propagate_replace_owner(nullptr, new_owner); @@ -1962,20 +1901,18 @@ void Node::remove_and_skip() { } void Node::set_filename(const String &p_filename) { - data.filename = p_filename; } -String Node::get_filename() const { +String Node::get_filename() const { return data.filename; } void Node::set_editor_description(const String &p_editor_description) { - set_meta("_editor_description_", p_editor_description); } -String Node::get_editor_description() const { +String Node::get_editor_description() const { if (has_meta("_editor_description_")) { return get_meta("_editor_description_"); } else { @@ -1984,7 +1921,6 @@ String Node::get_editor_description() const { } 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)); NodePath p = get_path_to(p_node); @@ -1999,75 +1935,65 @@ void Node::set_editable_instance(Node *p_node, bool p_editable) { } bool Node::is_editable_instance(const Node *p_node) const { - - if (!p_node) + if (!p_node) { return false; //easier, null is never editable :) + } 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) { - data.editable_instances = p_editable_instances; } HashMap<NodePath, int> Node::get_editable_instances() const { - return data.editable_instances; } void Node::set_scene_instance_state(const Ref<SceneState> &p_state) { - data.instance_state = p_state; } Ref<SceneState> Node::get_scene_instance_state() const { - return data.instance_state; } void Node::set_scene_inherited_state(const Ref<SceneState> &p_state) { - data.inherited_state = p_state; } 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; } bool Node::get_scene_instance_load_placeholder() const { - return data.use_placeholder; } Node *Node::_duplicate(int p_flags, Map<const Node *, Node *> *r_duplimap) const { - Node *node = nullptr; bool instanced = false; if (Object::cast_to<InstancePlaceholder>(this)) { - const InstancePlaceholder *ip = Object::cast_to<const InstancePlaceholder>(this); InstancePlaceholder *nip = memnew(InstancePlaceholder); nip->set_instance_path(ip->get_instance_path()); node = nip; } else if ((p_flags & DUPLICATE_USE_INSTANCING) && get_filename() != String()) { - Ref<PackedScene> res = ResourceLoader::load(get_filename()); ERR_FAIL_COND_V(res.is_null(), nullptr); PackedScene::GenEditState ges = PackedScene::GEN_EDIT_STATE_DISABLED; #ifdef TOOLS_ENABLED - if (p_flags & DUPLICATE_FROM_EDITOR) + if (p_flags & DUPLICATE_FROM_EDITOR) { ges = PackedScene::GEN_EDIT_STATE_INSTANCE; + } #endif node = res->instance(ges); ERR_FAIL_COND_V(!node, nullptr); @@ -2075,12 +2001,12 @@ Node *Node::_duplicate(int p_flags, Map<const Node *, Node *> *r_duplimap) const instanced = true; } else { - Object *obj = ClassDB::instance(get_class()); ERR_FAIL_COND_V(!obj, nullptr); node = Object::cast_to<Node>(obj); - if (!node) + if (!node) { memdelete(obj); + } ERR_FAIL_COND_V(!node, nullptr); } @@ -2100,13 +2026,13 @@ Node *Node::_duplicate(int p_flags, Map<const Node *, Node *> *r_duplimap) const for (List<const Node *>::Element *N = node_tree.front(); N; N = N->next()) { for (int i = 0; i < N->get()->get_child_count(); ++i) { - Node *descendant = N->get()->get_child(i); // Skip nodes not really belonging to the instanced hierarchy; they'll be processed normally later // but remember non-instanced nodes that are hidden below instanced ones if (descendant->data.owner != this) { - if (descendant->get_parent() && descendant->get_parent() != this && descendant->get_parent()->data.owner == this && descendant->data.owner != descendant->get_parent()) + if (descendant->get_parent() && descendant->get_parent() != this && descendant->get_parent()->data.owner == this && descendant->data.owner != descendant->get_parent()) { hidden_roots.push_back(descendant); + } continue; } @@ -2116,7 +2042,6 @@ Node *Node::_duplicate(int p_flags, Map<const Node *, Node *> *r_duplimap) const } for (List<const Node *>::Element *N = node_tree.front(); N; N = N->next()) { - Node *current_node = node->get_node(get_path_to(N->get())); ERR_CONTINUE(!current_node); @@ -2132,24 +2057,23 @@ Node *Node::_duplicate(int p_flags, Map<const Node *, Node *> *r_duplimap) const N->get()->get_property_list(&plist); 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 (name == script_property_name) + if (name == script_property_name) { continue; + } Variant value = N->get()->get(name).duplicate(true); if (E->get().usage & PROPERTY_USAGE_DO_NOT_SHARE_ON_DUPLICATE) { - Resource *res = Object::cast_to<Resource>(value); if (res) { // Duplicate only if it's a resource current_node->set(name, res->duplicate()); } } else { - current_node->set(name, value); } } @@ -2160,18 +2084,19 @@ Node *Node::_duplicate(int p_flags, Map<const Node *, Node *> *r_duplimap) const } #ifdef TOOLS_ENABLED - if ((p_flags & DUPLICATE_FROM_EDITOR) && r_duplimap) + if ((p_flags & DUPLICATE_FROM_EDITOR) && r_duplimap) { r_duplimap->insert(this, node); + } #endif if (p_flags & DUPLICATE_GROUPS) { List<GroupInfo> gi; get_groups(&gi); for (List<GroupInfo>::Element *E = gi.front(); E; E = E->next()) { - #ifdef TOOLS_ENABLED - if ((p_flags & DUPLICATE_FROM_EDITOR) && !E->get().persistent) + if ((p_flags & DUPLICATE_FROM_EDITOR) && !E->get().persistent) { continue; + } #endif node->add_to_group(E->get().name, E->get().persistent); @@ -2179,15 +2104,15 @@ Node *Node::_duplicate(int p_flags, Map<const Node *, Node *> *r_duplimap) const } for (int i = 0; i < get_child_count(); i++) { - - if (get_child(i)->data.parent_owned) + 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_flags, r_duplimap); if (!dup) { - memdelete(node); return nullptr; } @@ -2199,17 +2124,14 @@ Node *Node::_duplicate(int p_flags, Map<const Node *, Node *> *r_duplimap) const } for (List<const Node *>::Element *E = hidden_roots.front(); E; E = E->next()) { - Node *parent = node->get_node(get_path_to(E->get()->data.parent)); if (!parent) { - memdelete(node); return nullptr; } Node *dup = E->get()->_duplicate(p_flags, r_duplimap); if (!dup) { - memdelete(node); return nullptr; } @@ -2218,7 +2140,6 @@ Node *Node::_duplicate(int p_flags, Map<const Node *, Node *> *r_duplimap) const int pos = E->get()->get_index(); if (pos < parent->get_child_count() - 1) { - parent->move_child(dup, pos); } } @@ -2227,7 +2148,6 @@ Node *Node::_duplicate(int p_flags, Map<const Node *, Node *> *r_duplimap) const } Node *Node::duplicate(int p_flags) const { - Node *dupe = _duplicate(p_flags); if (dupe && (p_flags & DUPLICATE_SIGNALS)) { @@ -2239,7 +2159,6 @@ Node *Node::duplicate(int p_flags) const { #ifdef TOOLS_ENABLED Node *Node::duplicate_from_editor(Map<const Node *, Node *> &r_duplimap) const { - Node *dupe = _duplicate(DUPLICATE_SIGNALS | DUPLICATE_GROUPS | DUPLICATE_SCRIPTS | DUPLICATE_USE_INSTANCING | DUPLICATE_FROM_EDITOR, &r_duplimap); // Duplication of signals must happen after all the node descendants have been copied, @@ -2252,20 +2171,18 @@ Node *Node::duplicate_from_editor(Map<const Node *, Node *> &r_duplimap) const { #endif 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 = nullptr; if (get_filename() != "") { - Ref<PackedScene> res = ResourceLoader::load(get_filename()); ERR_FAIL_COND_MSG(res.is_null(), "Cannot load scene: " + get_filename()); node = res->instance(); ERR_FAIL_COND(!node); } else { - Object *obj = ClassDB::instance(get_class()); ERR_FAIL_COND_MSG(!obj, "Node: Could not duplicate: " + String(get_class()) + "."); node = Object::cast_to<Node>(obj); @@ -2280,9 +2197,9 @@ void Node::_duplicate_and_reown(Node *p_new_parent, const Map<Node *, Node *> &p get_property_list(&plist); 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; Variant value = get(name).duplicate(true); @@ -2293,16 +2210,18 @@ void Node::_duplicate_and_reown(Node *p_new_parent, const Map<Node *, Node *> &p 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()) { node->add_to_group(E->get().name, E->get().persistent); + } node->set_name(get_name()); p_new_parent->add_child(node); Node *owner = get_owner(); - if (p_reown_map.has(owner)) + if (p_reown_map.has(owner)) { owner = p_reown_map[owner]; + } if (owner) { NodePath p = get_path_to(owner); @@ -2315,7 +2234,6 @@ void Node::_duplicate_and_reown(Node *p_new_parent, const Map<Node *, Node *> &p } for (int i = 0; i < get_child_count(); i++) { - get_child(i)->_duplicate_and_reown(node, p_reown_map); } } @@ -2324,15 +2242,14 @@ void Node::_duplicate_and_reown(Node *p_new_parent, const Map<Node *, Node *> &p // because re-targeting of connections from some descendant to another is not possible // if the emitter node comes later in tree order than the receiver 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()) { - if (E->get().flags & CONNECT_PERSIST) { //user connected NodePath p = p_original->get_path_to(this); @@ -2350,8 +2267,9 @@ void Node::_duplicate_signals(const Node *p_original, Node *p_copy) const { // of the duplicated and not yet parented hierarchy then at least try to connect // to the same target as the original - if (p_copy->has_node(ptarget)) + if (p_copy->has_node(ptarget)) { copytarget = p_copy->get_node(ptarget); + } if (copy && copytarget) { const Callable copy_callable = Callable(copytarget, E->get().callable.get_method()); @@ -2368,7 +2286,6 @@ void Node::_duplicate_signals(const Node *p_original, Node *p_copy) const { } Node *Node::duplicate_and_reown(const Map<Node *, Node *> &p_reown_map) const { - ERR_FAIL_COND_V(get_filename() != "", nullptr); Object *obj = ClassDB::instance(get_class()); @@ -2386,9 +2303,9 @@ 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()) { - - 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)); } @@ -2396,11 +2313,11 @@ Node *Node::duplicate_and_reown(const Map<Node *, Node *> &p_reown_map) const { 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()) { node->add_to_group(E->get().name, E->get().persistent); + } for (int i = 0; i < get_child_count(); i++) { - get_child(i)->_duplicate_and_reown(node, p_reown_map); } @@ -2412,24 +2329,21 @@ Node *Node::duplicate_and_reown(const Map<Node *, Node *> &p_reown_map) const { } 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++) { - find_owned_by(p_by, p_node->get_child(i), p_owned); } } struct _NodeReplaceByPair { - String name; Variant value; }; void Node::replace_by(Node *p_node, bool p_keep_data) { - ERR_FAIL_NULL(p_node); ERR_FAIL_COND(p_node->data.parent); @@ -2440,15 +2354,14 @@ void Node::replace_by(Node *p_node, bool p_keep_data) { List<_NodeReplaceByPair> replace_data; if (p_keep_data) { - List<PropertyInfo> plist; get_property_list(&plist); 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); } @@ -2456,29 +2369,29 @@ void Node::replace_by(Node *p_node, bool p_keep_data) { 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++) + for (int i = 0; i < get_child_count(); i++) { find_owned_by(data.owner, get_child(i), &owned_by_owner); + } } Node *parent = data.parent; int pos_in_parent = data.pos; if (data.parent) { - parent->remove_child(this); parent->add_child(p_node); parent->move_child(p_node, pos_in_parent); } while (get_child_count()) { - Node *child = get_child(0); remove_child(child); if (!child->is_owned_by_parent()) { @@ -2488,27 +2401,26 @@ void Node::replace_by(Node *p_node, bool p_keep_data) { } 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()) { - p_node->set(E->get().name, E->get().value); } } 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()) { - Connection &c = E->get(); if (c.flags & CONNECT_PERSIST) { @@ -2521,41 +2433,45 @@ void Node::_replace_connections_target(Node *p_new_target) { } 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 + } else { ret.push_back(p_arg1); + } - if (p_arg2.get_type() == Variant::NIL) + if (p_arg2.get_type() == Variant::NIL) { return ret; - else + } else { ret.push_back(p_arg2); + } - if (p_arg3.get_type() == Variant::NIL) + if (p_arg3.get_type() == Variant::NIL) { return ret; - else + } else { ret.push_back(p_arg3); + } - if (p_arg4.get_type() == Variant::NIL) + if (p_arg4.get_type() == Variant::NIL) { return ret; - else + } else { ret.push_back(p_arg4); + } - if (p_arg5.get_type() == Variant::NIL) + if (p_arg5.get_type() == Variant::NIL) { return ret; - else + } else { ret.push_back(p_arg5); + } return ret; } bool Node::has_node_and_resource(const NodePath &p_path) const { - - if (!has_node(p_path)) + if (!has_node(p_path)) { return false; + } RES res; Vector<StringName> leftover_path; Node *node = get_node_and_resource(p_path, res, leftover_path, false); @@ -2564,21 +2480,22 @@ bool Node::has_node_and_resource(const NodePath &p_path) const { } Array Node::_get_node_and_resource(const NodePath &p_path) { - RES res; Vector<StringName> leftover_path; Node *node = get_node_and_resource(p_path, res, leftover_path, false); Array result; - if (node) + if (node) { result.push_back(node); - else + } else { result.push_back(Variant()); + } - if (res.is_valid()) + if (res.is_valid()) { result.push_back(res); - else + } else { result.push_back(Variant()); + } result.push_back(NodePath(Vector<StringName>(), leftover_path, false)); @@ -2586,15 +2503,14 @@ Array Node::_get_node_and_resource(const NodePath &p_path) { } Node *Node::get_node_and_resource(const NodePath &p_path, RES &r_res, Vector<StringName> &r_leftover_subpath, bool p_last_is_property) const { - Node *node = get_node(p_path); r_res = RES(); r_leftover_subpath = Vector<StringName>(); - if (!node) + if (!node) { return nullptr; + } if (p_path.get_subname_count()) { - int j = 0; // If not p_last_is_property, we shouldn't consider the last one as part of the resource for (; j < p_path.get_subname_count() - (int)p_last_is_property; j++) { @@ -2622,7 +2538,6 @@ Node *Node::get_node_and_resource(const NodePath &p_path, RES &r_res, Vector<Str } void Node::_set_tree(SceneTree *p_tree) { - SceneTree *tree_changed_a = nullptr; SceneTree *tree_changed_b = nullptr; @@ -2637,7 +2552,6 @@ void Node::_set_tree(SceneTree *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); @@ -2646,21 +2560,24 @@ void Node::_set_tree(SceneTree *p_tree) { tree_changed_b = data.tree; } - if (tree_changed_a) + if (tree_changed_a) { tree_changed_a->tree_changed(); - if (tree_changed_b) + } + if (tree_changed_b) { tree_changed_b->tree_changed(); + } } #ifdef DEBUG_ENABLED static void _Node_debug_sn(Object *p_obj) { - Node *n = Object::cast_to<Node>(p_obj); - if (!n) + if (!n) { return; + } - if (n->is_inside_tree()) + if (n->is_inside_tree()) { return; + } Node *p = n; while (p->get_parent()) { @@ -2668,28 +2585,26 @@ static void _Node_debug_sn(Object *p_obj) { } String path; - if (p == n) + if (p == n) { path = n->get_name(); - else + } 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_class() + ")"); } #endif // DEBUG_ENABLED void Node::_print_stray_nodes() { - print_stray_nodes(); } void Node::print_stray_nodes() { - #ifdef DEBUG_ENABLED ObjectDB::debug_objects(_Node_debug_sn); #endif } void Node::queue_delete() { - if (is_inside_tree()) { get_tree()->queue_delete(this); } else { @@ -2698,25 +2613,23 @@ void Node::queue_delete() { } TypedArray<Node> Node::_get_children() const { - TypedArray<Node> arr; int cc = get_child_count(); arr.resize(cc); - for (int i = 0; i < cc; i++) + for (int i = 0; i < cc; i++) { arr[i] = get_child(i); + } return arr; } void Node::set_import_path(const NodePath &p_import_path) { - #ifdef TOOLS_ENABLED data.import_path = p_import_path; #endif } NodePath Node::get_import_path() const { - #ifdef TOOLS_ENABLED return data.import_path; #else @@ -2725,15 +2638,15 @@ NodePath Node::get_import_path() const { } static void _add_nodes_to_options(const Node *p_base, const Node *p_node, List<String> *r_options) { - #ifdef TOOLS_ENABLED const String quote_style = EDITOR_DEF("text_editor/completion/use_single_quotes", 0) ? "'" : "\""; #else const String quote_style = "\""; #endif - 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(quote_style + n + quote_style); for (int i = 0; i < p_node->get_child_count(); i++) { @@ -2742,17 +2655,14 @@ static void _add_nodes_to_options(const Node *p_base, const Node *p_node, List<S } 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) { - _add_nodes_to_options(this, this, 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++) { data.children[i]->clear_internal_tree_resource_paths(); @@ -2760,7 +2670,6 @@ void Node::clear_internal_tree_resource_paths() { } String Node::get_configuration_warning() const { - if (get_script_instance() && get_script_instance()->get_script().is_valid() && get_script_instance()->get_script()->is_tool() && get_script_instance()->has_method("_get_configuration_warning")) { return get_script_instance()->call("_get_configuration_warning"); @@ -2769,10 +2678,10 @@ String Node::get_configuration_warning() const { } void Node::update_configuration_warning() { - #ifdef TOOLS_ENABLED - if (!is_inside_tree()) + 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); } @@ -2788,7 +2697,6 @@ void Node::set_display_folded(bool p_folded) { } bool Node::is_displayed_folded() const { - return data.display_folded; } @@ -2797,7 +2705,6 @@ void Node::request_ready() { } void Node::_bind_methods() { - GLOBAL_DEF("node/name_num_separator", 0); ProjectSettings::get_singleton()->set_custom_property_info("node/name_num_separator", PropertyInfo(Variant::INT, "node/name_num_separator", PROPERTY_HINT_ENUM, "None,Space,Underscore,Dash")); GLOBAL_DEF("node/name_casing", NAME_CASING_PASCAL_CASE); @@ -3011,7 +2918,6 @@ String Node::_get_name_num_separator() { } Node::Node() { - data.pos = -1; data.depth = -1; data.blocked = 0; @@ -3045,7 +2951,6 @@ Node::Node() { } Node::~Node() { - data.grouped.clear(); data.owned.clear(); data.children.clear(); diff --git a/scene/main/node.h b/scene/main/node.h index 1c1b7bbd7a..d1665d1236 100644 --- a/scene/main/node.h +++ b/scene/main/node.h @@ -43,7 +43,6 @@ class Viewport; class SceneState; class Node : public Object { - GDCLASS(Node, Object); OBJ_CATEGORY("Nodes"); @@ -67,12 +66,10 @@ public: }; struct Comparator { - bool operator()(const Node *p_a, const Node *p_b) const { return p_b->is_greater_than(p_a); } }; struct ComparatorWithPriority { - bool operator()(const Node *p_a, const Node *p_b) const { return p_b->data.process_priority == p_a->data.process_priority ? p_b->is_greater_than(p_a) : p_b->data.process_priority > p_a->data.process_priority; } }; @@ -80,7 +77,6 @@ public: private: struct GroupData { - bool persistent; SceneTree::Group *group; GroupData() { persistent = false; } @@ -92,7 +88,6 @@ private: }; struct Data { - String filename; Ref<SceneState> instance_state; Ref<SceneState> inherited_state; @@ -305,7 +300,6 @@ public: bool is_in_group(const StringName &p_identifier) const; struct GroupInfo { - StringName name; bool persistent; }; diff --git a/scene/main/resource_preloader.cpp b/scene/main/resource_preloader.cpp index 43a61834eb..c1d4435687 100644 --- a/scene/main/resource_preloader.cpp +++ b/scene/main/resource_preloader.cpp @@ -31,7 +31,6 @@ #include "resource_preloader.h" void ResourcePreloader::_set_resources(const Array &p_data) { - resources.clear(); ERR_FAIL_COND(p_data.size() != 2); @@ -41,7 +40,6 @@ void ResourcePreloader::_set_resources(const Array &p_data) { ERR_FAIL_COND(names.size() != resdata.size()); for (int i = 0; i < resdata.size(); i++) { - String name = names[i]; RES resource = resdata[i]; ERR_CONTINUE(!resource.is_valid()); @@ -52,7 +50,6 @@ void ResourcePreloader::_set_resources(const Array &p_data) { } Array ResourcePreloader::_get_resources() const { - Vector<String> names; Array arr; arr.resize(resources.size()); @@ -66,7 +63,6 @@ Array ResourcePreloader::_get_resources() const { int i = 0; for (Set<String>::Element *E = sorted_names.front(); E; E = E->next()) { - names.set(i, E->get()); arr[i] = resources[E->get()]; i++; @@ -79,15 +75,12 @@ Array ResourcePreloader::_get_resources() const { } void ResourcePreloader::add_resource(const StringName &p_name, const RES &p_resource) { - ERR_FAIL_COND(p_resource.is_null()); if (resources.has(p_name)) { - StringName new_name; int idx = 2; while (true) { - new_name = p_name.operator String() + " " + itos(idx); if (resources.has(new_name)) { idx++; @@ -99,18 +92,16 @@ void ResourcePreloader::add_resource(const StringName &p_name, const RES &p_reso add_resource(new_name, p_resource); } else { - resources[p_name] = p_resource; } } void ResourcePreloader::remove_resource(const StringName &p_name) { - ERR_FAIL_COND(!resources.has(p_name)); resources.erase(p_name); } -void ResourcePreloader::rename_resource(const StringName &p_from_name, const StringName &p_to_name) { +void ResourcePreloader::rename_resource(const StringName &p_from_name, const StringName &p_to_name) { ERR_FAIL_COND(!resources.has(p_from_name)); RES res = resources[p_from_name]; @@ -120,17 +111,15 @@ void ResourcePreloader::rename_resource(const StringName &p_from_name, const Str } bool ResourcePreloader::has_resource(const StringName &p_name) const { - return resources.has(p_name); } -RES ResourcePreloader::get_resource(const StringName &p_name) const { +RES ResourcePreloader::get_resource(const StringName &p_name) const { ERR_FAIL_COND_V(!resources.has(p_name), RES()); return resources[p_name]; } Vector<String> ResourcePreloader::_get_resource_list() const { - Vector<String> res; res.resize(resources.size()); int i = 0; @@ -142,15 +131,12 @@ Vector<String> ResourcePreloader::_get_resource_list() const { } void ResourcePreloader::get_resource_list(List<StringName> *p_list) { - for (Map<StringName, RES>::Element *E = resources.front(); E; E = E->next()) { - p_list->push_back(E->key()); } } void ResourcePreloader::_bind_methods() { - ClassDB::bind_method(D_METHOD("_set_resources"), &ResourcePreloader::_set_resources); ClassDB::bind_method(D_METHOD("_get_resources"), &ResourcePreloader::_get_resources); diff --git a/scene/main/resource_preloader.h b/scene/main/resource_preloader.h index 9ad219dd92..580dc35a57 100644 --- a/scene/main/resource_preloader.h +++ b/scene/main/resource_preloader.h @@ -34,7 +34,6 @@ #include "scene/main/node.h" class ResourcePreloader : public Node { - GDCLASS(ResourcePreloader, Node); Map<StringName, RES> resources; diff --git a/scene/main/scene_tree.cpp b/scene/main/scene_tree.cpp index 94be22ccd2..a0e10f30c0 100644 --- a/scene/main/scene_tree.cpp +++ b/scene/main/scene_tree.cpp @@ -56,7 +56,6 @@ #include <stdio.h> void SceneTreeTimer::_bind_methods() { - ClassDB::bind_method(D_METHOD("set_time_left", "time"), &SceneTreeTimer::set_time_left); ClassDB::bind_method(D_METHOD("get_time_left"), &SceneTreeTimer::get_time_left); @@ -74,7 +73,6 @@ float SceneTreeTimer::get_time_left() const { } void SceneTreeTimer::set_pause_mode_process(bool p_pause_mode_process) { - process_pause = p_pause_mode_process; } @@ -83,7 +81,6 @@ bool SceneTreeTimer::is_pause_mode_process() { } void SceneTreeTimer::release_connections() { - List<Connection> connections; get_all_signal_connections(&connections); @@ -99,33 +96,29 @@ SceneTreeTimer::SceneTreeTimer() { } void SceneTree::tree_changed() { - tree_version++; emit_signal(tree_changed_name); } void SceneTree::node_added(Node *p_node) { - emit_signal(node_added_name, p_node); } void SceneTree::node_removed(Node *p_node) { - if (current_scene == p_node) { current_scene = nullptr; } emit_signal(node_removed_name, p_node); - if (call_lock > 0) + if (call_lock > 0) { call_skip.insert(p_node); + } } void SceneTree::node_renamed(Node *p_node) { - emit_signal(node_renamed_name, p_node); } SceneTree::Group *SceneTree::add_to_group(const StringName &p_group, Node *p_node) { - Map<StringName, Group>::Element *E = group_map.find(p_group); if (!E) { E = group_map.insert(p_group, Group()); @@ -139,26 +132,25 @@ SceneTree::Group *SceneTree::add_to_group(const StringName &p_group, Node *p_nod } void SceneTree::remove_from_group(const StringName &p_group, Node *p_node) { - Map<StringName, Group>::Element *E = group_map.find(p_group); ERR_FAIL_COND(!E); E->get().nodes.erase(p_node); - if (E->get().nodes.empty()) + if (E->get().nodes.empty()) { group_map.erase(E); + } } void SceneTree::make_group_changed(const StringName &p_group) { Map<StringName, Group>::Element *E = group_map.find(p_group); - if (E) + if (E) { E->get().changed = true; + } } void SceneTree::flush_transform_notifications() { - SelfList<Node> *n = xform_change_list.first(); while (n) { - Node *node = n->self(); SelfList<Node> *nx = n->next(); xform_change_list.remove(n); @@ -168,16 +160,15 @@ void SceneTree::flush_transform_notifications() { } void SceneTree::_flush_ugc() { - ugc_locked = true; while (unique_group_calls.size()) { - Map<UGCall, Vector<Variant>>::Element *E = unique_group_calls.front(); Variant v[VARIANT_ARG_MAX]; - for (int i = 0; i < E->get().size(); i++) + for (int i = 0; i < E->get().size(); i++) { v[i] = E->get()[i]; + } call_group_flags(GROUP_CALL_REALTIME, E->key().group, E->key().call, v[0], v[1], v[2], v[3], v[4]); @@ -188,11 +179,12 @@ void SceneTree::_flush_ugc() { } void SceneTree::_update_group_order(Group &g, bool p_use_priority) { - - if (!g.changed) + if (!g.changed) { return; - if (g.nodes.empty()) + } + if (g.nodes.empty()) { return; + } Node **nodes = g.nodes.ptrw(); int node_count = g.nodes.size(); @@ -208,31 +200,33 @@ void SceneTree::_update_group_order(Group &g, bool p_use_priority) { } void SceneTree::call_group_flags(uint32_t p_call_flags, const StringName &p_group, const StringName &p_function, VARIANT_ARG_DECLARE) { - Map<StringName, Group>::Element *E = group_map.find(p_group); - if (!E) + if (!E) { return; + } Group &g = E->get(); - if (g.nodes.empty()) + if (g.nodes.empty()) { return; + } if (p_call_flags & GROUP_CALL_UNIQUE && !(p_call_flags & GROUP_CALL_REALTIME)) { - ERR_FAIL_COND(ugc_locked); UGCall ug; ug.call = p_function; ug.group = p_group; - if (unique_group_calls.has(ug)) + if (unique_group_calls.has(ug)) { return; + } VARIANT_ARGPTRS; Vector<Variant> args; for (int i = 0; i < VARIANT_ARG_MAX; i++) { - if (argptr[i]->get_type() == Variant::NIL) + if (argptr[i]->get_type() == Variant::NIL) { break; + } args.push_back(*argptr[i]); } @@ -249,51 +243,55 @@ void SceneTree::call_group_flags(uint32_t p_call_flags, const StringName &p_grou call_lock++; if (p_call_flags & GROUP_CALL_REVERSE) { - for (int i = node_count - 1; i >= 0; i--) { - - if (call_lock && call_skip.has(nodes[i])) + if (call_lock && call_skip.has(nodes[i])) { continue; + } if (p_call_flags & GROUP_CALL_REALTIME) { - if (p_call_flags & GROUP_CALL_MULTILEVEL) + if (p_call_flags & GROUP_CALL_MULTILEVEL) { nodes[i]->call_multilevel(p_function, VARIANT_ARG_PASS); - else + } else { nodes[i]->call(p_function, VARIANT_ARG_PASS); - } else + } + } else { MessageQueue::get_singleton()->push_call(nodes[i], p_function, VARIANT_ARG_PASS); + } } } else { - for (int i = 0; i < node_count; i++) { - - if (call_lock && call_skip.has(nodes[i])) + if (call_lock && call_skip.has(nodes[i])) { continue; + } if (p_call_flags & GROUP_CALL_REALTIME) { - if (p_call_flags & GROUP_CALL_MULTILEVEL) + if (p_call_flags & GROUP_CALL_MULTILEVEL) { nodes[i]->call_multilevel(p_function, VARIANT_ARG_PASS); - else + } else { nodes[i]->call(p_function, VARIANT_ARG_PASS); - } else + } + } else { MessageQueue::get_singleton()->push_call(nodes[i], p_function, VARIANT_ARG_PASS); + } } } call_lock--; - if (call_lock == 0) + if (call_lock == 0) { call_skip.clear(); + } } void SceneTree::notify_group_flags(uint32_t p_call_flags, const StringName &p_group, int p_notification) { - Map<StringName, Group>::Element *E = group_map.find(p_group); - if (!E) + if (!E) { return; + } Group &g = E->get(); - if (g.nodes.empty()) + if (g.nodes.empty()) { return; + } _update_group_order(g); @@ -304,45 +302,47 @@ void SceneTree::notify_group_flags(uint32_t p_call_flags, const StringName &p_gr call_lock++; if (p_call_flags & GROUP_CALL_REVERSE) { - for (int i = node_count - 1; i >= 0; i--) { - - if (call_lock && call_skip.has(nodes[i])) + if (call_lock && call_skip.has(nodes[i])) { continue; + } - if (p_call_flags & GROUP_CALL_REALTIME) + if (p_call_flags & GROUP_CALL_REALTIME) { nodes[i]->notification(p_notification); - else + } else { MessageQueue::get_singleton()->push_notification(nodes[i], p_notification); + } } } else { - for (int i = 0; i < node_count; i++) { - - if (call_lock && call_skip.has(nodes[i])) + if (call_lock && call_skip.has(nodes[i])) { continue; + } - if (p_call_flags & GROUP_CALL_REALTIME) + if (p_call_flags & GROUP_CALL_REALTIME) { nodes[i]->notification(p_notification); - else + } else { MessageQueue::get_singleton()->push_notification(nodes[i], p_notification); + } } } call_lock--; - if (call_lock == 0) + if (call_lock == 0) { call_skip.clear(); + } } void SceneTree::set_group_flags(uint32_t p_call_flags, const StringName &p_group, const String &p_name, const Variant &p_value) { - Map<StringName, Group>::Element *E = group_map.find(p_group); - if (!E) + if (!E) { return; + } Group &g = E->get(); - if (g.nodes.empty()) + if (g.nodes.empty()) { return; + } _update_group_order(g); @@ -353,35 +353,36 @@ void SceneTree::set_group_flags(uint32_t p_call_flags, const StringName &p_group call_lock++; if (p_call_flags & GROUP_CALL_REVERSE) { - for (int i = node_count - 1; i >= 0; i--) { - - if (call_lock && call_skip.has(nodes[i])) + if (call_lock && call_skip.has(nodes[i])) { continue; + } - if (p_call_flags & GROUP_CALL_REALTIME) + if (p_call_flags & GROUP_CALL_REALTIME) { nodes[i]->set(p_name, p_value); - else + } else { MessageQueue::get_singleton()->push_set(nodes[i], p_name, p_value); + } } } else { - for (int i = 0; i < node_count; i++) { - - if (call_lock && call_skip.has(nodes[i])) + if (call_lock && call_skip.has(nodes[i])) { continue; + } - if (p_call_flags & GROUP_CALL_REALTIME) + if (p_call_flags & GROUP_CALL_REALTIME) { nodes[i]->set(p_name, p_value); - else + } else { MessageQueue::get_singleton()->push_set(nodes[i], p_name, p_value); + } } } call_lock--; - if (call_lock == 0) + if (call_lock == 0) { call_skip.clear(); + } } void SceneTree::call_group(const StringName &p_group, const StringName &p_function, VARIANT_ARG_DECLARE) { @@ -389,12 +390,10 @@ void SceneTree::call_group(const StringName &p_group, const StringName &p_functi } void SceneTree::notify_group(const StringName &p_group, int p_notification) { - notify_group_flags(0, p_group, p_notification); } void SceneTree::set_group(const StringName &p_group, const String &p_name, const Variant &p_value) { - set_group_flags(0, p_group, p_name, p_value); } @@ -405,7 +404,6 @@ void SceneTree::init() { } bool SceneTree::iteration(float p_time) { - root_lock++; current_frame++; @@ -432,7 +430,6 @@ bool SceneTree::iteration(float p_time) { } bool SceneTree::idle(float p_time) { - //print_line("ram: "+itos(OS::get_singleton()->get_static_memory_usage())+" sram: "+itos(OS::get_singleton()->get_dynamic_memory_usage())); //print_line("node count: "+itos(get_node_count())); //print_line("TEXTURE RAM: "+itos(RS::get_singleton()->get_render_info(RS::INFO_TEXTURE_MEM_USED))); @@ -470,7 +467,6 @@ bool SceneTree::idle(float p_time) { List<Ref<SceneTreeTimer>>::Element *L = timers.back(); //last element for (List<Ref<SceneTreeTimer>>::Element *E = timers.front(); E;) { - List<Ref<SceneTreeTimer>>::Element *N = E->next(); if (pause && !E->get()->is_pause_mode_process()) { if (E == L) { @@ -509,7 +505,6 @@ bool SceneTree::idle(float p_time) { cpath = fallback->get_path(); } if (cpath != env_path) { - if (env_path != String()) { fallback = ResourceLoader::load(env_path); if (fallback.is_null()) { @@ -529,7 +524,6 @@ bool SceneTree::idle(float p_time) { } void SceneTree::finish() { - _flush_delete_queue(); _flush_ugc(); @@ -553,7 +547,6 @@ void SceneTree::finish() { } void SceneTree::quit(int p_exit_code) { - if (p_exit_code >= 0) { // Override the exit code if a positive argument is given (the default is `-1`). // This is a shorthand for calling `set_exit_code()` on the OS singleton then quitting. @@ -564,11 +557,11 @@ void SceneTree::quit(int p_exit_code) { } void SceneTree::_main_window_close() { - if (accept_quit) { _quit = true; } } + void SceneTree::_main_window_go_back() { if (quit_on_go_back) { _quit = true; @@ -583,9 +576,7 @@ void SceneTree::_main_window_focus_in() { } void SceneTree::_notification(int p_notification) { - switch (p_notification) { - case NOTIFICATION_TRANSLATION_CHANGED: { if (!Engine::get_singleton()->is_editor_hint()) { get_root()->propagate_notification(p_notification); @@ -597,7 +588,6 @@ void SceneTree::_notification(int p_notification) { case NOTIFICATION_CRASH: case NOTIFICATION_APP_RESUMED: case NOTIFICATION_APP_PAUSED: { - get_root()->propagate_notification(p_notification); } break; @@ -607,89 +597,74 @@ void SceneTree::_notification(int p_notification) { }; void SceneTree::set_auto_accept_quit(bool p_enable) { - accept_quit = p_enable; } void SceneTree::set_quit_on_go_back(bool p_enable) { - quit_on_go_back = p_enable; } #ifdef TOOLS_ENABLED bool SceneTree::is_node_being_edited(const Node *p_node) const { - return Engine::get_singleton()->is_editor_hint() && edited_scene_root && (edited_scene_root->is_a_parent_of(p_node) || edited_scene_root == p_node); } #endif #ifdef DEBUG_ENABLED void SceneTree::set_debug_collisions_hint(bool p_enabled) { - debug_collisions_hint = p_enabled; } bool SceneTree::is_debugging_collisions_hint() const { - return debug_collisions_hint; } void SceneTree::set_debug_navigation_hint(bool p_enabled) { - debug_navigation_hint = p_enabled; } bool SceneTree::is_debugging_navigation_hint() const { - return debug_navigation_hint; } #endif void SceneTree::set_debug_collisions_color(const Color &p_color) { - debug_collisions_color = p_color; } Color SceneTree::get_debug_collisions_color() const { - return debug_collisions_color; } void SceneTree::set_debug_collision_contact_color(const Color &p_color) { - debug_collision_contact_color = p_color; } Color SceneTree::get_debug_collision_contact_color() const { - return debug_collision_contact_color; } void SceneTree::set_debug_navigation_color(const Color &p_color) { - debug_navigation_color = p_color; } Color SceneTree::get_debug_navigation_color() const { - return debug_navigation_color; } void SceneTree::set_debug_navigation_disabled_color(const Color &p_color) { - debug_navigation_disabled_color = p_color; } Color SceneTree::get_debug_navigation_disabled_color() const { - return debug_navigation_disabled_color; } Ref<Material> SceneTree::get_debug_navigation_material() { - - if (navigation_material.is_valid()) + if (navigation_material.is_valid()) { return navigation_material; + } Ref<StandardMaterial3D> line_material = Ref<StandardMaterial3D>(memnew(StandardMaterial3D)); line_material->set_shading_mode(StandardMaterial3D::SHADING_MODE_UNSHADED); @@ -704,9 +679,9 @@ Ref<Material> SceneTree::get_debug_navigation_material() { } Ref<Material> SceneTree::get_debug_navigation_disabled_material() { - - if (navigation_disabled_material.is_valid()) + if (navigation_disabled_material.is_valid()) { return navigation_disabled_material; + } Ref<StandardMaterial3D> line_material = Ref<StandardMaterial3D>(memnew(StandardMaterial3D)); line_material->set_shading_mode(StandardMaterial3D::SHADING_MODE_UNSHADED); @@ -719,10 +694,11 @@ Ref<Material> SceneTree::get_debug_navigation_disabled_material() { return navigation_disabled_material; } -Ref<Material> SceneTree::get_debug_collision_material() { - if (collision_material.is_valid()) +Ref<Material> SceneTree::get_debug_collision_material() { + if (collision_material.is_valid()) { return collision_material; + } Ref<StandardMaterial3D> line_material = Ref<StandardMaterial3D>(memnew(StandardMaterial3D)); line_material->set_shading_mode(StandardMaterial3D::SHADING_MODE_UNSHADED); @@ -737,9 +713,9 @@ Ref<Material> SceneTree::get_debug_collision_material() { } Ref<ArrayMesh> SceneTree::get_debug_contact_mesh() { - - if (debug_contact_mesh.is_valid()) + if (debug_contact_mesh.is_valid()) { return debug_contact_mesh; + } debug_contact_mesh = Ref<ArrayMesh>(memnew(ArrayMesh)); @@ -773,12 +749,14 @@ Ref<ArrayMesh> SceneTree::get_debug_contact_mesh() { /* clang-format on */ Vector<int> indices; - for (int i = 0; i < 8 * 3; i++) + for (int i = 0; i < 8 * 3; i++) { indices.push_back(diamond_faces[i]); + } Vector<Vector3> vertices; - for (int i = 0; i < 6; i++) + for (int i = 0; i < 6; i++) { vertices.push_back(diamond[i] * 0.1); + } Array arr; arr.resize(Mesh::ARRAY_MAX); @@ -792,30 +770,31 @@ Ref<ArrayMesh> SceneTree::get_debug_contact_mesh() { } void SceneTree::set_pause(bool p_enabled) { - - if (p_enabled == pause) + if (p_enabled == pause) { return; + } pause = p_enabled; NavigationServer3D::get_singleton()->set_active(!p_enabled); PhysicsServer3D::get_singleton()->set_active(!p_enabled); PhysicsServer2D::get_singleton()->set_active(!p_enabled); - if (get_root()) + if (get_root()) { get_root()->propagate_notification(p_enabled ? Node::NOTIFICATION_PAUSED : Node::NOTIFICATION_UNPAUSED); + } } bool SceneTree::is_paused() const { - return pause; } void SceneTree::_notify_group_pause(const StringName &p_group, int p_notification) { - Map<StringName, Group>::Element *E = group_map.find(p_group); - if (!E) + if (!E) { return; + } Group &g = E->get(); - if (g.nodes.empty()) + if (g.nodes.empty()) { return; + } _update_group_order(g, p_notification == Node::NOTIFICATION_PROCESS || p_notification == Node::NOTIFICATION_INTERNAL_PROCESS || p_notification == Node::NOTIFICATION_PHYSICS_PROCESS || p_notification == Node::NOTIFICATION_INTERNAL_PHYSICS_PROCESS); @@ -829,23 +808,26 @@ void SceneTree::_notify_group_pause(const StringName &p_group, int p_notificatio call_lock++; for (int i = 0; i < node_count; i++) { - Node *n = nodes[i]; - if (call_lock && call_skip.has(n)) + if (call_lock && call_skip.has(n)) { continue; + } - if (!n->can_process()) + if (!n->can_process()) { continue; - if (!n->can_process_notification(p_notification)) + } + if (!n->can_process_notification(p_notification)) { continue; + } n->notification(p_notification); //ERR_FAIL_COND(node_count != g.nodes.size()); } call_lock--; - if (call_lock == 0) + if (call_lock == 0) { call_skip.clear(); + } } /* @@ -857,16 +839,18 @@ void SceneMainLoop::_update_listener_2d() { } } + */ void SceneTree::_call_input_pause(const StringName &p_group, const StringName &p_method, const Ref<InputEvent> &p_input, Viewport *p_viewport) { - Map<StringName, Group>::Element *E = group_map.find(p_group); - if (!E) + if (!E) { return; + } Group &g = E->get(); - if (g.nodes.empty()) + if (g.nodes.empty()) { return; + } _update_group_order(g); @@ -883,27 +867,30 @@ void SceneTree::_call_input_pause(const StringName &p_group, const StringName &p call_lock++; for (int i = node_count - 1; i >= 0; i--) { - - if (p_viewport->is_input_handled()) + if (p_viewport->is_input_handled()) { break; + } Node *n = nodes[i]; - if (call_lock && call_skip.has(n)) + if (call_lock && call_skip.has(n)) { continue; + } - if (!n->can_process()) + if (!n->can_process()) { continue; + } n->call_multilevel(p_method, (const Variant **)v, 1); //ERR_FAIL_COND(node_count != g.nodes.size()); } call_lock--; - if (call_lock == 0) + if (call_lock == 0) { call_skip.clear(); + } } -Variant SceneTree::_call_group_flags(const Variant **p_args, int p_argcount, Callable::CallError &r_error) { +Variant SceneTree::_call_group_flags(const Variant **p_args, int p_argcount, Callable::CallError &r_error) { r_error.error = Callable::CallError::CALL_OK; ERR_FAIL_COND_V(p_argcount < 3, Variant()); @@ -917,7 +904,6 @@ Variant SceneTree::_call_group_flags(const Variant **p_args, int p_argcount, Cal Variant v[VARIANT_ARG_MAX]; for (int i = 0; i < MIN(p_argcount - 3, 5); i++) { - v[i] = *p_args[i + 3]; } @@ -926,7 +912,6 @@ Variant SceneTree::_call_group_flags(const Variant **p_args, int p_argcount, Cal } Variant SceneTree::_call_group(const Variant **p_args, int p_argcount, Callable::CallError &r_error) { - r_error.error = Callable::CallError::CALL_OK; ERR_FAIL_COND_V(p_argcount < 2, Variant()); @@ -938,7 +923,6 @@ Variant SceneTree::_call_group(const Variant **p_args, int p_argcount, Callable: Variant v[VARIANT_ARG_MAX]; for (int i = 0; i < MIN(p_argcount - 2, 5); i++) { - v[i] = *p_args[i + 2]; } @@ -947,31 +931,30 @@ Variant SceneTree::_call_group(const Variant **p_args, int p_argcount, Callable: } int64_t SceneTree::get_frame() const { - return current_frame; } -int64_t SceneTree::get_event_count() const { +int64_t SceneTree::get_event_count() const { return current_event; } Array SceneTree::_get_nodes_in_group(const StringName &p_group) { - Array ret; Map<StringName, Group>::Element *E = group_map.find(p_group); - if (!E) + if (!E) { return ret; + } _update_group_order(E->get()); //update order just in case int nc = E->get().nodes.size(); - if (nc == 0) + if (nc == 0) { return ret; + } ret.resize(nc); Node **ptr = E->get().nodes.ptrw(); for (int i = 0; i < nc; i++) { - ret[i] = ptr[i]; } @@ -979,32 +962,30 @@ Array SceneTree::_get_nodes_in_group(const StringName &p_group) { } bool SceneTree::has_group(const StringName &p_identifier) const { - return group_map.has(p_identifier); } -void SceneTree::get_nodes_in_group(const StringName &p_group, List<Node *> *p_list) { +void SceneTree::get_nodes_in_group(const StringName &p_group, List<Node *> *p_list) { Map<StringName, Group>::Element *E = group_map.find(p_group); - if (!E) + if (!E) { return; + } _update_group_order(E->get()); //update order just in case int nc = E->get().nodes.size(); - if (nc == 0) + if (nc == 0) { return; + } Node **ptr = E->get().nodes.ptrw(); for (int i = 0; i < nc; i++) { - p_list->push_back(ptr[i]); } } void SceneTree::_flush_delete_queue() { - _THREAD_SAFE_METHOD_ while (delete_queue.size()) { - Object *obj = ObjectDB::get_instance(delete_queue.front()->get()); if (obj) { memdelete(obj); @@ -1014,7 +995,6 @@ void SceneTree::_flush_delete_queue() { } void SceneTree::queue_delete(Object *p_object) { - _THREAD_SAFE_METHOD_ ERR_FAIL_NULL(p_object); p_object->_is_queued_for_deletion = true; @@ -1022,7 +1002,6 @@ void SceneTree::queue_delete(Object *p_object) { } int SceneTree::get_node_count() const { - return node_count; } @@ -1033,7 +1012,6 @@ void SceneTree::set_edited_scene_root(Node *p_node) { } Node *SceneTree::get_edited_scene_root() const { - #ifdef TOOLS_ENABLED return edited_scene_root; #else @@ -1042,18 +1020,15 @@ Node *SceneTree::get_edited_scene_root() const { } void SceneTree::set_current_scene(Node *p_scene) { - ERR_FAIL_COND(p_scene && p_scene->get_parent() != root); current_scene = p_scene; } Node *SceneTree::get_current_scene() const { - return current_scene; } void SceneTree::_change_scene(Node *p_to) { - if (current_scene) { memdelete(current_scene); current_scene = nullptr; @@ -1075,8 +1050,9 @@ void SceneTree::_change_scene(Node *p_to) { Error SceneTree::change_scene(const String &p_path) { Ref<PackedScene> new_scene = ResourceLoader::load(p_path); - if (new_scene.is_null()) + if (new_scene.is_null()) { return ERR_CANT_OPEN; + } return change_scene_to(new_scene); } @@ -1099,13 +1075,11 @@ Error SceneTree::reload_current_scene() { } void SceneTree::add_current_scene(Node *p_current) { - current_scene = p_current; root->add_child(p_current); } Ref<SceneTreeTimer> SceneTree::create_timer(float p_delay_sec, bool p_process_pause) { - Ref<SceneTreeTimer> stt; stt.instance(); stt->set_pause_mode_process(p_process_pause); @@ -1115,27 +1089,22 @@ Ref<SceneTreeTimer> SceneTree::create_timer(float p_delay_sec, bool p_process_pa } void SceneTree::_network_peer_connected(int p_id) { - emit_signal("network_peer_connected", p_id); } void SceneTree::_network_peer_disconnected(int p_id) { - emit_signal("network_peer_disconnected", p_id); } void SceneTree::_connected_to_server() { - emit_signal("connected_to_server"); } void SceneTree::_connection_failed() { - emit_signal("connection_failed"); } void SceneTree::_server_disconnected() { - emit_signal("server_disconnected"); } @@ -1173,17 +1142,14 @@ void SceneTree::set_multiplayer(Ref<MultiplayerAPI> p_multiplayer) { } void SceneTree::set_network_peer(const Ref<NetworkedMultiplayerPeer> &p_network_peer) { - multiplayer->set_network_peer(p_network_peer); } Ref<NetworkedMultiplayerPeer> SceneTree::get_network_peer() const { - return multiplayer->get_network_peer(); } bool SceneTree::is_network_server() const { - return multiplayer->is_network_server(); } @@ -1192,12 +1158,10 @@ bool SceneTree::has_network_peer() const { } int SceneTree::get_network_unique_id() const { - return multiplayer->get_network_unique_id(); } Vector<int> SceneTree::get_network_connected_peers() const { - return multiplayer->get_network_connected_peers(); } @@ -1214,7 +1178,6 @@ bool SceneTree::is_refusing_new_network_connections() const { } void SceneTree::_bind_methods() { - ClassDB::bind_method(D_METHOD("get_root"), &SceneTree::get_root); ClassDB::bind_method(D_METHOD("has_group", "name"), &SceneTree::has_group); @@ -1327,7 +1290,6 @@ SceneTree::IdleCallback SceneTree::idle_callbacks[SceneTree::MAX_IDLE_CALLBACKS] int SceneTree::idle_callback_count = 0; void SceneTree::_call_idle_callbacks() { - for (int i = 0; i < idle_callback_count; i++) { idle_callbacks[i](); } @@ -1339,7 +1301,6 @@ void SceneTree::add_idle_callback(IdleCallback p_callback) { } void SceneTree::get_argument_options(const StringName &p_function, int p_idx, List<String> *r_options) const { - if (p_function == "change_scene") { DirAccessRef dir_access = DirAccess::create(DirAccess::ACCESS_RESOURCES); List<String> directories; @@ -1371,9 +1332,9 @@ void SceneTree::get_argument_options(const StringName &p_function, int p_idx, Li } SceneTree::SceneTree() { - - if (singleton == nullptr) + if (singleton == nullptr) { singleton = this; + } _quit = false; accept_quit = true; quit_on_go_back = true; @@ -1410,8 +1371,9 @@ SceneTree::SceneTree() { root = memnew(Window); root->set_name("root"); - if (!root->get_world_3d().is_valid()) + if (!root->get_world_3d().is_valid()) { root->set_world_3d(Ref<World3D>(memnew(World3D))); + } // Initialize network state multiplayer_poll = true; @@ -1436,8 +1398,9 @@ SceneTree::SceneTree() { ResourceLoader::get_recognized_extensions_for_type("Environment", &exts); String ext_hint; for (List<String>::Element *E = exts.front(); E; E = E->next()) { - if (ext_hint != String()) + if (ext_hint != String()) { ext_hint += ","; + } ext_hint += "*." + E->get(); } //get path @@ -1479,6 +1442,7 @@ SceneTree::~SceneTree() { memdelete(root); } - if (singleton == this) + if (singleton == this) { singleton = nullptr; + } } diff --git a/scene/main/scene_tree.h b/scene/main/scene_tree.h index 319b5a7e74..57b6b4dcfa 100644 --- a/scene/main/scene_tree.h +++ b/scene/main/scene_tree.h @@ -70,7 +70,6 @@ public: }; class SceneTree : public MainLoop { - _THREAD_SAFE_CLASS_ GDCLASS(SceneTree, MainLoop); @@ -80,7 +79,6 @@ public: private: struct Group { - Vector<Node *> nodes; //uint64_t last_tree_version; bool changed; @@ -119,7 +117,6 @@ private: Node *edited_scene_root; #endif struct UGCall { - StringName group; StringName call; diff --git a/scene/main/shader_globals_override.cpp b/scene/main/shader_globals_override.cpp index 272cea8f2b..726dcb58de 100644 --- a/scene/main/shader_globals_override.cpp +++ b/scene/main/shader_globals_override.cpp @@ -35,7 +35,6 @@ #include "scene/scene_string_names.h" StringName *ShaderGlobalsOverride::_remap(const StringName &p_name) const { - StringName *r = param_remaps.getptr(p_name); if (!r) { //not cached, do caching @@ -49,8 +48,8 @@ StringName *ShaderGlobalsOverride::_remap(const StringName &p_name) const { return r; } -bool ShaderGlobalsOverride::_set(const StringName &p_name, const Variant &p_value) { +bool ShaderGlobalsOverride::_set(const StringName &p_name, const Variant &p_value) { StringName *r = _remap(p_name); if (r) { @@ -75,7 +74,6 @@ bool ShaderGlobalsOverride::_set(const StringName &p_name, const Variant &p_valu } bool ShaderGlobalsOverride::_get(const StringName &p_name, Variant &r_ret) const { - StringName *r = _remap(p_name); if (r) { @@ -90,7 +88,6 @@ bool ShaderGlobalsOverride::_get(const StringName &p_name, Variant &r_ret) const } void ShaderGlobalsOverride::_get_property_list(List<PropertyInfo> *p_list) const { - Vector<StringName> variables; variables = RS::get_singleton()->global_variable_get_list(); for (int i = 0; i < variables.size(); i++) { @@ -198,7 +195,6 @@ void ShaderGlobalsOverride::_get_property_list(List<PropertyInfo> *p_list) const pinfo.hint_string = "Cubemap"; } break; default: { - } break; } @@ -221,7 +217,6 @@ void ShaderGlobalsOverride::_get_property_list(List<PropertyInfo> *p_list) const } void ShaderGlobalsOverride::_activate() { - List<Node *> nodes; get_tree()->get_nodes_in_group(SceneStringNames::get_singleton()->shader_overrides_group_active, &nodes); if (nodes.size() == 0) { @@ -242,14 +237,11 @@ void ShaderGlobalsOverride::_activate() { } void ShaderGlobalsOverride::_notification(int p_what) { - if (p_what == Node3D::NOTIFICATION_ENTER_TREE) { - add_to_group(SceneStringNames::get_singleton()->shader_overrides_group); _activate(); } else if (p_what == Node3D::NOTIFICATION_EXIT_TREE) { - if (active) { //remove overrides const StringName *K = nullptr; @@ -269,7 +261,6 @@ void ShaderGlobalsOverride::_notification(int p_what) { } String ShaderGlobalsOverride::get_configuration_warning() const { - if (!active) { return TTR("ShaderGlobalsOverride is not active because another node of the same type is in the scene."); } @@ -278,7 +269,6 @@ String ShaderGlobalsOverride::get_configuration_warning() const { } void ShaderGlobalsOverride::_bind_methods() { - ClassDB::bind_method(D_METHOD("_activate"), &ShaderGlobalsOverride::_activate); } diff --git a/scene/main/shader_globals_override.h b/scene/main/shader_globals_override.h index d470e6a7dc..51420e00cf 100644 --- a/scene/main/shader_globals_override.h +++ b/scene/main/shader_globals_override.h @@ -34,7 +34,6 @@ #include "scene/3d/node_3d.h" class ShaderGlobalsOverride : public Node { - GDCLASS(ShaderGlobalsOverride, Node); struct Override { diff --git a/scene/main/timer.cpp b/scene/main/timer.cpp index 7cab4028b8..fb55892b54 100644 --- a/scene/main/timer.cpp +++ b/scene/main/timer.cpp @@ -33,45 +33,47 @@ #include "core/engine.h" void Timer::_notification(int p_what) { - switch (p_what) { - case NOTIFICATION_READY: { - if (autostart) { #ifdef TOOLS_ENABLED - if (Engine::get_singleton()->is_editor_hint() && get_tree()->get_edited_scene_root() && (get_tree()->get_edited_scene_root() == this || get_tree()->get_edited_scene_root()->is_a_parent_of(this))) + if (Engine::get_singleton()->is_editor_hint() && get_tree()->get_edited_scene_root() && (get_tree()->get_edited_scene_root() == this || get_tree()->get_edited_scene_root()->is_a_parent_of(this))) { break; + } #endif start(); autostart = false; } } break; case NOTIFICATION_INTERNAL_PROCESS: { - if (timer_process_mode == TIMER_PROCESS_PHYSICS || !is_processing_internal()) + if (timer_process_mode == TIMER_PROCESS_PHYSICS || !is_processing_internal()) { return; + } time_left -= get_process_delta_time(); if (time_left < 0) { - if (!one_shot) + if (!one_shot) { time_left += wait_time; - else + } else { stop(); + } emit_signal("timeout"); } } break; case NOTIFICATION_INTERNAL_PHYSICS_PROCESS: { - if (timer_process_mode == TIMER_PROCESS_IDLE || !is_physics_processing_internal()) + if (timer_process_mode == TIMER_PROCESS_IDLE || !is_physics_processing_internal()) { return; + } time_left -= get_physics_process_delta_time(); if (time_left < 0) { - if (!one_shot) + if (!one_shot) { time_left += wait_time; - else + } else { stop(); + } emit_signal("timeout"); } @@ -83,31 +85,28 @@ void Timer::set_wait_time(float p_time) { ERR_FAIL_COND_MSG(p_time <= 0, "Time should be greater than zero."); wait_time = p_time; } -float Timer::get_wait_time() const { +float Timer::get_wait_time() const { return wait_time; } void Timer::set_one_shot(bool p_one_shot) { - one_shot = p_one_shot; } -bool Timer::is_one_shot() const { +bool Timer::is_one_shot() const { return one_shot; } void Timer::set_autostart(bool p_start) { - autostart = p_start; } -bool Timer::has_autostart() const { +bool Timer::has_autostart() const { return autostart; } void Timer::start(float p_time) { - ERR_FAIL_COND_MSG(!is_inside_tree(), "Timer was not added to the SceneTree. Either add it or set autostart to true."); if (p_time > 0) { @@ -124,8 +123,9 @@ void Timer::stop() { } void Timer::set_paused(bool p_paused) { - if (paused == p_paused) + if (paused == p_paused) { return; + } paused = p_paused; _set_process(processing); @@ -140,14 +140,13 @@ bool Timer::is_stopped() const { } float Timer::get_time_left() const { - return time_left > 0 ? time_left : 0; } void Timer::set_timer_process_mode(TimerProcessMode p_mode) { - - if (timer_process_mode == p_mode) + if (timer_process_mode == p_mode) { return; + } switch (timer_process_mode) { case TIMER_PROCESS_PHYSICS: @@ -167,7 +166,6 @@ void Timer::set_timer_process_mode(TimerProcessMode p_mode) { } Timer::TimerProcessMode Timer::get_timer_process_mode() const { - return timer_process_mode; } @@ -184,7 +182,6 @@ void Timer::_set_process(bool p_process, bool p_force) { } void Timer::_bind_methods() { - ClassDB::bind_method(D_METHOD("set_wait_time", "time_sec"), &Timer::set_wait_time); ClassDB::bind_method(D_METHOD("get_wait_time"), &Timer::get_wait_time); diff --git a/scene/main/timer.h b/scene/main/timer.h index 044566738e..61abf04f59 100644 --- a/scene/main/timer.h +++ b/scene/main/timer.h @@ -34,7 +34,6 @@ #include "scene/main/node.h" class Timer : public Node { - GDCLASS(Timer, Node); float wait_time; diff --git a/scene/main/viewport.cpp b/scene/main/viewport.cpp index 58024dab38..8544d67ecc 100644 --- a/scene/main/viewport.cpp +++ b/scene/main/viewport.cpp @@ -56,7 +56,6 @@ #include "servers/physics_server_2d.h" void ViewportTexture::setup_local_to_scene() { - if (vp) { vp->viewport_textures.erase(this); } @@ -87,9 +86,9 @@ void ViewportTexture::setup_local_to_scene() { } void ViewportTexture::set_viewport_path_in_scene(const NodePath &p_path) { - - if (path == p_path) + if (path == p_path) { return; + } path = p_path; @@ -99,27 +98,25 @@ void ViewportTexture::set_viewport_path_in_scene(const NodePath &p_path) { } NodePath ViewportTexture::get_viewport_path_in_scene() const { - return path; } int ViewportTexture::get_width() const { - ERR_FAIL_COND_V_MSG(!vp, 0, "Viewport Texture must be set to use it."); return vp->size.width; } -int ViewportTexture::get_height() const { +int ViewportTexture::get_height() const { ERR_FAIL_COND_V_MSG(!vp, 0, "Viewport Texture must be set to use it."); return vp->size.height; } -Size2 ViewportTexture::get_size() const { +Size2 ViewportTexture::get_size() const { ERR_FAIL_COND_V_MSG(!vp, Size2(), "Viewport Texture must be set to use it."); return vp->size; } -RID ViewportTexture::get_rid() const { +RID ViewportTexture::get_rid() const { //ERR_FAIL_COND_V_MSG(!vp, RID(), "Viewport Texture must be set to use it."); if (proxy.is_null()) { proxy_ph = RS::get_singleton()->texture_2d_placeholder_create(); @@ -129,17 +126,15 @@ RID ViewportTexture::get_rid() const { } bool ViewportTexture::has_alpha() const { - return false; } -Ref<Image> ViewportTexture::get_data() const { +Ref<Image> ViewportTexture::get_data() const { ERR_FAIL_COND_V_MSG(!vp, Ref<Image>(), "Viewport Texture must be set to use it."); return RS::get_singleton()->texture_2d_get(vp->texture_rid); } void ViewportTexture::_bind_methods() { - ClassDB::bind_method(D_METHOD("set_viewport_path_in_scene", "path"), &ViewportTexture::set_viewport_path_in_scene); ClassDB::bind_method(D_METHOD("get_viewport_path_in_scene"), &ViewportTexture::get_viewport_path_in_scene); @@ -147,13 +142,11 @@ void ViewportTexture::_bind_methods() { } ViewportTexture::ViewportTexture() { - vp = nullptr; set_local_to_scene(true); } ViewportTexture::~ViewportTexture() { - if (vp) { vp->viewport_textures.erase(this); } @@ -169,7 +162,6 @@ ViewportTexture::~ViewportTexture() { ///////////////////////////////////// class TooltipPanel : public PopupPanel { - GDCLASS(TooltipPanel, PopupPanel); public: @@ -177,7 +169,6 @@ public: }; class TooltipLabel : public Label { - GDCLASS(TooltipLabel, Label); public: @@ -185,7 +176,6 @@ public: }; Viewport::GUI::GUI() { - embed_subwindows_hint = false; embedding_subwindows = false; @@ -206,9 +196,9 @@ Viewport::GUI::GUI() { ///////////////////////////////////// void Viewport::update_worlds() { - - if (!is_inside_tree()) + if (!is_inside_tree()) { return; + } Rect2 abstracted_rect = Rect2(Vector2(), get_visible_rect().size); Rect2 xformed_rect = (global_canvas_transform * canvas_transform).affine_inverse().xform(abstracted_rect); @@ -219,7 +209,6 @@ void Viewport::update_worlds() { } void Viewport::_collision_object_input_event(CollisionObject3D *p_object, Camera3D *p_camera, const Ref<InputEvent> &p_input_event, const Vector3 &p_pos, const Vector3 &p_normal, int p_shape) { - Transform object_transform = p_object->get_global_transform(); Transform camera_transform = p_camera->get_global_transform(); ObjectID id = p_object->get_instance_id(); @@ -238,14 +227,12 @@ void Viewport::_collision_object_input_event(CollisionObject3D *p_object, Camera } void Viewport::_sub_window_update_order() { - for (int i = 0; i < gui.sub_windows.size(); i++) { RS::get_singleton()->canvas_item_set_draw_index(gui.sub_windows[i].canvas_item, i); } } void Viewport::_sub_window_register(Window *p_window) { - ERR_FAIL_COND(!is_inside_tree()); for (int i = 0; i < gui.sub_windows.size(); i++) { ERR_FAIL_COND(gui.sub_windows[i].window == p_window); @@ -268,7 +255,6 @@ void Viewport::_sub_window_register(Window *p_window) { } void Viewport::_sub_window_update(Window *p_window) { - int index = -1; for (int i = 0; i < gui.sub_windows.size(); i++) { if (gui.sub_windows[i].window == p_window) { @@ -313,7 +299,6 @@ void Viewport::_sub_window_update(Window *p_window) { } void Viewport::_sub_window_grab_focus(Window *p_window) { - if (p_window == nullptr) { //release current focus if (gui.subwindow_focused) { @@ -385,7 +370,6 @@ void Viewport::_sub_window_grab_focus(Window *p_window) { } void Viewport::_sub_window_remove(Window *p_window) { - for (int i = 0; i < gui.sub_windows.size(); i++) { if (gui.sub_windows[i].window == p_window) { RS::get_singleton()->free(gui.sub_windows[i].canvas_item); @@ -407,7 +391,6 @@ void Viewport::_sub_window_remove(Window *p_window) { gui.subwindow_focused->_event_callback(DisplayServer::WINDOW_EVENT_FOCUS_OUT); if (parent_visible && parent_visible != this) { - gui.subwindow_focused = parent_visible; gui.subwindow_focused->_event_callback(DisplayServer::WINDOW_EVENT_FOCUS_IN); } else { @@ -444,11 +427,8 @@ void Viewport::_own_world_3d_changed() { } void Viewport::_notification(int p_what) { - switch (p_what) { - case NOTIFICATION_ENTER_TREE: { - gui.embedding_subwindows = gui.embed_subwindows_hint; if (get_parent()) { @@ -491,28 +471,28 @@ void Viewport::_notification(int p_what) { if (listeners.size() && !listener) { Listener3D *first = nullptr; for (Set<Listener3D *>::Element *E = listeners.front(); E; E = E->next()) { - if (first == nullptr || first->is_greater_than(E->get())) { first = E->get(); } } - if (first) + if (first) { first->make_current(); + } } if (cameras.size() && !camera) { //there are cameras but no current camera, pick first in tree and make it current Camera3D *first = nullptr; for (Set<Camera3D *>::Element *E = cameras.front(); E; E = E->next()) { - if (first == nullptr || first->is_greater_than(E->get())) { first = E->get(); } } - if (first) + if (first) { first->make_current(); + } } #endif @@ -522,10 +502,10 @@ void Viewport::_notification(int p_what) { } break; case NOTIFICATION_EXIT_TREE: { - _gui_cancel_tooltip(); - if (world_2d.is_valid()) + if (world_2d.is_valid()) { world_2d->_remove_viewport(this); + } RenderingServer::get_singleton()->viewport_set_scenario(viewport, RID()); RenderingServer::get_singleton()->viewport_remove_canvas(viewport, current_canvas); @@ -548,7 +528,6 @@ void Viewport::_notification(int p_what) { } break; case NOTIFICATION_INTERNAL_PROCESS: { - if (gui.tooltip_timer >= 0) { gui.tooltip_timer -= get_process_delta_time(); if (gui.tooltip_timer < 0) { @@ -558,9 +537,7 @@ void Viewport::_notification(int p_what) { } break; case NOTIFICATION_INTERNAL_PHYSICS_PROCESS: { - if (get_tree()->is_debugging_collisions_hint() && contact_2d_debug.is_valid()) { - RenderingServer::get_singleton()->canvas_item_clear(contact_2d_debug); RenderingServer::get_singleton()->canvas_item_set_draw_index(contact_2d_debug, 0xFFFFF); //very high index @@ -569,13 +546,11 @@ void Viewport::_notification(int p_what) { Color ccol = get_tree()->get_debug_collision_contact_color(); for (int i = 0; i < point_count; i++) { - RenderingServer::get_singleton()->canvas_item_add_rect(contact_2d_debug, Rect2(points[i] - Vector2(2, 2), Vector2(5, 5)), ccol); } } if (get_tree()->is_debugging_collisions_hint() && contact_3d_debug_multimesh.is_valid()) { - Vector<Vector3> points = PhysicsServer3D::get_singleton()->space_get_contacts(find_world_3d()->get_space()); int point_count = PhysicsServer3D::get_singleton()->space_get_contact_count(find_world_3d()->get_space()); @@ -583,7 +558,6 @@ void Viewport::_notification(int p_what) { } if (physics_object_picking && (to_screen_rect == Rect2i() || Input::get_singleton()->get_mouse_mode() != Input::MOUSE_MODE_CAPTURED)) { - #ifndef _3D_DISABLED Vector2 last_pos(1e20, 1e20); CollisionObject3D *last_object = nullptr; @@ -621,7 +595,6 @@ void Viewport::_notification(int p_what) { } while (physics_picking_events.size()) { - Ref<InputEvent> ev = physics_picking_events.front()->get(); physics_picking_events.pop_front(); @@ -631,7 +604,6 @@ void Viewport::_notification(int p_what) { Ref<InputEventMouseMotion> mm = ev; if (mm.is_valid()) { - pos = mm->get_position(); is_mouse = true; @@ -647,7 +619,6 @@ void Viewport::_notification(int p_what) { Ref<InputEventMouseButton> mb = ev; if (mb.is_valid()) { - pos = mb->get_position(); is_mouse = true; @@ -715,7 +686,6 @@ void Viewport::_notification(int p_what) { int rc = ss2d->intersect_point_on_canvas(point, canvas_layer_id, res, 64, Set<RID>(), 0xFFFFFFFF, true, true, true); for (int i = 0; i < rc; i++) { - if (res[i].collider_id.is_valid() && res[i].collider) { CollisionObject2D *co = Object::cast_to<CollisionObject2D>(res[i].collider); if (co) { @@ -750,7 +720,6 @@ void Viewport::_notification(int p_what) { if (E->get() != frame) { Object *o = ObjectDB::get_instance(E->key()); if (o) { - CollisionObject2D *co = Object::cast_to<CollisionObject2D>(o); if (co) { co->_mouse_exit(); @@ -771,7 +740,6 @@ void Viewport::_notification(int p_what) { bool captured = false; if (physics_object_capture.is_valid()) { - CollisionObject3D *co = Object::cast_to<CollisionObject3D>(ObjectDB::get_instance(physics_object_capture)); if (co && camera) { _collision_object_input_event(co, camera, ev, Vector3(), Vector3(), 0); @@ -788,7 +756,6 @@ void Viewport::_notification(int p_what) { if (captured) { //none } else if (pos == last_pos) { - if (last_id.is_valid()) { if (ObjectDB::get_instance(last_id) && last_object) { //good, exists @@ -799,22 +766,17 @@ void Viewport::_notification(int p_what) { } } } else { - if (camera) { - Vector3 from = camera->project_ray_origin(pos); Vector3 dir = camera->project_ray_normal(pos); PhysicsDirectSpaceState3D *space = PhysicsServer3D::get_singleton()->space_get_direct_state(find_world_3d()->get_space()); if (space) { - bool col = space->intersect_ray(from, from + dir * 10000, result, Set<RID>(), 0xFFFFFFFF, true, true, true); ObjectID new_collider; if (col) { - CollisionObject3D *co = Object::cast_to<CollisionObject3D>(result.collider); if (co) { - _collision_object_input_event(co, camera, ev, result.position, result.normal, result.shape); last_object = co; last_id = result.collider_id; @@ -826,9 +788,7 @@ void Viewport::_notification(int p_what) { } if (is_mouse && new_collider != physics_object_over) { - if (physics_object_over.is_valid()) { - CollisionObject3D *co = Object::cast_to<CollisionObject3D>(ObjectDB::get_instance(physics_object_over)); if (co) { co->_mouse_exit(); @@ -836,7 +796,6 @@ void Viewport::_notification(int p_what) { } if (new_collider.is_valid()) { - CollisionObject3D *co = Object::cast_to<CollisionObject3D>(ObjectDB::get_instance(new_collider)); if (co) { co->_mouse_enter(); @@ -857,7 +816,6 @@ void Viewport::_notification(int p_what) { } break; case NOTIFICATION_WM_MOUSE_EXIT: case NOTIFICATION_WM_FOCUS_OUT: { - _drop_physics_mouseover(); if (gui.mouse_focus && !gui.forced_mouse_focus) { @@ -868,21 +826,21 @@ void Viewport::_notification(int p_what) { } RID Viewport::get_viewport_rid() const { - return viewport; } void Viewport::update_canvas_items() { - if (!is_inside_tree()) + if (!is_inside_tree()) { return; + } _update_canvas_items(this); } void Viewport::_set_size(const Size2i &p_size, const Size2i &p_size_2d_override, const Rect2i &p_to_screen_rect, const Transform2D &p_stretch_transform, bool p_allocated) { - - if (size == p_size && size_allocated == p_allocated && stretch_transform == p_stretch_transform && p_size_2d_override == size_2d_override && to_screen_rect != p_to_screen_rect) + if (size == p_size && size_allocated == p_allocated && stretch_transform == p_stretch_transform && p_size_2d_override == size_2d_override && to_screen_rect != p_to_screen_rect) { return; + } size = p_size; size_allocated = p_allocated; @@ -905,15 +863,16 @@ void Viewport::_set_size(const Size2i &p_size, const Size2i &p_size_2d_override, Size2i Viewport::_get_size() const { return size; } + Size2i Viewport::_get_size_2d_override() const { return size_2d_override; } + bool Viewport::_is_size_allocated() const { return size_allocated; } Rect2 Viewport::get_visible_rect() const { - Rect2 r; if (size == Size2()) { @@ -933,7 +892,6 @@ void Viewport::_update_listener() { } void Viewport::_update_listener_2d() { - /* if (is_inside_tree() && audio_listener && (!get_parent() || (Object::cast_to<Control>(get_parent()) && Object::cast_to<Control>(get_parent())->is_visible_in_tree()))) SpatialSound2DServer::get_singleton()->listener_set_space(internal_listener_2d, find_world_2d()->get_sound_space()); @@ -943,23 +901,22 @@ void Viewport::_update_listener_2d() { } void Viewport::set_as_audio_listener(bool p_enable) { - - if (p_enable == audio_listener) + if (p_enable == audio_listener) { return; + } audio_listener = p_enable; _update_listener(); } bool Viewport::is_audio_listener() const { - return audio_listener; } void Viewport::set_as_audio_listener_2d(bool p_enable) { - - if (p_enable == audio_listener_2d) + if (p_enable == audio_listener_2d) { return; + } audio_listener_2d = p_enable; @@ -967,7 +924,6 @@ void Viewport::set_as_audio_listener_2d(bool p_enable) { } bool Viewport::is_audio_listener_2d() const { - return audio_listener_2d; } @@ -1004,7 +960,6 @@ Transform2D Viewport::get_canvas_transform_override() const { } void Viewport::set_canvas_transform(const Transform2D &p_transform) { - canvas_transform = p_transform; if (!override_canvas_transform) { @@ -1013,26 +968,22 @@ void Viewport::set_canvas_transform(const Transform2D &p_transform) { } Transform2D Viewport::get_canvas_transform() const { - return canvas_transform; } void Viewport::_update_global_transform() { - Transform2D sxform = stretch_transform * global_canvas_transform; RenderingServer::get_singleton()->viewport_set_global_canvas_transform(viewport, sxform); } void Viewport::set_global_canvas_transform(const Transform2D &p_transform) { - global_canvas_transform = p_transform; _update_global_transform(); } Transform2D Viewport::get_global_canvas_transform() const { - return global_canvas_transform; } @@ -1040,11 +991,11 @@ void Viewport::_listener_transform_changed_notify() { } void Viewport::_listener_set(Listener3D *p_listener) { - #ifndef _3D_DISABLED - if (listener == p_listener) + if (listener == p_listener) { return; + } listener = p_listener; @@ -1054,13 +1005,11 @@ void Viewport::_listener_set(Listener3D *p_listener) { } bool Viewport::_listener_add(Listener3D *p_listener) { - listeners.insert(p_listener); return listeners.size() == 1; } void Viewport::_listener_remove(Listener3D *p_listener) { - listeners.erase(p_listener); if (listener == p_listener) { listener = nullptr; @@ -1069,16 +1018,17 @@ void Viewport::_listener_remove(Listener3D *p_listener) { #ifndef _3D_DISABLED void Viewport::_listener_make_next_current(Listener3D *p_exclude) { - if (listeners.size() > 0) { for (Set<Listener3D *>::Element *E = listeners.front(); E; E = E->next()) { - - if (p_exclude == E->get()) + if (p_exclude == E->get()) { continue; - if (!E->get()->is_inside_tree()) + } + if (!E->get()->is_inside_tree()) { continue; - if (listener != nullptr) + } + if (listener != nullptr) { return; + } E->get()->make_current(); } @@ -1093,17 +1043,16 @@ void Viewport::_listener_make_next_current(Listener3D *p_exclude) { #endif void Viewport::_camera_transform_changed_notify() { - #ifndef _3D_DISABLED #endif } void Viewport::_camera_set(Camera3D *p_camera) { - #ifndef _3D_DISABLED - if (camera == p_camera) + if (camera == p_camera) { return; + } if (camera) { camera->notification(Camera3D::NOTIFICATION_LOST_CURRENT); @@ -1112,10 +1061,11 @@ void Viewport::_camera_set(Camera3D *p_camera) { camera = p_camera; if (!camera_override) { - if (camera) + if (camera) { RenderingServer::get_singleton()->viewport_attach_camera(viewport, camera->get_camera()); - else + } else { RenderingServer::get_singleton()->viewport_attach_camera(viewport, RID()); + } } if (camera) { @@ -1128,13 +1078,11 @@ void Viewport::_camera_set(Camera3D *p_camera) { } bool Viewport::_camera_add(Camera3D *p_camera) { - cameras.insert(p_camera); return cameras.size() == 1; } void Viewport::_camera_remove(Camera3D *p_camera) { - cameras.erase(p_camera); if (camera == p_camera) { camera->notification(Camera3D::NOTIFICATION_LOST_CURRENT); @@ -1144,15 +1092,16 @@ void Viewport::_camera_remove(Camera3D *p_camera) { #ifndef _3D_DISABLED void Viewport::_camera_make_next_current(Camera3D *p_exclude) { - for (Set<Camera3D *>::Element *E = cameras.front(); E; E = E->next()) { - - if (p_exclude == E->get()) + if (p_exclude == E->get()) { continue; - if (!E->get()->is_inside_tree()) + } + if (!E->get()->is_inside_tree()) { continue; - if (camera != nullptr) + } + if (camera != nullptr) { return; + } E->get()->make_current(); } @@ -1160,29 +1109,26 @@ void Viewport::_camera_make_next_current(Camera3D *p_exclude) { #endif void Viewport::_canvas_layer_add(CanvasLayer *p_canvas_layer) { - canvas_layers.insert(p_canvas_layer); } void Viewport::_canvas_layer_remove(CanvasLayer *p_canvas_layer) { - canvas_layers.erase(p_canvas_layer); } void Viewport::set_transparent_background(bool p_enable) { - transparent_bg = p_enable; RS::get_singleton()->viewport_set_transparent_background(viewport, p_enable); } bool Viewport::has_transparent_background() const { - return transparent_bg; } void Viewport::set_world_2d(const Ref<World2D> &p_world_2d) { - if (world_2d == p_world_2d) + if (world_2d == p_world_2d) { return; + } if (parent && parent->find_world_2d() == p_world_2d) { WARN_PRINT("Unable to use parent world_3d as world_2d"); @@ -1194,9 +1140,9 @@ void Viewport::set_world_2d(const Ref<World2D> &p_world_2d) { RenderingServer::get_singleton()->viewport_remove_canvas(viewport, current_canvas); } - if (p_world_2d.is_valid()) + if (p_world_2d.is_valid()) { world_2d = p_world_2d; - else { + } else { WARN_PRINT("Invalid world_3d"); world_2d = Ref<World2D>(memnew(World2D)); } @@ -1211,21 +1157,20 @@ void Viewport::set_world_2d(const Ref<World2D> &p_world_2d) { } Ref<World2D> Viewport::find_world_2d() const { - - if (world_2d.is_valid()) + if (world_2d.is_valid()) { return world_2d; - else if (parent) + } else if (parent) { return parent->find_world_2d(); - else + } else { return Ref<World2D>(); + } } void Viewport::_propagate_enter_world(Node *p_node) { - if (p_node != this) { - - if (!p_node->is_inside_tree()) //may not have entered scene yet + if (!p_node->is_inside_tree()) { //may not have entered scene yet return; + } #ifndef _3D_DISABLED if (Object::cast_to<Node3D>(p_node) || Object::cast_to<WorldEnvironment>(p_node)) { @@ -1234,9 +1179,9 @@ void Viewport::_propagate_enter_world(Node *p_node) { #endif Viewport *v = Object::cast_to<Viewport>(p_node); if (v) { - - if (v->world_3d.is_valid() || v->own_world_3d.is_valid()) + if (v->world_3d.is_valid() || v->own_world_3d.is_valid()) { return; + } } #ifndef _3D_DISABLED } @@ -1244,28 +1189,26 @@ void Viewport::_propagate_enter_world(Node *p_node) { } for (int i = 0; i < p_node->get_child_count(); i++) { - _propagate_enter_world(p_node->get_child(i)); } } void Viewport::_propagate_viewport_notification(Node *p_node, int p_what) { - p_node->notification(p_what); for (int i = 0; i < p_node->get_child_count(); i++) { Node *c = p_node->get_child(i); - if (Object::cast_to<Viewport>(c)) + if (Object::cast_to<Viewport>(c)) { continue; + } _propagate_viewport_notification(c, p_what); } } void Viewport::_propagate_exit_world(Node *p_node) { - if (p_node != this) { - - if (!p_node->is_inside_tree()) //may have exited scene already + if (!p_node->is_inside_tree()) { //may have exited scene already return; + } #ifndef _3D_DISABLED if (Object::cast_to<Node3D>(p_node) || Object::cast_to<WorldEnvironment>(p_node)) { @@ -1274,9 +1217,9 @@ void Viewport::_propagate_exit_world(Node *p_node) { #endif Viewport *v = Object::cast_to<Viewport>(p_node); if (v) { - - if (v->world_3d.is_valid() || v->own_world_3d.is_valid()) + if (v->world_3d.is_valid() || v->own_world_3d.is_valid()) { return; + } } #ifndef _3D_DISABLED } @@ -1284,18 +1227,18 @@ void Viewport::_propagate_exit_world(Node *p_node) { } for (int i = 0; i < p_node->get_child_count(); i++) { - _propagate_exit_world(p_node->get_child(i)); } } void Viewport::set_world_3d(const Ref<World3D> &p_world_3d) { - - if (world_3d == p_world_3d) + if (world_3d == p_world_3d) { return; + } - if (is_inside_tree()) + if (is_inside_tree()) { _propagate_exit_world(this); + } if (own_world_3d.is_valid() && world_3d.is_valid()) { world_3d->disconnect(CoreStringNames::get_singleton()->changed, callable_mp(this, &Viewport::_own_world_3d_changed)); @@ -1312,8 +1255,9 @@ void Viewport::set_world_3d(const Ref<World3D> &p_world_3d) { } } - if (is_inside_tree()) + if (is_inside_tree()) { _propagate_enter_world(this); + } if (is_inside_tree()) { RenderingServer::get_singleton()->viewport_set_scenario(viewport, find_world_3d()->get_scenario()); @@ -1323,29 +1267,26 @@ void Viewport::set_world_3d(const Ref<World3D> &p_world_3d) { } Ref<World3D> Viewport::get_world_3d() const { - return world_3d; } Ref<World2D> Viewport::get_world_2d() const { - return world_2d; } Ref<World3D> Viewport::find_world_3d() const { - - if (own_world_3d.is_valid()) + if (own_world_3d.is_valid()) { return own_world_3d; - else if (world_3d.is_valid()) + } else if (world_3d.is_valid()) { return world_3d; - else if (parent) + } else if (parent) { return parent->find_world_3d(); - else + } else { return Ref<World3D>(); + } } Listener3D *Viewport::get_listener() const { - return listener; } @@ -1354,7 +1295,6 @@ Camera3D *Viewport::get_camera() const { } void Viewport::enable_camera_override(bool p_enable) { - #ifndef _3D_DISABLED if (p_enable == camera_override) { return; @@ -1399,8 +1339,9 @@ Transform Viewport::get_camera_override_transform() const { void Viewport::set_camera_override_perspective(float p_fovy_degrees, float p_z_near, float p_z_far) { if (camera_override) { if (camera_override.fov == p_fovy_degrees && camera_override.z_near == p_z_near && - camera_override.z_far == p_z_far && camera_override.projection == CameraOverrideData::PROJECTION_PERSPECTIVE) + camera_override.z_far == p_z_far && camera_override.projection == CameraOverrideData::PROJECTION_PERSPECTIVE) { return; + } camera_override.fov = p_fovy_degrees; camera_override.z_near = p_z_near; @@ -1414,8 +1355,9 @@ void Viewport::set_camera_override_perspective(float p_fovy_degrees, float p_z_n void Viewport::set_camera_override_orthogonal(float p_size, float p_z_near, float p_z_far) { if (camera_override) { if (camera_override.size == p_size && camera_override.z_near == p_z_near && - camera_override.z_far == p_z_far && camera_override.projection == CameraOverrideData::PROJECTION_ORTHOGONAL) + camera_override.z_far == p_z_far && camera_override.projection == CameraOverrideData::PROJECTION_ORTHOGONAL) { return; + } camera_override.size = p_size; camera_override.z_near = p_z_near; @@ -1427,16 +1369,15 @@ void Viewport::set_camera_override_orthogonal(float p_size, float p_z_near, floa } Transform2D Viewport::get_final_transform() const { - return stretch_transform * global_canvas_transform; } void Viewport::_update_canvas_items(Node *p_node) { if (p_node != this) { - Viewport *vp = Object::cast_to<Viewport>(p_node); - if (vp) + if (vp) { return; + } CanvasItem *ci = Object::cast_to<CanvasItem>(p_node); if (ci) { @@ -1452,49 +1393,45 @@ void Viewport::_update_canvas_items(Node *p_node) { } Ref<ViewportTexture> Viewport::get_texture() const { - return default_texture; } void Viewport::set_shadow_atlas_size(int p_size) { - - if (shadow_atlas_size == p_size) + if (shadow_atlas_size == p_size) { return; + } shadow_atlas_size = p_size; RS::get_singleton()->viewport_set_shadow_atlas_size(viewport, p_size); } int Viewport::get_shadow_atlas_size() const { - return shadow_atlas_size; } void Viewport::set_shadow_atlas_quadrant_subdiv(int p_quadrant, ShadowAtlasQuadrantSubdiv p_subdiv) { - ERR_FAIL_INDEX(p_quadrant, 4); ERR_FAIL_INDEX(p_subdiv, SHADOW_ATLAS_QUADRANT_SUBDIV_MAX); - if (shadow_atlas_quadrant_subdiv[p_quadrant] == p_subdiv) + if (shadow_atlas_quadrant_subdiv[p_quadrant] == p_subdiv) { return; + } shadow_atlas_quadrant_subdiv[p_quadrant] = p_subdiv; static const int subdiv[SHADOW_ATLAS_QUADRANT_SUBDIV_MAX] = { 0, 1, 4, 16, 64, 256, 1024 }; RS::get_singleton()->viewport_set_shadow_atlas_quadrant_subdivision(viewport, p_quadrant, subdiv[p_subdiv]); } -Viewport::ShadowAtlasQuadrantSubdiv Viewport::get_shadow_atlas_quadrant_subdiv(int p_quadrant) const { +Viewport::ShadowAtlasQuadrantSubdiv Viewport::get_shadow_atlas_quadrant_subdiv(int p_quadrant) const { ERR_FAIL_INDEX_V(p_quadrant, 4, SHADOW_ATLAS_QUADRANT_SUBDIV_DISABLED); return shadow_atlas_quadrant_subdiv[p_quadrant]; } Transform2D Viewport::_get_input_pre_xform() const { - Transform2D pre_xf; if (to_screen_rect.size.x != 0 && to_screen_rect.size.y != 0) { - pre_xf.elements[2] = -to_screen_rect.position; pre_xf.scale(size / to_screen_rect.size); } @@ -1503,27 +1440,24 @@ Transform2D Viewport::_get_input_pre_xform() const { } Ref<InputEvent> Viewport::_make_input_local(const Ref<InputEvent> &ev) { - Transform2D ai = get_final_transform().affine_inverse() * _get_input_pre_xform(); return ev->xformed_by(ai); } Vector2 Viewport::get_mouse_position() const { - return gui.last_mouse_pos; } void Viewport::warp_mouse(const Vector2 &p_pos) { - Vector2 gpos = (get_final_transform().affine_inverse() * _get_input_pre_xform()).affine_inverse().xform(p_pos); Input::get_singleton()->warp_mouse_position(gpos); } void Viewport::_gui_sort_roots() { - - if (!gui.roots_order_dirty) + if (!gui.roots_order_dirty) { return; + } gui.roots.sort_custom<Control::CComparator>(); @@ -1531,7 +1465,6 @@ void Viewport::_gui_sort_roots() { } void Viewport::_gui_cancel_tooltip() { - gui.tooltip = nullptr; gui.tooltip_timer = -1; if (gui.tooltip_popup) { @@ -1542,26 +1475,27 @@ void Viewport::_gui_cancel_tooltip() { } String Viewport::_gui_get_tooltip(Control *p_control, const Vector2 &p_pos, Control **r_which) { - Vector2 pos = p_pos; String tooltip; while (p_control) { - tooltip = p_control->get_tooltip(pos); if (r_which) { *r_which = p_control; } - if (tooltip != String()) + if (tooltip != String()) { break; + } pos = p_control->get_transform().xform(pos); - if (p_control->data.mouse_filter == Control::MOUSE_FILTER_STOP) + if (p_control->data.mouse_filter == Control::MOUSE_FILTER_STOP) { break; - if (p_control->is_set_as_toplevel()) + } + if (p_control->is_set_as_toplevel()) { break; + } p_control = p_control->get_parent_control(); } @@ -1570,7 +1504,6 @@ String Viewport::_gui_get_tooltip(Control *p_control, const Vector2 &p_pos, Cont } void Viewport::_gui_show_tooltip() { - if (!gui.tooltip) { return; } @@ -1578,8 +1511,9 @@ void Viewport::_gui_show_tooltip() { Control *which = nullptr; String tooltip = _gui_get_tooltip(gui.tooltip, gui.tooltip->get_global_transform().xform_inv(gui.tooltip_pos), &which); tooltip = tooltip.strip_edges(); - if (tooltip.length() == 0) + if (tooltip.length() == 0) { return; // bye + } if (gui.tooltip_popup) { memdelete(gui.tooltip_popup); @@ -1621,15 +1555,17 @@ void Viewport::_gui_show_tooltip() { Rect2i vr = gui.tooltip_popup->get_parent_visible_window()->get_usable_parent_rect(); - if (r.size.x + r.position.x > vr.size.x + vr.position.x) + if (r.size.x + r.position.x > vr.size.x + vr.position.x) { r.position.x = vr.position.x + vr.size.x - r.size.x; - else if (r.position.x < vr.position.x) + } else if (r.position.x < vr.position.x) { r.position.x = vr.position.x; + } - if (r.size.y + r.position.y > vr.size.y + vr.position.y) + if (r.size.y + r.position.y > vr.size.y + vr.position.y) { r.position.y = vr.position.y + vr.size.y - r.size.y; - else if (r.position.y < vr.position.y) + } else if (r.position.y < vr.position.y) { r.position.y = vr.position.y; + } gui.tooltip_popup->set_position(r.position); gui.tooltip_popup->set_size(r.size); @@ -1639,7 +1575,6 @@ void Viewport::_gui_show_tooltip() { } void Viewport::_gui_call_input(Control *p_control, const Ref<InputEvent> &p_input) { - //_block(); Ref<InputEvent> ev = p_input; @@ -1659,32 +1594,36 @@ void Viewport::_gui_call_input(Control *p_control, const Ref<InputEvent> &p_inpu CanvasItem *ci = p_control; while (ci) { - Control *control = Object::cast_to<Control>(ci); if (control) { - if (control->data.mouse_filter != Control::MOUSE_FILTER_IGNORE) { control->emit_signal(SceneStringNames::get_singleton()->gui_input, ev); //signal should be first, so it's possible to override an event (and then accept it) } - if (gui.key_event_accepted) + if (gui.key_event_accepted) { break; - if (!control->is_inside_tree()) + } + if (!control->is_inside_tree()) { break; + } if (control->data.mouse_filter != Control::MOUSE_FILTER_IGNORE) { control->call_multilevel(SceneStringNames::get_singleton()->_gui_input, ev); } - if (!control->is_inside_tree() || control->is_set_as_toplevel()) + if (!control->is_inside_tree() || control->is_set_as_toplevel()) { break; - if (gui.key_event_accepted) + } + if (gui.key_event_accepted) { break; - if (!cant_stop_me_now && control->data.mouse_filter == Control::MOUSE_FILTER_STOP && ismouse) + } + if (!cant_stop_me_now && control->data.mouse_filter == Control::MOUSE_FILTER_STOP && ismouse) { break; + } } - if (ci->is_set_as_toplevel()) + if (ci->is_set_as_toplevel()) { break; + } ev = ev->xformed_by(ci->get_transform()); //transform event upwards ci = ci->get_parent_item(); @@ -1694,64 +1633,67 @@ void Viewport::_gui_call_input(Control *p_control, const Ref<InputEvent> &p_inpu } void Viewport::_gui_call_notification(Control *p_control, int p_what) { - CanvasItem *ci = p_control; while (ci) { - Control *control = Object::cast_to<Control>(ci); if (control) { - if (control->data.mouse_filter != Control::MOUSE_FILTER_IGNORE) { control->notification(p_what); } - if (!control->is_inside_tree()) + if (!control->is_inside_tree()) { break; + } - if (!control->is_inside_tree() || control->is_set_as_toplevel()) + if (!control->is_inside_tree() || control->is_set_as_toplevel()) { break; - if (control->data.mouse_filter == Control::MOUSE_FILTER_STOP) + } + if (control->data.mouse_filter == Control::MOUSE_FILTER_STOP) { break; + } } - if (ci->is_set_as_toplevel()) + if (ci->is_set_as_toplevel()) { break; + } ci = ci->get_parent_item(); } //_unblock(); } -Control *Viewport::_gui_find_control(const Point2 &p_global) { +Control *Viewport::_gui_find_control(const Point2 &p_global) { //aca va subwindows _gui_sort_roots(); for (List<Control *>::Element *E = gui.roots.back(); E; E = E->prev()) { - Control *sw = E->get(); - if (!sw->is_visible_in_tree()) + if (!sw->is_visible_in_tree()) { continue; + } Transform2D xform; CanvasItem *pci = sw->get_parent_item(); - if (pci) + if (pci) { xform = pci->get_global_transform_with_canvas(); - else + } else { xform = sw->get_canvas_transform(); + } Control *ret = _gui_find_control_at_pos(sw, p_global, xform, gui.focus_inv_xform); - if (ret) + if (ret) { return ret; + } } return nullptr; } Control *Viewport::_gui_find_control_at_pos(CanvasItem *p_node, const Point2 &p_global, const Transform2D &p_xform, Transform2D &r_inv_xform) { - - if (Object::cast_to<Viewport>(p_node)) + if (Object::cast_to<Viewport>(p_node)) { return nullptr; + } if (!p_node->is_visible()) { //return _find_next_visible_control_at_pos(p_node,p_global,r_inv_xform); @@ -1760,27 +1702,29 @@ Control *Viewport::_gui_find_control_at_pos(CanvasItem *p_node, const Point2 &p_ Transform2D matrix = p_xform * p_node->get_transform(); // matrix.basis_determinant() == 0.0f implies that node does not exist on scene - if (matrix.basis_determinant() == 0.0f) + if (matrix.basis_determinant() == 0.0f) { return nullptr; + } Control *c = Object::cast_to<Control>(p_node); if (!c || !c->clips_input() || c->has_point(matrix.affine_inverse().xform(p_global))) { - for (int i = p_node->get_child_count() - 1; i >= 0; i--) { - CanvasItem *ci = Object::cast_to<CanvasItem>(p_node->get_child(i)); - if (!ci || ci->is_set_as_toplevel()) + if (!ci || ci->is_set_as_toplevel()) { continue; + } Control *ret = _gui_find_control_at_pos(ci, p_global, matrix, r_inv_xform); - if (ret) + if (ret) { return ret; + } } } - if (!c) + if (!c) { return nullptr; + } matrix.affine_invert(); @@ -1788,19 +1732,17 @@ Control *Viewport::_gui_find_control_at_pos(CanvasItem *p_node, const Point2 &p_ if (c->data.mouse_filter != Control::MOUSE_FILTER_IGNORE && c->has_point(matrix.xform(p_global)) && (!gui.drag_preview || (c != gui.drag_preview && !gui.drag_preview->is_a_parent_of(c)))) { r_inv_xform = matrix; return c; - } else + } else { return nullptr; + } } bool Viewport::_gui_drop(Control *p_at_control, Point2 p_at_pos, bool p_just_check) { - { //attempt grab, try parent controls too CanvasItem *ci = p_at_control; while (ci) { - Control *control = Object::cast_to<Control>(ci); if (control) { - if (control->can_drop_data(p_at_pos, gui.drag_data)) { if (!p_just_check) { control->drop_data(p_at_pos, gui.drag_data); @@ -1809,14 +1751,16 @@ bool Viewport::_gui_drop(Control *p_at_control, Point2 p_at_pos, bool p_just_che return true; } - if (control->data.mouse_filter == Control::MOUSE_FILTER_STOP) + if (control->data.mouse_filter == Control::MOUSE_FILTER_STOP) { break; + } } p_at_pos = ci->get_transform().xform(p_at_pos); - if (ci->is_set_as_toplevel()) + if (ci->is_set_as_toplevel()) { break; + } ci = ci->get_parent_item(); } @@ -1826,7 +1770,6 @@ bool Viewport::_gui_drop(Control *p_at_control, Point2 p_at_pos, bool p_just_che } void Viewport::_gui_input_event(Ref<InputEvent> p_event) { - ERR_FAIL_COND(p_event.is_null()); //? @@ -1839,19 +1782,15 @@ void Viewport::_gui_input_event(Ref<InputEvent> p_event) { Ref<InputEventMouseButton> mb = p_event; if (mb.is_valid()) { - gui.key_event_accepted = false; Point2 mpos = mb->get_position(); if (mb->is_pressed()) { - Size2 pos = mpos; if (gui.mouse_focus_mask) { - //do not steal mouse focus and stuff while a focus mask exists gui.mouse_focus_mask |= 1 << (mb->get_button_index() - 1); //add the button to the mask } else { - bool is_handled = false; if (is_handled) { @@ -1892,7 +1831,6 @@ void Viewport::_gui_input_event(Ref<InputEvent> p_event) { #ifdef DEBUG_ENABLED if (EngineDebugger::get_singleton() && gui.mouse_focus) { - Array arr; arr.push_back(gui.mouse_focus->get_path()); arr.push_back(gui.mouse_focus->get_class()); @@ -1903,7 +1841,6 @@ void Viewport::_gui_input_event(Ref<InputEvent> p_event) { if (mb->get_button_index() == BUTTON_LEFT) { //assign focus CanvasItem *ci = gui.mouse_focus; while (ci) { - Control *control = Object::cast_to<Control>(ci); if (control) { if (control->get_focus_mode() != Control::FOCUS_NONE) { @@ -1913,12 +1850,14 @@ void Viewport::_gui_input_event(Ref<InputEvent> p_event) { break; } - if (control->data.mouse_filter == Control::MOUSE_FILTER_STOP) + if (control->data.mouse_filter == Control::MOUSE_FILTER_STOP) { break; + } } - if (ci->is_set_as_toplevel()) + if (ci->is_set_as_toplevel()) { break; + } ci = ci->get_parent_item(); } @@ -1931,7 +1870,6 @@ void Viewport::_gui_input_event(Ref<InputEvent> p_event) { set_input_as_handled(); if (gui.drag_data.get_type() != Variant::NIL && mb->get_button_index() == BUTTON_LEFT) { - //alternate drop use (when using force_drag(), as proposed by #5342 if (gui.mouse_focus) { _gui_drop(gui.mouse_focus, pos, false); @@ -1952,9 +1890,7 @@ void Viewport::_gui_input_event(Ref<InputEvent> p_event) { //gui.tooltip_popup->hide(); } else { - if (gui.drag_data.get_type() != Variant::NIL && mb->get_button_index() == BUTTON_LEFT) { - if (gui.drag_mouse_over) { _gui_drop(gui.drag_mouse_over, gui.drag_mouse_over_pos, false); } @@ -2009,7 +1945,6 @@ void Viewport::_gui_input_event(Ref<InputEvent> p_event) { Ref<InputEventMouseMotion> mm = p_event; if (mm.is_valid()) { - gui.key_event_accepted = false; Point2 mpos = mm->get_position(); @@ -2019,22 +1954,17 @@ void Viewport::_gui_input_event(Ref<InputEvent> p_event) { // D&D if (!gui.drag_attempted && gui.mouse_focus && mm->get_button_mask() & BUTTON_MASK_LEFT) { - gui.drag_accum += mm->get_relative(); float len = gui.drag_accum.length(); if (len > 10) { - { //attempt grab, try parent controls too CanvasItem *ci = gui.mouse_focus; while (ci) { - Control *control = Object::cast_to<Control>(ci); if (control) { - gui.dragging = true; gui.drag_data = control->get_drag_data(control->get_global_transform_with_canvas().affine_inverse().xform(mpos) - gui.drag_accum); if (gui.drag_data.get_type() != Variant::NIL) { - gui.mouse_focus = nullptr; gui.forced_mouse_focus = false; gui.mouse_focus_mask = 0; @@ -2048,12 +1978,14 @@ void Viewport::_gui_input_event(Ref<InputEvent> p_event) { gui.dragging = false; } - if (control->data.mouse_filter == Control::MOUSE_FILTER_STOP) + if (control->data.mouse_filter == Control::MOUSE_FILTER_STOP) { break; + } } - if (ci->is_set_as_toplevel()) + if (ci->is_set_as_toplevel()) { break; + } ci = ci->get_parent_item(); } @@ -2061,7 +1993,6 @@ void Viewport::_gui_input_event(Ref<InputEvent> p_event) { gui.drag_attempted = true; if (gui.drag_data.get_type() != Variant::NIL) { - _propagate_viewport_notification(this, NOTIFICATION_DRAG_BEGIN); } } @@ -2072,12 +2003,10 @@ void Viewport::_gui_input_event(Ref<InputEvent> p_event) { //recompute focus_inv_xform again here } else { - over = _gui_find_control(mpos); } if (over != gui.mouse_over) { - if (gui.mouse_over) { _gui_call_notification(gui.mouse_over, Control::NOTIFICATION_MOUSE_EXIT); } @@ -2094,7 +2023,6 @@ void Viewport::_gui_input_event(Ref<InputEvent> p_event) { DisplayServer::CursorShape ds_cursor_shape = (DisplayServer::CursorShape)Input::get_singleton()->get_default_cursor_shape(); if (over) { - Transform2D localizer = over->get_global_transform_with_canvas().affine_inverse(); Size2 pos = localizer.xform(mpos); Vector2 speed = localizer.basis_xform(mm->get_speed()); @@ -2117,14 +2045,13 @@ void Viewport::_gui_input_event(Ref<InputEvent> p_event) { if (can_tooltip && gui.tooltip) { String tooltip = _gui_get_tooltip(over, gui.tooltip->get_global_transform().xform_inv(mpos)); - if (tooltip.length() == 0) + if (tooltip.length() == 0) { _gui_cancel_tooltip(); - else if (gui.tooltip_label) { + } else if (gui.tooltip_label) { if (tooltip == gui.tooltip_label->get_text()) { is_tooltip_shown = true; } } else { - Variant t = gui.tooltip_popup->call("get_tooltip_text"); if (t.get_type() == Variant::STRING) { @@ -2135,12 +2062,12 @@ void Viewport::_gui_input_event(Ref<InputEvent> p_event) { is_tooltip_shown = true; //well, nothing to compare against, likely using custom control, so if it changes there is nothing we can do } } - } else + } else { _gui_cancel_tooltip(); + } } if (can_tooltip && !is_tooltip_shown) { - gui.tooltip = over; gui.tooltip_pos = over->get_screen_transform().xform(pos); //(parent_xform * get_transform()).affine_inverse().xform(pos); gui.tooltip_timer = gui.tooltip_delay; @@ -2158,12 +2085,15 @@ void Viewport::_gui_input_event(Ref<InputEvent> p_event) { while (c) { cursor_shape = c->get_cursor_shape(cpos); cpos = c->get_transform().xform(cpos); - if (cursor_shape != Control::CURSOR_ARROW) + if (cursor_shape != Control::CURSOR_ARROW) { break; - if (c->data.mouse_filter == Control::MOUSE_FILTER_STOP) + } + if (c->data.mouse_filter == Control::MOUSE_FILTER_STOP) { break; - if (c->is_set_as_toplevel()) + } + if (c->is_set_as_toplevel()) { break; + } c = c->get_parent_control(); } } @@ -2263,7 +2193,6 @@ void Viewport::_gui_input_event(Ref<InputEvent> p_event) { gui.drag_mouse_over_pos = localizer.xform(viewport_pos); if (mm->get_button_mask() & BUTTON_MASK_LEFT) { - bool can_drop = _gui_drop(gui.drag_mouse_over, gui.drag_mouse_over_pos, true); if (!can_drop) { @@ -2284,15 +2213,11 @@ void Viewport::_gui_input_event(Ref<InputEvent> p_event) { Ref<InputEventScreenTouch> touch_event = p_event; if (touch_event.is_valid()) { - Size2 pos = touch_event->get_position(); if (touch_event->is_pressed()) { - Control *over = _gui_find_control(pos); if (over) { - if (over->can_process()) { - touch_event = touch_event->xformed_by(Transform2D()); //make a copy if (over == gui.mouse_focus) { pos = gui.focus_inv_xform.xform(pos); @@ -2306,9 +2231,7 @@ void Viewport::_gui_input_event(Ref<InputEvent> p_event) { return; } } else if (touch_event->get_index() == 0 && gui.last_mouse_focus) { - if (gui.last_mouse_focus->can_process()) { - touch_event = touch_event->xformed_by(Transform2D()); //make a copy touch_event->set_position(gui.focus_inv_xform.xform(pos)); @@ -2321,7 +2244,6 @@ void Viewport::_gui_input_event(Ref<InputEvent> p_event) { Ref<InputEventGesture> gesture_event = p_event; if (gesture_event.is_valid()) { - gui.key_event_accepted = false; _gui_cancel_tooltip(); @@ -2330,9 +2252,7 @@ void Viewport::_gui_input_event(Ref<InputEvent> p_event) { Control *over = _gui_find_control(pos); if (over) { - if (over->can_process()) { - gesture_event = gesture_event->xformed_by(Transform2D()); //make a copy if (over == gui.mouse_focus) { pos = gui.focus_inv_xform.xform(pos); @@ -2349,15 +2269,12 @@ void Viewport::_gui_input_event(Ref<InputEvent> p_event) { Ref<InputEventScreenDrag> drag_event = p_event; if (drag_event.is_valid()) { - Control *over = gui.mouse_focus; if (!over) { over = _gui_find_control(drag_event->get_position()); } if (over) { - if (over->can_process()) { - Transform2D localizer = over->get_global_transform_with_canvas().affine_inverse(); Size2 pos = localizer.xform(drag_event->get_position()); Vector2 speed = localizer.basis_xform(drag_event->get_speed()); @@ -2378,22 +2295,20 @@ void Viewport::_gui_input_event(Ref<InputEvent> p_event) { } if (mm.is_null() && mb.is_null() && p_event->is_action_type()) { - if (gui.key_focus && !gui.key_focus->is_visible_in_tree()) { gui.key_focus->release_focus(); } if (gui.key_focus) { - gui.key_event_accepted = false; if (gui.key_focus->can_process()) { gui.key_focus->call_multilevel(SceneStringNames::get_singleton()->_gui_input, p_event); - if (gui.key_focus) //maybe lost it + if (gui.key_focus) { //maybe lost it gui.key_focus->emit_signal(SceneStringNames::get_singleton()->gui_input, p_event); + } } if (gui.key_event_accepted) { - set_input_as_handled(); return; } @@ -2414,32 +2329,26 @@ void Viewport::_gui_input_event(Ref<InputEvent> p_event) { Input *input = Input::get_singleton(); if (p_event->is_action_pressed("ui_focus_next") && input->is_action_just_pressed("ui_focus_next")) { - next = from->find_next_valid_focus(); } if (p_event->is_action_pressed("ui_focus_prev") && input->is_action_just_pressed("ui_focus_prev")) { - next = from->find_prev_valid_focus(); } if (!mods && p_event->is_action_pressed("ui_up") && input->is_action_just_pressed("ui_up")) { - next = from->_get_focus_neighbour(MARGIN_TOP); } if (!mods && p_event->is_action_pressed("ui_left") && input->is_action_just_pressed("ui_left")) { - next = from->_get_focus_neighbour(MARGIN_LEFT); } if (!mods && p_event->is_action_pressed("ui_right") && input->is_action_just_pressed("ui_right")) { - next = from->_get_focus_neighbour(MARGIN_RIGHT); } if (!mods && p_event->is_action_pressed("ui_down") && input->is_action_just_pressed("ui_down")) { - next = from->_get_focus_neighbour(MARGIN_BOTTOM); } @@ -2452,7 +2361,6 @@ void Viewport::_gui_input_event(Ref<InputEvent> p_event) { } List<Control *>::Element *Viewport::_gui_add_root_control(Control *p_control) { - gui.roots_order_dirty = true; return gui.roots.push_back(p_control); } @@ -2462,7 +2370,6 @@ void Viewport::_gui_set_root_order_dirty() { } void Viewport::_gui_force_drag(Control *p_base, const Variant &p_data, Control *p_control) { - ERR_FAIL_COND_MSG(p_data.get_type() == Variant::NIL, "Drag data must be a value."); gui.dragging = true; @@ -2475,7 +2382,6 @@ void Viewport::_gui_force_drag(Control *p_base, const Variant &p_data, Control * } void Viewport::_gui_set_drag_preview(Control *p_base, Control *p_control) { - ERR_FAIL_NULL(p_control); ERR_FAIL_COND(!Object::cast_to<Control>((Object *)p_control)); ERR_FAIL_COND(p_control->is_inside_tree()); @@ -2493,35 +2399,35 @@ void Viewport::_gui_set_drag_preview(Control *p_base, Control *p_control) { } void Viewport::_gui_remove_root_control(List<Control *>::Element *RI) { - gui.roots.erase(RI); } void Viewport::_gui_unfocus_control(Control *p_control) { - if (gui.key_focus == p_control) { gui.key_focus->release_focus(); } } void Viewport::_gui_hid_control(Control *p_control) { - if (gui.mouse_focus == p_control) { _drop_mouse_focus(); } - if (gui.key_focus == p_control) + if (gui.key_focus == p_control) { _gui_remove_focus(); - if (gui.mouse_over == p_control) + } + if (gui.mouse_over == p_control) { gui.mouse_over = nullptr; - if (gui.drag_mouse_over == p_control) + } + if (gui.drag_mouse_over == p_control) { gui.drag_mouse_over = nullptr; - if (gui.tooltip == p_control) + } + if (gui.tooltip == p_control) { _gui_cancel_tooltip(); + } } void Viewport::_gui_remove_control(Control *p_control) { - if (gui.mouse_focus == p_control) { gui.mouse_focus = nullptr; gui.forced_mouse_focus = false; @@ -2530,18 +2436,21 @@ void Viewport::_gui_remove_control(Control *p_control) { if (gui.last_mouse_focus == p_control) { gui.last_mouse_focus = nullptr; } - if (gui.key_focus == p_control) + if (gui.key_focus == p_control) { gui.key_focus = nullptr; - if (gui.mouse_over == p_control) + } + if (gui.mouse_over == p_control) { gui.mouse_over = nullptr; - if (gui.drag_mouse_over == p_control) + } + if (gui.drag_mouse_over == p_control) { gui.drag_mouse_over = nullptr; - if (gui.tooltip == p_control) + } + if (gui.tooltip == p_control) { gui.tooltip = nullptr; + } } void Viewport::_gui_remove_focus() { - if (gui.key_focus) { Node *f = gui.key_focus; gui.key_focus = nullptr; @@ -2550,15 +2459,14 @@ void Viewport::_gui_remove_focus() { } bool Viewport::_gui_control_has_focus(const Control *p_control) { - return gui.key_focus == p_control; } void Viewport::_gui_control_grab_focus(Control *p_control) { - //no need for change - if (gui.key_focus && gui.key_focus == p_control) + if (gui.key_focus && gui.key_focus == p_control) { return; + } get_tree()->call_group_flags(SceneTree::GROUP_CALL_REALTIME, "_viewports", "_gui_remove_focus"); gui.key_focus = p_control; emit_signal("gui_focus_changed", p_control); @@ -2567,14 +2475,13 @@ void Viewport::_gui_control_grab_focus(Control *p_control) { } void Viewport::_gui_accept_event() { - gui.key_event_accepted = true; - if (is_inside_tree()) + if (is_inside_tree()) { set_input_as_handled(); + } } void Viewport::_drop_mouse_focus() { - Control *c = gui.mouse_focus; int mask = gui.mouse_focus_mask; gui.mouse_focus = nullptr; @@ -2582,7 +2489,6 @@ void Viewport::_drop_mouse_focus() { gui.mouse_focus_mask = 0; for (int i = 0; i < 3; i++) { - if (mask & (1 << i)) { Ref<InputEventMouseButton> mb; mb.instance(); @@ -2596,7 +2502,6 @@ void Viewport::_drop_mouse_focus() { } void Viewport::_drop_physics_mouseover() { - physics_has_last_mousepos = false; while (physics_2d_mouseover.size()) { @@ -2622,18 +2527,15 @@ void Viewport::_drop_physics_mouseover() { } Control *Viewport::_gui_get_focus_owner() { - return gui.key_focus; } void Viewport::_gui_grab_click_focus(Control *p_control) { - gui.mouse_click_grabber = p_control; call_deferred("_post_gui_grab_click_focus"); } void Viewport::_post_gui_grab_click_focus() { - Control *focus_grabber = gui.mouse_click_grabber; if (!focus_grabber) { // Redundant grab requests were made @@ -2642,17 +2544,15 @@ void Viewport::_post_gui_grab_click_focus() { gui.mouse_click_grabber = nullptr; if (gui.mouse_focus) { - - if (gui.mouse_focus == focus_grabber) + if (gui.mouse_focus == focus_grabber) { return; + } int mask = gui.mouse_focus_mask; Point2 click = gui.mouse_focus->get_global_transform_with_canvas().affine_inverse().xform(gui.last_mouse_pos); for (int i = 0; i < 3; i++) { - if (mask & (1 << i)) { - Ref<InputEventMouseButton> mb; mb.instance(); @@ -2670,9 +2570,7 @@ void Viewport::_post_gui_grab_click_focus() { click = gui.mouse_focus->get_global_transform_with_canvas().affine_inverse().xform(gui.last_mouse_pos); for (int i = 0; i < 3; i++) { - if (mask & (1 << i)) { - Ref<InputEventMouseButton> mb; mb.instance(); @@ -2690,7 +2588,6 @@ void Viewport::_post_gui_grab_click_focus() { /////////////////////////////// void Viewport::input_text(const String &p_text) { - if (gui.subwindow_focused) { gui.subwindow_focused->input_text(p_text); return; @@ -2700,8 +2597,8 @@ void Viewport::input_text(const String &p_text) { gui.key_focus->call("set_text", p_text); } } -Viewport::SubWindowResize Viewport::_sub_window_get_resize_margin(Window *p_subwindow, const Point2 &p_point) { +Viewport::SubWindowResize Viewport::_sub_window_get_resize_margin(Window *p_subwindow, const Point2 &p_point) { if (p_subwindow->get_flag(Window::FLAG_BORDERLESS)) { return SUB_WINDOW_RESIZE_DISABLED; } @@ -2764,15 +2661,13 @@ Viewport::SubWindowResize Viewport::_sub_window_get_resize_margin(Window *p_subw return SUB_WINDOW_RESIZE_DISABLED; } -bool Viewport::_sub_windows_forward_input(const Ref<InputEvent> &p_event) { +bool Viewport::_sub_windows_forward_input(const Ref<InputEvent> &p_event) { if (gui.subwindow_drag != SUB_WINDOW_DRAG_DISABLED) { - ERR_FAIL_COND_V(gui.subwindow_focused == nullptr, false); Ref<InputEventMouseButton> mb = p_event; if (mb.is_valid() && !mb->is_pressed() && mb->get_button_index() == BUTTON_LEFT) { - if (gui.subwindow_drag == SUB_WINDOW_DRAG_CLOSE) { if (gui.subwindow_drag_close_rect.has_point(mb->get_position())) { //close window @@ -2787,7 +2682,6 @@ bool Viewport::_sub_windows_forward_input(const Ref<InputEvent> &p_event) { Ref<InputEventMouseMotion> mm = p_event; if (mm.is_valid()) { - if (gui.subwindow_drag == SUB_WINDOW_DRAG_MOVE) { Vector2 diff = mm->get_position() - gui.subwindow_drag_from; Rect2i new_rect(gui.subwindow_drag_pos + diff, gui.subwindow_focused->get_size()); @@ -2813,7 +2707,6 @@ bool Viewport::_sub_windows_forward_input(const Ref<InputEvent> &p_event) { switch (gui.subwindow_resize_mode) { case SUB_WINDOW_RESIZE_TOP_LEFT: { - diff.x = MIN(diff.x, limit.x); diff.y = MIN(diff.y, limit.y); r.position += diff; @@ -2879,7 +2772,6 @@ bool Viewport::_sub_windows_forward_input(const Ref<InputEvent> &p_event) { //if the event is a mouse button, we need to check whether another window was clicked if (mb.is_valid() && mb->is_pressed() && mb->get_button_index() == BUTTON_LEFT) { - bool click_on_window = false; for (int i = gui.sub_windows.size() - 1; i >= 0; i--) { SubWindow &sw = gui.sub_windows.write[i]; @@ -2896,7 +2788,6 @@ bool Viewport::_sub_windows_forward_input(const Ref<InputEvent> &p_event) { title_bar.size.y = title_height; if (title_bar.has_point(mb->get_position())) { - click_on_window = true; int close_h_ofs = sw.window->get_theme_constant("close_h_ofs"); @@ -2913,12 +2804,10 @@ bool Viewport::_sub_windows_forward_input(const Ref<InputEvent> &p_event) { } if (close_rect.has_point(mb->get_position())) { - gui.subwindow_drag = SUB_WINDOW_DRAG_CLOSE; gui.subwindow_drag_close_inside = true; //starts inside gui.subwindow_drag_close_rect = close_rect; } else { - gui.subwindow_drag = SUB_WINDOW_DRAG_MOVE; } @@ -2958,13 +2847,10 @@ bool Viewport::_sub_windows_forward_input(const Ref<InputEvent> &p_event) { } if (gui.subwindow_focused) { - Ref<InputEventMouseMotion> mm = p_event; if (mm.is_valid()) { - SubWindowResize resize = _sub_window_get_resize_margin(gui.subwindow_focused, mm->get_position()); if (resize != SUB_WINDOW_RESIZE_DISABLED) { - DisplayServer::CursorShape shapes[SUB_WINDOW_RESIZE_MAX] = { DisplayServer::CURSOR_ARROW, DisplayServer::CURSOR_FDIAGSIZE, @@ -3003,11 +2889,11 @@ bool Viewport::_sub_windows_forward_input(const Ref<InputEvent> &p_event) { } void Viewport::input(const Ref<InputEvent> &p_event, bool p_local_coords) { - ERR_FAIL_COND(!is_inside_tree()); - if (disable_input) + if (disable_input) { return; + } if (Engine::get_singleton()->is_editor_hint() && get_tree()->get_edited_scene_root() && get_tree()->get_edited_scene_root()->is_a_parent_of(this)) { return; @@ -3038,11 +2924,11 @@ void Viewport::input(const Ref<InputEvent> &p_event, bool p_local_coords) { } void Viewport::unhandled_input(const Ref<InputEvent> &p_event, bool p_local_coords) { - ERR_FAIL_COND(!is_inside_tree()); - if (disable_input) + if (disable_input) { return; + } if (Engine::get_singleton()->is_editor_hint() && get_tree()->get_edited_scene_root() && get_tree()->get_edited_scene_root()->is_a_parent_of(this)) { return; @@ -3063,7 +2949,6 @@ void Viewport::unhandled_input(const Ref<InputEvent> &p_event, bool p_local_coor } if (physics_object_picking && !is_input_handled()) { - if (Input::get_singleton()->get_mouse_mode() != Input::MOUSE_MODE_CAPTURED && (Object::cast_to<InputEventMouseButton>(*ev) || Object::cast_to<InputEventMouseMotion>(*ev) || @@ -3078,12 +2963,13 @@ void Viewport::unhandled_input(const Ref<InputEvent> &p_event, bool p_local_coor } void Viewport::set_use_own_world_3d(bool p_world_3d) { - - if (p_world_3d == own_world_3d.is_valid()) + if (p_world_3d == own_world_3d.is_valid()) { return; + } - if (is_inside_tree()) + if (is_inside_tree()) { _propagate_exit_world(this); + } if (!p_world_3d) { own_world_3d = Ref<World3D>(); @@ -3099,8 +2985,9 @@ void Viewport::set_use_own_world_3d(bool p_world_3d) { } } - if (is_inside_tree()) + if (is_inside_tree()) { _propagate_enter_world(this); + } if (is_inside_tree()) { RenderingServer::get_singleton()->viewport_set_scenario(viewport, find_world_3d()->get_scenario()); @@ -3110,12 +2997,10 @@ void Viewport::set_use_own_world_3d(bool p_world_3d) { } bool Viewport::is_using_own_world_3d() const { - return own_world_3d.is_valid(); } void Viewport::set_physics_object_picking(bool p_enable) { - physics_object_picking = p_enable; if (!physics_object_picking) { physics_picking_events.clear(); @@ -3123,18 +3008,15 @@ void Viewport::set_physics_object_picking(bool p_enable) { } bool Viewport::get_physics_object_picking() { - return physics_object_picking; } Vector2 Viewport::get_camera_coords(const Vector2 &p_viewport_coords) const { - Transform2D xf = get_final_transform(); return xf.xform(p_viewport_coords); } Vector2 Viewport::get_camera_rect_size() const { - return size; } @@ -3143,7 +3025,6 @@ void Viewport::set_disable_input(bool p_disable) { } bool Viewport::is_input_disabled() const { - return disable_input; } @@ -3166,61 +3047,55 @@ String Viewport::get_configuration_warning() const { void Viewport::gui_reset_canvas_sort_index() { gui.canvas_sort_index = 0; } -int Viewport::gui_get_canvas_sort_index() { +int Viewport::gui_get_canvas_sort_index() { return gui.canvas_sort_index++; } void Viewport::set_msaa(MSAA p_msaa) { - ERR_FAIL_INDEX(p_msaa, MSAA_MAX); - if (msaa == p_msaa) + if (msaa == p_msaa) { return; + } msaa = p_msaa; RS::get_singleton()->viewport_set_msaa(viewport, RS::ViewportMSAA(p_msaa)); } Viewport::MSAA Viewport::get_msaa() const { - return msaa; } void Viewport::set_screen_space_aa(ScreenSpaceAA p_screen_space_aa) { - ERR_FAIL_INDEX(p_screen_space_aa, SCREEN_SPACE_AA_MAX); - if (screen_space_aa == p_screen_space_aa) + if (screen_space_aa == p_screen_space_aa) { return; + } screen_space_aa = p_screen_space_aa; RS::get_singleton()->viewport_set_screen_space_aa(viewport, RS::ViewportScreenSpaceAA(p_screen_space_aa)); } Viewport::ScreenSpaceAA Viewport::get_screen_space_aa() const { - return screen_space_aa; } -void Viewport::set_debug_draw(DebugDraw p_debug_draw) { +void Viewport::set_debug_draw(DebugDraw p_debug_draw) { debug_draw = p_debug_draw; RS::get_singleton()->viewport_set_debug_draw(viewport, RS::ViewportDebugDraw(p_debug_draw)); } Viewport::DebugDraw Viewport::get_debug_draw() const { - return debug_draw; } int Viewport::get_render_info(RenderInfo p_info) { - return RS::get_singleton()->viewport_get_render_info(viewport, RS::ViewportRenderInfo(p_info)); } void Viewport::set_snap_controls_to_pixels(bool p_enable) { - snap_controls_to_pixels = p_enable; } bool Viewport::is_snap_controls_to_pixels_enabled() const { - return snap_controls_to_pixels; } @@ -3296,6 +3171,7 @@ void Viewport::set_default_canvas_item_texture_repeat(DefaultCanvasItemTextureRe default_canvas_item_texture_repeat = p_repeat; _propagate_update_default_repeat(this); } + Viewport::DefaultCanvasItemTextureRepeat Viewport::get_default_canvas_item_texture_repeat() const { return default_canvas_item_texture_repeat; } @@ -3338,9 +3214,11 @@ Viewport *Viewport::get_parent_viewport() const { void Viewport::set_embed_subwindows_hint(bool p_embed) { gui.embed_subwindows_hint = p_embed; } + bool Viewport::get_embed_subwindows_hint() const { return gui.embed_subwindows_hint; } + bool Viewport::is_embedding_subwindows() const { return gui.embed_subwindows_hint; } @@ -3362,7 +3240,6 @@ void Viewport::pass_mouse_focus_to(Viewport *p_viewport, Control *p_control) { } void Viewport::_bind_methods() { - ClassDB::bind_method(D_METHOD("set_world_2d", "world_2d"), &Viewport::set_world_2d); ClassDB::bind_method(D_METHOD("get_world_2d"), &Viewport::get_world_2d); ClassDB::bind_method(D_METHOD("find_world_2d"), &Viewport::find_world_2d); @@ -3544,7 +3421,6 @@ void Viewport::_bind_methods() { } Viewport::Viewport() { - world_2d = Ref<World2D>(memnew(World2D)); viewport = RenderingServer::get_singleton()->viewport_create(); @@ -3629,7 +3505,6 @@ Viewport::Viewport() { } Viewport::~Viewport() { - //erase itself from viewport textures for (Set<ViewportTexture *>::Element *E = viewport_textures.front(); E; E = E->next()) { E->get()->vp = nullptr; @@ -3652,21 +3527,20 @@ bool SubViewport::is_using_xr() { void SubViewport::set_size(const Size2i &p_size) { _set_size(p_size, _get_size_2d_override(), Rect2i(), _stretch_transform(), true); } + Size2i SubViewport::get_size() const { return _get_size(); } void SubViewport::set_size_2d_override(const Size2i &p_size) { - _set_size(_get_size(), p_size, Rect2i(), _stretch_transform(), true); } -Size2i SubViewport::get_size_2d_override() const { +Size2i SubViewport::get_size_2d_override() const { return _get_size_2d_override(); } void SubViewport::set_size_2d_override_stretch(bool p_enable) { - if (p_enable == size_2d_override_stretch) { return; } @@ -3674,28 +3548,26 @@ void SubViewport::set_size_2d_override_stretch(bool p_enable) { size_2d_override_stretch = p_enable; _set_size(_get_size(), _get_size_2d_override(), Rect2i(), _stretch_transform(), true); } -bool SubViewport::is_size_2d_override_stretch_enabled() const { +bool SubViewport::is_size_2d_override_stretch_enabled() const { return size_2d_override_stretch; } void SubViewport::set_update_mode(UpdateMode p_mode) { - update_mode = p_mode; RS::get_singleton()->viewport_set_update_mode(get_viewport_rid(), RS::ViewportUpdateMode(p_mode)); } -SubViewport::UpdateMode SubViewport::get_update_mode() const { +SubViewport::UpdateMode SubViewport::get_update_mode() const { return update_mode; } void SubViewport::set_clear_mode(ClearMode p_mode) { - clear_mode = p_mode; RS::get_singleton()->viewport_set_clear_mode(get_viewport_rid(), RS::ViewportClearMode(p_mode)); } -SubViewport::ClearMode SubViewport::get_clear_mode() const { +SubViewport::ClearMode SubViewport::get_clear_mode() const { return clear_mode; } @@ -3704,7 +3576,6 @@ DisplayServer::WindowID SubViewport::get_window_id() const { } Transform2D SubViewport::_stretch_transform() { - Transform2D transform = Transform2D(); Size2i view_size_2d_override = _get_size_2d_override(); if (size_2d_override_stretch && view_size_2d_override.width > 0 && view_size_2d_override.height > 0) { @@ -3716,7 +3587,6 @@ Transform2D SubViewport::_stretch_transform() { } void SubViewport::_notification(int p_what) { - if (p_what == NOTIFICATION_ENTER_TREE) { RS::get_singleton()->viewport_set_active(get_viewport_rid(), true); } diff --git a/scene/main/viewport.h b/scene/main/viewport.h index 7da57347fd..4536b558f9 100644 --- a/scene/main/viewport.h +++ b/scene/main/viewport.h @@ -51,7 +51,6 @@ class Viewport; class CollisionObject3D; class ViewportTexture : public Texture2D { - GDCLASS(ViewportTexture, Texture2D); NodePath path; @@ -85,7 +84,6 @@ public: }; class Viewport : public Node { - GDCLASS(Viewport, Node); public: @@ -236,7 +234,6 @@ private: bool physics_has_last_mousepos; Vector2 physics_last_mousepos; struct { - bool alt; bool control; bool shift; @@ -579,7 +576,6 @@ public: }; class SubViewport : public Viewport { - GDCLASS(SubViewport, Viewport); public: diff --git a/scene/main/window.cpp b/scene/main/window.cpp index 19954299de..6565f02503 100644 --- a/scene/main/window.cpp +++ b/scene/main/window.cpp @@ -43,20 +43,22 @@ void Window::set_title(const String &p_title) { embedder->_sub_window_update(this); } else if (window_id != DisplayServer::INVALID_WINDOW_ID) { - DisplayServer::get_singleton()->window_set_title(p_title, window_id); } } + String Window::get_title() const { return title; } void Window::set_current_screen(int p_screen) { current_screen = p_screen; - if (window_id == DisplayServer::INVALID_WINDOW_ID) + if (window_id == DisplayServer::INVALID_WINDOW_ID) { return; + } DisplayServer::get_singleton()->window_set_current_screen(p_screen, window_id); } + int Window::get_current_screen() const { if (window_id != DisplayServer::INVALID_WINDOW_ID) { current_screen = DisplayServer::get_singleton()->window_get_current_screen(window_id); @@ -65,17 +67,16 @@ int Window::get_current_screen() const { } void Window::set_position(const Point2i &p_position) { - position = p_position; if (embedder) { embedder->_sub_window_update(this); } else if (window_id != DisplayServer::INVALID_WINDOW_ID) { - DisplayServer::get_singleton()->window_set_position(p_position, window_id); } } + Point2i Window::get_position() const { return position; } @@ -84,13 +85,12 @@ void Window::set_size(const Size2i &p_size) { size = p_size; _update_window_size(); } -Size2i Window::get_size() const { +Size2i Window::get_size() const { return size; } Size2i Window::get_real_size() const { - if (window_id != DisplayServer::INVALID_WINDOW_ID) { return DisplayServer::get_singleton()->window_get_real_size(window_id); } @@ -128,20 +128,17 @@ Size2i Window::get_min_size() const { } void Window::set_mode(Mode p_mode) { - mode = p_mode; if (embedder) { embedder->_sub_window_update(this); } else if (window_id != DisplayServer::INVALID_WINDOW_ID) { - DisplayServer::get_singleton()->window_set_mode(DisplayServer::WindowMode(p_mode), window_id); } } Window::Mode Window::get_mode() const { - if (window_id != DisplayServer::INVALID_WINDOW_ID) { mode = (Mode)DisplayServer::get_singleton()->window_get_mode(window_id); } @@ -156,7 +153,6 @@ void Window::set_flag(Flags p_flag, bool p_enabled) { embedder->_sub_window_update(this); } else if (window_id != DisplayServer::INVALID_WINDOW_ID) { - DisplayServer::get_singleton()->window_set_flag(DisplayServer::WindowFlags(p_flag), p_enabled, window_id); } } @@ -181,8 +177,8 @@ void Window::request_attention() { DisplayServer::get_singleton()->window_request_attention(window_id); } } -void Window::move_to_foreground() { +void Window::move_to_foreground() { if (embedder) { embedder->_sub_window_grab_focus(this); @@ -207,6 +203,7 @@ void Window::set_ime_active(bool p_active) { DisplayServer::get_singleton()->window_set_ime_active(p_active, window_id); } } + void Window::set_ime_position(const Point2i &p_pos) { if (window_id != DisplayServer::INVALID_WINDOW_ID) { DisplayServer::get_singleton()->window_set_ime_position(p_pos, window_id); @@ -251,8 +248,8 @@ void Window::_make_window() { RS::get_singleton()->viewport_set_update_mode(get_viewport_rid(), RS::VIEWPORT_UPDATE_WHEN_VISIBLE); } -void Window::_update_from_window() { +void Window::_update_from_window() { ERR_FAIL_COND(window_id == DisplayServer::INVALID_WINDOW_ID); mode = (Mode)DisplayServer::get_singleton()->window_get_mode(window_id); for (int i = 0; i < FLAG_MAX; i++) { @@ -283,7 +280,6 @@ void Window::_clear_window() { } void Window::_rect_changed_callback(const Rect2i &p_callback) { - //we must always accept this as the truth if (size == p_callback.size && position == p_callback.position) { return; @@ -309,7 +305,6 @@ void Window::_propagate_window_notification(Node *p_node, int p_notification) { } void Window::_event_callback(DisplayServer::WindowEvent p_event) { - switch (p_event) { case DisplayServer::WINDOW_EVENT_MOUSE_ENTER: { _propagate_window_notification(this, NOTIFICATION_WM_MOUSE_ENTER); @@ -351,12 +346,12 @@ void Window::_event_callback(DisplayServer::WindowEvent p_event) { void Window::show() { set_visible(true); } + void Window::hide() { set_visible(false); } void Window::set_visible(bool p_visible) { - if (visible == p_visible) { return; } @@ -473,12 +468,12 @@ void Window::set_transient(bool p_transient) { _clear_transient(); } } + bool Window::is_transient() const { return transient; } void Window::set_exclusive(bool p_exclusive) { - if (exclusive == p_exclusive) { return; } @@ -506,7 +501,6 @@ bool Window::is_visible() const { } void Window::_update_window_size() { - Size2i size_limit; if (wrap_controls) { size_limit = get_contents_minimum_size(); @@ -535,6 +529,7 @@ void Window::_update_window_size() { //update the viewport _update_viewport_size(); } + void Window::_update_viewport_size() { //update the viewport part @@ -545,12 +540,10 @@ void Window::_update_viewport_size() { float font_oversampling = 1.0; if (content_scale_mode == CONTENT_SCALE_MODE_DISABLED || content_scale_size.x == 0 || content_scale_size.y == 0) { - stretch_transform = Transform2D(); final_size = size; } else { - //actual screen video mode Size2 video_mode = size; Size2 desired_res = content_scale_size; @@ -569,7 +562,6 @@ void Window::_update_viewport_size() { // screen ratio is smaller vertically if (content_scale_aspect == CONTENT_SCALE_ASPECT_KEEP_HEIGHT || content_scale_aspect == CONTENT_SCALE_ASPECT_EXPAND) { - //will stretch horizontally viewport_size.x = desired_res.y * video_mode_aspect; viewport_size.y = desired_res.y; @@ -584,7 +576,6 @@ void Window::_update_viewport_size() { } else { //screen ratio is smaller horizontally if (content_scale_aspect == CONTENT_SCALE_ASPECT_KEEP_WIDTH || content_scale_aspect == CONTENT_SCALE_ASPECT_EXPAND) { - //will stretch horizontally viewport_size.x = desired_res.x; viewport_size.y = desired_res.x / video_mode_aspect; @@ -622,14 +613,12 @@ void Window::_update_viewport_size() { //_update_font_oversampling(1.0); } break; case CONTENT_SCALE_MODE_OBJECTS: { - final_size = screen_size; final_size_override = viewport_size; attach_to_screen_rect = Rect2(margin, screen_size); font_oversampling = screen_size.x / viewport_size.x; } break; case CONTENT_SCALE_MODE_PIXELS: { - final_size = viewport_size; attach_to_screen_rect = Rect2(margin, screen_size); @@ -652,12 +641,10 @@ void Window::_update_viewport_size() { } if (window_id == DisplayServer::MAIN_WINDOW_ID) { - if (!use_font_oversampling) { font_oversampling = 1.0; } if (DynamicFontAtSize::font_oversampling != font_oversampling) { - DynamicFontAtSize::font_oversampling = font_oversampling; DynamicFont::update_oversampling(); } @@ -679,11 +666,9 @@ void Window::_update_window_callbacks() { } Viewport *Window::_get_embedder() const { - Viewport *vp = get_parent_viewport(); while (vp) { - if (vp->is_embedding_subwindows()) { return vp; } @@ -699,10 +684,8 @@ Viewport *Window::_get_embedder() const { void Window::_notification(int p_what) { if (p_what == NOTIFICATION_ENTER_TREE) { - bool embedded = false; { - embedder = _get_embedder(); if (embedder) { @@ -757,29 +740,24 @@ void Window::_notification(int p_what) { } if (p_what == NOTIFICATION_READY) { - if (wrap_controls) { _update_child_controls(); } } if (p_what == NOTIFICATION_EXIT_TREE) { - if (transient) { _clear_transient(); } if (!is_embedded() && window_id != DisplayServer::INVALID_WINDOW_ID) { - if (window_id == DisplayServer::MAIN_WINDOW_ID) { - RS::get_singleton()->viewport_set_update_mode(get_viewport_rid(), RS::VIEWPORT_UPDATE_DISABLED); _update_window_callbacks(); } else { _clear_window(); } } else { - if (embedder) { embedder->_sub_window_remove(this); embedder = nullptr; @@ -807,6 +785,7 @@ void Window::set_content_scale_mode(ContentScaleMode p_mode) { content_scale_mode = p_mode; _update_viewport_size(); } + Window::ContentScaleMode Window::get_content_scale_mode() const { return content_scale_mode; } @@ -815,6 +794,7 @@ void Window::set_content_scale_aspect(ContentScaleAspect p_aspect) { content_scale_aspect = p_aspect; _update_viewport_size(); } + Window::ContentScaleAspect Window::get_content_scale_aspect() const { return content_scale_aspect; } @@ -826,6 +806,7 @@ void Window::set_use_font_oversampling(bool p_oversampling) { use_font_oversampling = p_oversampling; _update_viewport_size(); } + bool Window::is_using_font_oversampling() const { return use_font_oversampling; } @@ -861,8 +842,8 @@ Size2 Window::_get_contents_minimum_size() const { return max; } -void Window::_update_child_controls() { +void Window::_update_child_controls() { if (!updating_child_controls) { return; } @@ -871,8 +852,8 @@ void Window::_update_child_controls() { updating_child_controls = false; } -void Window::child_controls_changed() { +void Window::child_controls_changed() { if (!is_inside_tree() || !visible || updating_child_controls) { return; } @@ -882,8 +863,9 @@ void Window::child_controls_changed() { } void Window::_window_input(const Ref<InputEvent> &p_ev) { - if (Engine::get_singleton()->is_editor_hint() && (Object::cast_to<InputEventJoypadButton>(p_ev.ptr()) || Object::cast_to<InputEventJoypadMotion>(*p_ev))) + if (Engine::get_singleton()->is_editor_hint() && (Object::cast_to<InputEventJoypadButton>(p_ev.ptr()) || Object::cast_to<InputEventJoypadMotion>(*p_ev))) { return; //avoid joy input on editor + } if (EngineDebugger::is_active()) { //quit from game window using F8 @@ -905,15 +887,16 @@ void Window::_window_input(const Ref<InputEvent> &p_ev) { unhandled_input(p_ev); } } + void Window::_window_input_text(const String &p_text) { input_text(p_text); } + void Window::_window_drop_files(const Vector<String> &p_files) { emit_signal("files_dropped", p_files, current_screen); } Viewport *Window::get_parent_viewport() const { - if (get_parent()) { return get_parent()->get_viewport(); } else { @@ -922,7 +905,6 @@ Viewport *Window::get_parent_viewport() const { } Window *Window::get_parent_visible_window() const { - Viewport *vp = get_parent_viewport(); Window *window = nullptr; while (vp) { @@ -940,7 +922,6 @@ Window *Window::get_parent_visible_window() const { } void Window::popup_on_parent(const Rect2i &p_parent_rect) { - ERR_FAIL_COND(!is_inside_tree()); ERR_FAIL_COND_MSG(window_id == DisplayServer::MAIN_WINDOW_ID, "Can't popup the main window."); @@ -958,7 +939,6 @@ void Window::popup_on_parent(const Rect2i &p_parent_rect) { } void Window::popup_centered_clamped(const Size2i &p_size, float p_fallback_ratio) { - ERR_FAIL_COND(!is_inside_tree()); ERR_FAIL_COND_MSG(window_id == DisplayServer::MAIN_WINDOW_ID, "Can't popup the main window."); @@ -1009,7 +989,6 @@ void Window::popup_centered(const Size2i &p_minsize) { } void Window::popup_centered_ratio(float p_ratio) { - ERR_FAIL_COND(!is_inside_tree()); ERR_FAIL_COND_MSG(window_id == DisplayServer::MAIN_WINDOW_ID, "Can't popup the main window."); @@ -1032,7 +1011,6 @@ void Window::popup_centered_ratio(float p_ratio) { } void Window::popup(const Rect2i &p_screen_rect) { - emit_signal("about_to_popup"); if (p_screen_rect != Rect2i()) { @@ -1074,7 +1052,6 @@ Rect2i Window::get_usable_parent_rect() const { if (is_embedded()) { parent = _get_embedder()->get_visible_rect(); } else { - const Window *w = is_visible() ? this : get_parent_visible_window(); //find a parent that can contain us ERR_FAIL_COND_V(!w, Rect2()); @@ -1085,7 +1062,6 @@ Rect2i Window::get_usable_parent_rect() const { } void Window::add_child_notify(Node *p_child) { - Control *child_c = Object::cast_to<Control>(p_child); if (child_c && child_c->data.theme.is_null() && (theme_owner || theme_owner_window)) { @@ -1104,7 +1080,6 @@ void Window::add_child_notify(Node *p_child) { } void Window::remove_child_notify(Node *p_child) { - Control *child_c = Object::cast_to<Control>(p_child); if (child_c && (child_c->data.theme_owner || child_c->data.theme_owner_window) && child_c->data.theme.is_null()) { @@ -1123,19 +1098,17 @@ void Window::remove_child_notify(Node *p_child) { } void Window::set_theme(const Ref<Theme> &p_theme) { - - if (theme == p_theme) + if (theme == p_theme) { return; + } theme = p_theme; if (!p_theme.is_null()) { - theme_owner = nullptr; theme_owner_window = this; Control::_propagate_theme_changed(this, nullptr, this); } else { - Control *parent_c = cast_to<Control>(get_parent()); if (parent_c && (parent_c->data.theme_owner || parent_c->data.theme_owner_window)) { Control::_propagate_theme_changed(this, parent_c->data.theme_owner, parent_c->data.theme_owner_window); @@ -1149,6 +1122,7 @@ void Window::set_theme(const Ref<Theme> &p_theme) { } } } + Ref<Theme> Window::get_theme() const { return theme; } @@ -1157,22 +1131,27 @@ Ref<Texture2D> Window::get_theme_icon(const StringName &p_name, const StringName StringName type = p_type ? p_type : get_class_name(); return Control::get_icons(theme_owner, theme_owner_window, p_name, type); } + Ref<Shader> Window::get_theme_shader(const StringName &p_name, const StringName &p_type) const { StringName type = p_type ? p_type : get_class_name(); return Control::get_shaders(theme_owner, theme_owner_window, p_name, type); } + Ref<StyleBox> Window::get_theme_stylebox(const StringName &p_name, const StringName &p_type) const { StringName type = p_type ? p_type : get_class_name(); return Control::get_styleboxs(theme_owner, theme_owner_window, p_name, type); } + Ref<Font> Window::get_theme_font(const StringName &p_name, const StringName &p_type) const { StringName type = p_type ? p_type : get_class_name(); return Control::get_fonts(theme_owner, theme_owner_window, p_name, type); } + Color Window::get_theme_color(const StringName &p_name, const StringName &p_type) const { StringName type = p_type ? p_type : get_class_name(); return Control::get_colors(theme_owner, theme_owner_window, p_name, type); } + int Window::get_theme_constant(const StringName &p_name, const StringName &p_type) const { StringName type = p_type ? p_type : get_class_name(); return Control::get_constants(theme_owner, theme_owner_window, p_name, type); @@ -1182,22 +1161,27 @@ bool Window::has_theme_icon(const StringName &p_name, const StringName &p_type) StringName type = p_type ? p_type : get_class_name(); return Control::has_icons(theme_owner, theme_owner_window, p_name, type); } + bool Window::has_theme_shader(const StringName &p_name, const StringName &p_type) const { StringName type = p_type ? p_type : get_class_name(); return Control::has_shaders(theme_owner, theme_owner_window, p_name, type); } + bool Window::has_theme_stylebox(const StringName &p_name, const StringName &p_type) const { StringName type = p_type ? p_type : get_class_name(); return Control::has_styleboxs(theme_owner, theme_owner_window, p_name, type); } + bool Window::has_theme_font(const StringName &p_name, const StringName &p_type) const { StringName type = p_type ? p_type : get_class_name(); return Control::has_fonts(theme_owner, theme_owner_window, p_name, type); } + bool Window::has_theme_color(const StringName &p_name, const StringName &p_type) const { StringName type = p_type ? p_type : get_class_name(); return Control::has_colors(theme_owner, theme_owner_window, p_name, type); } + bool Window::has_theme_constant(const StringName &p_name, const StringName &p_type) const { StringName type = p_type ? p_type : get_class_name(); return Control::has_constants(theme_owner, theme_owner_window, p_name, type); @@ -1240,7 +1224,6 @@ Rect2i Window::get_parent_rect() const { } void Window::_bind_methods() { - ClassDB::bind_method(D_METHOD("set_title", "title"), &Window::set_title); ClassDB::bind_method(D_METHOD("get_title"), &Window::get_title); @@ -1402,5 +1385,6 @@ Window::Window() { content_scale_aspect = CONTENT_SCALE_ASPECT_IGNORE; RS::get_singleton()->viewport_set_update_mode(get_viewport_rid(), RS::VIEWPORT_UPDATE_DISABLED); } + Window::~Window() { } |