diff options
Diffstat (limited to 'editor')
271 files changed, 19775 insertions, 13205 deletions
diff --git a/editor/SCsub b/editor/SCsub index 2b560f68e8..4431166ee6 100644 --- a/editor/SCsub +++ b/editor/SCsub @@ -82,6 +82,7 @@ if env['tools']: SConscript('collada/SCsub') SConscript('doc/SCsub') + SConscript('debugger/SCsub') SConscript('fileserver/SCsub') SConscript('icons/SCsub') SConscript('import/SCsub') diff --git a/editor/animation_bezier_editor.cpp b/editor/animation_bezier_editor.cpp index af2760e82b..3bacb8205b 100644 --- a/editor/animation_bezier_editor.cpp +++ b/editor/animation_bezier_editor.cpp @@ -258,7 +258,7 @@ void AnimationBezierTrackEdit::_notification(int p_what) { draw_line(Point2(right_limit, 0), Point2(right_limit, get_size().height), linecolor); - Ref<Texture> close_icon = get_icon("Close", "EditorIcons"); + Ref<Texture2D> close_icon = get_icon("Close", "EditorIcons"); close_icon_rect.position = Vector2(get_size().width - close_icon->get_width() - hsep, hsep); close_icon_rect.size = close_icon->get_size(); @@ -290,7 +290,7 @@ void AnimationBezierTrackEdit::_notification(int p_what) { if (node) { int ofs = 0; - Ref<Texture> icon = EditorNode::get_singleton()->get_object_icon(node, "Node"); + Ref<Texture2D> icon = EditorNode::get_singleton()->get_object_icon(node, "Node"); h = MAX(h, icon->get_height()); @@ -391,7 +391,7 @@ void AnimationBezierTrackEdit::_notification(int p_what) { { //draw OTHER curves float scale = timeline->get_zoom_scale(); - Ref<Texture> point = get_icon("KeyValue", "EditorIcons"); + Ref<Texture2D> point = get_icon("KeyValue", "EditorIcons"); for (Map<int, Color>::Element *E = subtrack_colors.front(); E; E = E->next()) { _draw_track(E->key(), E->get()); @@ -502,12 +502,12 @@ void AnimationBezierTrackEdit::set_animation_and_track(const Ref<Animation> &p_a animation = p_animation; track = p_track; - if (is_connected("select_key", editor, "_key_selected")) - disconnect("select_key", editor, "_key_selected"); - if (is_connected("deselect_key", editor, "_key_deselected")) - disconnect("deselect_key", editor, "_key_deselected"); - connect("select_key", editor, "_key_selected", varray(p_track), CONNECT_DEFERRED); - connect("deselect_key", editor, "_key_deselected", varray(p_track), CONNECT_DEFERRED); + if (is_connected_compat("select_key", editor, "_key_selected")) + disconnect_compat("select_key", editor, "_key_selected"); + if (is_connected_compat("deselect_key", editor, "_key_deselected")) + disconnect_compat("deselect_key", editor, "_key_deselected"); + connect_compat("select_key", editor, "_key_selected", varray(p_track), CONNECT_DEFERRED); + connect_compat("deselect_key", editor, "_key_deselected", varray(p_track), CONNECT_DEFERRED); update(); } @@ -522,11 +522,11 @@ void AnimationBezierTrackEdit::set_undo_redo(UndoRedo *p_undo_redo) { void AnimationBezierTrackEdit::set_timeline(AnimationTimelineEdit *p_timeline) { timeline = p_timeline; - timeline->connect("zoom_changed", this, "_zoom_changed"); + timeline->connect_compat("zoom_changed", this, "_zoom_changed"); } void AnimationBezierTrackEdit::set_editor(AnimationTrackEditor *p_editor) { editor = p_editor; - connect("clear_selection", editor, "_clear_selection", varray(false)); + connect_compat("clear_selection", editor, "_clear_selection", varray(false)); } void AnimationBezierTrackEdit::_play_position_draw() { @@ -1184,7 +1184,7 @@ AnimationBezierTrackEdit::AnimationBezierTrackEdit() { play_position->set_mouse_filter(MOUSE_FILTER_PASS); add_child(play_position); play_position->set_anchors_and_margins_preset(PRESET_WIDE); - play_position->connect("draw", this, "_play_position_draw"); + play_position->connect_compat("draw", this, "_play_position_draw"); set_focus_mode(FOCUS_CLICK); v_scroll = 0; @@ -1198,7 +1198,7 @@ AnimationBezierTrackEdit::AnimationBezierTrackEdit() { menu = memnew(PopupMenu); add_child(menu); - menu->connect("id_pressed", this, "_menu_selected"); + menu->connect_compat("id_pressed", this, "_menu_selected"); //set_mouse_filter(MOUSE_FILTER_PASS); //scroll has to work too for selection } diff --git a/editor/animation_bezier_editor.h b/editor/animation_bezier_editor.h index ef4e62231f..2be388fd57 100644 --- a/editor/animation_bezier_editor.h +++ b/editor/animation_bezier_editor.h @@ -63,9 +63,9 @@ class AnimationBezierTrackEdit : public Control { Vector<Rect2> view_rects; - Ref<Texture> bezier_icon; - Ref<Texture> bezier_handle_icon; - Ref<Texture> selected_icon; + Ref<Texture2D> bezier_icon; + Ref<Texture2D> bezier_handle_icon; + Ref<Texture2D> selected_icon; Rect2 close_icon_rect; diff --git a/editor/animation_track_editor.cpp b/editor/animation_track_editor.cpp index 2edfcced60..f5c7b91a99 100644 --- a/editor/animation_track_editor.cpp +++ b/editor/animation_track_editor.cpp @@ -235,7 +235,7 @@ public: Variant::Type t = Variant::Type(int(p_value)); if (t != args[idx].get_type()) { - Variant::CallError err; + Callable::CallError err; if (Variant::can_convert(args[idx].get_type(), t)) { Variant old = args[idx]; Variant *ptrs[1] = { &old }; @@ -593,7 +593,7 @@ public: } break; case Animation::TYPE_METHOD: { - p_list->push_back(PropertyInfo(Variant::STRING, "name")); + p_list->push_back(PropertyInfo(Variant::STRING_NAME, "name")); p_list->push_back(PropertyInfo(Variant::INT, "arg_count", PROPERTY_HINT_RANGE, "0,5,1")); Dictionary d = animation->track_get_key_value(track, key); @@ -654,7 +654,7 @@ public: } animations += "[stop]"; - p_list->push_back(PropertyInfo(Variant::STRING, "animation", PROPERTY_HINT_ENUM, animations)); + p_list->push_back(PropertyInfo(Variant::STRING_NAME, "animation", PROPERTY_HINT_ENUM, animations)); } break; } @@ -898,7 +898,7 @@ public: Variant::Type t = Variant::Type(int(p_value)); if (t != args[idx].get_type()) { - Variant::CallError err; + Callable::CallError err; if (Variant::can_convert(args[idx].get_type(), t)) { Variant old = args[idx]; Variant *ptrs[1] = { &old }; @@ -1293,7 +1293,7 @@ public: } break; case Animation::TYPE_METHOD: { - p_list->push_back(PropertyInfo(Variant::STRING, "name")); + p_list->push_back(PropertyInfo(Variant::STRING_NAME, "name")); p_list->push_back(PropertyInfo(Variant::INT, "arg_count", PROPERTY_HINT_RANGE, "0,5,1")); Dictionary d = animation->track_get_key_value(first_track, first_key); @@ -1354,7 +1354,7 @@ public: } animations += "[stop]"; - p_list->push_back(PropertyInfo(Variant::STRING, "animation", PROPERTY_HINT_ENUM, animations)); + p_list->push_back(PropertyInfo(Variant::STRING_NAME, "animation", PROPERTY_HINT_ENUM, animations)); } break; } } @@ -1442,11 +1442,11 @@ void AnimationTimelineEdit::_anim_loop_pressed() { int AnimationTimelineEdit::get_buttons_width() const { - Ref<Texture> interp_mode = get_icon("TrackContinuous", "EditorIcons"); - Ref<Texture> interp_type = get_icon("InterpRaw", "EditorIcons"); - Ref<Texture> loop_type = get_icon("InterpWrapClamp", "EditorIcons"); - Ref<Texture> remove_icon = get_icon("Remove", "EditorIcons"); - Ref<Texture> down_icon = get_icon("select_arrow", "Tree"); + Ref<Texture2D> interp_mode = get_icon("TrackContinuous", "EditorIcons"); + Ref<Texture2D> interp_type = get_icon("InterpRaw", "EditorIcons"); + Ref<Texture2D> loop_type = get_icon("InterpWrapClamp", "EditorIcons"); + Ref<Texture2D> remove_icon = get_icon("Remove", "EditorIcons"); + Ref<Texture2D> down_icon = get_icon("select_arrow", "Tree"); int total_w = interp_mode->get_width() + interp_type->get_width() + loop_type->get_width() + remove_icon->get_width(); total_w += (down_icon->get_width() + 4 * EDSCALE) * 4; @@ -1456,7 +1456,7 @@ int AnimationTimelineEdit::get_buttons_width() const { int AnimationTimelineEdit::get_name_limit() const { - Ref<Texture> hsize_icon = get_icon("Hsize", "EditorIcons"); + Ref<Texture2D> hsize_icon = get_icon("Hsize", "EditorIcons"); int limit = MAX(name_limit, add_track->get_minimum_size().width + hsize_icon->get_width()); @@ -1504,7 +1504,7 @@ void AnimationTimelineEdit::_notification(int p_what) { if (l <= 0) l = 0.001; //avoid crashor - Ref<Texture> hsize_icon = get_icon("Hsize", "EditorIcons"); + Ref<Texture2D> hsize_icon = get_icon("Hsize", "EditorIcons"); hsize_rect = Rect2(get_name_limit() - hsize_icon->get_width() - 2 * EDSCALE, (get_size().height - hsize_icon->get_height()) / 2, hsize_icon->get_width(), hsize_icon->get_height()); draw_texture(hsize_icon, hsize_rect.position); @@ -1697,7 +1697,7 @@ void AnimationTimelineEdit::set_undo_redo(UndoRedo *p_undo_redo) { void AnimationTimelineEdit::set_zoom(Range *p_zoom) { zoom = p_zoom; - zoom->connect("value_changed", this, "_zoom_changed"); + zoom->connect_compat("value_changed", this, "_zoom_changed"); } void AnimationTimelineEdit::set_play_position(float p_pos) { @@ -1871,7 +1871,7 @@ AnimationTimelineEdit::AnimationTimelineEdit() { play_position->set_mouse_filter(MOUSE_FILTER_PASS); add_child(play_position); play_position->set_anchors_and_margins_preset(PRESET_WIDE); - play_position->connect("draw", this, "_play_position_draw"); + play_position->connect_compat("draw", this, "_play_position_draw"); add_track = memnew(MenuButton); add_track->set_position(Vector2(0, 0)); @@ -1895,17 +1895,17 @@ AnimationTimelineEdit::AnimationTimelineEdit() { length->set_custom_minimum_size(Vector2(70 * EDSCALE, 0)); length->set_hide_slider(true); length->set_tooltip(TTR("Animation length (seconds)")); - length->connect("value_changed", this, "_anim_length_changed"); + length->connect_compat("value_changed", this, "_anim_length_changed"); len_hb->add_child(length); loop = memnew(ToolButton); loop->set_tooltip(TTR("Animation Looping")); - loop->connect("pressed", this, "_anim_loop_pressed"); + loop->connect_compat("pressed", this, "_anim_loop_pressed"); loop->set_toggle_mode(true); len_hb->add_child(loop); add_child(len_hb); add_track->hide(); - add_track->get_popup()->connect("index_pressed", this, "_track_added"); + add_track->get_popup()->connect_compat("index_pressed", this, "_track_added"); len_hb->hide(); panning_timeline = false; @@ -1934,7 +1934,7 @@ void AnimationTrackEdit::_notification(int p_what) { Ref<Font> font = get_font("font", "Label"); Color color = get_color("font_color", "Label"); - Ref<Texture> type_icons[6] = { + Ref<Texture2D> type_icons[6] = { get_icon("KeyValue", "EditorIcons"), get_icon("KeyXform", "EditorIcons"), get_icon("KeyCall", "EditorIcons"), @@ -1950,7 +1950,7 @@ void AnimationTrackEdit::_notification(int p_what) { { - Ref<Texture> check = animation->track_is_enabled(track) ? get_icon("checked", "CheckBox") : get_icon("unchecked", "CheckBox"); + Ref<Texture2D> check = animation->track_is_enabled(track) ? get_icon("checked", "CheckBox") : get_icon("unchecked", "CheckBox"); int ofs = in_group ? check->get_width() : 0; //not the best reference for margin but.. @@ -1958,7 +1958,7 @@ void AnimationTrackEdit::_notification(int p_what) { draw_texture(check, check_rect.position); ofs += check->get_width() + hsep; - Ref<Texture> type_icon = type_icons[animation->track_get_type(track)]; + Ref<Texture2D> type_icon = type_icons[animation->track_get_type(track)]; draw_texture(type_icon, Point2(ofs, int(get_size().height - type_icon->get_height()) / 2)); ofs += type_icon->get_width() + hsep; @@ -1987,7 +1987,7 @@ void AnimationTrackEdit::_notification(int p_what) { } text_color.a *= 0.7; } else if (node) { - Ref<Texture> icon = EditorNode::get_singleton()->get_object_icon(node, "Node"); + Ref<Texture2D> icon = EditorNode::get_singleton()->get_object_icon(node, "Node"); draw_texture(icon, Point2(ofs, int(get_size().height - icon->get_height()) / 2)); icon_cache = icon; @@ -2049,17 +2049,17 @@ void AnimationTrackEdit::_notification(int p_what) { { - Ref<Texture> wrap_icon[2] = { + Ref<Texture2D> wrap_icon[2] = { get_icon("InterpWrapClamp", "EditorIcons"), get_icon("InterpWrapLoop", "EditorIcons"), }; - Ref<Texture> interp_icon[3] = { + Ref<Texture2D> interp_icon[3] = { get_icon("InterpRaw", "EditorIcons"), get_icon("InterpLinear", "EditorIcons"), get_icon("InterpCubic", "EditorIcons") }; - Ref<Texture> cont_icon[4] = { + Ref<Texture2D> cont_icon[4] = { get_icon("TrackContinuous", "EditorIcons"), get_icon("TrackDiscrete", "EditorIcons"), get_icon("TrackTrigger", "EditorIcons"), @@ -2068,7 +2068,7 @@ void AnimationTrackEdit::_notification(int p_what) { int ofs = get_size().width - timeline->get_buttons_width(); - Ref<Texture> down_icon = get_icon("select_arrow", "Tree"); + Ref<Texture2D> down_icon = get_icon("select_arrow", "Tree"); draw_line(Point2(ofs, 0), Point2(ofs, get_size().height), linecolor, Math::round(EDSCALE)); @@ -2084,7 +2084,7 @@ void AnimationTrackEdit::_notification(int p_what) { update_mode = Animation::UPDATE_CONTINUOUS; } - Ref<Texture> update_icon = cont_icon[update_mode]; + Ref<Texture2D> update_icon = cont_icon[update_mode]; update_mode_rect.position.x = ofs; update_mode_rect.position.y = int(get_size().height - update_icon->get_height()) / 2; @@ -2105,7 +2105,7 @@ void AnimationTrackEdit::_notification(int p_what) { update_mode_rect.size.x += down_icon->get_width(); bezier_edit_rect = Rect2(); } else if (animation->track_get_type(track) == Animation::TYPE_BEZIER) { - Ref<Texture> bezier_icon = get_icon("EditBezier", "EditorIcons"); + Ref<Texture2D> bezier_icon = get_icon("EditBezier", "EditorIcons"); update_mode_rect.size.x += down_icon->get_width(); bezier_edit_rect.position = update_mode_rect.position + (update_mode_rect.size - bezier_icon->get_size()) / 2; bezier_edit_rect.size = bezier_icon->get_size(); @@ -2126,7 +2126,7 @@ void AnimationTrackEdit::_notification(int p_what) { Animation::InterpolationType interp_mode = animation->track_get_interpolation_type(track); - Ref<Texture> icon = interp_icon[interp_mode]; + Ref<Texture2D> icon = interp_icon[interp_mode]; interp_mode_rect.position.x = ofs; interp_mode_rect.position.y = int(get_size().height - icon->get_height()) / 2; @@ -2159,7 +2159,7 @@ void AnimationTrackEdit::_notification(int p_what) { bool loop_wrap = animation->track_get_interpolation_loop_wrap(track); - Ref<Texture> icon = wrap_icon[loop_wrap ? 1 : 0]; + Ref<Texture2D> icon = wrap_icon[loop_wrap ? 1 : 0]; loop_mode_rect.position.x = ofs; loop_mode_rect.position.y = int(get_size().height - icon->get_height()) / 2; @@ -2190,7 +2190,7 @@ void AnimationTrackEdit::_notification(int p_what) { { //erase - Ref<Texture> icon = get_icon("Remove", "EditorIcons"); + Ref<Texture2D> icon = get_icon("Remove", "EditorIcons"); remove_rect.position.x = ofs + ((get_size().width - ofs) - icon->get_width()) / 2; remove_rect.position.y = int(get_size().height - icon->get_height()) / 2; @@ -2271,7 +2271,7 @@ void AnimationTrackEdit::draw_key(int p_index, float p_pixels_sec, int p_x, bool if (p_x < p_clip_left || p_x > p_clip_right) return; - Ref<Texture> icon_to_draw = p_selected ? selected_icon : type_icon; + Ref<Texture2D> icon_to_draw = p_selected ? selected_icon : type_icon; // Override type icon for invalid value keys, unless selected. if (!p_selected && animation->track_get_type(track) == Animation::TYPE_VALUE) { @@ -2335,12 +2335,12 @@ void AnimationTrackEdit::draw_bg(int p_clip_left, int p_clip_right) { void AnimationTrackEdit::draw_fg(int p_clip_left, int p_clip_right) { } -void AnimationTrackEdit::draw_texture_clipped(const Ref<Texture> &p_texture, const Vector2 &p_pos) { +void AnimationTrackEdit::draw_texture_clipped(const Ref<Texture2D> &p_texture, const Vector2 &p_pos) { draw_texture_region_clipped(p_texture, Rect2(p_pos, p_texture->get_size()), Rect2(Point2(), p_texture->get_size())); } -void AnimationTrackEdit::draw_texture_region_clipped(const Ref<Texture> &p_texture, const Rect2 &p_rect, const Rect2 &p_region) { +void AnimationTrackEdit::draw_texture_region_clipped(const Ref<Texture2D> &p_texture, const Rect2 &p_rect, const Rect2 &p_region) { int clip_left = timeline->get_name_limit(); int clip_right = get_size().width - timeline->get_buttons_width(); @@ -2391,7 +2391,7 @@ void AnimationTrackEdit::set_animation_and_track(const Ref<Animation> &p_animati track = p_track; update(); - Ref<Texture> type_icons[6] = { + Ref<Texture2D> type_icons[6] = { get_icon("KeyValue", "EditorIcons"), get_icon("KeyXform", "EditorIcons"), get_icon("KeyCall", "EditorIcons"), @@ -2413,7 +2413,7 @@ NodePath AnimationTrackEdit::get_path() const { Size2 AnimationTrackEdit::get_minimum_size() const { - Ref<Texture> texture = get_icon("Object", "EditorIcons"); + Ref<Texture2D> texture = get_icon("Object", "EditorIcons"); Ref<Font> font = get_font("font", "Label"); int separation = get_constant("vseparation", "ItemList"); @@ -2429,8 +2429,8 @@ void AnimationTrackEdit::set_undo_redo(UndoRedo *p_undo_redo) { void AnimationTrackEdit::set_timeline(AnimationTimelineEdit *p_timeline) { timeline = p_timeline; - timeline->connect("zoom_changed", this, "_zoom_changed"); - timeline->connect("name_limit_changed", this, "_zoom_changed"); + timeline->connect_compat("zoom_changed", this, "_zoom_changed"); + timeline->connect_compat("name_limit_changed", this, "_zoom_changed"); } void AnimationTrackEdit::set_editor(AnimationTrackEditor *p_editor) { editor = p_editor; @@ -2688,7 +2688,7 @@ void AnimationTrackEdit::_gui_input(const Ref<InputEvent> &p_event) { if (!menu) { menu = memnew(PopupMenu); add_child(menu); - menu->connect("id_pressed", this, "_menu_selected"); + menu->connect_compat("id_pressed", this, "_menu_selected"); } menu->clear(); menu->add_icon_item(get_icon("TrackContinuous", "EditorIcons"), TTR("Continuous"), MENU_CALL_MODE_CONTINUOUS); @@ -2707,7 +2707,7 @@ void AnimationTrackEdit::_gui_input(const Ref<InputEvent> &p_event) { if (!menu) { menu = memnew(PopupMenu); add_child(menu); - menu->connect("id_pressed", this, "_menu_selected"); + menu->connect_compat("id_pressed", this, "_menu_selected"); } menu->clear(); menu->add_icon_item(get_icon("InterpRaw", "EditorIcons"), TTR("Nearest"), MENU_INTERPOLATION_NEAREST); @@ -2725,7 +2725,7 @@ void AnimationTrackEdit::_gui_input(const Ref<InputEvent> &p_event) { if (!menu) { menu = memnew(PopupMenu); add_child(menu); - menu->connect("id_pressed", this, "_menu_selected"); + menu->connect_compat("id_pressed", this, "_menu_selected"); } menu->clear(); menu->add_icon_item(get_icon("InterpWrapClamp", "EditorIcons"), TTR("Clamp Loop Interp"), MENU_LOOP_CLAMP); @@ -2820,7 +2820,7 @@ void AnimationTrackEdit::_gui_input(const Ref<InputEvent> &p_event) { if (!menu) { menu = memnew(PopupMenu); add_child(menu); - menu->connect("id_pressed", this, "_menu_selected"); + menu->connect_compat("id_pressed", this, "_menu_selected"); } menu->clear(); @@ -2848,7 +2848,7 @@ void AnimationTrackEdit::_gui_input(const Ref<InputEvent> &p_event) { path = memnew(LineEdit); add_child(path); path->set_as_toplevel(true); - path->connect("text_entered", this, "_path_entered"); + path->connect_compat("text_entered", this, "_path_entered"); } path->set_text(animation->track_get_path(track)); @@ -3111,7 +3111,7 @@ AnimationTrackEdit::AnimationTrackEdit() { play_position->set_mouse_filter(MOUSE_FILTER_PASS); add_child(play_position); play_position->set_anchors_and_margins_preset(PRESET_WIDE); - play_position->connect("draw", this, "_play_position_draw"); + play_position->connect_compat("draw", this, "_play_position_draw"); set_focus_mode(FOCUS_CLICK); set_mouse_filter(MOUSE_FILTER_PASS); //scroll has to work too for selection } @@ -3138,7 +3138,7 @@ AnimationTrackEdit *AnimationTrackEditPlugin::create_value_track_edit(Object *p_ &args[5] }; - Variant::CallError ce; + Callable::CallError ce; return Object::cast_to<AnimationTrackEdit>(get_script_instance()->call("create_value_track_edit", (const Variant **)&argptrs, 6, ce).operator Object *()); } return NULL; @@ -3199,7 +3199,7 @@ void AnimationTrackEditGroup::_notification(int p_what) { } } -void AnimationTrackEditGroup::set_type_and_name(const Ref<Texture> &p_type, const String &p_name, const NodePath &p_node) { +void AnimationTrackEditGroup::set_type_and_name(const Ref<Texture2D> &p_type, const String &p_name, const NodePath &p_node) { icon = p_type; node_name = p_name; node = p_node; @@ -3217,8 +3217,8 @@ Size2 AnimationTrackEditGroup::get_minimum_size() const { void AnimationTrackEditGroup::set_timeline(AnimationTimelineEdit *p_timeline) { timeline = p_timeline; - timeline->connect("zoom_changed", this, "_zoom_changed"); - timeline->connect("name_limit_changed", this, "_zoom_changed"); + timeline->connect_compat("zoom_changed", this, "_zoom_changed"); + timeline->connect_compat("name_limit_changed", this, "_zoom_changed"); } void AnimationTrackEditGroup::set_root(Node *p_root) { @@ -3258,7 +3258,7 @@ void AnimationTrackEditor::set_animation(const Ref<Animation> &p_anim) { track_edits[_get_track_selected()]->release_focus(); } if (animation.is_valid()) { - animation->disconnect("changed", this, "_animation_changed"); + animation->disconnect_compat("changed", this, "_animation_changed"); _clear_selection(); } animation = p_anim; @@ -3268,7 +3268,7 @@ void AnimationTrackEditor::set_animation(const Ref<Animation> &p_anim) { _update_tracks(); if (animation.is_valid()) { - animation->connect("changed", this, "_animation_changed"); + animation->connect_compat("changed", this, "_animation_changed"); hscroll->show(); edit->set_disabled(false); @@ -3311,13 +3311,13 @@ void AnimationTrackEditor::_root_removed(Node *p_root) { void AnimationTrackEditor::set_root(Node *p_root) { if (root) { - root->disconnect("tree_exiting", this, "_root_removed"); + root->disconnect_compat("tree_exiting", this, "_root_removed"); } root = p_root; if (root) { - root->connect("tree_exiting", this, "_root_removed", make_binds(), CONNECT_ONESHOT); + root->connect_compat("tree_exiting", this, "_root_removed", make_binds(), CONNECT_ONESHOT); } _update_tracks(); @@ -4214,7 +4214,7 @@ void AnimationTrackEditor::_update_tracks() { if (!group_sort.has(base_path)) { AnimationTrackEditGroup *g = memnew(AnimationTrackEditGroup); - Ref<Texture> icon = get_icon("Node", "EditorIcons"); + Ref<Texture2D> icon = get_icon("Node", "EditorIcons"); String name = base_path; String tooltip; if (root && root->has_node(base_path)) { @@ -4257,21 +4257,21 @@ void AnimationTrackEditor::_update_tracks() { track_edit->grab_focus(); } - track_edit->connect("timeline_changed", this, "_timeline_changed"); - track_edit->connect("remove_request", this, "_track_remove_request", varray(), CONNECT_DEFERRED); - track_edit->connect("dropped", this, "_dropped_track", varray(), CONNECT_DEFERRED); - track_edit->connect("insert_key", this, "_insert_key_from_track", varray(i), CONNECT_DEFERRED); - track_edit->connect("select_key", this, "_key_selected", varray(i), CONNECT_DEFERRED); - track_edit->connect("deselect_key", this, "_key_deselected", varray(i), CONNECT_DEFERRED); - track_edit->connect("bezier_edit", this, "_bezier_edit", varray(i), CONNECT_DEFERRED); - track_edit->connect("move_selection_begin", this, "_move_selection_begin"); - track_edit->connect("move_selection", this, "_move_selection"); - track_edit->connect("move_selection_commit", this, "_move_selection_commit"); - track_edit->connect("move_selection_cancel", this, "_move_selection_cancel"); + track_edit->connect_compat("timeline_changed", this, "_timeline_changed"); + track_edit->connect_compat("remove_request", this, "_track_remove_request", varray(), CONNECT_DEFERRED); + track_edit->connect_compat("dropped", this, "_dropped_track", varray(), CONNECT_DEFERRED); + track_edit->connect_compat("insert_key", this, "_insert_key_from_track", varray(i), CONNECT_DEFERRED); + track_edit->connect_compat("select_key", this, "_key_selected", varray(i), CONNECT_DEFERRED); + track_edit->connect_compat("deselect_key", this, "_key_deselected", varray(i), CONNECT_DEFERRED); + track_edit->connect_compat("bezier_edit", this, "_bezier_edit", varray(i), CONNECT_DEFERRED); + track_edit->connect_compat("move_selection_begin", this, "_move_selection_begin"); + track_edit->connect_compat("move_selection", this, "_move_selection"); + track_edit->connect_compat("move_selection_commit", this, "_move_selection_commit"); + track_edit->connect_compat("move_selection_cancel", this, "_move_selection_cancel"); - track_edit->connect("duplicate_request", this, "_edit_menu_pressed", varray(EDIT_DUPLICATE_SELECTION), CONNECT_DEFERRED); - track_edit->connect("duplicate_transpose_request", this, "_edit_menu_pressed", varray(EDIT_DUPLICATE_TRANSPOSED), CONNECT_DEFERRED); - track_edit->connect("delete_request", this, "_edit_menu_pressed", varray(EDIT_DELETE_SELECTION), CONNECT_DEFERRED); + track_edit->connect_compat("duplicate_request", this, "_edit_menu_pressed", varray(EDIT_DUPLICATE_SELECTION), CONNECT_DEFERRED); + track_edit->connect_compat("duplicate_transpose_request", this, "_edit_menu_pressed", varray(EDIT_DUPLICATE_TRANSPOSED), CONNECT_DEFERRED); + track_edit->connect_compat("delete_request", this, "_edit_menu_pressed", varray(EDIT_DELETE_SELECTION), CONNECT_DEFERRED); } } @@ -4384,7 +4384,7 @@ void AnimationTrackEditor::_notification(int p_what) { } if (p_what == NOTIFICATION_READY) { - EditorNode::get_singleton()->get_editor_selection()->connect("selection_changed", this, "_selection_changed"); + EditorNode::get_singleton()->get_editor_selection()->connect_compat("selection_changed", this, "_selection_changed"); } if (p_what == NOTIFICATION_VISIBILITY_CHANGED) { @@ -4753,7 +4753,7 @@ void AnimationTrackEditor::_add_method_key(const String &p_method) { Variant arg = E->get().default_arguments[i - first_defarg]; params.push_back(arg); } else { - Variant::CallError ce; + Callable::CallError ce; Variant arg = Variant::construct(E->get().arguments[i].type, NULL, 0, ce); params.push_back(arg); } @@ -5273,7 +5273,7 @@ void AnimationTrackEditor::_edit_menu_pressed(int p_option) { } String text; - Ref<Texture> icon = get_icon("Node", "EditorIcons"); + Ref<Texture2D> icon = get_icon("Node", "EditorIcons"); if (node) { if (has_icon(node->get_class(), "EditorIcons")) { icon = get_icon(node->get_class(), "EditorIcons"); @@ -5813,11 +5813,11 @@ AnimationTrackEditor::AnimationTrackEditor() { timeline = memnew(AnimationTimelineEdit); timeline->set_undo_redo(undo_redo); timeline_vbox->add_child(timeline); - timeline->connect("timeline_changed", this, "_timeline_changed"); - timeline->connect("name_limit_changed", this, "_name_limit_changed"); - timeline->connect("track_added", this, "_add_track"); - timeline->connect("value_changed", this, "_timeline_value_changed"); - timeline->connect("length_changed", this, "_update_length"); + timeline->connect_compat("timeline_changed", this, "_timeline_changed"); + timeline->connect_compat("name_limit_changed", this, "_name_limit_changed"); + timeline->connect_compat("track_added", this, "_add_track"); + timeline->connect_compat("value_changed", this, "_timeline_value_changed"); + timeline->connect_compat("length_changed", this, "_update_length"); scroll = memnew(ScrollContainer); timeline_vbox->add_child(scroll); @@ -5825,7 +5825,7 @@ AnimationTrackEditor::AnimationTrackEditor() { VScrollBar *sb = scroll->get_v_scrollbar(); scroll->remove_child(sb); timeline_scroll->add_child(sb); //move here so timeline and tracks are always aligned - scroll->connect("gui_input", this, "_scroll_input"); + scroll->connect_compat("gui_input", this, "_scroll_input"); bezier_edit = memnew(AnimationBezierTrackEdit); timeline_vbox->add_child(bezier_edit); @@ -5834,14 +5834,14 @@ AnimationTrackEditor::AnimationTrackEditor() { bezier_edit->set_timeline(timeline); bezier_edit->hide(); bezier_edit->set_v_size_flags(SIZE_EXPAND_FILL); - bezier_edit->connect("close_request", this, "_cancel_bezier_edit"); + bezier_edit->connect_compat("close_request", this, "_cancel_bezier_edit"); timeline_vbox->set_custom_minimum_size(Size2(0, 150) * EDSCALE); hscroll = memnew(HScrollBar); hscroll->share(timeline); hscroll->hide(); - hscroll->connect("value_changed", this, "_update_scroll"); + hscroll->connect_compat("value_changed", this, "_update_scroll"); timeline_vbox->add_child(hscroll); timeline->set_hscroll(hscroll); @@ -5858,20 +5858,20 @@ AnimationTrackEditor::AnimationTrackEditor() { imported_anim_warning = memnew(Button); imported_anim_warning->hide(); imported_anim_warning->set_tooltip(TTR("Warning: Editing imported animation")); - imported_anim_warning->connect("pressed", this, "_show_imported_anim_warning"); + imported_anim_warning->connect_compat("pressed", this, "_show_imported_anim_warning"); bottom_hb->add_child(imported_anim_warning); bottom_hb->add_spacer(); selected_filter = memnew(ToolButton); - selected_filter->connect("pressed", this, "_view_group_toggle"); //same function works the same + selected_filter->connect_compat("pressed", this, "_view_group_toggle"); //same function works the same selected_filter->set_toggle_mode(true); selected_filter->set_tooltip(TTR("Only show tracks from nodes selected in tree.")); bottom_hb->add_child(selected_filter); view_group = memnew(ToolButton); - view_group->connect("pressed", this, "_view_group_toggle"); + view_group->connect_compat("pressed", this, "_view_group_toggle"); view_group->set_toggle_mode(true); view_group->set_tooltip(TTR("Group tracks by node or display them as plain list.")); @@ -5893,14 +5893,14 @@ AnimationTrackEditor::AnimationTrackEditor() { step->set_custom_minimum_size(Size2(100, 0) * EDSCALE); step->set_tooltip(TTR("Animation step value.")); bottom_hb->add_child(step); - step->connect("value_changed", this, "_update_step"); + step->connect_compat("value_changed", this, "_update_step"); step->set_read_only(true); snap_mode = memnew(OptionButton); snap_mode->add_item(TTR("Seconds")); snap_mode->add_item(TTR("FPS")); bottom_hb->add_child(snap_mode); - snap_mode->connect("item_selected", this, "_snap_mode_changed"); + snap_mode->connect_compat("item_selected", this, "_snap_mode_changed"); snap_mode->set_disabled(true); bottom_hb->add_child(memnew(VSeparator)); @@ -5945,19 +5945,19 @@ AnimationTrackEditor::AnimationTrackEditor() { edit->get_popup()->add_item(TTR("Optimize Animation"), EDIT_OPTIMIZE_ANIMATION); edit->get_popup()->add_item(TTR("Clean-Up Animation"), EDIT_CLEAN_UP_ANIMATION); - edit->get_popup()->connect("id_pressed", this, "_edit_menu_pressed"); + edit->get_popup()->connect_compat("id_pressed", this, "_edit_menu_pressed"); pick_track = memnew(SceneTreeDialog); add_child(pick_track); pick_track->set_title(TTR("Pick the node that will be animated:")); - pick_track->connect("selected", this, "_new_track_node_selected"); + pick_track->connect_compat("selected", this, "_new_track_node_selected"); prop_selector = memnew(PropertySelector); add_child(prop_selector); - prop_selector->connect("selected", this, "_new_track_property_selected"); + prop_selector->connect_compat("selected", this, "_new_track_property_selected"); method_selector = memnew(PropertySelector); add_child(method_selector); - method_selector->connect("selected", this, "_add_method_key"); + method_selector->connect_compat("selected", this, "_add_method_key"); inserting = false; insert_query = false; @@ -5966,7 +5966,7 @@ AnimationTrackEditor::AnimationTrackEditor() { insert_confirm = memnew(ConfirmationDialog); add_child(insert_confirm); - insert_confirm->connect("confirmed", this, "_confirm_insert_list"); + insert_confirm->connect_compat("confirmed", this, "_confirm_insert_list"); VBoxContainer *icvb = memnew(VBoxContainer); insert_confirm->add_child(icvb); insert_confirm_text = memnew(Label); @@ -5984,7 +5984,7 @@ AnimationTrackEditor::AnimationTrackEditor() { box_selection->set_as_toplevel(true); box_selection->set_mouse_filter(MOUSE_FILTER_IGNORE); box_selection->hide(); - box_selection->connect("draw", this, "_box_selection_draw"); + box_selection->connect_compat("draw", this, "_box_selection_draw"); box_selecting = false; //default plugins @@ -6022,7 +6022,7 @@ AnimationTrackEditor::AnimationTrackEditor() { optimize_max_angle->set_value(22); optimize_dialog->get_ok()->set_text(TTR("Optimize")); - optimize_dialog->connect("confirmed", this, "_edit_menu_pressed", varray(EDIT_CLEAN_UP_ANIMATION_CONFIRM)); + optimize_dialog->connect_compat("confirmed", this, "_edit_menu_pressed", varray(EDIT_CLEAN_UP_ANIMATION_CONFIRM)); // @@ -6048,7 +6048,7 @@ AnimationTrackEditor::AnimationTrackEditor() { cleanup_dialog->set_title(TTR("Clean-Up Animation(s) (NO UNDO!)")); cleanup_dialog->get_ok()->set_text(TTR("Clean-Up")); - cleanup_dialog->connect("confirmed", this, "_edit_menu_pressed", varray(EDIT_CLEAN_UP_ANIMATION_CONFIRM)); + cleanup_dialog->connect_compat("confirmed", this, "_edit_menu_pressed", varray(EDIT_CLEAN_UP_ANIMATION_CONFIRM)); // scale_dialog = memnew(ConfirmationDialog); @@ -6060,7 +6060,7 @@ AnimationTrackEditor::AnimationTrackEditor() { scale->set_max(99999); scale->set_step(0.001); vbc->add_margin_child(TTR("Scale Ratio:"), scale); - scale_dialog->connect("confirmed", this, "_edit_menu_pressed", varray(EDIT_SCALE_CONFIRM)); + scale_dialog->connect_compat("confirmed", this, "_edit_menu_pressed", varray(EDIT_SCALE_CONFIRM)); add_child(scale_dialog); track_copy_dialog = memnew(ConfirmationDialog); @@ -6073,7 +6073,7 @@ AnimationTrackEditor::AnimationTrackEditor() { Button *select_all_button = memnew(Button); select_all_button->set_text(TTR("Select All/None")); - select_all_button->connect("pressed", this, "_select_all_tracks_for_copy"); + select_all_button->connect_compat("pressed", this, "_select_all_tracks_for_copy"); track_vbox->add_child(select_all_button); track_copy_select = memnew(Tree); @@ -6081,7 +6081,7 @@ AnimationTrackEditor::AnimationTrackEditor() { track_copy_select->set_v_size_flags(SIZE_EXPAND_FILL); track_copy_select->set_hide_root(true); track_vbox->add_child(track_copy_select); - track_copy_dialog->connect("confirmed", this, "_edit_menu_pressed", varray(EDIT_COPY_TRACKS_CONFIRM)); + track_copy_dialog->connect_compat("confirmed", this, "_edit_menu_pressed", varray(EDIT_COPY_TRACKS_CONFIRM)); animation_changing_awaiting_update = false; } diff --git a/editor/animation_track_editor.h b/editor/animation_track_editor.h index 79abda2d49..c2660652d6 100644 --- a/editor/animation_track_editor.h +++ b/editor/animation_track_editor.h @@ -158,8 +158,8 @@ class AnimationTrackEdit : public Control { Rect2 remove_rect; Rect2 bezier_edit_rect; - Ref<Texture> type_icon; - Ref<Texture> selected_icon; + Ref<Texture2D> type_icon; + Ref<Texture2D> selected_icon; PopupMenu *menu; @@ -167,7 +167,7 @@ class AnimationTrackEdit : public Control { void _zoom_changed(); - Ref<Texture> icon_cache; + Ref<Texture2D> icon_cache; String path_cache; void _menu_selected(int p_index); @@ -208,8 +208,8 @@ public: virtual void draw_fg(int p_clip_left, int p_clip_right); //helper - void draw_texture_clipped(const Ref<Texture> &p_texture, const Vector2 &p_pos); - void draw_texture_region_clipped(const Ref<Texture> &p_texture, const Rect2 &p_rect, const Rect2 &p_region); + void draw_texture_clipped(const Ref<Texture2D> &p_texture, const Vector2 &p_pos); + void draw_texture_region_clipped(const Ref<Texture2D> &p_texture, const Rect2 &p_rect, const Rect2 &p_region); void draw_rect_clipped(const Rect2 &p_rect, const Color &p_color, bool p_filled = true); int get_track() const; @@ -251,7 +251,7 @@ class AnimationBezierTrackEdit; class AnimationTrackEditGroup : public Control { GDCLASS(AnimationTrackEditGroup, Control); - Ref<Texture> icon; + Ref<Texture2D> icon; String node_name; NodePath node; Node *root; @@ -264,7 +264,7 @@ protected: void _notification(int p_what); public: - void set_type_and_name(const Ref<Texture> &p_type, const String &p_name, const NodePath &p_node); + void set_type_and_name(const Ref<Texture2D> &p_type, const String &p_name, const NodePath &p_node); virtual Size2 get_minimum_size() const; void set_timeline(AnimationTimelineEdit *p_timeline); void set_root(Node *p_root); diff --git a/editor/animation_track_editor_plugins.cpp b/editor/animation_track_editor_plugins.cpp index bb008e621e..b94d1645db 100644 --- a/editor/animation_track_editor_plugins.cpp +++ b/editor/animation_track_editor_plugins.cpp @@ -42,12 +42,12 @@ /// BOOL /// int AnimationTrackEditBool::get_key_height() const { - Ref<Texture> checked = get_icon("checked", "CheckBox"); + Ref<Texture2D> checked = get_icon("checked", "CheckBox"); return checked->get_height(); } Rect2 AnimationTrackEditBool::get_key_rect(int p_index, float p_pixels_sec) { - Ref<Texture> checked = get_icon("checked", "CheckBox"); + Ref<Texture2D> checked = get_icon("checked", "CheckBox"); return Rect2(-checked->get_width() / 2, 0, checked->get_width(), get_size().height); } @@ -58,7 +58,7 @@ bool AnimationTrackEditBool::is_key_selectable_by_distance() const { void AnimationTrackEditBool::draw_key(int p_index, float p_pixels_sec, int p_x, bool p_selected, int p_clip_left, int p_clip_right) { bool checked = get_animation()->track_get_key_value(get_track(), p_index); - Ref<Texture> icon = get_icon(checked ? "checked" : "unchecked", "CheckBox"); + Ref<Texture2D> icon = get_icon(checked ? "checked" : "unchecked", "CheckBox"); Vector2 ofs(p_x - icon->get_width() / 2, int(get_size().height - icon->get_height()) / 2); @@ -334,7 +334,7 @@ void AnimationTrackEditAudio::_bind_methods() { } AnimationTrackEditAudio::AnimationTrackEditAudio() { - AudioStreamPreviewGenerator::get_singleton()->connect("preview_updated", this, "_preview_changed"); + AudioStreamPreviewGenerator::get_singleton()->connect_compat("preview_updated", this, "_preview_changed"); } /// SPRITE FRAME / FRAME_COORDS /// @@ -360,7 +360,7 @@ Rect2 AnimationTrackEditSpriteFrame::get_key_rect(int p_index, float p_pixels_se if (Object::cast_to<Sprite>(object) || Object::cast_to<Sprite3D>(object)) { - Ref<Texture> texture = object->call("get_texture"); + Ref<Texture2D> texture = object->call("get_texture"); if (!texture.is_valid()) { return AnimationTrackEdit::get_key_rect(p_index, p_pixels_sec); } @@ -404,7 +404,7 @@ Rect2 AnimationTrackEditSpriteFrame::get_key_rect(int p_index, float p_pixels_se animation = get_animation()->track_get_key_value(animation_track, animaiton_index); } - Ref<Texture> texture = sf->get_frame(animation, frame); + Ref<Texture2D> texture = sf->get_frame(animation, frame); if (!texture.is_valid()) { return AnimationTrackEdit::get_key_rect(p_index, p_pixels_sec); } @@ -434,7 +434,7 @@ void AnimationTrackEditSpriteFrame::draw_key(int p_index, float p_pixels_sec, in return; } - Ref<Texture> texture; + Ref<Texture2D> texture; Rect2 region; if (Object::cast_to<Sprite>(object) || Object::cast_to<Sprite3D>(object)) { @@ -710,13 +710,13 @@ void AnimationTrackEditSubAnim::set_node(Object *p_object) { int AnimationTrackEditVolumeDB::get_key_height() const { - Ref<Texture> volume_texture = get_icon("ColorTrackVu", "EditorIcons"); + Ref<Texture2D> volume_texture = get_icon("ColorTrackVu", "EditorIcons"); return volume_texture->get_height() * 1.2; } void AnimationTrackEditVolumeDB::draw_bg(int p_clip_left, int p_clip_right) { - Ref<Texture> volume_texture = get_icon("ColorTrackVu", "EditorIcons"); + Ref<Texture2D> volume_texture = get_icon("ColorTrackVu", "EditorIcons"); int tex_h = volume_texture->get_height(); int y_from = (get_size().height - tex_h) / 2; @@ -728,7 +728,7 @@ void AnimationTrackEditVolumeDB::draw_bg(int p_clip_left, int p_clip_right) { void AnimationTrackEditVolumeDB::draw_fg(int p_clip_left, int p_clip_right) { - Ref<Texture> volume_texture = get_icon("ColorTrackVu", "EditorIcons"); + Ref<Texture2D> volume_texture = get_icon("ColorTrackVu", "EditorIcons"); int tex_h = volume_texture->get_height(); int y_from = (get_size().height - tex_h) / 2; int db0 = y_from + (24 / 80.0) * tex_h; @@ -763,7 +763,7 @@ void AnimationTrackEditVolumeDB::draw_key_link(int p_index, float p_pixels_sec, to_x = p_clip_right; } - Ref<Texture> volume_texture = get_icon("ColorTrackVu", "EditorIcons"); + Ref<Texture2D> volume_texture = get_icon("ColorTrackVu", "EditorIcons"); int tex_h = volume_texture->get_height(); int y_from = (get_size().height - tex_h) / 2; @@ -949,7 +949,7 @@ void AnimationTrackEditTypeAudio::_bind_methods() { } AnimationTrackEditTypeAudio::AnimationTrackEditTypeAudio() { - AudioStreamPreviewGenerator::get_singleton()->connect("preview_updated", this, "_preview_changed"); + AudioStreamPreviewGenerator::get_singleton()->connect_compat("preview_updated", this, "_preview_changed"); len_resizing = false; } diff --git a/editor/animation_track_editor_plugins.h b/editor/animation_track_editor_plugins.h index 4a21ca4d27..378070a45d 100644 --- a/editor/animation_track_editor_plugins.h +++ b/editor/animation_track_editor_plugins.h @@ -35,8 +35,8 @@ class AnimationTrackEditBool : public AnimationTrackEdit { GDCLASS(AnimationTrackEditBool, AnimationTrackEdit); - Ref<Texture> icon_checked; - Ref<Texture> icon_unchecked; + Ref<Texture2D> icon_checked; + Ref<Texture2D> icon_unchecked; public: virtual int get_key_height() const; diff --git a/editor/array_property_edit.cpp b/editor/array_property_edit.cpp index 8cbc6a8dff..f14b12b132 100644 --- a/editor/array_property_edit.cpp +++ b/editor/array_property_edit.cpp @@ -42,7 +42,7 @@ Variant ArrayPropertyEdit::get_array() const { return Array(); Variant arr = o->get(property); if (!arr.is_array()) { - Variant::CallError ce; + Callable::CallError ce; arr = Variant::construct(default_type, NULL, 0, ce); } return arr; @@ -104,7 +104,7 @@ bool ArrayPropertyEdit::_set(const StringName &p_name, const Variant &p_value) { } else if (newsize > size) { Variant init; - Variant::CallError ce; + Callable::CallError ce; Variant::Type new_type = subtype; if (new_type == Variant::NIL && size) { new_type = arr.get(size - 1).get_type(); @@ -139,7 +139,7 @@ bool ArrayPropertyEdit::_set(const StringName &p_name, const Variant &p_value) { Variant value = arr.get(idx); if (value.get_type() != type && type >= 0 && type < Variant::VARIANT_MAX) { - Variant::CallError ce; + Callable::CallError ce; Variant new_value = Variant::construct(Variant::Type(type), NULL, 0, ce); UndoRedo *ur = EditorNode::get_undo_redo(); diff --git a/editor/code_editor.cpp b/editor/code_editor.cpp index e05ace53da..86631def9d 100644 --- a/editor/code_editor.cpp +++ b/editor/code_editor.cpp @@ -200,7 +200,7 @@ void FindReplaceBar::_replace() { void FindReplaceBar::_replace_all() { - text_edit->disconnect("text_changed", this, "_editor_text_changed"); + text_edit->disconnect_compat("text_changed", this, "_editor_text_changed"); // Line as x so it gets priority in comparison, column as y. Point2i orig_cursor(text_edit->cursor_get_line(), text_edit->cursor_get_column()); Point2i prev_match = Point2(-1, -1); @@ -280,7 +280,7 @@ void FindReplaceBar::_replace_all() { matches_label->add_color_override("font_color", rc > 0 ? get_color("font_color", "Label") : get_color("error_color", "Editor")); matches_label->set_text(vformat(TTR("%d replaced."), rc)); - text_edit->call_deferred("connect", "text_changed", this, "_editor_text_changed"); + text_edit->call_deferred("connect", "text_changed", Callable(this, "_editor_text_changed")); results_count = -1; } @@ -517,6 +517,11 @@ void FindReplaceBar::_replace_text_entered(const String &p_text) { if (selection_only->is_pressed() && text_edit->is_selection_active()) { _replace_all(); _hide_bar(); + } else if (Input::get_singleton()->is_key_pressed(KEY_SHIFT)) { + _replace(); + search_prev(); + } else { + _replace(); } } @@ -554,7 +559,7 @@ void FindReplaceBar::set_text_edit(TextEdit *p_text_edit) { results_count = -1; text_edit = p_text_edit; - text_edit->connect("text_changed", this, "_editor_text_changed"); + text_edit->connect_compat("text_changed", this, "_editor_text_changed"); } void FindReplaceBar::_bind_methods() { @@ -608,8 +613,8 @@ FindReplaceBar::FindReplaceBar() { search_text = memnew(LineEdit); vbc_lineedit->add_child(search_text); search_text->set_custom_minimum_size(Size2(100 * EDSCALE, 0)); - search_text->connect("text_changed", this, "_search_text_changed"); - search_text->connect("text_entered", this, "_search_text_entered"); + search_text->connect_compat("text_changed", this, "_search_text_changed"); + search_text->connect_compat("text_entered", this, "_search_text_entered"); matches_label = memnew(Label); hbc_button_search->add_child(matches_label); @@ -618,51 +623,51 @@ FindReplaceBar::FindReplaceBar() { find_prev = memnew(ToolButton); hbc_button_search->add_child(find_prev); find_prev->set_focus_mode(FOCUS_NONE); - find_prev->connect("pressed", this, "_search_prev"); + find_prev->connect_compat("pressed", this, "_search_prev"); find_next = memnew(ToolButton); hbc_button_search->add_child(find_next); find_next->set_focus_mode(FOCUS_NONE); - find_next->connect("pressed", this, "_search_next"); + find_next->connect_compat("pressed", this, "_search_next"); case_sensitive = memnew(CheckBox); hbc_option_search->add_child(case_sensitive); case_sensitive->set_text(TTR("Match Case")); case_sensitive->set_focus_mode(FOCUS_NONE); - case_sensitive->connect("toggled", this, "_search_options_changed"); + case_sensitive->connect_compat("toggled", this, "_search_options_changed"); whole_words = memnew(CheckBox); hbc_option_search->add_child(whole_words); whole_words->set_text(TTR("Whole Words")); whole_words->set_focus_mode(FOCUS_NONE); - whole_words->connect("toggled", this, "_search_options_changed"); + whole_words->connect_compat("toggled", this, "_search_options_changed"); // replace toolbar replace_text = memnew(LineEdit); vbc_lineedit->add_child(replace_text); replace_text->set_custom_minimum_size(Size2(100 * EDSCALE, 0)); - replace_text->connect("text_entered", this, "_replace_text_entered"); + replace_text->connect_compat("text_entered", this, "_replace_text_entered"); replace = memnew(Button); hbc_button_replace->add_child(replace); replace->set_text(TTR("Replace")); - replace->connect("pressed", this, "_replace_pressed"); + replace->connect_compat("pressed", this, "_replace_pressed"); replace_all = memnew(Button); hbc_button_replace->add_child(replace_all); replace_all->set_text(TTR("Replace All")); - replace_all->connect("pressed", this, "_replace_all_pressed"); + replace_all->connect_compat("pressed", this, "_replace_all_pressed"); selection_only = memnew(CheckBox); hbc_option_replace->add_child(selection_only); selection_only->set_text(TTR("Selection Only")); selection_only->set_focus_mode(FOCUS_NONE); - selection_only->connect("toggled", this, "_search_options_changed"); + selection_only->connect_compat("toggled", this, "_search_options_changed"); hide_button = memnew(TextureButton); add_child(hide_button); hide_button->set_focus_mode(FOCUS_NONE); - hide_button->connect("pressed", this, "_hide_pressed"); + hide_button->connect_compat("pressed", this, "_hide_pressed"); hide_button->set_v_size_flags(SIZE_SHRINK_CENTER); } @@ -686,6 +691,16 @@ void CodeTextEditor::_input(const Ref<InputEvent> &event) { accept_event(); return; } + if (ED_IS_SHORTCUT("script_text_editor/delete_line", key_event)) { + delete_lines(); + accept_event(); + return; + } + if (ED_IS_SHORTCUT("script_text_editor/clone_down", key_event)) { + clone_lines_down(); + accept_event(); + return; + } } void CodeTextEditor::_text_editor_gui_input(const Ref<InputEvent> &p_event) { @@ -819,8 +834,8 @@ void CodeTextEditor::_complete_request() { text_editor->code_complete(entries, forced); } -Ref<Texture> CodeTextEditor::_get_completion_icon(const ScriptCodeCompletionOption &p_option) { - Ref<Texture> tex; +Ref<Texture2D> CodeTextEditor::_get_completion_icon(const ScriptCodeCompletionOption &p_option) { + Ref<Texture2D> tex; switch (p_option.kind) { case ScriptCodeCompletionOption::KIND_CLASS: { if (has_icon(p_option.display, "EditorIcons")) { @@ -1702,7 +1717,7 @@ CodeTextEditor::CodeTextEditor() { error_column = 0; toggle_scripts_button = memnew(ToolButton); - toggle_scripts_button->connect("pressed", this, "_toggle_scripts_pressed"); + toggle_scripts_button->connect_compat("pressed", this, "_toggle_scripts_pressed"); status_bar->add_child(toggle_scripts_button); toggle_scripts_button->hide(); @@ -1717,15 +1732,15 @@ CodeTextEditor::CodeTextEditor() { scroll->add_child(error); error->set_v_size_flags(SIZE_EXPAND | SIZE_SHRINK_CENTER); error->set_mouse_filter(MOUSE_FILTER_STOP); - error->connect("gui_input", this, "_error_pressed"); - find_replace_bar->connect("error", error, "set_text"); + error->connect_compat("gui_input", this, "_error_pressed"); + find_replace_bar->connect_compat("error", error, "set_text"); // Warnings warning_button = memnew(ToolButton); status_bar->add_child(warning_button); warning_button->set_v_size_flags(SIZE_EXPAND | SIZE_SHRINK_CENTER); warning_button->set_default_cursor_shape(CURSOR_POINTING_HAND); - warning_button->connect("pressed", this, "_warning_button_pressed"); + warning_button->connect_compat("pressed", this, "_warning_button_pressed"); warning_button->set_tooltip(TTR("Warnings")); warning_count_label = memnew(Label); @@ -1737,7 +1752,7 @@ CodeTextEditor::CodeTextEditor() { warning_count_label->set_tooltip(TTR("Warnings")); warning_count_label->add_color_override("font_color", EditorNode::get_singleton()->get_gui_base()->get_color("warning_color", "Editor")); warning_count_label->add_font_override("font", EditorNode::get_singleton()->get_gui_base()->get_font("status_source", "EditorFonts")); - warning_count_label->connect("gui_input", this, "_warning_label_gui_input"); + warning_count_label->connect_compat("gui_input", this, "_warning_label_gui_input"); is_warnings_panel_opened = false; set_warning_nb(0); @@ -1750,10 +1765,10 @@ CodeTextEditor::CodeTextEditor() { line_and_col_txt->set_tooltip(TTR("Line and column numbers.")); line_and_col_txt->set_mouse_filter(MOUSE_FILTER_STOP); - text_editor->connect("gui_input", this, "_text_editor_gui_input"); - text_editor->connect("cursor_changed", this, "_line_col_changed"); - text_editor->connect("text_changed", this, "_text_changed"); - text_editor->connect("request_completion", this, "_complete_request"); + text_editor->connect_compat("gui_input", this, "_text_editor_gui_input"); + text_editor->connect_compat("cursor_changed", this, "_line_col_changed"); + text_editor->connect_compat("text_changed", this, "_text_changed"); + text_editor->connect_compat("request_completion", this, "_complete_request"); Vector<String> cs; cs.push_back("."); cs.push_back(","); @@ -1761,9 +1776,9 @@ CodeTextEditor::CodeTextEditor() { cs.push_back("="); cs.push_back("$"); text_editor->set_completion(true, cs); - idle->connect("timeout", this, "_text_changed_idle_timeout"); + idle->connect_compat("timeout", this, "_text_changed_idle_timeout"); - code_complete_timer->connect("timeout", this, "_code_complete_timer_timeout"); + code_complete_timer->connect_compat("timeout", this, "_code_complete_timer_timeout"); font_resize_val = 0; font_size = EditorSettings::get_singleton()->get("interface/editor/code_font_size"); @@ -1771,7 +1786,7 @@ CodeTextEditor::CodeTextEditor() { add_child(font_resize_timer); font_resize_timer->set_one_shot(true); font_resize_timer->set_wait_time(0.07); - font_resize_timer->connect("timeout", this, "_font_resize_timeout"); + font_resize_timer->connect_compat("timeout", this, "_font_resize_timeout"); - EditorSettings::get_singleton()->connect("settings_changed", this, "_on_settings_change"); + EditorSettings::get_singleton()->connect_compat("settings_changed", this, "_on_settings_change"); } diff --git a/editor/code_editor.h b/editor/code_editor.h index fc06407166..6b733a2b3c 100644 --- a/editor/code_editor.h +++ b/editor/code_editor.h @@ -167,7 +167,7 @@ class CodeTextEditor : public VBoxContainer { void _update_font(); void _complete_request(); - Ref<Texture> _get_completion_icon(const ScriptCodeCompletionOption &p_option); + Ref<Texture2D> _get_completion_icon(const ScriptCodeCompletionOption &p_option); void _font_resize_timeout(); bool _add_font_size(int p_delta); diff --git a/editor/connections_dialog.cpp b/editor/connections_dialog.cpp index 1853133bc7..b309a16858 100644 --- a/editor/connections_dialog.cpp +++ b/editor/connections_dialog.cpp @@ -119,6 +119,9 @@ void ConnectDialog::ok_pressed() { return; } Node *target = tree->get_selected(); + if (!target) { + return; // Nothing selected in the tree, not an error. + } if (target->get_script().is_null()) { if (!target->has_method(dst_method->get_text())) { error->set_text(TTR("Target method not found. Specify a valid method or attach a script to the target node.")); @@ -150,16 +153,6 @@ void ConnectDialog::_tree_node_selected() { } /* - * Called each time a target node is activated within the target node tree. - */ -void ConnectDialog::_tree_item_activated() { - - if (!get_ok()->is_disabled()) { - get_ok()->emit_signal("pressed"); - } -} - -/* * Adds a new parameter bind to connection. */ void ConnectDialog::_add_bind() { @@ -175,6 +168,7 @@ void ConnectDialog::_add_bind() { case Variant::INT: value = 0; break; case Variant::REAL: value = 0.0; break; case Variant::STRING: value = ""; break; + case Variant::STRING_NAME: value = ""; break; case Variant::VECTOR2: value = Vector2(); break; case Variant::RECT2: value = Rect2(); break; case Variant::VECTOR3: value = Vector3(); break; @@ -243,7 +237,6 @@ void ConnectDialog::_bind_methods() { ClassDB::bind_method("_advanced_pressed", &ConnectDialog::_advanced_pressed); ClassDB::bind_method("_cancel", &ConnectDialog::_cancel_pressed); ClassDB::bind_method("_tree_node_selected", &ConnectDialog::_tree_node_selected); - ClassDB::bind_method("_tree_item_activated", &ConnectDialog::_tree_item_activated); ClassDB::bind_method("_add_bind", &ConnectDialog::_add_bind); ClassDB::bind_method("_remove_bind", &ConnectDialog::_remove_bind); ClassDB::bind_method("_update_ok_enabled", &ConnectDialog::_update_ok_enabled); @@ -312,7 +305,7 @@ bool ConnectDialog::is_editing() const { * If creating a connection from scratch, sensible defaults are used. * If editing an existing connection, previous data is retained. */ -void ConnectDialog::init(Connection c, bool bEdit) { +void ConnectDialog::init(ConnectionData c, bool bEdit) { set_hide_on_ok(false); @@ -397,8 +390,8 @@ ConnectDialog::ConnectDialog() { tree = memnew(SceneTreeEditor(false)); tree->set_connecting_signal(true); - tree->get_scene_tree()->connect("item_activated", this, "_tree_item_activated"); - tree->connect("node_selected", this, "_tree_node_selected"); + tree->get_scene_tree()->connect_compat("item_activated", this, "_ok"); + tree->connect_compat("node_selected", this, "_tree_node_selected"); tree->set_connect_to_script_mode(true); Node *mc = vbc_left->add_margin_child(TTR("Connect to Script:"), tree, true); @@ -423,6 +416,7 @@ ConnectDialog::ConnectDialog() { type_list->add_item("int", Variant::INT); type_list->add_item("real", Variant::REAL); type_list->add_item("String", Variant::STRING); + type_list->add_item("StringName", Variant::STRING_NAME); type_list->add_item("Vector2", Variant::VECTOR2); type_list->add_item("Rect2", Variant::RECT2); type_list->add_item("Vector3", Variant::VECTOR3); @@ -437,12 +431,12 @@ ConnectDialog::ConnectDialog() { Button *add_bind = memnew(Button); add_bind->set_text(TTR("Add")); add_bind_hb->add_child(add_bind); - add_bind->connect("pressed", this, "_add_bind"); + add_bind->connect_compat("pressed", this, "_add_bind"); Button *del_bind = memnew(Button); del_bind->set_text(TTR("Remove")); add_bind_hb->add_child(del_bind); - del_bind->connect("pressed", this, "_remove_bind"); + del_bind->connect_compat("pressed", this, "_remove_bind"); vbc_right->add_margin_child(TTR("Add Extra Call Argument:"), add_bind_hb); @@ -455,13 +449,13 @@ ConnectDialog::ConnectDialog() { dst_method = memnew(LineEdit); dst_method->set_h_size_flags(SIZE_EXPAND_FILL); - dst_method->connect("text_entered", this, "_builtin_text_entered"); + dst_method->connect_compat("text_entered", this, "_builtin_text_entered"); dstm_hb->add_child(dst_method); advanced = memnew(CheckButton); dstm_hb->add_child(advanced); advanced->set_text(TTR("Advanced")); - advanced->connect("pressed", this, "_advanced_pressed"); + advanced->connect_compat("pressed", this, "_advanced_pressed"); // Add spacing so the tree and inspector are the same size. Control *spacing = memnew(Control); @@ -533,7 +527,7 @@ void ConnectionsDock::_make_or_edit_connection() { Node *target = selectedNode->get_node(dst_path); ERR_FAIL_COND(!target); - Connection cToMake; + ConnectDialog::ConnectionData cToMake; cToMake.source = connect_dialog->get_source(); cToMake.target = target; cToMake.signal = connect_dialog->get_signal_name(); @@ -563,12 +557,12 @@ void ConnectionsDock::_make_or_edit_connection() { add_script_function = !found_inherited_function; } - PoolStringArray script_function_args; + PackedStringArray script_function_args; if (add_script_function) { // Pick up args here before "it" is deleted by update_tree. script_function_args = it->get_metadata(0).operator Dictionary()["args"]; for (int i = 0; i < cToMake.binds.size(); i++) { - script_function_args.append("extra_arg_" + itos(i) + ":" + Variant::get_type_name(cToMake.binds[i].get_type())); + script_function_args.push_back("extra_arg_" + itos(i) + ":" + Variant::get_type_name(cToMake.binds[i].get_type())); } } @@ -593,7 +587,7 @@ void ConnectionsDock::_make_or_edit_connection() { /* * Creates single connection w/ undo-redo functionality. */ -void ConnectionsDock::_connect(Connection cToMake) { +void ConnectionsDock::_connect(ConnectDialog::ConnectionData cToMake) { Node *source = static_cast<Node *>(cToMake.source); Node *target = static_cast<Node *>(cToMake.target); @@ -603,8 +597,10 @@ void ConnectionsDock::_connect(Connection cToMake) { undo_redo->create_action(vformat(TTR("Connect '%s' to '%s'"), String(cToMake.signal), String(cToMake.method))); - undo_redo->add_do_method(source, "connect", cToMake.signal, target, cToMake.method, cToMake.binds, cToMake.flags); - undo_redo->add_undo_method(source, "disconnect", cToMake.signal, target, cToMake.method); + Callable c(target, cToMake.method); + + undo_redo->add_do_method(source, "connect", cToMake.signal, c, cToMake.binds, cToMake.flags); + undo_redo->add_undo_method(source, "disconnect", cToMake.signal, c); undo_redo->add_do_method(this, "update_tree"); undo_redo->add_undo_method(this, "update_tree"); undo_redo->add_do_method(EditorNode::get_singleton()->get_scene_tree_dock()->get_tree_editor(), "update_tree"); //to force redraw of scene tree @@ -618,13 +614,15 @@ void ConnectionsDock::_connect(Connection cToMake) { */ void ConnectionsDock::_disconnect(TreeItem &item) { - Connection c = item.get_metadata(0); + Connection cd = item.get_metadata(0); + ConnectDialog::ConnectionData c = cd; + ERR_FAIL_COND(c.source != selectedNode); // Shouldn't happen but... Bugcheck. undo_redo->create_action(vformat(TTR("Disconnect '%s' from '%s'"), c.signal, c.method)); - undo_redo->add_do_method(selectedNode, "disconnect", c.signal, c.target, c.method); - undo_redo->add_undo_method(selectedNode, "connect", c.signal, c.target, c.method, c.binds, c.flags); + undo_redo->add_do_method(selectedNode, "disconnect", c.signal, Callable(c.target, c.method)); + undo_redo->add_undo_method(selectedNode, "connect", c.signal, Callable(c.target, c.method), c.binds, c.flags); undo_redo->add_do_method(this, "update_tree"); undo_redo->add_undo_method(this, "update_tree"); undo_redo->add_do_method(EditorNode::get_singleton()->get_scene_tree_dock()->get_tree_editor(), "update_tree"); // To force redraw of scene tree. @@ -649,9 +647,10 @@ void ConnectionsDock::_disconnect_all() { undo_redo->create_action(vformat(TTR("Disconnect all from signal: '%s'"), signalName)); while (child) { - Connection c = child->get_metadata(0); - undo_redo->add_do_method(selectedNode, "disconnect", c.signal, c.target, c.method); - undo_redo->add_undo_method(selectedNode, "connect", c.signal, c.target, c.method, c.binds, c.flags); + Connection cd = child->get_metadata(0); + ConnectDialog::ConnectionData c = cd; + undo_redo->add_do_method(selectedNode, "disconnect", c.signal, Callable(c.target, c.method)); + undo_redo->add_undo_method(selectedNode, "connect", c.signal, Callable(c.target, c.method), c.binds, c.flags); child = child->get_next(); } @@ -728,7 +727,7 @@ void ConnectionsDock::_open_connection_dialog(TreeItem &item) { StringName dst_method = "_on_" + midname + "_" + signal; - Connection c; + ConnectDialog::ConnectionData c; c.source = selectedNode; c.signal = StringName(signalname); c.target = dst_node; @@ -741,7 +740,7 @@ void ConnectionsDock::_open_connection_dialog(TreeItem &item) { /* * Open connection dialog with Connection data to EDIT an existing connection. */ -void ConnectionsDock::_open_connection_dialog(Connection cToEdit) { +void ConnectionsDock::_open_connection_dialog(ConnectDialog::ConnectionData cToEdit) { Node *src = static_cast<Node *>(cToEdit.source); Node *dst = static_cast<Node *>(cToEdit.target); @@ -761,7 +760,8 @@ void ConnectionsDock::_go_to_script(TreeItem &item) { if (_is_item_signal(item)) return; - Connection c = item.get_metadata(0); + Connection cd = item.get_metadata(0); + ConnectDialog::ConnectionData c = cd; ERR_FAIL_COND(c.source != selectedNode); //shouldn't happen but...bugcheck if (!c.target) @@ -903,7 +903,7 @@ void ConnectionsDock::update_tree() { while (base) { List<MethodInfo> node_signals2; - Ref<Texture> icon; + Ref<Texture2D> icon; String name; if (!did_script) { @@ -951,7 +951,7 @@ void ConnectionsDock::update_tree() { StringName signal_name = mi.name; String signaldesc = "("; - PoolStringArray argnames; + PackedStringArray argnames; if (mi.arguments.size()) { for (int i = 0; i < mi.arguments.size(); i++) { @@ -1022,7 +1022,7 @@ void ConnectionsDock::update_tree() { for (List<Object::Connection>::Element *F = connections.front(); F; F = F->next()) { - Object::Connection &c = F->get(); + ConnectDialog::ConnectionData c = F->get(); if (!(c.flags & CONNECT_PERSIST)) continue; @@ -1049,7 +1049,8 @@ void ConnectionsDock::update_tree() { TreeItem *item2 = tree->create_item(item); item2->set_text(0, path); - item2->set_metadata(0, c); + Connection cd = c; + item2->set_metadata(0, cd); item2->set_icon(0, get_icon("Slot", "EditorIcons")); } } @@ -1085,7 +1086,7 @@ ConnectionsDock::ConnectionsDock(EditorNode *p_editor) { vbc->add_child(hb); hb->add_spacer(); hb->add_child(connect_button); - connect_button->connect("pressed", this, "_connect_pressed"); + connect_button->connect_compat("pressed", this, "_connect_pressed"); connect_dialog = memnew(ConnectDialog); connect_dialog->set_as_toplevel(true); @@ -1094,26 +1095,26 @@ ConnectionsDock::ConnectionsDock(EditorNode *p_editor) { disconnect_all_dialog = memnew(ConfirmationDialog); disconnect_all_dialog->set_as_toplevel(true); add_child(disconnect_all_dialog); - disconnect_all_dialog->connect("confirmed", this, "_disconnect_all"); + disconnect_all_dialog->connect_compat("confirmed", this, "_disconnect_all"); disconnect_all_dialog->set_text(TTR("Are you sure you want to remove all connections from this signal?")); signal_menu = memnew(PopupMenu); add_child(signal_menu); - signal_menu->connect("id_pressed", this, "_handle_signal_menu_option"); + signal_menu->connect_compat("id_pressed", this, "_handle_signal_menu_option"); signal_menu->add_item(TTR("Connect..."), CONNECT); signal_menu->add_item(TTR("Disconnect All"), DISCONNECT_ALL); slot_menu = memnew(PopupMenu); add_child(slot_menu); - slot_menu->connect("id_pressed", this, "_handle_slot_menu_option"); + slot_menu->connect_compat("id_pressed", this, "_handle_slot_menu_option"); slot_menu->add_item(TTR("Edit..."), EDIT); slot_menu->add_item(TTR("Go To Method"), GO_TO_SCRIPT); slot_menu->add_item(TTR("Disconnect"), DISCONNECT); - connect_dialog->connect("connected", this, "_make_or_edit_connection"); - tree->connect("item_selected", this, "_tree_item_selected"); - tree->connect("item_activated", this, "_tree_item_activated"); - tree->connect("item_rmb_selected", this, "_rmb_pressed"); + connect_dialog->connect_compat("connected", this, "_make_or_edit_connection"); + tree->connect_compat("item_selected", this, "_tree_item_selected"); + tree->connect_compat("item_activated", this, "_tree_item_activated"); + tree->connect_compat("item_rmb_selected", this, "_rmb_pressed"); add_constant_override("separation", 3 * EDSCALE); } diff --git a/editor/connections_dialog.h b/editor/connections_dialog.h index c30413953a..a4ed68b44e 100644 --- a/editor/connections_dialog.h +++ b/editor/connections_dialog.h @@ -53,6 +53,36 @@ class ConnectDialog : public ConfirmationDialog { GDCLASS(ConnectDialog, ConfirmationDialog); +public: + struct ConnectionData { + Node *source = nullptr; + Node *target = nullptr; + StringName signal; + StringName method; + uint32_t flags = 0; + Vector<Variant> binds; + + ConnectionData() { + } + ConnectionData(const Connection &p_connection) { + source = Object::cast_to<Node>(p_connection.signal.get_object()); + signal = p_connection.signal.get_name(); + target = Object::cast_to<Node>(p_connection.callable.get_object()); + method = p_connection.callable.get_method(); + flags = p_connection.flags; + binds = p_connection.binds; + } + operator Connection() { + Connection c; + c.signal = ::Signal(source, signal); + c.callable = Callable(target, method); + c.flags = flags; + c.binds = binds; + return c; + } + }; + +private: Label *connect_to_label; LineEdit *from_signal; Node *source; @@ -76,7 +106,6 @@ class ConnectDialog : public ConfirmationDialog { void ok_pressed(); void _cancel_pressed(); void _tree_node_selected(); - void _tree_item_activated(); void _add_bind(); void _remove_bind(); void _advanced_pressed(); @@ -99,7 +128,7 @@ public: bool get_oneshot() const; bool is_editing() const; - void init(Connection c, bool bEdit = false); + void init(ConnectionData c, bool bEdit = false); void popup_dialog(const String &p_for_signal); ConnectDialog(); @@ -145,7 +174,7 @@ class ConnectionsDock : public VBoxContainer { Map<StringName, Map<StringName, String> > descr_cache; void _make_or_edit_connection(); - void _connect(Connection cToMake); + void _connect(ConnectDialog::ConnectionData cToMake); void _disconnect(TreeItem &item); void _disconnect_all(); @@ -154,7 +183,7 @@ class ConnectionsDock : public VBoxContainer { bool _is_item_signal(TreeItem &item); void _open_connection_dialog(TreeItem &item); - void _open_connection_dialog(Connection cToEdit); + void _open_connection_dialog(ConnectDialog::ConnectionData cToEdit); void _go_to_script(TreeItem &item); void _handle_signal_menu_option(int option); diff --git a/editor/create_dialog.cpp b/editor/create_dialog.cpp index 4adb3844bc..9584443c75 100644 --- a/editor/create_dialog.cpp +++ b/editor/create_dialog.cpp @@ -459,13 +459,13 @@ void CreateDialog::_notification(int p_what) { switch (p_what) { case NOTIFICATION_ENTER_TREE: { - connect("confirmed", this, "_confirmed"); + connect_compat("confirmed", this, "_confirmed"); search_box->set_right_icon(get_icon("Search", "EditorIcons")); search_box->set_clear_button_enabled(true); favorite->set_icon(get_icon("Favorites", "EditorIcons")); } break; case NOTIFICATION_EXIT_TREE: { - disconnect("confirmed", this, "_confirmed"); + disconnect_compat("confirmed", this, "_confirmed"); } break; case NOTIFICATION_VISIBILITY_CHANGED: { if (is_visible_in_tree()) { @@ -766,8 +766,8 @@ CreateDialog::CreateDialog() { favorites->set_hide_root(true); favorites->set_hide_folding(true); favorites->set_allow_reselect(true); - favorites->connect("cell_selected", this, "_favorite_selected"); - favorites->connect("item_activated", this, "_favorite_activated"); + favorites->connect_compat("cell_selected", this, "_favorite_selected"); + favorites->connect_compat("item_activated", this, "_favorite_activated"); favorites->set_drag_forwarding(this); favorites->add_constant_override("draw_guides", 1); @@ -781,8 +781,8 @@ CreateDialog::CreateDialog() { recent->set_hide_root(true); recent->set_hide_folding(true); recent->set_allow_reselect(true); - recent->connect("cell_selected", this, "_history_selected"); - recent->connect("item_activated", this, "_history_activated"); + recent->connect_compat("cell_selected", this, "_history_selected"); + recent->connect_compat("item_activated", this, "_history_activated"); recent->add_constant_override("draw_guides", 1); VBoxContainer *vbc = memnew(VBoxContainer); @@ -797,23 +797,23 @@ CreateDialog::CreateDialog() { favorite->set_flat(true); favorite->set_toggle_mode(true); search_hb->add_child(favorite); - favorite->connect("pressed", this, "_favorite_toggled"); + favorite->connect_compat("pressed", this, "_favorite_toggled"); vbc->add_margin_child(TTR("Search:"), search_hb); - search_box->connect("text_changed", this, "_text_changed"); - search_box->connect("gui_input", this, "_sbox_input"); + search_box->connect_compat("text_changed", this, "_text_changed"); + search_box->connect_compat("gui_input", this, "_sbox_input"); search_options = memnew(Tree); vbc->add_margin_child(TTR("Matches:"), search_options, true); get_ok()->set_disabled(true); register_text_enter(search_box); set_hide_on_ok(false); - search_options->connect("item_activated", this, "_confirmed"); - search_options->connect("cell_selected", this, "_item_selected"); + search_options->connect_compat("item_activated", this, "_confirmed"); + search_options->connect_compat("cell_selected", this, "_item_selected"); base_type = "Object"; preferred_search_result_type = ""; help_bit = memnew(EditorHelpBit); vbc->add_margin_child(TTR("Description:"), help_bit); - help_bit->connect("request_hide", this, "_closed"); + help_bit->connect_compat("request_hide", this, "_closed"); type_blacklist.insert("PluginScript"); // PluginScript must be initialized before use, which is not possible here type_blacklist.insert("ScriptCreateDialog"); // This is an exposed editor Node that doesn't have an Editor prefix. diff --git a/editor/create_dialog.h b/editor/create_dialog.h index 94ff1b5bb2..a807e50f65 100644 --- a/editor/create_dialog.h +++ b/editor/create_dialog.h @@ -77,7 +77,7 @@ class CreateDialog : public ConfirmationDialog { void _confirmed(); void _text_changed(const String &p_newtext); - Ref<Texture> _get_editor_icon(const String &p_type) const; + Ref<Texture2D> _get_editor_icon(const String &p_type) const; void add_type(const String &p_type, HashMap<String, TreeItem *> &p_types, TreeItem *p_root, TreeItem **to_select); diff --git a/editor/debugger/SCsub b/editor/debugger/SCsub new file mode 100644 index 0000000000..2b1e889fb0 --- /dev/null +++ b/editor/debugger/SCsub @@ -0,0 +1,5 @@ +#!/usr/bin/env python + +Import('env') + +env.add_source_files(env.editor_sources, "*.cpp") diff --git a/editor/debugger/editor_debugger_inspector.cpp b/editor/debugger/editor_debugger_inspector.cpp new file mode 100644 index 0000000000..35d7dda3f4 --- /dev/null +++ b/editor/debugger/editor_debugger_inspector.cpp @@ -0,0 +1,277 @@ +/*************************************************************************/ +/* editor_debugger_inspector.cpp */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*************************************************************************/ + +#include "editor_debugger_inspector.h" + +#include "core/io/marshalls.h" +#include "core/script_debugger_remote.h" +#include "editor/editor_node.h" +#include "scene/debugger/scene_debugger.h" + +bool EditorDebuggerRemoteObject::_set(const StringName &p_name, const Variant &p_value) { + + if (!editable || !prop_values.has(p_name) || String(p_name).begins_with("Constants/")) + return false; + + prop_values[p_name] = p_value; + emit_signal("value_edited", remote_object_id, p_name, p_value); + return true; +} + +bool EditorDebuggerRemoteObject::_get(const StringName &p_name, Variant &r_ret) const { + + if (!prop_values.has(p_name)) + return false; + + r_ret = prop_values[p_name]; + return true; +} + +void EditorDebuggerRemoteObject::_get_property_list(List<PropertyInfo> *p_list) const { + + p_list->clear(); //sorry, no want category + for (const List<PropertyInfo>::Element *E = prop_list.front(); E; E = E->next()) { + p_list->push_back(E->get()); + } +} + +String EditorDebuggerRemoteObject::get_title() { + if (remote_object_id.is_valid()) + return TTR("Remote ") + String(type_name) + ": " + itos(remote_object_id); + else + return "<null>"; +} + +Variant EditorDebuggerRemoteObject::get_variant(const StringName &p_name) { + Variant var; + _get(p_name, var); + return var; +} + +void EditorDebuggerRemoteObject::_bind_methods() { + + ClassDB::bind_method(D_METHOD("get_title"), &EditorDebuggerRemoteObject::get_title); + ClassDB::bind_method(D_METHOD("get_variant"), &EditorDebuggerRemoteObject::get_variant); + ClassDB::bind_method(D_METHOD("clear"), &EditorDebuggerRemoteObject::clear); + ClassDB::bind_method(D_METHOD("get_remote_object_id"), &EditorDebuggerRemoteObject::get_remote_object_id); + + ADD_SIGNAL(MethodInfo("value_edited", PropertyInfo(Variant::INT, "object_id"), PropertyInfo(Variant::STRING, "property"), PropertyInfo("value"))); +} + +EditorDebuggerInspector::EditorDebuggerInspector() { + variables = memnew(EditorDebuggerRemoteObject); + variables->editable = false; +} + +EditorDebuggerInspector::~EditorDebuggerInspector() { + memdelete(variables); +} + +void EditorDebuggerInspector::_bind_methods() { + ClassDB::bind_method(D_METHOD("_object_edited", "name", "value"), &EditorDebuggerInspector::_object_edited); + ClassDB::bind_method(D_METHOD("_object_selected", "id"), &EditorDebuggerInspector::_object_selected); + ADD_SIGNAL(MethodInfo("object_selected", PropertyInfo(Variant::INT, "id"))); + ADD_SIGNAL(MethodInfo("object_edited", PropertyInfo(Variant::INT, "id"), PropertyInfo(Variant::STRING, "property"), PropertyInfo("value"))); + ADD_SIGNAL(MethodInfo("object_property_updated", PropertyInfo(Variant::INT, "id"), PropertyInfo(Variant::STRING, "property"))); +} + +void EditorDebuggerInspector::_notification(int p_what) { + switch (p_what) { + case NOTIFICATION_POSTINITIALIZE: + connect_compat("object_id_selected", this, "_object_selected"); + break; + case NOTIFICATION_ENTER_TREE: + edit(variables); + break; + default: + break; + } +} + +void EditorDebuggerInspector::_object_edited(ObjectID p_id, const String &p_prop, const Variant &p_value) { + + emit_signal("object_edited", p_id, p_prop, p_value); +} + +void EditorDebuggerInspector::_object_selected(ObjectID p_object) { + + emit_signal("object_selected", p_object); +} + +ObjectID EditorDebuggerInspector::add_object(const Array &p_arr) { + EditorDebuggerRemoteObject *debugObj = NULL; + + SceneDebuggerObject obj; + obj.deserialize(p_arr); + ERR_FAIL_COND_V(obj.id.is_null(), ObjectID()); + + if (remote_objects.has(obj.id)) { + debugObj = remote_objects[obj.id]; + } else { + debugObj = memnew(EditorDebuggerRemoteObject); + debugObj->remote_object_id = obj.id; + debugObj->type_name = obj.class_name; + remote_objects[obj.id] = debugObj; + debugObj->connect_compat("value_edited", this, "_object_edited"); + } + + int old_prop_size = debugObj->prop_list.size(); + + debugObj->prop_list.clear(); + int new_props_added = 0; + Set<String> changed; + for (int i = 0; i < obj.properties.size(); i++) { + + PropertyInfo &pinfo = obj.properties[i].first; + Variant &var = obj.properties[i].second; + + if (pinfo.type == Variant::OBJECT) { + if (var.get_type() == Variant::STRING) { + String path = var; + if (path.find("::") != -1) { + // built-in resource + String base_path = path.get_slice("::", 0); + if (ResourceLoader::get_resource_type(base_path) == "PackedScene") { + if (!EditorNode::get_singleton()->is_scene_open(base_path)) { + EditorNode::get_singleton()->load_scene(base_path); + } + } else { + EditorNode::get_singleton()->load_resource(base_path); + } + } + var = ResourceLoader::load(path); + + if (pinfo.hint_string == "Script") { + if (debugObj->get_script() != var) { + debugObj->set_script(REF()); + Ref<Script> script(var); + if (!script.is_null()) { + ScriptInstance *script_instance = script->placeholder_instance_create(debugObj); + debugObj->set_script_and_instance(var, script_instance); + } + } + } + } + } + + //always add the property, since props may have been added or removed + debugObj->prop_list.push_back(pinfo); + + if (!debugObj->prop_values.has(pinfo.name)) { + new_props_added++; + debugObj->prop_values[pinfo.name] = var; + } else { + + if (bool(Variant::evaluate(Variant::OP_NOT_EQUAL, debugObj->prop_values[pinfo.name], var))) { + debugObj->prop_values[pinfo.name] = var; + changed.insert(pinfo.name); + } + } + } + + if (old_prop_size == debugObj->prop_list.size() && new_props_added == 0) { + //only some may have changed, if so, then update those, if exist + for (Set<String>::Element *E = changed.front(); E; E = E->next()) { + emit_signal("object_property_updated", debugObj->remote_object_id, E->get()); + } + } else { + //full update, because props were added or removed + debugObj->update(); + } + return obj.id; +} + +void EditorDebuggerInspector::clear_cache() { + for (Map<ObjectID, EditorDebuggerRemoteObject *>::Element *E = remote_objects.front(); E; E = E->next()) { + EditorNode *editor = EditorNode::get_singleton(); + if (editor->get_editor_history()->get_current() == E->value()->get_instance_id()) { + editor->push_item(NULL); + } + memdelete(E->value()); + } + remote_objects.clear(); +} + +Object *EditorDebuggerInspector::get_object(ObjectID p_id) { + if (remote_objects.has(p_id)) + return remote_objects[p_id]; + return NULL; +} + +void EditorDebuggerInspector::add_stack_variable(const Array &p_array) { + + ScriptDebuggerRemote::ScriptStackVariable var; + var.deserialize(p_array); + String n = var.name; + Variant v = var.value; + + PropertyHint h = PROPERTY_HINT_NONE; + String hs = String(); + + if (v.get_type() == Variant::OBJECT) { + v = Object::cast_to<EncodedObjectAsID>(v)->get_object_id(); + h = PROPERTY_HINT_OBJECT_ID; + hs = "Object"; + } + String type; + switch (var.type) { + case 0: + type = "Locals/"; + break; + case 1: + type = "Members/"; + break; + case 2: + type = "Globals/"; + break; + default: + type = "Unknown/"; + } + + PropertyInfo pinfo; + pinfo.name = type + n; + pinfo.type = v.get_type(); + pinfo.hint = h; + pinfo.hint_string = hs; + + variables->prop_list.push_back(pinfo); + variables->prop_values[type + n] = v; + variables->update(); + edit(variables); +} + +void EditorDebuggerInspector::clear_stack_variables() { + variables->clear(); + variables->update(); +} + +String EditorDebuggerInspector::get_stack_variable(const String &p_var) { + return variables->get_variant(p_var); +} diff --git a/editor/debugger/editor_debugger_inspector.h b/editor/debugger/editor_debugger_inspector.h new file mode 100644 index 0000000000..e1dfbefcf3 --- /dev/null +++ b/editor/debugger/editor_debugger_inspector.h @@ -0,0 +1,98 @@ +/*************************************************************************/ +/* editor_debugger_inspector.h */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*************************************************************************/ + +#ifndef EDITOR_DEBUGGER_INSPECTOR_H +#define EDITOR_DEBUGGER_INSPECTOR_H +#include "editor/editor_inspector.h" + +class EditorDebuggerRemoteObject : public Object { + + GDCLASS(EditorDebuggerRemoteObject, Object); + +protected: + bool _set(const StringName &p_name, const Variant &p_value); + bool _get(const StringName &p_name, Variant &r_ret) const; + void _get_property_list(List<PropertyInfo> *p_list) const; + static void _bind_methods(); + +public: + bool editable = false; + ObjectID remote_object_id; + String type_name; + List<PropertyInfo> prop_list; + Map<StringName, Variant> prop_values; + + ObjectID get_remote_object_id() { return remote_object_id; }; + String get_title(); + + Variant get_variant(const StringName &p_name); + + void clear() { + prop_list.clear(); + prop_values.clear(); + } + + void update() { _change_notify(); } + + EditorDebuggerRemoteObject(){}; +}; + +class EditorDebuggerInspector : public EditorInspector { + + GDCLASS(EditorDebuggerInspector, EditorInspector); + +private: + ObjectID inspected_object_id; + Map<ObjectID, EditorDebuggerRemoteObject *> remote_objects; + EditorDebuggerRemoteObject *variables; + + void _object_selected(ObjectID p_object); + void _object_edited(ObjectID p_id, const String &p_prop, const Variant &p_value); + +protected: + void _notification(int p_what); + static void _bind_methods(); + +public: + EditorDebuggerInspector(); + ~EditorDebuggerInspector(); + + // Remote Object cache + ObjectID add_object(const Array &p_arr); + Object *get_object(ObjectID p_id); + void clear_cache(); + + // Stack Dump variables + String get_stack_variable(const String &p_var); + void add_stack_variable(const Array &p_arr); + void clear_stack_variables(); +}; + +#endif // EDITOR_DEBUGGER_INSPECTOR_H diff --git a/editor/debugger/editor_debugger_node.cpp b/editor/debugger/editor_debugger_node.cpp new file mode 100644 index 0000000000..54708fd908 --- /dev/null +++ b/editor/debugger/editor_debugger_node.cpp @@ -0,0 +1,591 @@ +/*************************************************************************/ +/* editor_debugger_node.cpp */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*************************************************************************/ + +#include "editor_debugger_node.h" + +#include "editor/debugger/editor_debugger_tree.h" +#include "editor/editor_log.h" +#include "editor/editor_node.h" +#include "editor/plugins/script_editor_plugin.h" + +template <typename Func> +void _for_all(TabContainer *p_node, const Func &p_func) { + for (int i = 0; i < p_node->get_tab_count(); i++) { + ScriptEditorDebugger *dbg = Object::cast_to<ScriptEditorDebugger>(p_node->get_tab_control(i)); + ERR_FAIL_COND(!dbg); + p_func(dbg); + } +} + +EditorDebuggerNode *EditorDebuggerNode::singleton = NULL; + +EditorDebuggerNode::EditorDebuggerNode() { + if (!singleton) + singleton = this; + server.instance(); + + add_constant_override("margin_left", -EditorNode::get_singleton()->get_gui_base()->get_stylebox("BottomPanelDebuggerOverride", "EditorStyles")->get_margin(MARGIN_LEFT)); + add_constant_override("margin_right", -EditorNode::get_singleton()->get_gui_base()->get_stylebox("BottomPanelDebuggerOverride", "EditorStyles")->get_margin(MARGIN_RIGHT)); + + tabs = memnew(TabContainer); + tabs->set_tab_align(TabContainer::ALIGN_LEFT); + tabs->set_tabs_visible(false); + tabs->connect_compat("tab_changed", this, "_debugger_changed"); + add_child(tabs); + + Ref<StyleBoxEmpty> empty; + empty.instance(); + tabs->add_style_override("panel", empty); + + auto_switch_remote_scene_tree = EDITOR_DEF("debugger/auto_switch_to_remote_scene_tree", false); + _add_debugger(); + + // Remote scene tree + remote_scene_tree = memnew(EditorDebuggerTree); + remote_scene_tree->connect_compat("object_selected", this, "_remote_object_requested"); + remote_scene_tree->connect_compat("save_node", this, "_save_node_requested"); + EditorNode::get_singleton()->get_scene_tree_dock()->add_remote_tree_editor(remote_scene_tree); + EditorNode::get_singleton()->get_scene_tree_dock()->connect_compat("remote_tree_selected", this, "request_remote_tree"); + + remote_scene_tree_timeout = EDITOR_DEF("debugger/remote_scene_tree_refresh_interval", 1.0); + inspect_edited_object_timeout = EDITOR_DEF("debugger/remote_inspect_refresh_interval", 0.2); + + EditorNode *editor = EditorNode::get_singleton(); + editor->get_undo_redo()->set_method_notify_callback(_method_changeds, this); + editor->get_undo_redo()->set_property_notify_callback(_property_changeds, this); + editor->get_pause_button()->connect_compat("pressed", this, "_paused"); +} + +ScriptEditorDebugger *EditorDebuggerNode::_add_debugger() { + ScriptEditorDebugger *node = memnew(ScriptEditorDebugger(EditorNode::get_singleton())); + + int id = tabs->get_tab_count(); + node->connect_compat("stop_requested", this, "_debugger_wants_stop", varray(id)); + node->connect_compat("stopped", this, "_debugger_stopped", varray(id)); + node->connect_compat("stack_frame_selected", this, "_stack_frame_selected", varray(id)); + node->connect_compat("error_selected", this, "_error_selected", varray(id)); + node->connect_compat("clear_execution", this, "_clear_execution"); + node->connect_compat("breaked", this, "_breaked", varray(id)); + node->connect_compat("remote_tree_updated", this, "_remote_tree_updated", varray(id)); + node->connect_compat("remote_object_updated", this, "_remote_object_updated", varray(id)); + node->connect_compat("remote_object_property_updated", this, "_remote_object_property_updated", varray(id)); + node->connect_compat("remote_object_requested", this, "_remote_object_requested", varray(id)); + + if (tabs->get_tab_count() > 0) { + get_debugger(0)->clear_style(); + } + + tabs->add_child(node); + + node->set_name("Session " + itos(tabs->get_tab_count())); + if (tabs->get_tab_count() > 1) { + node->clear_style(); + tabs->set_tabs_visible(true); + tabs->add_style_override("panel", EditorNode::get_singleton()->get_gui_base()->get_stylebox("DebuggerPanel", "EditorStyles")); + } + + return node; +} + +void EditorDebuggerNode::_stack_frame_selected(int p_debugger) { + const ScriptEditorDebugger *dbg = get_debugger(p_debugger); + ERR_FAIL_COND(!dbg); + if (dbg != get_current_debugger()) + return; + _text_editor_stack_goto(dbg); +} + +void EditorDebuggerNode::_error_selected(const String &p_file, int p_line, int p_debugger) { + Ref<Script> s = ResourceLoader::load(p_file); + emit_signal("goto_script_line", s, p_line - 1); +} + +void EditorDebuggerNode::_text_editor_stack_goto(const ScriptEditorDebugger *p_debugger) { + const String file = p_debugger->get_stack_script_file(); + if (file.empty()) + return; + stack_script = ResourceLoader::load(file); + const int line = p_debugger->get_stack_script_line() - 1; + emit_signal("goto_script_line", stack_script, line); + emit_signal("set_execution", stack_script, line); + stack_script.unref(); // Why?!? +} + +void EditorDebuggerNode::_bind_methods() { + ClassDB::bind_method("_menu_option", &EditorDebuggerNode::_menu_option); + ClassDB::bind_method("_debugger_stopped", &EditorDebuggerNode::_debugger_stopped); + ClassDB::bind_method("_debugger_wants_stop", &EditorDebuggerNode::_debugger_wants_stop); + ClassDB::bind_method("_debugger_changed", &EditorDebuggerNode::_debugger_changed); + ClassDB::bind_method("_stack_frame_selected", &EditorDebuggerNode::_stack_frame_selected); + ClassDB::bind_method("_error_selected", &EditorDebuggerNode::_error_selected); + ClassDB::bind_method("_clear_execution", &EditorDebuggerNode::_clear_execution); + ClassDB::bind_method("_breaked", &EditorDebuggerNode::_breaked); + ClassDB::bind_method("start", &EditorDebuggerNode::start); + ClassDB::bind_method("stop", &EditorDebuggerNode::stop); + ClassDB::bind_method("_paused", &EditorDebuggerNode::_paused); + ClassDB::bind_method("request_remote_tree", &EditorDebuggerNode::request_remote_tree); + ClassDB::bind_method("_remote_tree_updated", &EditorDebuggerNode::_remote_tree_updated); + ClassDB::bind_method("_remote_object_updated", &EditorDebuggerNode::_remote_object_updated); + ClassDB::bind_method("_remote_object_property_updated", &EditorDebuggerNode::_remote_object_property_updated); + ClassDB::bind_method("_remote_object_requested", &EditorDebuggerNode::_remote_object_requested); + ClassDB::bind_method("_save_node_requested", &EditorDebuggerNode::_save_node_requested); + + // LiveDebug. + ClassDB::bind_method("live_debug_create_node", &EditorDebuggerNode::live_debug_create_node); + ClassDB::bind_method("live_debug_instance_node", &EditorDebuggerNode::live_debug_instance_node); + ClassDB::bind_method("live_debug_remove_node", &EditorDebuggerNode::live_debug_remove_node); + ClassDB::bind_method("live_debug_remove_and_keep_node", &EditorDebuggerNode::live_debug_remove_and_keep_node); + ClassDB::bind_method("live_debug_restore_node", &EditorDebuggerNode::live_debug_restore_node); + ClassDB::bind_method("live_debug_duplicate_node", &EditorDebuggerNode::live_debug_duplicate_node); + ClassDB::bind_method("live_debug_reparent_node", &EditorDebuggerNode::live_debug_reparent_node); + + ADD_SIGNAL(MethodInfo("goto_script_line")); + ADD_SIGNAL(MethodInfo("set_execution", PropertyInfo("script"), PropertyInfo(Variant::INT, "line"))); + ADD_SIGNAL(MethodInfo("clear_execution", PropertyInfo("script"))); + ADD_SIGNAL(MethodInfo("breaked", PropertyInfo(Variant::BOOL, "reallydid"), PropertyInfo(Variant::BOOL, "can_debug"))); +} + +EditorDebuggerRemoteObject *EditorDebuggerNode::get_inspected_remote_object() { + return Object::cast_to<EditorDebuggerRemoteObject>(ObjectDB::get_instance(EditorNode::get_singleton()->get_editor_history()->get_current())); +} + +ScriptEditorDebugger *EditorDebuggerNode::get_debugger(int p_id) const { + return Object::cast_to<ScriptEditorDebugger>(tabs->get_tab_control(p_id)); +} + +ScriptEditorDebugger *EditorDebuggerNode::get_current_debugger() const { + return Object::cast_to<ScriptEditorDebugger>(tabs->get_tab_control(tabs->get_current_tab())); +} + +ScriptEditorDebugger *EditorDebuggerNode::get_default_debugger() const { + return Object::cast_to<ScriptEditorDebugger>(tabs->get_tab_control(0)); +} + +Error EditorDebuggerNode::start() { + stop(); + if (EDITOR_GET("run/output/always_open_output_on_play")) { + EditorNode::get_singleton()->make_bottom_panel_item_visible(EditorNode::get_log()); + } else { + EditorNode::get_singleton()->make_bottom_panel_item_visible(this); + } + + int remote_port = (int)EditorSettings::get_singleton()->get("network/debug/remote_port"); + const Error err = server->listen(remote_port); + if (err != OK) { + EditorNode::get_log()->add_message(String("Error listening on port ") + itos(remote_port), EditorLog::MSG_TYPE_ERROR); + return err; + } + set_process(true); + EditorNode::get_log()->add_message("--- Debugging process started ---", EditorLog::MSG_TYPE_EDITOR); + return OK; +} + +void EditorDebuggerNode::stop() { + if (server->is_listening()) { + server->stop(); + EditorNode::get_log()->add_message("--- Debugging process stopped ---", EditorLog::MSG_TYPE_EDITOR); + } + // Also close all debugging sessions. + _for_all(tabs, [&](ScriptEditorDebugger *dbg) { + if (dbg->is_session_active()) + dbg->stop(); + }); + _break_state_changed(); + if (hide_on_stop) { + if (is_visible_in_tree()) + EditorNode::get_singleton()->hide_bottom_panel(); + } + breakpoints.clear(); + set_process(false); +} + +void EditorDebuggerNode::_notification(int p_what) { + switch (p_what) { + case NOTIFICATION_ENTER_TREE: { + EditorNode::get_singleton()->connect_compat("play_pressed", this, "start"); + EditorNode::get_singleton()->connect_compat("stop_pressed", this, "stop"); + } break; + case NOTIFICATION_EXIT_TREE: { + EditorNode::get_singleton()->disconnect_compat("play_pressed", this, "start"); + EditorNode::get_singleton()->disconnect_compat("stop_pressed", this, "stop"); + } break; + case EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED: { + if (tabs->get_tab_count() > 1) { + add_constant_override("margin_left", -EditorNode::get_singleton()->get_gui_base()->get_stylebox("BottomPanelDebuggerOverride", "EditorStyles")->get_margin(MARGIN_LEFT)); + add_constant_override("margin_right", -EditorNode::get_singleton()->get_gui_base()->get_stylebox("BottomPanelDebuggerOverride", "EditorStyles")->get_margin(MARGIN_RIGHT)); + + tabs->add_style_override("panel", EditorNode::get_singleton()->get_gui_base()->get_stylebox("DebuggerPanel", "EditorStyles")); + } + } break; + default: + break; + } + + if (p_what != NOTIFICATION_PROCESS || !server->is_listening()) + return; + + // Errors and warnings + int error_count = 0; + int warning_count = 0; + _for_all(tabs, [&](ScriptEditorDebugger *dbg) { + error_count += dbg->get_error_count(); + warning_count += dbg->get_warning_count(); + }); + + if (error_count != last_error_count || warning_count != last_warning_count) { + + _for_all(tabs, [&](ScriptEditorDebugger *dbg) { + dbg->update_tabs(); + }); + + if (error_count == 0 && warning_count == 0) { + debugger_button->set_text(TTR("Debugger")); + debugger_button->set_icon(Ref<Texture2D>()); + } else { + debugger_button->set_text(TTR("Debugger") + " (" + itos(error_count + warning_count) + ")"); + if (error_count == 0) { + debugger_button->set_icon(get_icon("Warning", "EditorIcons")); + } else { + debugger_button->set_icon(get_icon("Error", "EditorIcons")); + } + } + last_error_count = error_count; + last_warning_count = warning_count; + } + + // Remote scene tree update + remote_scene_tree_timeout -= get_process_delta_time(); + if (remote_scene_tree_timeout < 0) { + remote_scene_tree_timeout = EditorSettings::get_singleton()->get("debugger/remote_scene_tree_refresh_interval"); + if (remote_scene_tree->is_visible_in_tree()) { + get_current_debugger()->request_remote_tree(); + } + } + + // Remote inspector update + inspect_edited_object_timeout -= get_process_delta_time(); + if (inspect_edited_object_timeout < 0) { + inspect_edited_object_timeout = EditorSettings::get_singleton()->get("debugger/remote_inspect_refresh_interval"); + if (EditorDebuggerRemoteObject *obj = get_inspected_remote_object()) { + get_current_debugger()->request_remote_object(obj->remote_object_id); + } + } + + // Take connections. + if (server->is_connection_available()) { + ScriptEditorDebugger *debugger = NULL; + _for_all(tabs, [&](ScriptEditorDebugger *dbg) { + if (debugger || dbg->is_session_active()) + return; + debugger = dbg; + }); + if (debugger == NULL) { + if (tabs->get_tab_count() <= 4) { // Max 4 debugging sessions active. + debugger = _add_debugger(); + } else { + // We already have too many sessions, disconnecting new clients to prevent it from hanging. + // (Not keeping a reference to the connection will disconnect it) + server->take_connection(); + return; // Can't add, stop here. + } + } + + EditorNode::get_singleton()->get_pause_button()->set_disabled(false); + // Switch to remote tree view if so desired. + auto_switch_remote_scene_tree = (bool)EditorSettings::get_singleton()->get("debugger/auto_switch_to_remote_scene_tree"); + if (auto_switch_remote_scene_tree) { + EditorNode::get_singleton()->get_scene_tree_dock()->show_remote_tree(); + } + // Good to go. + EditorNode::get_singleton()->get_scene_tree_dock()->show_tab_buttons(); + debugger->set_editor_remote_tree(remote_scene_tree); + debugger->start(server->take_connection()); + // Send breakpoints. + for (Map<Breakpoint, bool>::Element *E = breakpoints.front(); E; E = E->next()) { + const Breakpoint &bp = E->key(); + debugger->set_breakpoint(bp.source, bp.line, E->get()); + } // Will arrive too late, how does the regular run work? + + debugger->update_live_edit_root(); + } +} + +void EditorDebuggerNode::_debugger_stopped(int p_id) { + ScriptEditorDebugger *dbg = get_debugger(p_id); + ERR_FAIL_COND(!dbg); + + bool found = false; + _for_all(tabs, [&](ScriptEditorDebugger *p_debugger) { + if (p_debugger->is_session_active()) + found = true; + }); + if (!found) { + EditorNode::get_singleton()->get_pause_button()->set_pressed(false); + EditorNode::get_singleton()->get_pause_button()->set_disabled(true); + EditorNode::get_singleton()->get_scene_tree_dock()->hide_remote_tree(); + EditorNode::get_singleton()->get_scene_tree_dock()->hide_tab_buttons(); + EditorNode::get_singleton()->notify_all_debug_sessions_exited(); + } +} + +void EditorDebuggerNode::_debugger_wants_stop(int p_id) { + // Ask editor to kill PID. + int pid = get_debugger(p_id)->get_remote_pid(); + if (pid) + EditorNode::get_singleton()->call_deferred("stop_child_process", pid); +} + +void EditorDebuggerNode::_debugger_changed(int p_tab) { + if (get_inspected_remote_object()) { + // Clear inspected object, you can only inspect objects in selected debugger. + // Hopefully, in the future, we will have one inspector per debugger. + EditorNode::get_singleton()->push_item(NULL); + } + if (remote_scene_tree->is_visible_in_tree()) { + get_current_debugger()->request_remote_tree(); + } + if (get_current_debugger()->is_breaked()) { + _text_editor_stack_goto(get_current_debugger()); + } +} + +void EditorDebuggerNode::set_script_debug_button(MenuButton *p_button) { + script_menu = p_button; + script_menu->set_text(TTR("Debug")); + script_menu->set_switch_on_hover(true); + PopupMenu *p = script_menu->get_popup(); + p->set_hide_on_window_lose_focus(true); + p->add_shortcut(ED_GET_SHORTCUT("debugger/step_into"), DEBUG_STEP); + p->add_shortcut(ED_GET_SHORTCUT("debugger/step_over"), DEBUG_NEXT); + p->add_separator(); + p->add_shortcut(ED_GET_SHORTCUT("debugger/break"), DEBUG_BREAK); + p->add_shortcut(ED_GET_SHORTCUT("debugger/continue"), DEBUG_CONTINUE); + p->add_separator(); + p->add_check_shortcut(ED_GET_SHORTCUT("debugger/keep_debugger_open"), DEBUG_SHOW_KEEP_OPEN); + p->add_check_shortcut(ED_GET_SHORTCUT("debugger/debug_with_external_editor"), DEBUG_WITH_EXTERNAL_EDITOR); + p->connect_compat("id_pressed", this, "_menu_option"); + + _break_state_changed(); + script_menu->show(); +} + +void EditorDebuggerNode::_break_state_changed() { + const bool breaked = get_current_debugger()->is_breaked(); + const bool can_debug = get_current_debugger()->is_debuggable(); + if (breaked) // Show debugger. + EditorNode::get_singleton()->make_bottom_panel_item_visible(this); + + // Update script menu. + if (!script_menu) + return; + PopupMenu *p = script_menu->get_popup(); + p->set_item_disabled(p->get_item_index(DEBUG_NEXT), !(breaked && can_debug)); + p->set_item_disabled(p->get_item_index(DEBUG_STEP), !(breaked && can_debug)); + p->set_item_disabled(p->get_item_index(DEBUG_BREAK), breaked); + p->set_item_disabled(p->get_item_index(DEBUG_CONTINUE), !breaked); +} + +void EditorDebuggerNode::_menu_option(int p_id) { + switch (p_id) { + case DEBUG_NEXT: { + debug_next(); + } break; + case DEBUG_STEP: { + debug_step(); + } break; + case DEBUG_BREAK: { + debug_break(); + } break; + case DEBUG_CONTINUE: { + debug_continue(); + } break; + + case DEBUG_SHOW_KEEP_OPEN: { + bool visible = script_menu->get_popup()->is_item_checked(script_menu->get_popup()->get_item_index(DEBUG_SHOW_KEEP_OPEN)); + hide_on_stop = visible; + script_menu->get_popup()->set_item_checked(script_menu->get_popup()->get_item_index(DEBUG_SHOW_KEEP_OPEN), !visible); + } break; + case DEBUG_WITH_EXTERNAL_EDITOR: { + bool checked = !script_menu->get_popup()->is_item_checked(script_menu->get_popup()->get_item_index(DEBUG_WITH_EXTERNAL_EDITOR)); + debug_with_external_editor = checked; + script_menu->get_popup()->set_item_checked(script_menu->get_popup()->get_item_index(DEBUG_WITH_EXTERNAL_EDITOR), checked); + } break; + } +} + +void EditorDebuggerNode::_paused() { + const bool paused = EditorNode::get_singleton()->get_pause_button()->is_pressed(); + _for_all(tabs, [&](ScriptEditorDebugger *dbg) { + if (paused && !dbg->is_breaked()) { + dbg->debug_break(); + } else if (!paused && dbg->is_breaked()) { + dbg->debug_continue(); + } + }); +} + +void EditorDebuggerNode::_breaked(bool p_breaked, bool p_can_debug, int p_debugger) { + if (get_current_debugger() != get_debugger(p_debugger)) { + if (!p_breaked) + return; + tabs->set_current_tab(p_debugger); + } + _break_state_changed(); + EditorNode::get_singleton()->get_pause_button()->set_pressed(p_breaked); + emit_signal("breaked", p_breaked, p_can_debug); +} + +bool EditorDebuggerNode::is_skip_breakpoints() const { + return get_default_debugger()->is_skip_breakpoints(); +} + +void EditorDebuggerNode::set_breakpoint(const String &p_path, int p_line, bool p_enabled) { + breakpoints[Breakpoint(p_path, p_line)] = p_enabled; + _for_all(tabs, [&](ScriptEditorDebugger *dbg) { + dbg->set_breakpoint(p_path, p_line, p_enabled); + }); +} + +void EditorDebuggerNode::reload_scripts() { + _for_all(tabs, [&](ScriptEditorDebugger *dbg) { + dbg->reload_scripts(); + }); +} + +// LiveEdit/Inspector +void EditorDebuggerNode::request_remote_tree() { + get_current_debugger()->request_remote_tree(); +} + +void EditorDebuggerNode::_remote_tree_updated(int p_debugger) { + if (p_debugger != tabs->get_current_tab()) + return; + remote_scene_tree->clear(); + remote_scene_tree->update_scene_tree(get_current_debugger()->get_remote_tree(), p_debugger); +} + +void EditorDebuggerNode::_remote_object_updated(ObjectID p_id, int p_debugger) { + if (p_debugger != tabs->get_current_tab()) + return; + if (EditorDebuggerRemoteObject *obj = get_inspected_remote_object()) { + if (obj->remote_object_id == p_id) + return; // Already being edited + } + + EditorNode::get_singleton()->push_item(get_current_debugger()->get_remote_object(p_id)); +} + +void EditorDebuggerNode::_remote_object_property_updated(ObjectID p_id, const String &p_property, int p_debugger) { + if (p_debugger != tabs->get_current_tab()) + return; + if (EditorDebuggerRemoteObject *obj = get_inspected_remote_object()) { + if (obj->remote_object_id != p_id) + return; + EditorNode::get_singleton()->get_inspector()->update_property(p_property); + } +} + +void EditorDebuggerNode::_remote_object_requested(ObjectID p_id, int p_debugger) { + if (p_debugger != tabs->get_current_tab()) + return; + inspect_edited_object_timeout = 0.7; // Temporarily disable timeout to avoid multiple requests. + get_current_debugger()->request_remote_object(p_id); +} + +void EditorDebuggerNode::_save_node_requested(ObjectID p_id, const String &p_file, int p_debugger) { + if (p_debugger != tabs->get_current_tab()) + return; + get_current_debugger()->save_node(p_id, p_file); +} + +// Remote inspector/edit. +void EditorDebuggerNode::_method_changeds(void *p_ud, Object *p_base, const StringName &p_name, VARIANT_ARG_DECLARE) { + if (!singleton) + return; + _for_all(singleton->tabs, [&](ScriptEditorDebugger *dbg) { + dbg->_method_changed(p_base, p_name, VARIANT_ARG_PASS); + }); +} + +void EditorDebuggerNode::_property_changeds(void *p_ud, Object *p_base, const StringName &p_property, const Variant &p_value) { + if (!singleton) + return; + _for_all(singleton->tabs, [&](ScriptEditorDebugger *dbg) { + dbg->_property_changed(p_base, p_property, p_value); + }); +} + +// LiveDebug +void EditorDebuggerNode::set_live_debugging(bool p_enabled) { + + _for_all(tabs, [&](ScriptEditorDebugger *dbg) { + dbg->set_live_debugging(p_enabled); + }); +} +void EditorDebuggerNode::update_live_edit_root() { + _for_all(tabs, [&](ScriptEditorDebugger *dbg) { + dbg->update_live_edit_root(); + }); +} +void EditorDebuggerNode::live_debug_create_node(const NodePath &p_parent, const String &p_type, const String &p_name) { + _for_all(tabs, [&](ScriptEditorDebugger *dbg) { + dbg->live_debug_create_node(p_parent, p_type, p_name); + }); +} +void EditorDebuggerNode::live_debug_instance_node(const NodePath &p_parent, const String &p_path, const String &p_name) { + _for_all(tabs, [&](ScriptEditorDebugger *dbg) { + dbg->live_debug_instance_node(p_parent, p_path, p_name); + }); +} +void EditorDebuggerNode::live_debug_remove_node(const NodePath &p_at) { + _for_all(tabs, [&](ScriptEditorDebugger *dbg) { + dbg->live_debug_remove_node(p_at); + }); +} +void EditorDebuggerNode::live_debug_remove_and_keep_node(const NodePath &p_at, ObjectID p_keep_id) { + _for_all(tabs, [&](ScriptEditorDebugger *dbg) { + dbg->live_debug_remove_and_keep_node(p_at, p_keep_id); + }); +} +void EditorDebuggerNode::live_debug_restore_node(ObjectID p_id, const NodePath &p_at, int p_at_pos) { + _for_all(tabs, [&](ScriptEditorDebugger *dbg) { + dbg->live_debug_restore_node(p_id, p_at, p_at_pos); + }); +} +void EditorDebuggerNode::live_debug_duplicate_node(const NodePath &p_at, const String &p_new_name) { + _for_all(tabs, [&](ScriptEditorDebugger *dbg) { + dbg->live_debug_duplicate_node(p_at, p_new_name); + }); +} +void EditorDebuggerNode::live_debug_reparent_node(const NodePath &p_at, const NodePath &p_new_place, const String &p_new_name, int p_at_pos) { + _for_all(tabs, [&](ScriptEditorDebugger *dbg) { + dbg->live_debug_reparent_node(p_at, p_new_place, p_new_name, p_at_pos); + }); +} diff --git a/editor/debugger/editor_debugger_node.h b/editor/debugger/editor_debugger_node.h new file mode 100644 index 0000000000..13a1d6dcb3 --- /dev/null +++ b/editor/debugger/editor_debugger_node.h @@ -0,0 +1,177 @@ +/*************************************************************************/ +/* editor_debugger_node.h */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*************************************************************************/ + +#ifndef EDITOR_DEBUGGER_NODE_H +#define EDITOR_DEBUGGER_NODE_H + +#include "core/io/tcp_server.h" +#include "editor/debugger/script_editor_debugger.h" +#include "scene/gui/button.h" +#include "scene/gui/tab_container.h" + +class EditorDebuggerTree; + +class EditorDebuggerNode : public MarginContainer { + + GDCLASS(EditorDebuggerNode, MarginContainer); + +private: + enum Options { + DEBUG_NEXT, + DEBUG_STEP, + DEBUG_BREAK, + DEBUG_CONTINUE, + DEBUG_SHOW_KEEP_OPEN, + DEBUG_WITH_EXTERNAL_EDITOR, + }; + + class Breakpoint { + public: + String source; + int line = 0; + + bool operator<(const Breakpoint &p_b) const { + if (line == p_b.line) + return source < p_b.source; + return line < p_b.line; + } + + Breakpoint(){}; + + Breakpoint(const String &p_source, int p_line) { + line = p_line; + source = p_source; + } + }; + + Ref<TCP_Server> server = NULL; + TabContainer *tabs = NULL; + Button *debugger_button = NULL; + MenuButton *script_menu = NULL; + + Ref<Script> stack_script; // Why?!? + + int last_error_count = 0; + int last_warning_count = 0; + + float inspect_edited_object_timeout = 0; + EditorDebuggerTree *remote_scene_tree = NULL; + float remote_scene_tree_timeout = 0.0; + bool auto_switch_remote_scene_tree = false; + bool debug_with_external_editor = false; + bool hide_on_stop = true; + ScriptEditorDebugger::CameraOverride camera_override = ScriptEditorDebugger::OVERRIDE_NONE; + Map<Breakpoint, bool> breakpoints; + + ScriptEditorDebugger *_add_debugger(); + EditorDebuggerRemoteObject *get_inspected_remote_object(); + + friend class DebuggerEditorPlugin; + static EditorDebuggerNode *singleton; + EditorDebuggerNode(); + +protected: + void _debugger_stopped(int p_id); + void _debugger_wants_stop(int p_id); + void _debugger_changed(int p_tab); + void _remote_tree_updated(int p_debugger); + void _remote_object_updated(ObjectID p_id, int p_debugger); + void _remote_object_property_updated(ObjectID p_id, const String &p_property, int p_debugger); + void _remote_object_requested(ObjectID p_id, int p_debugger); + void _save_node_requested(ObjectID p_id, const String &p_file, int p_debugger); + + void _clear_execution(REF p_script) { + emit_signal("clear_execution", p_script); + } + + void _text_editor_stack_goto(const ScriptEditorDebugger *p_debugger); + void _stack_frame_selected(int p_debugger); + void _error_selected(const String &p_file, int p_line, int p_debugger); + void _breaked(bool p_breaked, bool p_can_debug, int p_debugger); + void _paused(); + void _break_state_changed(); + void _menu_option(int p_id); + +protected: + void _notification(int p_what); + static void _bind_methods(); + +public: + static EditorDebuggerNode *get_singleton() { return singleton; } + + ScriptEditorDebugger *get_current_debugger() const; + ScriptEditorDebugger *get_default_debugger() const; + ScriptEditorDebugger *get_debugger(int p_debugger) const; + + void debug_next() { get_default_debugger()->debug_next(); } + void debug_step() { get_default_debugger()->debug_step(); } + void debug_break() { get_default_debugger()->debug_break(); } + void debug_continue() { get_default_debugger()->debug_continue(); } + + void set_script_debug_button(MenuButton *p_button); + + void set_tool_button(Button *p_button) { + debugger_button = p_button; + } + + String get_var_value(const String &p_var) const { return get_default_debugger()->get_var_value(p_var); } + Ref<Script> get_dump_stack_script() const { return stack_script; } // Why do we need this? + + bool get_debug_with_external_editor() { return debug_with_external_editor; } + + bool is_skip_breakpoints() const; + void set_breakpoint(const String &p_path, int p_line, bool p_enabled); + void reload_scripts(); + + // Remote inspector/edit. + void request_remote_tree(); + static void _method_changeds(void *p_ud, Object *p_base, const StringName &p_name, VARIANT_ARG_DECLARE); + static void _property_changeds(void *p_ud, Object *p_base, const StringName &p_property, const Variant &p_value); + + // LiveDebug + void set_live_debugging(bool p_enabled); + void update_live_edit_root(); + void live_debug_create_node(const NodePath &p_parent, const String &p_type, const String &p_name); + void live_debug_instance_node(const NodePath &p_parent, const String &p_path, const String &p_name); + void live_debug_remove_node(const NodePath &p_at); + void live_debug_remove_and_keep_node(const NodePath &p_at, ObjectID p_keep_id); + void live_debug_restore_node(ObjectID p_id, const NodePath &p_at, int p_at_pos); + void live_debug_duplicate_node(const NodePath &p_at, const String &p_new_name); + void live_debug_reparent_node(const NodePath &p_at, const NodePath &p_new_place, const String &p_new_name, int p_at_pos); + + // Camera + void set_camera_override(ScriptEditorDebugger::CameraOverride p_override) { camera_override = p_override; } + ScriptEditorDebugger::CameraOverride get_camera_override() { return camera_override; } + + Error start(); + + void stop(); +}; +#endif // EDITOR_DEBUGGER_NODE_H diff --git a/editor/debugger/editor_debugger_tree.cpp b/editor/debugger/editor_debugger_tree.cpp new file mode 100644 index 0000000000..9ba5d0cbe1 --- /dev/null +++ b/editor/debugger/editor_debugger_tree.cpp @@ -0,0 +1,274 @@ +/*************************************************************************/ +/* editor_debugger_tree.cpp */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*************************************************************************/ + +#include "editor_debugger_tree.h" + +#include "editor/editor_node.h" +#include "scene/debugger/scene_debugger.h" +#include "scene/resources/packed_scene.h" + +EditorDebuggerTree::EditorDebuggerTree() { + set_v_size_flags(SIZE_EXPAND_FILL); + set_allow_rmb_select(true); + + // Popup + item_menu = memnew(PopupMenu); + item_menu->connect_compat("id_pressed", this, "_item_menu_id_pressed"); + add_child(item_menu); + + // File Dialog + file_dialog = memnew(EditorFileDialog); + file_dialog->connect_compat("file_selected", this, "_file_selected"); + add_child(file_dialog); +} + +void EditorDebuggerTree::_notification(int p_what) { + if (p_what == NOTIFICATION_POSTINITIALIZE) { + connect_compat("cell_selected", this, "_scene_tree_selected"); + connect_compat("item_collapsed", this, "_scene_tree_folded"); + connect_compat("item_rmb_selected", this, "_scene_tree_rmb_selected"); + } +} + +void EditorDebuggerTree::_bind_methods() { + ClassDB::bind_method(D_METHOD("_scene_tree_selected"), &EditorDebuggerTree::_scene_tree_selected); + ClassDB::bind_method(D_METHOD("_scene_tree_folded"), &EditorDebuggerTree::_scene_tree_folded); + ClassDB::bind_method(D_METHOD("_scene_tree_rmb_selected"), &EditorDebuggerTree::_scene_tree_rmb_selected); + ClassDB::bind_method(D_METHOD("_item_menu_id_pressed"), &EditorDebuggerTree::_item_menu_id_pressed); + ClassDB::bind_method(D_METHOD("_file_selected"), &EditorDebuggerTree::_file_selected); + ADD_SIGNAL(MethodInfo("object_selected", PropertyInfo(Variant::INT, "object_id"), PropertyInfo(Variant::INT, "debugger"))); + ADD_SIGNAL(MethodInfo("save_node", PropertyInfo(Variant::INT, "object_id"), PropertyInfo(Variant::STRING, "filename"), PropertyInfo(Variant::INT, "debugger"))); +} + +void EditorDebuggerTree::_scene_tree_selected() { + + if (updating_scene_tree) { + return; + } + + TreeItem *item = get_selected(); + if (!item) { + return; + } + + inspected_object_id = uint64_t(item->get_metadata(0)); + + emit_signal("object_selected", inspected_object_id, debugger_id); +} + +void EditorDebuggerTree::_scene_tree_folded(Object *p_obj) { + + if (updating_scene_tree) { + + return; + } + TreeItem *item = Object::cast_to<TreeItem>(p_obj); + + if (!item) + return; + + ObjectID id = ObjectID(uint64_t(item->get_metadata(0))); + if (unfold_cache.has(id)) { + unfold_cache.erase(id); + } else { + unfold_cache.insert(id); + } +} + +void EditorDebuggerTree::_scene_tree_rmb_selected(const Vector2 &p_position) { + + TreeItem *item = get_item_at_position(p_position); + if (!item) + return; + + item->select(0); + + item_menu->clear(); + item_menu->add_icon_item(get_icon("CreateNewSceneFrom", "EditorIcons"), TTR("Save Branch as Scene"), ITEM_MENU_SAVE_REMOTE_NODE); + item_menu->add_icon_item(get_icon("CopyNodePath", "EditorIcons"), TTR("Copy Node Path"), ITEM_MENU_COPY_NODE_PATH); + item_menu->set_global_position(get_global_mouse_position()); + item_menu->popup(); +} + +/// Populates inspect_scene_tree given data in nodes as a flat list, encoded depth first. +/// +/// Given a nodes array like [R,A,B,C,D,E] the following Tree will be generated, assuming +/// filter is an empty String, R and A child count are 2, B is 1 and C, D and E are 0. +/// +/// R +/// |-A +/// | |-B +/// | | |-C +/// | | +/// | |-D +/// | +/// |-E +/// +void EditorDebuggerTree::update_scene_tree(const SceneDebuggerTree *p_tree, int p_debugger) { + updating_scene_tree = true; + const String last_path = get_selected_path(); + const String filter = EditorNode::get_singleton()->get_scene_tree_dock()->get_filter(); + + // Nodes are in a flatten list, depth first. Use a stack of parents, avoid recursion. + List<Pair<TreeItem *, int> > parents; + for (int i = 0; i < p_tree->nodes.size(); i++) { + TreeItem *parent = NULL; + if (parents.size()) { // Find last parent. + Pair<TreeItem *, int> &p = parents[0]; + parent = p.first; + if (!(--p.second)) { // If no child left, remove it. + parents.pop_front(); + } + } + // Add this node. + const SceneDebuggerTree::RemoteNode &node = p_tree->nodes[i]; + TreeItem *item = create_item(parent); + item->set_text(0, node.name); + item->set_tooltip(0, TTR("Type:") + " " + node.type_name); + Ref<Texture2D> icon = EditorNode::get_singleton()->get_class_icon(node.type_name, ""); + if (icon.is_valid()) { + item->set_icon(0, icon); + } + item->set_metadata(0, node.id); + + // Set current item as collapsed if necessary (root is never collapsed) + if (parent) { + if (!unfold_cache.has(node.id)) { + item->set_collapsed(true); + } + } + // Select previously selected node. + if (debugger_id == p_debugger) { // Can use remote id. + if (node.id == inspected_object_id) { + item->select(0); + } + } else { // Must use path + if (last_path == _get_path(item)) { + updating_scene_tree = false; // Force emission of new selection + item->select(0); + updating_scene_tree = true; + } + } + + // Add in front of the parents stack if children are expected. + if (node.child_count) { + parents.push_front(Pair<TreeItem *, int>(item, node.child_count)); + } else { + // Apply filters. + while (parent) { + const bool had_siblings = item->get_prev() || item->get_next(); + if (filter.is_subsequence_ofi(item->get_text(0))) + break; // Filter matches, must survive. + parent->remove_child(item); + memdelete(item); + if (had_siblings) + break; // Parent must survive. + item = parent; + parent = item->get_parent(); + // Check if parent expects more children. + for (int j = 0; j < parents.size(); j++) { + if (parents[j].first == item) { + parent = NULL; + break; // Might have more children. + } + } + } + } + } + debugger_id = p_debugger; // Needed by hook, could be avoided if every debugger had its own tree + updating_scene_tree = false; +} + +String EditorDebuggerTree::get_selected_path() { + if (!get_selected()) + return ""; + return _get_path(get_selected()); +} + +String EditorDebuggerTree::_get_path(TreeItem *p_item) { + ERR_FAIL_COND_V(!p_item, ""); + + if (p_item->get_parent() == NULL) { + return "/root"; + } + String text = p_item->get_text(0); + TreeItem *cur = p_item->get_parent(); + while (cur) { + text = cur->get_text(0) + "/" + text; + cur = cur->get_parent(); + } + return "/" + text; +} + +void EditorDebuggerTree::_item_menu_id_pressed(int p_option) { + + switch (p_option) { + + case ITEM_MENU_SAVE_REMOTE_NODE: { + + file_dialog->set_access(EditorFileDialog::ACCESS_RESOURCES); + file_dialog->set_mode(EditorFileDialog::MODE_SAVE_FILE); + + List<String> extensions; + Ref<PackedScene> sd = memnew(PackedScene); + ResourceSaver::get_recognized_extensions(sd, &extensions); + file_dialog->clear_filters(); + for (int i = 0; i < extensions.size(); i++) { + file_dialog->add_filter("*." + extensions[i] + " ; " + extensions[i].to_upper()); + } + + file_dialog->popup_centered_ratio(); + } break; + case ITEM_MENU_COPY_NODE_PATH: { + + String text = get_selected_path(); + if (text.empty()) { + return; + } else if (text == "/root") { + text = "."; + } else { + text = text.replace("/root/", ""); + int slash = text.find("/"); + if (slash < 0) { + text = "."; + } else { + text = text.substr(slash + 1); + } + } + OS::get_singleton()->set_clipboard(text); + } break; + } +} + +void EditorDebuggerTree::_file_selected(const String &p_file) { + if (inspected_object_id.is_null()) + return; + emit_signal("save_node", inspected_object_id, p_file, debugger_id); +} diff --git a/editor/debugger/editor_debugger_tree.h b/editor/debugger/editor_debugger_tree.h new file mode 100644 index 0000000000..d9084bc596 --- /dev/null +++ b/editor/debugger/editor_debugger_tree.h @@ -0,0 +1,74 @@ +/*************************************************************************/ +/* editor_debugger_tree.h */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*************************************************************************/ + +#include "scene/gui/tree.h" + +#ifndef EDITOR_DEBUGGER_TREE_H +#define EDITOR_DEBUGGER_TREE_H + +class SceneDebuggerTree; +class EditorFileDialog; + +class EditorDebuggerTree : public Tree { + + GDCLASS(EditorDebuggerTree, Tree); + +private: + enum ItemMenu { + ITEM_MENU_SAVE_REMOTE_NODE, + ITEM_MENU_COPY_NODE_PATH, + }; + + ObjectID inspected_object_id; + int debugger_id = 0; + bool updating_scene_tree = false; + Set<ObjectID> unfold_cache; + PopupMenu *item_menu = NULL; + EditorFileDialog *file_dialog = NULL; + + String _get_path(TreeItem *p_item); + void _scene_tree_folded(Object *p_obj); + void _scene_tree_selected(); + void _scene_tree_rmb_selected(const Vector2 &p_position); + void _item_menu_id_pressed(int p_option); + void _file_selected(const String &p_file); + +protected: + static void _bind_methods(); + void _notification(int p_what); + +public: + String get_selected_path(); + ObjectID get_selected_object(); + int get_current_debugger(); // Would love to have one tree for every debugger. + void update_scene_tree(const SceneDebuggerTree *p_tree, int p_debugger); + EditorDebuggerTree(); +}; +#endif // EDITOR_DEBUGGER_TREE_H diff --git a/editor/debugger/script_editor_debugger.cpp b/editor/debugger/script_editor_debugger.cpp new file mode 100644 index 0000000000..8feb1ee03a --- /dev/null +++ b/editor/debugger/script_editor_debugger.cpp @@ -0,0 +1,1875 @@ +/*************************************************************************/ +/* script_editor_debugger.cpp */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*************************************************************************/ + +#include "script_editor_debugger.h" + +#include "core/io/marshalls.h" +#include "core/project_settings.h" +#include "core/script_debugger_remote.h" +#include "core/ustring.h" +#include "editor/editor_log.h" +#include "editor/editor_network_profiler.h" +#include "editor/editor_node.h" +#include "editor/editor_profiler.h" +#include "editor/editor_scale.h" +#include "editor/editor_settings.h" +#include "editor/editor_visual_profiler.h" +#include "editor/plugins/canvas_item_editor_plugin.h" +#include "editor/plugins/spatial_editor_plugin.h" +#include "editor/property_editor.h" +#include "main/performance.h" +#include "scene/debugger/scene_debugger.h" +#include "scene/gui/dialogs.h" +#include "scene/gui/label.h" +#include "scene/gui/line_edit.h" +#include "scene/gui/margin_container.h" +#include "scene/gui/rich_text_label.h" +#include "scene/gui/separator.h" +#include "scene/gui/split_container.h" +#include "scene/gui/tab_container.h" +#include "scene/gui/texture_button.h" +#include "scene/gui/tree.h" +#include "scene/resources/packed_scene.h" + +void ScriptEditorDebugger::_put_msg(String p_message, Array p_data) { + if (is_session_active()) { + Array msg; + msg.push_back(p_message); + msg.push_back(p_data); + ppeer->put_var(msg); + } +} + +void ScriptEditorDebugger::debug_copy() { + String msg = reason->get_text(); + if (msg == "") return; + OS::get_singleton()->set_clipboard(msg); +} + +void ScriptEditorDebugger::debug_skip_breakpoints() { + skip_breakpoints_value = !skip_breakpoints_value; + if (skip_breakpoints_value) + skip_breakpoints->set_icon(get_icon("DebugSkipBreakpointsOn", "EditorIcons")); + else + skip_breakpoints->set_icon(get_icon("DebugSkipBreakpointsOff", "EditorIcons")); + + Array msg; + msg.push_back(skip_breakpoints_value); + _put_msg("set_skip_breakpoints", msg); +} + +void ScriptEditorDebugger::debug_next() { + + ERR_FAIL_COND(!breaked); + + _put_msg("next", Array()); + _clear_execution(); +} +void ScriptEditorDebugger::debug_step() { + + ERR_FAIL_COND(!breaked); + + _put_msg("step", Array()); + _clear_execution(); +} + +void ScriptEditorDebugger::debug_break() { + + ERR_FAIL_COND(breaked); + + _put_msg("break", Array()); +} + +void ScriptEditorDebugger::debug_continue() { + + ERR_FAIL_COND(!breaked); + + // Allow focus stealing only if we actually run this client for security. + if (remote_pid && EditorNode::get_singleton()->has_child_process(remote_pid)) + OS::get_singleton()->enable_for_stealing_focus(remote_pid); + + _clear_execution(); + _put_msg("continue", Array()); +} + +void ScriptEditorDebugger::update_tabs() { + if (error_count == 0 && warning_count == 0) { + errors_tab->set_name(TTR("Errors")); + tabs->set_tab_icon(errors_tab->get_index(), Ref<Texture2D>()); + } else { + errors_tab->set_name(TTR("Errors") + " (" + itos(error_count + warning_count) + ")"); + if (error_count == 0) { + tabs->set_tab_icon(errors_tab->get_index(), get_icon("Warning", "EditorIcons")); + } else { + tabs->set_tab_icon(errors_tab->get_index(), get_icon("Error", "EditorIcons")); + } + } +} + +void ScriptEditorDebugger::clear_style() { + tabs->add_style_override("panel", NULL); +} + +void ScriptEditorDebugger::save_node(ObjectID p_id, const String &p_file) { + Array msg; + msg.push_back(p_id); + msg.push_back(p_file); + _put_msg("save_node", msg); +} + +void ScriptEditorDebugger::_file_selected(const String &p_file) { + Error err; + FileAccessRef file = FileAccess::open(p_file, FileAccess::WRITE, &err); + + if (err != OK) { + ERR_PRINT("Failed to open " + p_file); + return; + } + Vector<String> line; + line.resize(Performance::MONITOR_MAX); + + // signatures + for (int i = 0; i < Performance::MONITOR_MAX; i++) { + line.write[i] = Performance::get_singleton()->get_monitor_name(Performance::Monitor(i)); + } + file->store_csv_line(line); + + // values + List<Vector<float> >::Element *E = perf_history.back(); + while (E) { + + Vector<float> &perf_data = E->get(); + for (int i = 0; i < perf_data.size(); i++) { + + line.write[i] = String::num_real(perf_data[i]); + } + file->store_csv_line(line); + E = E->prev(); + } + file->store_string("\n"); + + Vector<Vector<String> > profiler_data = profiler->get_data_as_csv(); + for (int i = 0; i < profiler_data.size(); i++) { + file->store_csv_line(profiler_data[i]); + } +} + +void ScriptEditorDebugger::request_remote_tree() { + + _put_msg("request_scene_tree", Array()); +} + +const SceneDebuggerTree *ScriptEditorDebugger::get_remote_tree() { + return scene_tree; +} + +void ScriptEditorDebugger::update_remote_object(ObjectID p_obj_id, const String &p_prop, const Variant &p_value) { + + Array msg; + msg.push_back(p_obj_id); + msg.push_back(p_prop); + msg.push_back(p_value); + _put_msg("set_object_property", msg); +} + +void ScriptEditorDebugger::request_remote_object(ObjectID p_obj_id) { + + ERR_FAIL_COND(p_obj_id.is_null()); + Array msg; + msg.push_back(p_obj_id); + _put_msg("inspect_object", msg); +} + +Object *ScriptEditorDebugger::get_remote_object(ObjectID p_id) { + return inspector->get_object(p_id); +} + +void ScriptEditorDebugger::_remote_object_selected(ObjectID p_id) { + emit_signal("remote_object_requested", p_id); +} + +void ScriptEditorDebugger::_remote_object_edited(ObjectID p_id, const String &p_prop, const Variant &p_value) { + update_remote_object(p_id, p_prop, p_value); + request_remote_object(p_id); +} + +void ScriptEditorDebugger::_remote_object_property_updated(ObjectID p_id, const String &p_property) { + emit_signal("remote_object_property_updated", p_id, p_property); +} + +void ScriptEditorDebugger::_video_mem_request() { + + _put_msg("request_video_mem", Array()); +} + +Size2 ScriptEditorDebugger::get_minimum_size() const { + + Size2 ms = MarginContainer::get_minimum_size(); + ms.y = MAX(ms.y, 250 * EDSCALE); + return ms; +} + +void ScriptEditorDebugger::_parse_message(const String &p_msg, const Array &p_data) { + + if (p_msg == "debug_enter") { + + _put_msg("get_stack_dump", Array()); + + ERR_FAIL_COND(p_data.size() != 2); + bool can_continue = p_data[0]; + String error = p_data[1]; + breaked = true; + can_debug = can_continue; + _update_buttons_state(); + _set_reason_text(error, MESSAGE_ERROR); + emit_signal("breaked", true, can_continue); + OS::get_singleton()->move_window_to_foreground(); + if (error != "") { + tabs->set_current_tab(0); + } + profiler->set_enabled(false); + inspector->clear_cache(); // Take a chance to force remote objects update. + + } else if (p_msg == "debug_exit") { + + breaked = false; + can_debug = false; + _clear_execution(); + _update_buttons_state(); + _set_reason_text(TTR("Execution resumed."), MESSAGE_SUCCESS); + emit_signal("breaked", false, false); + profiler->set_enabled(true); + profiler->disable_seeking(); + } else if (p_msg == "message:set_pid") { + + ERR_FAIL_COND(p_data.size() < 1); + remote_pid = p_data[0]; + } else if (p_msg == "message:click_ctrl") { + + ERR_FAIL_COND(p_data.size() < 2); + clicked_ctrl->set_text(p_data[0]); + clicked_ctrl_type->set_text(p_data[1]); + } else if (p_msg == "message:scene_tree") { + + scene_tree->nodes.clear(); + scene_tree->deserialize(p_data); + emit_signal("remote_tree_updated"); + _update_buttons_state(); + } else if (p_msg == "message:inspect_object") { + + ObjectID id = inspector->add_object(p_data); + if (id.is_valid()) + emit_signal("remote_object_updated", id); + } else if (p_msg == "message:video_mem") { + + vmem_tree->clear(); + TreeItem *root = vmem_tree->create_item(); + ScriptDebuggerRemote::ResourceUsage usage; + usage.deserialize(p_data); + + int total = 0; + + for (List<ScriptDebuggerRemote::ResourceInfo>::Element *E = usage.infos.front(); E; E = E->next()) { + + TreeItem *it = vmem_tree->create_item(root); + String type = E->get().type; + int bytes = E->get().vram; + it->set_text(0, E->get().path); + it->set_text(1, type); + it->set_text(2, E->get().format); + it->set_text(3, String::humanize_size(bytes)); + total += bytes; + + if (has_icon(type, "EditorIcons")) + it->set_icon(0, get_icon(type, "EditorIcons")); + } + + vmem_total->set_tooltip(TTR("Bytes:") + " " + itos(total)); + vmem_total->set_text(String::humanize_size(total)); + + } else if (p_msg == "stack_dump") { + + ScriptDebuggerRemote::ScriptStackDump stack; + stack.deserialize(p_data); + + stack_dump->clear(); + inspector->clear_stack_variables(); + TreeItem *r = stack_dump->create_item(); + + for (int i = 0; i < stack.frames.size(); i++) { + + TreeItem *s = stack_dump->create_item(r); + Dictionary d; + d["frame"] = i; + d["file"] = stack.frames[i].file; + d["function"] = stack.frames[i].func; + d["line"] = stack.frames[i].line; + s->set_metadata(0, d); + + String line = itos(i) + " - " + String(d["file"]) + ":" + itos(d["line"]) + " - at function: " + d["function"]; + s->set_text(0, line); + + if (i == 0) + s->select(0); + } + } else if (p_msg == "stack_frame_vars") { + + inspector->clear_stack_variables(); + + } else if (p_msg == "stack_frame_var") { + + inspector->add_stack_variable(p_data); + + } else if (p_msg == "output") { + ERR_FAIL_COND(p_data.size() < 1); + String t = p_data[0]; + EditorNode::get_log()->add_message(t); + + } else if (p_msg == "performance") { + Vector<float> p; + p.resize(p_data.size()); + for (int i = 0; i < p_data.size(); i++) { + p.write[i] = p_data[i]; + if (i < perf_items.size()) { + + const float value = p[i]; + String label = rtos(value); + String tooltip = label; + switch (Performance::MonitorType((int)perf_items[i]->get_metadata(1))) { + case Performance::MONITOR_TYPE_MEMORY: { + label = String::humanize_size(value); + tooltip = label; + } break; + case Performance::MONITOR_TYPE_TIME: { + label = rtos(value * 1000).pad_decimals(2) + " ms"; + tooltip = label; + } break; + default: { + tooltip += " " + perf_items[i]->get_text(0); + } break; + } + + perf_items[i]->set_text(1, label); + perf_items[i]->set_tooltip(1, tooltip); + if (p[i] > perf_max[i]) + perf_max.write[i] = p[i]; + } + } + perf_history.push_front(p); + perf_draw->update(); + + } else if (p_msg == "visual_profile") { + // TODO check me. + uint64_t frame = p_data[0]; + Vector<String> names = p_data[1]; + Vector<real_t> values = p_data[2]; + + EditorVisualProfiler::Metric metric; + metric.areas.resize(names.size()); + metric.frame_number = frame; + metric.valid = true; + + { + EditorVisualProfiler::Metric::Area *areas_ptr = metric.areas.ptrw(); + int metric_count = names.size(); + + const String *rs = names.ptr(); + const real_t *rr = values.ptr(); + + for (int i = 0; i < metric_count; i++) { + + areas_ptr[i].name = rs[i]; + areas_ptr[i].cpu_time = rr[i * 2 + 0]; + areas_ptr[i].gpu_time = rr[i * 2 + 1]; + } + } + visual_profiler->add_frame_metric(metric); + + } else if (p_msg == "error") { + + ScriptDebuggerRemote::OutputError oe; + ERR_FAIL_COND_MSG(oe.deserialize(p_data) == false, "Failed to deserialize error message"); + + // Format time. + Array time_vals; + time_vals.push_back(oe.hr); + time_vals.push_back(oe.min); + time_vals.push_back(oe.sec); + time_vals.push_back(oe.msec); + bool e; + String time = String("%d:%02d:%02d:%04d").sprintf(time_vals, &e); + + // Rest of the error data. + bool source_is_project_file = oe.source_file.begins_with("res://"); + + // Metadata to highlight error line in scripts. + Array source_meta; + source_meta.push_back(oe.source_file); + source_meta.push_back(oe.source_line); + + // Create error tree to display above error or warning details. + TreeItem *r = error_tree->get_root(); + if (!r) { + r = error_tree->create_item(); + } + + // Also provide the relevant details as tooltip to quickly check without + // uncollapsing the tree. + String tooltip = oe.warning ? TTR("Warning:") : TTR("Error:"); + + TreeItem *error = error_tree->create_item(r); + error->set_collapsed(true); + + error->set_icon(0, get_icon(oe.warning ? "Warning" : "Error", "EditorIcons")); + error->set_text(0, time); + error->set_text_align(0, TreeItem::ALIGN_LEFT); + + String error_title; + // Include method name, when given, in error title. + if (!oe.source_func.empty()) + error_title += oe.source_func + ": "; + // If we have a (custom) error message, use it as title, and add a C++ Error + // item with the original error condition. + error_title += oe.error_descr.empty() ? oe.error : oe.error_descr; + error->set_text(1, error_title); + tooltip += " " + error_title + "\n"; + + if (!oe.error_descr.empty()) { + // Add item for C++ error condition. + TreeItem *cpp_cond = error_tree->create_item(error); + cpp_cond->set_text(0, "<" + TTR("C++ Error") + ">"); + cpp_cond->set_text(1, oe.error); + cpp_cond->set_text_align(0, TreeItem::ALIGN_LEFT); + tooltip += TTR("C++ Error:") + " " + oe.error + "\n"; + if (source_is_project_file) + cpp_cond->set_metadata(0, source_meta); + } + Vector<uint8_t> v; + v.resize(100); + + // Source of the error. + String source_txt = (source_is_project_file ? oe.source_file.get_file() : oe.source_file) + ":" + itos(oe.source_line); + if (!oe.source_func.empty()) + source_txt += " @ " + oe.source_func + "()"; + + TreeItem *cpp_source = error_tree->create_item(error); + cpp_source->set_text(0, "<" + (source_is_project_file ? TTR("Source") : TTR("C++ Source")) + ">"); + cpp_source->set_text(1, source_txt); + cpp_source->set_text_align(0, TreeItem::ALIGN_LEFT); + tooltip += (source_is_project_file ? TTR("Source:") : TTR("C++ Source:")) + " " + source_txt + "\n"; + + // Set metadata to highlight error line in scripts. + if (source_is_project_file) { + error->set_metadata(0, source_meta); + cpp_source->set_metadata(0, source_meta); + } + + error->set_tooltip(0, tooltip); + error->set_tooltip(1, tooltip); + + // Format stack trace. + // stack_items_count is the number of elements to parse, with 3 items per frame + // of the stack trace (script, method, line). + const ScriptLanguage::StackInfo *infos = oe.callstack.ptr(); + for (unsigned int i = 0; i < (unsigned int)oe.callstack.size(); i++) { + + TreeItem *stack_trace = error_tree->create_item(error); + + Array meta; + meta.push_back(infos[i].file); + meta.push_back(infos[i].line); + stack_trace->set_metadata(0, meta); + + if (i == 0) { + stack_trace->set_text(0, "<" + TTR("Stack Trace") + ">"); + stack_trace->set_text_align(0, TreeItem::ALIGN_LEFT); + error->set_metadata(0, meta); + } + stack_trace->set_text(1, infos[i].file.get_file() + ":" + itos(infos[i].line) + " @ " + infos[i].func + "()"); + } + + if (oe.warning) + warning_count++; + else + error_count++; + + } else if (p_msg == "profile_sig") { + // Cache a profiler signature. + ScriptDebuggerRemote::ProfilerSignature sig; + sig.deserialize(p_data); + profiler_signature[sig.id] = sig.name; + + } else if (p_msg == "profile_frame" || p_msg == "profile_total") { + EditorProfiler::Metric metric; + ScriptDebuggerRemote::ProfilerFrame frame; + frame.deserialize(p_data); + metric.valid = true; + metric.frame_number = frame.frame_number; + metric.frame_time = frame.frame_time; + metric.idle_time = frame.idle_time; + metric.physics_time = frame.physics_time; + metric.physics_frame_time = frame.physics_frame_time; + int frame_data_amount = frame.frames_data.size(); + int frame_function_amount = frame.frame_functions.size(); + + if (frame_data_amount) { + EditorProfiler::Metric::Category frame_time; + frame_time.signature = "category_frame_time"; + frame_time.name = "Frame Time"; + frame_time.total_time = metric.frame_time; + + EditorProfiler::Metric::Category::Item item; + item.calls = 1; + item.line = 0; + + item.name = "Physics Time"; + item.total = metric.physics_time; + item.self = item.total; + item.signature = "physics_time"; + + frame_time.items.push_back(item); + + item.name = "Idle Time"; + item.total = metric.idle_time; + item.self = item.total; + item.signature = "idle_time"; + + frame_time.items.push_back(item); + + item.name = "Physics Frame Time"; + item.total = metric.physics_frame_time; + item.self = item.total; + item.signature = "physics_frame_time"; + + frame_time.items.push_back(item); + + metric.categories.push_back(frame_time); + } + + for (int i = 0; i < frame_data_amount; i++) { + + EditorProfiler::Metric::Category c; + String name = frame.frames_data[i].name; + Array values = frame.frames_data[i].data; + c.name = name.capitalize(); + c.items.resize(values.size() / 2); + c.total_time = 0; + c.signature = "categ::" + name; + for (int j = 0; j < values.size(); j += 2) { + + EditorProfiler::Metric::Category::Item item; + item.calls = 1; + item.line = 0; + item.name = values[j]; + item.self = values[j + 1]; + item.total = item.self; + item.signature = "categ::" + name + "::" + item.name; + item.name = item.name.capitalize(); + c.total_time += item.total; + c.items.write[j / 2] = item; + } + metric.categories.push_back(c); + } + + EditorProfiler::Metric::Category funcs; + funcs.total_time = frame.script_time; + funcs.items.resize(frame_function_amount); + funcs.name = "Script Functions"; + funcs.signature = "script_functions"; + for (int i = 0; i < frame_function_amount; i++) { + + int signature = frame.frame_functions[i].sig_id; + int calls = frame.frame_functions[i].call_count; + float total = frame.frame_functions[i].total_time; + float self = frame.frame_functions[i].self_time; + + EditorProfiler::Metric::Category::Item item; + if (profiler_signature.has(signature)) { + + item.signature = profiler_signature[signature]; + + String name = profiler_signature[signature]; + Vector<String> strings = name.split("::"); + if (strings.size() == 3) { + item.name = strings[2]; + item.script = strings[0]; + item.line = strings[1].to_int(); + } else if (strings.size() == 4) { //Built-in scripts have an :: in their name + item.name = strings[3]; + item.script = strings[0] + "::" + strings[1]; + item.line = strings[2].to_int(); + } + + } else { + item.name = "SigErr " + itos(signature); + } + + item.calls = calls; + item.self = self; + item.total = total; + funcs.items.write[i] = item; + } + + metric.categories.push_back(funcs); + + if (p_msg == "profile_frame") + profiler->add_frame_metric(metric, false); + else + profiler->add_frame_metric(metric, true); + + } else if (p_msg == "network_profile") { + ScriptDebuggerRemote::NetworkProfilerFrame frame; + frame.deserialize(p_data); + for (int i = 0; i < frame.infos.size(); i++) { + network_profiler->add_node_frame_data(frame.infos[i]); + } + } else if (p_msg == "network_bandwidth") { + ERR_FAIL_COND(p_data.size() < 2); + network_profiler->set_bandwidth(p_data[0], p_data[1]); + } else if (p_msg == "kill_me") { + + emit_signal("stop_requested"); + _stop_and_notify(); + } +} + +void ScriptEditorDebugger::_set_reason_text(const String &p_reason, MessageType p_type) { + switch (p_type) { + case MESSAGE_ERROR: + reason->add_color_override("font_color", get_color("error_color", "Editor")); + break; + case MESSAGE_WARNING: + reason->add_color_override("font_color", get_color("warning_color", "Editor")); + break; + default: + reason->add_color_override("font_color", get_color("success_color", "Editor")); + } + reason->set_text(p_reason); + reason->set_tooltip(p_reason.word_wrap(80)); +} + +void ScriptEditorDebugger::_performance_select() { + + perf_draw->update(); +} + +void ScriptEditorDebugger::_performance_draw() { + + Vector<int> which; + for (int i = 0; i < perf_items.size(); i++) { + + if (perf_items[i]->is_checked(0)) + which.push_back(i); + } + + if (which.empty()) { + info_message->show(); + return; + } + + info_message->hide(); + + Ref<StyleBox> graph_sb = get_stylebox("normal", "TextEdit"); + Ref<Font> graph_font = get_font("font", "TextEdit"); + + int cols = Math::ceil(Math::sqrt((float)which.size())); + int rows = Math::ceil((float)which.size() / cols); + if (which.size() == 1) + rows = 1; + + int margin = 3; + int point_sep = 5; + Size2i s = Size2i(perf_draw->get_size()) / Size2i(cols, rows); + for (int i = 0; i < which.size(); i++) { + + Point2i p(i % cols, i / cols); + Rect2i r(p * s, s); + r.position += Point2(margin, margin); + r.size -= Point2(margin, margin) * 2.0; + perf_draw->draw_style_box(graph_sb, r); + r.position += graph_sb->get_offset(); + r.size -= graph_sb->get_minimum_size(); + int pi = which[i]; + Color c = get_color("accent_color", "Editor"); + float h = (float)which[i] / (float)(perf_items.size()); + // Use a darker color on light backgrounds for better visibility + float value_multiplier = EditorSettings::get_singleton()->is_dark_theme() ? 1.4 : 0.55; + c.set_hsv(Math::fmod(h + 0.4, 0.9), c.get_s() * 0.9, c.get_v() * value_multiplier); + + c.a = 0.6; + perf_draw->draw_string(graph_font, r.position + Point2(0, graph_font->get_ascent()), perf_items[pi]->get_text(0), c, r.size.x); + c.a = 0.9; + perf_draw->draw_string(graph_font, r.position + Point2(0, graph_font->get_ascent() + graph_font->get_height()), perf_items[pi]->get_text(1), c, r.size.y); + + float spacing = point_sep / float(cols); + float from = r.size.width; + + List<Vector<float> >::Element *E = perf_history.front(); + float prev = -1; + while (from >= 0 && E) { + + float m = perf_max[pi]; + if (m == 0) + m = 0.00001; + float h2 = E->get()[pi] / m; + h2 = (1.0 - h2) * r.size.y; + + if (E != perf_history.front()) + perf_draw->draw_line(r.position + Point2(from, h2), r.position + Point2(from + spacing, prev), c, Math::round(EDSCALE)); + prev = h2; + E = E->next(); + from -= spacing; + } + } +} + +void ScriptEditorDebugger::_notification(int p_what) { + + switch (p_what) { + + case NOTIFICATION_ENTER_TREE: { + + skip_breakpoints->set_icon(get_icon("DebugSkipBreakpointsOff", "EditorIcons")); + copy->set_icon(get_icon("ActionCopy", "EditorIcons")); + + step->set_icon(get_icon("DebugStep", "EditorIcons")); + next->set_icon(get_icon("DebugNext", "EditorIcons")); + dobreak->set_icon(get_icon("Pause", "EditorIcons")); + docontinue->set_icon(get_icon("DebugContinue", "EditorIcons")); + le_set->connect_compat("pressed", this, "_live_edit_set"); + le_clear->connect_compat("pressed", this, "_live_edit_clear"); + error_tree->connect_compat("item_selected", this, "_error_selected"); + error_tree->connect_compat("item_activated", this, "_error_activated"); + vmem_refresh->set_icon(get_icon("Reload", "EditorIcons")); + + reason->add_color_override("font_color", get_color("error_color", "Editor")); + + } break; + case NOTIFICATION_PROCESS: { + + if (is_session_active()) { + + if (camera_override == OVERRIDE_2D) { + CanvasItemEditor *editor = CanvasItemEditor::get_singleton(); + + Dictionary state = editor->get_state(); + float zoom = state["zoom"]; + Point2 offset = state["ofs"]; + Transform2D transform; + + transform.scale_basis(Size2(zoom, zoom)); + transform.elements[2] = -offset * zoom; + + Array msg; + msg.push_back(transform); + _put_msg("override_camera_2D:transform", msg); + + } else if (camera_override >= OVERRIDE_3D_1) { + int viewport_idx = camera_override - OVERRIDE_3D_1; + SpatialEditorViewport *viewport = SpatialEditor::get_singleton()->get_editor_viewport(viewport_idx); + Camera *const cam = viewport->get_camera(); + + Array msg; + msg.push_back(cam->get_camera_transform()); + if (cam->get_projection() == Camera::PROJECTION_ORTHOGONAL) { + msg.push_back(false); + msg.push_back(cam->get_size()); + } else { + msg.push_back(true); + msg.push_back(cam->get_fov()); + } + msg.push_back(cam->get_znear()); + msg.push_back(cam->get_zfar()); + _put_msg("override_camera_3D:transform", msg); + } + } + + if (!is_session_active()) { + _stop_and_notify(); + break; + }; + + if (ppeer->get_available_packet_count() <= 0) { + break; + }; + + const uint64_t until = OS::get_singleton()->get_ticks_msec() + 20; + + while (ppeer->get_available_packet_count() > 0) { + + Variant cmd; + Error ret = ppeer->get_var(cmd); + if (ret != OK) { + _stop_and_notify(); + ERR_FAIL_MSG("Error decoding variant from peer"); + } + if (cmd.get_type() != Variant::ARRAY) { + _stop_and_notify(); + ERR_FAIL_MSG("Invalid message format received from peer"); + } + Array arr = cmd; + if (arr.size() != 2 || arr[0].get_type() != Variant::STRING || arr[1].get_type() != Variant::ARRAY) { + _stop_and_notify(); + ERR_FAIL_MSG("Invalid message format received from peer"); + } + _parse_message(arr[0], arr[1]); + + if (OS::get_singleton()->get_ticks_msec() > until) + break; + } + } break; + case EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED: { + + if (tabs->has_stylebox_override("panel")) { + tabs->add_style_override("panel", editor->get_gui_base()->get_stylebox("DebuggerPanel", "EditorStyles")); + } + + copy->set_icon(get_icon("ActionCopy", "EditorIcons")); + step->set_icon(get_icon("DebugStep", "EditorIcons")); + next->set_icon(get_icon("DebugNext", "EditorIcons")); + dobreak->set_icon(get_icon("Pause", "EditorIcons")); + docontinue->set_icon(get_icon("DebugContinue", "EditorIcons")); + vmem_refresh->set_icon(get_icon("Reload", "EditorIcons")); + } break; + } +} + +void ScriptEditorDebugger::_clear_execution() { + TreeItem *ti = stack_dump->get_selected(); + if (!ti) + return; + + Dictionary d = ti->get_metadata(0); + + stack_script = ResourceLoader::load(d["file"]); + emit_signal("clear_execution", stack_script); + stack_script.unref(); + stack_dump->clear(); + inspector->clear_stack_variables(); +} + +void ScriptEditorDebugger::start(Ref<StreamPeerTCP> p_connection) { + + error_count = 0; + warning_count = 0; + stop(); + + connection = p_connection; + ppeer->set_stream_peer(connection); + + perf_history.clear(); + for (int i = 0; i < Performance::MONITOR_MAX; i++) { + + perf_max.write[i] = 0; + } + + set_process(true); + breaked = false; + can_debug = true; + camera_override = OVERRIDE_NONE; + + tabs->set_current_tab(0); + _set_reason_text(TTR("Debug session started."), MESSAGE_SUCCESS); + _update_buttons_state(); + + if (profiler->is_profiling()) { + _profiler_activate(true); + } + + if (network_profiler->is_profiling()) { + _network_profiler_activate(true); + } +} + +void ScriptEditorDebugger::_update_buttons_state() { + const bool active = is_session_active(); + const bool has_editor_tree = active && editor_remote_tree && editor_remote_tree->get_selected(); + vmem_refresh->set_disabled(!active); + step->set_disabled(!active || !breaked || !can_debug); + next->set_disabled(!active || !breaked || !can_debug); + copy->set_disabled(!active || !breaked); + docontinue->set_disabled(!active || !breaked); + dobreak->set_disabled(!active || breaked); + le_clear->set_disabled(!active); + le_set->set_disabled(!has_editor_tree); +} + +void ScriptEditorDebugger::_stop_and_notify() { + stop(); + emit_signal("stopped"); + _set_reason_text(TTR("Debug session closed."), MESSAGE_WARNING); +} + +void ScriptEditorDebugger::stop() { + + set_process(false); + breaked = false; + can_debug = false; + remote_pid = 0; + _clear_execution(); + + inspector->clear_cache(); + ppeer->set_stream_peer(Ref<StreamPeer>()); + + if (connection.is_valid()) { + connection.unref(); + reason->set_text(""); + reason->set_tooltip(""); + } + + node_path_cache.clear(); + res_path_cache.clear(); + profiler_signature.clear(); + + inspector->edit(NULL); + _update_buttons_state(); +} + +void ScriptEditorDebugger::_profiler_activate(bool p_enable) { + + if (p_enable) { + profiler_signature.clear(); + Array msg; + int max_funcs = EditorSettings::get_singleton()->get("debugger/profiler_frame_max_functions"); + max_funcs = CLAMP(max_funcs, 16, 512); + msg.push_back(max_funcs); + _put_msg("start_profiling", msg); + print_verbose("Starting profiling."); + + } else { + _put_msg("stop_profiling", Array()); + print_verbose("Ending profiling."); + } +} + +void ScriptEditorDebugger::_visual_profiler_activate(bool p_enable) { + + if (!connection.is_valid()) + return; + + if (p_enable) { + profiler_signature.clear(); + _put_msg("start_visual_profiling", Array()); + print_verbose("Starting visual profiling."); + + } else { + _put_msg("stop_visual_profiling", Array()); + print_verbose("Ending visual profiling."); + } +} + +void ScriptEditorDebugger::_network_profiler_activate(bool p_enable) { + + if (p_enable) { + profiler_signature.clear(); + _put_msg("start_network_profiling", Array()); + print_verbose("Starting network profiling."); + + } else { + _put_msg("stop_network_profiling", Array()); + print_verbose("Ending network profiling."); + } +} + +void ScriptEditorDebugger::_profiler_seeked() { + + if (breaked) + return; + debug_break(); +} + +void ScriptEditorDebugger::_stack_dump_frame_selected() { + + emit_signal("stack_frame_selected"); + + int frame = get_stack_script_frame(); + + if (is_session_active() && frame >= 0) { + Array msg; + msg.push_back(frame); + _put_msg("get_stack_frame_vars", msg); + } else { + inspector->edit(NULL); + } +} + +void ScriptEditorDebugger::_export_csv() { + + file_dialog->set_mode(EditorFileDialog::MODE_SAVE_FILE); + file_dialog->set_access(EditorFileDialog::ACCESS_FILESYSTEM); + file_dialog->popup_centered_ratio(); +} + +String ScriptEditorDebugger::get_var_value(const String &p_var) const { + if (!breaked) + return String(); + return inspector->get_stack_variable(p_var); +} + +int ScriptEditorDebugger::_get_node_path_cache(const NodePath &p_path) { + + const int *r = node_path_cache.getptr(p_path); + if (r) + return *r; + + last_path_id++; + + node_path_cache[p_path] = last_path_id; + Array msg; + msg.push_back(p_path); + msg.push_back(last_path_id); + _put_msg("live_node_path", msg); + + return last_path_id; +} + +int ScriptEditorDebugger::_get_res_path_cache(const String &p_path) { + + Map<String, int>::Element *E = res_path_cache.find(p_path); + + if (E) + return E->get(); + + last_path_id++; + + res_path_cache[p_path] = last_path_id; + Array msg; + msg.push_back(p_path); + msg.push_back(last_path_id); + _put_msg("live_res_path", msg); + + return last_path_id; +} + +void ScriptEditorDebugger::_method_changed(Object *p_base, const StringName &p_name, VARIANT_ARG_DECLARE) { + + if (!p_base || !live_debug || !is_session_active() || !editor->get_edited_scene()) + return; + + Node *node = Object::cast_to<Node>(p_base); + + VARIANT_ARGPTRS + + for (int i = 0; i < VARIANT_ARG_MAX; i++) { + //no pointers, sorry + if (argptr[i] && (argptr[i]->get_type() == Variant::OBJECT || argptr[i]->get_type() == Variant::_RID)) + return; + } + + if (node) { + + NodePath path = editor->get_edited_scene()->get_path_to(node); + int pathid = _get_node_path_cache(path); + + Array msg; + msg.push_back(pathid); + msg.push_back(p_name); + for (int i = 0; i < VARIANT_ARG_MAX; i++) { + //no pointers, sorry + msg.push_back(*argptr[i]); + } + _put_msg("live_node_call", msg); + + return; + } + + Resource *res = Object::cast_to<Resource>(p_base); + + if (res && res->get_path() != String()) { + + String respath = res->get_path(); + int pathid = _get_res_path_cache(respath); + + Array msg; + msg.push_back(pathid); + msg.push_back(p_name); + for (int i = 0; i < VARIANT_ARG_MAX; i++) { + //no pointers, sorry + msg.push_back(*argptr[i]); + } + _put_msg("live_res_call", msg); + + return; + } +} + +void ScriptEditorDebugger::_property_changed(Object *p_base, const StringName &p_property, const Variant &p_value) { + + if (!p_base || !live_debug || !editor->get_edited_scene()) + return; + + Node *node = Object::cast_to<Node>(p_base); + + if (node) { + + NodePath path = editor->get_edited_scene()->get_path_to(node); + int pathid = _get_node_path_cache(path); + + if (p_value.is_ref()) { + Ref<Resource> res = p_value; + if (res.is_valid() && res->get_path() != String()) { + + Array msg; + msg.push_back(pathid); + msg.push_back(p_property); + msg.push_back(res->get_path()); + _put_msg("live_node_prop_res", msg); + } + } else { + + Array msg; + msg.push_back(pathid); + msg.push_back(p_property); + msg.push_back(p_value); + _put_msg("live_node_prop", msg); + } + + return; + } + + Resource *res = Object::cast_to<Resource>(p_base); + + if (res && res->get_path() != String()) { + + String respath = res->get_path(); + int pathid = _get_res_path_cache(respath); + + if (p_value.is_ref()) { + Ref<Resource> res2 = p_value; + if (res2.is_valid() && res2->get_path() != String()) { + + Array msg; + msg.push_back(pathid); + msg.push_back(p_property); + msg.push_back(res2->get_path()); + _put_msg("live_res_prop_res", msg); + } + } else { + + Array msg; + msg.push_back(pathid); + msg.push_back(p_property); + msg.push_back(p_value); + _put_msg("live_res_prop", msg); + } + + return; + } +} + +String ScriptEditorDebugger::get_stack_script_file() const { + TreeItem *ti = stack_dump->get_selected(); + if (!ti) + return ""; + Dictionary d = ti->get_metadata(0); + return d["file"]; +} + +int ScriptEditorDebugger::get_stack_script_line() const { + TreeItem *ti = stack_dump->get_selected(); + if (!ti) + return -1; + Dictionary d = ti->get_metadata(0); + return d["line"]; +} + +int ScriptEditorDebugger::get_stack_script_frame() const { + TreeItem *ti = stack_dump->get_selected(); + if (!ti) + return -1; + Dictionary d = ti->get_metadata(0); + return d["frame"]; +} + +void ScriptEditorDebugger::set_live_debugging(bool p_enable) { + + live_debug = p_enable; +} + +void ScriptEditorDebugger::_live_edit_set() { + + if (!is_session_active() || !editor_remote_tree) + return; + + TreeItem *ti = editor_remote_tree->get_selected(); + if (!ti) + return; + + String path; + + while (ti) { + String lp = ti->get_text(0); + path = "/" + lp + path; + ti = ti->get_parent(); + } + + NodePath np = path; + + editor->get_editor_data().set_edited_scene_live_edit_root(np); + + update_live_edit_root(); +} + +void ScriptEditorDebugger::_live_edit_clear() { + + NodePath np = NodePath("/root"); + editor->get_editor_data().set_edited_scene_live_edit_root(np); + + update_live_edit_root(); +} + +void ScriptEditorDebugger::update_live_edit_root() { + + NodePath np = editor->get_editor_data().get_edited_scene_live_edit_root(); + + Array msg; + msg.push_back(np); + if (editor->get_edited_scene()) + msg.push_back(editor->get_edited_scene()->get_filename()); + else + msg.push_back(""); + _put_msg("live_set_root", msg); + live_edit_root->set_text(np); +} + +void ScriptEditorDebugger::live_debug_create_node(const NodePath &p_parent, const String &p_type, const String &p_name) { + + if (live_debug) { + Array msg; + msg.push_back(p_parent); + msg.push_back(p_type); + msg.push_back(p_name); + _put_msg("live_create_node", msg); + } +} + +void ScriptEditorDebugger::live_debug_instance_node(const NodePath &p_parent, const String &p_path, const String &p_name) { + + if (live_debug) { + Array msg; + msg.push_back(p_parent); + msg.push_back(p_path); + msg.push_back(p_name); + _put_msg("live_instance_node", msg); + } +} +void ScriptEditorDebugger::live_debug_remove_node(const NodePath &p_at) { + + if (live_debug) { + Array msg; + msg.push_back(p_at); + _put_msg("live_remove_node", msg); + } +} +void ScriptEditorDebugger::live_debug_remove_and_keep_node(const NodePath &p_at, ObjectID p_keep_id) { + + if (live_debug) { + Array msg; + msg.push_back(p_at); + msg.push_back(p_keep_id); + _put_msg("live_remove_and_keep_node", msg); + } +} +void ScriptEditorDebugger::live_debug_restore_node(ObjectID p_id, const NodePath &p_at, int p_at_pos) { + + if (live_debug) { + Array msg; + msg.push_back(p_id); + msg.push_back(p_at); + msg.push_back(p_at_pos); + _put_msg("live_restore_node", msg); + } +} +void ScriptEditorDebugger::live_debug_duplicate_node(const NodePath &p_at, const String &p_new_name) { + + if (live_debug) { + Array msg; + msg.push_back(p_at); + msg.push_back(p_new_name); + _put_msg("live_duplicate_node", msg); + } +} +void ScriptEditorDebugger::live_debug_reparent_node(const NodePath &p_at, const NodePath &p_new_place, const String &p_new_name, int p_at_pos) { + + if (live_debug) { + Array msg; + msg.push_back(p_at); + msg.push_back(p_new_place); + msg.push_back(p_new_name); + msg.push_back(p_at_pos); + _put_msg("live_reparent_node", msg); + } +} + +ScriptEditorDebugger::CameraOverride ScriptEditorDebugger::get_camera_override() const { + return camera_override; +} + +void ScriptEditorDebugger::set_camera_override(CameraOverride p_override) { + + if (p_override == OVERRIDE_2D && camera_override != OVERRIDE_2D) { + Array msg; + msg.push_back(true); + _put_msg("override_camera_2D:set", msg); + } else if (p_override != OVERRIDE_2D && camera_override == OVERRIDE_2D) { + Array msg; + msg.push_back(false); + _put_msg("override_camera_2D:set", msg); + } else if (p_override >= OVERRIDE_3D_1 && camera_override < OVERRIDE_3D_1) { + Array msg; + msg.push_back(true); + _put_msg("override_camera_3D:set", msg); + } else if (p_override < OVERRIDE_3D_1 && camera_override >= OVERRIDE_3D_1) { + Array msg; + msg.push_back(false); + _put_msg("override_camera_3D:set", msg); + } + + camera_override = p_override; +} + +void ScriptEditorDebugger::set_breakpoint(const String &p_path, int p_line, bool p_enabled) { + + Array msg; + msg.push_back(p_path); + msg.push_back(p_line); + msg.push_back(p_enabled); + _put_msg("breakpoint", msg); +} + +void ScriptEditorDebugger::reload_scripts() { + + _put_msg("reload_scripts", Array()); +} + +bool ScriptEditorDebugger::is_skip_breakpoints() { + return skip_breakpoints_value; +} + +void ScriptEditorDebugger::_error_activated() { + TreeItem *selected = error_tree->get_selected(); + + TreeItem *ci = selected->get_children(); + if (ci) { + selected->set_collapsed(!selected->is_collapsed()); + } +} + +void ScriptEditorDebugger::_error_selected() { + TreeItem *selected = error_tree->get_selected(); + Array meta = selected->get_metadata(0); + if (meta.size() == 0) { + return; + } + + emit_signal("error_selected", String(meta[0]), int(meta[1])); +} + +void ScriptEditorDebugger::_expand_errors_list() { + + TreeItem *root = error_tree->get_root(); + if (!root) + return; + + TreeItem *item = root->get_children(); + while (item) { + item->set_collapsed(false); + item = item->get_next(); + } +} + +void ScriptEditorDebugger::_collapse_errors_list() { + + TreeItem *root = error_tree->get_root(); + if (!root) + return; + + TreeItem *item = root->get_children(); + while (item) { + item->set_collapsed(true); + item = item->get_next(); + } +} + +void ScriptEditorDebugger::_clear_errors_list() { + + error_tree->clear(); + error_count = 0; + warning_count = 0; + _notification(NOTIFICATION_PROCESS); +} + +// Right click on specific file(s) or folder(s). +void ScriptEditorDebugger::_error_tree_item_rmb_selected(const Vector2 &p_pos) { + + item_menu->clear(); + item_menu->set_size(Size2(1, 1)); + + if (error_tree->is_anything_selected()) { + item_menu->add_icon_item(get_icon("ActionCopy", "EditorIcons"), TTR("Copy Error"), 0); + } + + if (item_menu->get_item_count() > 0) { + item_menu->set_position(error_tree->get_global_position() + p_pos); + item_menu->popup(); + } +} + +void ScriptEditorDebugger::_item_menu_id_pressed(int p_option) { + TreeItem *ti = error_tree->get_selected(); + while (ti->get_parent() != error_tree->get_root()) + ti = ti->get_parent(); + + String type; + + if (ti->get_icon(0) == get_icon("Warning", "EditorIcons")) { + type = "W "; + } else if (ti->get_icon(0) == get_icon("Error", "EditorIcons")) { + type = "E "; + } + + String text = ti->get_text(0) + " "; + int rpad_len = text.length(); + + text = type + text + ti->get_text(1) + "\n"; + TreeItem *ci = ti->get_children(); + while (ci) { + text += " " + ci->get_text(0).rpad(rpad_len) + ci->get_text(1) + "\n"; + ci = ci->get_next(); + } + + OS::get_singleton()->set_clipboard(text); +} + +void ScriptEditorDebugger::_tab_changed(int p_tab) { + if (tabs->get_tab_title(p_tab) == TTR("Video RAM")) { + // "Video RAM" tab was clicked, refresh the data it's dislaying when entering the tab. + _video_mem_request(); + } +} + +void ScriptEditorDebugger::_bind_methods() { + + ClassDB::bind_method(D_METHOD("_stack_dump_frame_selected"), &ScriptEditorDebugger::_stack_dump_frame_selected); + + ClassDB::bind_method(D_METHOD("debug_skip_breakpoints"), &ScriptEditorDebugger::debug_skip_breakpoints); + ClassDB::bind_method(D_METHOD("debug_copy"), &ScriptEditorDebugger::debug_copy); + + ClassDB::bind_method(D_METHOD("debug_next"), &ScriptEditorDebugger::debug_next); + ClassDB::bind_method(D_METHOD("debug_step"), &ScriptEditorDebugger::debug_step); + ClassDB::bind_method(D_METHOD("debug_break"), &ScriptEditorDebugger::debug_break); + ClassDB::bind_method(D_METHOD("debug_continue"), &ScriptEditorDebugger::debug_continue); + ClassDB::bind_method(D_METHOD("_export_csv"), &ScriptEditorDebugger::_export_csv); + ClassDB::bind_method(D_METHOD("_performance_draw"), &ScriptEditorDebugger::_performance_draw); + ClassDB::bind_method(D_METHOD("_performance_select"), &ScriptEditorDebugger::_performance_select); + ClassDB::bind_method(D_METHOD("_video_mem_request"), &ScriptEditorDebugger::_video_mem_request); + ClassDB::bind_method(D_METHOD("_live_edit_set"), &ScriptEditorDebugger::_live_edit_set); + ClassDB::bind_method(D_METHOD("_live_edit_clear"), &ScriptEditorDebugger::_live_edit_clear); + + ClassDB::bind_method(D_METHOD("_error_selected"), &ScriptEditorDebugger::_error_selected); + ClassDB::bind_method(D_METHOD("_error_activated"), &ScriptEditorDebugger::_error_activated); + ClassDB::bind_method(D_METHOD("_expand_errors_list"), &ScriptEditorDebugger::_expand_errors_list); + ClassDB::bind_method(D_METHOD("_collapse_errors_list"), &ScriptEditorDebugger::_collapse_errors_list); + ClassDB::bind_method(D_METHOD("_profiler_activate"), &ScriptEditorDebugger::_profiler_activate); + ClassDB::bind_method(D_METHOD("_visual_profiler_activate"), &ScriptEditorDebugger::_visual_profiler_activate); + ClassDB::bind_method(D_METHOD("_network_profiler_activate"), &ScriptEditorDebugger::_network_profiler_activate); + ClassDB::bind_method(D_METHOD("_profiler_seeked"), &ScriptEditorDebugger::_profiler_seeked); + ClassDB::bind_method(D_METHOD("_clear_errors_list"), &ScriptEditorDebugger::_clear_errors_list); + + ClassDB::bind_method(D_METHOD("_error_tree_item_rmb_selected"), &ScriptEditorDebugger::_error_tree_item_rmb_selected); + ClassDB::bind_method(D_METHOD("_item_menu_id_pressed"), &ScriptEditorDebugger::_item_menu_id_pressed); + ClassDB::bind_method(D_METHOD("_tab_changed"), &ScriptEditorDebugger::_tab_changed); + ClassDB::bind_method(D_METHOD("_file_selected"), &ScriptEditorDebugger::_file_selected); + ClassDB::bind_method(D_METHOD("_remote_object_selected", "id"), &ScriptEditorDebugger::_remote_object_selected); + ClassDB::bind_method(D_METHOD("_remote_object_edited", "id", "property", "value"), &ScriptEditorDebugger::_remote_object_edited); + ClassDB::bind_method(D_METHOD("_remote_object_property_updated", "id", "property"), &ScriptEditorDebugger::_remote_object_property_updated); + + ClassDB::bind_method(D_METHOD("live_debug_create_node"), &ScriptEditorDebugger::live_debug_create_node); + ClassDB::bind_method(D_METHOD("live_debug_instance_node"), &ScriptEditorDebugger::live_debug_instance_node); + ClassDB::bind_method(D_METHOD("live_debug_remove_node"), &ScriptEditorDebugger::live_debug_remove_node); + ClassDB::bind_method(D_METHOD("live_debug_remove_and_keep_node"), &ScriptEditorDebugger::live_debug_remove_and_keep_node); + ClassDB::bind_method(D_METHOD("live_debug_restore_node"), &ScriptEditorDebugger::live_debug_restore_node); + ClassDB::bind_method(D_METHOD("live_debug_duplicate_node"), &ScriptEditorDebugger::live_debug_duplicate_node); + ClassDB::bind_method(D_METHOD("live_debug_reparent_node"), &ScriptEditorDebugger::live_debug_reparent_node); + ClassDB::bind_method(D_METHOD("request_remote_object", "id"), &ScriptEditorDebugger::request_remote_object); + ClassDB::bind_method(D_METHOD("update_remote_object", "id", "property", "value"), &ScriptEditorDebugger::update_remote_object); + + ADD_SIGNAL(MethodInfo("stopped")); + ADD_SIGNAL(MethodInfo("stop_requested")); + ADD_SIGNAL(MethodInfo("stack_frame_selected", PropertyInfo(Variant::INT, "frame"))); + ADD_SIGNAL(MethodInfo("error_selected", PropertyInfo(Variant::INT, "error"))); + ADD_SIGNAL(MethodInfo("set_execution", PropertyInfo("script"), PropertyInfo(Variant::INT, "line"))); + ADD_SIGNAL(MethodInfo("clear_execution", PropertyInfo("script"))); + ADD_SIGNAL(MethodInfo("breaked", PropertyInfo(Variant::BOOL, "reallydid"), PropertyInfo(Variant::BOOL, "can_debug"))); + ADD_SIGNAL(MethodInfo("remote_object_requested", PropertyInfo(Variant::INT, "id"))); + ADD_SIGNAL(MethodInfo("remote_object_updated", PropertyInfo(Variant::INT, "id"))); + ADD_SIGNAL(MethodInfo("remote_object_property_updated", PropertyInfo(Variant::INT, "id"), PropertyInfo(Variant::STRING, "property"))); + ADD_SIGNAL(MethodInfo("remote_tree_updated")); +} + +ScriptEditorDebugger::ScriptEditorDebugger(EditorNode *p_editor) { + + ppeer = Ref<PacketPeerStream>(memnew(PacketPeerStream)); + ppeer->set_input_buffer_max_size((1024 * 1024 * 8) - 4); // 8 MiB should be enough, minus 4 bytes for separator. + editor = p_editor; + + tabs = memnew(TabContainer); + tabs->set_tab_align(TabContainer::ALIGN_LEFT); + tabs->add_style_override("panel", editor->get_gui_base()->get_stylebox("DebuggerPanel", "EditorStyles")); + tabs->connect_compat("tab_changed", this, "_tab_changed"); + + add_child(tabs); + + { //debugger + VBoxContainer *vbc = memnew(VBoxContainer); + vbc->set_name(TTR("Debugger")); + Control *dbg = vbc; + + HBoxContainer *hbc = memnew(HBoxContainer); + vbc->add_child(hbc); + + reason = memnew(Label); + reason->set_text(""); + hbc->add_child(reason); + reason->set_h_size_flags(SIZE_EXPAND_FILL); + reason->set_autowrap(true); + reason->set_max_lines_visible(3); + reason->set_mouse_filter(Control::MOUSE_FILTER_PASS); + + hbc->add_child(memnew(VSeparator)); + + skip_breakpoints = memnew(ToolButton); + hbc->add_child(skip_breakpoints); + skip_breakpoints->set_tooltip(TTR("Skip Breakpoints")); + skip_breakpoints->connect_compat("pressed", this, "debug_skip_breakpoints"); + + hbc->add_child(memnew(VSeparator)); + + copy = memnew(ToolButton); + hbc->add_child(copy); + copy->set_tooltip(TTR("Copy Error")); + copy->connect_compat("pressed", this, "debug_copy"); + + hbc->add_child(memnew(VSeparator)); + + step = memnew(ToolButton); + hbc->add_child(step); + step->set_tooltip(TTR("Step Into")); + step->set_shortcut(ED_GET_SHORTCUT("debugger/step_into")); + step->connect_compat("pressed", this, "debug_step"); + + next = memnew(ToolButton); + hbc->add_child(next); + next->set_tooltip(TTR("Step Over")); + next->set_shortcut(ED_GET_SHORTCUT("debugger/step_over")); + next->connect_compat("pressed", this, "debug_next"); + + hbc->add_child(memnew(VSeparator)); + + dobreak = memnew(ToolButton); + hbc->add_child(dobreak); + dobreak->set_tooltip(TTR("Break")); + dobreak->set_shortcut(ED_GET_SHORTCUT("debugger/break")); + dobreak->connect_compat("pressed", this, "debug_break"); + + docontinue = memnew(ToolButton); + hbc->add_child(docontinue); + docontinue->set_tooltip(TTR("Continue")); + docontinue->set_shortcut(ED_GET_SHORTCUT("debugger/continue")); + docontinue->connect_compat("pressed", this, "debug_continue"); + + HSplitContainer *sc = memnew(HSplitContainer); + vbc->add_child(sc); + sc->set_v_size_flags(SIZE_EXPAND_FILL); + + stack_dump = memnew(Tree); + stack_dump->set_allow_reselect(true); + stack_dump->set_columns(1); + stack_dump->set_column_titles_visible(true); + stack_dump->set_column_title(0, TTR("Stack Frames")); + stack_dump->set_h_size_flags(SIZE_EXPAND_FILL); + stack_dump->set_hide_root(true); + stack_dump->connect_compat("cell_selected", this, "_stack_dump_frame_selected"); + sc->add_child(stack_dump); + + inspector = memnew(EditorDebuggerInspector); + inspector->set_h_size_flags(SIZE_EXPAND_FILL); + inspector->set_enable_capitalize_paths(false); + inspector->set_read_only(true); + inspector->connect_compat("object_selected", this, "_remote_object_selected"); + inspector->connect_compat("object_edited", this, "_remote_object_edited"); + inspector->connect_compat("object_property_updated", this, "_remote_object_property_updated"); + sc->add_child(inspector); + tabs->add_child(dbg); + } + + { //errors + errors_tab = memnew(VBoxContainer); + errors_tab->set_name(TTR("Errors")); + + HBoxContainer *errhb = memnew(HBoxContainer); + errors_tab->add_child(errhb); + + Button *expand_all = memnew(Button); + expand_all->set_text(TTR("Expand All")); + expand_all->connect_compat("pressed", this, "_expand_errors_list"); + errhb->add_child(expand_all); + + Button *collapse_all = memnew(Button); + collapse_all->set_text(TTR("Collapse All")); + collapse_all->connect_compat("pressed", this, "_collapse_errors_list"); + errhb->add_child(collapse_all); + + Control *space = memnew(Control); + space->set_h_size_flags(SIZE_EXPAND_FILL); + errhb->add_child(space); + + clearbutton = memnew(Button); + clearbutton->set_text(TTR("Clear")); + clearbutton->set_h_size_flags(0); + clearbutton->connect_compat("pressed", this, "_clear_errors_list"); + errhb->add_child(clearbutton); + + error_tree = memnew(Tree); + error_tree->set_columns(2); + + error_tree->set_column_expand(0, false); + error_tree->set_column_min_width(0, 140); + + error_tree->set_column_expand(1, true); + + error_tree->set_select_mode(Tree::SELECT_ROW); + error_tree->set_hide_root(true); + error_tree->set_v_size_flags(SIZE_EXPAND_FILL); + error_tree->set_allow_rmb_select(true); + error_tree->connect_compat("item_rmb_selected", this, "_error_tree_item_rmb_selected"); + errors_tab->add_child(error_tree); + + item_menu = memnew(PopupMenu); + item_menu->connect_compat("id_pressed", this, "_item_menu_id_pressed"); + error_tree->add_child(item_menu); + + tabs->add_child(errors_tab); + } + + { // File dialog + file_dialog = memnew(EditorFileDialog); + file_dialog->connect_compat("file_selected", this, "_file_selected"); + add_child(file_dialog); + } + + { //profiler + profiler = memnew(EditorProfiler); + profiler->set_name(TTR("Profiler")); + tabs->add_child(profiler); + profiler->connect_compat("enable_profiling", this, "_profiler_activate"); + profiler->connect_compat("break_request", this, "_profiler_seeked"); + } + + { //frame profiler + visual_profiler = memnew(EditorVisualProfiler); + visual_profiler->set_name(TTR("Visual Profiler")); + tabs->add_child(visual_profiler); + visual_profiler->connect_compat("enable_profiling", this, "_visual_profiler_activate"); + visual_profiler->connect_compat("break_request", this, "_profiler_seeked"); + } + + { //network profiler + network_profiler = memnew(EditorNetworkProfiler); + network_profiler->set_name(TTR("Network Profiler")); + tabs->add_child(network_profiler); + network_profiler->connect_compat("enable_profiling", this, "_network_profiler_activate"); + } + + { //monitors + + HSplitContainer *hsp = memnew(HSplitContainer); + + perf_monitors = memnew(Tree); + perf_monitors->set_columns(2); + perf_monitors->set_column_title(0, TTR("Monitor")); + perf_monitors->set_column_title(1, TTR("Value")); + perf_monitors->set_column_titles_visible(true); + perf_monitors->connect_compat("item_edited", this, "_performance_select"); + hsp->add_child(perf_monitors); + + perf_draw = memnew(Control); + perf_draw->set_clip_contents(true); + perf_draw->connect_compat("draw", this, "_performance_draw"); + hsp->add_child(perf_draw); + + hsp->set_name(TTR("Monitors")); + hsp->set_split_offset(340 * EDSCALE); + tabs->add_child(hsp); + perf_max.resize(Performance::MONITOR_MAX); + + Map<String, TreeItem *> bases; + TreeItem *root = perf_monitors->create_item(); + perf_monitors->set_hide_root(true); + for (int i = 0; i < Performance::MONITOR_MAX; i++) { + + String n = Performance::get_singleton()->get_monitor_name(Performance::Monitor(i)); + Performance::MonitorType mtype = Performance::get_singleton()->get_monitor_type(Performance::Monitor(i)); + String base = n.get_slice("/", 0); + String name = n.get_slice("/", 1); + if (!bases.has(base)) { + TreeItem *b = perf_monitors->create_item(root); + b->set_text(0, base.capitalize()); + b->set_editable(0, false); + b->set_selectable(0, false); + b->set_expand_right(0, true); + bases[base] = b; + } + + TreeItem *it = perf_monitors->create_item(bases[base]); + it->set_metadata(1, mtype); + it->set_cell_mode(0, TreeItem::CELL_MODE_CHECK); + it->set_editable(0, true); + it->set_selectable(0, false); + it->set_selectable(1, false); + it->set_text(0, name.capitalize()); + perf_items.push_back(it); + perf_max.write[i] = 0; + } + + info_message = memnew(Label); + info_message->set_text(TTR("Pick one or more items from the list to display the graph.")); + info_message->set_valign(Label::VALIGN_CENTER); + info_message->set_align(Label::ALIGN_CENTER); + info_message->set_autowrap(true); + info_message->set_custom_minimum_size(Size2(100 * EDSCALE, 0)); + info_message->set_anchors_and_margins_preset(PRESET_WIDE, PRESET_MODE_KEEP_SIZE, 8 * EDSCALE); + perf_draw->add_child(info_message); + } + + { //vmem inspect + VBoxContainer *vmem_vb = memnew(VBoxContainer); + HBoxContainer *vmem_hb = memnew(HBoxContainer); + Label *vmlb = memnew(Label(TTR("List of Video Memory Usage by Resource:") + " ")); + vmlb->set_h_size_flags(SIZE_EXPAND_FILL); + vmem_hb->add_child(vmlb); + vmem_hb->add_child(memnew(Label(TTR("Total:") + " "))); + vmem_total = memnew(LineEdit); + vmem_total->set_editable(false); + vmem_total->set_custom_minimum_size(Size2(100, 0) * EDSCALE); + vmem_hb->add_child(vmem_total); + vmem_refresh = memnew(ToolButton); + vmem_hb->add_child(vmem_refresh); + vmem_vb->add_child(vmem_hb); + vmem_refresh->connect_compat("pressed", this, "_video_mem_request"); + + VBoxContainer *vmmc = memnew(VBoxContainer); + vmem_tree = memnew(Tree); + vmem_tree->set_v_size_flags(SIZE_EXPAND_FILL); + vmem_tree->set_h_size_flags(SIZE_EXPAND_FILL); + vmmc->add_child(vmem_tree); + vmmc->set_v_size_flags(SIZE_EXPAND_FILL); + vmem_vb->add_child(vmmc); + + vmem_vb->set_name(TTR("Video RAM")); + vmem_tree->set_columns(4); + vmem_tree->set_column_titles_visible(true); + vmem_tree->set_column_title(0, TTR("Resource Path")); + vmem_tree->set_column_expand(0, true); + vmem_tree->set_column_expand(1, false); + vmem_tree->set_column_title(1, TTR("Type")); + vmem_tree->set_column_min_width(1, 100 * EDSCALE); + vmem_tree->set_column_expand(2, false); + vmem_tree->set_column_title(2, TTR("Format")); + vmem_tree->set_column_min_width(2, 150 * EDSCALE); + vmem_tree->set_column_expand(3, false); + vmem_tree->set_column_title(3, TTR("Usage")); + vmem_tree->set_column_min_width(3, 80 * EDSCALE); + vmem_tree->set_hide_root(true); + + tabs->add_child(vmem_vb); + } + + { // misc + VBoxContainer *misc = memnew(VBoxContainer); + misc->set_name(TTR("Misc")); + tabs->add_child(misc); + + GridContainer *info_left = memnew(GridContainer); + info_left->set_columns(2); + misc->add_child(info_left); + clicked_ctrl = memnew(LineEdit); + clicked_ctrl->set_h_size_flags(SIZE_EXPAND_FILL); + info_left->add_child(memnew(Label(TTR("Clicked Control:")))); + info_left->add_child(clicked_ctrl); + clicked_ctrl_type = memnew(LineEdit); + info_left->add_child(memnew(Label(TTR("Clicked Control Type:")))); + info_left->add_child(clicked_ctrl_type); + + scene_tree = memnew(SceneDebuggerTree); + live_edit_root = memnew(LineEdit); + live_edit_root->set_h_size_flags(SIZE_EXPAND_FILL); + + { + HBoxContainer *lehb = memnew(HBoxContainer); + Label *l = memnew(Label(TTR("Live Edit Root:"))); + info_left->add_child(l); + lehb->add_child(live_edit_root); + le_set = memnew(Button(TTR("Set From Tree"))); + lehb->add_child(le_set); + le_clear = memnew(Button(TTR("Clear"))); + lehb->add_child(le_clear); + info_left->add_child(lehb); + } + + misc->add_child(memnew(VSeparator)); + + HBoxContainer *buttons = memnew(HBoxContainer); + + export_csv = memnew(Button(TTR("Export measures as CSV"))); + export_csv->connect_compat("pressed", this, "_export_csv"); + buttons->add_child(export_csv); + + misc->add_child(buttons); + } + + msgdialog = memnew(AcceptDialog); + add_child(msgdialog); + + live_debug = true; + camera_override = OVERRIDE_NONE; + last_path_id = false; + error_count = 0; + warning_count = 0; + _update_buttons_state(); +} + +ScriptEditorDebugger::~ScriptEditorDebugger() { + + ppeer->set_stream_peer(Ref<StreamPeer>()); + + inspector->clear_cache(); + memdelete(scene_tree); +} diff --git a/editor/script_editor_debugger.h b/editor/debugger/script_editor_debugger.h index 589a011bff..fd034ba983 100644 --- a/editor/script_editor_debugger.h +++ b/editor/debugger/script_editor_debugger.h @@ -32,7 +32,8 @@ #define SCRIPT_EDITOR_DEBUGGER_H #include "core/io/packet_peer.h" -#include "core/io/tcp_server.h" +#include "core/io/stream_peer_tcp.h" +#include "editor/debugger/editor_debugger_inspector.h" #include "editor/editor_inspector.h" #include "editor/property_editor.h" #include "scene/3d/camera.h" @@ -41,7 +42,6 @@ class Tree; class EditorNode; -class ScriptEditorDebuggerVariables; class LineEdit; class TabContainer; class RichTextLabel; @@ -51,14 +51,16 @@ class TreeItem; class HSplitContainer; class ItemList; class EditorProfiler; +class EditorVisualProfiler; class EditorNetworkProfiler; - -class ScriptEditorDebuggerInspectedObject; +class SceneDebuggerTree; class ScriptEditorDebugger : public MarginContainer { GDCLASS(ScriptEditorDebugger, MarginContainer); + friend class EditorDebuggerNode; + public: enum CameraOverride { OVERRIDE_NONE, @@ -76,16 +78,8 @@ private: MESSAGE_SUCCESS, }; - enum ItemMenu { - ITEM_MENU_COPY_ERROR, - ITEM_MENU_SAVE_REMOTE_NODE, - ITEM_MENU_COPY_NODE_PATH, - }; - AcceptDialog *msgdialog; - Button *debugger_button; - LineEdit *clicked_ctrl; LineEdit *clicked_ctrl_type; LineEdit *live_edit_root; @@ -93,35 +87,15 @@ private: Button *le_clear; Button *export_csv; - bool updating_scene_tree; - float inspect_scene_tree_timeout; - float inspect_edited_object_timeout; - bool auto_switch_remote_scene_tree; - ObjectID inspected_object_id; - ScriptEditorDebuggerVariables *variables; - Map<ObjectID, ScriptEditorDebuggerInspectedObject *> remote_objects; - Set<ObjectID> unfold_cache; - VBoxContainer *errors_tab; Tree *error_tree; - Tree *inspect_scene_tree; Button *clearbutton; PopupMenu *item_menu; EditorFileDialog *file_dialog; - enum FileDialogMode { - SAVE_CSV, - SAVE_NODE, - }; - FileDialogMode file_dialog_mode; int error_count; int warning_count; - int last_error_count; - int last_warning_count; - - bool hide_on_stop; - bool enable_external_editor; bool skip_breakpoints_value = false; Ref<Script> stack_script; @@ -134,10 +108,11 @@ private: Button *copy; Button *step; Button *next; - Button *back; - Button *forward; Button *dobreak; Button *docontinue; + // Reference to "Remote" tab in scene tree. Needed by _live_edit_set and buttons state. + // Each debugger should have it's tree in the future I guess. + const Tree *editor_remote_tree = NULL; List<Vector<float> > perf_history; Vector<float> perf_max; @@ -154,26 +129,25 @@ private: LineEdit *vmem_total; Tree *stack_dump; - EditorInspector *inspector; + EditorDebuggerInspector *inspector; + SceneDebuggerTree *scene_tree; - Ref<TCP_Server> server; Ref<StreamPeerTCP> connection; Ref<PacketPeerStream> ppeer; - String message_type; - Array message; - int pending_in_queue; - HashMap<NodePath, int> node_path_cache; int last_path_id; Map<String, int> res_path_cache; EditorProfiler *profiler; + EditorVisualProfiler *visual_profiler; EditorNetworkProfiler *network_profiler; EditorNode *editor; - bool breaked; + OS::ProcessID remote_pid = 0; + bool breaked = false; + bool can_debug = false; bool live_debug; @@ -182,18 +156,14 @@ private: void _performance_draw(); void _performance_select(); void _stack_dump_frame_selected(); - void _output_clear(); - void _scene_tree_folded(Object *obj); - void _scene_tree_selected(); - void _scene_tree_rmb_selected(const Vector2 &p_position); void _file_selected(const String &p_file); - void _scene_tree_request(); void _parse_message(const String &p_msg, const Array &p_data); void _set_reason_text(const String &p_reason, MessageType p_type); - void _scene_tree_property_select_object(ObjectID p_object); - void _scene_tree_property_value_edited(const String &p_prop, const Variant &p_value); - int _update_scene_tree(TreeItem *parent, const Array &nodes, int current_index); + void _update_buttons_state(); + void _remote_object_selected(ObjectID p_object); + void _remote_object_edited(ObjectID, const String &p_prop, const Variant &p_value); + void _remote_object_property_updated(ObjectID p_id, const String &p_property); void _video_mem_request(); @@ -213,33 +183,40 @@ private: void _expand_errors_list(); void _collapse_errors_list(); + void _visual_profiler_activate(bool p_enable); void _profiler_activate(bool p_enable); void _profiler_seeked(); void _network_profiler_activate(bool p_enable); - void _paused(); - - void _set_remote_object(ObjectID p_id, ScriptEditorDebuggerInspectedObject *p_obj); - void _clear_remote_objects(); void _clear_errors_list(); void _error_tree_item_rmb_selected(const Vector2 &p_pos); void _item_menu_id_pressed(int p_option); void _tab_changed(int p_tab); + void _put_msg(String p_message, Array p_data); void _export_csv(); void _clear_execution(); + void _stop_and_notify(); protected: void _notification(int p_what); static void _bind_methods(); public: - void start(); - void pause(); - void unpause(); + void request_remote_object(ObjectID p_obj_id); + void update_remote_object(ObjectID p_obj_id, const String &p_prop, const Variant &p_value); + Object *get_remote_object(ObjectID p_id); + + // Needed by _live_edit_set, buttons state. + void set_editor_remote_tree(const Tree *p_tree) { editor_remote_tree = p_tree; } + + void request_remote_tree(); + const SceneDebuggerTree *get_remote_tree(); + + void start(Ref<StreamPeerTCP> p_connection); void stop(); void debug_skip_breakpoints(); @@ -249,14 +226,24 @@ public: void debug_step(); void debug_break(); void debug_continue(); - + bool is_breaked() const { return breaked; } + bool is_debuggable() const { return can_debug; } + bool is_session_active() { return connection.is_valid() && connection->is_connected_to_host(); }; + int get_remote_pid() const { return remote_pid; } + + int get_error_count() const { return error_count; } + int get_warning_count() const { return warning_count; } + String get_stack_script_file() const; + int get_stack_script_line() const; + int get_stack_script_frame() const; + + void update_tabs(); + void clear_style(); String get_var_value(const String &p_var) const; + void save_node(ObjectID p_id, const String &p_file); void set_live_debugging(bool p_enable); - static void _method_changeds(void *p_ud, Object *p_base, const StringName &p_name, VARIANT_ARG_DECLARE); - static void _property_changeds(void *p_ud, Object *p_base, const StringName &p_property, const Variant &p_value); - void live_debug_create_node(const NodePath &p_parent, const String &p_type, const String &p_name); void live_debug_instance_node(const NodePath &p_parent, const String &p_path, const String &p_name); void live_debug_remove_node(const NodePath &p_at); @@ -272,15 +259,6 @@ public: void update_live_edit_root(); - void set_hide_on_stop(bool p_hide); - - bool get_debug_with_external_editor() const; - void set_debug_with_external_editor(bool p_enabled); - - Ref<Script> get_dump_stack_script() const; - - void set_tool_button(Button *p_tb) { debugger_button = p_tb; } - void reload_scripts(); bool is_skip_breakpoints(); diff --git a/editor/dependency_editor.cpp b/editor/dependency_editor.cpp index df957611cf..e2a447cfcf 100644 --- a/editor/dependency_editor.cpp +++ b/editor/dependency_editor.cpp @@ -174,7 +174,7 @@ void DependencyEditor::_update_list() { TreeItem *root = tree->create_item(); - Ref<Texture> folder = get_icon("folder", "FileDialog"); + Ref<Texture2D> folder = get_icon("folder", "FileDialog"); bool broken = false; @@ -195,7 +195,7 @@ void DependencyEditor::_update_list() { } String name = path.get_file(); - Ref<Texture> icon = EditorNode::get_singleton()->get_class_icon(type); + Ref<Texture2D> icon = EditorNode::get_singleton()->get_class_icon(type); item->set_text(0, name); item->set_icon(0, icon); item->set_metadata(0, type); @@ -247,7 +247,7 @@ DependencyEditor::DependencyEditor() { tree->set_column_title(0, TTR("Resource")); tree->set_column_title(1, TTR("Path")); tree->set_hide_root(true); - tree->connect("button_pressed", this, "_load_pressed"); + tree->connect_compat("button_pressed", this, "_load_pressed"); HBoxContainer *hbc = memnew(HBoxContainer); Label *label = memnew(Label(TTR("Dependencies:"))); @@ -255,7 +255,7 @@ DependencyEditor::DependencyEditor() { hbc->add_spacer(); fixdeps = memnew(Button(TTR("Fix Broken"))); hbc->add_child(fixdeps); - fixdeps->connect("pressed", this, "_fix_all"); + fixdeps->connect_compat("pressed", this, "_fix_all"); vb->add_child(hbc); @@ -267,7 +267,7 @@ DependencyEditor::DependencyEditor() { set_title(TTR("Dependency Editor")); search = memnew(EditorFileDialog); - search->connect("file_selected", this, "_searched"); + search->connect_compat("file_selected", this, "_searched"); search->set_mode(EditorFileDialog::MODE_OPEN_FILE); search->set_title(TTR("Search Replacement Resource:")); add_child(search); @@ -338,7 +338,7 @@ void DependencyEditorOwners::_fill_owners(EditorFileSystemDirectory *efsd) { if (!found) continue; - Ref<Texture> icon = EditorNode::get_singleton()->get_class_icon(efsd->get_file_type(i)); + Ref<Texture2D> icon = EditorNode::get_singleton()->get_class_icon(efsd->get_file_type(i)); owners->add_item(efsd->get_file_path(i), icon); } @@ -360,12 +360,12 @@ DependencyEditorOwners::DependencyEditorOwners(EditorNode *p_editor) { file_options = memnew(PopupMenu); add_child(file_options); - file_options->connect("id_pressed", this, "_file_option"); + file_options->connect_compat("id_pressed", this, "_file_option"); owners = memnew(ItemList); owners->set_select_mode(ItemList::SELECT_SINGLE); - owners->connect("item_rmb_selected", this, "_list_rmb_select"); - owners->connect("item_activated", this, "_select_file"); + owners->connect_compat("item_rmb_selected", this, "_list_rmb_select"); + owners->connect_compat("item_activated", this, "_select_file"); owners->set_allow_rmb_select(true); add_child(owners); } @@ -446,7 +446,7 @@ void DependencyRemoveDialog::_build_removed_dependency_tree(const Vector<Removed } //List this file under this dependency - Ref<Texture> icon = EditorNode::get_singleton()->get_class_icon(rd.file_type); + Ref<Texture2D> icon = EditorNode::get_singleton()->get_class_icon(rd.file_type); TreeItem *file_item = owners->create_item(tree_items[rd.dependency]); file_item->set_text(0, rd.file); file_item->set_icon(0, icon); @@ -609,7 +609,7 @@ void DependencyErrorDialog::show(Mode p_mode, const String &p_for_file, const Ve if (report[i].get_slice_count("::") > 0) type = report[i].get_slice("::", 1); - Ref<Texture> icon = EditorNode::get_singleton()->get_class_icon(type); + Ref<Texture2D> icon = EditorNode::get_singleton()->get_class_icon(type); TreeItem *ti = files->create_item(root); ti->set_text(0, dep); @@ -720,7 +720,7 @@ bool OrphanResourcesDialog::_fill_owners(EditorFileSystemDirectory *efsd, HashMa String type = efsd->get_file_type(i); - Ref<Texture> icon = EditorNode::get_singleton()->get_class_icon(type); + Ref<Texture2D> icon = EditorNode::get_singleton()->get_class_icon(type); ti->set_icon(0, icon); int ds = efsd->get_file_deps(i).size(); ti->set_text(1, itos(ds)); @@ -800,7 +800,7 @@ OrphanResourcesDialog::OrphanResourcesDialog() { add_child(delete_confirm); dep_edit = memnew(DependencyEditor); add_child(dep_edit); - delete_confirm->connect("confirmed", this, "_delete_confirm"); + delete_confirm->connect_compat("confirmed", this, "_delete_confirm"); set_hide_on_ok(false); VBoxContainer *vbc = memnew(VBoxContainer); @@ -816,5 +816,5 @@ OrphanResourcesDialog::OrphanResourcesDialog() { files->set_column_title(1, TTR("Owns")); files->set_hide_root(true); vbc->add_margin_child(TTR("Resources Without Explicit Ownership:"), files, true); - files->connect("button_pressed", this, "_button_pressed"); + files->connect_compat("button_pressed", this, "_button_pressed"); } diff --git a/editor/dictionary_property_edit.cpp b/editor/dictionary_property_edit.cpp index bb01fadb72..82db639379 100644 --- a/editor/dictionary_property_edit.cpp +++ b/editor/dictionary_property_edit.cpp @@ -190,5 +190,4 @@ bool DictionaryPropertyEdit::_get(const StringName &p_name, Variant &r_ret) cons } DictionaryPropertyEdit::DictionaryPropertyEdit() { - obj = 0; } diff --git a/editor/doc/doc_data.cpp b/editor/doc/doc_data.cpp index adfffe27ba..3fd9e3182d 100644 --- a/editor/doc/doc_data.cpp +++ b/editor/doc/doc_data.cpp @@ -304,6 +304,8 @@ void DocData::generate(bool p_basic_types) { } } + //used to track uninitialized values using valgrind + //print_line("getting default value for " + String(name) + "." + String(E->get().name)); if (default_value_valid && default_value.get_type() != Variant::OBJECT) { prop.default_value = default_value.get_construct_string().replace("\n", ""); } @@ -483,7 +485,7 @@ void DocData::generate(bool p_basic_types) { PropertyDoc pd; pd.name = E->get(); - pd.type = "Texture"; + pd.type = "Texture2D"; c.theme_properties.push_back(pd); } l.clear(); @@ -531,7 +533,7 @@ void DocData::generate(bool p_basic_types) { ClassDoc &c = class_list[cname]; c.name = cname; - Variant::CallError cerror; + Callable::CallError cerror; Variant v = Variant::construct(Variant::Type(i), NULL, 0, cerror); List<MethodInfo> method_list; @@ -560,11 +562,12 @@ void DocData::generate(bool p_basic_types) { method.arguments.push_back(ad); } - if (mi.return_val.type == Variant::NIL) { - if (mi.return_val.name != "") - method.return_type = "Variant"; - } else { - method.return_type = Variant::get_type_name(mi.return_val.type); + return_doc_from_retinfo(method, mi.return_val); + + if (mi.flags & METHOD_FLAG_VARARG) { + if (method.qualifiers != "") + method.qualifiers += " "; + method.qualifiers += "vararg"; } c.methods.push_back(method); @@ -1030,7 +1033,7 @@ Error DocData::save_classes(const String &p_default_path, const Map<String, Stri String header = "<class name=\"" + c.name + "\""; if (c.inherits != "") header += " inherits=\"" + c.inherits + "\""; - header += String(" version=\"") + VERSION_NUMBER + "\""; + header += String(" version=\"") + VERSION_BRANCH + "\""; header += ">"; _write_string(f, 0, header); diff --git a/editor/doc/doc_dump.cpp b/editor/doc/doc_dump.cpp index d7e1d257f2..4bcf0c5bf5 100644 --- a/editor/doc/doc_dump.cpp +++ b/editor/doc/doc_dump.cpp @@ -83,7 +83,7 @@ void DocDump::dump(const String &p_file) { FileAccess *f = FileAccess::open(p_file, FileAccess::WRITE); _write_string(f, 0, "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>"); - _write_string(f, 0, String("<doc version=\"") + VERSION_NUMBER + "\" name=\"Engine Types\">"); + _write_string(f, 0, String("<doc version=\"") + VERSION_BRANCH + "\" name=\"Engine Types\">"); while (class_list.size()) { @@ -165,6 +165,9 @@ void DocDump::dump(const String &p_file) { //keep it break; case Variant::STRING: + case Variant::STRING_NAME: + default_arg_text = "@\"" + default_arg_text + "\""; + break; case Variant::NODE_PATH: default_arg_text = "\"" + default_arg_text + "\""; break; @@ -184,12 +187,12 @@ void DocDump::dump(const String &p_file) { case Variant::AABB: case Variant::BASIS: case Variant::COLOR: - case Variant::POOL_BYTE_ARRAY: - case Variant::POOL_INT_ARRAY: - case Variant::POOL_REAL_ARRAY: - case Variant::POOL_STRING_ARRAY: - case Variant::POOL_VECTOR3_ARRAY: - case Variant::POOL_COLOR_ARRAY: + case Variant::PACKED_BYTE_ARRAY: + case Variant::PACKED_INT_ARRAY: + case Variant::PACKED_REAL_ARRAY: + case Variant::PACKED_STRING_ARRAY: + case Variant::PACKED_VECTOR3_ARRAY: + case Variant::PACKED_COLOR_ARRAY: default_arg_text = Variant::get_type_name(default_arg.get_type()) + "(" + default_arg_text + ")"; break; case Variant::OBJECT: diff --git a/editor/editor_about.cpp b/editor/editor_about.cpp index ba653017ef..37d653ed43 100644 --- a/editor/editor_about.cpp +++ b/editor/editor_about.cpp @@ -255,7 +255,7 @@ EditorAbout::EditorAbout() { _tpl_text->set_v_size_flags(Control::SIZE_EXPAND_FILL); tpl_hbc->add_child(_tpl_text); - _tpl_tree->connect("item_selected", this, "_license_tree_selected"); + _tpl_tree->connect_compat("item_selected", this, "_license_tree_selected"); tpl_ti_all->select(0); _tpl_text->set_text(tpl_ti_all->get_metadata(0)); } diff --git a/editor/editor_asset_installer.cpp b/editor/editor_asset_installer.cpp index 86611bd20a..8a6fc4cd12 100644 --- a/editor/editor_asset_installer.cpp +++ b/editor/editor_asset_installer.cpp @@ -110,7 +110,7 @@ void EditorAssetInstaller::open(const String &p_path, int p_depth) { ret = unzGoToNextFile(pkg); } - Map<String, Ref<Texture> > extension_guess; + Map<String, Ref<Texture2D> > extension_guess; { extension_guess["png"] = get_icon("ImageTexture", "EditorIcons"); extension_guess["jpg"] = get_icon("ImageTexture", "EditorIcons"); @@ -122,7 +122,7 @@ void EditorAssetInstaller::open(const String &p_path, int p_depth) { extension_guess["vs"] = get_icon("VisualScript", "EditorIcons"); } - Ref<Texture> generic_extension = get_icon("Object", "EditorIcons"); + Ref<Texture2D> generic_extension = get_icon("Object", "EditorIcons"); unzClose(pkg); @@ -318,7 +318,7 @@ EditorAssetInstaller::EditorAssetInstaller() { tree = memnew(Tree); vb->add_margin_child(TTR("Package Contents:"), tree, true); - tree->connect("item_edited", this, "_item_edited"); + tree->connect_compat("item_edited", this, "_item_edited"); error = memnew(AcceptDialog); add_child(error); diff --git a/editor/editor_audio_buses.cpp b/editor/editor_audio_buses.cpp index 0a60aabd2d..1a72b6e1ca 100644 --- a/editor/editor_audio_buses.cpp +++ b/editor/editor_audio_buses.cpp @@ -144,8 +144,8 @@ void EditorAudioBus::_notification(int p_what) { if (activity_found != channel[i].prev_active) { if (activity_found) { - channel[i].vu_l->set_over_texture(Ref<Texture>()); - channel[i].vu_r->set_over_texture(Ref<Texture>()); + channel[i].vu_l->set_over_texture(Ref<Texture2D>()); + channel[i].vu_r->set_over_texture(Ref<Texture2D>()); } else { channel[i].vu_l->set_over_texture(disabled_vu); channel[i].vu_r->set_over_texture(disabled_vu); @@ -799,8 +799,8 @@ EditorAudioBus::EditorAudioBus(EditorAudioBuses *p_buses, bool p_is_master) { set_v_size_flags(SIZE_EXPAND_FILL); track_name = memnew(LineEdit); - track_name->connect("text_entered", this, "_name_changed"); - track_name->connect("focus_exited", this, "_name_focus_exit"); + track_name->connect_compat("text_entered", this, "_name_changed"); + track_name->connect_compat("focus_exited", this, "_name_focus_exit"); vb->add_child(track_name); HBoxContainer *hbc = memnew(HBoxContainer); @@ -809,19 +809,19 @@ EditorAudioBus::EditorAudioBus(EditorAudioBuses *p_buses, bool p_is_master) { solo->set_toggle_mode(true); solo->set_tooltip(TTR("Solo")); solo->set_focus_mode(FOCUS_NONE); - solo->connect("pressed", this, "_solo_toggled"); + solo->connect_compat("pressed", this, "_solo_toggled"); hbc->add_child(solo); mute = memnew(ToolButton); mute->set_toggle_mode(true); mute->set_tooltip(TTR("Mute")); mute->set_focus_mode(FOCUS_NONE); - mute->connect("pressed", this, "_mute_toggled"); + mute->connect_compat("pressed", this, "_mute_toggled"); hbc->add_child(mute); bypass = memnew(ToolButton); bypass->set_toggle_mode(true); bypass->set_tooltip(TTR("Bypass")); bypass->set_focus_mode(FOCUS_NONE); - bypass->connect("pressed", this, "_bypass_toggled"); + bypass->connect_compat("pressed", this, "_bypass_toggled"); hbc->add_child(bypass); hbc->add_spacer(); @@ -878,9 +878,9 @@ EditorAudioBus::EditorAudioBus(EditorAudioBuses *p_buses, bool p_is_master) { preview_timer->set_one_shot(true); add_child(preview_timer); - slider->connect("value_changed", this, "_volume_changed"); - slider->connect("value_changed", this, "_show_value"); - preview_timer->connect("timeout", this, "_hide_value_preview"); + slider->connect_compat("value_changed", this, "_volume_changed"); + slider->connect_compat("value_changed", this, "_show_value"); + preview_timer->connect_compat("timeout", this, "_hide_value_preview"); hb->add_child(slider); cc = 0; @@ -918,24 +918,24 @@ EditorAudioBus::EditorAudioBus(EditorAudioBuses *p_buses, bool p_is_master) { effects->set_hide_folding(true); effects->set_v_size_flags(SIZE_EXPAND_FILL); vb->add_child(effects); - effects->connect("item_edited", this, "_effect_edited"); - effects->connect("cell_selected", this, "_effect_selected"); + effects->connect_compat("item_edited", this, "_effect_edited"); + effects->connect_compat("cell_selected", this, "_effect_selected"); effects->set_edit_checkbox_cell_only_when_checkbox_is_pressed(true); effects->set_drag_forwarding(this); - effects->connect("item_rmb_selected", this, "_effect_rmb"); + effects->connect_compat("item_rmb_selected", this, "_effect_rmb"); effects->set_allow_rmb_select(true); effects->set_focus_mode(FOCUS_CLICK); effects->set_allow_reselect(true); send = memnew(OptionButton); send->set_clip_text(true); - send->connect("item_selected", this, "_send_selected"); + send->connect_compat("item_selected", this, "_send_selected"); vb->add_child(send); set_focus_mode(FOCUS_CLICK); effect_options = memnew(PopupMenu); - effect_options->connect("index_pressed", this, "_effect_add"); + effect_options->connect_compat("index_pressed", this, "_effect_add"); add_child(effect_options); List<StringName> effects; ClassDB::get_inheriters_from_class("AudioEffect", &effects); @@ -944,7 +944,7 @@ EditorAudioBus::EditorAudioBus(EditorAudioBuses *p_buses, bool p_is_master) { if (!ClassDB::can_instance(E->get())) continue; - Ref<Texture> icon = EditorNode::get_singleton()->get_class_icon(E->get()); + Ref<Texture2D> icon = EditorNode::get_singleton()->get_class_icon(E->get()); String name = E->get().operator String().replace("AudioEffect", ""); effect_options->add_item(name); effect_options->set_item_metadata(effect_options->get_item_count() - 1, E->get()); @@ -956,12 +956,12 @@ EditorAudioBus::EditorAudioBus(EditorAudioBuses *p_buses, bool p_is_master) { bus_popup->add_item(TTR("Delete")); bus_popup->set_item_disabled(1, is_master); bus_popup->add_item(TTR("Reset Volume")); - bus_popup->connect("index_pressed", this, "_bus_popup_pressed"); + bus_popup->connect_compat("index_pressed", this, "_bus_popup_pressed"); delete_effect_popup = memnew(PopupMenu); delete_effect_popup->add_item(TTR("Delete Effect")); add_child(delete_effect_popup); - delete_effect_popup->connect("index_pressed", this, "_delete_effect_pressed"); + delete_effect_popup->connect_compat("index_pressed", this, "_delete_effect_pressed"); } void EditorAudioBusDrop::_notification(int p_what) { @@ -1029,11 +1029,11 @@ void EditorAudioBuses::_update_buses() { bool is_master = (i == 0); EditorAudioBus *audio_bus = memnew(EditorAudioBus(this, is_master)); bus_hb->add_child(audio_bus); - audio_bus->connect("delete_request", this, "_delete_bus", varray(audio_bus), CONNECT_DEFERRED); - audio_bus->connect("duplicate_request", this, "_duplicate_bus", varray(), CONNECT_DEFERRED); - audio_bus->connect("vol_reset_request", this, "_reset_bus_volume", varray(audio_bus), CONNECT_DEFERRED); - audio_bus->connect("drop_end_request", this, "_request_drop_end"); - audio_bus->connect("dropped", this, "_drop_at_index", varray(), CONNECT_DEFERRED); + audio_bus->connect_compat("delete_request", this, "_delete_bus", varray(audio_bus), CONNECT_DEFERRED); + audio_bus->connect_compat("duplicate_request", this, "_duplicate_bus", varray(), CONNECT_DEFERRED); + audio_bus->connect_compat("vol_reset_request", this, "_reset_bus_volume", varray(audio_bus), CONNECT_DEFERRED); + audio_bus->connect_compat("drop_end_request", this, "_request_drop_end"); + audio_bus->connect_compat("dropped", this, "_drop_at_index", varray(), CONNECT_DEFERRED); } } @@ -1187,7 +1187,7 @@ void EditorAudioBuses::_request_drop_end() { bus_hb->add_child(drop_end); drop_end->set_custom_minimum_size(Object::cast_to<Control>(bus_hb->get_child(0))->get_size()); - drop_end->connect("dropped", this, "_drop_at_index", varray(), CONNECT_DEFERRED); + drop_end->connect_compat("dropped", this, "_drop_at_index", varray(), CONNECT_DEFERRED); } } @@ -1339,7 +1339,7 @@ EditorAudioBuses::EditorAudioBuses() { top_hb->add_child(add); add->set_text(TTR("Add Bus")); add->set_tooltip(TTR("Add a new Audio Bus to this layout.")); - add->connect("pressed", this, "_add_bus"); + add->connect_compat("pressed", this, "_add_bus"); VSeparator *separator = memnew(VSeparator); top_hb->add_child(separator); @@ -1348,25 +1348,25 @@ EditorAudioBuses::EditorAudioBuses() { load->set_text(TTR("Load")); load->set_tooltip(TTR("Load an existing Bus Layout.")); top_hb->add_child(load); - load->connect("pressed", this, "_load_layout"); + load->connect_compat("pressed", this, "_load_layout"); save_as = memnew(Button); save_as->set_text(TTR("Save As")); save_as->set_tooltip(TTR("Save this Bus Layout to a file.")); top_hb->add_child(save_as); - save_as->connect("pressed", this, "_save_as_layout"); + save_as->connect_compat("pressed", this, "_save_as_layout"); _default = memnew(Button); _default->set_text(TTR("Load Default")); _default->set_tooltip(TTR("Load the default Bus Layout.")); top_hb->add_child(_default); - _default->connect("pressed", this, "_load_default_layout"); + _default->connect_compat("pressed", this, "_load_default_layout"); _new = memnew(Button); _new->set_text(TTR("Create")); _new->set_tooltip(TTR("Create a new Bus Layout.")); top_hb->add_child(_new); - _new->connect("pressed", this, "_new_layout"); + _new->connect_compat("pressed", this, "_new_layout"); bus_scroll = memnew(ScrollContainer); bus_scroll->set_v_size_flags(SIZE_EXPAND_FILL); @@ -1381,7 +1381,7 @@ EditorAudioBuses::EditorAudioBuses() { save_timer->set_wait_time(0.8); save_timer->set_one_shot(true); add_child(save_timer); - save_timer->connect("timeout", this, "_server_save"); + save_timer->connect_compat("timeout", this, "_server_save"); set_v_size_flags(SIZE_EXPAND_FILL); @@ -1394,7 +1394,7 @@ EditorAudioBuses::EditorAudioBuses() { file_dialog->add_filter("*." + E->get() + "; Audio Bus Layout"); } add_child(file_dialog); - file_dialog->connect("file_selected", this, "_file_dialog_callback"); + file_dialog->connect_compat("file_selected", this, "_file_dialog_callback"); set_process(true); } diff --git a/editor/editor_audio_buses.h b/editor/editor_audio_buses.h index ef6f7e458f..72098c7232 100644 --- a/editor/editor_audio_buses.h +++ b/editor/editor_audio_buses.h @@ -54,7 +54,7 @@ class EditorAudioBus : public PanelContainer { GDCLASS(EditorAudioBus, PanelContainer); - Ref<Texture> disabled_vu; + Ref<Texture2D> disabled_vu; LineEdit *track_name; MenuButton *bus_options; VSlider *slider; diff --git a/editor/editor_autoload_settings.cpp b/editor/editor_autoload_settings.cpp index dba8c2ec8c..feb6dbd302 100644 --- a/editor/editor_autoload_settings.cpp +++ b/editor/editor_autoload_settings.cpp @@ -361,7 +361,7 @@ Node *EditorAutoloadSettings::_create_autoload(const String &p_path) { ERR_FAIL_COND_V_MSG(obj == NULL, NULL, "Cannot instance script for autoload, expected 'Node' inheritance, got: " + String(ibt) + "."); n = Object::cast_to<Node>(obj); - n->set_script(s.get_ref_ptr()); + n->set_script(s); } ERR_FAIL_COND_V_MSG(!n, NULL, "Path in autoload not a node or script: " + p_path + "."); @@ -521,7 +521,7 @@ Variant EditorAutoloadSettings::get_drag_data_fw(const Point2 &p_point, Control if (autoload_cache.size() <= 1) return false; - PoolStringArray autoloads; + PackedStringArray autoloads; TreeItem *next = tree->get_next_selected(NULL); @@ -612,7 +612,7 @@ void EditorAutoloadSettings::drop_data_fw(const Point2 &p_point, const Variant & } Dictionary drop_data = p_data; - PoolStringArray autoloads = drop_data["autoloads"]; + PackedStringArray autoloads = drop_data["autoloads"]; Vector<int> orders; orders.resize(autoload_cache.size()); @@ -835,8 +835,8 @@ EditorAutoloadSettings::EditorAutoloadSettings() { autoload_add_path = memnew(EditorLineEditFileChooser); autoload_add_path->set_h_size_flags(SIZE_EXPAND_FILL); autoload_add_path->get_file_dialog()->set_mode(EditorFileDialog::MODE_OPEN_FILE); - autoload_add_path->get_file_dialog()->connect("file_selected", this, "_autoload_file_callback"); - autoload_add_path->get_line_edit()->connect("text_changed", this, "_autoload_path_text_changed"); + autoload_add_path->get_file_dialog()->connect_compat("file_selected", this, "_autoload_file_callback"); + autoload_add_path->get_line_edit()->connect_compat("text_changed", this, "_autoload_path_text_changed"); hbc->add_child(autoload_add_path); @@ -846,13 +846,13 @@ EditorAutoloadSettings::EditorAutoloadSettings() { autoload_add_name = memnew(LineEdit); autoload_add_name->set_h_size_flags(SIZE_EXPAND_FILL); - autoload_add_name->connect("text_entered", this, "_autoload_text_entered"); - autoload_add_name->connect("text_changed", this, "_autoload_text_changed"); + autoload_add_name->connect_compat("text_entered", this, "_autoload_text_entered"); + autoload_add_name->connect_compat("text_changed", this, "_autoload_text_changed"); hbc->add_child(autoload_add_name); add_autoload = memnew(Button); add_autoload->set_text(TTR("Add")); - add_autoload->connect("pressed", this, "_autoload_add"); + add_autoload->connect_compat("pressed", this, "_autoload_add"); // The button will be enabled once a valid name is entered (either automatically or manually). add_autoload->set_disabled(true); hbc->add_child(add_autoload); @@ -882,10 +882,10 @@ EditorAutoloadSettings::EditorAutoloadSettings() { tree->set_column_expand(3, false); tree->set_column_min_width(3, 120 * EDSCALE); - tree->connect("cell_selected", this, "_autoload_selected"); - tree->connect("item_edited", this, "_autoload_edited"); - tree->connect("button_pressed", this, "_autoload_button_pressed"); - tree->connect("item_activated", this, "_autoload_activated"); + tree->connect_compat("cell_selected", this, "_autoload_selected"); + tree->connect_compat("item_edited", this, "_autoload_edited"); + tree->connect_compat("button_pressed", this, "_autoload_button_pressed"); + tree->connect_compat("item_activated", this, "_autoload_activated"); tree->set_v_size_flags(SIZE_EXPAND_FILL); add_child(tree, true); diff --git a/editor/editor_data.cpp b/editor/editor_data.cpp index 0b43fd5ac0..c3592d3f06 100644 --- a/editor/editor_data.cpp +++ b/editor/editor_data.cpp @@ -156,8 +156,8 @@ bool EditorHistory::is_history_obj_inspector_only(int p_obj) const { } ObjectID EditorHistory::get_history_obj(int p_obj) const { - ERR_FAIL_INDEX_V(p_obj, history.size(), 0); - ERR_FAIL_INDEX_V(history[p_obj].level, history[p_obj].path.size(), 0); + ERR_FAIL_INDEX_V(p_obj, history.size(), ObjectID()); + ERR_FAIL_INDEX_V(history[p_obj].level, history[p_obj].path.size(), ObjectID()); return history[p_obj].path[history[p_obj].level].object; } @@ -204,12 +204,12 @@ bool EditorHistory::is_current_inspector_only() const { ObjectID EditorHistory::get_current() { if (current < 0 || current >= history.size()) - return 0; + return ObjectID(); History &h = history.write[current]; Object *obj = ObjectDB::get_instance(h.path[h.level].object); if (!obj) - return 0; + return ObjectID(); return obj->get_instance_id(); } @@ -226,15 +226,15 @@ int EditorHistory::get_path_size() const { ObjectID EditorHistory::get_path_object(int p_index) const { if (current < 0 || current >= history.size()) - return 0; + return ObjectID(); const History &h = history[current]; - ERR_FAIL_INDEX_V(p_index, h.path.size(), 0); + ERR_FAIL_INDEX_V(p_index, h.path.size(), ObjectID()); Object *obj = ObjectDB::get_instance(h.path[p_index].object); if (!obj) - return 0; + return ObjectID(); return obj->get_instance_id(); } @@ -479,7 +479,7 @@ EditorPlugin *EditorData::get_editor_plugin(int p_idx) { return editor_plugins[p_idx]; } -void EditorData::add_custom_type(const String &p_type, const String &p_inherits, const Ref<Script> &p_script, const Ref<Texture> &p_icon) { +void EditorData::add_custom_type(const String &p_type, const String &p_inherits, const Ref<Script> &p_script, const Ref<Texture2D> &p_icon) { ERR_FAIL_COND_MSG(p_script.is_null(), "It's not a reference to a valid Script object."); CustomType ct; @@ -506,7 +506,7 @@ Object *EditorData::instance_custom_type(const String &p_type, const String &p_i if (ob->is_class("Node")) { ob->call("set_name", p_type); } - ob->set_script(script.get_ref_ptr()); + ob->set_script(script); return ob; } } @@ -907,7 +907,7 @@ Object *EditorData::script_class_instance(const String &p_class) { if (obj) { Ref<Script> script = script_class_load_script(p_class); if (script.is_valid()) - obj->set_script(script.get_ref_ptr()); + obj->set_script(script); return obj; } } @@ -1024,7 +1024,7 @@ void EditorSelection::add_node(Node *p_node) { } selection[p_node] = meta; - p_node->connect("tree_exiting", this, "_node_removed", varray(p_node), CONNECT_ONESHOT); + p_node->connect_compat("tree_exiting", this, "_node_removed", varray(p_node), CONNECT_ONESHOT); //emit_signal("selection_changed"); } @@ -1042,7 +1042,7 @@ void EditorSelection::remove_node(Node *p_node) { if (meta) memdelete(meta); selection.erase(p_node); - p_node->disconnect("tree_exiting", this, "_node_removed"); + p_node->disconnect_compat("tree_exiting", this, "_node_removed"); //emit_signal("selection_changed"); } bool EditorSelection::is_selected(Node *p_node) const { diff --git a/editor/editor_data.h b/editor/editor_data.h index 1b21ce4451..8a6f2f63f6 100644 --- a/editor/editor_data.h +++ b/editor/editor_data.h @@ -112,7 +112,7 @@ public: String name; Ref<Script> script; - Ref<Texture> icon; + Ref<Texture2D> icon; }; struct EditedScene { @@ -178,7 +178,7 @@ public: void save_editor_global_states(); void restore_editor_global_states(); - void add_custom_type(const String &p_type, const String &p_inherits, const Ref<Script> &p_script, const Ref<Texture> &p_icon); + void add_custom_type(const String &p_type, const String &p_inherits, const Ref<Script> &p_script, const Ref<Texture2D> &p_icon); Object *instance_custom_type(const String &p_type, const String &p_inherits); void remove_custom_type(const String &p_type); const Map<String, Vector<CustomType> > &get_custom_types() const { return custom_types; } diff --git a/editor/editor_dir_dialog.cpp b/editor/editor_dir_dialog.cpp index 09e63f70b4..841ad250a4 100644 --- a/editor/editor_dir_dialog.cpp +++ b/editor/editor_dir_dialog.cpp @@ -82,21 +82,21 @@ void EditorDirDialog::reload(const String &p_path) { void EditorDirDialog::_notification(int p_what) { if (p_what == NOTIFICATION_ENTER_TREE) { - EditorFileSystem::get_singleton()->connect("filesystem_changed", this, "reload"); + EditorFileSystem::get_singleton()->connect_compat("filesystem_changed", this, "reload"); reload(); - if (!tree->is_connected("item_collapsed", this, "_item_collapsed")) { - tree->connect("item_collapsed", this, "_item_collapsed", varray(), CONNECT_DEFERRED); + if (!tree->is_connected_compat("item_collapsed", this, "_item_collapsed")) { + tree->connect_compat("item_collapsed", this, "_item_collapsed", varray(), CONNECT_DEFERRED); } - if (!EditorFileSystem::get_singleton()->is_connected("filesystem_changed", this, "reload")) { - EditorFileSystem::get_singleton()->connect("filesystem_changed", this, "reload"); + if (!EditorFileSystem::get_singleton()->is_connected_compat("filesystem_changed", this, "reload")) { + EditorFileSystem::get_singleton()->connect_compat("filesystem_changed", this, "reload"); } } if (p_what == NOTIFICATION_EXIT_TREE) { - if (EditorFileSystem::get_singleton()->is_connected("filesystem_changed", this, "reload")) { - EditorFileSystem::get_singleton()->disconnect("filesystem_changed", this, "reload"); + if (EditorFileSystem::get_singleton()->is_connected_compat("filesystem_changed", this, "reload")) { + EditorFileSystem::get_singleton()->disconnect_compat("filesystem_changed", this, "reload"); } } @@ -186,10 +186,10 @@ EditorDirDialog::EditorDirDialog() { tree = memnew(Tree); add_child(tree); - tree->connect("item_activated", this, "_ok"); + tree->connect_compat("item_activated", this, "_ok"); makedir = add_button(TTR("Create Folder"), OS::get_singleton()->get_swap_ok_cancel(), "makedir"); - makedir->connect("pressed", this, "_make_dir"); + makedir->connect_compat("pressed", this, "_make_dir"); makedialog = memnew(ConfirmationDialog); makedialog->set_title(TTR("Create Folder")); @@ -202,7 +202,7 @@ EditorDirDialog::EditorDirDialog() { makedirname = memnew(LineEdit); makevb->add_margin_child(TTR("Name:"), makedirname); makedialog->register_text_enter(makedirname); - makedialog->connect("confirmed", this, "_make_dir_confirm"); + makedialog->connect_compat("confirmed", this, "_make_dir_confirm"); mkdirerr = memnew(AcceptDialog); mkdirerr->set_text(TTR("Could not create folder.")); diff --git a/editor/editor_export.cpp b/editor/editor_export.cpp index 3d8ea0b040..827b9111f3 100644 --- a/editor/editor_export.cpp +++ b/editor/editor_export.cpp @@ -582,14 +582,14 @@ String EditorExportPlugin::get_ios_cpp_code() const { return ios_cpp_code; } -void EditorExportPlugin::_export_file_script(const String &p_path, const String &p_type, const PoolVector<String> &p_features) { +void EditorExportPlugin::_export_file_script(const String &p_path, const String &p_type, const Vector<String> &p_features) { if (get_script_instance()) { get_script_instance()->call("_export_file", p_path, p_type, p_features); } } -void EditorExportPlugin::_export_begin_script(const PoolVector<String> &p_features, bool p_debug, const String &p_path, int p_flags) { +void EditorExportPlugin::_export_begin_script(const Vector<String> &p_features, bool p_debug, const String &p_path, int p_flags) { if (get_script_instance()) { get_script_instance()->call("_export_begin", p_features, p_debug, p_path, p_flags); @@ -625,8 +625,8 @@ void EditorExportPlugin::_bind_methods() { ClassDB::bind_method(D_METHOD("add_ios_cpp_code", "code"), &EditorExportPlugin::add_ios_cpp_code); ClassDB::bind_method(D_METHOD("skip"), &EditorExportPlugin::skip); - BIND_VMETHOD(MethodInfo("_export_file", PropertyInfo(Variant::STRING, "path"), PropertyInfo(Variant::STRING, "type"), PropertyInfo(Variant::POOL_STRING_ARRAY, "features"))); - BIND_VMETHOD(MethodInfo("_export_begin", PropertyInfo(Variant::POOL_STRING_ARRAY, "features"), PropertyInfo(Variant::BOOL, "is_debug"), PropertyInfo(Variant::STRING, "path"), PropertyInfo(Variant::INT, "flags"))); + BIND_VMETHOD(MethodInfo("_export_file", PropertyInfo(Variant::STRING, "path"), PropertyInfo(Variant::STRING, "type"), PropertyInfo(Variant::PACKED_STRING_ARRAY, "features"))); + BIND_VMETHOD(MethodInfo("_export_begin", PropertyInfo(Variant::PACKED_STRING_ARRAY, "features"), PropertyInfo(Variant::BOOL, "is_debug"), PropertyInfo(Variant::STRING, "path"), PropertyInfo(Variant::INT, "flags"))); BIND_VMETHOD(MethodInfo("_export_end")); } @@ -731,7 +731,7 @@ Error EditorExportPlatform::export_project_files(const Ref<EditorExportPreset> & FeatureContainers feature_containers = get_feature_containers(p_preset); Set<String> &features = feature_containers.features; - PoolVector<String> &features_pv = feature_containers.features_pv; + Vector<String> &features_pv = feature_containers.features_pv; //store everything in the export medium int idx = 0; @@ -1245,23 +1245,14 @@ void EditorExport::add_export_preset(const Ref<EditorExportPreset> &p_preset, in String EditorExportPlatform::test_etc2() const { String driver = ProjectSettings::get_singleton()->get("rendering/quality/driver/driver_name"); - bool driver_fallback = ProjectSettings::get_singleton()->get("rendering/quality/driver/fallback_to_gles2"); bool etc_supported = ProjectSettings::get_singleton()->get("rendering/vram_compression/import_etc"); bool etc2_supported = ProjectSettings::get_singleton()->get("rendering/vram_compression/import_etc2"); if (driver == "GLES2" && !etc_supported) { return TTR("Target platform requires 'ETC' texture compression for GLES2. Enable 'Import Etc' in Project Settings."); - } else if (driver == "GLES3") { - String err; - if (!etc2_supported) { - err += TTR("Target platform requires 'ETC2' texture compression for GLES3. Enable 'Import Etc 2' in Project Settings."); - } - if (driver_fallback && !etc_supported) { - if (err != String()) - err += "\n"; - err += TTR("Target platform requires 'ETC' texture compression for the driver fallback to GLES2.\nEnable 'Import Etc' in Project Settings, or disable 'Driver Fallback Enabled'."); - } - return err; + } else if (driver == "Vulkan" && !etc2_supported) { + // FIXME: Review if this is true for Vulkan. + return TTR("Target platform requires 'ETC2' texture compression for Vulkan. Enable 'Import Etc 2' in Project Settings."); } return String(); } @@ -1425,7 +1416,7 @@ EditorExport::EditorExport() { add_child(save_timer); save_timer->set_wait_time(0.8); save_timer->set_one_shot(true); - save_timer->connect("timeout", this, "_save"); + save_timer->connect_compat("timeout", this, "_save"); block_save = false; singleton = this; @@ -1477,7 +1468,7 @@ String EditorExportPlatformPC::get_os_name() const { return os_name; } -Ref<Texture> EditorExportPlatformPC::get_logo() const { +Ref<Texture2D> EditorExportPlatformPC::get_logo() const { return logo; } @@ -1629,7 +1620,7 @@ void EditorExportPlatformPC::set_os_name(const String &p_name) { os_name = p_name; } -void EditorExportPlatformPC::set_logo(const Ref<Texture> &p_logo) { +void EditorExportPlatformPC::set_logo(const Ref<Texture2D> &p_logo) { logo = p_logo; } diff --git a/editor/editor_export.h b/editor/editor_export.h index 577fd0cf7e..139d672cb8 100644 --- a/editor/editor_export.h +++ b/editor/editor_export.h @@ -188,7 +188,7 @@ private: struct FeatureContainers { Set<String> features; - PoolVector<String> features_pv; + Vector<String> features_pv; }; void _export_find_resources(EditorFileSystemDirectory *p_dir, Set<String> &p_paths); @@ -236,7 +236,7 @@ public: virtual String get_os_name() const = 0; virtual String get_name() const = 0; - virtual Ref<Texture> get_logo() const = 0; + virtual Ref<Texture2D> get_logo() const = 0; Error export_project_files(const Ref<EditorExportPreset> &p_preset, EditorExportSaveFunction p_func, void *p_udata, EditorExportSaveSharedObject p_so_func = NULL); @@ -259,7 +259,7 @@ public: }; virtual Error run(const Ref<EditorExportPreset> &p_preset, int p_device, int p_debug_flags) { return OK; } - virtual Ref<Texture> get_run_icon() const { return get_logo(); } + virtual Ref<Texture2D> get_run_icon() const { return get_logo(); } String test_etc2() const; //generic test for etc2 since most platforms use it virtual bool can_export(const Ref<EditorExportPreset> &p_preset, String &r_error, bool &r_missing_templates) const = 0; @@ -310,8 +310,8 @@ class EditorExportPlugin : public Reference { ios_cpp_code = ""; } - void _export_file_script(const String &p_path, const String &p_type, const PoolVector<String> &p_features); - void _export_begin_script(const PoolVector<String> &p_features, bool p_debug, const String &p_path, int p_flags); + void _export_file_script(const String &p_path, const String &p_type, const Vector<String> &p_features); + void _export_begin_script(const Vector<String> &p_features, bool p_debug, const String &p_path, int p_flags); void _export_end_script(); protected: @@ -420,7 +420,7 @@ public: virtual String get_name() const; virtual String get_os_name() const; - virtual Ref<Texture> get_logo() const; + virtual Ref<Texture2D> get_logo() const; virtual bool can_export(const Ref<EditorExportPreset> &p_preset, String &r_error, bool &r_missing_templates) const; virtual List<String> get_binary_extensions(const Ref<EditorExportPreset> &p_preset) const; @@ -431,7 +431,7 @@ public: void set_name(const String &p_name); void set_os_name(const String &p_name); - void set_logo(const Ref<Texture> &p_logo); + void set_logo(const Ref<Texture2D> &p_logo); void set_release_64(const String &p_file); void set_release_32(const String &p_file); diff --git a/editor/editor_feature_profile.cpp b/editor/editor_feature_profile.cpp index 559a0ef0ea..32fadfc60e 100644 --- a/editor/editor_feature_profile.cpp +++ b/editor/editor_feature_profile.cpp @@ -534,7 +534,7 @@ void EditorFeatureProfileManager::_class_list_item_selected() { } Variant md = item->get_metadata(0); - if (md.get_type() != Variant::STRING) { + if (md.get_type() != Variant::STRING && md.get_type() != Variant::STRING_NAME) { return; } @@ -598,7 +598,7 @@ void EditorFeatureProfileManager::_class_list_item_edited() { bool checked = item->is_checked(0); Variant md = item->get_metadata(0); - if (md.get_type() == Variant::STRING) { + if (md.get_type() == Variant::STRING || md.get_type() == Variant::STRING_NAME) { String class_selected = md; edited->set_disable_class(class_selected, !checked); _save_and_update(); @@ -620,7 +620,7 @@ void EditorFeatureProfileManager::_property_item_edited() { } Variant md = class_item->get_metadata(0); - if (md.get_type() != Variant::STRING) { + if (md.get_type() != Variant::STRING && md.get_type() != Variant::STRING_NAME) { return; } @@ -633,7 +633,7 @@ void EditorFeatureProfileManager::_property_item_edited() { bool checked = item->is_checked(0); md = item->get_metadata(0); - if (md.get_type() == Variant::STRING) { + if (md.get_type() == Variant::STRING || md.get_type() == Variant::STRING_NAME) { String property_selected = md; edited->set_disable_class_property(class_name, property_selected, !checked); _save_and_update(); @@ -657,7 +657,7 @@ void EditorFeatureProfileManager::_update_selected_profile() { if (class_list->get_selected()) { Variant md = class_list->get_selected()->get_metadata(0); - if (md.get_type() == Variant::STRING) { + if (md.get_type() == Variant::STRING || md.get_type() == Variant::STRING_NAME) { class_selected = md; } else if (md.get_type() == Variant::INT) { feature_selected = md; @@ -819,7 +819,7 @@ EditorFeatureProfileManager::EditorFeatureProfileManager() { profile_actions[PROFILE_CLEAR] = memnew(Button(TTR("Unset"))); name_hbc->add_child(profile_actions[PROFILE_CLEAR]); profile_actions[PROFILE_CLEAR]->set_disabled(true); - profile_actions[PROFILE_CLEAR]->connect("pressed", this, "_profile_action", varray(PROFILE_CLEAR)); + profile_actions[PROFILE_CLEAR]->connect_compat("pressed", this, "_profile_action", varray(PROFILE_CLEAR)); main_vbc->add_margin_child(TTR("Current Profile:"), name_hbc); @@ -827,34 +827,34 @@ EditorFeatureProfileManager::EditorFeatureProfileManager() { profile_list = memnew(OptionButton); profile_list->set_h_size_flags(SIZE_EXPAND_FILL); profiles_hbc->add_child(profile_list); - profile_list->connect("item_selected", this, "_profile_selected"); + profile_list->connect_compat("item_selected", this, "_profile_selected"); profile_actions[PROFILE_SET] = memnew(Button(TTR("Make Current"))); profiles_hbc->add_child(profile_actions[PROFILE_SET]); profile_actions[PROFILE_SET]->set_disabled(true); - profile_actions[PROFILE_SET]->connect("pressed", this, "_profile_action", varray(PROFILE_SET)); + profile_actions[PROFILE_SET]->connect_compat("pressed", this, "_profile_action", varray(PROFILE_SET)); profile_actions[PROFILE_ERASE] = memnew(Button(TTR("Remove"))); profiles_hbc->add_child(profile_actions[PROFILE_ERASE]); profile_actions[PROFILE_ERASE]->set_disabled(true); - profile_actions[PROFILE_ERASE]->connect("pressed", this, "_profile_action", varray(PROFILE_ERASE)); + profile_actions[PROFILE_ERASE]->connect_compat("pressed", this, "_profile_action", varray(PROFILE_ERASE)); profiles_hbc->add_child(memnew(VSeparator)); profile_actions[PROFILE_NEW] = memnew(Button(TTR("New"))); profiles_hbc->add_child(profile_actions[PROFILE_NEW]); - profile_actions[PROFILE_NEW]->connect("pressed", this, "_profile_action", varray(PROFILE_NEW)); + profile_actions[PROFILE_NEW]->connect_compat("pressed", this, "_profile_action", varray(PROFILE_NEW)); profiles_hbc->add_child(memnew(VSeparator)); profile_actions[PROFILE_IMPORT] = memnew(Button(TTR("Import"))); profiles_hbc->add_child(profile_actions[PROFILE_IMPORT]); - profile_actions[PROFILE_IMPORT]->connect("pressed", this, "_profile_action", varray(PROFILE_IMPORT)); + profile_actions[PROFILE_IMPORT]->connect_compat("pressed", this, "_profile_action", varray(PROFILE_IMPORT)); profile_actions[PROFILE_EXPORT] = memnew(Button(TTR("Export"))); profiles_hbc->add_child(profile_actions[PROFILE_EXPORT]); profile_actions[PROFILE_EXPORT]->set_disabled(true); - profile_actions[PROFILE_EXPORT]->connect("pressed", this, "_profile_action", varray(PROFILE_EXPORT)); + profile_actions[PROFILE_EXPORT]->connect_compat("pressed", this, "_profile_action", varray(PROFILE_EXPORT)); main_vbc->add_margin_child(TTR("Available Profiles:"), profiles_hbc); @@ -870,8 +870,8 @@ EditorFeatureProfileManager::EditorFeatureProfileManager() { class_list_vbc->add_margin_child(TTR("Enabled Classes:"), class_list, true); class_list->set_hide_root(true); class_list->set_edit_checkbox_cell_only_when_checkbox_is_pressed(true); - class_list->connect("cell_selected", this, "_class_list_item_selected"); - class_list->connect("item_edited", this, "_class_list_item_edited", varray(), CONNECT_DEFERRED); + class_list->connect_compat("cell_selected", this, "_class_list_item_selected"); + class_list->connect_compat("item_edited", this, "_class_list_item_edited", varray(), CONNECT_DEFERRED); VBoxContainer *property_list_vbc = memnew(VBoxContainer); h_split->add_child(property_list_vbc); @@ -882,7 +882,7 @@ EditorFeatureProfileManager::EditorFeatureProfileManager() { property_list->set_hide_root(true); property_list->set_hide_folding(true); property_list->set_edit_checkbox_cell_only_when_checkbox_is_pressed(true); - property_list->connect("item_edited", this, "_property_item_edited", varray(), CONNECT_DEFERRED); + property_list->connect_compat("item_edited", this, "_property_item_edited", varray(), CONNECT_DEFERRED); new_profile_dialog = memnew(ConfirmationDialog); new_profile_dialog->set_title(TTR("New profile name:")); @@ -890,20 +890,20 @@ EditorFeatureProfileManager::EditorFeatureProfileManager() { new_profile_dialog->add_child(new_profile_name); new_profile_name->set_custom_minimum_size(Size2(300 * EDSCALE, 1)); add_child(new_profile_dialog); - new_profile_dialog->connect("confirmed", this, "_create_new_profile"); + new_profile_dialog->connect_compat("confirmed", this, "_create_new_profile"); new_profile_dialog->register_text_enter(new_profile_name); new_profile_dialog->get_ok()->set_text(TTR("Create")); erase_profile_dialog = memnew(ConfirmationDialog); add_child(erase_profile_dialog); erase_profile_dialog->set_title(TTR("Erase Profile")); - erase_profile_dialog->connect("confirmed", this, "_erase_selected_profile"); + erase_profile_dialog->connect_compat("confirmed", this, "_erase_selected_profile"); import_profiles = memnew(EditorFileDialog); add_child(import_profiles); import_profiles->set_mode(EditorFileDialog::MODE_OPEN_FILES); import_profiles->add_filter("*.profile; " + TTR("Godot Feature Profile")); - import_profiles->connect("files_selected", this, "_import_profiles"); + import_profiles->connect_compat("files_selected", this, "_import_profiles"); import_profiles->set_title(TTR("Import Profile(s)")); import_profiles->set_access(EditorFileDialog::ACCESS_FILESYSTEM); @@ -911,7 +911,7 @@ EditorFeatureProfileManager::EditorFeatureProfileManager() { add_child(export_profile); export_profile->set_mode(EditorFileDialog::MODE_SAVE_FILE); export_profile->add_filter("*.profile; " + TTR("Godot Feature Profile")); - export_profile->connect("file_selected", this, "_export_profile"); + export_profile->connect_compat("file_selected", this, "_export_profile"); export_profile->set_title(TTR("Export Profile")); export_profile->set_access(EditorFileDialog::ACCESS_FILESYSTEM); @@ -921,7 +921,7 @@ EditorFeatureProfileManager::EditorFeatureProfileManager() { update_timer = memnew(Timer); update_timer->set_wait_time(1); //wait a second before updating editor add_child(update_timer); - update_timer->connect("timeout", this, "_emit_current_profile_changed"); + update_timer->connect_compat("timeout", this, "_emit_current_profile_changed"); update_timer->set_one_shot(true); updating_features = false; diff --git a/editor/editor_file_dialog.cpp b/editor/editor_file_dialog.cpp index 625f46f9d3..dd6523e12c 100644 --- a/editor/editor_file_dialog.cpp +++ b/editor/editor_file_dialog.cpp @@ -78,7 +78,7 @@ void EditorFileDialog::_notification(int p_what) { preview_wheel_index++; if (preview_wheel_index >= 8) preview_wheel_index = 0; - Ref<Texture> frame = get_icon("Progress" + itos(preview_wheel_index + 1), "EditorIcons"); + Ref<Texture2D> frame = get_icon("Progress" + itos(preview_wheel_index + 1), "EditorIcons"); preview->set_texture(frame); preview_wheel_timeout = 0.1; } @@ -263,7 +263,7 @@ void EditorFileDialog::_post_popup() { _request_single_thumbnail(get_current_dir().plus_file(get_current_file())); if (is_visible_in_tree()) { - Ref<Texture> folder = get_icon("folder", "FileDialog"); + Ref<Texture2D> folder = get_icon("folder", "FileDialog"); const Color folder_color = get_color("folder_icon_modulate", "FileDialog"); recent->clear(); @@ -295,7 +295,7 @@ void EditorFileDialog::_post_popup() { set_process_unhandled_input(true); } -void EditorFileDialog::_thumbnail_result(const String &p_path, const Ref<Texture> &p_preview, const Ref<Texture> &p_small_preview, const Variant &p_udata) { +void EditorFileDialog::_thumbnail_result(const String &p_path, const Ref<Texture2D> &p_preview, const Ref<Texture2D> &p_small_preview, const Variant &p_udata) { if (display_mode == DISPLAY_LIST || p_preview.is_null()) return; @@ -305,12 +305,12 @@ void EditorFileDialog::_thumbnail_result(const String &p_path, const Ref<Texture String pname = d["path"]; if (pname == p_path) { item_list->set_item_icon(i, p_preview); - item_list->set_item_tag_icon(i, Ref<Texture>()); + item_list->set_item_tag_icon(i, Ref<Texture2D>()); } } } -void EditorFileDialog::_thumbnail_done(const String &p_path, const Ref<Texture> &p_preview, const Ref<Texture> &p_small_preview, const Variant &p_udata) { +void EditorFileDialog::_thumbnail_done(const String &p_path, const Ref<Texture2D> &p_preview, const Ref<Texture2D> &p_small_preview, const Variant &p_udata) { set_process(false); preview_waiting = false; @@ -326,7 +326,7 @@ void EditorFileDialog::_thumbnail_done(const String &p_path, const Ref<Texture> } else { preview_vb->hide(); - preview->set_texture(Ref<Texture>()); + preview->set_texture(Ref<Texture2D>()); } } @@ -347,7 +347,7 @@ void EditorFileDialog::_action_pressed() { String fbase = dir_access->get_current_dir(); - PoolVector<String> files; + Vector<String> files; for (int i = 0; i < item_list->get_item_count(); i++) { if (item_list->is_selected(i)) files.push_back(fbase.plus_file(item_list->get_item_text(i))); @@ -704,8 +704,8 @@ void EditorFileDialog::update_file_list() { int thumbnail_size = EditorSettings::get_singleton()->get("filesystem/file_dialog/thumbnail_size"); thumbnail_size *= EDSCALE; - Ref<Texture> folder_thumbnail; - Ref<Texture> file_thumbnail; + Ref<Texture2D> folder_thumbnail; + Ref<Texture2D> file_thumbnail; item_list->clear(); @@ -745,7 +745,7 @@ void EditorFileDialog::update_file_list() { dir_access->list_dir_begin(); - Ref<Texture> folder = get_icon("folder", "FileDialog"); + Ref<Texture2D> folder = get_icon("folder", "FileDialog"); const Color folder_color = get_color("folder_icon_modulate", "FileDialog"); List<String> files; List<String> dirs; @@ -841,7 +841,7 @@ void EditorFileDialog::update_file_list() { if (get_icon_func) { - Ref<Texture> icon = get_icon_func(cdir.plus_file(files.front()->get())); + Ref<Texture2D> icon = get_icon_func(cdir.plus_file(files.front()->get())); if (display_mode == DISPLAY_THUMBNAILS) { item_list->set_item_icon(item_list->get_item_count() - 1, file_thumbnail); @@ -1215,7 +1215,7 @@ void EditorFileDialog::_update_favorites() { bool res = access == ACCESS_RESOURCES; String current = get_current_dir(); - Ref<Texture> folder_icon = get_icon("Folder", "EditorIcons"); + Ref<Texture2D> folder_icon = get_icon("Folder", "EditorIcons"); const Color folder_color = get_color("folder_icon_modulate", "FileDialog"); favorites->clear(); @@ -1419,7 +1419,7 @@ void EditorFileDialog::_bind_methods() { ClassDB::bind_method(D_METHOD("invalidate"), &EditorFileDialog::invalidate); ADD_SIGNAL(MethodInfo("file_selected", PropertyInfo(Variant::STRING, "path"))); - ADD_SIGNAL(MethodInfo("files_selected", PropertyInfo(Variant::POOL_STRING_ARRAY, "paths"))); + ADD_SIGNAL(MethodInfo("files_selected", PropertyInfo(Variant::PACKED_STRING_ARRAY, "paths"))); ADD_SIGNAL(MethodInfo("dir_selected", PropertyInfo(Variant::STRING, "dir"))); ADD_PROPERTY(PropertyInfo(Variant::INT, "access", PROPERTY_HINT_ENUM, "Resources,User data,File system"), "set_access", "get_access"); @@ -1537,9 +1537,9 @@ EditorFileDialog::EditorFileDialog() { pathhb->add_child(dir_next); pathhb->add_child(dir_up); - dir_prev->connect("pressed", this, "_go_back"); - dir_next->connect("pressed", this, "_go_forward"); - dir_up->connect("pressed", this, "_go_up"); + dir_prev->connect_compat("pressed", this, "_go_back"); + dir_next->connect_compat("pressed", this, "_go_forward"); + dir_up->connect_compat("pressed", this, "_go_up"); pathhb->add_child(memnew(Label(TTR("Path:")))); @@ -1549,20 +1549,20 @@ EditorFileDialog::EditorFileDialog() { refresh = memnew(ToolButton); refresh->set_tooltip(TTR("Refresh files.")); - refresh->connect("pressed", this, "_update_file_list"); + refresh->connect_compat("pressed", this, "_update_file_list"); pathhb->add_child(refresh); favorite = memnew(ToolButton); favorite->set_toggle_mode(true); favorite->set_tooltip(TTR("(Un)favorite current folder.")); - favorite->connect("pressed", this, "_favorite_pressed"); + favorite->connect_compat("pressed", this, "_favorite_pressed"); pathhb->add_child(favorite); show_hidden = memnew(ToolButton); show_hidden->set_toggle_mode(true); show_hidden->set_pressed(is_showing_hidden_files()); show_hidden->set_tooltip(TTR("Toggle the visibility of hidden files.")); - show_hidden->connect("toggled", this, "set_show_hidden_files"); + show_hidden->connect_compat("toggled", this, "set_show_hidden_files"); pathhb->add_child(show_hidden); pathhb->add_child(memnew(VSeparator)); @@ -1571,7 +1571,7 @@ EditorFileDialog::EditorFileDialog() { view_mode_group.instance(); mode_thumbnails = memnew(ToolButton); - mode_thumbnails->connect("pressed", this, "set_display_mode", varray(DISPLAY_THUMBNAILS)); + mode_thumbnails->connect_compat("pressed", this, "set_display_mode", varray(DISPLAY_THUMBNAILS)); mode_thumbnails->set_toggle_mode(true); mode_thumbnails->set_pressed(display_mode == DISPLAY_THUMBNAILS); mode_thumbnails->set_button_group(view_mode_group); @@ -1579,7 +1579,7 @@ EditorFileDialog::EditorFileDialog() { pathhb->add_child(mode_thumbnails); mode_list = memnew(ToolButton); - mode_list->connect("pressed", this, "set_display_mode", varray(DISPLAY_LIST)); + mode_list->connect_compat("pressed", this, "set_display_mode", varray(DISPLAY_LIST)); mode_list->set_toggle_mode(true); mode_list->set_pressed(display_mode == DISPLAY_LIST); mode_list->set_button_group(view_mode_group); @@ -1588,11 +1588,11 @@ EditorFileDialog::EditorFileDialog() { drives = memnew(OptionButton); pathhb->add_child(drives); - drives->connect("item_selected", this, "_select_drive"); + drives->connect_compat("item_selected", this, "_select_drive"); makedir = memnew(Button); makedir->set_text(TTR("Create Folder")); - makedir->connect("pressed", this, "_make_dir"); + makedir->connect_compat("pressed", this, "_make_dir"); pathhb->add_child(makedir); list_hb = memnew(HSplitContainer); @@ -1614,15 +1614,15 @@ EditorFileDialog::EditorFileDialog() { fav_hb->add_spacer(); fav_up = memnew(ToolButton); fav_hb->add_child(fav_up); - fav_up->connect("pressed", this, "_favorite_move_up"); + fav_up->connect_compat("pressed", this, "_favorite_move_up"); fav_down = memnew(ToolButton); fav_hb->add_child(fav_down); - fav_down->connect("pressed", this, "_favorite_move_down"); + fav_down->connect_compat("pressed", this, "_favorite_move_down"); favorites = memnew(ItemList); fav_vb->add_child(favorites); favorites->set_v_size_flags(SIZE_EXPAND_FILL); - favorites->connect("item_selected", this, "_favorite_selected"); + favorites->connect_compat("item_selected", this, "_favorite_selected"); VBoxContainer *rec_vb = memnew(VBoxContainer); vsc->add_child(rec_vb); @@ -1631,7 +1631,7 @@ EditorFileDialog::EditorFileDialog() { recent = memnew(ItemList); recent->set_allow_reselect(true); rec_vb->add_margin_child(TTR("Recent:"), recent, true); - recent->connect("item_selected", this, "_recent_selected"); + recent->connect_compat("item_selected", this, "_recent_selected"); VBoxContainer *item_vb = memnew(VBoxContainer); list_hb->add_child(item_vb); @@ -1650,13 +1650,13 @@ EditorFileDialog::EditorFileDialog() { item_list = memnew(ItemList); item_list->set_v_size_flags(SIZE_EXPAND_FILL); - item_list->connect("item_rmb_selected", this, "_item_list_item_rmb_selected"); - item_list->connect("rmb_clicked", this, "_item_list_rmb_clicked"); + item_list->connect_compat("item_rmb_selected", this, "_item_list_item_rmb_selected"); + item_list->connect_compat("rmb_clicked", this, "_item_list_rmb_clicked"); item_list->set_allow_rmb_select(true); list_vb->add_child(item_list); item_menu = memnew(PopupMenu); - item_menu->connect("id_pressed", this, "_item_menu_id_pressed"); + item_menu->connect_compat("id_pressed", this, "_item_menu_id_pressed"); add_child(item_menu); // Other stuff. @@ -1687,19 +1687,19 @@ EditorFileDialog::EditorFileDialog() { access = ACCESS_RESOURCES; _update_drives(); - connect("confirmed", this, "_action_pressed"); - item_list->connect("item_selected", this, "_item_selected", varray(), CONNECT_DEFERRED); - item_list->connect("multi_selected", this, "_multi_selected", varray(), CONNECT_DEFERRED); - item_list->connect("item_activated", this, "_item_db_selected", varray()); - item_list->connect("nothing_selected", this, "_items_clear_selection"); - dir->connect("text_entered", this, "_dir_entered"); - file->connect("text_entered", this, "_file_entered"); - filter->connect("item_selected", this, "_filter_selected"); + connect_compat("confirmed", this, "_action_pressed"); + item_list->connect_compat("item_selected", this, "_item_selected", varray(), CONNECT_DEFERRED); + item_list->connect_compat("multi_selected", this, "_multi_selected", varray(), CONNECT_DEFERRED); + item_list->connect_compat("item_activated", this, "_item_db_selected", varray()); + item_list->connect_compat("nothing_selected", this, "_items_clear_selection"); + dir->connect_compat("text_entered", this, "_dir_entered"); + file->connect_compat("text_entered", this, "_file_entered"); + filter->connect_compat("item_selected", this, "_filter_selected"); confirm_save = memnew(ConfirmationDialog); confirm_save->set_as_toplevel(true); add_child(confirm_save); - confirm_save->connect("confirmed", this, "_save_confirm_pressed"); + confirm_save->connect_compat("confirmed", this, "_save_confirm_pressed"); remove_dialog = memnew(DependencyRemoveDialog); add_child(remove_dialog); @@ -1713,7 +1713,7 @@ EditorFileDialog::EditorFileDialog() { makevb->add_margin_child(TTR("Name:"), makedirname); add_child(makedialog); makedialog->register_text_enter(makedirname); - makedialog->connect("confirmed", this, "_make_dir_confirm"); + makedialog->connect_compat("confirmed", this, "_make_dir_confirm"); mkdirerr = memnew(AcceptDialog); mkdirerr->set_text(TTR("Could not create folder.")); add_child(mkdirerr); @@ -1777,10 +1777,10 @@ EditorLineEditFileChooser::EditorLineEditFileChooser() { line_edit->set_h_size_flags(SIZE_EXPAND_FILL); button = memnew(Button); add_child(button); - button->connect("pressed", this, "_browse"); + button->connect_compat("pressed", this, "_browse"); dialog = memnew(EditorFileDialog); add_child(dialog); - dialog->connect("file_selected", this, "_chosen"); - dialog->connect("dir_selected", this, "_chosen"); - dialog->connect("files_selected", this, "_chosen"); + dialog->connect_compat("file_selected", this, "_chosen"); + dialog->connect_compat("dir_selected", this, "_chosen"); + dialog->connect_compat("files_selected", this, "_chosen"); } diff --git a/editor/editor_file_dialog.h b/editor/editor_file_dialog.h index 6af261e8dd..8b48604b31 100644 --- a/editor/editor_file_dialog.h +++ b/editor/editor_file_dialog.h @@ -68,7 +68,7 @@ public: MODE_SAVE_FILE }; - typedef Ref<Texture> (*GetIconFunc)(const String &); + typedef Ref<Texture2D> (*GetIconFunc)(const String &); typedef void (*RegisterFunc)(EditorFileDialog *); static GetIconFunc get_icon_func; @@ -188,10 +188,10 @@ private: virtual void _post_popup(); void _save_to_recent(); - //callback function is callback(String p_path,Ref<Texture> preview,Variant udata) preview null if could not load + //callback function is callback(String p_path,Ref<Texture2D> preview,Variant udata) preview null if could not load - void _thumbnail_result(const String &p_path, const Ref<Texture> &p_preview, const Ref<Texture> &p_small_preview, const Variant &p_udata); - void _thumbnail_done(const String &p_path, const Ref<Texture> &p_preview, const Ref<Texture> &p_small_preview, const Variant &p_udata); + void _thumbnail_result(const String &p_path, const Ref<Texture2D> &p_preview, const Ref<Texture2D> &p_small_preview, const Variant &p_udata); + void _thumbnail_done(const String &p_path, const Ref<Texture2D> &p_preview, const Ref<Texture2D> &p_small_preview, const Variant &p_udata); void _request_single_thumbnail(const String &p_path); void _unhandled_input(const Ref<InputEvent> &p_event); diff --git a/editor/editor_file_system.cpp b/editor/editor_file_system.cpp index 107ecac3b0..b5ec08ef60 100644 --- a/editor/editor_file_system.cpp +++ b/editor/editor_file_system.cpp @@ -2100,8 +2100,8 @@ void EditorFileSystem::_bind_methods() { ADD_SIGNAL(MethodInfo("filesystem_changed")); ADD_SIGNAL(MethodInfo("sources_changed", PropertyInfo(Variant::BOOL, "exist"))); - ADD_SIGNAL(MethodInfo("resources_reimported", PropertyInfo(Variant::POOL_STRING_ARRAY, "resources"))); - ADD_SIGNAL(MethodInfo("resources_reload", PropertyInfo(Variant::POOL_STRING_ARRAY, "resources"))); + ADD_SIGNAL(MethodInfo("resources_reimported", PropertyInfo(Variant::PACKED_STRING_ARRAY, "resources"))); + ADD_SIGNAL(MethodInfo("resources_reload", PropertyInfo(Variant::PACKED_STRING_ARRAY, "resources"))); } void EditorFileSystem::_update_extensions() { diff --git a/editor/editor_folding.cpp b/editor/editor_folding.cpp index 475f16f12f..8308cd760b 100644 --- a/editor/editor_folding.cpp +++ b/editor/editor_folding.cpp @@ -34,12 +34,12 @@ #include "editor_inspector.h" #include "editor_settings.h" -PoolVector<String> EditorFolding::_get_unfolds(const Object *p_object) { +Vector<String> EditorFolding::_get_unfolds(const Object *p_object) { - PoolVector<String> sections; + Vector<String> sections; sections.resize(p_object->editor_get_section_folding().size()); if (sections.size()) { - PoolVector<String>::Write w = sections.write(); + String *w = sections.ptrw(); int idx = 0; for (const Set<String>::Element *E = p_object->editor_get_section_folding().front(); E; E = E->next()) { w[idx++] = E->get(); @@ -52,7 +52,7 @@ PoolVector<String> EditorFolding::_get_unfolds(const Object *p_object) { void EditorFolding::save_resource_folding(const RES &p_resource, const String &p_path) { Ref<ConfigFile> config; config.instance(); - PoolVector<String> unfolds = _get_unfolds(p_resource.ptr()); + Vector<String> unfolds = _get_unfolds(p_resource.ptr()); config->set_value("folding", "sections_unfolded", unfolds); String file = p_path.get_file() + "-folding-" + p_path.md5_text() + ".cfg"; @@ -60,10 +60,10 @@ void EditorFolding::save_resource_folding(const RES &p_resource, const String &p config->save(file); } -void EditorFolding::_set_unfolds(Object *p_object, const PoolVector<String> &p_unfolds) { +void EditorFolding::_set_unfolds(Object *p_object, const Vector<String> &p_unfolds) { int uc = p_unfolds.size(); - PoolVector<String>::Read r = p_unfolds.read(); + const String *r = p_unfolds.ptr(); p_object->editor_clear_section_folding(); for (int i = 0; i < uc; i++) { p_object->editor_set_section_unfold(r[i], true); @@ -82,7 +82,7 @@ void EditorFolding::load_resource_folding(RES p_resource, const String &p_path) return; } - PoolVector<String> unfolds; + Vector<String> unfolds; if (config->has_section_key("folding", "sections_unfolded")) { unfolds = config->get_value("folding", "sections_unfolded"); @@ -103,7 +103,7 @@ void EditorFolding::_fill_folds(const Node *p_root, const Node *p_node, Array &p if (p_node->is_displayed_folded()) { nodes_folded.push_back(p_root->get_path_to(p_node)); } - PoolVector<String> unfolds = _get_unfolds(p_node); + Vector<String> unfolds = _get_unfolds(p_node); if (unfolds.size()) { p_folds.push_back(p_root->get_path_to(p_node)); @@ -118,7 +118,7 @@ void EditorFolding::_fill_folds(const Node *p_root, const Node *p_node, Array &p RES res = p_node->get(E->get().name); if (res.is_valid() && !resources.has(res) && res->get_path() != String() && !res->get_path().is_resource_file()) { - PoolVector<String> res_unfolds = _get_unfolds(res.ptr()); + Vector<String> res_unfolds = _get_unfolds(res.ptr()); resource_folds.push_back(res->get_path()); resource_folds.push_back(res_unfolds); resources.insert(res); @@ -184,7 +184,7 @@ void EditorFolding::load_scene_folding(Node *p_scene, const String &p_path) { for (int i = 0; i < unfolds.size(); i += 2) { NodePath path2 = unfolds[i]; - PoolVector<String> un = unfolds[i + 1]; + Vector<String> un = unfolds[i + 1]; Node *node = p_scene->get_node_or_null(path2); if (!node) { continue; @@ -202,7 +202,7 @@ void EditorFolding::load_scene_folding(Node *p_scene, const String &p_path) { continue; } - PoolVector<String> unfolds2 = res_unfolds[i + 1]; + Vector<String> unfolds2 = res_unfolds[i + 1]; _set_unfolds(res.ptr(), unfolds2); } diff --git a/editor/editor_folding.h b/editor/editor_folding.h index cc49b062d0..5220907fe7 100644 --- a/editor/editor_folding.h +++ b/editor/editor_folding.h @@ -35,8 +35,8 @@ class EditorFolding { - PoolVector<String> _get_unfolds(const Object *p_object); - void _set_unfolds(Object *p_object, const PoolVector<String> &p_unfolds); + Vector<String> _get_unfolds(const Object *p_object); + void _set_unfolds(Object *p_object, const Vector<String> &p_unfolds); void _fill_folds(const Node *p_root, const Node *p_node, Array &p_folds, Array &resource_folds, Array &nodes_folded, Set<RES> &resources); diff --git a/editor/editor_help.cpp b/editor/editor_help.cpp index 556dbcbfc4..9c64540a9e 100644 --- a/editor/editor_help.cpp +++ b/editor/editor_help.cpp @@ -50,7 +50,7 @@ void EditorHelp::_init_colors() { text_color = get_color("default_color", "RichTextLabel"); headline_color = get_color("headline_color", "EditorHelp"); base_type_color = title_color.linear_interpolate(text_color, 0.5); - comment_color = text_color * Color(1, 1, 1, 0.4); + comment_color = text_color * Color(1, 1, 1, 0.6); symbol_color = comment_color; value_color = text_color * Color(1, 1, 1, 0.6); qualifier_color = text_color * Color(1, 1, 1, 0.8); @@ -1374,7 +1374,7 @@ static void _add_text_to_rt(const String &p_bbcode, RichTextLabel *p_rt) { end = bbcode.length(); String image = bbcode.substr(brk_end + 1, end - brk_end - 1); - Ref<Texture> texture = ResourceLoader::load(base_path.plus_file(image), "Texture"); + Ref<Texture2D> texture = ResourceLoader::load(base_path.plus_file(image), "Texture2D"); if (texture.is_valid()) p_rt->add_image(texture); @@ -1551,9 +1551,9 @@ EditorHelp::EditorHelp() { class_desc->set_v_size_flags(SIZE_EXPAND_FILL); class_desc->add_color_override("selection_color", get_color("accent_color", "Editor") * Color(1, 1, 1, 0.4)); - class_desc->connect("meta_clicked", this, "_class_desc_select"); - class_desc->connect("gui_input", this, "_class_desc_input"); - class_desc->connect("resized", this, "_class_desc_resized"); + class_desc->connect_compat("meta_clicked", this, "_class_desc_select"); + class_desc->connect_compat("gui_input", this, "_class_desc_input"); + class_desc->connect_compat("resized", this, "_class_desc_resized"); _class_desc_resized(); // Added second so it opens at the bottom so it won't offset the entire widget. @@ -1633,7 +1633,7 @@ EditorHelpBit::EditorHelpBit() { rich_text = memnew(RichTextLabel); add_child(rich_text); - rich_text->connect("meta_clicked", this, "_meta_clicked"); + rich_text->connect_compat("meta_clicked", this, "_meta_clicked"); rich_text->add_color_override("selection_color", get_color("accent_color", "Editor") * Color(1, 1, 1, 0.4)); rich_text->set_override_selected_font_color(false); set_custom_minimum_size(Size2(0, 70 * EDSCALE)); @@ -1645,8 +1645,8 @@ FindBar::FindBar() { add_child(search_text); search_text->set_custom_minimum_size(Size2(100 * EDSCALE, 0)); search_text->set_h_size_flags(SIZE_EXPAND_FILL); - search_text->connect("text_changed", this, "_search_text_changed"); - search_text->connect("text_entered", this, "_search_text_entered"); + search_text->connect_compat("text_changed", this, "_search_text_changed"); + search_text->connect_compat("text_entered", this, "_search_text_entered"); matches_label = memnew(Label); add_child(matches_label); @@ -1655,12 +1655,12 @@ FindBar::FindBar() { find_prev = memnew(ToolButton); add_child(find_prev); find_prev->set_focus_mode(FOCUS_NONE); - find_prev->connect("pressed", this, "_search_prev"); + find_prev->connect_compat("pressed", this, "_search_prev"); find_next = memnew(ToolButton); add_child(find_next); find_next->set_focus_mode(FOCUS_NONE); - find_next->connect("pressed", this, "_search_next"); + find_next->connect_compat("pressed", this, "_search_next"); Control *space = memnew(Control); add_child(space); @@ -1671,7 +1671,7 @@ FindBar::FindBar() { hide_button->set_focus_mode(FOCUS_NONE); hide_button->set_expand(true); hide_button->set_stretch_mode(TextureButton::STRETCH_KEEP_CENTERED); - hide_button->connect("pressed", this, "_hide_pressed"); + hide_button->connect_compat("pressed", this, "_hide_pressed"); } void FindBar::popup_search() { diff --git a/editor/editor_help_search.cpp b/editor/editor_help_search.cpp index 80981e8fa1..8bad46e4d0 100644 --- a/editor/editor_help_search.cpp +++ b/editor/editor_help_search.cpp @@ -111,7 +111,7 @@ void EditorHelpSearch::_notification(int p_what) { } break; case NOTIFICATION_ENTER_TREE: { - connect("confirmed", this, "_confirmed"); + connect_compat("confirmed", this, "_confirmed"); _update_icons(); } break; case NOTIFICATION_POPUP_HIDE: { @@ -206,21 +206,21 @@ EditorHelpSearch::EditorHelpSearch() { search_box = memnew(LineEdit); search_box->set_custom_minimum_size(Size2(200, 0) * EDSCALE); search_box->set_h_size_flags(SIZE_EXPAND_FILL); - search_box->connect("gui_input", this, "_search_box_gui_input"); - search_box->connect("text_changed", this, "_search_box_text_changed"); + search_box->connect_compat("gui_input", this, "_search_box_gui_input"); + search_box->connect_compat("text_changed", this, "_search_box_text_changed"); register_text_enter(search_box); hbox->add_child(search_box); case_sensitive_button = memnew(ToolButton); case_sensitive_button->set_tooltip(TTR("Case Sensitive")); - case_sensitive_button->connect("pressed", this, "_update_results"); + case_sensitive_button->connect_compat("pressed", this, "_update_results"); case_sensitive_button->set_toggle_mode(true); case_sensitive_button->set_focus_mode(FOCUS_NONE); hbox->add_child(case_sensitive_button); hierarchy_button = memnew(ToolButton); hierarchy_button->set_tooltip(TTR("Show Hierarchy")); - hierarchy_button->connect("pressed", this, "_update_results"); + hierarchy_button->connect_compat("pressed", this, "_update_results"); hierarchy_button->set_toggle_mode(true); hierarchy_button->set_pressed(true); hierarchy_button->set_focus_mode(FOCUS_NONE); @@ -237,7 +237,7 @@ EditorHelpSearch::EditorHelpSearch() { filter_combo->add_item(TTR("Constants Only"), SEARCH_CONSTANTS); filter_combo->add_item(TTR("Properties Only"), SEARCH_PROPERTIES); filter_combo->add_item(TTR("Theme Properties Only"), SEARCH_THEME_ITEMS); - filter_combo->connect("item_selected", this, "_filter_combo_item_selected"); + filter_combo->connect_compat("item_selected", this, "_filter_combo_item_selected"); hbox->add_child(filter_combo); // Create the results tree. @@ -251,8 +251,8 @@ EditorHelpSearch::EditorHelpSearch() { results_tree->set_custom_minimum_size(Size2(0, 100) * EDSCALE); results_tree->set_hide_root(true); results_tree->set_select_mode(Tree::SELECT_ROW); - results_tree->connect("item_activated", this, "_confirmed"); - results_tree->connect("item_selected", get_ok(), "set_disabled", varray(false)); + results_tree->connect_compat("item_activated", this, "_confirmed"); + results_tree->connect_compat("item_selected", get_ok(), "set_disabled", varray(false)); vbox->add_child(results_tree, true); } @@ -483,7 +483,7 @@ TreeItem *EditorHelpSearch::Runner::_create_class_hierarchy(const ClassMatch &p_ TreeItem *EditorHelpSearch::Runner::_create_class_item(TreeItem *p_parent, const DocData::ClassDoc *p_doc, bool p_gray) { - Ref<Texture> icon = empty_icon; + Ref<Texture2D> icon = empty_icon; if (ui_service->has_icon(p_doc->name, "EditorIcons")) icon = ui_service->get_icon(p_doc->name, "EditorIcons"); else if (ClassDB::class_exists(p_doc->name) && ClassDB::is_parent_class(p_doc->name, "Object")) @@ -559,7 +559,7 @@ TreeItem *EditorHelpSearch::Runner::_create_theme_property_item(TreeItem *p_pare TreeItem *EditorHelpSearch::Runner::_create_member_item(TreeItem *p_parent, const String &p_class_name, const String &p_icon, const String &p_name, const String &p_type, const String &p_metatype, const String &p_tooltip) { - Ref<Texture> icon; + Ref<Texture2D> icon; String text; if (search_flags & SEARCH_SHOW_HIERARCHY) { icon = ui_service->get_icon(p_icon, "EditorIcons"); diff --git a/editor/editor_help_search.h b/editor/editor_help_search.h index 5d089d1c24..feff96d2e5 100644 --- a/editor/editor_help_search.h +++ b/editor/editor_help_search.h @@ -116,7 +116,7 @@ class EditorHelpSearch::Runner : public Reference { String term; int search_flags; - Ref<Texture> empty_icon; + Ref<Texture2D> empty_icon; Color disabled_color; Map<String, DocData::ClassDoc>::Element *iterator_doc; diff --git a/editor/editor_inspector.cpp b/editor/editor_inspector.cpp index 7c1e58862e..c3daf39b48 100644 --- a/editor/editor_inspector.cpp +++ b/editor/editor_inspector.cpp @@ -61,12 +61,12 @@ Size2 EditorProperty::get_minimum_size() const { } if (keying) { - Ref<Texture> key = get_icon("Key", "EditorIcons"); + Ref<Texture2D> key = get_icon("Key", "EditorIcons"); ms.width += key->get_width() + get_constant("hseparator", "Tree"); } if (checkable) { - Ref<Texture> check = get_icon("checked", "CheckBox"); + Ref<Texture2D> check = get_icon("checked", "CheckBox"); ms.width += check->get_width() + get_constant("hseparation", "CheckBox") + get_constant("hseparator", "Tree"); } @@ -139,7 +139,7 @@ void EditorProperty::_notification(int p_what) { } if (keying) { - Ref<Texture> key; + Ref<Texture2D> key; if (use_keying_next()) { key = get_icon("KeyNext", "EditorIcons"); @@ -215,7 +215,7 @@ void EditorProperty::_notification(int p_what) { int text_limit = text_size; if (checkable) { - Ref<Texture> checkbox; + Ref<Texture2D> checkbox; if (checked) checkbox = get_icon("GuiChecked", "EditorIcons"); else @@ -236,7 +236,7 @@ void EditorProperty::_notification(int p_what) { } if (can_revert) { - Ref<Texture> reload_icon = get_icon("ReloadSmall", "EditorIcons"); + Ref<Texture2D> reload_icon = get_icon("ReloadSmall", "EditorIcons"); text_limit -= reload_icon->get_width() + get_constant("hseparator", "Tree") * 2; revert_rect = Rect2(text_limit + get_constant("hseparator", "Tree"), (size.height - reload_icon->get_height()) / 2, reload_icon->get_width(), reload_icon->get_height()); @@ -256,7 +256,7 @@ void EditorProperty::_notification(int p_what) { draw_string(font, Point2(ofs, v_ofs + font->get_ascent()), label, color, text_limit); if (keying) { - Ref<Texture> key; + Ref<Texture2D> key; if (use_keying_next()) { key = get_icon("KeyNext", "EditorIcons"); @@ -570,7 +570,7 @@ void EditorProperty::_focusable_focused(int p_index) { void EditorProperty::add_focusable(Control *p_control) { - p_control->connect("focus_entered", this, "_focusable_focused", varray(focusables.size())); + p_control->connect_compat("focus_entered", this, "_focusable_focused", varray(focusables.size())); focusables.push_back(p_control); } @@ -828,13 +828,13 @@ void EditorProperty::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::BOOL, "checked"), "set_checked", "is_checked"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "draw_red"), "set_draw_red", "is_draw_red"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "keying"), "set_keying", "is_keying"); - ADD_SIGNAL(MethodInfo("property_changed", PropertyInfo(Variant::STRING, "property"), PropertyInfo(Variant::NIL, "value", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NIL_IS_VARIANT))); - ADD_SIGNAL(MethodInfo("multiple_properties_changed", PropertyInfo(Variant::POOL_STRING_ARRAY, "properties"), PropertyInfo(Variant::ARRAY, "value"))); - ADD_SIGNAL(MethodInfo("property_keyed", PropertyInfo(Variant::STRING, "property"))); - ADD_SIGNAL(MethodInfo("property_keyed_with_value", PropertyInfo(Variant::STRING, "property"), PropertyInfo(Variant::NIL, "value", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NIL_IS_VARIANT))); - ADD_SIGNAL(MethodInfo("property_checked", PropertyInfo(Variant::STRING, "property"), PropertyInfo(Variant::STRING, "bool"))); + ADD_SIGNAL(MethodInfo("property_changed", PropertyInfo(Variant::STRING_NAME, "property"), PropertyInfo(Variant::NIL, "value", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NIL_IS_VARIANT))); + ADD_SIGNAL(MethodInfo("multiple_properties_changed", PropertyInfo(Variant::PACKED_STRING_ARRAY, "properties"), PropertyInfo(Variant::ARRAY, "value"))); + ADD_SIGNAL(MethodInfo("property_keyed", PropertyInfo(Variant::STRING_NAME, "property"))); + ADD_SIGNAL(MethodInfo("property_keyed_with_value", PropertyInfo(Variant::STRING_NAME, "property"), PropertyInfo(Variant::NIL, "value", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NIL_IS_VARIANT))); + ADD_SIGNAL(MethodInfo("property_checked", PropertyInfo(Variant::STRING_NAME, "property"), PropertyInfo(Variant::STRING, "bool"))); ADD_SIGNAL(MethodInfo("resource_selected", PropertyInfo(Variant::STRING, "path"), PropertyInfo(Variant::OBJECT, "resource", PROPERTY_HINT_RESOURCE_TYPE, "Resource"))); - ADD_SIGNAL(MethodInfo("object_id_selected", PropertyInfo(Variant::STRING, "property"), PropertyInfo(Variant::INT, "id"))); + ADD_SIGNAL(MethodInfo("object_id_selected", PropertyInfo(Variant::STRING_NAME, "property"), PropertyInfo(Variant::INT, "id"))); ADD_SIGNAL(MethodInfo("selected", PropertyInfo(Variant::STRING, "path"), PropertyInfo(Variant::INT, "focusable_idx"))); MethodInfo vm; @@ -925,7 +925,7 @@ bool EditorInspectorPlugin::parse_property(Object *p_object, Variant::Type p_typ &arg[0], &arg[1], &arg[2], &arg[3], &arg[4], &arg[5] }; - Variant::CallError err; + Callable::CallError err; return get_script_instance()->call("parse_property", (const Variant **)&argptr, 6, err); } return false; @@ -1055,7 +1055,7 @@ void EditorInspectorSection::_notification(int p_what) { if (p_what == NOTIFICATION_SORT_CHILDREN) { Ref<Font> font = get_font("font", "Tree"); - Ref<Texture> arrow; + Ref<Texture2D> arrow; if (foldable) { if (object->editor_is_section_unfolded(section)) { @@ -1096,7 +1096,7 @@ void EditorInspectorSection::_notification(int p_what) { if (p_what == NOTIFICATION_DRAW) { - Ref<Texture> arrow; + Ref<Texture2D> arrow; if (foldable) { if (object->editor_is_section_unfolded(section)) { @@ -1339,14 +1339,14 @@ void EditorInspector::_parse_added_editors(VBoxContainer *current_vbox, Ref<Edit if (ep) { ep->object = object; - ep->connect("property_changed", this, "_property_changed"); - ep->connect("property_keyed", this, "_property_keyed"); - ep->connect("property_keyed_with_value", this, "_property_keyed_with_value"); - ep->connect("property_checked", this, "_property_checked"); - ep->connect("selected", this, "_property_selected"); - ep->connect("multiple_properties_changed", this, "_multiple_properties_changed"); - ep->connect("resource_selected", this, "_resource_selected", varray(), CONNECT_DEFERRED); - ep->connect("object_id_selected", this, "_object_id_selected", varray(), CONNECT_DEFERRED); + ep->connect_compat("property_changed", this, "_property_changed"); + ep->connect_compat("property_keyed", this, "_property_keyed"); + ep->connect_compat("property_keyed_with_value", this, "_property_keyed_with_value"); + ep->connect_compat("property_checked", this, "_property_checked"); + ep->connect_compat("selected", this, "_property_selected"); + ep->connect_compat("multiple_properties_changed", this, "_multiple_properties_changed"); + ep->connect_compat("resource_selected", this, "_resource_selected", varray(), CONNECT_DEFERRED); + ep->connect_compat("object_id_selected", this, "_object_id_selected", varray(), CONNECT_DEFERRED); if (F->get().properties.size()) { @@ -1751,17 +1751,17 @@ void EditorInspector::update_tree() { if (ep) { - ep->connect("property_changed", this, "_property_changed"); + ep->connect_compat("property_changed", this, "_property_changed"); if (p.usage & PROPERTY_USAGE_UPDATE_ALL_IF_MODIFIED) { - ep->connect("property_changed", this, "_property_changed_update_all", varray(), CONNECT_DEFERRED); + ep->connect_compat("property_changed", this, "_property_changed_update_all", varray(), CONNECT_DEFERRED); } - ep->connect("property_keyed", this, "_property_keyed"); - ep->connect("property_keyed_with_value", this, "_property_keyed_with_value"); - ep->connect("property_checked", this, "_property_checked"); - ep->connect("selected", this, "_property_selected"); - ep->connect("multiple_properties_changed", this, "_multiple_properties_changed"); - ep->connect("resource_selected", this, "_resource_selected", varray(), CONNECT_DEFERRED); - ep->connect("object_id_selected", this, "_object_id_selected", varray(), CONNECT_DEFERRED); + ep->connect_compat("property_keyed", this, "_property_keyed"); + ep->connect_compat("property_keyed_with_value", this, "_property_keyed_with_value"); + ep->connect_compat("property_checked", this, "_property_checked"); + ep->connect_compat("selected", this, "_property_selected"); + ep->connect_compat("multiple_properties_changed", this, "_multiple_properties_changed"); + ep->connect_compat("resource_selected", this, "_resource_selected", varray(), CONNECT_DEFERRED); + ep->connect_compat("object_id_selected", this, "_object_id_selected", varray(), CONNECT_DEFERRED); if (doc_hint != String()) { ep->set_tooltip(property_prefix + p.name + "::" + doc_hint); } else { @@ -1889,7 +1889,7 @@ void EditorInspector::set_use_filter(bool p_use) { void EditorInspector::register_text_enter(Node *p_line_edit) { search_box = Object::cast_to<LineEdit>(p_line_edit); if (search_box) - search_box->connect("text_changed", this, "_filter_changed"); + search_box->connect_compat("text_changed", this, "_filter_changed"); } void EditorInspector::_filter_changed(const String &p_text) { @@ -2109,7 +2109,7 @@ void EditorInspector::_property_checked(const String &p_path, bool p_checked) { object->get_property_list(&pinfo); for (List<PropertyInfo>::Element *E = pinfo.front(); E; E = E->next()) { if (E->get().name == p_path) { - Variant::CallError ce; + Callable::CallError ce; to_create = Variant::construct(E->get().type, NULL, 0, ce); break; } @@ -2165,7 +2165,7 @@ void EditorInspector::_node_removed(Node *p_node) { void EditorInspector::_notification(int p_what) { if (p_what == NOTIFICATION_READY) { - EditorFeatureProfileManager::get_singleton()->connect("current_feature_profile_changed", this, "_feature_profile_changed"); + EditorFeatureProfileManager::get_singleton()->connect_compat("current_feature_profile_changed", this, "_feature_profile_changed"); } if (p_what == NOTIFICATION_ENTER_TREE) { @@ -2174,7 +2174,7 @@ void EditorInspector::_notification(int p_what) { add_style_override("bg", get_stylebox("sub_inspector_bg", "Editor")); } else { add_style_override("bg", get_stylebox("bg", "Tree")); - get_tree()->connect("node_removed", this, "_node_removed"); + get_tree()->connect_compat("node_removed", this, "_node_removed"); } } if (p_what == NOTIFICATION_PREDELETE) { @@ -2183,7 +2183,7 @@ void EditorInspector::_notification(int p_what) { if (p_what == NOTIFICATION_EXIT_TREE) { if (!sub_inspector) { - get_tree()->disconnect("node_removed", this, "_node_removed"); + get_tree()->disconnect_compat("node_removed", this, "_node_removed"); } edit(NULL); } @@ -2337,6 +2337,6 @@ EditorInspector::EditorInspector() { property_focusable = -1; sub_inspector = false; - get_v_scrollbar()->connect("value_changed", this, "_vscroll_changed"); + get_v_scrollbar()->connect_compat("value_changed", this, "_vscroll_changed"); update_scroll_request = -1; } diff --git a/editor/editor_inspector.h b/editor/editor_inspector.h index 792247138e..7ad55a13ad 100644 --- a/editor/editor_inspector.h +++ b/editor/editor_inspector.h @@ -198,7 +198,7 @@ class EditorInspectorCategory : public Control { GDCLASS(EditorInspectorCategory, Control); friend class EditorInspector; - Ref<Texture> icon; + Ref<Texture2D> icon; String label; Color bg_color; mutable String tooltip_text; diff --git a/editor/editor_layouts_dialog.cpp b/editor/editor_layouts_dialog.cpp index 727e758341..05a5df45a9 100644 --- a/editor/editor_layouts_dialog.cpp +++ b/editor/editor_layouts_dialog.cpp @@ -128,8 +128,8 @@ EditorLayoutsDialog::EditorLayoutsDialog() { name->set_margin(MARGIN_TOP, 5); name->set_anchor_and_margin(MARGIN_LEFT, ANCHOR_BEGIN, 5); name->set_anchor_and_margin(MARGIN_RIGHT, ANCHOR_END, -5); - name->connect("gui_input", this, "_line_gui_input"); - name->connect("focus_entered", layout_names, "unselect_all"); + name->connect_compat("gui_input", this, "_line_gui_input"); + name->connect_compat("focus_entered", layout_names, "unselect_all"); } void EditorLayoutsDialog::set_name_line_enabled(bool p_enabled) { diff --git a/editor/editor_log.cpp b/editor/editor_log.cpp index 0495722a13..ca755a6cb7 100644 --- a/editor/editor_log.cpp +++ b/editor/editor_log.cpp @@ -76,7 +76,7 @@ void EditorLog::_notification(int p_what) { void EditorLog::_clear_request() { log->clear(); - tool_button->set_icon(Ref<Texture>()); + tool_button->set_icon(Ref<Texture2D>()); } void EditorLog::_copy_request() { @@ -102,14 +102,14 @@ void EditorLog::add_message(const String &p_msg, MessageType p_type) { } break; case MSG_TYPE_ERROR: { log->push_color(get_color("error_color", "Editor")); - Ref<Texture> icon = get_icon("Error", "EditorIcons"); + Ref<Texture2D> icon = get_icon("Error", "EditorIcons"); log->add_image(icon); log->add_text(" "); tool_button->set_icon(icon); } break; case MSG_TYPE_WARNING: { log->push_color(get_color("warning_color", "Editor")); - Ref<Texture> icon = get_icon("Warning", "EditorIcons"); + Ref<Texture2D> icon = get_icon("Warning", "EditorIcons"); log->add_image(icon); log->add_text(" "); tool_button->set_icon(icon); @@ -159,13 +159,13 @@ EditorLog::EditorLog() { hb->add_child(copybutton); copybutton->set_text(TTR("Copy")); copybutton->set_shortcut(ED_SHORTCUT("editor/copy_output", TTR("Copy Selection"), KEY_MASK_CMD | KEY_C)); - copybutton->connect("pressed", this, "_copy_request"); + copybutton->connect_compat("pressed", this, "_copy_request"); clearbutton = memnew(Button); hb->add_child(clearbutton); clearbutton->set_text(TTR("Clear")); clearbutton->set_shortcut(ED_SHORTCUT("editor/clear_output", TTR("Clear Output"), KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_K)); - clearbutton->connect("pressed", this, "_clear_request"); + clearbutton->connect_compat("pressed", this, "_clear_request"); log = memnew(RichTextLabel); log->set_scroll_follow(true); diff --git a/editor/editor_network_profiler.cpp b/editor/editor_network_profiler.cpp index 1b80743237..1dffafa359 100644 --- a/editor/editor_network_profiler.cpp +++ b/editor/editor_network_profiler.cpp @@ -142,12 +142,12 @@ EditorNetworkProfiler::EditorNetworkProfiler() { activate = memnew(Button); activate->set_toggle_mode(true); activate->set_text(TTR("Start")); - activate->connect("pressed", this, "_activate_pressed"); + activate->connect_compat("pressed", this, "_activate_pressed"); hb->add_child(activate); clear_button = memnew(Button); clear_button->set_text(TTR("Clear")); - clear_button->connect("pressed", this, "_clear_pressed"); + clear_button->connect_compat("pressed", this, "_clear_pressed"); hb->add_child(clear_button); hb->add_spacer(); @@ -207,5 +207,5 @@ EditorNetworkProfiler::EditorNetworkProfiler() { frame_delay->set_wait_time(0.1); frame_delay->set_one_shot(true); add_child(frame_delay); - frame_delay->connect("timeout", this, "_update_frame"); + frame_delay->connect_compat("timeout", this, "_update_frame"); } diff --git a/editor/editor_node.cpp b/editor/editor_node.cpp index d6dcbf7e84..d8043f016b 100644 --- a/editor/editor_node.cpp +++ b/editor/editor_node.cpp @@ -123,6 +123,7 @@ #include "editor/plugins/cpu_particles_2d_editor_plugin.h" #include "editor/plugins/cpu_particles_editor_plugin.h" #include "editor/plugins/curve_editor_plugin.h" +#include "editor/plugins/debugger_editor_plugin.h" #include "editor/plugins/editor_preview_plugins.h" #include "editor/plugins/gi_probe_editor_plugin.h" #include "editor/plugins/gradient_editor_plugin.h" @@ -168,7 +169,6 @@ #include "editor/quick_open.h" #include "editor/register_exporters.h" #include "editor/run_settings_dialog.h" -#include "editor/script_editor_debugger.h" #include "editor/settings_config_dialog.h" #include <stdio.h> @@ -183,11 +183,11 @@ void EditorNode::_update_scene_tabs() { OS::get_singleton()->global_menu_clear("_dock"); scene_tabs->clear_tabs(); - Ref<Texture> script_icon = gui_base->get_icon("Script", "EditorIcons"); + Ref<Texture2D> script_icon = gui_base->get_icon("Script", "EditorIcons"); for (int i = 0; i < editor_data.get_edited_scene_count(); i++) { Node *type_node = editor_data.get_edited_scene_root(i); - Ref<Texture> icon; + Ref<Texture2D> icon; if (type_node) { icon = EditorNode::get_singleton()->get_object_icon(type_node, "Node"); } @@ -343,6 +343,27 @@ void EditorNode::_notification(int p_what) { scene_root->set_size_override(true, Size2(ProjectSettings::get_singleton()->get("display/window/size/width"), ProjectSettings::get_singleton()->get("display/window/size/height"))); + { //TODO should only happen on settings changed + int current_filter = GLOBAL_GET("rendering/canvas_textures/default_texture_filter"); + if (current_filter != scene_root->get_default_canvas_item_texture_filter()) { + Viewport::DefaultCanvasItemTextureFilter tf = (Viewport::DefaultCanvasItemTextureFilter)current_filter; + scene_root->set_default_canvas_item_texture_filter(tf); + } + int current_repeat = GLOBAL_GET("rendering/canvas_textures/default_texture_repeat"); + if (current_repeat != scene_root->get_default_canvas_item_texture_repeat()) { + Viewport::DefaultCanvasItemTextureRepeat tr = (Viewport::DefaultCanvasItemTextureRepeat)current_repeat; + scene_root->set_default_canvas_item_texture_repeat(tr); + } + + VS::DOFBokehShape dof_shape = VS::DOFBokehShape(int(GLOBAL_GET("rendering/quality/filters/depth_of_field_bokeh_shape"))); + VS::get_singleton()->camera_effects_set_dof_blur_bokeh_shape(dof_shape); + VS::DOFBlurQuality dof_quality = VS::DOFBlurQuality(int(GLOBAL_GET("rendering/quality/filters/depth_of_field_bokeh_quality"))); + bool dof_jitter = GLOBAL_GET("rendering/quality/filters/depth_of_field_use_jitter"); + VS::get_singleton()->camera_effects_set_dof_blur_quality(dof_quality, dof_jitter); + VS::get_singleton()->environment_set_ssao_quality(VS::EnvironmentSSAOQuality(int(GLOBAL_GET("rendering/quality/ssao/quality"))), GLOBAL_GET("rendering/quality/ssao/half_size")); + VS::get_singleton()->screen_space_roughness_limiter_set_active(GLOBAL_GET("rendering/quality/filters/screen_space_roughness_limiter"), GLOBAL_GET("rendering/quality/filters/screen_space_roughness_limiter_curve")); + } + ResourceImporterTexture::get_singleton()->update_imports(); } break; @@ -350,13 +371,11 @@ void EditorNode::_notification(int p_what) { Engine::get_singleton()->set_editor_hint(true); OS::get_singleton()->set_low_processor_usage_mode_sleep_usec(int(EDITOR_GET("interface/editor/low_processor_mode_sleep_usec"))); - get_tree()->get_root()->set_usage(Viewport::USAGE_2D_NO_SAMPLING); //reduce memory usage - get_tree()->get_root()->set_disable_3d(true); get_tree()->get_root()->set_as_audio_listener(false); get_tree()->get_root()->set_as_audio_listener_2d(false); get_tree()->set_auto_accept_quit(false); - get_tree()->connect("files_dropped", this, "_dropped_files"); - get_tree()->connect("global_menu_action", this, "_global_menu_action"); + get_tree()->connect_compat("files_dropped", this, "_dropped_files"); + get_tree()->connect_compat("global_menu_action", this, "_global_menu_action"); /* DO NOT LOAD SCENES HERE, WAIT FOR FILE SCANNING AND REIMPORT TO COMPLETE */ } break; @@ -453,7 +472,7 @@ void EditorNode::_notification(int p_what) { recent_scenes->set_as_minsize(); // debugger area - if (ScriptEditor::get_singleton()->get_debugger()->is_visible()) + if (EditorDebuggerNode::get_singleton()->is_visible()) bottom_panel->add_style_override("panel", gui_base->get_stylebox("BottomPanelDebuggerOverride", "EditorStyles")); // update_icons @@ -461,7 +480,7 @@ void EditorNode::_notification(int p_what) { ToolButton *tb = singleton->main_editor_buttons[i]; EditorPlugin *p_editor = singleton->editor_table[i]; - Ref<Texture> icon = p_editor->get_icon(); + Ref<Texture2D> icon = p_editor->get_icon(); if (icon.is_valid()) { tb->set_icon(icon); @@ -528,7 +547,7 @@ void EditorNode::_on_plugin_ready(Object *p_script, const String &p_activate_nam push_item(script.operator->()); } -void EditorNode::_resources_changed(const PoolVector<String> &p_resources) { +void EditorNode::_resources_changed(const Vector<String> &p_resources) { List<Ref<Resource> > changed; @@ -1539,7 +1558,7 @@ void EditorNode::_dialog_action(String p_file) { save_resource_in_path(saving_resource, p_file); saving_resource = Ref<Resource>(); ObjectID current = editor_history.get_current(); - Object *current_obj = current > 0 ? ObjectDB::get_instance(current) : NULL; + Object *current_obj = current.is_valid() ? ObjectDB::get_instance(current) : NULL; ERR_FAIL_COND(!current_obj); current_obj->_change_notify(); } break; @@ -1692,7 +1711,7 @@ void EditorNode::push_item(Object *p_object, const String &p_property, bool p_in return; } - uint32_t id = p_object->get_instance_id(); + ObjectID id = p_object->get_instance_id(); if (id != editor_history.get_current()) { if (p_inspector_only) { @@ -1748,8 +1767,8 @@ static bool overrides_external_editor(Object *p_object) { void EditorNode::_edit_current() { - uint32_t current = editor_history.get_current(); - Object *current_obj = current > 0 ? ObjectDB::get_instance(current) : NULL; + ObjectID current = editor_history.get_current(); + Object *current_obj = current.is_valid() ? ObjectDB::get_instance(current) : NULL; bool inspector_only = editor_history.is_current_inspector_only(); this->current = current_obj; @@ -1827,7 +1846,7 @@ void EditorNode::_edit_current() { Node *selected_node = NULL; - if (current_obj->is_class("ScriptEditorDebuggerInspectedObject")) { + if (current_obj->is_class("EditorDebuggerRemoteObject")) { editable_warning = TTR("This is a remote object, so changes to it won't be kept.\nPlease read the documentation relevant to debugging to better understand this workflow."); capitalize = false; disable_folding = true; @@ -2029,9 +2048,13 @@ void EditorNode::_run(bool p_current, const String &p_custom) { editor_data.get_editor_breakpoints(&breakpoints); args = ProjectSettings::get_singleton()->get("editor/main_run_args"); - skip_breakpoints = ScriptEditor::get_singleton()->get_debugger()->is_skip_breakpoints(); + skip_breakpoints = EditorDebuggerNode::get_singleton()->is_skip_breakpoints(); + + int instances = 1; + if (debug_menu->get_popup()->is_item_checked(debug_menu->get_popup()->get_item_index(RUN_DEBUG_TWO))) + instances = 2; - Error error = editor_run.run(run_filename, args, breakpoints, skip_breakpoints); + Error error = editor_run.run(run_filename, args, breakpoints, skip_breakpoints, instances); if (error != OK) { @@ -2155,7 +2178,7 @@ void EditorNode::_menu_option_confirm(int p_option, bool p_confirmed) { break; } - FALLTHROUGH; + [[fallthrough]]; } case SCENE_TAB_CLOSE: case FILE_SAVE_SCENE: { @@ -2176,7 +2199,7 @@ void EditorNode::_menu_option_confirm(int p_option, bool p_confirmed) { break; } - FALLTHROUGH; + [[fallthrough]]; } case FILE_SAVE_AS_SCENE: { int scene_idx = (p_option == FILE_SAVE_SCENE || p_option == FILE_SAVE_AS_SCENE) ? -1 : tab_closing; @@ -2462,6 +2485,16 @@ void EditorNode::_menu_option_confirm(int p_option, bool p_confirmed) { run_settings_dialog->popup_run_settings(); } break; + case RUN_DEBUG_ONE: { + debug_menu->get_popup()->set_item_checked(debug_menu->get_popup()->get_item_index(RUN_DEBUG_ONE), true); + debug_menu->get_popup()->set_item_checked(debug_menu->get_popup()->get_item_index(RUN_DEBUG_TWO), false); + + } break; + case RUN_DEBUG_TWO: { + debug_menu->get_popup()->set_item_checked(debug_menu->get_popup()->get_item_index(RUN_DEBUG_TWO), true); + debug_menu->get_popup()->set_item_checked(debug_menu->get_popup()->get_item_index(RUN_DEBUG_ONE), false); + + } break; case RUN_SETTINGS: { project_settings->popup_project_settings(); @@ -2552,7 +2585,7 @@ void EditorNode::_menu_option_confirm(int p_option, bool p_confirmed) { bool ischecked = debug_menu->get_popup()->is_item_checked(debug_menu->get_popup()->get_item_index(RUN_LIVE_DEBUG)); debug_menu->get_popup()->set_item_checked(debug_menu->get_popup()->get_item_index(RUN_LIVE_DEBUG), !ischecked); - ScriptEditor::get_singleton()->get_debugger()->set_live_debugging(!ischecked); + EditorDebuggerNode::get_singleton()->set_live_debugging(!ischecked); EditorSettings::get_singleton()->set_project_metadata("debug_options", "run_live_debug", !ischecked); } break; @@ -2710,7 +2743,6 @@ void EditorNode::_save_screenshot(NodePath p_path) { Viewport *viewport = EditorInterface::get_singleton()->get_editor_viewport()->get_viewport(); viewport->set_clear_mode(Viewport::CLEAR_MODE_ONLY_NEXT_FRAME); Ref<Image> img = viewport->get_texture()->get_data(); - img->flip_y(); viewport->set_clear_mode(Viewport::CLEAR_MODE_ALWAYS); Error error = img->save_png(p_path); ERR_FAIL_COND_MSG(error != OK, "Cannot save screenshot to file '" + p_path + "'."); @@ -2728,10 +2760,10 @@ void EditorNode::_tool_menu_option(int p_idx) { Object *handler = ObjectDB::get_instance(params[0]); String callback = params[1]; Variant *ud = ¶ms[2]; - Variant::CallError ce; + Callable::CallError ce; handler->call(callback, (const Variant **)&ud, 1, ce); - if (ce.error != Variant::CallError::CALL_OK) { + if (ce.error != Callable::CallError::CALL_OK) { String err = Variant::get_call_error_text(handler, callback, (const Variant **)&ud, 1, ce); ERR_PRINT("Error calling function from tool menu: " + err); } @@ -2940,9 +2972,9 @@ void EditorNode::add_editor_plugin(EditorPlugin *p_editor, bool p_config_changed ToolButton *tb = memnew(ToolButton); tb->set_toggle_mode(true); - tb->connect("pressed", singleton, "_editor_select", varray(singleton->main_editor_buttons.size())); + tb->connect_compat("pressed", singleton, "_editor_select", varray(singleton->main_editor_buttons.size())); tb->set_text(p_editor->get_name()); - Ref<Texture> icon = p_editor->get_icon(); + Ref<Texture2D> icon = p_editor->get_icon(); if (icon.is_valid()) { tb->set_icon(icon); @@ -3034,7 +3066,7 @@ void EditorNode::set_addon_plugin_enabled(const String &p_addon, bool p_enabled, String addon_path = String("res://addons").plus_file(p_addon).plus_file("plugin.cfg"); if (!DirAccess::exists(addon_path.get_base_dir())) { ProjectSettings *ps = ProjectSettings::get_singleton(); - PoolStringArray enabled_plugins = ps->get("editor_plugins/enabled"); + PackedStringArray enabled_plugins = ps->get("editor_plugins/enabled"); for (int i = 0; i < enabled_plugins.size(); ++i) { if (enabled_plugins.get(i) == p_addon) { enabled_plugins.remove(i); @@ -3089,7 +3121,7 @@ void EditorNode::set_addon_plugin_enabled(const String &p_addon, bool p_enabled, } EditorPlugin *ep = memnew(EditorPlugin); - ep->set_script(script.get_ref_ptr()); + ep->set_script(script); plugin_addons[p_addon] = ep; add_editor_plugin(ep, p_config_changed); @@ -3224,7 +3256,7 @@ void EditorNode::_set_main_scene_state(Dictionary p_state, Node *p_for_scene) { //this should only happen at the very end - ScriptEditor::get_singleton()->get_debugger()->update_live_edit_root(); + EditorDebuggerNode::get_singleton()->update_live_edit_root(); ScriptEditor::get_singleton()->set_scene_root_script(editor_data.get_scene_root_script(editor_data.get_edited_scene())); editor_data.notify_edited_scene_changed(); } @@ -3459,7 +3491,7 @@ Error EditorNode::load_scene(const String &p_scene, bool p_ignore_broken_deps, b opening_prev = false; scene_tree_dock->set_selected(new_scene); - ScriptEditor::get_singleton()->get_debugger()->update_live_edit_root(); + EditorDebuggerNode::get_singleton()->update_live_edit_root(); push_item(new_scene); @@ -3601,7 +3633,7 @@ void EditorNode::_quick_run() { _run(false, quick_run->get_selected()); } -void EditorNode::notify_child_process_exited() { +void EditorNode::notify_all_debug_sessions_exited() { _menu_option_confirm(RUN_STOP, false); stop_button->set_pressed(false); @@ -3685,9 +3717,13 @@ void EditorNode::unregister_editor_types() { _init_callbacks.clear(); } -void EditorNode::stop_child_process() { +void EditorNode::stop_child_process(OS::ProcessID p_pid) { - _menu_option_confirm(RUN_STOP, false); + if (has_child_process(p_pid)) { + editor_run.stop_child_process(p_pid); + if (!editor_run.get_child_process_count()) // All children stopped. Closing. + _menu_option_confirm(RUN_STOP, false); + } } Ref<Script> EditorNode::get_object_custom_type_base(const Object *p_object) const { @@ -3767,7 +3803,7 @@ Ref<ImageTexture> EditorNode::_load_custom_class_icon(const String &p_path) cons return NULL; } -Ref<Texture> EditorNode::get_object_icon(const Object *p_object, const String &p_fallback) const { +Ref<Texture2D> EditorNode::get_object_icon(const Object *p_object, const String &p_fallback) const { ERR_FAIL_COND_V(!p_object || !gui_base, NULL); Ref<Script> script = p_object->get_script(); @@ -3812,7 +3848,7 @@ Ref<Texture> EditorNode::get_object_icon(const Object *p_object, const String &p return NULL; } -Ref<Texture> EditorNode::get_class_icon(const String &p_class, const String &p_fallback) const { +Ref<Texture2D> EditorNode::get_class_icon(const String &p_class, const String &p_fallback) const { ERR_FAIL_COND_V_MSG(p_class.empty(), NULL, "Class name cannot be empty."); if (gui_base->has_icon(p_class, "EditorIcons")) { @@ -3907,7 +3943,7 @@ void EditorNode::progress_end_task_bg(const String &p_task) { singleton->progress_hb->end_task(p_task); } -Ref<Texture> EditorNode::_file_dialog_get_icon(const String &p_path) { +Ref<Texture2D> EditorNode::_file_dialog_get_icon(const String &p_path) { EditorFileSystemDirectory *efsd = EditorFileSystem::get_singleton()->get_filesystem_path(p_path.get_base_dir()); if (efsd) { @@ -4732,7 +4768,7 @@ void EditorNode::_reposition_active_tab(int idx_to) { _update_scene_tabs(); } -void EditorNode::_thumbnail_done(const String &p_path, const Ref<Texture> &p_preview, const Ref<Texture> &p_small_preview, const Variant &p_udata) { +void EditorNode::_thumbnail_done(const String &p_path, const Ref<Texture2D> &p_preview, const Ref<Texture2D> &p_small_preview, const Variant &p_udata) { int p_tab = p_udata.operator signed int(); if (p_preview.is_valid()) { Rect2 rect = scene_tabs->get_tab_rect(p_tab); @@ -4767,7 +4803,7 @@ void EditorNode::_scene_tab_changed(int p_tab) { ToolButton *EditorNode::add_bottom_panel_item(String p_text, Control *p_item) { ToolButton *tb = memnew(ToolButton); - tb->connect("toggled", this, "_bottom_panel_switch", varray(bottom_panel_items.size())); + tb->connect_compat("toggled", this, "_bottom_panel_switch", varray(bottom_panel_items.size())); tb->set_text(p_text); tb->set_toggle_mode(true); tb->set_focus_mode(Control::FOCUS_NONE); @@ -4829,8 +4865,8 @@ void EditorNode::raise_bottom_panel_item(Control *p_item) { } for (int i = 0; i < bottom_panel_items.size(); i++) { - bottom_panel_items[i].button->disconnect("toggled", this, "_bottom_panel_switch"); - bottom_panel_items[i].button->connect("toggled", this, "_bottom_panel_switch", varray(i)); + bottom_panel_items[i].button->disconnect_compat("toggled", this, "_bottom_panel_switch"); + bottom_panel_items[i].button->connect_compat("toggled", this, "_bottom_panel_switch", varray(i)); } } @@ -4851,8 +4887,8 @@ void EditorNode::remove_bottom_panel_item(Control *p_item) { } for (int i = 0; i < bottom_panel_items.size(); i++) { - bottom_panel_items[i].button->disconnect("toggled", this, "_bottom_panel_switch"); - bottom_panel_items[i].button->connect("toggled", this, "_bottom_panel_switch", varray(i)); + bottom_panel_items[i].button->disconnect_compat("toggled", this, "_bottom_panel_switch"); + bottom_panel_items[i].button->connect_compat("toggled", this, "_bottom_panel_switch", varray(i)); } } @@ -4870,7 +4906,7 @@ void EditorNode::_bottom_panel_switch(bool p_enable, int p_idx) { bottom_panel_items[i].button->set_pressed(i == p_idx); bottom_panel_items[i].control->set_visible(i == p_idx); } - if (ScriptEditor::get_singleton()->get_debugger() == bottom_panel_items[p_idx].control) { // this is the debug panel which uses tabs, so the top section should be smaller + if (EditorDebuggerNode::get_singleton() == bottom_panel_items[p_idx].control) { // this is the debug panel which uses tabs, so the top section should be smaller bottom_panel->add_style_override("panel", gui_base->get_stylebox("BottomPanelDebuggerOverride", "EditorStyles")); } else { bottom_panel->add_style_override("panel", gui_base->get_stylebox("panel", "TabContainer")); @@ -4972,7 +5008,7 @@ Variant EditorNode::drag_resource(const Ref<Resource> &p_res, Control *p_from) { TextureRect *drag_preview = memnew(TextureRect); Label *label = memnew(Label); - Ref<Texture> preview; + Ref<Texture2D> preview; { //todo make proper previews @@ -5335,8 +5371,8 @@ void EditorNode::_update_video_driver_color() { // TODO: Probably should de-hardcode this and add to editor settings. if (video_driver->get_text() == "GLES2") { video_driver->add_color_override("font_color", Color::hex(0x5586a4ff)); - } else if (video_driver->get_text() == "GLES3") { - video_driver->add_color_override("font_color", Color::hex(0xa5557dff)); + } else if (video_driver->get_text() == "Vulkan") { + video_driver->add_color_override("font_color", theme_base->get_color("vulkan_color", "Editor")); } } @@ -5501,7 +5537,7 @@ void EditorNode::_bind_methods() { ADD_SIGNAL(MethodInfo("pause_pressed")); ADD_SIGNAL(MethodInfo("stop_pressed")); ADD_SIGNAL(MethodInfo("request_help_search")); - ADD_SIGNAL(MethodInfo("script_add_function_request", PropertyInfo(Variant::OBJECT, "obj"), PropertyInfo(Variant::STRING, "function"), PropertyInfo(Variant::POOL_STRING_ARRAY, "args"))); + ADD_SIGNAL(MethodInfo("script_add_function_request", PropertyInfo(Variant::OBJECT, "obj"), PropertyInfo(Variant::STRING, "function"), PropertyInfo(Variant::PACKED_STRING_ARRAY, "args"))); ADD_SIGNAL(MethodInfo("resource_saved", PropertyInfo(Variant::OBJECT, "obj"))); } @@ -5582,7 +5618,6 @@ EditorNode::EditorNode() { Input::get_singleton()->set_use_accumulated_input(true); Resource::_get_local_scene_func = _resource_get_edited_scene; - VisualServer::get_singleton()->textures_keep_original(true); VisualServer::get_singleton()->set_debug_generate_wireframes(true); NavigationServer::get_singleton()->set_active(false); // no nav by default if editor @@ -5682,16 +5717,21 @@ EditorNode::EditorNode() { import_texture.instance(); ResourceFormatImporter::get_singleton()->add_importer(import_texture); - Ref<ResourceImporterLayeredTexture> import_3d; - import_3d.instance(); - import_3d->set_3d(true); - ResourceFormatImporter::get_singleton()->add_importer(import_3d); + /* Ref<ResourceImporterLayeredTexture> import_cubemap; + import_cubemap.instance(); + import_cubemap->set_mode(ResourceImporterLayeredTexture::MODE_CUBEMAP); + ResourceFormatImporter::get_singleton()->add_importer(import_cubemap); Ref<ResourceImporterLayeredTexture> import_array; import_array.instance(); - import_array->set_3d(false); + import_array->set_mode(ResourceImporterLayeredTexture::MODE_2D_ARRAY); ResourceFormatImporter::get_singleton()->add_importer(import_array); + Ref<ResourceImporterLayeredTexture> import_cubemap_array; + import_cubemap_array.instance(); + import_cubemap_array->set_mode(ResourceImporterLayeredTexture::MODE_CUBEMAP_ARRAY); + ResourceFormatImporter::get_singleton()->add_importer(import_cubemap_array); +*/ Ref<ResourceImporterImage> import_image; import_image.instance(); ResourceFormatImporter::get_singleton()->add_importer(import_image); @@ -5801,13 +5841,13 @@ EditorNode::EditorNode() { EDITOR_DEF_RST("interface/scene_tabs/show_thumbnail_on_hover", true); EDITOR_DEF_RST("interface/inspector/capitalize_properties", true); EDITOR_DEF_RST("interface/inspector/default_float_step", 0.001); - EditorSettings::get_singleton()->add_property_hint(PropertyInfo(Variant::REAL, "interface/inspector/default_float_step", PROPERTY_HINT_EXP_RANGE, "0,1,0")); + EditorSettings::get_singleton()->add_property_hint(PropertyInfo(Variant::REAL, "interface/inspector/default_float_step", PROPERTY_HINT_RANGE, "0,1,0")); EDITOR_DEF_RST("interface/inspector/disable_folding", false); EDITOR_DEF_RST("interface/inspector/auto_unfold_foreign_scenes", true); EDITOR_DEF("interface/inspector/horizontal_vector2_editing", false); EDITOR_DEF("interface/inspector/horizontal_vector_types_editing", true); EDITOR_DEF("interface/inspector/open_resources_in_current_inspector", true); - EDITOR_DEF("interface/inspector/resources_to_open_in_new_inspector", "SpatialMaterial,Script,MeshLibrary,TileSet"); + EDITOR_DEF("interface/inspector/resources_to_open_in_new_inspector", "StandardMaterial3D,ORMMaterial3D,Script,MeshLibrary,TileSet"); EDITOR_DEF("interface/inspector/default_color_picker_mode", 0); EditorSettings::get_singleton()->add_property_hint(PropertyInfo(Variant::INT, "interface/inspector/default_color_picker_mode", PROPERTY_HINT_ENUM, "RGB,HSV,RAW", PROPERTY_USAGE_DEFAULT)); EDITOR_DEF("run/auto_save/save_before_running", true); @@ -5903,8 +5943,8 @@ EditorNode::EditorNode() { hsplits.push_back(right_hsplit); for (int i = 0; i < vsplits.size(); i++) { - vsplits[i]->connect("dragged", this, "_dock_split_dragged"); - hsplits[i]->connect("dragged", this, "_dock_split_dragged"); + vsplits[i]->connect_compat("dragged", this, "_dock_split_dragged"); + hsplits[i]->connect_compat("dragged", this, "_dock_split_dragged"); } dock_select_popup = memnew(PopupPanel); @@ -5916,7 +5956,7 @@ EditorNode::EditorNode() { dock_tab_move_left = memnew(ToolButton); dock_tab_move_left->set_icon(theme->get_icon("Back", "EditorIcons")); dock_tab_move_left->set_focus_mode(Control::FOCUS_NONE); - dock_tab_move_left->connect("pressed", this, "_dock_move_left"); + dock_tab_move_left->connect_compat("pressed", this, "_dock_move_left"); dock_hb->add_child(dock_tab_move_left); Label *dock_label = memnew(Label); @@ -5928,16 +5968,16 @@ EditorNode::EditorNode() { dock_tab_move_right = memnew(ToolButton); dock_tab_move_right->set_icon(theme->get_icon("Forward", "EditorIcons")); dock_tab_move_right->set_focus_mode(Control::FOCUS_NONE); - dock_tab_move_right->connect("pressed", this, "_dock_move_right"); + dock_tab_move_right->connect_compat("pressed", this, "_dock_move_right"); dock_hb->add_child(dock_tab_move_right); dock_vb->add_child(dock_hb); dock_select = memnew(Control); dock_select->set_custom_minimum_size(Size2(128, 64) * EDSCALE); - dock_select->connect("gui_input", this, "_dock_select_input"); - dock_select->connect("draw", this, "_dock_select_draw"); - dock_select->connect("mouse_exited", this, "_dock_popup_exit"); + dock_select->connect_compat("gui_input", this, "_dock_select_input"); + dock_select->connect_compat("draw", this, "_dock_select_draw"); + dock_select->connect_compat("mouse_exited", this, "_dock_popup_exit"); dock_select->set_v_size_flags(Control::SIZE_EXPAND_FILL); dock_vb->add_child(dock_select); @@ -5948,11 +5988,11 @@ EditorNode::EditorNode() { dock_slot[i]->set_custom_minimum_size(Size2(170, 0) * EDSCALE); dock_slot[i]->set_v_size_flags(Control::SIZE_EXPAND_FILL); dock_slot[i]->set_popup(dock_select_popup); - dock_slot[i]->connect("pre_popup_pressed", this, "_dock_pre_popup", varray(i)); + dock_slot[i]->connect_compat("pre_popup_pressed", this, "_dock_pre_popup", varray(i)); dock_slot[i]->set_tab_align(TabContainer::ALIGN_LEFT); dock_slot[i]->set_drag_to_rearrange_enabled(true); dock_slot[i]->set_tabs_rearrange_group(1); - dock_slot[i]->connect("tab_changed", this, "_dock_tab_changed"); + dock_slot[i]->connect_compat("tab_changed", this, "_dock_tab_changed"); dock_slot[i]->set_use_hidden_tabs_for_min_size(true); } @@ -5960,7 +6000,7 @@ EditorNode::EditorNode() { add_child(dock_drag_timer); dock_drag_timer->set_wait_time(0.5); dock_drag_timer->set_one_shot(true); - dock_drag_timer->connect("timeout", this, "_save_docks"); + dock_drag_timer->connect_compat("timeout", this, "_save_docks"); top_split = memnew(VSplitContainer); center_split->add_child(top_split); @@ -5993,21 +6033,21 @@ EditorNode::EditorNode() { scene_tabs->set_tab_close_display_policy((bool(EDITOR_DEF("interface/scene_tabs/always_show_close_button", false)) ? Tabs::CLOSE_BUTTON_SHOW_ALWAYS : Tabs::CLOSE_BUTTON_SHOW_ACTIVE_ONLY)); scene_tabs->set_min_width(int(EDITOR_DEF("interface/scene_tabs/minimum_width", 50)) * EDSCALE); scene_tabs->set_drag_to_rearrange_enabled(true); - scene_tabs->connect("tab_changed", this, "_scene_tab_changed"); - scene_tabs->connect("right_button_pressed", this, "_scene_tab_script_edited"); - scene_tabs->connect("tab_close", this, "_scene_tab_closed", varray(SCENE_TAB_CLOSE)); - scene_tabs->connect("tab_hover", this, "_scene_tab_hover"); - scene_tabs->connect("mouse_exited", this, "_scene_tab_exit"); - scene_tabs->connect("gui_input", this, "_scene_tab_input"); - scene_tabs->connect("reposition_active_tab_request", this, "_reposition_active_tab"); - scene_tabs->connect("resized", this, "_update_scene_tabs"); + scene_tabs->connect_compat("tab_changed", this, "_scene_tab_changed"); + scene_tabs->connect_compat("right_button_pressed", this, "_scene_tab_script_edited"); + scene_tabs->connect_compat("tab_close", this, "_scene_tab_closed", varray(SCENE_TAB_CLOSE)); + scene_tabs->connect_compat("tab_hover", this, "_scene_tab_hover"); + scene_tabs->connect_compat("mouse_exited", this, "_scene_tab_exit"); + scene_tabs->connect_compat("gui_input", this, "_scene_tab_input"); + scene_tabs->connect_compat("reposition_active_tab_request", this, "_reposition_active_tab"); + scene_tabs->connect_compat("resized", this, "_update_scene_tabs"); tabbar_container = memnew(HBoxContainer); scene_tabs->set_h_size_flags(Control::SIZE_EXPAND_FILL); scene_tabs_context_menu = memnew(PopupMenu); tabbar_container->add_child(scene_tabs_context_menu); - scene_tabs_context_menu->connect("id_pressed", this, "_menu_option"); + scene_tabs_context_menu->connect_compat("id_pressed", this, "_menu_option"); scene_tabs_context_menu->set_hide_on_window_lose_focus(true); srt->add_child(tabbar_container); @@ -6019,7 +6059,7 @@ EditorNode::EditorNode() { distraction_free->set_shortcut(ED_SHORTCUT("editor/distraction_free_mode", TTR("Distraction Free Mode"), KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_F11)); #endif distraction_free->set_tooltip(TTR("Toggle distraction-free mode.")); - distraction_free->connect("pressed", this, "_toggle_distraction_free_mode"); + distraction_free->connect_compat("pressed", this, "_toggle_distraction_free_mode"); distraction_free->set_icon(gui_base->get_icon("DistractionFree", "EditorIcons")); distraction_free->set_toggle_mode(true); @@ -6029,7 +6069,7 @@ EditorNode::EditorNode() { scene_tab_add->set_tooltip(TTR("Add a new scene.")); scene_tab_add->set_icon(gui_base->get_icon("Add", "EditorIcons")); scene_tab_add->add_color_override("icon_color_normal", Color(0.6f, 0.6f, 0.6f, 0.8f)); - scene_tab_add->connect("pressed", this, "_menu_option", make_binds(FILE_NEW_SCENE)); + scene_tab_add->connect_compat("pressed", this, "_menu_option", make_binds(FILE_NEW_SCENE)); scene_root_parent = memnew(PanelContainer); scene_root_parent->set_custom_minimum_size(Size2(0, 80) * EDSCALE); @@ -6040,7 +6080,6 @@ EditorNode::EditorNode() { scene_root = memnew(Viewport); //scene_root->set_usage(Viewport::USAGE_2D); canvas BG mode prevents usage of this as 2D - scene_root->set_disable_3d(true); VisualServer::get_singleton()->viewport_set_hide_scenario(scene_root->get_viewport_rid(), true); scene_root->set_disable_input(true); @@ -6065,14 +6104,14 @@ EditorNode::EditorNode() { prev_scene->set_icon(gui_base->get_icon("PrevScene", "EditorIcons")); prev_scene->set_tooltip(TTR("Go to previously opened scene.")); prev_scene->set_disabled(true); - prev_scene->connect("pressed", this, "_menu_option", make_binds(FILE_OPEN_PREV)); + prev_scene->connect_compat("pressed", this, "_menu_option", make_binds(FILE_OPEN_PREV)); gui_base->add_child(prev_scene); prev_scene->set_position(Point2(3, 24)); prev_scene->hide(); accept = memnew(AcceptDialog); gui_base->add_child(accept); - accept->connect("confirmed", this, "_menu_confirm_current"); + accept->connect_compat("confirmed", this, "_menu_confirm_current"); project_export = memnew(ProjectExportDialog); gui_base->add_child(project_export); @@ -6099,12 +6138,12 @@ EditorNode::EditorNode() { gui_base->add_child(feature_profile_manager); about = memnew(EditorAbout); gui_base->add_child(about); - feature_profile_manager->connect("current_feature_profile_changed", this, "_feature_profile_changed"); + feature_profile_manager->connect_compat("current_feature_profile_changed", this, "_feature_profile_changed"); warning = memnew(AcceptDialog); warning->add_button(TTR("Copy Text"), true, "copy"); gui_base->add_child(warning); - warning->connect("custom_action", this, "_copy_warning"); + warning->connect_compat("custom_action", this, "_copy_warning"); ED_SHORTCUT("editor/next_tab", TTR("Next tab"), KEY_MASK_CMD + KEY_TAB); ED_SHORTCUT("editor/prev_tab", TTR("Previous tab"), KEY_MASK_CMD + KEY_MASK_SHIFT + KEY_TAB); @@ -6138,7 +6177,7 @@ EditorNode::EditorNode() { p->add_submenu_item(TTR("Convert To..."), "Export"); pm_export->add_shortcut(ED_SHORTCUT("editor/convert_to_MeshLibrary", TTR("MeshLibrary...")), FILE_EXPORT_MESH_LIBRARY); pm_export->add_shortcut(ED_SHORTCUT("editor/convert_to_TileSet", TTR("TileSet...")), FILE_EXPORT_TILESET); - pm_export->connect("id_pressed", this, "_menu_option"); + pm_export->connect_compat("id_pressed", this, "_menu_option"); p->add_separator(); p->add_shortcut(ED_SHORTCUT("editor/undo", TTR("Undo"), KEY_MASK_CMD + KEY_Z), EDIT_UNDO, true); @@ -6151,7 +6190,7 @@ EditorNode::EditorNode() { recent_scenes = memnew(PopupMenu); recent_scenes->set_name("RecentScenes"); p->add_child(recent_scenes); - recent_scenes->connect("id_pressed", this, "_open_recent_scene"); + recent_scenes->connect_compat("id_pressed", this, "_open_recent_scene"); p->add_separator(); p->add_shortcut(ED_SHORTCUT("editor/file_quit", TTR("Quit"), KEY_MASK_CMD + KEY_Q), FILE_QUIT, true); @@ -6167,11 +6206,11 @@ EditorNode::EditorNode() { p = project_menu->get_popup(); p->set_hide_on_window_lose_focus(true); p->add_shortcut(ED_SHORTCUT("editor/project_settings", TTR("Project Settings...")), RUN_SETTINGS); - p->connect("id_pressed", this, "_menu_option"); + p->connect_compat("id_pressed", this, "_menu_option"); vcs_actions_menu = VersionControlEditorPlugin::get_singleton()->get_version_control_actions_panel(); vcs_actions_menu->set_name("Version Control"); - vcs_actions_menu->connect("index_pressed", this, "_version_control_menu_option"); + vcs_actions_menu->connect_compat("index_pressed", this, "_version_control_menu_option"); p->add_separator(); p->add_child(vcs_actions_menu); p->add_submenu_item(TTR("Version Control"), "Version Control"); @@ -6184,12 +6223,12 @@ EditorNode::EditorNode() { p->add_item(TTR("Open Project Data Folder"), RUN_PROJECT_DATA_FOLDER); plugin_config_dialog = memnew(PluginConfigDialog); - plugin_config_dialog->connect("plugin_ready", this, "_on_plugin_ready"); + plugin_config_dialog->connect_compat("plugin_ready", this, "_on_plugin_ready"); gui_base->add_child(plugin_config_dialog); tool_menu = memnew(PopupMenu); tool_menu->set_name("Tools"); - tool_menu->connect("index_pressed", this, "_tool_menu_option"); + tool_menu->connect_compat("index_pressed", this, "_tool_menu_option"); p->add_child(tool_menu); p->add_submenu_item(TTR("Tools"), "Tools"); tool_menu->add_item(TTR("Orphan Resource Explorer..."), TOOLS_ORPHAN_RESOURCES); @@ -6233,7 +6272,14 @@ EditorNode::EditorNode() { p->add_check_shortcut(ED_SHORTCUT("editor/sync_script_changes", TTR("Sync Script Changes")), RUN_RELOAD_SCRIPTS); p->set_item_tooltip(p->get_item_count() - 1, TTR("When this option is turned on, any script that is saved will be reloaded on the running game.\nWhen used remotely on a device, this is more efficient with network filesystem.")); p->set_item_checked(p->get_item_count() - 1, true); - p->connect("id_pressed", this, "_menu_option"); + + // Multi-instance, start/stop + p->add_separator(); + p->add_radio_check_item(TTR("Debug 1 instance"), RUN_DEBUG_ONE); + p->add_radio_check_item(TTR("Debug 2 instances"), RUN_DEBUG_TWO); + p->set_item_checked(p->get_item_index(RUN_DEBUG_ONE), true); + + p->connect_compat("id_pressed", this, "_menu_option"); menu_hb->add_spacer(); @@ -6252,7 +6298,7 @@ EditorNode::EditorNode() { editor_layouts = memnew(PopupMenu); editor_layouts->set_name("Layouts"); p->add_child(editor_layouts); - editor_layouts->connect("id_pressed", this, "_layout_menu_option"); + editor_layouts->connect_compat("id_pressed", this, "_layout_menu_option"); p->add_submenu_item(TTR("Editor Layout"), "Layouts"); p->add_separator(); #ifdef OSX_ENABLED @@ -6294,7 +6340,7 @@ EditorNode::EditorNode() { p = help_menu->get_popup(); p->set_hide_on_window_lose_focus(true); - p->connect("id_pressed", this, "_menu_option"); + p->connect_compat("id_pressed", this, "_menu_option"); p->add_icon_shortcut(gui_base->get_icon("HelpSearch", "EditorIcons"), ED_SHORTCUT("editor/editor_help", TTR("Search"), KEY_MASK_SHIFT | KEY_F1), HELP_SEARCH); p->add_separator(); p->add_icon_shortcut(gui_base->get_icon("Instance", "EditorIcons"), ED_SHORTCUT("editor/online_docs", TTR("Online Docs")), HELP_DOCS); @@ -6312,7 +6358,7 @@ EditorNode::EditorNode() { play_button->set_toggle_mode(true); play_button->set_icon(gui_base->get_icon("MainPlay", "EditorIcons")); play_button->set_focus_mode(Control::FOCUS_NONE); - play_button->connect("pressed", this, "_menu_option", make_binds(RUN_PLAY)); + play_button->connect_compat("pressed", this, "_menu_option", make_binds(RUN_PLAY)); play_button->set_tooltip(TTR("Play the project.")); #ifdef OSX_ENABLED play_button->set_shortcut(ED_SHORTCUT("editor/play", TTR("Play"), KEY_MASK_CMD | KEY_B)); @@ -6337,7 +6383,7 @@ EditorNode::EditorNode() { play_hb->add_child(stop_button); stop_button->set_focus_mode(Control::FOCUS_NONE); stop_button->set_icon(gui_base->get_icon("Stop", "EditorIcons")); - stop_button->connect("pressed", this, "_menu_option", make_binds(RUN_STOP)); + stop_button->connect_compat("pressed", this, "_menu_option", make_binds(RUN_STOP)); stop_button->set_tooltip(TTR("Stop the scene.")); stop_button->set_disabled(true); #ifdef OSX_ENABLED @@ -6348,14 +6394,14 @@ EditorNode::EditorNode() { run_native = memnew(EditorRunNative); play_hb->add_child(run_native); - run_native->connect("native_run", this, "_menu_option", varray(RUN_PLAY_NATIVE)); + run_native->connect_compat("native_run", this, "_menu_option", varray(RUN_PLAY_NATIVE)); play_scene_button = memnew(ToolButton); play_hb->add_child(play_scene_button); play_scene_button->set_toggle_mode(true); play_scene_button->set_focus_mode(Control::FOCUS_NONE); play_scene_button->set_icon(gui_base->get_icon("PlayScene", "EditorIcons")); - play_scene_button->connect("pressed", this, "_menu_option", make_binds(RUN_PLAY_SCENE)); + play_scene_button->connect_compat("pressed", this, "_menu_option", make_binds(RUN_PLAY_SCENE)); play_scene_button->set_tooltip(TTR("Play the edited scene.")); #ifdef OSX_ENABLED play_scene_button->set_shortcut(ED_SHORTCUT("editor/play_scene", TTR("Play Scene"), KEY_MASK_CMD | KEY_R)); @@ -6368,7 +6414,7 @@ EditorNode::EditorNode() { play_custom_scene_button->set_toggle_mode(true); play_custom_scene_button->set_focus_mode(Control::FOCUS_NONE); play_custom_scene_button->set_icon(gui_base->get_icon("PlayCustom", "EditorIcons")); - play_custom_scene_button->connect("pressed", this, "_menu_option", make_binds(RUN_PLAY_CUSTOM_SCENE)); + play_custom_scene_button->connect_compat("pressed", this, "_menu_option", make_binds(RUN_PLAY_CUSTOM_SCENE)); play_custom_scene_button->set_tooltip(TTR("Play custom scene")); #ifdef OSX_ENABLED play_custom_scene_button->set_shortcut(ED_SHORTCUT("editor/play_custom_scene", TTR("Play Custom Scene"), KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_R)); @@ -6383,8 +6429,10 @@ EditorNode::EditorNode() { video_driver = memnew(OptionButton); video_driver->set_flat(true); video_driver->set_focus_mode(Control::FOCUS_NONE); - video_driver->connect("item_selected", this, "_video_driver_selected"); + video_driver->connect_compat("item_selected", this, "_video_driver_selected"); video_driver->add_font_override("font", gui_base->get_font("bold", "EditorFonts")); + // TODO re-enable when GLES2 is ported + video_driver->set_disabled(true); right_menu_hb->add_child(video_driver); String video_drivers = ProjectSettings::get_singleton()->get_custom_property_info()["rendering/quality/driver/driver_name"].hint_string; @@ -6406,7 +6454,7 @@ EditorNode::EditorNode() { video_restart_dialog = memnew(ConfirmationDialog); video_restart_dialog->set_text(TTR("Changing the video driver requires restarting the editor.")); video_restart_dialog->get_ok()->set_text(TTR("Save & Restart")); - video_restart_dialog->connect("confirmed", this, "_menu_option", varray(SET_VIDEO_DRIVER_SAVE_AND_RESTART)); + video_restart_dialog->connect_compat("confirmed", this, "_menu_option", varray(SET_VIDEO_DRIVER_SAVE_AND_RESTART)); gui_base->add_child(video_restart_dialog); progress_hb = memnew(BackgroundProgress); @@ -6415,13 +6463,13 @@ EditorNode::EditorNode() { gui_base->add_child(layout_dialog); layout_dialog->set_hide_on_ok(false); layout_dialog->set_size(Size2(225, 270) * EDSCALE); - layout_dialog->connect("name_confirmed", this, "_dialog_action"); + layout_dialog->connect_compat("name_confirmed", this, "_dialog_action"); update_spinner = memnew(MenuButton); update_spinner->set_tooltip(TTR("Spins when the editor window redraws.")); right_menu_hb->add_child(update_spinner); update_spinner->set_icon(gui_base->get_icon("Progress1", "EditorIcons")); - update_spinner->get_popup()->connect("id_pressed", this, "_menu_option"); + update_spinner->get_popup()->connect_compat("id_pressed", this, "_menu_option"); p = update_spinner->get_popup(); p->add_radio_check_item(TTR("Update Continuously"), SETTINGS_UPDATE_CONTINUOUSLY); p->add_radio_check_item(TTR("Update When Changed"), SETTINGS_UPDATE_WHEN_CHANGED); @@ -6437,9 +6485,9 @@ EditorNode::EditorNode() { node_dock = memnew(NodeDock); filesystem_dock = memnew(FileSystemDock(this)); - filesystem_dock->connect("inherit", this, "_inherit_request"); - filesystem_dock->connect("instance", this, "_instance_request"); - filesystem_dock->connect("display_mode_changed", this, "_save_docks"); + filesystem_dock->connect_compat("inherit", this, "_inherit_request"); + filesystem_dock->connect_compat("instance", this, "_instance_request"); + filesystem_dock->connect_compat("display_mode_changed", this, "_save_docks"); // Scene: Top left dock_slot[DOCK_SLOT_LEFT_UR]->add_child(scene_tree_dock); @@ -6525,7 +6573,7 @@ EditorNode::EditorNode() { bottom_panel_hb->add_child(bottom_panel_raise); bottom_panel_raise->hide(); bottom_panel_raise->set_toggle_mode(true); - bottom_panel_raise->connect("toggled", this, "_bottom_panel_raise_toggled"); + bottom_panel_raise->connect_compat("toggled", this, "_bottom_panel_raise_toggled"); log = memnew(EditorLog); ToolButton *output_button = add_bottom_panel_item(TTR("Output"), log); @@ -6533,37 +6581,37 @@ EditorNode::EditorNode() { old_split_ofs = 0; - center_split->connect("resized", this, "_vp_resized"); + center_split->connect_compat("resized", this, "_vp_resized"); orphan_resources = memnew(OrphanResourcesDialog); gui_base->add_child(orphan_resources); confirmation = memnew(ConfirmationDialog); gui_base->add_child(confirmation); - confirmation->connect("confirmed", this, "_menu_confirm_current"); + confirmation->connect_compat("confirmed", this, "_menu_confirm_current"); save_confirmation = memnew(ConfirmationDialog); save_confirmation->add_button(TTR("Don't Save"), OS::get_singleton()->get_swap_ok_cancel(), "discard"); gui_base->add_child(save_confirmation); - save_confirmation->connect("confirmed", this, "_menu_confirm_current"); - save_confirmation->connect("custom_action", this, "_discard_changes"); + save_confirmation->connect_compat("confirmed", this, "_menu_confirm_current"); + save_confirmation->connect_compat("custom_action", this, "_discard_changes"); custom_build_manage_templates = memnew(ConfirmationDialog); custom_build_manage_templates->set_text(TTR("Android build template is missing, please install relevant templates.")); custom_build_manage_templates->get_ok()->set_text(TTR("Manage Templates")); - custom_build_manage_templates->connect("confirmed", this, "_menu_option", varray(SETTINGS_MANAGE_EXPORT_TEMPLATES)); + custom_build_manage_templates->connect_compat("confirmed", this, "_menu_option", varray(SETTINGS_MANAGE_EXPORT_TEMPLATES)); gui_base->add_child(custom_build_manage_templates); install_android_build_template = memnew(ConfirmationDialog); install_android_build_template->set_text(TTR("This will set up your project for custom Android builds by installing the source template to \"res://android/build\".\nYou can then apply modifications and build your own custom APK on export (adding modules, changing the AndroidManifest.xml, etc.).\nNote that in order to make custom builds instead of using pre-built APKs, the \"Use Custom Build\" option should be enabled in the Android export preset.")); install_android_build_template->get_ok()->set_text(TTR("Install")); - install_android_build_template->connect("confirmed", this, "_menu_confirm_current"); + install_android_build_template->connect_compat("confirmed", this, "_menu_confirm_current"); gui_base->add_child(install_android_build_template); remove_android_build_template = memnew(ConfirmationDialog); remove_android_build_template->set_text(TTR("The Android build template is already installed in this project and it won't be overwritten.\nRemove the \"res://android/build\" directory manually before attempting this operation again.")); remove_android_build_template->get_ok()->set_text(TTR("Show in File Manager")); - remove_android_build_template->connect("confirmed", this, "_menu_option", varray(FILE_EXPLORE_ANDROID_BUILD_TEMPLATES)); + remove_android_build_template->connect_compat("confirmed", this, "_menu_option", varray(FILE_EXPLORE_ANDROID_BUILD_TEMPLATES)); gui_base->add_child(remove_android_build_template); file_templates = memnew(EditorFileDialog); @@ -6582,7 +6630,7 @@ EditorNode::EditorNode() { file_export_lib = memnew(EditorFileDialog); file_export_lib->set_title(TTR("Export Library")); file_export_lib->set_mode(EditorFileDialog::MODE_SAVE_FILE); - file_export_lib->connect("file_selected", this, "_dialog_action"); + file_export_lib->connect_compat("file_selected", this, "_dialog_action"); file_export_lib_merge = memnew(CheckBox); file_export_lib_merge->set_text(TTR("Merge With Existing")); file_export_lib_merge->set_pressed(true); @@ -6599,16 +6647,16 @@ EditorNode::EditorNode() { file_script->add_filter("*." + E->get()); } gui_base->add_child(file_script); - file_script->connect("file_selected", this, "_dialog_action"); + file_script->connect_compat("file_selected", this, "_dialog_action"); - file_menu->get_popup()->connect("id_pressed", this, "_menu_option"); - file_menu->connect("about_to_show", this, "_update_file_menu_opened"); - file_menu->get_popup()->connect("popup_hide", this, "_update_file_menu_closed"); + file_menu->get_popup()->connect_compat("id_pressed", this, "_menu_option"); + file_menu->connect_compat("about_to_show", this, "_update_file_menu_opened"); + file_menu->get_popup()->connect_compat("popup_hide", this, "_update_file_menu_closed"); - settings_menu->get_popup()->connect("id_pressed", this, "_menu_option"); + settings_menu->get_popup()->connect_compat("id_pressed", this, "_menu_option"); - file->connect("file_selected", this, "_dialog_action"); - file_templates->connect("file_selected", this, "_dialog_action"); + file->connect_compat("file_selected", this, "_dialog_action"); + file_templates->connect_compat("file_selected", this, "_dialog_action"); preview_gen = memnew(AudioStreamPreviewGenerator); add_child(preview_gen); @@ -6616,6 +6664,7 @@ EditorNode::EditorNode() { file_server = memnew(EditorFileServer); + add_editor_plugin(memnew(DebuggerEditorPlugin(this))); add_editor_plugin(memnew(AnimationPlayerEditorPlugin(this))); add_editor_plugin(memnew(CanvasItemEditorPlugin(this))); add_editor_plugin(memnew(SpatialEditorPlugin(this))); @@ -6666,7 +6715,7 @@ EditorNode::EditorNode() { add_editor_plugin(memnew(TextureRegionEditorPlugin(this))); add_editor_plugin(memnew(Particles2DEditorPlugin(this))); add_editor_plugin(memnew(GIProbeEditorPlugin(this))); - add_editor_plugin(memnew(BakedLightmapEditorPlugin(this))); + // add_editor_plugin(memnew(BakedLightmapEditorPlugin(this))); add_editor_plugin(memnew(Path2DEditorPlugin(this))); add_editor_plugin(memnew(PathEditorPlugin(this))); add_editor_plugin(memnew(Line2DEditorPlugin(this))); @@ -6702,7 +6751,7 @@ EditorNode::EditorNode() { resource_preview->add_preview_generator(Ref<EditorFontPreviewPlugin>(memnew(EditorFontPreviewPlugin))); { - Ref<SpatialMaterialConversionPlugin> spatial_mat_convert; + Ref<StandardMaterial3DConversionPlugin> spatial_mat_convert; spatial_mat_convert.instance(); resource_conversion_plugins.push_back(spatial_mat_convert); @@ -6744,8 +6793,8 @@ EditorNode::EditorNode() { open_imported = memnew(ConfirmationDialog); open_imported->get_ok()->set_text(TTR("Open Anyway")); new_inherited_button = open_imported->add_button(TTR("New Inherited"), !OS::get_singleton()->get_swap_ok_cancel(), "inherit"); - open_imported->connect("confirmed", this, "_open_imported"); - open_imported->connect("custom_action", this, "_inherit_imported"); + open_imported->connect_compat("confirmed", this, "_open_imported"); + open_imported->connect_compat("custom_action", this, "_inherit_imported"); gui_base->add_child(open_imported); saved_version = 1; @@ -6754,11 +6803,11 @@ EditorNode::EditorNode() { quick_open = memnew(EditorQuickOpen); gui_base->add_child(quick_open); - quick_open->connect("quick_open", this, "_quick_opened"); + quick_open->connect_compat("quick_open", this, "_quick_opened"); quick_run = memnew(EditorQuickOpen); gui_base->add_child(quick_run); - quick_run->connect("quick_open", this, "_quick_run"); + quick_run->connect_compat("quick_open", this, "_quick_run"); _update_recent_scenes(); @@ -6780,10 +6829,10 @@ EditorNode::EditorNode() { execute_output_dialog->set_title(""); gui_base->add_child(execute_output_dialog); - EditorFileSystem::get_singleton()->connect("sources_changed", this, "_sources_changed"); - EditorFileSystem::get_singleton()->connect("filesystem_changed", this, "_fs_changed"); - EditorFileSystem::get_singleton()->connect("resources_reimported", this, "_resources_reimported"); - EditorFileSystem::get_singleton()->connect("resources_reload", this, "_resources_changed"); + EditorFileSystem::get_singleton()->connect_compat("sources_changed", this, "_sources_changed"); + EditorFileSystem::get_singleton()->connect_compat("filesystem_changed", this, "_fs_changed"); + EditorFileSystem::get_singleton()->connect_compat("resources_reimported", this, "_resources_reimported"); + EditorFileSystem::get_singleton()->connect_compat("resources_reload", this, "_resources_changed"); _build_icon_type_cache(); @@ -6792,7 +6841,7 @@ EditorNode::EditorNode() { pick_main_scene = memnew(ConfirmationDialog); gui_base->add_child(pick_main_scene); pick_main_scene->get_ok()->set_text(TTR("Select")); - pick_main_scene->connect("confirmed", this, "_menu_option", varray(SETTINGS_PICK_MAIN_SCENE)); + pick_main_scene->connect_compat("confirmed", this, "_menu_option", varray(SETTINGS_PICK_MAIN_SCENE)); for (int i = 0; i < _init_callbacks.size(); i++) _init_callbacks[i](); @@ -6832,7 +6881,7 @@ EditorNode::EditorNode() { screenshot_timer = memnew(Timer); screenshot_timer->set_one_shot(true); screenshot_timer->set_wait_time(settings_menu->get_popup()->get_submenu_popup_delay() + 0.1f); - screenshot_timer->connect("timeout", this, "_request_screenshot"); + screenshot_timer->connect_compat("timeout", this, "_request_screenshot"); add_child(screenshot_timer); screenshot_timer->set_owner(get_owner()); } diff --git a/editor/editor_node.h b/editor/editor_node.h index a5c04d3531..a982b9d85f 100644 --- a/editor/editor_node.h +++ b/editor/editor_node.h @@ -162,6 +162,8 @@ private: RUN_PLAY_NATIVE, RUN_PLAY_CUSTOM_SCENE, RUN_SCENE_SETTINGS, + RUN_DEBUG_ONE, + RUN_DEBUG_TWO, RUN_SETTINGS, RUN_PROJECT_DATA_FOLDER, RUN_PROJECT_MANAGER, @@ -522,13 +524,13 @@ private: Set<FileDialog *> file_dialogs; Set<EditorFileDialog *> editor_file_dialogs; - Map<String, Ref<Texture> > icon_type_cache; + Map<String, Ref<Texture2D> > icon_type_cache; void _build_icon_type_cache(); bool _initializing_addons; Map<String, EditorPlugin *> plugin_addons; - static Ref<Texture> _file_dialog_get_icon(const String &p_path); + static Ref<Texture2D> _file_dialog_get_icon(const String &p_path); static void _file_dialog_register(FileDialog *p_dialog); static void _file_dialog_unregister(FileDialog *p_dialog); static void _editor_file_dialog_register(EditorFileDialog *p_dialog); @@ -582,7 +584,7 @@ private: void _scene_tab_exit(); void _scene_tab_input(const Ref<InputEvent> &p_input); void _reposition_active_tab(int idx_to); - void _thumbnail_done(const String &p_path, const Ref<Texture> &p_preview, const Ref<Texture> &p_small_preview, const Variant &p_udata); + void _thumbnail_done(const String &p_path, const Ref<Texture2D> &p_preview, const Ref<Texture2D> &p_small_preview, const Variant &p_udata); void _scene_tab_script_edited(int p_tab); Dictionary _get_main_scene_state(); @@ -639,7 +641,7 @@ private: static void _resource_saved(RES p_resource, const String &p_path); static void _resource_loaded(RES p_resource, const String &p_path); - void _resources_changed(const PoolVector<String> &p_resources); + void _resources_changed(const Vector<String> &p_resources); void _feature_profile_changed(); bool _is_class_editor_disabled_by_feature_profile(const StringName &p_class); @@ -764,16 +766,16 @@ public: void set_convert_old_scene(bool p_old) { convert_old = p_old; } - void notify_child_process_exited(); + void notify_all_debug_sessions_exited(); - OS::ProcessID get_child_process_id() const { return editor_run.get_pid(); } - void stop_child_process(); + OS::ProcessID has_child_process(OS::ProcessID p_pid) const { return editor_run.has_child_process(p_pid); } + void stop_child_process(OS::ProcessID p_pid); Ref<Theme> get_editor_theme() const { return theme; } Ref<Script> get_object_custom_type_base(const Object *p_object) const; StringName get_object_custom_type_name(const Object *p_object) const; - Ref<Texture> get_object_icon(const Object *p_object, const String &p_fallback = "Object") const; - Ref<Texture> get_class_icon(const String &p_class, const String &p_fallback = "Object") const; + Ref<Texture2D> get_object_icon(const Object *p_object, const String &p_fallback = "Object") const; + Ref<Texture2D> get_class_icon(const String &p_class, const String &p_fallback = "Object") const; void show_accept(const String &p_text, const String &p_title); void show_warning(const String &p_text, const String &p_title = TTR("Warning!")); diff --git a/editor/editor_path.cpp b/editor/editor_path.cpp index f0d69f98fb..696474d4b1 100644 --- a/editor/editor_path.cpp +++ b/editor/editor_path.cpp @@ -54,7 +54,7 @@ void EditorPath::_add_children_to_popup(Object *p_obj, int p_depth) { if (!obj) continue; - Ref<Texture> icon = EditorNode::get_singleton()->get_object_icon(obj); + Ref<Texture2D> icon = EditorNode::get_singleton()->get_object_icon(obj); int index = get_popup()->get_item_count(); get_popup()->add_icon_item(icon, E->get().name.capitalize(), objects.size()); @@ -90,7 +90,7 @@ void EditorPath::update_path() { if (!obj) continue; - Ref<Texture> icon = EditorNode::get_singleton()->get_object_icon(obj); + Ref<Texture2D> icon = EditorNode::get_singleton()->get_object_icon(obj); if (icon.is_valid()) set_icon(icon); @@ -106,7 +106,7 @@ void EditorPath::update_path() { if (name == "") name = r->get_class(); - } else if (obj->is_class("ScriptEditorDebuggerInspectedObject")) + } else if (obj->is_class("EditorDebuggerRemoteObject")) name = obj->call("get_title"); else if (Object::cast_to<Node>(obj)) name = Object::cast_to<Node>(obj)->get_name(); @@ -152,6 +152,6 @@ EditorPath::EditorPath(EditorHistory *p_history) { history = p_history; set_clip_text(true); set_text_align(ALIGN_LEFT); - get_popup()->connect("about_to_show", this, "_about_to_show"); - get_popup()->connect("id_pressed", this, "_id_pressed"); + get_popup()->connect_compat("about_to_show", this, "_about_to_show"); + get_popup()->connect_compat("id_pressed", this, "_id_pressed"); } diff --git a/editor/editor_plugin.cpp b/editor/editor_plugin.cpp index b5f63dcd43..2135e70de3 100644 --- a/editor/editor_plugin.cpp +++ b/editor/editor_plugin.cpp @@ -51,7 +51,7 @@ Array EditorInterface::_make_mesh_previews(const Array &p_meshes, int p_preview_ meshes.push_back(p_meshes[i]); } - Vector<Ref<Texture> > textures = make_mesh_previews(meshes, NULL, p_preview_size); + Vector<Ref<Texture2D> > textures = make_mesh_previews(meshes, NULL, p_preview_size); Array ret; for (int i = 0; i < textures.size(); i++) { ret.push_back(textures[i]); @@ -60,7 +60,7 @@ Array EditorInterface::_make_mesh_previews(const Array &p_meshes, int p_preview_ return ret; } -Vector<Ref<Texture> > EditorInterface::make_mesh_previews(const Vector<Ref<Mesh> > &p_meshes, Vector<Transform> *p_transforms, int p_preview_size) { +Vector<Ref<Texture2D> > EditorInterface::make_mesh_previews(const Vector<Ref<Mesh> > &p_meshes, Vector<Transform> *p_transforms, int p_preview_size) { int size = p_preview_size; @@ -68,7 +68,6 @@ Vector<Ref<Texture> > EditorInterface::make_mesh_previews(const Vector<Ref<Mesh> RID viewport = VS::get_singleton()->viewport_create(); VS::get_singleton()->viewport_set_update_mode(viewport, VS::VIEWPORT_UPDATE_ALWAYS); - VS::get_singleton()->viewport_set_vflip(viewport, true); VS::get_singleton()->viewport_set_scenario(viewport, scenario); VS::get_singleton()->viewport_set_size(viewport, size, size); VS::get_singleton()->viewport_set_transparent_background(viewport, true); @@ -87,13 +86,13 @@ Vector<Ref<Texture> > EditorInterface::make_mesh_previews(const Vector<Ref<Mesh> EditorProgress ep("mlib", TTR("Creating Mesh Previews"), p_meshes.size()); - Vector<Ref<Texture> > textures; + Vector<Ref<Texture2D> > textures; for (int i = 0; i < p_meshes.size(); i++) { Ref<Mesh> mesh = p_meshes[i]; if (!mesh.is_valid()) { - textures.push_back(Ref<Texture>()); + textures.push_back(Ref<Texture2D>()); continue; } @@ -114,7 +113,7 @@ Vector<Ref<Texture> > EditorInterface::make_mesh_previews(const Vector<Ref<Mesh> AABB rot_aabb = xform.xform(aabb); float m = MAX(rot_aabb.size.x, rot_aabb.size.y) * 0.5; if (m == 0) { - textures.push_back(Ref<Texture>()); + textures.push_back(Ref<Texture2D>()); continue; } xform.origin = -xform.basis.xform(ofs); //-ofs*m; @@ -131,7 +130,7 @@ Vector<Ref<Texture> > EditorInterface::make_mesh_previews(const Vector<Ref<Mesh> ep.step(TTR("Thumbnail..."), i); Main::iteration(); Main::iteration(); - Ref<Image> img = VS::get_singleton()->texture_get_data(viewport_texture); + Ref<Image> img = VS::get_singleton()->texture_2d_get(viewport_texture); ERR_CONTINUE(!img.is_valid() || img->empty()); Ref<ImageTexture> it(memnew(ImageTexture)); it->create_from_image(img); @@ -314,7 +313,7 @@ EditorInterface::EditorInterface() { } /////////////////////////////////////////// -void EditorPlugin::add_custom_type(const String &p_type, const String &p_base, const Ref<Script> &p_script, const Ref<Texture> &p_icon) { +void EditorPlugin::add_custom_type(const String &p_type, const String &p_base, const Ref<Script> &p_script, const Ref<Texture2D> &p_icon) { EditorNode::get_editor_data().add_custom_type(p_type, p_base, p_script, p_icon); } @@ -605,13 +604,13 @@ String EditorPlugin::get_name() const { return String(); } -const Ref<Texture> EditorPlugin::get_icon() const { +const Ref<Texture2D> EditorPlugin::get_icon() const { if (get_script_instance() && get_script_instance()->has_method("get_plugin_icon")) { return get_script_instance()->call("get_plugin_icon"); } - return Ref<Texture>(); + return Ref<Texture2D>(); } bool EditorPlugin::has_main_screen() const { @@ -689,7 +688,7 @@ void EditorPlugin::apply_changes() { void EditorPlugin::get_breakpoints(List<String> *p_breakpoints) { if (get_script_instance() && get_script_instance()->has_method("get_breakpoints")) { - PoolStringArray arr = get_script_instance()->call("get_breakpoints"); + PackedStringArray arr = get_script_instance()->call("get_breakpoints"); for (int i = 0; i < arr.size(); i++) p_breakpoints->push_back(arr[i]); } @@ -744,8 +743,8 @@ void EditorPlugin::remove_scene_import_plugin(const Ref<EditorSceneImporter> &p_ ResourceImporterScene::get_singleton()->remove_importer(p_importer); } -int find(const PoolStringArray &a, const String &v) { - PoolStringArray::Read r = a.read(); +int find(const PackedStringArray &a, const String &v) { + const String *r = a.ptr(); for (int j = 0; j < a.size(); ++j) { if (r[j] == v) { return j; @@ -873,7 +872,7 @@ void EditorPlugin::_bind_methods() { ClassDB::add_virtual_method(get_class_static(), MethodInfo("clear")); ClassDB::add_virtual_method(get_class_static(), MethodInfo("save_external_data")); ClassDB::add_virtual_method(get_class_static(), MethodInfo("apply_changes")); - ClassDB::add_virtual_method(get_class_static(), MethodInfo(Variant::POOL_STRING_ARRAY, "get_breakpoints")); + ClassDB::add_virtual_method(get_class_static(), MethodInfo(Variant::PACKED_STRING_ARRAY, "get_breakpoints")); ClassDB::add_virtual_method(get_class_static(), MethodInfo("set_window_layout", PropertyInfo(Variant::OBJECT, "layout", PROPERTY_HINT_RESOURCE_TYPE, "ConfigFile"))); ClassDB::add_virtual_method(get_class_static(), MethodInfo("get_window_layout", PropertyInfo(Variant::OBJECT, "layout", PROPERTY_HINT_RESOURCE_TYPE, "ConfigFile"))); ClassDB::add_virtual_method(get_class_static(), MethodInfo(Variant::BOOL, "build")); diff --git a/editor/editor_plugin.h b/editor/editor_plugin.h index 1a78b72ade..dee63e4322 100644 --- a/editor/editor_plugin.h +++ b/editor/editor_plugin.h @@ -98,7 +98,7 @@ public: Error save_scene(); void save_scene_as(const String &p_scene, bool p_with_preview = true); - Vector<Ref<Texture> > make_mesh_previews(const Vector<Ref<Mesh> > &p_meshes, Vector<Transform> *p_transforms, int p_preview_size); + Vector<Ref<Texture2D> > make_mesh_previews(const Vector<Ref<Mesh> > &p_meshes, Vector<Transform> *p_transforms, int p_preview_size); void set_main_screen_editor(const String &p_name); void set_distraction_free_mode(bool p_enter); @@ -123,7 +123,7 @@ protected: static void _bind_methods(); UndoRedo &get_undo_redo() { return *undo_redo; } - void add_custom_type(const String &p_type, const String &p_base, const Ref<Script> &p_script, const Ref<Texture> &p_icon); + void add_custom_type(const String &p_type, const String &p_base, const Ref<Script> &p_script, const Ref<Texture2D> &p_icon); void remove_custom_type(const String &p_type); public: @@ -187,7 +187,7 @@ public: virtual void forward_spatial_force_draw_over_viewport(Control *p_overlay); virtual String get_name() const; - virtual const Ref<Texture> get_icon() const; + virtual const Ref<Texture2D> get_icon() const; virtual bool has_main_screen() const; virtual void make_visible(bool p_visible); virtual void selected_notify() {} //notify that it was raised by the user, not the editor diff --git a/editor/editor_plugin_settings.cpp b/editor/editor_plugin_settings.cpp index 16decf5c04..c499e52f79 100644 --- a/editor/editor_plugin_settings.cpp +++ b/editor/editor_plugin_settings.cpp @@ -43,8 +43,8 @@ void EditorPluginSettings::_notification(int p_what) { if (p_what == MainLoop::NOTIFICATION_WM_FOCUS_IN) { update_plugins(); } else if (p_what == Node::NOTIFICATION_READY) { - plugin_config_dialog->connect("plugin_ready", EditorNode::get_singleton(), "_on_plugin_ready"); - plugin_list->connect("button_pressed", this, "_cell_button_pressed"); + plugin_config_dialog->connect_compat("plugin_ready", EditorNode::get_singleton(), "_on_plugin_ready"); + plugin_list->connect_compat("button_pressed", this, "_cell_button_pressed"); } } @@ -219,10 +219,10 @@ EditorPluginSettings::EditorPluginSettings() { title_hb->add_child(memnew(Label(TTR("Installed Plugins:")))); title_hb->add_spacer(); create_plugin = memnew(Button(TTR("Create"))); - create_plugin->connect("pressed", this, "_create_clicked"); + create_plugin->connect_compat("pressed", this, "_create_clicked"); title_hb->add_child(create_plugin); update_list = memnew(Button(TTR("Update"))); - update_list->connect("pressed", this, "update_plugins"); + update_list->connect_compat("pressed", this, "update_plugins"); title_hb->add_child(update_list); add_child(title_hb); @@ -245,7 +245,7 @@ EditorPluginSettings::EditorPluginSettings() { plugin_list->set_column_min_width(3, 80 * EDSCALE); plugin_list->set_column_min_width(4, 40 * EDSCALE); plugin_list->set_hide_root(true); - plugin_list->connect("item_edited", this, "_plugin_activity_changed"); + plugin_list->connect_compat("item_edited", this, "_plugin_activity_changed"); VBoxContainer *mc = memnew(VBoxContainer); mc->add_child(plugin_list); diff --git a/editor/editor_profiler.cpp b/editor/editor_profiler.cpp index e5a9c4d699..dd784c0980 100644 --- a/editor/editor_profiler.cpp +++ b/editor/editor_profiler.cpp @@ -175,7 +175,7 @@ void EditorProfiler::_update_plot() { graph_image.resize(desired_len); } - PoolVector<uint8_t>::Write wr = graph_image.write(); + uint8_t *wr = graph_image.ptrw(); const Color background_color = get_color("dark_color_2", "Editor"); // Clear the previous frame and set the background color. @@ -342,8 +342,6 @@ void EditorProfiler::_update_plot() { } } - wr.release(); - Ref<Image> img; img.instance(); img->create(w, h, 0, Image::FORMAT_RGBA8, graph_image); @@ -353,10 +351,10 @@ void EditorProfiler::_update_plot() { if (graph_texture.is_null()) { graph_texture.instance(); } - graph_texture->create(img->get_width(), img->get_height(), img->get_format(), Texture::FLAG_VIDEO_SURFACE); + graph_texture->create_from_image(img); } - graph_texture->set_data(img); + graph_texture->update(img, true); graph->set_texture(graph_texture); graph->update(); @@ -688,12 +686,12 @@ EditorProfiler::EditorProfiler() { activate = memnew(Button); activate->set_toggle_mode(true); activate->set_text(TTR("Start")); - activate->connect("pressed", this, "_activate_pressed"); + activate->connect_compat("pressed", this, "_activate_pressed"); hb->add_child(activate); clear_button = memnew(Button); clear_button->set_text(TTR("Clear")); - clear_button->connect("pressed", this, "_clear_pressed"); + clear_button->connect_compat("pressed", this, "_clear_pressed"); hb->add_child(clear_button); hb->add_child(memnew(Label(TTR("Measure:")))); @@ -703,7 +701,7 @@ EditorProfiler::EditorProfiler() { display_mode->add_item(TTR("Average Time (sec)")); display_mode->add_item(TTR("Frame %")); display_mode->add_item(TTR("Physics Frame %")); - display_mode->connect("item_selected", this, "_combo_changed"); + display_mode->connect_compat("item_selected", this, "_combo_changed"); hb->add_child(display_mode); @@ -712,7 +710,7 @@ EditorProfiler::EditorProfiler() { display_time = memnew(OptionButton); display_time->add_item(TTR("Inclusive")); display_time->add_item(TTR("Self")); - display_time->connect("item_selected", this, "_combo_changed"); + display_time->connect_compat("item_selected", this, "_combo_changed"); hb->add_child(display_time); @@ -723,7 +721,7 @@ EditorProfiler::EditorProfiler() { cursor_metric_edit = memnew(SpinBox); cursor_metric_edit->set_h_size_flags(SIZE_FILL); hb->add_child(cursor_metric_edit); - cursor_metric_edit->connect("value_changed", this, "_cursor_metric_changed"); + cursor_metric_edit->connect_compat("value_changed", this, "_cursor_metric_changed"); hb->add_constant_override("separation", 8 * EDSCALE); @@ -747,14 +745,14 @@ EditorProfiler::EditorProfiler() { variables->set_column_title(2, TTR("Calls")); variables->set_column_expand(2, false); variables->set_column_min_width(2, 60 * EDSCALE); - variables->connect("item_edited", this, "_item_edited"); + variables->connect_compat("item_edited", this, "_item_edited"); graph = memnew(TextureRect); graph->set_expand(true); graph->set_mouse_filter(MOUSE_FILTER_STOP); - graph->connect("draw", this, "_graph_tex_draw"); - graph->connect("gui_input", this, "_graph_tex_input"); - graph->connect("mouse_exited", this, "_graph_tex_mouse_exit"); + graph->connect_compat("draw", this, "_graph_tex_draw"); + graph->connect_compat("gui_input", this, "_graph_tex_input"); + graph->connect_compat("mouse_exited", this, "_graph_tex_mouse_exit"); h_split->add_child(graph); graph->set_h_size_flags(SIZE_EXPAND_FILL); @@ -770,13 +768,13 @@ EditorProfiler::EditorProfiler() { frame_delay->set_wait_time(0.1); frame_delay->set_one_shot(true); add_child(frame_delay); - frame_delay->connect("timeout", this, "_update_frame"); + frame_delay->connect_compat("timeout", this, "_update_frame"); plot_delay = memnew(Timer); plot_delay->set_wait_time(0.1); plot_delay->set_one_shot(true); add_child(plot_delay); - plot_delay->connect("timeout", this, "_update_plot"); + plot_delay->connect_compat("timeout", this, "_update_plot"); plot_sigs.insert("physics_frame_time"); plot_sigs.insert("category_frame_time"); diff --git a/editor/editor_profiler.h b/editor/editor_profiler.h index f8accdf6d2..0a442ddd5c 100644 --- a/editor/editor_profiler.h +++ b/editor/editor_profiler.h @@ -103,7 +103,7 @@ private: Button *clear_button; TextureRect *graph; Ref<ImageTexture> graph_texture; - PoolVector<uint8_t> graph_image; + Vector<uint8_t> graph_image; Tree *variables; HSplitContainer *h_split; diff --git a/editor/editor_properties.cpp b/editor/editor_properties.cpp index c134786b89..b18c6fc59f 100644 --- a/editor/editor_properties.cpp +++ b/editor/editor_properties.cpp @@ -64,7 +64,11 @@ void EditorPropertyText::_text_changed(const String &p_string) { if (updating) return; - emit_changed(get_edited_property(), p_string, "", true); + if (string_name) { + emit_changed(get_edited_property(), StringName(p_string), "", true); + } else { + emit_changed(get_edited_property(), p_string, "", true); + } } void EditorPropertyText::update_property() { @@ -75,6 +79,9 @@ void EditorPropertyText::update_property() { updating = false; } +void EditorPropertyText::set_string_name(bool p_enabled) { + string_name = p_enabled; +} void EditorPropertyText::set_placeholder(const String &p_string) { text->set_placeholder(p_string); } @@ -89,9 +96,10 @@ EditorPropertyText::EditorPropertyText() { text = memnew(LineEdit); add_child(text); add_focusable(text); - text->connect("text_changed", this, "_text_changed"); - text->connect("text_entered", this, "_text_entered"); + text->connect_compat("text_changed", this, "_text_changed"); + text->connect_compat("text_entered", this, "_text_entered"); + string_name = false; updating = false; } @@ -110,7 +118,7 @@ void EditorPropertyMultilineText::_open_big_text() { if (!big_text_dialog) { big_text = memnew(TextEdit); - big_text->connect("text_changed", this, "_big_text_changed"); + big_text->connect_compat("text_changed", this, "_big_text_changed"); big_text->set_wrap_enabled(true); big_text_dialog = memnew(AcceptDialog); big_text_dialog->add_child(big_text); @@ -135,7 +143,7 @@ void EditorPropertyMultilineText::_notification(int p_what) { switch (p_what) { case NOTIFICATION_THEME_CHANGED: case NOTIFICATION_ENTER_TREE: { - Ref<Texture> df = get_icon("DistractionFree", "EditorIcons"); + Ref<Texture2D> df = get_icon("DistractionFree", "EditorIcons"); open_big_text->set_icon(df); Ref<Font> font = get_font("font", "Label"); text->set_custom_minimum_size(Vector2(0, font->get_height() * 6)); @@ -156,13 +164,13 @@ EditorPropertyMultilineText::EditorPropertyMultilineText() { add_child(hb); set_bottom_editor(hb); text = memnew(TextEdit); - text->connect("text_changed", this, "_text_changed"); + text->connect_compat("text_changed", this, "_text_changed"); text->set_wrap_enabled(true); add_focusable(text); hb->add_child(text); text->set_h_size_flags(SIZE_EXPAND_FILL); open_big_text = memnew(ToolButton); - open_big_text->connect("pressed", this, "_open_big_text"); + open_big_text->connect_compat("pressed", this, "_open_big_text"); hb->add_child(open_big_text); big_text_dialog = NULL; big_text = NULL; @@ -172,7 +180,12 @@ EditorPropertyMultilineText::EditorPropertyMultilineText() { void EditorPropertyTextEnum::_option_selected(int p_which) { - emit_changed(get_edited_property(), options->get_item_text(p_which)); + if (string_name) { + + emit_changed(get_edited_property(), StringName(options->get_item_text(p_which))); + } else { + emit_changed(get_edited_property(), options->get_item_text(p_which)); + } } void EditorPropertyTextEnum::update_property() { @@ -187,10 +200,11 @@ void EditorPropertyTextEnum::update_property() { } } -void EditorPropertyTextEnum::setup(const Vector<String> &p_options) { +void EditorPropertyTextEnum::setup(const Vector<String> &p_options, bool p_string_name) { for (int i = 0; i < p_options.size(); i++) { options->add_item(p_options[i], i); } + string_name = p_string_name; } void EditorPropertyTextEnum::_bind_methods() { @@ -202,10 +216,11 @@ EditorPropertyTextEnum::EditorPropertyTextEnum() { options = memnew(OptionButton); options->set_clip_text(true); options->set_flat(true); + string_name = false; add_child(options); add_focusable(options); - options->connect("item_selected", this, "_option_selected"); + options->connect_compat("item_selected", this, "_option_selected"); } ///////////////////// PATH ///////////////////////// @@ -218,8 +233,8 @@ void EditorPropertyPath::_path_pressed() { if (!dialog) { dialog = memnew(EditorFileDialog); - dialog->connect("file_selected", this, "_path_selected"); - dialog->connect("dir_selected", this, "_path_selected"); + dialog->connect_compat("file_selected", this, "_path_selected"); + dialog->connect_compat("dir_selected", this, "_path_selected"); add_child(dialog); } @@ -293,8 +308,8 @@ EditorPropertyPath::EditorPropertyPath() { add_child(path_hb); path = memnew(LineEdit); path_hb->add_child(path); - path->connect("text_entered", this, "_path_selected"); - path->connect("focus_exited", this, "_path_focus_exited"); + path->connect_compat("text_entered", this, "_path_selected"); + path->connect_compat("focus_exited", this, "_path_focus_exited"); path->set_h_size_flags(SIZE_EXPAND_FILL); path_edit = memnew(Button); @@ -302,7 +317,7 @@ EditorPropertyPath::EditorPropertyPath() { path_hb->add_child(path_edit); add_focusable(path); dialog = NULL; - path_edit->connect("pressed", this, "_path_pressed"); + path_edit->connect_compat("pressed", this, "_path_pressed"); folder = false; global = false; save_mode = false; @@ -346,10 +361,10 @@ EditorPropertyClassName::EditorPropertyClassName() { add_child(property); add_focusable(property); property->set_text(selected_type); - property->connect("pressed", this, "_property_selected"); + property->connect_compat("pressed", this, "_property_selected"); dialog = memnew(CreateDialog); dialog->set_base_type(base_type); - dialog->connect("create", this, "_dialog_created"); + dialog->connect_compat("create", this, "_dialog_created"); add_child(dialog); } @@ -365,7 +380,7 @@ void EditorPropertyMember::_property_select() { if (!selector) { selector = memnew(PropertySelector); - selector->connect("selected", this, "_property_selected"); + selector->connect_compat("selected", this, "_property_selected"); add_child(selector); } @@ -388,13 +403,13 @@ void EditorPropertyMember::_property_select() { } else if (hint == MEMBER_METHOD_OF_INSTANCE) { - Object *instance = ObjectDB::get_instance(hint_text.to_int64()); + Object *instance = ObjectDB::get_instance(ObjectID(hint_text.to_int64())); if (instance) selector->select_method_from_instance(instance, current); } else if (hint == MEMBER_METHOD_OF_SCRIPT) { - Object *obj = ObjectDB::get_instance(hint_text.to_int64()); + Object *obj = ObjectDB::get_instance(ObjectID(hint_text.to_int64())); if (Object::cast_to<Script>(obj)) { selector->select_method_from_script(Object::cast_to<Script>(obj), current); } @@ -420,13 +435,13 @@ void EditorPropertyMember::_property_select() { } else if (hint == MEMBER_PROPERTY_OF_INSTANCE) { - Object *instance = ObjectDB::get_instance(hint_text.to_int64()); + Object *instance = ObjectDB::get_instance(ObjectID(hint_text.to_int64())); if (instance) selector->select_property_from_instance(instance, current); } else if (hint == MEMBER_PROPERTY_OF_SCRIPT) { - Object *obj = ObjectDB::get_instance(hint_text.to_int64()); + Object *obj = ObjectDB::get_instance(ObjectID(hint_text.to_int64())); if (Object::cast_to<Script>(obj)) { selector->select_property_from_script(Object::cast_to<Script>(obj), current); } @@ -455,7 +470,7 @@ EditorPropertyMember::EditorPropertyMember() { property->set_clip_text(true); add_child(property); add_focusable(property); - property->connect("pressed", this, "_property_select"); + property->connect_compat("pressed", this, "_property_select"); } ///////////////////// CHECK ///////////////////////// @@ -480,7 +495,7 @@ EditorPropertyCheck::EditorPropertyCheck() { checkbox->set_text(TTR("On")); add_child(checkbox); add_focusable(checkbox); - checkbox->connect("pressed", this, "_checkbox_pressed"); + checkbox->connect_compat("pressed", this, "_checkbox_pressed"); } ///////////////////// ENUM ///////////////////////// @@ -531,7 +546,7 @@ EditorPropertyEnum::EditorPropertyEnum() { options->set_flat(true); add_child(options); add_focusable(options); - options->connect("item_selected", this, "_option_selected"); + options->connect_compat("item_selected", this, "_option_selected"); } ///////////////////// FLAGS ///////////////////////// @@ -576,7 +591,7 @@ void EditorPropertyFlags::setup(const Vector<String> &p_options) { CheckBox *cb = memnew(CheckBox); cb->set_text(option); cb->set_clip_text(true); - cb->connect("pressed", this, "_flag_toggled"); + cb->connect_compat("pressed", this, "_flag_toggled"); add_focusable(cb); vbox->add_child(cb); flags.push_back(cb); @@ -787,20 +802,20 @@ EditorPropertyLayers::EditorPropertyLayers() { HBoxContainer *hb = memnew(HBoxContainer); add_child(hb); grid = memnew(EditorPropertyLayersGrid); - grid->connect("flag_changed", this, "_grid_changed"); + grid->connect_compat("flag_changed", this, "_grid_changed"); grid->set_h_size_flags(SIZE_EXPAND_FILL); hb->add_child(grid); button = memnew(Button); button->set_toggle_mode(true); button->set_text(".."); - button->connect("pressed", this, "_button_pressed"); + button->connect_compat("pressed", this, "_button_pressed"); hb->add_child(button); set_bottom_editor(hb); layers = memnew(PopupMenu); add_child(layers); layers->set_hide_on_checkable_item_selection(false); - layers->connect("id_pressed", this, "_menu_pressed"); - layers->connect("popup_hide", button, "set_pressed", varray(false)); + layers->connect_compat("id_pressed", this, "_menu_pressed"); + layers->connect_compat("popup_hide", button, "set_pressed", varray(false)); } ///////////////////// INT ///////////////////////// @@ -841,7 +856,7 @@ EditorPropertyInteger::EditorPropertyInteger() { spin->set_flat(true); add_child(spin); add_focusable(spin); - spin->connect("value_changed", this, "_value_changed"); + spin->connect_compat("value_changed", this, "_value_changed"); setting = false; } @@ -858,14 +873,14 @@ void EditorPropertyObjectID::update_property() { type = "Object"; ObjectID id = get_edited_object()->get(get_edited_property()); - if (id != 0) { + if (id.is_valid()) { edit->set_text(type + " ID: " + itos(id)); edit->set_disabled(false); edit->set_icon(EditorNode::get_singleton()->get_class_icon(type)); } else { edit->set_text(TTR("[Empty]")); edit->set_disabled(true); - edit->set_icon(Ref<Texture>()); + edit->set_icon(Ref<Texture2D>()); } } @@ -881,7 +896,7 @@ EditorPropertyObjectID::EditorPropertyObjectID() { edit = memnew(Button); add_child(edit); add_focusable(edit); - edit->connect("pressed", this, "_edit_pressed"); + edit->connect_compat("pressed", this, "_edit_pressed"); } ///////////////////// FLOAT ///////////////////////// @@ -921,7 +936,7 @@ EditorPropertyFloat::EditorPropertyFloat() { spin->set_flat(true); add_child(spin); add_focusable(spin); - spin->connect("value_changed", this, "_value_changed"); + spin->connect_compat("value_changed", this, "_value_changed"); setting = false; } @@ -1019,7 +1034,7 @@ void EditorPropertyEasing::_draw_easing() { prev = h; } - easing_draw->draw_multiline(lines, line_color, 1.0, true); + easing_draw->draw_multiline(lines, line_color, 1.0); f->draw(ci, Point2(10, 10 + f->get_ascent()), String::num(exp, 2), font_color); } @@ -1100,14 +1115,14 @@ void EditorPropertyEasing::_bind_methods() { EditorPropertyEasing::EditorPropertyEasing() { easing_draw = memnew(Control); - easing_draw->connect("draw", this, "_draw_easing"); - easing_draw->connect("gui_input", this, "_drag_easing"); + easing_draw->connect_compat("draw", this, "_draw_easing"); + easing_draw->connect_compat("gui_input", this, "_drag_easing"); easing_draw->set_default_cursor_shape(Control::CURSOR_MOVE); add_child(easing_draw); preset = memnew(PopupMenu); add_child(preset); - preset->connect("id_pressed", this, "_set_preset"); + preset->connect_compat("id_pressed", this, "_set_preset"); spin = memnew(EditorSpinSlider); spin->set_flat(true); @@ -1117,8 +1132,8 @@ EditorPropertyEasing::EditorPropertyEasing() { spin->set_hide_slider(true); spin->set_allow_lesser(true); spin->set_allow_greater(true); - spin->connect("value_changed", this, "_spin_value_changed"); - spin->get_line_edit()->connect("focus_exited", this, "_spin_focus_exited"); + spin->connect_compat("value_changed", this, "_spin_value_changed"); + spin->get_line_edit()->connect_compat("focus_exited", this, "_spin_focus_exited"); spin->hide(); add_child(spin); @@ -1196,7 +1211,7 @@ EditorPropertyVector2::EditorPropertyVector2() { spin[i]->set_label(desc[i]); bc->add_child(spin[i]); add_focusable(spin[i]); - spin[i]->connect("value_changed", this, "_value_changed", varray(desc[i])); + spin[i]->connect_compat("value_changed", this, "_value_changed", varray(desc[i])); if (horizontal) { spin[i]->set_h_size_flags(SIZE_EXPAND_FILL); } @@ -1280,7 +1295,7 @@ EditorPropertyRect2::EditorPropertyRect2() { spin[i]->set_flat(true); bc->add_child(spin[i]); add_focusable(spin[i]); - spin[i]->connect("value_changed", this, "_value_changed", varray(desc[i])); + spin[i]->connect_compat("value_changed", this, "_value_changed", varray(desc[i])); if (horizontal) { spin[i]->set_h_size_flags(SIZE_EXPAND_FILL); } @@ -1361,7 +1376,7 @@ EditorPropertyVector3::EditorPropertyVector3() { spin[i]->set_label(desc[i]); bc->add_child(spin[i]); add_focusable(spin[i]); - spin[i]->connect("value_changed", this, "_value_changed", varray(desc[i])); + spin[i]->connect_compat("value_changed", this, "_value_changed", varray(desc[i])); if (horizontal) { spin[i]->set_h_size_flags(SIZE_EXPAND_FILL); } @@ -1444,7 +1459,7 @@ EditorPropertyPlane::EditorPropertyPlane() { spin[i]->set_label(desc[i]); bc->add_child(spin[i]); add_focusable(spin[i]); - spin[i]->connect("value_changed", this, "_value_changed", varray(desc[i])); + spin[i]->connect_compat("value_changed", this, "_value_changed", varray(desc[i])); if (horizontal) { spin[i]->set_h_size_flags(SIZE_EXPAND_FILL); } @@ -1527,7 +1542,7 @@ EditorPropertyQuat::EditorPropertyQuat() { spin[i]->set_label(desc[i]); bc->add_child(spin[i]); add_focusable(spin[i]); - spin[i]->connect("value_changed", this, "_value_changed", varray(desc[i])); + spin[i]->connect_compat("value_changed", this, "_value_changed", varray(desc[i])); if (horizontal) { spin[i]->set_h_size_flags(SIZE_EXPAND_FILL); } @@ -1609,7 +1624,7 @@ EditorPropertyAABB::EditorPropertyAABB() { g->add_child(spin[i]); spin[i]->set_h_size_flags(SIZE_EXPAND_FILL); add_focusable(spin[i]); - spin[i]->connect("value_changed", this, "_value_changed", varray(desc[i])); + spin[i]->connect_compat("value_changed", this, "_value_changed", varray(desc[i])); } set_bottom_editor(g); setting = false; @@ -1684,7 +1699,7 @@ EditorPropertyTransform2D::EditorPropertyTransform2D() { g->add_child(spin[i]); spin[i]->set_h_size_flags(SIZE_EXPAND_FILL); add_focusable(spin[i]); - spin[i]->connect("value_changed", this, "_value_changed", varray(desc[i])); + spin[i]->connect_compat("value_changed", this, "_value_changed", varray(desc[i])); } set_bottom_editor(g); setting = false; @@ -1765,7 +1780,7 @@ EditorPropertyBasis::EditorPropertyBasis() { g->add_child(spin[i]); spin[i]->set_h_size_flags(SIZE_EXPAND_FILL); add_focusable(spin[i]); - spin[i]->connect("value_changed", this, "_value_changed", varray(desc[i])); + spin[i]->connect_compat("value_changed", this, "_value_changed", varray(desc[i])); } set_bottom_editor(g); setting = false; @@ -1852,7 +1867,7 @@ EditorPropertyTransform::EditorPropertyTransform() { g->add_child(spin[i]); spin[i]->set_h_size_flags(SIZE_EXPAND_FILL); add_focusable(spin[i]); - spin[i]->connect("value_changed", this, "_value_changed", varray(desc[i])); + spin[i]->connect_compat("value_changed", this, "_value_changed", varray(desc[i])); } set_bottom_editor(g); setting = false; @@ -1917,9 +1932,9 @@ EditorPropertyColor::EditorPropertyColor() { picker = memnew(ColorPickerButton); add_child(picker); picker->set_flat(true); - picker->connect("color_changed", this, "_color_changed"); - picker->connect("popup_closed", this, "_popup_closed"); - picker->connect("picker_created", this, "_picker_created"); + picker->connect_compat("color_changed", this, "_color_changed"); + picker->connect_compat("popup_closed", this, "_popup_closed"); + picker->connect_compat("picker_created", this, "_picker_created"); } ////////////// NODE PATH ////////////////////// @@ -1966,7 +1981,7 @@ void EditorPropertyNodePath::_node_assign() { scene_tree->get_scene_tree()->set_show_enabled_subscene(true); scene_tree->get_scene_tree()->set_valid_types(valid_types); add_child(scene_tree); - scene_tree->connect("selected", this, "_node_selected"); + scene_tree->connect_compat("selected", this, "_node_selected"); } scene_tree->popup_centered_ratio(); } @@ -1983,7 +1998,7 @@ void EditorPropertyNodePath::update_property() { assign->set_tooltip(p); if (p == NodePath()) { - assign->set_icon(Ref<Texture>()); + assign->set_icon(Ref<Texture2D>()); assign->set_text(TTR("Assign...")); assign->set_flat(false); return; @@ -2000,7 +2015,7 @@ void EditorPropertyNodePath::update_property() { } if (!base_node || !base_node->has_node(p)) { - assign->set_icon(Ref<Texture>()); + assign->set_icon(Ref<Texture2D>()); assign->set_text(p); return; } @@ -2009,7 +2024,7 @@ void EditorPropertyNodePath::update_property() { ERR_FAIL_COND(!target_node); if (String(target_node->get_name()).find("@") != -1) { - assign->set_icon(Ref<Texture>()); + assign->set_icon(Ref<Texture2D>()); assign->set_text(p); return; } @@ -2028,7 +2043,7 @@ void EditorPropertyNodePath::setup(const NodePath &p_base_hint, Vector<StringNam void EditorPropertyNodePath::_notification(int p_what) { if (p_what == NOTIFICATION_ENTER_TREE || p_what == NOTIFICATION_THEME_CHANGED) { - Ref<Texture> t = get_icon("Clear", "EditorIcons"); + Ref<Texture2D> t = get_icon("Clear", "EditorIcons"); clear->set_icon(t); } } @@ -2048,12 +2063,12 @@ EditorPropertyNodePath::EditorPropertyNodePath() { assign->set_flat(true); assign->set_h_size_flags(SIZE_EXPAND_FILL); assign->set_clip_text(true); - assign->connect("pressed", this, "_node_assign"); + assign->connect_compat("pressed", this, "_node_assign"); hbc->add_child(assign); clear = memnew(Button); clear->set_flat(true); - clear->connect("pressed", this, "_node_clear"); + clear->connect_compat("pressed", this, "_node_clear"); hbc->add_child(clear); use_path_from_scene_root = false; @@ -2120,7 +2135,7 @@ void EditorPropertyResource::_menu_option(int p_which) { if (!file) { file = memnew(EditorFileDialog); - file->connect("file_selected", this, "_file_selected"); + file->connect_compat("file_selected", this, "_file_selected"); add_child(file); } file->set_mode(EditorFileDialog::MODE_OPEN_FILE); @@ -2289,7 +2304,7 @@ void EditorPropertyResource::_menu_option(int p_which) { scene_tree->get_scene_tree()->set_valid_types(valid_types); scene_tree->get_scene_tree()->set_show_enabled_subscene(true); add_child(scene_tree); - scene_tree->connect("selected", this, "_viewport_selected"); + scene_tree->connect_compat("selected", this, "_viewport_selected"); scene_tree->set_title(TTR("Pick a Viewport")); } scene_tree->popup_centered_ratio(); @@ -2331,7 +2346,7 @@ void EditorPropertyResource::_menu_option(int p_which) { } } -void EditorPropertyResource::_resource_preview(const String &p_path, const Ref<Texture> &p_preview, const Ref<Texture> &p_small_preview, ObjectID p_obj) { +void EditorPropertyResource::_resource_preview(const String &p_path, const Ref<Texture2D> &p_preview, const Ref<Texture2D> &p_small_preview, ObjectID p_obj) { RES p = get_edited_object()->get(get_edited_property()); if (p.is_valid() && p->get_instance_id() == p_obj) { @@ -2412,7 +2427,7 @@ void EditorPropertyResource::_update_menu_items() { const String &t = F->get(); bool is_custom_resource = false; - Ref<Texture> icon; + Ref<Texture2D> icon; if (!custom_resources.empty()) { for (int j = 0; j < custom_resources.size(); j++) { if (custom_resources[j].name == t) { @@ -2493,7 +2508,7 @@ void EditorPropertyResource::_update_menu_items() { } for (int i = 0; i < conversions.size(); i++) { String what = conversions[i]->converts_to(); - Ref<Texture> icon; + Ref<Texture2D> icon; if (has_icon(what, "EditorIcons")) { icon = get_icon(what, "EditorIcons"); @@ -2607,9 +2622,9 @@ void EditorPropertyResource::update_property() { sub_inspector->set_sub_inspector(true); sub_inspector->set_enable_capitalize_paths(true); - sub_inspector->connect("property_keyed", this, "_sub_inspector_property_keyed"); - sub_inspector->connect("resource_selected", this, "_sub_inspector_resource_selected"); - sub_inspector->connect("object_id_selected", this, "_sub_inspector_object_id_selected"); + sub_inspector->connect_compat("property_keyed", this, "_sub_inspector_property_keyed"); + sub_inspector->connect_compat("resource_selected", this, "_sub_inspector_resource_selected"); + sub_inspector->connect_compat("object_id_selected", this, "_sub_inspector_object_id_selected"); sub_inspector->set_keying(is_keying()); sub_inspector->set_read_only(is_read_only()); sub_inspector->set_use_folding(is_using_folding()); @@ -2659,9 +2674,9 @@ void EditorPropertyResource::update_property() { } } - preview->set_texture(Ref<Texture>()); + preview->set_texture(Ref<Texture2D>()); if (res == RES()) { - assign->set_icon(Ref<Texture>()); + assign->set_icon(Ref<Texture2D>()); assign->set_text(TTR("[empty]")); } else { @@ -2712,7 +2727,7 @@ void EditorPropertyResource::setup(const String &p_base_type) { void EditorPropertyResource::_notification(int p_what) { if (p_what == NOTIFICATION_ENTER_TREE || p_what == NOTIFICATION_THEME_CHANGED) { - Ref<Texture> t = get_icon("select_arrow", "Tree"); + Ref<Texture2D> t = get_icon("select_arrow", "Tree"); edit->set_icon(t); } @@ -2892,9 +2907,9 @@ EditorPropertyResource::EditorPropertyResource() { assign->set_flat(true); assign->set_h_size_flags(SIZE_EXPAND_FILL); assign->set_clip_text(true); - assign->connect("pressed", this, "_resource_selected"); + assign->connect_compat("pressed", this, "_resource_selected"); assign->set_drag_forwarding(this); - assign->connect("draw", this, "_button_draw"); + assign->connect_compat("draw", this, "_button_draw"); hbc->add_child(assign); add_focusable(assign); @@ -2905,18 +2920,18 @@ EditorPropertyResource::EditorPropertyResource() { preview->set_margin(MARGIN_BOTTOM, -1); preview->set_margin(MARGIN_RIGHT, -1); assign->add_child(preview); - assign->connect("gui_input", this, "_button_input"); + assign->connect_compat("gui_input", this, "_button_input"); menu = memnew(PopupMenu); add_child(menu); edit = memnew(Button); edit->set_flat(true); edit->set_toggle_mode(true); - menu->connect("id_pressed", this, "_menu_option"); - menu->connect("popup_hide", edit, "set_pressed", varray(false)); - edit->connect("pressed", this, "_update_menu"); + menu->connect_compat("id_pressed", this, "_menu_option"); + menu->connect_compat("popup_hide", edit, "set_pressed", varray(false)); + edit->connect_compat("pressed", this, "_update_menu"); hbc->add_child(edit); - edit->connect("gui_input", this, "_button_input"); + edit->connect_compat("gui_input", this, "_button_input"); add_focusable(edit); file = NULL; @@ -3305,6 +3320,22 @@ bool EditorInspectorDefaultPlugin::parse_property(Object *p_object, Variant::Typ editor->setup(p_hint != PROPERTY_HINT_COLOR_NO_ALPHA); add_property_editor(p_path, editor); } break; + case Variant::STRING_NAME: { + + if (p_hint == PROPERTY_HINT_ENUM) { + EditorPropertyTextEnum *editor = memnew(EditorPropertyTextEnum); + Vector<String> options = p_hint_text.split(","); + editor->setup(options, true); + add_property_editor(p_path, editor); + } else { + EditorPropertyText *editor = memnew(EditorPropertyText); + if (p_hint == PROPERTY_HINT_PLACEHOLDER_TEXT) { + editor->set_placeholder(p_hint_text); + } + editor->set_string_name(true); + add_property_editor(p_path, editor); + } + } break; case Variant::NODE_PATH: { EditorPropertyNodePath *editor = memnew(EditorPropertyNodePath); @@ -3353,39 +3384,39 @@ bool EditorInspectorDefaultPlugin::parse_property(Object *p_object, Variant::Typ editor->setup(Variant::ARRAY, p_hint_text); add_property_editor(p_path, editor); } break; - case Variant::POOL_BYTE_ARRAY: { + case Variant::PACKED_BYTE_ARRAY: { EditorPropertyArray *editor = memnew(EditorPropertyArray); - editor->setup(Variant::POOL_BYTE_ARRAY); + editor->setup(Variant::PACKED_BYTE_ARRAY); add_property_editor(p_path, editor); } break; // 20 - case Variant::POOL_INT_ARRAY: { + case Variant::PACKED_INT_ARRAY: { EditorPropertyArray *editor = memnew(EditorPropertyArray); - editor->setup(Variant::POOL_INT_ARRAY); + editor->setup(Variant::PACKED_INT_ARRAY); add_property_editor(p_path, editor); } break; - case Variant::POOL_REAL_ARRAY: { + case Variant::PACKED_REAL_ARRAY: { EditorPropertyArray *editor = memnew(EditorPropertyArray); - editor->setup(Variant::POOL_REAL_ARRAY); + editor->setup(Variant::PACKED_REAL_ARRAY); add_property_editor(p_path, editor); } break; - case Variant::POOL_STRING_ARRAY: { + case Variant::PACKED_STRING_ARRAY: { EditorPropertyArray *editor = memnew(EditorPropertyArray); - editor->setup(Variant::POOL_STRING_ARRAY); + editor->setup(Variant::PACKED_STRING_ARRAY); add_property_editor(p_path, editor); } break; - case Variant::POOL_VECTOR2_ARRAY: { + case Variant::PACKED_VECTOR2_ARRAY: { EditorPropertyArray *editor = memnew(EditorPropertyArray); - editor->setup(Variant::POOL_VECTOR2_ARRAY); + editor->setup(Variant::PACKED_VECTOR2_ARRAY); add_property_editor(p_path, editor); } break; - case Variant::POOL_VECTOR3_ARRAY: { + case Variant::PACKED_VECTOR3_ARRAY: { EditorPropertyArray *editor = memnew(EditorPropertyArray); - editor->setup(Variant::POOL_VECTOR3_ARRAY); + editor->setup(Variant::PACKED_VECTOR3_ARRAY); add_property_editor(p_path, editor); } break; // 25 - case Variant::POOL_COLOR_ARRAY: { + case Variant::PACKED_COLOR_ARRAY: { EditorPropertyArray *editor = memnew(EditorPropertyArray); - editor->setup(Variant::POOL_COLOR_ARRAY); + editor->setup(Variant::PACKED_COLOR_ARRAY); add_property_editor(p_path, editor); } break; default: { diff --git a/editor/editor_properties.h b/editor/editor_properties.h index 1853a6b6e1..c5fc8aaf77 100644 --- a/editor/editor_properties.h +++ b/editor/editor_properties.h @@ -53,6 +53,7 @@ class EditorPropertyText : public EditorProperty { LineEdit *text; bool updating; + bool string_name; void _text_changed(const String &p_string); void _text_entered(const String &p_string); @@ -60,6 +61,7 @@ protected: static void _bind_methods(); public: + void set_string_name(bool p_enabled); virtual void update_property(); void set_placeholder(const String &p_string); EditorPropertyText(); @@ -91,12 +93,13 @@ class EditorPropertyTextEnum : public EditorProperty { OptionButton *options; void _option_selected(int p_which); + bool string_name; protected: static void _bind_methods(); public: - void setup(const Vector<String> &p_options); + void setup(const Vector<String> &p_options, bool p_string_name = false); virtual void update_property(); EditorPropertyTextEnum(); }; @@ -574,7 +577,7 @@ class EditorPropertyResource : public EditorProperty { void _file_selected(const String &p_path); void _menu_option(int p_which); - void _resource_preview(const String &p_path, const Ref<Texture> &p_preview, const Ref<Texture> &p_small_preview, ObjectID p_obj); + void _resource_preview(const String &p_path, const Ref<Texture2D> &p_preview, const Ref<Texture2D> &p_small_preview, ObjectID p_obj); void _resource_selected(); void _viewport_selected(const NodePath &p_path); diff --git a/editor/editor_properties_array_dict.cpp b/editor/editor_properties_array_dict.cpp index 0dc67b298f..53ee86c71e 100644 --- a/editor/editor_properties_array_dict.cpp +++ b/editor/editor_properties_array_dict.cpp @@ -198,7 +198,7 @@ void EditorPropertyArray::_change_type_menu(int p_index) { } Variant value; - Variant::CallError ce; + Callable::CallError ce; value = Variant::construct(Variant::Type(p_index), NULL, 0, ce); Variant array = object->get_array(); array.set(changing_type_idx, value); @@ -225,36 +225,29 @@ void EditorPropertyArray::update_property() { switch (array_type) { case Variant::ARRAY: { arrtype = "Array"; - } break; // arrays - case Variant::POOL_BYTE_ARRAY: { - arrtype = "PoolByteArray"; - + case Variant::PACKED_BYTE_ARRAY: { + arrtype = "PackedByteArray"; } break; - case Variant::POOL_INT_ARRAY: { - arrtype = "PoolIntArray"; - + case Variant::PACKED_INT_ARRAY: { + arrtype = "PackedIntArray"; } break; - case Variant::POOL_REAL_ARRAY: { - - arrtype = "PoolFloatArray"; + case Variant::PACKED_REAL_ARRAY: { + arrtype = "PackedRealArray"; } break; - case Variant::POOL_STRING_ARRAY: { - - arrtype = "PoolStringArray"; + case Variant::PACKED_STRING_ARRAY: { + arrtype = "PackedStringArray"; } break; - case Variant::POOL_VECTOR2_ARRAY: { - - arrtype = "PoolVector2Array"; + case Variant::PACKED_VECTOR2_ARRAY: { + arrtype = "PackedVector2Array"; } break; - case Variant::POOL_VECTOR3_ARRAY: { - arrtype = "PoolVector3Array"; - + case Variant::PACKED_VECTOR3_ARRAY: { + arrtype = "PackedVector3Array"; } break; - case Variant::POOL_COLOR_ARRAY: { - arrtype = "PoolColorArray"; + case Variant::PACKED_COLOR_ARRAY: { + arrtype = "PackedColorArray"; } break; default: { } @@ -297,7 +290,7 @@ void EditorPropertyArray::update_property() { length->set_max(1000000); length->set_h_size_flags(SIZE_EXPAND_FILL); hbc->add_child(length); - length->connect("value_changed", this, "_length_changed"); + length->connect_compat("value_changed", this, "_length_changed"); page_hb = memnew(HBoxContainer); vbox->add_child(page_hb); @@ -308,7 +301,7 @@ void EditorPropertyArray::update_property() { page->set_step(1); page_hb->add_child(page); page->set_h_size_flags(SIZE_EXPAND_FILL); - page->connect("value_changed", this, "_page_changed"); + page->connect_compat("value_changed", this, "_page_changed"); } else { //bye bye children of the box while (vbox->get_child_count() > 2) { @@ -360,8 +353,8 @@ void EditorPropertyArray::update_property() { prop->set_object_and_property(object.ptr(), prop_name); prop->set_label(itos(i + offset)); prop->set_selectable(false); - prop->connect("property_changed", this, "_property_changed"); - prop->connect("object_id_selected", this, "_object_id_selected"); + prop->connect_compat("property_changed", this, "_property_changed"); + prop->connect_compat("object_id_selected", this, "_object_id_selected"); prop->set_h_size_flags(SIZE_EXPAND_FILL); HBoxContainer *hb = memnew(HBoxContainer); @@ -376,12 +369,12 @@ void EditorPropertyArray::update_property() { Button *edit = memnew(Button); edit->set_icon(get_icon("Edit", "EditorIcons")); hb->add_child(edit); - edit->connect("pressed", this, "_change_type", varray(edit, i + offset)); + edit->connect_compat("pressed", this, "_change_type", varray(edit, i + offset)); } else { Button *remove = memnew(Button); remove->set_icon(get_icon("Remove", "EditorIcons")); - remove->connect("pressed", this, "_remove_pressed", varray(i + offset)); + remove->connect_compat("pressed", this, "_remove_pressed", varray(i + offset)); hb->add_child(remove); } @@ -419,7 +412,7 @@ void EditorPropertyArray::_edit_pressed() { Variant array = get_edited_object()->get(get_edited_property()); if (!array.is_array()) { - Variant::CallError ce; + Callable::CallError ce; array = Variant::construct(array_type, NULL, 0, ce); get_edited_object()->set(get_edited_property(), array); @@ -450,7 +443,7 @@ void EditorPropertyArray::_length_changed(double p_page) { int size = array.call("size"); for (int i = previous_size; i < size; i++) { if (array.get(i).get_type() == Variant::NIL) { - Variant::CallError ce; + Callable::CallError ce; array.set(i, Variant::construct(subtype, NULL, 0, ce)); } } @@ -460,7 +453,7 @@ void EditorPropertyArray::_length_changed(double p_page) { int size = array.call("size"); // Pool*Array don't initialize their elements, have to do it manually for (int i = previous_size; i < size; i++) { - Variant::CallError ce; + Callable::CallError ce; array.set(i, Variant::construct(array.get(i).get_type(), NULL, 0, ce)); } } @@ -510,7 +503,7 @@ EditorPropertyArray::EditorPropertyArray() { edit->set_flat(true); edit->set_h_size_flags(SIZE_EXPAND_FILL); edit->set_clip_text(true); - edit->connect("pressed", this, "_edit_pressed"); + edit->connect_compat("pressed", this, "_edit_pressed"); edit->set_toggle_mode(true); add_child(edit); add_focusable(edit); @@ -520,7 +513,7 @@ EditorPropertyArray::EditorPropertyArray() { updating = false; change_type = memnew(PopupMenu); add_child(change_type); - change_type->connect("id_pressed", this, "_change_type_menu"); + change_type->connect_compat("id_pressed", this, "_change_type_menu"); for (int i = 0; i < Variant::VARIANT_MAX; i++) { String type = Variant::get_type_name(Variant::Type(i)); @@ -593,7 +586,7 @@ void EditorPropertyDictionary::_change_type_menu(int p_index) { if (changing_type_idx < 0) { Variant value; - Variant::CallError ce; + Callable::CallError ce; value = Variant::construct(Variant::Type(p_index), NULL, 0, ce); if (changing_type_idx == -1) { object->set_new_item_key(value); @@ -609,7 +602,7 @@ void EditorPropertyDictionary::_change_type_menu(int p_index) { if (p_index < Variant::VARIANT_MAX) { Variant value; - Variant::CallError ce; + Callable::CallError ce; value = Variant::construct(Variant::Type(p_index), NULL, 0, ce); Variant key = dict.get_key_at_index(changing_type_idx); dict[key] = value; @@ -668,7 +661,7 @@ void EditorPropertyDictionary::update_property() { page->set_step(1); page_hb->add_child(page); page->set_h_size_flags(SIZE_EXPAND_FILL); - page->connect("value_changed", this, "_page_changed"); + page->connect_compat("value_changed", this, "_page_changed"); } else { // Queue children for deletion, deleting immediately might cause errors. for (int i = 1; i < vbox->get_child_count(); i++) { @@ -811,6 +804,12 @@ void EditorPropertyDictionary::update_property() { prop = memnew(EditorPropertyColor); } break; + case Variant::STRING_NAME: { + EditorPropertyText *ept = memnew(EditorPropertyText); + ept->set_string_name(true); + prop = ept; + + } break; case Variant::NODE_PATH: { prop = memnew(EditorPropertyNodePath); @@ -846,46 +845,46 @@ void EditorPropertyDictionary::update_property() { } break; // arrays - case Variant::POOL_BYTE_ARRAY: { + case Variant::PACKED_BYTE_ARRAY: { EditorPropertyArray *editor = memnew(EditorPropertyArray); - editor->setup(Variant::POOL_BYTE_ARRAY); + editor->setup(Variant::PACKED_BYTE_ARRAY); prop = editor; } break; - case Variant::POOL_INT_ARRAY: { + case Variant::PACKED_INT_ARRAY: { EditorPropertyArray *editor = memnew(EditorPropertyArray); - editor->setup(Variant::POOL_INT_ARRAY); + editor->setup(Variant::PACKED_INT_ARRAY); prop = editor; } break; - case Variant::POOL_REAL_ARRAY: { + case Variant::PACKED_REAL_ARRAY: { EditorPropertyArray *editor = memnew(EditorPropertyArray); - editor->setup(Variant::POOL_REAL_ARRAY); + editor->setup(Variant::PACKED_REAL_ARRAY); prop = editor; } break; - case Variant::POOL_STRING_ARRAY: { + case Variant::PACKED_STRING_ARRAY: { EditorPropertyArray *editor = memnew(EditorPropertyArray); - editor->setup(Variant::POOL_STRING_ARRAY); + editor->setup(Variant::PACKED_STRING_ARRAY); prop = editor; } break; - case Variant::POOL_VECTOR2_ARRAY: { + case Variant::PACKED_VECTOR2_ARRAY: { EditorPropertyArray *editor = memnew(EditorPropertyArray); - editor->setup(Variant::POOL_VECTOR2_ARRAY); + editor->setup(Variant::PACKED_VECTOR2_ARRAY); prop = editor; } break; - case Variant::POOL_VECTOR3_ARRAY: { + case Variant::PACKED_VECTOR3_ARRAY: { EditorPropertyArray *editor = memnew(EditorPropertyArray); - editor->setup(Variant::POOL_VECTOR3_ARRAY); + editor->setup(Variant::PACKED_VECTOR3_ARRAY); prop = editor; } break; - case Variant::POOL_COLOR_ARRAY: { + case Variant::PACKED_COLOR_ARRAY: { EditorPropertyArray *editor = memnew(EditorPropertyArray); - editor->setup(Variant::POOL_COLOR_ARRAY); + editor->setup(Variant::PACKED_COLOR_ARRAY); prop = editor; } break; default: { @@ -923,8 +922,8 @@ void EditorPropertyDictionary::update_property() { } prop->set_selectable(false); - prop->connect("property_changed", this, "_property_changed"); - prop->connect("object_id_selected", this, "_object_id_selected"); + prop->connect_compat("property_changed", this, "_property_changed"); + prop->connect_compat("object_id_selected", this, "_object_id_selected"); HBoxContainer *hb = memnew(HBoxContainer); if (add_vbox) { @@ -937,14 +936,14 @@ void EditorPropertyDictionary::update_property() { Button *edit = memnew(Button); edit->set_icon(get_icon("Edit", "EditorIcons")); hb->add_child(edit); - edit->connect("pressed", this, "_change_type", varray(edit, change_index)); + edit->connect_compat("pressed", this, "_change_type", varray(edit, change_index)); prop->update_property(); if (i == amount + 1) { Button *butt_add_item = memnew(Button); butt_add_item->set_text(TTR("Add Key/Value Pair")); - butt_add_item->connect("pressed", this, "_add_key_value"); + butt_add_item->connect_compat("pressed", this, "_add_key_value"); add_vbox->add_child(butt_add_item); } } @@ -971,7 +970,7 @@ void EditorPropertyDictionary::_edit_pressed() { Variant prop_val = get_edited_object()->get(get_edited_property()); if (prop_val.get_type() == Variant::NIL) { - Variant::CallError ce; + Callable::CallError ce; prop_val = Variant::construct(Variant::DICTIONARY, NULL, 0, ce); get_edited_object()->set(get_edited_property(), prop_val); } @@ -1006,7 +1005,7 @@ EditorPropertyDictionary::EditorPropertyDictionary() { edit->set_flat(true); edit->set_h_size_flags(SIZE_EXPAND_FILL); edit->set_clip_text(true); - edit->connect("pressed", this, "_edit_pressed"); + edit->connect_compat("pressed", this, "_edit_pressed"); edit->set_toggle_mode(true); add_child(edit); add_focusable(edit); @@ -1015,7 +1014,7 @@ EditorPropertyDictionary::EditorPropertyDictionary() { updating = false; change_type = memnew(PopupMenu); add_child(change_type); - change_type->connect("id_pressed", this, "_change_type_menu"); + change_type->connect_compat("id_pressed", this, "_change_type_menu"); for (int i = 0; i < Variant::VARIANT_MAX; i++) { String type = Variant::get_type_name(Variant::Type(i)); diff --git a/editor/editor_resource_preview.cpp b/editor/editor_resource_preview.cpp index 1f2a02c9a0..c0f58c9aae 100644 --- a/editor/editor_resource_preview.cpp +++ b/editor/editor_resource_preview.cpp @@ -49,15 +49,15 @@ bool EditorResourcePreviewGenerator::handles(const String &p_type) const { ERR_FAIL_V_MSG(false, "EditorResourcePreviewGenerator::handles needs to be overridden."); } -Ref<Texture> EditorResourcePreviewGenerator::generate(const RES &p_from, const Size2 &p_size) const { +Ref<Texture2D> EditorResourcePreviewGenerator::generate(const RES &p_from, const Size2 &p_size) const { if (get_script_instance() && get_script_instance()->has_method("generate")) { return get_script_instance()->call("generate", p_from, p_size); } - ERR_FAIL_V_MSG(Ref<Texture>(), "EditorResourcePreviewGenerator::generate needs to be overridden."); + ERR_FAIL_V_MSG(Ref<Texture2D>(), "EditorResourcePreviewGenerator::generate needs to be overridden."); } -Ref<Texture> EditorResourcePreviewGenerator::generate_from_path(const String &p_path, const Size2 &p_size) const { +Ref<Texture2D> EditorResourcePreviewGenerator::generate_from_path(const String &p_path, const Size2 &p_size) const { if (get_script_instance() && get_script_instance()->has_method("generate_from_path")) { return get_script_instance()->call("generate_from_path", p_path, p_size); @@ -90,8 +90,8 @@ bool EditorResourcePreviewGenerator::can_generate_small_preview() const { void EditorResourcePreviewGenerator::_bind_methods() { ClassDB::add_virtual_method(get_class_static(), MethodInfo(Variant::BOOL, "handles", PropertyInfo(Variant::STRING, "type"))); - ClassDB::add_virtual_method(get_class_static(), MethodInfo(CLASS_INFO(Texture), "generate", PropertyInfo(Variant::OBJECT, "from", PROPERTY_HINT_RESOURCE_TYPE, "Resource"), PropertyInfo(Variant::VECTOR2, "size"))); - ClassDB::add_virtual_method(get_class_static(), MethodInfo(CLASS_INFO(Texture), "generate_from_path", PropertyInfo(Variant::STRING, "path", PROPERTY_HINT_FILE), PropertyInfo(Variant::VECTOR2, "size"))); + ClassDB::add_virtual_method(get_class_static(), MethodInfo(CLASS_INFO(Texture2D), "generate", PropertyInfo(Variant::OBJECT, "from", PROPERTY_HINT_RESOURCE_TYPE, "Resource"), PropertyInfo(Variant::VECTOR2, "size"))); + ClassDB::add_virtual_method(get_class_static(), MethodInfo(CLASS_INFO(Texture2D), "generate_from_path", PropertyInfo(Variant::STRING, "path", PROPERTY_HINT_FILE), PropertyInfo(Variant::VECTOR2, "size"))); ClassDB::add_virtual_method(get_class_static(), MethodInfo(Variant::BOOL, "generate_small_preview_automatically")); ClassDB::add_virtual_method(get_class_static(), MethodInfo(Variant::BOOL, "can_generate_small_preview")); } @@ -107,7 +107,7 @@ void EditorResourcePreview::_thread_func(void *ud) { erp->_thread(); } -void EditorResourcePreview::_preview_ready(const String &p_str, const Ref<Texture> &p_texture, const Ref<Texture> &p_small_texture, ObjectID id, const StringName &p_func, const Variant &p_ud) { +void EditorResourcePreview::_preview_ready(const String &p_str, const Ref<Texture2D> &p_texture, const Ref<Texture2D> &p_small_texture, ObjectID id, const StringName &p_func, const Variant &p_ud) { preview_mutex->lock(); @@ -160,7 +160,7 @@ void EditorResourcePreview::_generate_preview(Ref<ImageTexture> &r_texture, Ref< if (!preview_generators[i]->handles(type)) continue; - Ref<Texture> generated; + Ref<Texture2D> generated; if (p_item.resource.is_valid()) { generated = preview_generators[i]->generate(p_item.resource, Vector2(thumbnail_size, thumbnail_size)); } else { @@ -172,7 +172,7 @@ void EditorResourcePreview::_generate_preview(Ref<ImageTexture> &r_texture, Ref< small_thumbnail_size *= EDSCALE; if (preview_generators[i]->can_generate_small_preview()) { - Ref<Texture> generated_small; + Ref<Texture2D> generated_small; if (p_item.resource.is_valid()) { generated_small = preview_generators[i]->generate(p_item.resource, Vector2(small_thumbnail_size, small_thumbnail_size)); } else { @@ -322,14 +322,14 @@ void EditorResourcePreview::_thread() { } else { texture.instance(); - texture->create_from_image(img, Texture::FLAG_FILTER); + texture->create_from_image(img); if (has_small_texture) { if (small_img->load(cache_base + "_small.png") != OK) { cache_valid = false; } else { small_texture.instance(); - small_texture->create_from_image(small_img, Texture::FLAG_FILTER); + small_texture->create_from_image(small_img); } } } @@ -476,7 +476,7 @@ EditorResourcePreview::EditorResourcePreview() { thread = NULL; singleton = this; preview_mutex = Mutex::create(); - preview_sem = Semaphore::create(); + preview_sem = SemaphoreOld::create(); order = 0; exit = false; exited = false; diff --git a/editor/editor_resource_preview.h b/editor/editor_resource_preview.h index 8091fbafdc..0a89154243 100644 --- a/editor/editor_resource_preview.h +++ b/editor/editor_resource_preview.h @@ -45,8 +45,8 @@ protected: public: virtual bool handles(const String &p_type) const; - virtual Ref<Texture> generate(const RES &p_from, const Size2 &p_size) const; - virtual Ref<Texture> generate_from_path(const String &p_path, const Size2 &p_size) const; + virtual Ref<Texture2D> generate(const RES &p_from, const Size2 &p_size) const; + virtual Ref<Texture2D> generate_from_path(const String &p_path, const Size2 &p_size) const; virtual bool generate_small_preview_automatically() const; virtual bool can_generate_small_preview() const; @@ -71,14 +71,14 @@ class EditorResourcePreview : public Node { List<QueueItem> queue; Mutex *preview_mutex; - Semaphore *preview_sem; + SemaphoreOld *preview_sem; Thread *thread; volatile bool exit; volatile bool exited; struct Item { - Ref<Texture> preview; - Ref<Texture> small_preview; + Ref<Texture2D> preview; + Ref<Texture2D> small_preview; int order; uint32_t last_hash; uint64_t modified_time; @@ -88,7 +88,7 @@ class EditorResourcePreview : public Node { Map<String, Item> cache; - void _preview_ready(const String &p_str, const Ref<Texture> &p_texture, const Ref<Texture> &p_small_texture, ObjectID id, const StringName &p_func, const Variant &p_ud); + void _preview_ready(const String &p_str, const Ref<Texture2D> &p_texture, const Ref<Texture2D> &p_small_texture, ObjectID id, const StringName &p_func, const Variant &p_ud); void _generate_preview(Ref<ImageTexture> &r_texture, Ref<ImageTexture> &r_small_texture, const QueueItem &p_item, const String &cache_base); static void _thread_func(void *ud); @@ -102,7 +102,7 @@ protected: public: static EditorResourcePreview *get_singleton(); - //callback function is callback(String p_path,Ref<Texture> preview,Variant udata) preview null if could not load + //callback function is callback(String p_path,Ref<Texture2D> preview,Variant udata) preview null if could not load void queue_resource_preview(const String &p_path, Object *p_receiver, const StringName &p_receiver_func, const Variant &p_userdata); void queue_edited_resource_preview(const Ref<Resource> &p_res, Object *p_receiver, const StringName &p_receiver_func, const Variant &p_userdata); diff --git a/editor/editor_run.cpp b/editor/editor_run.cpp index ff7420e19b..3200a0ac8b 100644 --- a/editor/editor_run.cpp +++ b/editor/editor_run.cpp @@ -38,7 +38,7 @@ EditorRun::Status EditorRun::get_status() const { return status; } -Error EditorRun::run(const String &p_scene, const String &p_custom_args, const List<String> &p_breakpoints, const bool &p_skip_breakpoints) { +Error EditorRun::run(const String &p_scene, const String &p_custom_args, const List<String> &p_breakpoints, const bool &p_skip_breakpoints, const int &p_instances) { List<String> args; @@ -187,20 +187,40 @@ Error EditorRun::run(const String &p_scene, const String &p_custom_args, const L }; printf("\n"); - pid = 0; - Error err = OS::get_singleton()->execute(exec, args, false, &pid); - ERR_FAIL_COND_V(err, err); + for (int i = 0; i < p_instances; i++) { + OS::ProcessID pid = 0; + Error err = OS::get_singleton()->execute(exec, args, false, &pid); + ERR_FAIL_COND_V(err, err); + pids.push_back(pid); + } status = STATUS_PLAY; return OK; } +bool EditorRun::has_child_process(OS::ProcessID p_pid) const { + for (const List<OS::ProcessID>::Element *E = pids.front(); E; E = E->next()) { + if (E->get() == p_pid) + return true; + } + return false; +} + +void EditorRun::stop_child_process(OS::ProcessID p_pid) { + if (has_child_process(p_pid)) { + OS::get_singleton()->kill(p_pid); + pids.erase(p_pid); + } +} + void EditorRun::stop() { - if (status != STATUS_STOP && pid != 0) { + if (status != STATUS_STOP && pids.size() > 0) { - OS::get_singleton()->kill(pid); + for (List<OS::ProcessID>::Element *E = pids.front(); E; E = E->next()) { + OS::get_singleton()->kill(E->get()); + } } status = STATUS_STOP; diff --git a/editor/editor_run.h b/editor/editor_run.h index b50a2c2f0e..389a1e6b20 100644 --- a/editor/editor_run.h +++ b/editor/editor_run.h @@ -42,7 +42,7 @@ public: STATUS_STOP }; - OS::ProcessID pid; + List<OS::ProcessID> pids; private: bool debug_collisions; @@ -51,11 +51,13 @@ private: public: Status get_status() const; - Error run(const String &p_scene, const String &p_custom_args, const List<String> &p_breakpoints, const bool &p_skip_breakpoints = false); + Error run(const String &p_scene, const String &p_custom_args, const List<String> &p_breakpoints, const bool &p_skip_breakpoints = false, const int &p_instances = 1); void run_native_notify() { status = STATUS_PLAY; } void stop(); - OS::ProcessID get_pid() const { return pid; } + void stop_child_process(OS::ProcessID p_pid); + bool has_child_process(OS::ProcessID p_pid) const; + int get_child_process_count() const { return pids.size(); } void set_debug_collisions(bool p_debug); bool get_debug_collisions() const; diff --git a/editor/editor_run_native.cpp b/editor/editor_run_native.cpp index 4bbc111aea..490ae19e17 100644 --- a/editor/editor_run_native.cpp +++ b/editor/editor_run_native.cpp @@ -53,10 +53,10 @@ void EditorRunNative::_notification(int p_what) { im->resize(16 * EDSCALE, 16 * EDSCALE); Ref<ImageTexture> small_icon; small_icon.instance(); - small_icon->create_from_image(im, 0); + small_icon->create_from_image(im); MenuButton *mb = memnew(MenuButton); - mb->get_popup()->connect("id_pressed", this, "_run_native", varray(i)); - mb->connect("pressed", this, "_run_native", varray(-1, i)); + mb->get_popup()->connect_compat("id_pressed", this, "_run_native", varray(i)); + mb->connect_compat("pressed", this, "_run_native", varray(-1, i)); mb->set_icon(small_icon); add_child(mb); menus[i] = mb; diff --git a/editor/editor_run_script.cpp b/editor/editor_run_script.cpp index 1f269c246a..628055cac6 100644 --- a/editor/editor_run_script.cpp +++ b/editor/editor_run_script.cpp @@ -71,10 +71,10 @@ void EditorScript::_run() { return; } - Variant::CallError ce; - ce.error = Variant::CallError::CALL_OK; + Callable::CallError ce; + ce.error = Callable::CallError::CALL_OK; get_script_instance()->call("_run", NULL, 0, ce); - if (ce.error != Variant::CallError::CALL_OK) { + if (ce.error != Callable::CallError::CALL_OK) { EditorNode::add_io_error(TTR("Couldn't run script:") + "\n " + s->get_path() + "\n" + TTR("Did you forget the '_run' method?")); } diff --git a/editor/editor_sectioned_inspector.cpp b/editor/editor_sectioned_inspector.cpp index 2090c12c91..e95343afc9 100644 --- a/editor/editor_sectioned_inspector.cpp +++ b/editor/editor_sectioned_inspector.cpp @@ -177,7 +177,7 @@ String SectionedInspector::get_full_item_path(const String &p_item) { void SectionedInspector::edit(Object *p_object) { if (!p_object) { - obj = 0; + obj = ObjectID(); sections->clear(); filter->set_edited(NULL); @@ -294,7 +294,7 @@ void SectionedInspector::register_search_box(LineEdit *p_box) { search_box = p_box; inspector->register_text_enter(p_box); - search_box->connect("text_changed", this, "_search_changed"); + search_box->connect_compat("text_changed", this, "_search_changed"); } void SectionedInspector::_search_changed(const String &p_what) { @@ -308,7 +308,6 @@ EditorInspector *SectionedInspector::get_inspector() { } SectionedInspector::SectionedInspector() : - obj(0), sections(memnew(Tree)), filter(memnew(SectionedInspectorFilter)), inspector(memnew(EditorInspector)), @@ -333,7 +332,7 @@ SectionedInspector::SectionedInspector() : right_vb->add_child(inspector, true); inspector->set_use_doc_hints(true); - sections->connect("cell_selected", this, "_section_selected"); + sections->connect_compat("cell_selected", this, "_section_selected"); } SectionedInspector::~SectionedInspector() { diff --git a/editor/editor_settings.cpp b/editor/editor_settings.cpp index 715ce6bea7..d81b9bbb82 100644 --- a/editor/editor_settings.cpp +++ b/editor/editor_settings.cpp @@ -628,7 +628,7 @@ void EditorSettings::_load_defaults(Ref<ConfigFile> p_extra_config) { /* Extra config */ _initial_set("project_manager/sorting_order", 0); - hints["project_manager/sorting_order"] = PropertyInfo(Variant::INT, "project_manager/sorting_order", PROPERTY_HINT_ENUM, "Name,Path,Last Modified"); + hints["project_manager/sorting_order"] = PropertyInfo(Variant::INT, "project_manager/sorting_order", PROPERTY_HINT_ENUM, "Name,Path,Last Edited"); if (p_extra_config.is_valid()) { diff --git a/editor/editor_spin_slider.cpp b/editor/editor_spin_slider.cpp index 5db18d8853..9197546772 100644 --- a/editor/editor_spin_slider.cpp +++ b/editor/editor_spin_slider.cpp @@ -31,6 +31,7 @@ #include "editor_spin_slider.h" #include "core/math/expression.h" #include "core/os/input.h" +#include "editor_node.h" #include "editor_scale.h" String EditorSpinSlider::get_tooltip(const Point2 &p_pos) const { @@ -185,6 +186,19 @@ void EditorSpinSlider::_notification(int p_what) { } } + if (p_what == NOTIFICATION_READY) { + // Add a left margin to the stylebox to make the number align with the Label + // when it's edited. The LineEdit "focus" stylebox uses the "normal" stylebox's + // default margins. + Ref<StyleBoxFlat> stylebox = + EditorNode::get_singleton()->get_theme_base()->get_stylebox("normal", "LineEdit")->duplicate(); + // EditorSpinSliders with a label have more space on the left, so add an + // higher margin to match the location where the text begins. + // The margin values below were determined by empirical testing. + stylebox->set_default_margin(MARGIN_LEFT, (get_label() != String() ? 23 : 16) * EDSCALE); + value_input->add_style_override("normal", stylebox); + } + if (p_what == NOTIFICATION_DRAW) { updown_offset = -1; @@ -200,7 +214,7 @@ void EditorSpinSlider::_notification(int p_what) { int string_width = font->get_string_size(label).width; int number_width = get_size().width - sb->get_minimum_size().width - string_width - sep; - Ref<Texture> updown = get_icon("updown", "SpinBox"); + Ref<Texture2D> updown = get_icon("updown", "SpinBox"); if (get_step() == 1) { number_width -= updown->get_width(); @@ -233,7 +247,7 @@ void EditorSpinSlider::_notification(int p_what) { draw_string(font, Vector2(Math::round(sb->get_offset().x + string_width + sep), vofs), numstr, fc, number_width); if (get_step() == 1) { - Ref<Texture> updown2 = get_icon("updown", "SpinBox"); + Ref<Texture2D> updown2 = get_icon("updown", "SpinBox"); int updown_vofs = (get_size().height - updown2->get_height()) / 2; updown_offset = get_size().width - sb->get_margin(MARGIN_RIGHT) - updown2->get_width(); Color c(1, 1, 1); @@ -268,7 +282,7 @@ void EditorSpinSlider::_notification(int p_what) { } if (display_grabber) { - Ref<Texture> grabber_tex; + Ref<Texture2D> grabber_tex; if (mouse_over_grabber) { grabber_tex = get_icon("grabber_highlight", "HSlider"); } else { @@ -476,9 +490,9 @@ EditorSpinSlider::EditorSpinSlider() { grabber->hide(); grabber->set_as_toplevel(true); grabber->set_mouse_filter(MOUSE_FILTER_STOP); - grabber->connect("mouse_entered", this, "_grabber_mouse_entered"); - grabber->connect("mouse_exited", this, "_grabber_mouse_exited"); - grabber->connect("gui_input", this, "_grabber_gui_input"); + grabber->connect_compat("mouse_entered", this, "_grabber_mouse_entered"); + grabber->connect_compat("mouse_exited", this, "_grabber_mouse_exited"); + grabber->connect_compat("gui_input", this, "_grabber_gui_input"); mouse_over_spin = false; mouse_over_grabber = false; mousewheel_over_grabber = false; @@ -488,9 +502,9 @@ EditorSpinSlider::EditorSpinSlider() { add_child(value_input); value_input->set_as_toplevel(true); value_input->hide(); - value_input->connect("modal_closed", this, "_value_input_closed"); - value_input->connect("text_entered", this, "_value_input_entered"); - value_input->connect("focus_exited", this, "_value_focus_exited"); + value_input->connect_compat("modal_closed", this, "_value_input_closed"); + value_input->connect_compat("text_entered", this, "_value_input_entered"); + value_input->connect_compat("focus_exited", this, "_value_focus_exited"); value_input_just_closed = false; hide_slider = false; read_only = false; diff --git a/editor/editor_sub_scene.cpp b/editor/editor_sub_scene.cpp index cd533649e3..1dd3ac5246 100644 --- a/editor/editor_sub_scene.cpp +++ b/editor/editor_sub_scene.cpp @@ -239,24 +239,24 @@ EditorSubScene::EditorSubScene() { HBoxContainer *hb = memnew(HBoxContainer); path = memnew(LineEdit); - path->connect("text_entered", this, "_path_changed"); + path->connect_compat("text_entered", this, "_path_changed"); hb->add_child(path); path->set_h_size_flags(SIZE_EXPAND_FILL); Button *b = memnew(Button); b->set_text(TTR("Browse")); hb->add_child(b); - b->connect("pressed", this, "_path_browse"); + b->connect_compat("pressed", this, "_path_browse"); vb->add_margin_child(TTR("Scene Path:"), hb); tree = memnew(Tree); tree->set_v_size_flags(SIZE_EXPAND_FILL); vb->add_margin_child(TTR("Import From Node:"), tree, true); tree->set_select_mode(Tree::SELECT_MULTI); - tree->connect("multi_selected", this, "_item_multi_selected"); + tree->connect_compat("multi_selected", this, "_item_multi_selected"); //tree->connect("nothing_selected", this, "_deselect_items"); - tree->connect("cell_selected", this, "_selected_changed"); + tree->connect_compat("cell_selected", this, "_selected_changed"); - tree->connect("item_activated", this, "_ok", make_binds(), CONNECT_DEFERRED); + tree->connect_compat("item_activated", this, "_ok", make_binds(), CONNECT_DEFERRED); file_dialog = memnew(EditorFileDialog); List<String> extensions; @@ -269,5 +269,5 @@ EditorSubScene::EditorSubScene() { file_dialog->set_mode(EditorFileDialog::MODE_OPEN_FILE); add_child(file_dialog); - file_dialog->connect("file_selected", this, "_path_selected"); + file_dialog->connect_compat("file_selected", this, "_path_selected"); } diff --git a/editor/editor_themes.cpp b/editor/editor_themes.cpp index 28bc20a957..39d4b70a6a 100644 --- a/editor/editor_themes.cpp +++ b/editor/editor_themes.cpp @@ -41,7 +41,7 @@ #include "modules/svg/image_loader_svg.h" #endif -static Ref<StyleBoxTexture> make_stylebox(Ref<Texture> p_texture, float p_left, float p_top, float p_right, float p_botton, float p_margin_left = -1, float p_margin_top = -1, float p_margin_right = -1, float p_margin_botton = -1, bool p_draw_center = true) { +static Ref<StyleBoxTexture> make_stylebox(Ref<Texture2D> p_texture, float p_left, float p_top, float p_right, float p_botton, float p_margin_left = -1, float p_margin_top = -1, float p_margin_right = -1, float p_margin_botton = -1, bool p_draw_center = true) { Ref<StyleBoxTexture> style(memnew(StyleBoxTexture)); style->set_texture(p_texture); style->set_margin_size(MARGIN_LEFT, p_left * EDSCALE); @@ -90,19 +90,13 @@ Ref<ImageTexture> editor_generate_icon(int p_index, bool p_convert_color, float Ref<ImageTexture> icon = memnew(ImageTexture); Ref<Image> img = memnew(Image); - // dumb gizmo check - bool is_gizmo = String(editor_icons_names[p_index]).begins_with("Gizmo"); - // Upsample icon generation only if the editor scale isn't an integer multiplier. // Generating upsampled icons is slower, and the benefit is hardly visible // with integer editor scales. const bool upsample = !Math::is_equal_approx(Math::round(p_scale), p_scale); ImageLoaderSVG::create_image_from_string(img, editor_icons_sources[p_index], p_scale, upsample, p_convert_color); - if ((p_scale - (float)((int)p_scale)) > 0.0 || is_gizmo || p_force_filter) - icon->create_from_image(img); // in this case filter really helps - else - icon->create_from_image(img, 0); + icon->create_from_image(img); // in this case filter really helps return icon; } @@ -412,6 +406,11 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) { theme->set_color("error_color", "Editor", error_color); theme->set_color("property_color", "Editor", property_color); + if (!dark_theme) { + theme->set_color("vulkan_color", "Editor", Color::hex(0xad1128ff)); + } else { + theme->set_color("vulkan_color", "Editor", Color(1.0, 0.0, 0.0)); + } const int thumb_size = EDITOR_GET("filesystem/file_dialog/thumbnail_size"); theme->set_constant("scale", "Editor", EDSCALE); theme->set_constant("thumb_size", "Editor", thumb_size); @@ -853,12 +852,11 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) { Ref<StyleBoxFlat> style_panel_debugger = style_content_panel->duplicate(); style_panel_debugger->set_border_width(MARGIN_BOTTOM, 0); theme->set_stylebox("DebuggerPanel", "EditorStyles", style_panel_debugger); - theme->set_stylebox("DebuggerTabFG", "EditorStyles", style_tab_selected); - theme->set_stylebox("DebuggerTabBG", "EditorStyles", style_tab_unselected); Ref<StyleBoxFlat> style_panel_invisible_top = style_content_panel->duplicate(); int stylebox_offset = theme->get_font("tab_fg", "TabContainer")->get_height() + theme->get_stylebox("tab_fg", "TabContainer")->get_minimum_size().height + theme->get_stylebox("panel", "TabContainer")->get_default_margin(MARGIN_TOP); style_panel_invisible_top->set_expand_margin_size(MARGIN_TOP, -stylebox_offset); + style_panel_invisible_top->set_default_margin(MARGIN_TOP, 0); theme->set_stylebox("BottomPanelDebuggerOverride", "EditorStyles", style_panel_invisible_top); // LineEdit @@ -931,7 +929,7 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) { theme->set_stylebox("panel", "EditorAbout", style_complex_window); // HScrollBar - Ref<Texture> empty_icon = memnew(ImageTexture); + Ref<Texture2D> empty_icon = memnew(ImageTexture); theme->set_stylebox("scroll", "HScrollBar", make_stylebox(theme->get_icon("GuiScrollBg", "EditorIcons"), 5, 5, 5, 5, 0, 0, 0, 0)); theme->set_stylebox("scroll_focus", "HScrollBar", make_stylebox(theme->get_icon("GuiScrollBg", "EditorIcons"), 5, 5, 5, 5, 0, 0, 0, 0)); diff --git a/editor/editor_visual_profiler.cpp b/editor/editor_visual_profiler.cpp new file mode 100644 index 0000000000..5fb77181bc --- /dev/null +++ b/editor/editor_visual_profiler.cpp @@ -0,0 +1,853 @@ +/*************************************************************************/ +/* editor_visual_profiler.cpp */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*************************************************************************/ + +#include "editor_visual_profiler.h" + +#include "core/os/os.h" +#include "editor_scale.h" +#include "editor_settings.h" + +void EditorVisualProfiler::add_frame_metric(const Metric &p_metric) { + + ++last_metric; + if (last_metric >= frame_metrics.size()) + last_metric = 0; + + frame_metrics.write[last_metric] = p_metric; + // _make_metric_ptrs(frame_metrics.write[last_metric]); + + List<String> stack; + for (int i = 0; i < frame_metrics[last_metric].areas.size(); i++) { + String name = frame_metrics[last_metric].areas[i].name; + frame_metrics.write[last_metric].areas.write[i].color_cache = _get_color_from_signature(name); + String full_name; + + if (name[0] == '<') { + stack.pop_back(); + } + + if (stack.size()) { + full_name = stack.back()->get() + name; + } else { + full_name = name; + } + + if (name[0] == '>') { + + stack.push_back(full_name + "/"); + } + + frame_metrics.write[last_metric].areas.write[i].fullpath_cache = full_name; + } + + updating_frame = true; + cursor_metric_edit->set_max(frame_metrics[last_metric].frame_number); + cursor_metric_edit->set_min(MAX(frame_metrics[last_metric].frame_number - frame_metrics.size(), 0)); + + if (!seeking) { + cursor_metric_edit->set_value(frame_metrics[last_metric].frame_number); + if (hover_metric != -1) { + hover_metric++; + if (hover_metric >= frame_metrics.size()) { + hover_metric = 0; + } + } + } + updating_frame = false; + + if (frame_delay->is_stopped()) { + + frame_delay->set_wait_time(0.1); + frame_delay->start(); + } + + if (plot_delay->is_stopped()) { + plot_delay->set_wait_time(0.1); + plot_delay->start(); + } +} + +void EditorVisualProfiler::clear() { + + int metric_size = EditorSettings::get_singleton()->get("debugger/profiler_frame_history_size"); + metric_size = CLAMP(metric_size, 60, 1024); + frame_metrics.clear(); + frame_metrics.resize(metric_size); + last_metric = -1; + variables->clear(); + //activate->set_pressed(false); + + updating_frame = true; + cursor_metric_edit->set_min(0); + cursor_metric_edit->set_max(0); + cursor_metric_edit->set_value(0); + updating_frame = false; + hover_metric = -1; + seeking = false; +} + +String EditorVisualProfiler::_get_time_as_text(float p_time) { + + int dmode = display_mode->get_selected(); + + if (dmode == DISPLAY_FRAME_TIME) { + return rtos(p_time) + "ms"; + } else if (dmode == DISPLAY_FRAME_PERCENT) { + return String::num(p_time * 100 / graph_limit, 2) + "%"; + } + + return "err"; +} + +Color EditorVisualProfiler::_get_color_from_signature(const StringName &p_signature) const { + + Color bc = get_color("error_color", "Editor"); + double rot = ABS(double(p_signature.hash()) / double(0x7FFFFFFF)); + Color c; + c.set_hsv(rot, bc.get_s(), bc.get_v()); + return c.linear_interpolate(get_color("base_color", "Editor"), 0.07); +} + +void EditorVisualProfiler::_item_selected() { + + if (updating_frame) + return; + + TreeItem *item = variables->get_selected(); + if (!item) + return; + selected_area = item->get_metadata(0); + _update_plot(); +} + +void EditorVisualProfiler::_update_plot() { + + int w = graph->get_size().width; + int h = graph->get_size().height; + + bool reset_texture = false; + + int desired_len = w * h * 4; + + if (graph_image.size() != desired_len) { + reset_texture = true; + graph_image.resize(desired_len); + } + + uint8_t *wr = graph_image.ptrw(); + + //clear + for (int i = 0; i < desired_len; i += 4) { + wr[i + 0] = 0; + wr[i + 1] = 0; + wr[i + 2] = 0; + wr[i + 3] = 255; + } + + //find highest value + + float highest_cpu = 0; + float highest_gpu = 0; + + for (int i = 0; i < frame_metrics.size(); i++) { + const Metric &m = frame_metrics[i]; + if (!m.valid) + continue; + + if (m.areas.size()) { + highest_cpu = MAX(highest_cpu, m.areas[m.areas.size() - 1].cpu_time); + highest_gpu = MAX(highest_gpu, m.areas[m.areas.size() - 1].gpu_time); + } + } + + if (highest_cpu > 0 || highest_gpu > 0) { + + if (frame_relative->is_pressed()) { + highest_cpu = MAX(graph_limit, highest_cpu); + highest_gpu = MAX(graph_limit, highest_gpu); + } + + if (linked->is_pressed()) { + float highest = MAX(highest_cpu, highest_gpu); + highest_cpu = highest_gpu = highest; + } + + //means some data exists.. + highest_cpu *= 1.2; //leave some upper room + highest_gpu *= 1.2; //leave some upper room + graph_height_cpu = highest_cpu; + graph_height_gpu = highest_gpu; + + Vector<Color> columnv_cpu; + columnv_cpu.resize(h); + Color *column_cpu = columnv_cpu.ptrw(); + + Vector<Color> columnv_gpu; + columnv_gpu.resize(h); + Color *column_gpu = columnv_gpu.ptrw(); + + int half_w = w / 2; + for (int i = 0; i < half_w; i++) { + for (int j = 0; j < h; j++) { + column_cpu[j] = Color(0, 0, 0, 0); + column_gpu[j] = Color(0, 0, 0, 0); + } + + int current = i * frame_metrics.size() / half_w; + int next = (i + 1) * frame_metrics.size() / half_w; + if (next > frame_metrics.size()) { + next = frame_metrics.size(); + } + if (next == current) + next = current + 1; //just because for loop must work + + for (int j = current; j < next; j++) { + + //wrap + int idx = last_metric + 1 + j; + while (idx >= frame_metrics.size()) { + idx -= frame_metrics.size(); + } + + int area_count = frame_metrics[idx].areas.size(); + const Metric::Area *areas = frame_metrics[idx].areas.ptr(); + int prev_cpu = 0; + int prev_gpu = 0; + for (int k = 1; k < area_count; k++) { + int ofs_cpu = int(areas[k].cpu_time * h / highest_cpu); + ofs_cpu = CLAMP(ofs_cpu, 0, h - 1); + Color color = selected_area == areas[k - 1].fullpath_cache ? Color(1, 1, 1, 1) : areas[k - 1].color_cache; + + for (int l = prev_cpu; l < ofs_cpu; l++) { + column_cpu[h - l - 1] += color; + } + prev_cpu = ofs_cpu; + + int ofs_gpu = int(areas[k].gpu_time * h / highest_gpu); + ofs_gpu = CLAMP(ofs_gpu, 0, h - 1); + for (int l = prev_gpu; l < ofs_gpu; l++) { + column_gpu[h - l - 1] += color; + } + + prev_gpu = ofs_gpu; + } + } + + //plot CPU + for (int j = 0; j < h; j++) { + + uint8_t r, g, b; + + if (column_cpu[j].a == 0) { + r = 0; + g = 0; + b = 0; + } else { + r = CLAMP((column_cpu[j].r / column_cpu[j].a) * 255.0, 0, 255); + g = CLAMP((column_cpu[j].g / column_cpu[j].a) * 255.0, 0, 255); + b = CLAMP((column_cpu[j].b / column_cpu[j].a) * 255.0, 0, 255); + } + + int widx = (j * w + i) * 4; + wr[widx + 0] = r; + wr[widx + 1] = g; + wr[widx + 2] = b; + wr[widx + 3] = 255; + } + //plot GPU + for (int j = 0; j < h; j++) { + + uint8_t r, g, b; + + if (column_gpu[j].a == 0) { + r = 0; + g = 0; + b = 0; + } else { + r = CLAMP((column_gpu[j].r / column_gpu[j].a) * 255.0, 0, 255); + g = CLAMP((column_gpu[j].g / column_gpu[j].a) * 255.0, 0, 255); + b = CLAMP((column_gpu[j].b / column_gpu[j].a) * 255.0, 0, 255); + } + + int widx = (j * w + w / 2 + i) * 4; + wr[widx + 0] = r; + wr[widx + 1] = g; + wr[widx + 2] = b; + wr[widx + 3] = 255; + } + } + } + + Ref<Image> img; + img.instance(); + img->create(w, h, 0, Image::FORMAT_RGBA8, graph_image); + + if (reset_texture) { + + if (graph_texture.is_null()) { + graph_texture.instance(); + } + graph_texture->create_from_image(img); + } + + graph_texture->update(img, true); + + graph->set_texture(graph_texture); + graph->update(); +} + +void EditorVisualProfiler::_update_frame(bool p_focus_selected) { + + int cursor_metric = _get_cursor_index(); + + Ref<Texture> track_icon = get_icon("TrackColor", "EditorIcons"); + + ERR_FAIL_INDEX(cursor_metric, frame_metrics.size()); + + updating_frame = true; + variables->clear(); + + TreeItem *root = variables->create_item(); + const Metric &m = frame_metrics[cursor_metric]; + + List<TreeItem *> stack; + List<TreeItem *> categories; + + TreeItem *ensure_selected = nullptr; + + for (int i = 1; i < m.areas.size() - 1; i++) { + + TreeItem *parent = stack.size() ? stack.back()->get() : root; + + String name = m.areas[i].name; + + float cpu_time = m.areas[i].cpu_time; + float gpu_time = m.areas[i].gpu_time; + if (i < m.areas.size() - 1) { + cpu_time = m.areas[i + 1].cpu_time - cpu_time; + gpu_time = m.areas[i + 1].gpu_time - gpu_time; + } + + if (name.begins_with(">")) { + TreeItem *category = variables->create_item(parent); + + stack.push_back(category); + categories.push_back(category); + + name = name.substr(1, name.length()); + + category->set_text(0, name); + category->set_metadata(1, cpu_time); + category->set_metadata(2, gpu_time); + continue; + } + + if (name.begins_with("<")) { + stack.pop_back(); + continue; + } + TreeItem *category = variables->create_item(parent); + + for (List<TreeItem *>::Element *E = stack.front(); E; E = E->next()) { + float total_cpu = E->get()->get_metadata(1); + float total_gpu = E->get()->get_metadata(2); + total_cpu += cpu_time; + total_gpu += gpu_time; + E->get()->set_metadata(1, cpu_time); + E->get()->set_metadata(2, gpu_time); + } + + category->set_icon(0, track_icon); + category->set_icon_modulate(0, m.areas[i].color_cache); + category->set_selectable(0, true); + category->set_metadata(0, m.areas[i].fullpath_cache); + category->set_text(0, m.areas[i].name); + category->set_text(1, _get_time_as_text(cpu_time)); + category->set_metadata(1, m.areas[i].cpu_time); + category->set_text(2, _get_time_as_text(gpu_time)); + category->set_metadata(2, m.areas[i].gpu_time); + + if (selected_area == m.areas[i].fullpath_cache) { + category->select(0); + if (p_focus_selected) { + ensure_selected = category; + } + } + } + + for (List<TreeItem *>::Element *E = categories.front(); E; E = E->next()) { + float total_cpu = E->get()->get_metadata(1); + float total_gpu = E->get()->get_metadata(2); + E->get()->set_text(1, _get_time_as_text(total_cpu)); + E->get()->set_text(2, _get_time_as_text(total_gpu)); + } + + if (ensure_selected) { + variables->ensure_cursor_is_visible(); + } + updating_frame = false; +} + +void EditorVisualProfiler::_activate_pressed() { + + if (activate->is_pressed()) { + activate->set_icon(get_icon("Stop", "EditorIcons")); + activate->set_text(TTR("Stop")); + _clear_pressed(); //always clear on start + } else { + activate->set_icon(get_icon("Play", "EditorIcons")); + activate->set_text(TTR("Start")); + } + emit_signal("enable_profiling", activate->is_pressed()); +} + +void EditorVisualProfiler::_clear_pressed() { + + clear(); + _update_plot(); +} + +void EditorVisualProfiler::_notification(int p_what) { + + if (p_what == NOTIFICATION_ENTER_TREE) { + activate->set_icon(get_icon("Play", "EditorIcons")); + clear_button->set_icon(get_icon("Clear", "EditorIcons")); + } +} + +void EditorVisualProfiler::_graph_tex_draw() { + + if (last_metric < 0) + return; + Ref<Font> font = get_font("font", "Label"); + if (seeking) { + + int max_frames = frame_metrics.size(); + int frame = cursor_metric_edit->get_value() - (frame_metrics[last_metric].frame_number - max_frames + 1); + if (frame < 0) + frame = 0; + + int half_width = graph->get_size().x / 2; + int cur_x = frame * half_width / max_frames; + //cur_x /= 2.0; + + graph->draw_line(Vector2(cur_x, 0), Vector2(cur_x, graph->get_size().y), Color(1, 1, 1, 0.8)); + graph->draw_line(Vector2(cur_x + half_width, 0), Vector2(cur_x + half_width, graph->get_size().y), Color(1, 1, 1, 0.8)); + } + + if (graph_height_cpu > 0) { + int frame_y = graph->get_size().y - graph_limit * graph->get_size().y / graph_height_cpu - 1; + + int half_width = graph->get_size().x / 2; + + graph->draw_line(Vector2(0, frame_y), Vector2(half_width, frame_y), Color(1, 1, 1, 0.3)); + + String limit_str = String::num(graph_limit, 2); + graph->draw_string(font, Vector2(half_width - font->get_string_size(limit_str).x - 2, frame_y - 2), limit_str, Color(1, 1, 1, 0.6)); + } + + if (graph_height_gpu > 0) { + int frame_y = graph->get_size().y - graph_limit * graph->get_size().y / graph_height_gpu - 1; + + int half_width = graph->get_size().x / 2; + + graph->draw_line(Vector2(half_width, frame_y), Vector2(graph->get_size().x, frame_y), Color(1, 1, 1, 0.3)); + + String limit_str = String::num(graph_limit, 2); + graph->draw_string(font, Vector2(half_width * 2 - font->get_string_size(limit_str).x - 2, frame_y - 2), limit_str, Color(1, 1, 1, 0.6)); + } + + graph->draw_string(font, Vector2(font->get_string_size("X").x, font->get_ascent() + 2), "CPU:", Color(1, 1, 1, 0.8)); + graph->draw_string(font, Vector2(font->get_string_size("X").x + graph->get_size().width / 2, font->get_ascent() + 2), "GPU:", Color(1, 1, 1, 0.8)); + + /* + if (hover_metric != -1 && frame_metrics[hover_metric].valid) { + + int max_frames = frame_metrics.size(); + int frame = frame_metrics[hover_metric].frame_number - (frame_metrics[last_metric].frame_number - max_frames + 1); + if (frame < 0) + frame = 0; + + int cur_x = frame * graph->get_size().x / max_frames; + + graph->draw_line(Vector2(cur_x, 0), Vector2(cur_x, graph->get_size().y), Color(1, 1, 1, 0.4)); + } +*/ +} + +void EditorVisualProfiler::_graph_tex_mouse_exit() { + + hover_metric = -1; + graph->update(); +} + +void EditorVisualProfiler::_cursor_metric_changed(double) { + if (updating_frame) + return; + + graph->update(); + _update_frame(); +} + +void EditorVisualProfiler::_graph_tex_input(const Ref<InputEvent> &p_ev) { + + if (last_metric < 0) + return; + + Ref<InputEventMouse> me = p_ev; + Ref<InputEventMouseButton> mb = p_ev; + Ref<InputEventMouseMotion> mm = p_ev; + + if ( + (mb.is_valid() && mb->get_button_index() == BUTTON_LEFT && mb->is_pressed()) || + (mm.is_valid())) { + + int half_w = graph->get_size().width / 2; + int x = me->get_position().x; + if (x > half_w) { + x -= half_w; + } + x = x * frame_metrics.size() / half_w; + + bool show_hover = x >= 0 && x < frame_metrics.size(); + + if (x < 0) { + x = 0; + } + + if (x >= frame_metrics.size()) { + x = frame_metrics.size() - 1; + } + + int metric = frame_metrics.size() - x - 1; + metric = last_metric - metric; + while (metric < 0) { + metric += frame_metrics.size(); + } + + if (show_hover) { + + hover_metric = metric; + + } else { + hover_metric = -1; + } + + if (mb.is_valid() || mm->get_button_mask() & BUTTON_MASK_LEFT) { + //cursor_metric=x; + updating_frame = true; + + //metric may be invalid, so look for closest metric that is valid, this makes snap feel better + bool valid = false; + for (int i = 0; i < frame_metrics.size(); i++) { + + if (frame_metrics[metric].valid) { + valid = true; + break; + } + + metric++; + if (metric >= frame_metrics.size()) + metric = 0; + } + + if (!valid) { + return; + } + + cursor_metric_edit->set_value(frame_metrics[metric].frame_number); + + updating_frame = false; + + if (activate->is_pressed()) { + if (!seeking) { + // Break request is not required, just stop profiling + } + } + + seeking = true; + + if (!frame_delay->is_processing()) { + frame_delay->set_wait_time(0.1); + frame_delay->start(); + } + + bool touched_cpu = me->get_position().x < graph->get_size().width * 0.5; + + const Metric::Area *areas = frame_metrics[metric].areas.ptr(); + int area_count = frame_metrics[metric].areas.size(); + float posy = (1.0 - (me->get_position().y / graph->get_size().height)) * (touched_cpu ? graph_height_cpu : graph_height_gpu); + int last_valid = -1; + bool found = false; + for (int i = 0; i < area_count - 1; i++) { + + if (areas[i].name[0] != '<' && areas[i].name[0] != '>') { + last_valid = i; + } + float h = touched_cpu ? areas[i + 1].cpu_time : areas[i + 1].gpu_time; + + if (h > posy) { + found = true; + break; + } + } + + StringName area_found; + if (found && last_valid != -1) { + area_found = areas[last_valid].fullpath_cache; + } + + if (area_found != selected_area) { + selected_area = area_found; + _update_frame(true); + _update_plot(); + } + } + + graph->update(); + } +} + +int EditorVisualProfiler::_get_cursor_index() const { + + if (last_metric < 0) + return 0; + if (!frame_metrics[last_metric].valid) + return 0; + + int diff = (frame_metrics[last_metric].frame_number - cursor_metric_edit->get_value()); + + int idx = last_metric - diff; + while (idx < 0) { + idx += frame_metrics.size(); + } + + return idx; +} + +void EditorVisualProfiler::disable_seeking() { + + seeking = false; + graph->update(); +} + +void EditorVisualProfiler::_combo_changed(int) { + + _update_frame(); + _update_plot(); +} + +void EditorVisualProfiler::_bind_methods() { + + ClassDB::bind_method(D_METHOD("_update_frame"), &EditorVisualProfiler::_update_frame, DEFVAL(false)); + ClassDB::bind_method(D_METHOD("_update_plot"), &EditorVisualProfiler::_update_plot); + ClassDB::bind_method(D_METHOD("_activate_pressed"), &EditorVisualProfiler::_activate_pressed); + ClassDB::bind_method(D_METHOD("_clear_pressed"), &EditorVisualProfiler::_clear_pressed); + ClassDB::bind_method(D_METHOD("_graph_tex_draw"), &EditorVisualProfiler::_graph_tex_draw); + ClassDB::bind_method(D_METHOD("_graph_tex_input"), &EditorVisualProfiler::_graph_tex_input); + ClassDB::bind_method(D_METHOD("_graph_tex_mouse_exit"), &EditorVisualProfiler::_graph_tex_mouse_exit); + ClassDB::bind_method(D_METHOD("_cursor_metric_changed"), &EditorVisualProfiler::_cursor_metric_changed); + ClassDB::bind_method(D_METHOD("_combo_changed"), &EditorVisualProfiler::_combo_changed); + + ClassDB::bind_method(D_METHOD("_item_selected"), &EditorVisualProfiler::_item_selected); + ADD_SIGNAL(MethodInfo("enable_profiling", PropertyInfo(Variant::BOOL, "enable"))); +} + +void EditorVisualProfiler::set_enabled(bool p_enable) { + + activate->set_disabled(!p_enable); +} + +bool EditorVisualProfiler::is_profiling() { + return activate->is_pressed(); +} + +Vector<Vector<String> > EditorVisualProfiler::get_data_as_csv() const { + Vector<Vector<String> > res; +#if 0 + if (frame_metrics.empty()) { + return res; + } + + // signatures + Vector<String> signatures; + const Vector<EditorFrameProfiler::Metric::Category> &categories = frame_metrics[0].categories; + + for (int j = 0; j < categories.size(); j++) { + + const EditorFrameProfiler::Metric::Category &c = categories[j]; + signatures.push_back(c.signature); + + for (int k = 0; k < c.items.size(); k++) { + signatures.push_back(c.items[k].signature); + } + } + res.push_back(signatures); + + // values + Vector<String> values; + values.resize(signatures.size()); + + int index = last_metric; + + for (int i = 0; i < frame_metrics.size(); i++) { + + ++index; + + if (index >= frame_metrics.size()) { + index = 0; + } + + if (!frame_metrics[index].valid) { + continue; + } + int it = 0; + const Vector<EditorFrameProfiler::Metric::Category> &frame_cat = frame_metrics[index].categories; + + for (int j = 0; j < frame_cat.size(); j++) { + + const EditorFrameProfiler::Metric::Category &c = frame_cat[j]; + values.write[it++] = String::num_real(c.total_time); + + for (int k = 0; k < c.items.size(); k++) { + values.write[it++] = String::num_real(c.items[k].total); + } + } + res.push_back(values); + } +#endif + return res; +} + +EditorVisualProfiler::EditorVisualProfiler() { + + HBoxContainer *hb = memnew(HBoxContainer); + add_child(hb); + activate = memnew(Button); + activate->set_toggle_mode(true); + activate->set_text(TTR("Start")); + activate->connect_compat("pressed", this, "_activate_pressed"); + hb->add_child(activate); + + clear_button = memnew(Button); + clear_button->set_text(TTR("Clear")); + clear_button->connect_compat("pressed", this, "_clear_pressed"); + hb->add_child(clear_button); + + hb->add_child(memnew(Label(TTR("Measure:")))); + + display_mode = memnew(OptionButton); + display_mode->add_item(TTR("Frame Time (msec)")); + display_mode->add_item(TTR("Frame %")); + display_mode->connect_compat("item_selected", this, "_combo_changed"); + + hb->add_child(display_mode); + + frame_relative = memnew(CheckBox(TTR("Fit to Frame"))); + frame_relative->set_pressed(true); + hb->add_child(frame_relative); + frame_relative->connect_compat("pressed", this, "_update_plot"); + linked = memnew(CheckBox(TTR("Linked"))); + linked->set_pressed(true); + hb->add_child(linked); + linked->connect_compat("pressed", this, "_update_plot"); + + hb->add_spacer(); + + hb->add_child(memnew(Label(TTR("Frame #:")))); + + cursor_metric_edit = memnew(SpinBox); + cursor_metric_edit->set_h_size_flags(SIZE_FILL); + hb->add_child(cursor_metric_edit); + cursor_metric_edit->connect_compat("value_changed", this, "_cursor_metric_changed"); + + hb->add_constant_override("separation", 8 * EDSCALE); + + h_split = memnew(HSplitContainer); + add_child(h_split); + h_split->set_v_size_flags(SIZE_EXPAND_FILL); + + variables = memnew(Tree); + variables->set_custom_minimum_size(Size2(300, 0) * EDSCALE); + variables->set_hide_folding(true); + h_split->add_child(variables); + variables->set_hide_root(true); + variables->set_columns(3); + variables->set_column_titles_visible(true); + variables->set_column_title(0, TTR("Name")); + variables->set_column_expand(0, true); + variables->set_column_min_width(0, 60); + variables->set_column_title(1, TTR("CPU")); + variables->set_column_expand(1, false); + variables->set_column_min_width(1, 60 * EDSCALE); + variables->set_column_title(2, TTR("GPU")); + variables->set_column_expand(2, false); + variables->set_column_min_width(2, 60 * EDSCALE); + variables->connect_compat("cell_selected", this, "_item_selected"); + + graph = memnew(TextureRect); + graph->set_expand(true); + graph->set_mouse_filter(MOUSE_FILTER_STOP); + //graph->set_ignore_mouse(false); + graph->connect_compat("draw", this, "_graph_tex_draw"); + graph->connect_compat("gui_input", this, "_graph_tex_input"); + graph->connect_compat("mouse_exited", this, "_graph_tex_mouse_exit"); + + h_split->add_child(graph); + graph->set_h_size_flags(SIZE_EXPAND_FILL); + + int metric_size = CLAMP(int(EDITOR_DEF("debugger/profiler_frame_history_size", 600)), 60, 1024); + frame_metrics.resize(metric_size); + last_metric = -1; + //cursor_metric=-1; + hover_metric = -1; + + //display_mode=DISPLAY_FRAME_TIME; + + frame_delay = memnew(Timer); + frame_delay->set_wait_time(0.1); + frame_delay->set_one_shot(true); + add_child(frame_delay); + frame_delay->connect_compat("timeout", this, "_update_frame"); + + plot_delay = memnew(Timer); + plot_delay->set_wait_time(0.1); + plot_delay->set_one_shot(true); + add_child(plot_delay); + plot_delay->connect_compat("timeout", this, "_update_plot"); + + seeking = false; + graph_height_cpu = 1; + graph_height_gpu = 1; + + graph_limit = 1000 / 60.0; + + //activate->set_disabled(true); +} diff --git a/editor/editor_visual_profiler.h b/editor/editor_visual_profiler.h new file mode 100644 index 0000000000..5194c08b96 --- /dev/null +++ b/editor/editor_visual_profiler.h @@ -0,0 +1,154 @@ +/*************************************************************************/ +/* editor_visual_profiler.h */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*************************************************************************/ + +#ifndef EDITOR_FRAME_PROFILER_H +#define EDITOR_FRAME_PROFILER_H + +#include "scene/gui/box_container.h" +#include "scene/gui/button.h" +#include "scene/gui/check_box.h" +#include "scene/gui/label.h" +#include "scene/gui/option_button.h" +#include "scene/gui/spin_box.h" +#include "scene/gui/split_container.h" +#include "scene/gui/texture_rect.h" +#include "scene/gui/tree.h" + +class EditorVisualProfiler : public VBoxContainer { + + GDCLASS(EditorVisualProfiler, VBoxContainer); + +public: + struct Metric { + + bool valid; + + uint64_t frame_number; + + struct Area { + String name; + Color color_cache; + StringName fullpath_cache; + float cpu_time = 0; + float gpu_time = 0; + }; + + Vector<Area> areas; + + Metric() { + valid = false; + } + }; + + enum DisplayTimeMode { + DISPLAY_FRAME_TIME, + DISPLAY_FRAME_PERCENT, + }; + +private: + Button *activate; + Button *clear_button; + + TextureRect *graph; + Ref<ImageTexture> graph_texture; + Vector<uint8_t> graph_image; + Tree *variables; + HSplitContainer *h_split; + CheckBox *frame_relative; + CheckBox *linked; + + OptionButton *display_mode; + + SpinBox *cursor_metric_edit; + + Vector<Metric> frame_metrics; + int last_metric; + + StringName selected_area; + + bool updating_frame; + + //int cursor_metric; + int hover_metric; + + float graph_height_cpu; + float graph_height_gpu; + + float graph_limit; + + bool seeking; + + Timer *frame_delay; + Timer *plot_delay; + + void _update_frame(bool p_focus_selected = false); + + void _activate_pressed(); + void _clear_pressed(); + + String _get_time_as_text(float p_time); + + //void _make_metric_ptrs(Metric &m); + void _item_selected(); + + void _update_plot(); + + void _graph_tex_mouse_exit(); + + void _graph_tex_draw(); + void _graph_tex_input(const Ref<InputEvent> &p_ev); + + int _get_cursor_index() const; + + Color _get_color_from_signature(const StringName &p_signature) const; + + void _cursor_metric_changed(double); + + void _combo_changed(int); + +protected: + void _notification(int p_what); + static void _bind_methods(); + +public: + void add_frame_metric(const Metric &p_metric); + void set_enabled(bool p_enable); + bool is_profiling(); + bool is_seeking() { return seeking; } + void disable_seeking(); + + void clear(); + + Vector<Vector<String> > get_data_as_csv() const; + + EditorVisualProfiler(); +}; + +#endif // EDITOR_FRAME_PROFILER_H diff --git a/editor/export_template_manager.cpp b/editor/export_template_manager.cpp index 7ed6688154..5ff4cb6246 100644 --- a/editor/export_template_manager.cpp +++ b/editor/export_template_manager.cpp @@ -93,14 +93,14 @@ void ExportTemplateManager::_update_template_list() { Button *redownload = memnew(Button); redownload->set_text(TTR("Redownload")); current_hb->add_child(redownload); - redownload->connect("pressed", this, "_download_template", varray(current_version)); + redownload->connect_compat("pressed", this, "_download_template", varray(current_version)); } Button *uninstall = memnew(Button); uninstall->set_text(TTR("Uninstall")); current_hb->add_child(uninstall); current->set_text(current_version + " " + TTR("(Installed)")); - uninstall->connect("pressed", this, "_uninstall_template", varray(current_version)); + uninstall->connect_compat("pressed", this, "_uninstall_template", varray(current_version)); } else { current->add_color_override("font_color", get_color("error_color", "Editor")); @@ -112,7 +112,7 @@ void ExportTemplateManager::_update_template_list() { redownload->set_tooltip(TTR("Official export templates aren't available for development builds.")); } - redownload->connect("pressed", this, "_download_template", varray(current_version)); + redownload->connect_compat("pressed", this, "_download_template", varray(current_version)); current_hb->add_child(redownload); current->set_text(current_version + " " + TTR("(Missing)")); } @@ -134,7 +134,7 @@ void ExportTemplateManager::_update_template_list() { uninstall->set_text(TTR("Uninstall")); hbc->add_child(uninstall); - uninstall->connect("pressed", this, "_uninstall_template", varray(E->get())); + uninstall->connect_compat("pressed", this, "_uninstall_template", varray(E->get())); installed_vb->add_child(hbc); } @@ -350,7 +350,7 @@ void ExportTemplateManager::ok_pressed() { template_open->popup_centered_ratio(); } -void ExportTemplateManager::_http_download_mirror_completed(int p_status, int p_code, const PoolStringArray &headers, const PoolByteArray &p_data) { +void ExportTemplateManager::_http_download_mirror_completed(int p_status, int p_code, const PackedStringArray &headers, const PackedByteArray &p_data) { if (p_status != HTTPRequest::RESULT_SUCCESS || p_code != 200) { EditorNode::get_singleton()->show_warning(TTR("Error getting the list of mirrors.")); @@ -359,8 +359,8 @@ void ExportTemplateManager::_http_download_mirror_completed(int p_status, int p_ String mirror_str; { - PoolByteArray::Read r = p_data.read(); - mirror_str.parse_utf8((const char *)r.ptr(), p_data.size()); + const uint8_t *r = p_data.ptr(); + mirror_str.parse_utf8((const char *)r, p_data.size()); } template_list_state->hide(); @@ -385,7 +385,7 @@ void ExportTemplateManager::_http_download_mirror_completed(int p_status, int p_ ERR_CONTINUE(!m.has("url") || !m.has("name")); LinkButton *lb = memnew(LinkButton); lb->set_text(m["name"]); - lb->connect("pressed", this, "_begin_template_download", varray(m["url"])); + lb->connect_compat("pressed", this, "_begin_template_download", varray(m["url"])); template_list->add_child(lb); mirrors_found = true; } @@ -396,7 +396,7 @@ void ExportTemplateManager::_http_download_mirror_completed(int p_status, int p_ return; } } -void ExportTemplateManager::_http_download_templates_completed(int p_status, int p_code, const PoolStringArray &headers, const PoolByteArray &p_data) { +void ExportTemplateManager::_http_download_templates_completed(int p_status, int p_code, const PackedStringArray &headers, const PackedByteArray &p_data) { switch (p_status) { @@ -689,14 +689,14 @@ ExportTemplateManager::ExportTemplateManager() { remove_confirm = memnew(ConfirmationDialog); remove_confirm->set_title(TTR("Remove Template")); add_child(remove_confirm); - remove_confirm->connect("confirmed", this, "_uninstall_template_confirm"); + remove_confirm->connect_compat("confirmed", this, "_uninstall_template_confirm"); template_open = memnew(FileDialog); template_open->set_title(TTR("Select Template File")); template_open->add_filter("*.tpz ; " + TTR("Godot Export Templates")); template_open->set_access(FileDialog::ACCESS_FILESYSTEM); template_open->set_mode(FileDialog::MODE_OPEN_FILE); - template_open->connect("file_selected", this, "_install_from_file", varray(true)); + template_open->connect_compat("file_selected", this, "_install_from_file", varray(true)); add_child(template_open); set_title(TTR("Export Template Manager")); @@ -704,18 +704,18 @@ ExportTemplateManager::ExportTemplateManager() { request_mirror = memnew(HTTPRequest); add_child(request_mirror); - request_mirror->connect("request_completed", this, "_http_download_mirror_completed"); + request_mirror->connect_compat("request_completed", this, "_http_download_mirror_completed"); download_templates = memnew(HTTPRequest); add_child(download_templates); - download_templates->connect("request_completed", this, "_http_download_templates_completed"); + download_templates->connect_compat("request_completed", this, "_http_download_templates_completed"); template_downloader = memnew(AcceptDialog); template_downloader->set_title(TTR("Download Templates")); template_downloader->get_ok()->set_text(TTR("Close")); template_downloader->set_exclusive(true); add_child(template_downloader); - template_downloader->connect("popup_hide", this, "_window_template_downloader_closed"); + template_downloader->connect_compat("popup_hide", this, "_window_template_downloader_closed"); VBoxContainer *vbc = memnew(VBoxContainer); template_downloader->add_child(vbc); diff --git a/editor/export_template_manager.h b/editor/export_template_manager.h index 96e61a6569..6ebc7fd131 100644 --- a/editor/export_template_manager.h +++ b/editor/export_template_manager.h @@ -72,8 +72,8 @@ class ExportTemplateManager : public ConfirmationDialog { virtual void ok_pressed(); bool _install_from_file(const String &p_file, bool p_use_progress = true); - void _http_download_mirror_completed(int p_status, int p_code, const PoolStringArray &headers, const PoolByteArray &p_data); - void _http_download_templates_completed(int p_status, int p_code, const PoolStringArray &headers, const PoolByteArray &p_data); + void _http_download_mirror_completed(int p_status, int p_code, const PackedStringArray &headers, const PackedByteArray &p_data); + void _http_download_templates_completed(int p_status, int p_code, const PackedStringArray &headers, const PackedByteArray &p_data); void _begin_template_download(const String &p_url); diff --git a/editor/filesystem_dock.cpp b/editor/filesystem_dock.cpp index 684942dbad..4172570089 100644 --- a/editor/filesystem_dock.cpp +++ b/editor/filesystem_dock.cpp @@ -45,8 +45,8 @@ #include "scene/main/viewport.h" #include "scene/resources/packed_scene.h" -Ref<Texture> FileSystemDock::_get_tree_item_icon(EditorFileSystemDirectory *p_dir, int p_idx) { - Ref<Texture> file_icon; +Ref<Texture2D> FileSystemDock::_get_tree_item_icon(EditorFileSystemDirectory *p_dir, int p_idx) { + Ref<Texture2D> file_icon; if (!p_dir->get_file_import_is_valid(p_idx)) { file_icon = get_icon("ImportFail", "EditorIcons"); } else { @@ -198,11 +198,11 @@ void FileSystemDock::_update_tree(const Vector<String> &p_uncollapsed_paths, boo if (!fave.begins_with("res://")) continue; - Ref<Texture> folder_icon = get_icon("Folder", "EditorIcons"); + Ref<Texture2D> folder_icon = get_icon("Folder", "EditorIcons"); const Color folder_color = get_color("folder_icon_modulate", "FileDialog"); String text; - Ref<Texture> icon; + Ref<Texture2D> icon; Color color; if (fave == "res://") { text = "/"; @@ -300,19 +300,19 @@ void FileSystemDock::_notification(int p_what) { if (initialized) return; initialized = true; - EditorFeatureProfileManager::get_singleton()->connect("current_feature_profile_changed", this, "_feature_profile_changed"); + EditorFeatureProfileManager::get_singleton()->connect_compat("current_feature_profile_changed", this, "_feature_profile_changed"); - EditorFileSystem::get_singleton()->connect("filesystem_changed", this, "_fs_changed"); - EditorResourcePreview::get_singleton()->connect("preview_invalidated", this, "_preview_invalidated"); + EditorFileSystem::get_singleton()->connect_compat("filesystem_changed", this, "_fs_changed"); + EditorResourcePreview::get_singleton()->connect_compat("preview_invalidated", this, "_preview_invalidated"); String ei = "EditorIcons"; button_reload->set_icon(get_icon("Reload", ei)); button_toggle_display_mode->set_icon(get_icon("Panels2", ei)); - button_file_list_display_mode->connect("pressed", this, "_toggle_file_display"); + button_file_list_display_mode->connect_compat("pressed", this, "_toggle_file_display"); - files->connect("item_activated", this, "_file_list_activate_file"); - button_hist_next->connect("pressed", this, "_fw_history"); - button_hist_prev->connect("pressed", this, "_bw_history"); + files->connect_compat("item_activated", this, "_file_list_activate_file"); + button_hist_next->connect_compat("pressed", this, "_fw_history"); + button_hist_prev->connect_compat("pressed", this, "_bw_history"); tree_search_box->set_right_icon(get_icon("Search", ei)); tree_search_box->set_clear_button_enabled(true); file_list_search_box->set_right_icon(get_icon("Search", ei)); @@ -320,10 +320,10 @@ void FileSystemDock::_notification(int p_what) { button_hist_next->set_icon(get_icon("Forward", ei)); button_hist_prev->set_icon(get_icon("Back", ei)); - file_list_popup->connect("id_pressed", this, "_file_list_rmb_option"); - tree_popup->connect("id_pressed", this, "_tree_rmb_option"); + file_list_popup->connect_compat("id_pressed", this, "_file_list_rmb_option"); + tree_popup->connect_compat("id_pressed", this, "_tree_rmb_option"); - current_path->connect("text_entered", this, "_navigate_to_path"); + current_path->connect_compat("text_entered", this, "_navigate_to_path"); always_show_folders = bool(EditorSettings::get_singleton()->get("docks/filesystem/always_show_folders")); @@ -496,7 +496,7 @@ void FileSystemDock::navigate_to_path(const String &p_path) { _navigate_to_path(p_path); } -void FileSystemDock::_file_list_thumbnail_done(const String &p_path, const Ref<Texture> &p_preview, const Ref<Texture> &p_small_preview, const Variant &p_udata) { +void FileSystemDock::_file_list_thumbnail_done(const String &p_path, const Ref<Texture2D> &p_preview, const Ref<Texture2D> &p_small_preview, const Variant &p_udata) { if ((file_list_vb->is_visible_in_tree() || path == p_path.get_base_dir()) && p_preview.is_valid()) { Array uarr = p_udata; int idx = uarr[0]; @@ -512,7 +512,7 @@ void FileSystemDock::_file_list_thumbnail_done(const String &p_path, const Ref<T } } -void FileSystemDock::_tree_thumbnail_done(const String &p_path, const Ref<Texture> &p_preview, const Ref<Texture> &p_small_preview, const Variant &p_udata) { +void FileSystemDock::_tree_thumbnail_done(const String &p_path, const Ref<Texture2D> &p_preview, const Ref<Texture2D> &p_small_preview, const Variant &p_udata) { if (p_small_preview.is_valid()) { Array uarr = p_udata; if (tree_update_id == (int)uarr[0]) { @@ -613,9 +613,9 @@ void FileSystemDock::_update_file_list(bool p_keep_selection) { String ei = "EditorIcons"; int thumbnail_size = EditorSettings::get_singleton()->get("docks/filesystem/thumbnail_size"); thumbnail_size *= EDSCALE; - Ref<Texture> folder_thumbnail; - Ref<Texture> file_thumbnail; - Ref<Texture> file_thumbnail_broken; + Ref<Texture2D> folder_thumbnail; + Ref<Texture2D> file_thumbnail; + Ref<Texture2D> file_thumbnail_broken; bool use_thumbnails = (file_list_display_mode == FILE_LIST_DISPLAY_THUMBNAILS); @@ -645,7 +645,7 @@ void FileSystemDock::_update_file_list(bool p_keep_selection) { files->set_fixed_icon_size(Size2()); } - Ref<Texture> folder_icon = (use_thumbnails) ? folder_thumbnail : get_icon("folder", "FileDialog"); + Ref<Texture2D> folder_icon = (use_thumbnails) ? folder_thumbnail : get_icon("folder", "FileDialog"); const Color folder_color = get_color("folder_icon_modulate", "FileDialog"); // Build the FileInfo list. @@ -656,7 +656,7 @@ void FileSystemDock::_update_file_list(bool p_keep_selection) { for (int i = 0; i < favorites.size(); i++) { String favorite = favorites[i]; String text; - Ref<Texture> icon; + Ref<Texture2D> icon; if (favorite == "res://") { text = "/"; icon = folder_icon; @@ -759,8 +759,8 @@ void FileSystemDock::_update_file_list(bool p_keep_selection) { String fpath = finfo->path; String ftype = finfo->type; - Ref<Texture> type_icon; - Ref<Texture> big_icon; + Ref<Texture2D> type_icon; + Ref<Texture2D> big_icon; String tooltip = fpath; @@ -2506,7 +2506,7 @@ void FileSystemDock::_bind_methods() { ClassDB::bind_method(D_METHOD("_feature_profile_changed"), &FileSystemDock::_feature_profile_changed); ADD_SIGNAL(MethodInfo("inherit", PropertyInfo(Variant::STRING, "file"))); - ADD_SIGNAL(MethodInfo("instance", PropertyInfo(Variant::POOL_STRING_ARRAY, "files"))); + ADD_SIGNAL(MethodInfo("instance", PropertyInfo(Variant::PACKED_STRING_ARRAY, "files"))); ADD_SIGNAL(MethodInfo("file_removed", PropertyInfo(Variant::STRING, "file"))); ADD_SIGNAL(MethodInfo("folder_removed", PropertyInfo(Variant::STRING, "folder"))); @@ -2552,7 +2552,7 @@ FileSystemDock::FileSystemDock(EditorNode *p_editor) { button_reload = memnew(Button); button_reload->set_flat(true); - button_reload->connect("pressed", this, "_rescan"); + button_reload->connect_compat("pressed", this, "_rescan"); button_reload->set_focus_mode(FOCUS_NONE); button_reload->set_tooltip(TTR("Re-Scan Filesystem")); button_reload->hide(); @@ -2561,7 +2561,7 @@ FileSystemDock::FileSystemDock(EditorNode *p_editor) { button_toggle_display_mode = memnew(Button); button_toggle_display_mode->set_flat(true); button_toggle_display_mode->set_toggle_mode(true); - button_toggle_display_mode->connect("toggled", this, "_toggle_split_mode"); + button_toggle_display_mode->connect_compat("toggled", this, "_toggle_split_mode"); button_toggle_display_mode->set_focus_mode(FOCUS_NONE); button_toggle_display_mode->set_tooltip(TTR("Toggle Split Mode")); toolbar_hbc->add_child(button_toggle_display_mode); @@ -2573,7 +2573,7 @@ FileSystemDock::FileSystemDock(EditorNode *p_editor) { tree_search_box = memnew(LineEdit); tree_search_box->set_h_size_flags(SIZE_EXPAND_FILL); tree_search_box->set_placeholder(TTR("Search files")); - tree_search_box->connect("text_changed", this, "_search_changed", varray(tree_search_box)); + tree_search_box->connect_compat("text_changed", this, "_search_changed", varray(tree_search_box)); toolbar2_hbc->add_child(tree_search_box); file_list_popup = memnew(PopupMenu); @@ -2597,12 +2597,12 @@ FileSystemDock::FileSystemDock(EditorNode *p_editor) { tree->set_custom_minimum_size(Size2(0, 15 * EDSCALE)); split_box->add_child(tree); - tree->connect("item_activated", this, "_tree_activate_file"); - tree->connect("multi_selected", this, "_tree_multi_selected"); - tree->connect("item_rmb_selected", this, "_tree_rmb_select"); - tree->connect("empty_rmb", this, "_tree_rmb_empty"); - tree->connect("nothing_selected", this, "_tree_empty_selected"); - tree->connect("gui_input", this, "_tree_gui_input"); + tree->connect_compat("item_activated", this, "_tree_activate_file"); + tree->connect_compat("multi_selected", this, "_tree_multi_selected"); + tree->connect_compat("item_rmb_selected", this, "_tree_rmb_select"); + tree->connect_compat("empty_rmb", this, "_tree_rmb_empty"); + tree->connect_compat("nothing_selected", this, "_tree_empty_selected"); + tree->connect_compat("gui_input", this, "_tree_gui_input"); file_list_vb = memnew(VBoxContainer); file_list_vb->set_v_size_flags(SIZE_EXPAND_FILL); @@ -2614,7 +2614,7 @@ FileSystemDock::FileSystemDock(EditorNode *p_editor) { file_list_search_box = memnew(LineEdit); file_list_search_box->set_h_size_flags(SIZE_EXPAND_FILL); file_list_search_box->set_placeholder(TTR("Search files")); - file_list_search_box->connect("text_changed", this, "_search_changed", varray(file_list_search_box)); + file_list_search_box->connect_compat("text_changed", this, "_search_changed", varray(file_list_search_box)); path_hb->add_child(file_list_search_box); button_file_list_display_mode = memnew(ToolButton); @@ -2624,10 +2624,10 @@ FileSystemDock::FileSystemDock(EditorNode *p_editor) { files->set_v_size_flags(SIZE_EXPAND_FILL); files->set_select_mode(ItemList::SELECT_MULTI); files->set_drag_forwarding(this); - files->connect("item_rmb_selected", this, "_file_list_rmb_select"); - files->connect("gui_input", this, "_file_list_gui_input"); - files->connect("multi_selected", this, "_file_multi_selected"); - files->connect("rmb_clicked", this, "_file_list_rmb_pressed"); + files->connect_compat("item_rmb_selected", this, "_file_list_rmb_select"); + files->connect_compat("gui_input", this, "_file_list_gui_input"); + files->connect_compat("multi_selected", this, "_file_multi_selected"); + files->connect_compat("rmb_clicked", this, "_file_list_rmb_pressed"); files->set_custom_minimum_size(Size2(0, 15 * EDSCALE)); files->set_allow_rmb_select(true); file_list_vb->add_child(files); @@ -2651,14 +2651,14 @@ FileSystemDock::FileSystemDock(EditorNode *p_editor) { add_child(owners_editor); remove_dialog = memnew(DependencyRemoveDialog); - remove_dialog->connect("file_removed", this, "_file_deleted"); - remove_dialog->connect("folder_removed", this, "_folder_deleted"); + remove_dialog->connect_compat("file_removed", this, "_file_deleted"); + remove_dialog->connect_compat("folder_removed", this, "_folder_deleted"); add_child(remove_dialog); move_dialog = memnew(EditorDirDialog); move_dialog->get_ok()->set_text(TTR("Move")); add_child(move_dialog); - move_dialog->connect("dir_selected", this, "_move_operation_confirm"); + move_dialog->connect_compat("dir_selected", this, "_move_operation_confirm"); rename_dialog = memnew(ConfirmationDialog); VBoxContainer *rename_dialog_vb = memnew(VBoxContainer); @@ -2669,13 +2669,13 @@ FileSystemDock::FileSystemDock(EditorNode *p_editor) { rename_dialog->get_ok()->set_text(TTR("Rename")); add_child(rename_dialog); rename_dialog->register_text_enter(rename_dialog_text); - rename_dialog->connect("confirmed", this, "_rename_operation_confirm"); + rename_dialog->connect_compat("confirmed", this, "_rename_operation_confirm"); overwrite_dialog = memnew(ConfirmationDialog); overwrite_dialog->set_text(TTR("There is already file or folder with the same name in this location.")); overwrite_dialog->get_ok()->set_text(TTR("Overwrite")); add_child(overwrite_dialog); - overwrite_dialog->connect("confirmed", this, "_move_with_overwrite"); + overwrite_dialog->connect_compat("confirmed", this, "_move_with_overwrite"); duplicate_dialog = memnew(ConfirmationDialog); VBoxContainer *duplicate_dialog_vb = memnew(VBoxContainer); @@ -2686,7 +2686,7 @@ FileSystemDock::FileSystemDock(EditorNode *p_editor) { duplicate_dialog->get_ok()->set_text(TTR("Duplicate")); add_child(duplicate_dialog); duplicate_dialog->register_text_enter(duplicate_dialog_text); - duplicate_dialog->connect("confirmed", this, "_duplicate_operation_confirm"); + duplicate_dialog->connect_compat("confirmed", this, "_duplicate_operation_confirm"); make_dir_dialog = memnew(ConfirmationDialog); make_dir_dialog->set_title(TTR("Create Folder")); @@ -2697,7 +2697,7 @@ FileSystemDock::FileSystemDock(EditorNode *p_editor) { make_folder_dialog_vb->add_margin_child(TTR("Name:"), make_dir_dialog_text); add_child(make_dir_dialog); make_dir_dialog->register_text_enter(make_dir_dialog_text); - make_dir_dialog->connect("confirmed", this, "_make_dir_confirm"); + make_dir_dialog->connect_compat("confirmed", this, "_make_dir_confirm"); make_scene_dialog = memnew(ConfirmationDialog); make_scene_dialog->set_title(TTR("Create Scene")); @@ -2708,7 +2708,7 @@ FileSystemDock::FileSystemDock(EditorNode *p_editor) { make_scene_dialog_vb->add_margin_child(TTR("Name:"), make_scene_dialog_text); add_child(make_scene_dialog); make_scene_dialog->register_text_enter(make_scene_dialog_text); - make_scene_dialog->connect("confirmed", this, "_make_scene_confirm"); + make_scene_dialog->connect_compat("confirmed", this, "_make_scene_confirm"); make_script_dialog = memnew(ScriptCreateDialog); make_script_dialog->set_title(TTR("Create Script")); @@ -2717,7 +2717,7 @@ FileSystemDock::FileSystemDock(EditorNode *p_editor) { new_resource_dialog = memnew(CreateDialog); add_child(new_resource_dialog); new_resource_dialog->set_base_type("Resource"); - new_resource_dialog->connect("create", this, "_resource_created"); + new_resource_dialog->connect_compat("create", this, "_resource_created"); searched_string = String(); uncollapsed_paths_before_search = Vector<String>(); diff --git a/editor/filesystem_dock.h b/editor/filesystem_dock.h index 49692c8349..d20d4add4e 100644 --- a/editor/filesystem_dock.h +++ b/editor/filesystem_dock.h @@ -176,7 +176,7 @@ private: ItemList *files; bool import_dock_needs_update; - Ref<Texture> _get_tree_item_icon(EditorFileSystemDirectory *p_dir, int p_idx); + Ref<Texture2D> _get_tree_item_icon(EditorFileSystemDirectory *p_dir, int p_idx); bool _create_tree(TreeItem *p_parent, EditorFileSystemDirectory *p_dir, Vector<String> &uncollapsed_paths, bool p_select_in_favorites, bool p_unfold_path = false); Vector<String> _compute_uncollapsed_paths(); void _update_tree(const Vector<String> &p_uncollapsed_paths = Vector<String>(), bool p_uncollapse_root = false, bool p_select_in_favorites = false, bool p_unfold_path = false); @@ -269,8 +269,8 @@ private: void _get_drag_target_folder(String &target, bool &target_favorites, const Point2 &p_point, Control *p_from) const; void _preview_invalidated(const String &p_path); - void _file_list_thumbnail_done(const String &p_path, const Ref<Texture> &p_preview, const Ref<Texture> &p_small_preview, const Variant &p_udata); - void _tree_thumbnail_done(const String &p_path, const Ref<Texture> &p_preview, const Ref<Texture> &p_small_preview, const Variant &p_udata); + void _file_list_thumbnail_done(const String &p_path, const Ref<Texture2D> &p_preview, const Ref<Texture2D> &p_small_preview, const Variant &p_udata); + void _tree_thumbnail_done(const String &p_path, const Ref<Texture2D> &p_preview, const Ref<Texture2D> &p_small_preview, const Variant &p_udata); void _update_display_mode(bool p_force = false); diff --git a/editor/find_in_files.cpp b/editor/find_in_files.cpp index b24a5c38f2..5c012183e7 100644 --- a/editor/find_in_files.cpp +++ b/editor/find_in_files.cpp @@ -47,7 +47,7 @@ const char *FindInFiles::SIGNAL_RESULT_FOUND = "result_found"; const char *FindInFiles::SIGNAL_FINISHED = "finished"; -// TODO Would be nice in Vector and PoolVectors +// TODO Would be nice in Vector and Vectors template <typename T> inline void pop_back(T &container) { container.resize(container.size() - 1); @@ -132,8 +132,8 @@ void FindInFiles::start() { // Init search _current_dir = ""; - PoolStringArray init_folder; - init_folder.append(_root_dir); + PackedStringArray init_folder; + init_folder.push_back(_root_dir); _folders_stack.clear(); _folders_stack.push_back(init_folder); @@ -168,7 +168,7 @@ void FindInFiles::_iterate() { // Scan folders first so we can build a list of files and have progress info later - PoolStringArray &folders_to_scan = _folders_stack.write[_folders_stack.size() - 1]; + PackedStringArray &folders_to_scan = _folders_stack.write[_folders_stack.size() - 1]; if (folders_to_scan.size() != 0) { // Scan one folder below @@ -178,7 +178,7 @@ void FindInFiles::_iterate() { _current_dir = _current_dir.plus_file(folder_name); - PoolStringArray sub_dirs; + PackedStringArray sub_dirs; _scan_dir("res://" + _current_dir, sub_dirs); _folders_stack.push_back(sub_dirs); @@ -219,7 +219,7 @@ float FindInFiles::get_progress() const { return 0; } -void FindInFiles::_scan_dir(String path, PoolStringArray &out_folders) { +void FindInFiles::_scan_dir(String path, PackedStringArray &out_folders) { DirAccessRef dir = DirAccess::open(path); if (!dir) { @@ -242,7 +242,7 @@ void FindInFiles::_scan_dir(String path, PoolStringArray &out_folders) { continue; if (dir->current_is_dir()) - out_folders.append(file); + out_folders.push_back(file); else { String file_ext = file.get_extension(); @@ -319,10 +319,21 @@ FindInFilesDialog::FindInFilesDialog() { _search_text_line_edit = memnew(LineEdit); _search_text_line_edit->set_h_size_flags(SIZE_EXPAND_FILL); - _search_text_line_edit->connect("text_changed", this, "_on_search_text_modified"); - _search_text_line_edit->connect("text_entered", this, "_on_search_text_entered"); + _search_text_line_edit->connect_compat("text_changed", this, "_on_search_text_modified"); + _search_text_line_edit->connect_compat("text_entered", this, "_on_search_text_entered"); gc->add_child(_search_text_line_edit); + _replace_label = memnew(Label); + _replace_label->set_text(TTR("Replace:")); + _replace_label->hide(); + gc->add_child(_replace_label); + + _replace_text_line_edit = memnew(LineEdit); + _replace_text_line_edit->set_h_size_flags(SIZE_EXPAND_FILL); + _replace_text_line_edit->connect_compat("text_entered", this, "_on_replace_text_entered"); + _replace_text_line_edit->hide(); + gc->add_child(_replace_text_line_edit); + gc->add_child(memnew(Control)); // Space to maintain the grid aligned. { @@ -356,12 +367,12 @@ FindInFilesDialog::FindInFilesDialog() { Button *folder_button = memnew(Button); folder_button->set_text("..."); - folder_button->connect("pressed", this, "_on_folder_button_pressed"); + folder_button->connect_compat("pressed", this, "_on_folder_button_pressed"); hbc->add_child(folder_button); _folder_dialog = memnew(FileDialog); _folder_dialog->set_mode(FileDialog::MODE_OPEN_DIR); - _folder_dialog->connect("dir_selected", this, "_on_folder_selected"); + _folder_dialog->connect_compat("dir_selected", this, "_on_folder_selected"); add_child(_folder_dialog); gc->add_child(hbc); @@ -383,6 +394,8 @@ FindInFilesDialog::FindInFilesDialog() { Button *cancel_button = get_ok(); cancel_button->set_text(TTR("Cancel")); + + _mode = SEARCH_MODE; } void FindInFilesDialog::set_search_text(String text) { @@ -390,11 +403,40 @@ void FindInFilesDialog::set_search_text(String text) { _on_search_text_modified(text); } +void FindInFilesDialog::set_replace_text(String text) { + _replace_text_line_edit->set_text(text); +} + +void FindInFilesDialog::set_find_in_files_mode(FindInFilesMode p_mode) { + + if (_mode == p_mode) + return; + + _mode = p_mode; + + if (p_mode == SEARCH_MODE) { + set_title(TTR("Find in Files")); + _replace_label->hide(); + _replace_text_line_edit->hide(); + } else if (p_mode == REPLACE_MODE) { + set_title(TTR("Replace in Files")); + _replace_label->show(); + _replace_text_line_edit->show(); + } + + // After hiding some child controls, let's recalculate proper Dialog size + set_size(Size2(get_size().x, 0)); +} + String FindInFilesDialog::get_search_text() const { String text = _search_text_line_edit->get_text(); return text.strip_edges(); } +String FindInFilesDialog::get_replace_text() const { + return _replace_text_line_edit->get_text(); +} + bool FindInFilesDialog::is_match_case() const { return _match_case_checkbox->is_pressed(); } @@ -473,8 +515,26 @@ void FindInFilesDialog::_on_search_text_modified(String text) { void FindInFilesDialog::_on_search_text_entered(String text) { // This allows to trigger a global search without leaving the keyboard - if (!_find_button->is_disabled()) - custom_action("find"); + if (!_find_button->is_disabled()) { + if (_mode == SEARCH_MODE) { + custom_action("find"); + } + } + + if (!_replace_button->is_disabled()) { + if (_mode == REPLACE_MODE) { + custom_action("replace"); + } + } +} + +void FindInFilesDialog::_on_replace_text_entered(String text) { + // This allows to trigger a global search without leaving the keyboard + if (!_replace_button->is_disabled()) { + if (_mode == REPLACE_MODE) { + custom_action("replace"); + } + } } void FindInFilesDialog::_on_folder_selected(String path) { @@ -490,6 +550,7 @@ void FindInFilesDialog::_bind_methods() { ClassDB::bind_method("_on_folder_selected", &FindInFilesDialog::_on_folder_selected); ClassDB::bind_method("_on_search_text_modified", &FindInFilesDialog::_on_search_text_modified); ClassDB::bind_method("_on_search_text_entered", &FindInFilesDialog::_on_search_text_entered); + ClassDB::bind_method("_on_replace_text_entered", &FindInFilesDialog::_on_replace_text_entered); ADD_SIGNAL(MethodInfo(SIGNAL_FIND_REQUESTED)); ADD_SIGNAL(MethodInfo(SIGNAL_REPLACE_REQUESTED)); @@ -502,8 +563,8 @@ const char *FindInFilesPanel::SIGNAL_FILES_MODIFIED = "files_modified"; FindInFilesPanel::FindInFilesPanel() { _finder = memnew(FindInFiles); - _finder->connect(FindInFiles::SIGNAL_RESULT_FOUND, this, "_on_result_found"); - _finder->connect(FindInFiles::SIGNAL_FINISHED, this, "_on_finished"); + _finder->connect_compat(FindInFiles::SIGNAL_RESULT_FOUND, this, "_on_result_found"); + _finder->connect_compat(FindInFiles::SIGNAL_FINISHED, this, "_on_finished"); add_child(_finder); VBoxContainer *vbc = memnew(VBoxContainer); @@ -535,7 +596,7 @@ FindInFilesPanel::FindInFilesPanel() { _cancel_button = memnew(Button); _cancel_button->set_text(TTR("Cancel")); - _cancel_button->connect("pressed", this, "_on_cancel_button_clicked"); + _cancel_button->connect_compat("pressed", this, "_on_cancel_button_clicked"); _cancel_button->hide(); hbc->add_child(_cancel_button); @@ -545,8 +606,8 @@ FindInFilesPanel::FindInFilesPanel() { _results_display = memnew(Tree); _results_display->add_font_override("font", EditorNode::get_singleton()->get_gui_base()->get_font("source", "EditorFonts")); _results_display->set_v_size_flags(SIZE_EXPAND_FILL); - _results_display->connect("item_selected", this, "_on_result_selected"); - _results_display->connect("item_edited", this, "_on_item_edited"); + _results_display->connect_compat("item_selected", this, "_on_result_selected"); + _results_display->connect_compat("item_edited", this, "_on_item_edited"); _results_display->set_hide_root(true); _results_display->set_select_mode(Tree::SELECT_ROW); _results_display->set_allow_rmb_select(true); @@ -564,12 +625,12 @@ FindInFilesPanel::FindInFilesPanel() { _replace_line_edit = memnew(LineEdit); _replace_line_edit->set_h_size_flags(SIZE_EXPAND_FILL); - _replace_line_edit->connect("text_changed", this, "_on_replace_text_changed"); + _replace_line_edit->connect_compat("text_changed", this, "_on_replace_text_changed"); _replace_container->add_child(_replace_line_edit); _replace_all_button = memnew(Button); _replace_all_button->set_text(TTR("Replace all (no undo)")); - _replace_all_button->connect("pressed", this, "_on_replace_all_clicked"); + _replace_all_button->connect_compat("pressed", this, "_on_replace_all_clicked"); _replace_container->add_child(_replace_all_button); _replace_container->hide(); @@ -596,6 +657,10 @@ void FindInFilesPanel::set_with_replace(bool with_replace) { } } +void FindInFilesPanel::set_replace_text(String text) { + _replace_line_edit->set_text(text); +} + void FindInFilesPanel::clear() { _file_items.clear(); _result_items.clear(); @@ -758,7 +823,7 @@ void FindInFilesPanel::_on_replace_all_clicked() { String replace_text = get_replace_text(); - PoolStringArray modified_files; + PackedStringArray modified_files; for (Map<String, TreeItem *>::Element *E = _file_items.front(); E; E = E->next()) { @@ -779,7 +844,7 @@ void FindInFilesPanel::_on_replace_all_clicked() { if (locations.size() != 0) { // Results are sorted by file, so we can batch replaces apply_replaces_in_file(fpath, locations, replace_text); - modified_files.append(fpath); + modified_files.push_back(fpath); } } @@ -886,7 +951,7 @@ void FindInFilesPanel::apply_replaces_in_file(String fpath, const Vector<Result> } String FindInFilesPanel::get_replace_text() { - return _replace_line_edit->get_text().strip_edges(); + return _replace_line_edit->get_text(); } void FindInFilesPanel::update_replace_buttons() { diff --git a/editor/find_in_files.h b/editor/find_in_files.h index 327c3f1b5a..5dc4ef5e19 100644 --- a/editor/find_in_files.h +++ b/editor/find_in_files.h @@ -69,7 +69,7 @@ protected: private: void _process(); void _iterate(); - void _scan_dir(String path, PoolStringArray &out_folders); + void _scan_dir(String path, PackedStringArray &out_folders); void _scan_file(String fpath); // Config @@ -82,7 +82,7 @@ private: // State bool _searching; String _current_dir; - Vector<PoolStringArray> _folders_stack; + Vector<PackedStringArray> _folders_stack; Vector<String> _files_to_scan; int _initial_files_count; }; @@ -97,14 +97,23 @@ class FindInFilesDialog : public AcceptDialog { GDCLASS(FindInFilesDialog, AcceptDialog); public: + enum FindInFilesMode { + SEARCH_MODE, + REPLACE_MODE + }; + static const char *SIGNAL_FIND_REQUESTED; static const char *SIGNAL_REPLACE_REQUESTED; FindInFilesDialog(); void set_search_text(String text); + void set_replace_text(String text); + + void set_find_in_files_mode(FindInFilesMode p_mode); String get_search_text() const; + String get_replace_text() const; bool is_match_case() const; bool is_whole_words() const; String get_folder() const; @@ -121,8 +130,14 @@ private: void _on_folder_selected(String path); void _on_search_text_modified(String text); void _on_search_text_entered(String text); + void _on_replace_text_entered(String text); + FindInFilesMode _mode; LineEdit *_search_text_line_edit; + + Label *_replace_label; + LineEdit *_replace_text_line_edit; + LineEdit *_folder_line_edit; CheckBox *_match_case_checkbox; CheckBox *_whole_words_checkbox; @@ -151,6 +166,7 @@ public: FindInFiles *get_finder() const { return _finder; } void set_with_replace(bool with_replace); + void set_replace_text(String text); void start_search(); void stop_search(); diff --git a/editor/groups_editor.cpp b/editor/groups_editor.cpp index c76ff9d679..739e9f68c5 100644 --- a/editor/groups_editor.cpp +++ b/editor/groups_editor.cpp @@ -88,7 +88,7 @@ void GroupDialog::_load_nodes(Node *p_current) { node->set_metadata(0, path); node->set_tooltip(0, path); - Ref<Texture> icon = EditorNode::get_singleton()->get_object_icon(p_current, "Node"); + Ref<Texture2D> icon = EditorNode::get_singleton()->get_object_icon(p_current, "Node"); node->set_icon(0, icon); if (!_can_edit(p_current, selected_group)) { @@ -435,9 +435,9 @@ GroupDialog::GroupDialog() { groups->set_allow_rmb_select(true); groups->set_v_size_flags(SIZE_EXPAND_FILL); groups->add_constant_override("draw_guides", 1); - groups->connect("item_selected", this, "_group_selected"); - groups->connect("button_pressed", this, "_delete_group_pressed"); - groups->connect("item_edited", this, "_group_renamed"); + groups->connect_compat("item_selected", this, "_group_selected"); + groups->connect_compat("button_pressed", this, "_delete_group_pressed"); + groups->connect_compat("item_edited", this, "_group_renamed"); HBoxContainer *chbc = memnew(HBoxContainer); vbc_left->add_child(chbc); @@ -446,12 +446,12 @@ GroupDialog::GroupDialog() { add_group_text = memnew(LineEdit); chbc->add_child(add_group_text); add_group_text->set_h_size_flags(SIZE_EXPAND_FILL); - add_group_text->connect("text_entered", this, "_add_group_pressed"); + add_group_text->connect_compat("text_entered", this, "_add_group_pressed"); Button *add_group_button = memnew(Button); add_group_button->set_text(TTR("Add")); chbc->add_child(add_group_button); - add_group_button->connect("pressed", this, "_add_group_pressed", varray(String())); + add_group_button->connect_compat("pressed", this, "_add_group_pressed", varray(String())); VBoxContainer *vbc_add = memnew(VBoxContainer); hbc->add_child(vbc_add); @@ -468,7 +468,7 @@ GroupDialog::GroupDialog() { nodes_to_add->set_select_mode(Tree::SELECT_MULTI); nodes_to_add->set_v_size_flags(SIZE_EXPAND_FILL); nodes_to_add->add_constant_override("draw_guides", 1); - nodes_to_add->connect("item_selected", this, "_nodes_to_add_selected"); + nodes_to_add->connect_compat("item_selected", this, "_nodes_to_add_selected"); HBoxContainer *add_filter_hbc = memnew(HBoxContainer); add_filter_hbc->add_constant_override("separate", 0); @@ -478,7 +478,7 @@ GroupDialog::GroupDialog() { add_filter->set_h_size_flags(SIZE_EXPAND_FILL); add_filter->set_placeholder(TTR("Filter nodes")); add_filter_hbc->add_child(add_filter); - add_filter->connect("text_changed", this, "_add_filter_changed"); + add_filter->connect_compat("text_changed", this, "_add_filter_changed"); VBoxContainer *vbc_buttons = memnew(VBoxContainer); hbc->add_child(vbc_buttons); @@ -487,7 +487,7 @@ GroupDialog::GroupDialog() { add_button = memnew(ToolButton); add_button->set_text(TTR("Add")); - add_button->connect("pressed", this, "_add_pressed"); + add_button->connect_compat("pressed", this, "_add_pressed"); vbc_buttons->add_child(add_button); vbc_buttons->add_spacer(); @@ -496,7 +496,7 @@ GroupDialog::GroupDialog() { remove_button = memnew(ToolButton); remove_button->set_text(TTR("Remove")); - remove_button->connect("pressed", this, "_removed_pressed"); + remove_button->connect_compat("pressed", this, "_removed_pressed"); vbc_buttons->add_child(remove_button); @@ -515,7 +515,7 @@ GroupDialog::GroupDialog() { nodes_to_remove->set_hide_folding(true); nodes_to_remove->set_select_mode(Tree::SELECT_MULTI); nodes_to_remove->add_constant_override("draw_guides", 1); - nodes_to_remove->connect("item_selected", this, "_node_to_remove_selected"); + nodes_to_remove->connect_compat("item_selected", this, "_node_to_remove_selected"); HBoxContainer *remove_filter_hbc = memnew(HBoxContainer); remove_filter_hbc->add_constant_override("separate", 0); @@ -525,7 +525,7 @@ GroupDialog::GroupDialog() { remove_filter->set_h_size_flags(SIZE_EXPAND_FILL); remove_filter->set_placeholder(TTR("Filter nodes")); remove_filter_hbc->add_child(remove_filter); - remove_filter->connect("text_changed", this, "_remove_filter_changed"); + remove_filter->connect_compat("text_changed", this, "_remove_filter_changed"); group_empty = memnew(Label()); group_empty->set_text(TTR("Empty groups will be automatically removed.")); @@ -686,12 +686,12 @@ GroupsEditor::GroupsEditor() { group_dialog = memnew(GroupDialog); group_dialog->set_as_toplevel(true); add_child(group_dialog); - group_dialog->connect("group_edited", this, "update_tree"); + group_dialog->connect_compat("group_edited", this, "update_tree"); Button *group_dialog_button = memnew(Button); group_dialog_button->set_text(TTR("Manage Groups")); vbc->add_child(group_dialog_button); - group_dialog_button->connect("pressed", this, "_show_group_dialog"); + group_dialog_button->connect_compat("pressed", this, "_show_group_dialog"); HBoxContainer *hbc = memnew(HBoxContainer); vbc->add_child(hbc); @@ -699,18 +699,18 @@ GroupsEditor::GroupsEditor() { group_name = memnew(LineEdit); group_name->set_h_size_flags(SIZE_EXPAND_FILL); hbc->add_child(group_name); - group_name->connect("text_entered", this, "_add_group"); + group_name->connect_compat("text_entered", this, "_add_group"); add = memnew(Button); add->set_text(TTR("Add")); hbc->add_child(add); - add->connect("pressed", this, "_add_group", varray(String())); + add->connect_compat("pressed", this, "_add_group", varray(String())); tree = memnew(Tree); tree->set_hide_root(true); tree->set_v_size_flags(SIZE_EXPAND_FILL); vbc->add_child(tree); - tree->connect("button_pressed", this, "_remove_group"); + tree->connect_compat("button_pressed", this, "_remove_group"); tree->add_constant_override("draw_guides", 1); add_constant_override("separation", 3 * EDSCALE); } diff --git a/editor/icons/icon_gizmo_spatial_stream_player.svg b/editor/icons/icon_gizmo_spatial_stream_player.svg deleted file mode 100644 index 473fd2c2cd..0000000000 --- a/editor/icons/icon_gizmo_spatial_stream_player.svg +++ /dev/null @@ -1 +0,0 @@ -<svg height="128" viewBox="0 0 128 128" width="128" xmlns="http://www.w3.org/2000/svg"><path d="m99.645 6.0059c-.9956.029687-1.9837.18322-2.9414.45703l-56 16c-5.1336 1.4668-8.7021 6.198-8.7031 11.537v44.203c-11.16 1.0331-20 10.379-20 21.797.000011 12.103 9.8971 22 22 22 12.103-.00001 22-9.8971 22-22v-56.947l32-9.1426v28.293c-11.16 1.0331-20 10.379-20 21.797.000011 12.103 9.8971 22 22 22 12.103-.00001 22-9.8971 22-22v-66c-.00104-6.7137-5.6428-12.192-12.354-11.994z" fill-opacity=".29412"/><path d="m99.764 10.004a8.0008 8.0008 0 0 0 -1.9609.30469l-56 16a8.0008 8.0008 0 0 0 -5.8027 7.6914v48.121a18 18 0 0 0 -2-.12109 18 18 0 0 0 -18 18 18 18 0 0 0 18 18 18 18 0 0 0 18-18v-59.965l40-11.428v37.514a18 18 0 0 0 -2-.12109 18 18 0 0 0 -18 18 18 18 0 0 0 18 18 18 18 0 0 0 18-18v-66a8.0008 8.0008 0 0 0 -8.2363-7.9961z" fill="#f7f5cf"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_o_r_m_material_3d.svg b/editor/icons/icon_o_r_m_material_3d.svg new file mode 100644 index 0000000000..3dd6013436 --- /dev/null +++ b/editor/icons/icon_o_r_m_material_3d.svg @@ -0,0 +1,66 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="16" + height="16" + version="1.1" + viewBox="0 0 16 16" + id="svg18" + sodipodi:docname="icon_o_r_m_material_3d.svg" + inkscape:version="0.92.4 (5da689c313, 2019-01-14)"> + <metadata + id="metadata24"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <defs + id="defs22" /> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="1010" + inkscape:window-height="553" + id="namedview20" + showgrid="false" + inkscape:zoom="7.375" + inkscape:cx="16.698858" + inkscape:cy="18.275823" + inkscape:window-x="345" + inkscape:window-y="144" + inkscape:window-maximized="0" + inkscape:current-layer="svg18" /> + <path + inkscape:connector-curvature="0" + id="path4541" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:1.25;font-family:Uroob;-inkscape-font-specification:Uroob;letter-spacing:0px;word-spacing:0px;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.33291078" + d="m 5.0534707,10.652714 q 0,0.729229 -0.4538398,1.253141 -0.4538403,0.516832 -1.0868283,0.516832 H 2.3184864 q -0.6389592,0 -1.1047425,-0.509753 -0.47175502,-0.509751 -0.47175502,-1.26022 V 5.1304021 q 0,-0.7575473 0.47175502,-1.2672998 0.4717549,-0.5097517 1.1047425,-0.5097517 h 1.1943162 q 0.6270165,0 1.0868283,0.516832 0.4538398,0.5168313 0.4538398,1.2602195 z M 3.9726148,10.419078 V 5.3640385 q 0,-0.5734707 -0.3344086,-0.8141867 Q 3.5307175,4.4648927 3.381428,4.471973 H 2.3901454 q -0.2567779,0 -0.4120391,0.2690357 -0.1552611,0.2690357 -0.1552611,0.6230298 v 5.0550395 q 0,0.559311 0.3164938,0.807108 0.1074885,0.08496 0.2508064,0.08496 H 3.381428 q 0.2746925,0 0.4359254,-0.276116 0.1552614,-0.276115 0.1552614,-0.61595 z" /> + <path + inkscape:connector-curvature="0" + id="path4543" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:1.25;font-family:Uroob;-inkscape-font-specification:Uroob;letter-spacing:0px;word-spacing:0px;fill:#008000;fill-opacity:1;stroke:none;stroke-width:0.32084218" + d="M 9.9872948,12.451006 H 8.9445586 L 7.4747449,8.5287488 H 6.6815992 V 12.451006 H 5.6721419 V 3.37459 h 2.739956 q 0.5435541,0 0.9318066,0.4601926 0.3882524,0.4601933 0.3882524,1.1540217 V 7.112771 q 0,1.0053443 -0.6766682,1.3168588 -0.2107668,0.099119 -0.4659043,0.099119 z M 8.7282467,6.808336 V 5.2224407 q 0,-0.4743524 -0.2884169,-0.6867495 -0.088743,-0.070798 -0.2052192,-0.063719 H 6.6815992 v 2.9452329 h 1.7194053 q 0.2828702,-0.00708 0.3161488,-0.389394 0.011093,-0.1132781 0.011093,-0.2194752 z" /> + <path + inkscape:connector-curvature="0" + id="path4545" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:1.25;font-family:Uroob;-inkscape-font-specification:Uroob;letter-spacing:0px;word-spacing:0px;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:0.31984535" + d="m 10.201004,3.7285848 q 0,-0.4106342 0.529158,-0.3681546 0.126777,0.014161 0.209458,0.014161 v 0.00708 h 0.115753 l 1.692202,4.9205216 1.697714,-4.9205216 h 0.06063 v -0.00708 h 0.463013 q 0.198434,0 0.297651,0.212397 0.03307,0.063719 0.03307,0.1415978 v 8.694102 h -1.01422 V 6.8224966 L 13.227119,10.050925 H 12.273535 L 11.21522,7.1198527 v 5.3028353 h -1.014218 z" /> +</svg> diff --git a/editor/icons/icon_pool_byte_array.svg b/editor/icons/icon_packed_byte_array.svg index 5409a47bc4..5409a47bc4 100644 --- a/editor/icons/icon_pool_byte_array.svg +++ b/editor/icons/icon_packed_byte_array.svg diff --git a/editor/icons/icon_pool_color_array.svg b/editor/icons/icon_packed_color_array.svg index 7a312d0e91..7a312d0e91 100644 --- a/editor/icons/icon_pool_color_array.svg +++ b/editor/icons/icon_packed_color_array.svg diff --git a/editor/icons/icon_pool_int_array.svg b/editor/icons/icon_packed_int_array.svg index a664b2d5fd..a664b2d5fd 100644 --- a/editor/icons/icon_pool_int_array.svg +++ b/editor/icons/icon_packed_int_array.svg diff --git a/editor/icons/icon_pool_real_array.svg b/editor/icons/icon_packed_real_array.svg index 734f40cd05..734f40cd05 100644 --- a/editor/icons/icon_pool_real_array.svg +++ b/editor/icons/icon_packed_real_array.svg diff --git a/editor/icons/icon_pool_string_array.svg b/editor/icons/icon_packed_string_array.svg index 7e66f5f5e5..7e66f5f5e5 100644 --- a/editor/icons/icon_pool_string_array.svg +++ b/editor/icons/icon_packed_string_array.svg diff --git a/editor/icons/icon_pool_vector2_array.svg b/editor/icons/icon_packed_vector2_array.svg index 170512eb39..170512eb39 100644 --- a/editor/icons/icon_pool_vector2_array.svg +++ b/editor/icons/icon_packed_vector2_array.svg diff --git a/editor/icons/icon_pool_vector3_array.svg b/editor/icons/icon_packed_vector3_array.svg index cd3578182f..cd3578182f 100644 --- a/editor/icons/icon_pool_vector3_array.svg +++ b/editor/icons/icon_packed_vector3_array.svg diff --git a/editor/icons/icon_standard_material_3d.svg b/editor/icons/icon_standard_material_3d.svg new file mode 100644 index 0000000000..aa8bfc9a5b --- /dev/null +++ b/editor/icons/icon_standard_material_3d.svg @@ -0,0 +1,11 @@ +<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> +<g transform="translate(0 -1036.4)"> +<path transform="translate(0 1036.4)" d="m7.9629 1.002a1.0001 1.0001 0 0 0 -0.41016 0.10352l-3.7891 1.8945h8.4727l-3.7891-1.8945a1.0001 1.0001 0 0 0 -0.48438 -0.10352z" fill="#ff7070"/> +<path transform="translate(0 1036.4)" d="m3.7637 3l-2.2109 1.1055a1.0001 1.0001 0 0 0 -0.55273 0.89453h3.2363l3.7637-1.8809 3.7637 1.8809h3.2363a1.0001 1.0001 0 0 0 -0.55273 -0.89453l-2.2109-1.1055h-8.4727z" fill="#ffeb70"/> +<path transform="translate(0 1036.4)" d="m1 5v2h2v-0.38086l0.76172 0.38086h8.4766l0.76172-0.38086v0.38086h2v-2h-3.2363l-3.7637 1.8828-3.7637-1.8828h-3.2363z" fill="#9dff70"/> +<path transform="translate(0 1036.4)" d="m1 7v2h2v-2h-2zm2.7617 0l3.2383 1.6191v0.38086h2v-0.38086l3.2383-1.6191h-8.4766zm9.2383 0v2h2v-2h-2z" fill="#70ffb9"/> +<path transform="translate(0 1036.4)" d="m1 9v2h3.2344l-1.2344-0.61719v-1.3828h-2zm6 0v2h2v-2h-2zm6 0v1.3828l-1.2344 0.61719h3.2344v-2h-2z" fill="#70deff"/> +<path transform="translate(0 1036.4)" d="m3.7637 13l3.7891 1.8945a1.0001 1.0001 0 0 0 0.48438 0.10547 1.0001 1.0001 0 0 0 0.41016 -0.10547l3.7891-1.8945h-8.4727z" fill="#ff70ac"/> +<path transform="translate(0 1036.4)" d="m1 11a1.0001 1.0001 0 0 0 0.55273 0.89453l2.2109 1.1055h8.4727l2.2109-1.1055a1.0001 1.0001 0 0 0 0.55273 -0.89453h-3.2344l-2.7656 1.3828v-1.3828h-2v1.3828l-2.7656-1.3828h-3.2344z" fill="#9f70ff"/> +</g> +</svg> diff --git a/editor/icons/icon_track_color.svg b/editor/icons/icon_track_color.svg new file mode 100644 index 0000000000..6a736c7a84 --- /dev/null +++ b/editor/icons/icon_track_color.svg @@ -0,0 +1,61 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + height="10" + viewBox="0 0 10 10" + width="10" + version="1.1" + id="svg4" + sodipodi:docname="icon_track_color.svg" + inkscape:version="0.92.4 (5da689c313, 2019-01-14)"> + <metadata + id="metadata10"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <defs + id="defs8" /> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="838" + inkscape:window-height="480" + id="namedview6" + showgrid="false" + inkscape:zoom="23.6" + inkscape:cx="5" + inkscape:cy="5" + inkscape:window-x="593" + inkscape:window-y="314" + inkscape:window-maximized="0" + inkscape:current-layer="svg4" /> + <rect + fill="#5792f6" + height="6.1027" + ry=".76286" + transform="matrix(.70710678 -.70710678 .70710678 .70710678 0 -1042.4)" + width="6.1027" + x="-740.13947" + y="741.10779" + id="rect2" + style="fill:#ffffff;fill-opacity:1" /> +</svg> diff --git a/editor/import/editor_import_collada.cpp b/editor/import/editor_import_collada.cpp index e2d8dc8962..2f97f4aa31 100644 --- a/editor/import/editor_import_collada.cpp +++ b/editor/import/editor_import_collada.cpp @@ -363,7 +363,7 @@ Error ColladaImport::_create_material(const String &p_target) { ERR_FAIL_COND_V(!collada.state.effect_map.has(src_mat.instance_effect), ERR_INVALID_PARAMETER); Collada::Effect &effect = collada.state.effect_map[src_mat.instance_effect]; - Ref<SpatialMaterial> material = memnew(SpatialMaterial); + Ref<StandardMaterial3D> material = memnew(StandardMaterial3D); if (src_mat.name != "") material->set_name(src_mat.name); @@ -380,12 +380,12 @@ Error ColladaImport::_create_material(const String &p_target) { if (texfile.begins_with("/")) { texfile = texfile.replace_first("/", "res://"); } - Ref<Texture> texture = ResourceLoader::load(texfile, "Texture"); + Ref<Texture2D> texture = ResourceLoader::load(texfile, "Texture2D"); if (texture.is_valid()) { - material->set_texture(SpatialMaterial::TEXTURE_ALBEDO, texture); + material->set_texture(StandardMaterial3D::TEXTURE_ALBEDO, texture); material->set_albedo(Color(1, 1, 1, 1)); - //material->set_parameter(SpatialMaterial::PARAM_DIFFUSE,Color(1,1,1,1)); + //material->set_parameter(StandardMaterial3D::PARAM_DIFFUSE,Color(1,1,1,1)); } else { missing_textures.push_back(texfile.get_file()); } @@ -405,13 +405,13 @@ Error ColladaImport::_create_material(const String &p_target) { texfile = texfile.replace_first("/", "res://"); } - Ref<Texture> texture = ResourceLoader::load(texfile, "Texture"); + Ref<Texture2D> texture = ResourceLoader::load(texfile, "Texture2D"); if (texture.is_valid()) { - material->set_texture(SpatialMaterial::TEXTURE_METALLIC, texture); + material->set_texture(StandardMaterial3D::TEXTURE_METALLIC, texture); material->set_specular(1.0); - //material->set_texture(SpatialMaterial::PARAM_SPECULAR,texture); - //material->set_parameter(SpatialMaterial::PARAM_SPECULAR,Color(1,1,1,1)); + //material->set_texture(StandardMaterial3D::PARAM_SPECULAR,texture); + //material->set_parameter(StandardMaterial3D::PARAM_SPECULAR,Color(1,1,1,1)); } else { missing_textures.push_back(texfile.get_file()); } @@ -432,21 +432,21 @@ Error ColladaImport::_create_material(const String &p_target) { texfile = texfile.replace_first("/", "res://"); } - Ref<Texture> texture = ResourceLoader::load(texfile, "Texture"); + Ref<Texture2D> texture = ResourceLoader::load(texfile, "Texture2D"); if (texture.is_valid()) { - material->set_feature(SpatialMaterial::FEATURE_EMISSION, true); - material->set_texture(SpatialMaterial::TEXTURE_EMISSION, texture); + material->set_feature(StandardMaterial3D::FEATURE_EMISSION, true); + material->set_texture(StandardMaterial3D::TEXTURE_EMISSION, texture); material->set_emission(Color(1, 1, 1, 1)); - //material->set_parameter(SpatialMaterial::PARAM_EMISSION,Color(1,1,1,1)); + //material->set_parameter(StandardMaterial3D::PARAM_EMISSION,Color(1,1,1,1)); } else { missing_textures.push_back(texfile.get_file()); } } } else { if (effect.emission.color != Color()) { - material->set_feature(SpatialMaterial::FEATURE_EMISSION, true); + material->set_feature(StandardMaterial3D::FEATURE_EMISSION, true); material->set_emission(effect.emission.color); } } @@ -462,13 +462,13 @@ Error ColladaImport::_create_material(const String &p_target) { texfile = texfile.replace_first("/", "res://"); } - Ref<Texture> texture = ResourceLoader::load(texfile, "Texture"); + Ref<Texture2D> texture = ResourceLoader::load(texfile, "Texture2D"); if (texture.is_valid()) { - material->set_feature(SpatialMaterial::FEATURE_NORMAL_MAPPING, true); - material->set_texture(SpatialMaterial::TEXTURE_NORMAL, texture); + material->set_feature(StandardMaterial3D::FEATURE_NORMAL_MAPPING, true); + material->set_texture(StandardMaterial3D::TEXTURE_NORMAL, texture); //material->set_emission(Color(1,1,1,1)); - //material->set_texture(SpatialMaterial::PARAM_NORMAL,texture); + //material->set_texture(StandardMaterial3D::PARAM_NORMAL,texture); } else { //missing_textures.push_back(texfile.get_file()); } @@ -479,9 +479,11 @@ Error ColladaImport::_create_material(const String &p_target) { material->set_roughness(roughness); if (effect.double_sided) { - material->set_cull_mode(SpatialMaterial::CULL_DISABLED); + material->set_cull_mode(StandardMaterial3D::CULL_DISABLED); + } + if (effect.unshaded) { + material->set_shading_mode(StandardMaterial3D::SHADING_MODE_UNSHADED); } - material->set_flag(SpatialMaterial::FLAG_UNSHADED, effect.unshaded); material_cache[p_target] = material; return OK; @@ -877,7 +879,7 @@ Error ColladaImport::_create_mesh_surfaces(bool p_optimize, Ref<ArrayMesh> &p_me { - Ref<SpatialMaterial> material; + Ref<StandardMaterial3D> material; { @@ -984,7 +986,7 @@ Error ColladaImport::_create_mesh_surfaces(bool p_optimize, Ref<ArrayMesh> &p_me mr.push_back(a); } - p_mesh->add_surface_from_arrays(Mesh::PRIMITIVE_TRIANGLES, d, mr, p_use_compression ? Mesh::ARRAY_COMPRESS_DEFAULT : 0); + p_mesh->add_surface_from_arrays(Mesh::PRIMITIVE_TRIANGLES, d, mr, Dictionary(), p_use_compression ? Mesh::ARRAY_COMPRESS_DEFAULT : 0); if (material.is_valid()) { if (p_use_mesh_material) { diff --git a/editor/import/editor_scene_importer_gltf.cpp b/editor/import/editor_scene_importer_gltf.cpp index d4664e1bb9..731d094745 100644 --- a/editor/import/editor_scene_importer_gltf.cpp +++ b/editor/import/editor_scene_importer_gltf.cpp @@ -764,10 +764,10 @@ Vector<double> EditorSceneImporterGLTF::_decode_accessor(GLTFState &state, const return dst_buffer; } -PoolVector<int> EditorSceneImporterGLTF::_decode_accessor_as_ints(GLTFState &state, const GLTFAccessorIndex p_accessor, const bool p_for_vertex) { +Vector<int> EditorSceneImporterGLTF::_decode_accessor_as_ints(GLTFState &state, const GLTFAccessorIndex p_accessor, const bool p_for_vertex) { const Vector<double> attribs = _decode_accessor(state, p_accessor, p_for_vertex); - PoolVector<int> ret; + Vector<int> ret; if (attribs.size() == 0) return ret; @@ -776,7 +776,7 @@ PoolVector<int> EditorSceneImporterGLTF::_decode_accessor_as_ints(GLTFState &sta const int ret_size = attribs.size(); ret.resize(ret_size); { - PoolVector<int>::Write w = ret.write(); + int *w = ret.ptrw(); for (int i = 0; i < ret_size; i++) { w[i] = int(attribs_ptr[i]); } @@ -784,10 +784,10 @@ PoolVector<int> EditorSceneImporterGLTF::_decode_accessor_as_ints(GLTFState &sta return ret; } -PoolVector<float> EditorSceneImporterGLTF::_decode_accessor_as_floats(GLTFState &state, const GLTFAccessorIndex p_accessor, const bool p_for_vertex) { +Vector<float> EditorSceneImporterGLTF::_decode_accessor_as_floats(GLTFState &state, const GLTFAccessorIndex p_accessor, const bool p_for_vertex) { const Vector<double> attribs = _decode_accessor(state, p_accessor, p_for_vertex); - PoolVector<float> ret; + Vector<float> ret; if (attribs.size() == 0) return ret; @@ -796,7 +796,7 @@ PoolVector<float> EditorSceneImporterGLTF::_decode_accessor_as_floats(GLTFState const int ret_size = attribs.size(); ret.resize(ret_size); { - PoolVector<float>::Write w = ret.write(); + float *w = ret.ptrw(); for (int i = 0; i < ret_size; i++) { w[i] = float(attribs_ptr[i]); } @@ -804,10 +804,10 @@ PoolVector<float> EditorSceneImporterGLTF::_decode_accessor_as_floats(GLTFState return ret; } -PoolVector<Vector2> EditorSceneImporterGLTF::_decode_accessor_as_vec2(GLTFState &state, const GLTFAccessorIndex p_accessor, const bool p_for_vertex) { +Vector<Vector2> EditorSceneImporterGLTF::_decode_accessor_as_vec2(GLTFState &state, const GLTFAccessorIndex p_accessor, const bool p_for_vertex) { const Vector<double> attribs = _decode_accessor(state, p_accessor, p_for_vertex); - PoolVector<Vector2> ret; + Vector<Vector2> ret; if (attribs.size() == 0) return ret; @@ -817,7 +817,7 @@ PoolVector<Vector2> EditorSceneImporterGLTF::_decode_accessor_as_vec2(GLTFState const int ret_size = attribs.size() / 2; ret.resize(ret_size); { - PoolVector<Vector2>::Write w = ret.write(); + Vector2 *w = ret.ptrw(); for (int i = 0; i < ret_size; i++) { w[i] = Vector2(attribs_ptr[i * 2 + 0], attribs_ptr[i * 2 + 1]); } @@ -825,10 +825,10 @@ PoolVector<Vector2> EditorSceneImporterGLTF::_decode_accessor_as_vec2(GLTFState return ret; } -PoolVector<Vector3> EditorSceneImporterGLTF::_decode_accessor_as_vec3(GLTFState &state, const GLTFAccessorIndex p_accessor, const bool p_for_vertex) { +Vector<Vector3> EditorSceneImporterGLTF::_decode_accessor_as_vec3(GLTFState &state, const GLTFAccessorIndex p_accessor, const bool p_for_vertex) { const Vector<double> attribs = _decode_accessor(state, p_accessor, p_for_vertex); - PoolVector<Vector3> ret; + Vector<Vector3> ret; if (attribs.size() == 0) return ret; @@ -838,7 +838,7 @@ PoolVector<Vector3> EditorSceneImporterGLTF::_decode_accessor_as_vec3(GLTFState const int ret_size = attribs.size() / 3; ret.resize(ret_size); { - PoolVector<Vector3>::Write w = ret.write(); + Vector3 *w = ret.ptrw(); for (int i = 0; i < ret_size; i++) { w[i] = Vector3(attribs_ptr[i * 3 + 0], attribs_ptr[i * 3 + 1], attribs_ptr[i * 3 + 2]); } @@ -846,10 +846,10 @@ PoolVector<Vector3> EditorSceneImporterGLTF::_decode_accessor_as_vec3(GLTFState return ret; } -PoolVector<Color> EditorSceneImporterGLTF::_decode_accessor_as_color(GLTFState &state, const GLTFAccessorIndex p_accessor, const bool p_for_vertex) { +Vector<Color> EditorSceneImporterGLTF::_decode_accessor_as_color(GLTFState &state, const GLTFAccessorIndex p_accessor, const bool p_for_vertex) { const Vector<double> attribs = _decode_accessor(state, p_accessor, p_for_vertex); - PoolVector<Color> ret; + Vector<Color> ret; if (attribs.size() == 0) return ret; @@ -866,7 +866,7 @@ PoolVector<Color> EditorSceneImporterGLTF::_decode_accessor_as_color(GLTFState & const int ret_size = attribs.size() / vec_len; ret.resize(ret_size); { - PoolVector<Color>::Write w = ret.write(); + Color *w = ret.ptrw(); for (int i = 0; i < ret_size; i++) { w[i] = Color(attribs_ptr[i * vec_len + 0], attribs_ptr[i * vec_len + 1], attribs_ptr[i * vec_len + 2], vec_len == 4 ? attribs_ptr[i * 4 + 3] : 1.0); } @@ -984,11 +984,15 @@ Error EditorSceneImporterGLTF::_parse_meshes(GLTFState &state) { static const Mesh::PrimitiveType primitives2[7] = { Mesh::PRIMITIVE_POINTS, Mesh::PRIMITIVE_LINES, - Mesh::PRIMITIVE_LINE_LOOP, - Mesh::PRIMITIVE_LINE_STRIP, + Mesh::PRIMITIVE_LINES, //loop not supported, should ce converted + Mesh::PRIMITIVE_LINES, Mesh::PRIMITIVE_TRIANGLES, Mesh::PRIMITIVE_TRIANGLE_STRIP, - Mesh::PRIMITIVE_TRIANGLE_FAN, + Mesh::PRIMITIVE_TRIANGLES, //fan not supported, should be converted +#ifndef _MSC_VER +#warning line loop and triangle fan are not supported and need to be converted to lines and triangles +#endif + }; primitive = primitives2[mode]; @@ -1017,10 +1021,10 @@ Error EditorSceneImporterGLTF::_parse_meshes(GLTFState &state) { array[Mesh::ARRAY_BONES] = _decode_accessor_as_ints(state, a["JOINTS_0"], true); } if (a.has("WEIGHTS_0")) { - PoolVector<float> weights = _decode_accessor_as_floats(state, a["WEIGHTS_0"], true); + Vector<float> weights = _decode_accessor_as_floats(state, a["WEIGHTS_0"], true); { //gltf does not seem to normalize the weights for some reason.. int wc = weights.size(); - PoolVector<float>::Write w = weights.write(); + float *w = weights.ptrw(); for (int k = 0; k < wc; k += 4) { float total = 0.0; @@ -1040,13 +1044,13 @@ Error EditorSceneImporterGLTF::_parse_meshes(GLTFState &state) { } if (p.has("indices")) { - PoolVector<int> indices = _decode_accessor_as_ints(state, p["indices"], false); + Vector<int> indices = _decode_accessor_as_ints(state, p["indices"], false); if (primitive == Mesh::PRIMITIVE_TRIANGLES) { //swap around indices, convert ccw to cw for front face const int is = indices.size(); - const PoolVector<int>::Write w = indices.write(); + int *w = indices.ptrw(); for (int k = 0; k < is; k += 3) { SWAP(w[k + 1], w[k + 2]); } @@ -1055,13 +1059,13 @@ Error EditorSceneImporterGLTF::_parse_meshes(GLTFState &state) { } else if (primitive == Mesh::PRIMITIVE_TRIANGLES) { //generate indices because they need to be swapped for CW/CCW - const PoolVector<Vector3> &vertices = array[Mesh::ARRAY_VERTEX]; + const Vector<Vector3> &vertices = array[Mesh::ARRAY_VERTEX]; ERR_FAIL_COND_V(vertices.size() == 0, ERR_PARSE_ERROR); - PoolVector<int> indices; + Vector<int> indices; const int vs = vertices.size(); indices.resize(vs); { - const PoolVector<int>::Write w = indices.write(); + int *w = indices.ptrw(); for (int k = 0; k < vs; k += 3) { w[k] = k; w[k + 1] = k + 2; @@ -1123,8 +1127,8 @@ Error EditorSceneImporterGLTF::_parse_meshes(GLTFState &state) { array_copy[Mesh::ARRAY_INDEX] = Variant(); if (t.has("POSITION")) { - PoolVector<Vector3> varr = _decode_accessor_as_vec3(state, t["POSITION"], true); - const PoolVector<Vector3> src_varr = array[Mesh::ARRAY_VERTEX]; + Vector<Vector3> varr = _decode_accessor_as_vec3(state, t["POSITION"], true); + const Vector<Vector3> src_varr = array[Mesh::ARRAY_VERTEX]; const int size = src_varr.size(); ERR_FAIL_COND_V(size == 0, ERR_PARSE_ERROR); { @@ -1132,9 +1136,9 @@ Error EditorSceneImporterGLTF::_parse_meshes(GLTFState &state) { const int max_idx = varr.size(); varr.resize(size); - const PoolVector<Vector3>::Write w_varr = varr.write(); - const PoolVector<Vector3>::Read r_varr = varr.read(); - const PoolVector<Vector3>::Read r_src_varr = src_varr.read(); + Vector3 *w_varr = varr.ptrw(); + const Vector3 *r_varr = varr.ptr(); + const Vector3 *r_src_varr = src_varr.ptr(); for (int l = 0; l < size; l++) { if (l < max_idx) { w_varr[l] = r_varr[l] + r_src_varr[l]; @@ -1146,17 +1150,17 @@ Error EditorSceneImporterGLTF::_parse_meshes(GLTFState &state) { array_copy[Mesh::ARRAY_VERTEX] = varr; } if (t.has("NORMAL")) { - PoolVector<Vector3> narr = _decode_accessor_as_vec3(state, t["NORMAL"], true); - const PoolVector<Vector3> src_narr = array[Mesh::ARRAY_NORMAL]; + Vector<Vector3> narr = _decode_accessor_as_vec3(state, t["NORMAL"], true); + const Vector<Vector3> src_narr = array[Mesh::ARRAY_NORMAL]; int size = src_narr.size(); ERR_FAIL_COND_V(size == 0, ERR_PARSE_ERROR); { int max_idx = narr.size(); narr.resize(size); - const PoolVector<Vector3>::Write w_narr = narr.write(); - const PoolVector<Vector3>::Read r_narr = narr.read(); - const PoolVector<Vector3>::Read r_src_narr = src_narr.read(); + Vector3 *w_narr = narr.ptrw(); + const Vector3 *r_narr = narr.ptr(); + const Vector3 *r_src_narr = src_narr.ptr(); for (int l = 0; l < size; l++) { if (l < max_idx) { w_narr[l] = r_narr[l] + r_src_narr[l]; @@ -1168,11 +1172,11 @@ Error EditorSceneImporterGLTF::_parse_meshes(GLTFState &state) { array_copy[Mesh::ARRAY_NORMAL] = narr; } if (t.has("TANGENT")) { - const PoolVector<Vector3> tangents_v3 = _decode_accessor_as_vec3(state, t["TANGENT"], true); - const PoolVector<float> src_tangents = array[Mesh::ARRAY_TANGENT]; + const Vector<Vector3> tangents_v3 = _decode_accessor_as_vec3(state, t["TANGENT"], true); + const Vector<float> src_tangents = array[Mesh::ARRAY_TANGENT]; ERR_FAIL_COND_V(src_tangents.size() == 0, ERR_PARSE_ERROR); - PoolVector<float> tangents_v4; + Vector<float> tangents_v4; { @@ -1180,10 +1184,10 @@ Error EditorSceneImporterGLTF::_parse_meshes(GLTFState &state) { int size4 = src_tangents.size(); tangents_v4.resize(size4); - const PoolVector<float>::Write w4 = tangents_v4.write(); + float *w4 = tangents_v4.ptrw(); - const PoolVector<Vector3>::Read r3 = tangents_v3.read(); - const PoolVector<float>::Read r4 = src_tangents.read(); + const Vector3 *r3 = tangents_v3.ptr(); + const float *r4 = src_tangents.ptr(); for (int l = 0; l < size4 / 4; l++) { @@ -1277,7 +1281,7 @@ Error EditorSceneImporterGLTF::_parse_images(GLTFState &state, const String &p_b } else { uri = p_base_path.plus_file(uri).replace("\\", "/"); //fix for windows - Ref<Texture> texture = ResourceLoader::load(uri); + Ref<Texture2D> texture = ResourceLoader::load(uri); state.images.push_back(texture); continue; } @@ -1362,11 +1366,11 @@ Error EditorSceneImporterGLTF::_parse_textures(GLTFState &state) { return OK; } -Ref<Texture> EditorSceneImporterGLTF::_get_texture(GLTFState &state, const GLTFTextureIndex p_texture) { - ERR_FAIL_INDEX_V(p_texture, state.textures.size(), Ref<Texture>()); +Ref<Texture2D> EditorSceneImporterGLTF::_get_texture(GLTFState &state, const GLTFTextureIndex p_texture) { + ERR_FAIL_INDEX_V(p_texture, state.textures.size(), Ref<Texture2D>()); const GLTFImageIndex image = state.textures[p_texture].src_image; - ERR_FAIL_INDEX_V(image, state.images.size(), Ref<Texture>()); + ERR_FAIL_INDEX_V(image, state.images.size(), Ref<Texture2D>()); return state.images[image]; } @@ -1381,7 +1385,7 @@ Error EditorSceneImporterGLTF::_parse_materials(GLTFState &state) { const Dictionary &d = materials[i]; - Ref<SpatialMaterial> material; + Ref<StandardMaterial3D> material; material.instance(); if (d.has("name")) { material->set_name(d["name"]); @@ -1401,7 +1405,7 @@ Error EditorSceneImporterGLTF::_parse_materials(GLTFState &state) { if (mr.has("baseColorTexture")) { const Dictionary &bct = mr["baseColorTexture"]; if (bct.has("index")) { - material->set_texture(SpatialMaterial::TEXTURE_ALBEDO, _get_texture(state, bct["index"])); + material->set_texture(StandardMaterial3D::TEXTURE_ALBEDO, _get_texture(state, bct["index"])); } if (!mr.has("baseColorFactor")) { material->set_albedo(Color(1, 1, 1)); @@ -1423,11 +1427,11 @@ Error EditorSceneImporterGLTF::_parse_materials(GLTFState &state) { if (mr.has("metallicRoughnessTexture")) { const Dictionary &bct = mr["metallicRoughnessTexture"]; if (bct.has("index")) { - const Ref<Texture> t = _get_texture(state, bct["index"]); - material->set_texture(SpatialMaterial::TEXTURE_METALLIC, t); - material->set_metallic_texture_channel(SpatialMaterial::TEXTURE_CHANNEL_BLUE); - material->set_texture(SpatialMaterial::TEXTURE_ROUGHNESS, t); - material->set_roughness_texture_channel(SpatialMaterial::TEXTURE_CHANNEL_GREEN); + const Ref<Texture2D> t = _get_texture(state, bct["index"]); + material->set_texture(StandardMaterial3D::TEXTURE_METALLIC, t); + material->set_metallic_texture_channel(StandardMaterial3D::TEXTURE_CHANNEL_BLUE); + material->set_texture(StandardMaterial3D::TEXTURE_ROUGHNESS, t); + material->set_roughness_texture_channel(StandardMaterial3D::TEXTURE_CHANNEL_GREEN); if (!mr.has("metallicFactor")) { material->set_metallic(1); } @@ -1441,8 +1445,8 @@ Error EditorSceneImporterGLTF::_parse_materials(GLTFState &state) { if (d.has("normalTexture")) { const Dictionary &bct = d["normalTexture"]; if (bct.has("index")) { - material->set_texture(SpatialMaterial::TEXTURE_NORMAL, _get_texture(state, bct["index"])); - material->set_feature(SpatialMaterial::FEATURE_NORMAL_MAPPING, true); + material->set_texture(StandardMaterial3D::TEXTURE_NORMAL, _get_texture(state, bct["index"])); + material->set_feature(StandardMaterial3D::FEATURE_NORMAL_MAPPING, true); } if (bct.has("scale")) { material->set_normal_scale(bct["scale"]); @@ -1451,9 +1455,9 @@ Error EditorSceneImporterGLTF::_parse_materials(GLTFState &state) { if (d.has("occlusionTexture")) { const Dictionary &bct = d["occlusionTexture"]; if (bct.has("index")) { - material->set_texture(SpatialMaterial::TEXTURE_AMBIENT_OCCLUSION, _get_texture(state, bct["index"])); - material->set_ao_texture_channel(SpatialMaterial::TEXTURE_CHANNEL_RED); - material->set_feature(SpatialMaterial::FEATURE_AMBIENT_OCCLUSION, true); + material->set_texture(StandardMaterial3D::TEXTURE_AMBIENT_OCCLUSION, _get_texture(state, bct["index"])); + material->set_ao_texture_channel(StandardMaterial3D::TEXTURE_CHANNEL_RED); + material->set_feature(StandardMaterial3D::FEATURE_AMBIENT_OCCLUSION, true); } } @@ -1461,7 +1465,7 @@ Error EditorSceneImporterGLTF::_parse_materials(GLTFState &state) { const Array &arr = d["emissiveFactor"]; ERR_FAIL_COND_V(arr.size() != 3, ERR_PARSE_ERROR); const Color c = Color(arr[0], arr[1], arr[2]).to_srgb(); - material->set_feature(SpatialMaterial::FEATURE_EMISSION, true); + material->set_feature(StandardMaterial3D::FEATURE_EMISSION, true); material->set_emission(c); } @@ -1469,8 +1473,8 @@ Error EditorSceneImporterGLTF::_parse_materials(GLTFState &state) { if (d.has("emissiveTexture")) { const Dictionary &bct = d["emissiveTexture"]; if (bct.has("index")) { - material->set_texture(SpatialMaterial::TEXTURE_EMISSION, _get_texture(state, bct["index"])); - material->set_feature(SpatialMaterial::FEATURE_EMISSION, true); + material->set_texture(StandardMaterial3D::TEXTURE_EMISSION, _get_texture(state, bct["index"])); + material->set_feature(StandardMaterial3D::FEATURE_EMISSION, true); material->set_emission(Color(0, 0, 0)); } } @@ -1478,17 +1482,16 @@ Error EditorSceneImporterGLTF::_parse_materials(GLTFState &state) { if (d.has("doubleSided")) { const bool ds = d["doubleSided"]; if (ds) { - material->set_cull_mode(SpatialMaterial::CULL_DISABLED); + material->set_cull_mode(StandardMaterial3D::CULL_DISABLED); } } if (d.has("alphaMode")) { const String &am = d["alphaMode"]; if (am == "BLEND") { - material->set_feature(SpatialMaterial::FEATURE_TRANSPARENT, true); - material->set_depth_draw_mode(SpatialMaterial::DEPTH_DRAW_ALPHA_OPAQUE_PREPASS); + material->set_transparency(StandardMaterial3D::TRANSPARENCY_ALPHA_DEPTH_PRE_PASS); } else if (am == "MASK") { - material->set_flag(SpatialMaterial::FLAG_USE_ALPHA_SCISSOR, true); + material->set_transparency(StandardMaterial3D::TRANSPARENCY_ALPHA_SCISSOR); if (d.has("alphaCutoff")) { material->set_alpha_scissor_threshold(d["alphaCutoff"]); } else { @@ -2180,6 +2183,8 @@ Error EditorSceneImporterGLTF::_map_skin_joints_indices_to_skeleton_bone_indices const GLTFNodeIndex node_i = skin.joints_original[joint_index]; const GLTFNode *node = state.nodes[node_i]; + skin.joint_i_to_name.insert(joint_index, node->name); + const int bone_index = skeleton.godot_skeleton->find_bone(node->name); ERR_FAIL_COND_V(bone_index < 0, FAILED); @@ -2201,12 +2206,18 @@ Error EditorSceneImporterGLTF::_create_skins(GLTFState &state) { const bool has_ibms = !gltf_skin.inverse_binds.empty(); for (int joint_i = 0; joint_i < gltf_skin.joints_original.size(); ++joint_i) { - int bone_i = gltf_skin.joint_i_to_bone_i[joint_i]; + Transform xform; if (has_ibms) { - skin->add_bind(bone_i, gltf_skin.inverse_binds[joint_i]); + xform = gltf_skin.inverse_binds[joint_i]; + } + + if (state.use_named_skin_binds) { + StringName name = gltf_skin.joint_i_to_name[joint_i]; + skin->add_named_bind(name, xform); } else { - skin->add_bind(bone_i, Transform()); + int bone_i = gltf_skin.joint_i_to_bone_i[joint_i]; + skin->add_bind(bone_i, xform); } } @@ -2394,9 +2405,9 @@ Error EditorSceneImporterGLTF::_parse_animations(GLTFState &state) { } } - const PoolVector<float> times = _decode_accessor_as_floats(state, input, false); + const Vector<float> times = _decode_accessor_as_floats(state, input, false); if (path == "translation") { - const PoolVector<Vector3> translations = _decode_accessor_as_vec3(state, output, false); + const Vector<Vector3> translations = _decode_accessor_as_vec3(state, output, false); track->translation_track.interpolation = interp; track->translation_track.times = Variant(times); //convert via variant track->translation_track.values = Variant(translations); //convert via variant @@ -2406,12 +2417,12 @@ Error EditorSceneImporterGLTF::_parse_animations(GLTFState &state) { track->rotation_track.times = Variant(times); //convert via variant track->rotation_track.values = rotations; //convert via variant } else if (path == "scale") { - const PoolVector<Vector3> scales = _decode_accessor_as_vec3(state, output, false); + const Vector<Vector3> scales = _decode_accessor_as_vec3(state, output, false); track->scale_track.interpolation = interp; track->scale_track.times = Variant(times); //convert via variant track->scale_track.values = Variant(scales); //convert via variant } else if (path == "weights") { - const PoolVector<float> weights = _decode_accessor_as_floats(state, output, false); + const Vector<float> weights = _decode_accessor_as_floats(state, output, false); ERR_FAIL_INDEX_V(state.nodes[node]->mesh, state.meshes.size(), ERR_PARSE_ERROR); const GLTFMesh *mesh = &state.meshes[state.nodes[node]->mesh]; @@ -2424,7 +2435,7 @@ Error EditorSceneImporterGLTF::_parse_animations(GLTFState &state) { ERR_FAIL_COND_V_MSG(weights.size() != expected_value_count, ERR_PARSE_ERROR, "Invalid weight data, expected " + itos(expected_value_count) + " weight values, got " + itos(weights.size()) + " instead."); const int wlen = weights.size() / wc; - PoolVector<float>::Read r = weights.read(); + const float *r = weights.ptr(); for (int k = 0; k < wc; k++) { //separate tracks, having them together is not such a good idea GLTFAnimation::Channel<float> cf; cf.interpolation = interp; @@ -2615,7 +2626,7 @@ struct EditorSceneImporterGLTFInterpolate { const float t2 = t * t; const float t3 = t2 * t; - return 0.5f * ((2.0f * p1) + (-p0 + p2) * t + (2.0f * p0 - 5.0f * p1 + 4 * p2 - p3) * t2 + (-p0 + 3.0f * p1 - 3.0f * p2 + p3) * t3); + return 0.5f * ((2.0f * p1) + (-p0 + p2) * t + (2.0f * p0 - 5.0f * p1 + 4.0f * p2 - p3) * t2 + (-p0 + 3.0f * p1 - 3.0f * p2 + p3) * t3); } T bezier(T start, T control_1, T control_2, T end, float t) { @@ -2992,6 +3003,7 @@ Node *EditorSceneImporterGLTF::import_scene(const String &p_path, uint32_t p_fla state.major_version = version.get_slice(".", 0).to_int(); state.minor_version = version.get_slice(".", 1).to_int(); + state.use_named_skin_binds = p_flags & IMPORT_USE_NAMED_SKIN_BINDS; /* STEP 0 PARSE SCENE */ Error err = _parse_scenes(state); diff --git a/editor/import/editor_scene_importer_gltf.h b/editor/import/editor_scene_importer_gltf.h index 78d7106b0d..5d2711483b 100644 --- a/editor/import/editor_scene_importer_gltf.h +++ b/editor/import/editor_scene_importer_gltf.h @@ -231,6 +231,7 @@ class EditorSceneImporterGLTF : public EditorSceneImporter { // A mapping from the joint indices (in the order of joints_original) to the // Godot Skeleton's bone_indices Map<int, int> joint_i_to_bone_i; + Map<int, StringName> joint_i_to_name; // The Actual Skin that will be created as a mapping between the IBM's of this skin // to the generated skeleton for the mesh instances. @@ -298,6 +299,8 @@ class EditorSceneImporterGLTF : public EditorSceneImporter { int minor_version; Vector<uint8_t> glb_data; + bool use_named_skin_binds; + Vector<GLTFNode *> nodes; Vector<Vector<uint8_t> > buffers; Vector<GLTFBufferView> buffer_views; @@ -310,7 +313,7 @@ class EditorSceneImporterGLTF : public EditorSceneImporter { Vector<int> root_nodes; Vector<GLTFTexture> textures; - Vector<Ref<Texture> > images; + Vector<Ref<Texture2D> > images; Vector<GLTFSkin> skins; Vector<GLTFCamera> cameras; @@ -335,7 +338,7 @@ class EditorSceneImporterGLTF : public EditorSceneImporter { String _sanitize_bone_name(const String &name); String _gen_unique_bone_name(GLTFState &state, const GLTFSkeletonIndex skel_i, const String &p_name); - Ref<Texture> _get_texture(GLTFState &state, const GLTFTextureIndex p_texture); + Ref<Texture2D> _get_texture(GLTFState &state, const GLTFTextureIndex p_texture); Error _parse_json(const String &p_path, GLTFState &state); Error _parse_glb(const String &p_path, GLTFState &state); @@ -352,11 +355,11 @@ class EditorSceneImporterGLTF : public EditorSceneImporter { Error _decode_buffer_view(GLTFState &state, double *dst, const GLTFBufferViewIndex p_buffer_view, const int skip_every, const int skip_bytes, const int element_size, const int count, const GLTFType type, const int component_count, const int component_type, const int component_size, const bool normalized, const int byte_offset, const bool for_vertex); Vector<double> _decode_accessor(GLTFState &state, const GLTFAccessorIndex p_accessor, const bool p_for_vertex); - PoolVector<float> _decode_accessor_as_floats(GLTFState &state, const GLTFAccessorIndex p_accessor, const bool p_for_vertex); - PoolVector<int> _decode_accessor_as_ints(GLTFState &state, const GLTFAccessorIndex p_accessor, const bool p_for_vertex); - PoolVector<Vector2> _decode_accessor_as_vec2(GLTFState &state, const GLTFAccessorIndex p_accessor, const bool p_for_vertex); - PoolVector<Vector3> _decode_accessor_as_vec3(GLTFState &state, const GLTFAccessorIndex p_accessor, const bool p_for_vertex); - PoolVector<Color> _decode_accessor_as_color(GLTFState &state, const GLTFAccessorIndex p_accessor, const bool p_for_vertex); + Vector<float> _decode_accessor_as_floats(GLTFState &state, const GLTFAccessorIndex p_accessor, const bool p_for_vertex); + Vector<int> _decode_accessor_as_ints(GLTFState &state, const GLTFAccessorIndex p_accessor, const bool p_for_vertex); + Vector<Vector2> _decode_accessor_as_vec2(GLTFState &state, const GLTFAccessorIndex p_accessor, const bool p_for_vertex); + Vector<Vector3> _decode_accessor_as_vec3(GLTFState &state, const GLTFAccessorIndex p_accessor, const bool p_for_vertex); + Vector<Color> _decode_accessor_as_color(GLTFState &state, const GLTFAccessorIndex p_accessor, const bool p_for_vertex); Vector<Quat> _decode_accessor_as_quat(GLTFState &state, const GLTFAccessorIndex p_accessor, const bool p_for_vertex); Vector<Transform2D> _decode_accessor_as_xform2d(GLTFState &state, const GLTFAccessorIndex p_accessor, const bool p_for_vertex); Vector<Basis> _decode_accessor_as_basis(GLTFState &state, const GLTFAccessorIndex p_accessor, const bool p_for_vertex); diff --git a/editor/import/resource_importer_bitmask.cpp b/editor/import/resource_importer_bitmask.cpp index c6fdbd1378..22989b81e4 100644 --- a/editor/import/resource_importer_bitmask.cpp +++ b/editor/import/resource_importer_bitmask.cpp @@ -94,7 +94,6 @@ Error ResourceImporterBitMap::import(const String &p_source_file, const String & Ref<BitMap> bitmap; bitmap.instance(); bitmap->create(Size2(w, h)); - image->lock(); for (int i = 0; i < h; i++) { for (int j = 0; j < w; j++) { diff --git a/editor/import/resource_importer_layered_texture.cpp b/editor/import/resource_importer_layered_texture.cpp index 9b819bc341..d472070808 100644 --- a/editor/import/resource_importer_layered_texture.cpp +++ b/editor/import/resource_importer_layered_texture.cpp @@ -38,26 +38,74 @@ #include "editor/editor_node.h" #include "scene/resources/texture.h" +#if 0 String ResourceImporterLayeredTexture::get_importer_name() const { - return is_3d ? "texture_3d" : "texture_array"; + switch (mode) { + case MODE_CUBEMAP: { + return "cubemap_texture"; + } break; + case MODE_2D_ARRAY: { + return "2d_array_texture"; + } break; + case MODE_CUBEMAP_ARRAY: { + return "cubemap_array_texture"; + } break; + } + + ERR_FAIL_V(""); } String ResourceImporterLayeredTexture::get_visible_name() const { - return is_3d ? "Texture3D" : "TextureArray"; + switch (mode) { + case MODE_CUBEMAP: { + return "Cubemap"; + } break; + case MODE_2D_ARRAY: { + return "Texture2DArray"; + } break; + case MODE_CUBEMAP_ARRAY: { + return "CubemapArray"; + } break; + } + + ERR_FAIL_V(""); } void ResourceImporterLayeredTexture::get_recognized_extensions(List<String> *p_extensions) const { ImageLoader::get_recognized_extensions(p_extensions); } String ResourceImporterLayeredTexture::get_save_extension() const { - return is_3d ? "tex3d" : "texarr"; + switch (mode) { + case MODE_CUBEMAP: { + return "cube"; + } break; + case MODE_2D_ARRAY: { + return "tex2darr"; + } break; + case MODE_CUBEMAP_ARRAY: { + return "cubearr"; + } break; + } + + ERR_FAIL_V(String()); } String ResourceImporterLayeredTexture::get_resource_type() const { - return is_3d ? "Texture3D" : "TextureArray"; + switch (mode) { + case MODE_CUBEMAP: { + return "Cubemap"; + } break; + case MODE_2D_ARRAY: { + return "Texture2DArray"; + } break; + case MODE_CUBEMAP_ARRAY: { + return "CubemapArray"; + } break; + } + ERR_FAIL_V(String()); } bool ResourceImporterLayeredTexture::get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const { @@ -66,47 +114,48 @@ bool ResourceImporterLayeredTexture::get_option_visibility(const String &p_optio } int ResourceImporterLayeredTexture::get_preset_count() const { - return 3; + return 0; } String ResourceImporterLayeredTexture::get_preset_name(int p_idx) const { - static const char *preset_names[] = { - "3D", - "2D", - "ColorCorrect" - }; - - return preset_names[p_idx]; + return ""; } void ResourceImporterLayeredTexture::get_import_options(List<ImportOption> *r_options, int p_preset) const { - r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "compress/mode", PROPERTY_HINT_ENUM, "Lossless,Video RAM,Uncompressed", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_UPDATE_ALL_IF_MODIFIED), p_preset == PRESET_3D ? 1 : 0)); + r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "compress/mode", PROPERTY_HINT_ENUM, "Lossless,Video RAM,Uncompressed", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_UPDATE_ALL_IF_MODIFIED), 1)); r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "compress/no_bptc_if_rgb"), false)); - r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "flags/repeat", PROPERTY_HINT_ENUM, "Disabled,Enabled,Mirrored"), 0)); - r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "flags/filter"), true)); - r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "flags/mipmaps"), p_preset == PRESET_COLOR_CORRECT ? 0 : 1)); - r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "flags/srgb", PROPERTY_HINT_ENUM, "Disable,Enable"), p_preset == PRESET_3D ? 1 : 0)); - r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "slices/horizontal", PROPERTY_HINT_RANGE, "1,256,1"), p_preset == PRESET_COLOR_CORRECT ? 16 : 8)); - r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "slices/vertical", PROPERTY_HINT_RANGE, "1,256,1"), p_preset == PRESET_COLOR_CORRECT ? 1 : 8)); + r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "compress/channel_pack", PROPERTY_HINT_ENUM, "sRGB Friendly,Optimized"), 0)); + r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "flags/mipmaps"), true)); + if (mode == MODE_2D_ARRAY) { + r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "slices/horizontal", PROPERTY_HINT_RANGE, "1,256,1"), 8)); + } + if (mode == MODE_2D_ARRAY || mode == MODE_CUBEMAP_ARRAY) { + r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "slices/vertical", PROPERTY_HINT_RANGE, "1,256,1"), 8)); + } } -void ResourceImporterLayeredTexture::_save_tex(const Vector<Ref<Image> > &p_images, const String &p_to_path, int p_compress_mode, Image::CompressMode p_vram_compression, bool p_mipmaps, int p_texture_flags) { +void ResourceImporterLayeredTexture::_save_tex(const Vector<Ref<Image> > &p_images, const String &p_to_path, int p_compress_mode, Image::CompressMode p_vram_compression, bool p_mipmaps) { FileAccess *f = FileAccess::open(p_to_path, FileAccess::WRITE); f->store_8('G'); f->store_8('D'); - if (is_3d) { - f->store_8('3'); - } else { - f->store_8('A'); + switch (mode) { + case MODE_2D_ARRAY: f->store_8('A'); break; + case MODE_CUBEMAP: f->store_8('C'); break; + case MODE_CUBEMAP_ARRAY: f->store_8('X'); break; } + f->store_8('T'); //godot streamable texture f->store_32(p_images[0]->get_width()); f->store_32(p_images[0]->get_height()); f->store_32(p_images.size()); //depth - f->store_32(p_texture_flags); + uint32_t flags = 0; + if (p_mipmaps) { + flags |= TEXTURE_FLAGS_MIPMAPS; + } + f->store_32(flags); if (p_compress_mode != COMPRESS_VIDEO_RAM) { //vram needs to do a first compression to tell what the format is, for the rest its ok f->store_32(p_images[0]->get_format()); @@ -138,11 +187,11 @@ void ResourceImporterLayeredTexture::_save_tex(const Vector<Ref<Image> > &p_imag image->shrink_x2(); } - PoolVector<uint8_t> data = Image::lossless_packer(image); + Vector<uint8_t> data = Image::lossless_packer(image); int data_len = data.size(); f->store_32(data_len); - PoolVector<uint8_t>::Read r = data.read(); + const uint8_t* r = data.ptr(); f->store_buffer(r.ptr(), data_len); } @@ -161,10 +210,10 @@ void ResourceImporterLayeredTexture::_save_tex(const Vector<Ref<Image> > &p_imag f->store_32(p_compress_mode); // 0 - lossless (PNG), 1 - vram, 2 - uncompressed } - PoolVector<uint8_t> data = image->get_data(); + Vector<uint8_t> data = image->get_data(); int dl = data.size(); - PoolVector<uint8_t>::Read r = data.read(); + const uint8_t* r = data.ptr(); f->store_buffer(r.ptr(), dl); } break; case COMPRESS_UNCOMPRESSED: { @@ -177,10 +226,10 @@ void ResourceImporterLayeredTexture::_save_tex(const Vector<Ref<Image> > &p_imag image->clear_mipmaps(); } - PoolVector<uint8_t> data = image->get_data(); + Vector<uint8_t> data = image->get_data(); int dl = data.size(); - PoolVector<uint8_t>::Read r = data.read(); + const uint8_t* r = data.ptr(); f->store_buffer(r.ptr(), dl); @@ -195,12 +244,18 @@ Error ResourceImporterLayeredTexture::import(const String &p_source_file, const int compress_mode = p_options["compress/mode"]; int no_bptc_if_rgb = p_options["compress/no_bptc_if_rgb"]; - int repeat = p_options["flags/repeat"]; - bool filter = p_options["flags/filter"]; bool mipmaps = p_options["flags/mipmaps"]; - int srgb = p_options["flags/srgb"]; - int hslices = p_options["slices/horizontal"]; - int vslices = p_options["slices/vertical"]; + int channel_pack = p_options["compress/channel_pack"]; + int hslices = (p_options.has("slices/horizontal")) ? int(p_options["slices/horizontal"]) : 0; + int vslices = (p_options.has("slices/vertical")) ? int(p_options["slices/vertical"]) : 0; + + if (mode == MODE_CUBEMAP) { + hslices = 3; + vslices = 2; + } else if (mode == MODE_CUBEMAP_ARRAY) { + hslices = 3; + vslices *= 2; //put cubemaps vertically + } Ref<Image> image; image.instance(); @@ -208,17 +263,9 @@ Error ResourceImporterLayeredTexture::import(const String &p_source_file, const if (err != OK) return err; - int tex_flags = 0; - if (repeat > 0) - tex_flags |= Texture::FLAG_REPEAT; - if (repeat == 2) - tex_flags |= Texture::FLAG_MIRRORED_REPEAT; - if (filter) - tex_flags |= Texture::FLAG_FILTER; - if (mipmaps || compress_mode == COMPRESS_VIDEO_RAM) - tex_flags |= Texture::FLAG_MIPMAPS; - if (srgb == 1) - tex_flags |= Texture::FLAG_CONVERT_TO_LINEAR; + if (compress_mode == COMPRESS_VIDEO_RAM) { + mipmaps = true; + } Vector<Ref<Image> > slices; @@ -228,7 +275,7 @@ Error ResourceImporterLayeredTexture::import(const String &p_source_file, const //optimize if (compress_mode == COMPRESS_VIDEO_RAM) { //if using video ram, optimize - if (srgb) { + if (channel_pack == 0) { //remove alpha if not needed, so compression is more efficient if (image->get_format() == Image::FORMAT_RGBA8 && !image->detect_alpha()) { image->convert(Image::FORMAT_RGB8); @@ -266,8 +313,8 @@ Error ResourceImporterLayeredTexture::import(const String &p_source_file, const encode_bptc = true; if (no_bptc_if_rgb) { - Image::DetectChannels channels = image->get_detected_channels(); - if (channels != Image::DETECTED_LA && channels != Image::DETECTED_RGBA) { + Image::UsedChannels channels = image->detect_used_channels(); + if (channels != Image::USED_CHANNELS_LA && channels != Image::USED_CHANNELS_RGBA) { encode_bptc = false; } } @@ -277,14 +324,14 @@ Error ResourceImporterLayeredTexture::import(const String &p_source_file, const if (encode_bptc) { - _save_tex(slices, p_save_path + ".bptc." + extension, compress_mode, Image::COMPRESS_BPTC, mipmaps, tex_flags); + _save_tex(slices, p_save_path + ".bptc." + extension, compress_mode, Image::COMPRESS_BPTC, mipmaps); r_platform_variants->push_back("bptc"); ok_on_pc = true; } if (ProjectSettings::get_singleton()->get("rendering/vram_compression/import_s3tc")) { - _save_tex(slices, p_save_path + ".s3tc." + extension, compress_mode, Image::COMPRESS_S3TC, mipmaps, tex_flags); + _save_tex(slices, p_save_path + ".s3tc." + extension, compress_mode, Image::COMPRESS_S3TC, mipmaps); r_platform_variants->push_back("s3tc"); ok_on_pc = true; formats_imported.push_back("s3tc"); @@ -292,20 +339,20 @@ Error ResourceImporterLayeredTexture::import(const String &p_source_file, const if (ProjectSettings::get_singleton()->get("rendering/vram_compression/import_etc2")) { - _save_tex(slices, p_save_path + ".etc2." + extension, compress_mode, Image::COMPRESS_ETC2, mipmaps, tex_flags); + _save_tex(slices, p_save_path + ".etc2." + extension, compress_mode, Image::COMPRESS_ETC2, mipmaps); r_platform_variants->push_back("etc2"); formats_imported.push_back("etc2"); } if (ProjectSettings::get_singleton()->get("rendering/vram_compression/import_etc")) { - _save_tex(slices, p_save_path + ".etc." + extension, compress_mode, Image::COMPRESS_ETC, mipmaps, tex_flags); + _save_tex(slices, p_save_path + ".etc." + extension, compress_mode, Image::COMPRESS_ETC, mipmaps); r_platform_variants->push_back("etc"); formats_imported.push_back("etc"); } if (ProjectSettings::get_singleton()->get("rendering/vram_compression/import_pvrtc")) { - _save_tex(slices, p_save_path + ".pvrtc." + extension, compress_mode, Image::COMPRESS_PVRTC4, mipmaps, tex_flags); + _save_tex(slices, p_save_path + ".pvrtc." + extension, compress_mode, Image::COMPRESS_PVRTC4, mipmaps); r_platform_variants->push_back("pvrtc"); formats_imported.push_back("pvrtc"); } @@ -315,7 +362,7 @@ Error ResourceImporterLayeredTexture::import(const String &p_source_file, const } } else { //import normally - _save_tex(slices, p_save_path + "." + extension, compress_mode, Image::COMPRESS_S3TC /*this is ignored */, mipmaps, tex_flags); + _save_tex(slices, p_save_path + "." + extension, compress_mode, Image::COMPRESS_S3TC /*this is ignored */, mipmaps); } if (r_metadata) { @@ -396,8 +443,9 @@ ResourceImporterLayeredTexture *ResourceImporterLayeredTexture::singleton = NULL ResourceImporterLayeredTexture::ResourceImporterLayeredTexture() { singleton = this; - is_3d = true; + mode = MODE_CUBEMAP; } ResourceImporterLayeredTexture::~ResourceImporterLayeredTexture() { } +#endif diff --git a/editor/import/resource_importer_layered_texture.h b/editor/import/resource_importer_layered_texture.h index 6dc4b6ed3c..6a6bc89a81 100644 --- a/editor/import/resource_importer_layered_texture.h +++ b/editor/import/resource_importer_layered_texture.h @@ -28,18 +28,61 @@ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /*************************************************************************/ +#if 0 +/*************************************************************************/ +/* resource_importer_layered_texture.h */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*************************************************************************/ + #ifndef RESOURCE_IMPORTER_LAYERED_TEXTURE_H #define RESOURCE_IMPORTER_LAYERED_TEXTURE_H #include "core/image.h" #include "core/io/resource_importer.h" + class StreamTexture; class ResourceImporterLayeredTexture : public ResourceImporter { GDCLASS(ResourceImporterLayeredTexture, ResourceImporter); +public: + enum Mode { + MODE_CUBEMAP, + MODE_2D_ARRAY, + MODE_CUBEMAP_ARRAY + }; + + enum TextureFlags { + TEXTURE_FLAGS_MIPMAPS = 1 + }; - bool is_3d; +private: + Mode mode; static const char *compression_formats[]; protected: @@ -57,12 +100,6 @@ public: virtual String get_save_extension() const; virtual String get_resource_type() const; - enum Preset { - PRESET_3D, - PRESET_2D, - PRESET_COLOR_CORRECT, - }; - enum CompressMode { COMPRESS_LOSSLESS, COMPRESS_VIDEO_RAM, @@ -75,7 +112,7 @@ public: virtual void get_import_options(List<ImportOption> *r_options, int p_preset = 0) const; virtual bool get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const; - void _save_tex(const Vector<Ref<Image> > &p_images, const String &p_to_path, int p_compress_mode, Image::CompressMode p_vram_compression, bool p_mipmaps, int p_texture_flags); + void _save_tex(const Vector<Ref<Image> > &p_images, const String &p_to_path, int p_compress_mode, Image::CompressMode p_vram_compression, bool p_mipmaps); virtual Error import(const String &p_source_file, const String &p_save_path, const Map<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files = NULL, Variant *r_metadata = NULL); @@ -84,8 +121,11 @@ public: virtual bool are_import_settings_valid(const String &p_path) const; virtual String get_import_settings_string() const; - void set_3d(bool p_3d) { is_3d = p_3d; } + void set_mode(Mode p_mode) { mode = p_mode; } + ResourceImporterLayeredTexture(); ~ResourceImporterLayeredTexture(); }; #endif // RESOURCE_IMPORTER_LAYERED_TEXTURE_H + +#endif diff --git a/editor/import/resource_importer_obj.cpp b/editor/import/resource_importer_obj.cpp index bdd6a197f8..7fd3bcc478 100644 --- a/editor/import/resource_importer_obj.cpp +++ b/editor/import/resource_importer_obj.cpp @@ -42,12 +42,12 @@ uint32_t EditorOBJImporter::get_import_flags() const { return IMPORT_SCENE; } -static Error _parse_material_library(const String &p_path, Map<String, Ref<SpatialMaterial> > &material_map, List<String> *r_missing_deps) { +static Error _parse_material_library(const String &p_path, Map<String, Ref<StandardMaterial3D> > &material_map, List<String> *r_missing_deps) { FileAccessRef f = FileAccess::open(p_path, FileAccess::READ); ERR_FAIL_COND_V_MSG(!f, ERR_CANT_OPEN, vformat("Couldn't open MTL file '%s', it may not exist or not be readable.", p_path)); - Ref<SpatialMaterial> current; + Ref<StandardMaterial3D> current; String current_name; String base_path = p_path.get_base_dir(); while (true) { @@ -102,7 +102,7 @@ static Error _parse_material_library(const String &p_path, Map<String, Ref<Spati c.a = d; current->set_albedo(c); if (c.a < 0.99) { - current->set_feature(SpatialMaterial::FEATURE_TRANSPARENT, true); + current->set_transparency(StandardMaterial3D::TRANSPARENCY_ALPHA); } } else if (l.begins_with("Tr ")) { //normal @@ -114,7 +114,7 @@ static Error _parse_material_library(const String &p_path, Map<String, Ref<Spati c.a = 1.0 - d; current->set_albedo(c); if (c.a < 0.99) { - current->set_feature(SpatialMaterial::FEATURE_TRANSPARENT, true); + current->set_transparency(StandardMaterial3D::TRANSPARENCY_ALPHA); } } else if (l.begins_with("map_Ka ")) { @@ -133,10 +133,10 @@ static Error _parse_material_library(const String &p_path, Map<String, Ref<Spati path = base_path.plus_file(p); } - Ref<Texture> texture = ResourceLoader::load(path); + Ref<Texture2D> texture = ResourceLoader::load(path); if (texture.is_valid()) { - current->set_texture(SpatialMaterial::TEXTURE_ALBEDO, texture); + current->set_texture(StandardMaterial3D::TEXTURE_ALBEDO, texture); } else if (r_missing_deps) { r_missing_deps->push_back(path); } @@ -153,10 +153,10 @@ static Error _parse_material_library(const String &p_path, Map<String, Ref<Spati path = base_path.plus_file(p); } - Ref<Texture> texture = ResourceLoader::load(path); + Ref<Texture2D> texture = ResourceLoader::load(path); if (texture.is_valid()) { - current->set_texture(SpatialMaterial::TEXTURE_METALLIC, texture); + current->set_texture(StandardMaterial3D::TEXTURE_METALLIC, texture); } else if (r_missing_deps) { r_missing_deps->push_back(path); } @@ -173,10 +173,10 @@ static Error _parse_material_library(const String &p_path, Map<String, Ref<Spati path = base_path.plus_file(p); } - Ref<Texture> texture = ResourceLoader::load(path); + Ref<Texture2D> texture = ResourceLoader::load(path); if (texture.is_valid()) { - current->set_texture(SpatialMaterial::TEXTURE_ROUGHNESS, texture); + current->set_texture(StandardMaterial3D::TEXTURE_ROUGHNESS, texture); } else if (r_missing_deps) { r_missing_deps->push_back(path); } @@ -187,11 +187,11 @@ static Error _parse_material_library(const String &p_path, Map<String, Ref<Spati String p = l.replace("map_bump", "").replace("\\", "/").strip_edges(); String path = base_path.plus_file(p); - Ref<Texture> texture = ResourceLoader::load(path); + Ref<Texture2D> texture = ResourceLoader::load(path); if (texture.is_valid()) { - current->set_feature(SpatialMaterial::FEATURE_NORMAL_MAPPING, true); - current->set_texture(SpatialMaterial::TEXTURE_NORMAL, texture); + current->set_feature(StandardMaterial3D::FEATURE_NORMAL_MAPPING, true); + current->set_texture(StandardMaterial3D::TEXTURE_NORMAL, texture); } else if (r_missing_deps) { r_missing_deps->push_back(path); } @@ -221,7 +221,7 @@ static Error _parse_obj(const String &p_path, List<Ref<Mesh> > &r_meshes, bool p Vector<Vector2> uvs; String name; - Map<String, Map<String, Ref<SpatialMaterial> > > material_map; + Map<String, Map<String, Ref<StandardMaterial3D> > > material_map; Ref<SurfaceTool> surf_tool = memnew(SurfaceTool); surf_tool->begin(Mesh::PRIMITIVE_TRIANGLES); @@ -397,7 +397,7 @@ static Error _parse_obj(const String &p_path, List<Ref<Mesh> > &r_meshes, bool p current_material_library = l.replace("mtllib", "").strip_edges(); if (!material_map.has(current_material_library)) { - Map<String, Ref<SpatialMaterial> > lib; + Map<String, Ref<StandardMaterial3D> > lib; Error err = _parse_material_library(current_material_library, lib, r_missing_deps); if (err == ERR_CANT_OPEN) { String dir = p_path.get_base_dir(); diff --git a/editor/import/resource_importer_scene.cpp b/editor/import/resource_importer_scene.cpp index 0774d0b5dc..22c2a71286 100644 --- a/editor/import/resource_importer_scene.cpp +++ b/editor/import/resource_importer_scene.cpp @@ -324,19 +324,19 @@ Node *ResourceImporterScene::_fix_node(Node *p_node, Node *p_root, Map<Ref<Mesh> for (int i = 0; i < m->get_surface_count(); i++) { - Ref<SpatialMaterial> mat = m->surface_get_material(i); + Ref<StandardMaterial3D> mat = m->surface_get_material(i); if (!mat.is_valid()) continue; if (_teststr(mat->get_name(), "alpha")) { - mat->set_feature(SpatialMaterial::FEATURE_TRANSPARENT, true); + mat->set_transparency(StandardMaterial3D::TRANSPARENCY_ALPHA); mat->set_name(_fixstr(mat->get_name(), "alpha")); } if (_teststr(mat->get_name(), "vcol")) { - mat->set_flag(SpatialMaterial::FLAG_ALBEDO_FROM_VERTEX_COLOR, true); - mat->set_flag(SpatialMaterial::FLAG_SRGB_VERTEX_COLOR, true); + mat->set_flag(StandardMaterial3D::FLAG_ALBEDO_FROM_VERTEX_COLOR, true); + mat->set_flag(StandardMaterial3D::FLAG_SRGB_VERTEX_COLOR, true); mat->set_name(_fixstr(mat->get_name(), "vcol")); } } @@ -1171,6 +1171,7 @@ void ResourceImporterScene::get_import_options(List<ImportOption> *r_options, in r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "meshes/storage", PROPERTY_HINT_ENUM, "Built-In,Files (.mesh),Files (.tres)"), meshes_out ? 1 : 0)); r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "meshes/light_baking", PROPERTY_HINT_ENUM, "Disabled,Enable,Gen Lightmaps", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_UPDATE_ALL_IF_MODIFIED), 0)); r_options->push_back(ImportOption(PropertyInfo(Variant::REAL, "meshes/lightmap_texel_size", PROPERTY_HINT_RANGE, "0.001,100,0.001"), 0.1)); + r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "skins/use_named_skins"), true)); r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "external_files/store_in_subdir"), false)); r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "animation/import", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_UPDATE_ALL_IF_MODIFIED), true)); r_options->push_back(ImportOption(PropertyInfo(Variant::REAL, "animation/fps", PROPERTY_HINT_RANGE, "1,120,1"), 15)); @@ -1313,6 +1314,9 @@ Error ResourceImporterScene::import(const String &p_source_file, const String &p if (int(p_options["materials/location"]) == 0) import_flags |= EditorSceneImporter::IMPORT_MATERIALS_IN_INSTANCES; + if (bool(p_options["skins/use_named_skins"])) + import_flags |= EditorSceneImporter::IMPORT_USE_NAMED_SKIN_BINDS; + Error err = OK; List<String> missing_deps; // for now, not much will be done with this Node *scene = importer->import_scene(src_path, import_flags, fps, &missing_deps, &err); @@ -1473,7 +1477,7 @@ Error ResourceImporterScene::import(const String &p_source_file, const String &p } else { post_import_script = Ref<EditorScenePostImport>(memnew(EditorScenePostImport)); - post_import_script->set_script(scr.get_ref_ptr()); + post_import_script->set_script(scr); if (!post_import_script->get_script_instance()) { EditorNode::add_io_error(TTR("Invalid/broken script for post-import (check console):") + " " + post_import_script_path); post_import_script.unref(); diff --git a/editor/import/resource_importer_scene.h b/editor/import/resource_importer_scene.h index 2691b224eb..20e7af15b5 100644 --- a/editor/import/resource_importer_scene.h +++ b/editor/import/resource_importer_scene.h @@ -59,7 +59,8 @@ public: IMPORT_GENERATE_TANGENT_ARRAYS = 256, IMPORT_FAIL_ON_MISSING_DEPENDENCIES = 512, IMPORT_MATERIALS_IN_INSTANCES = 1024, - IMPORT_USE_COMPRESSION = 2048 + IMPORT_USE_COMPRESSION = 2048, + IMPORT_USE_NAMED_SKIN_BINDS = 4096, }; diff --git a/editor/import/resource_importer_texture.cpp b/editor/import/resource_importer_texture.cpp index 88547280ce..7144bc04c8 100644 --- a/editor/import/resource_importer_texture.cpp +++ b/editor/import/resource_importer_texture.cpp @@ -32,20 +32,22 @@ #include "core/io/config_file.h" #include "core/io/image_loader.h" +#include "core/version.h" #include "editor/editor_file_system.h" #include "editor/editor_node.h" -#include "scene/resources/texture.h" -void ResourceImporterTexture::_texture_reimport_srgb(const Ref<StreamTexture> &p_tex) { +void ResourceImporterTexture::_texture_reimport_roughness(const Ref<StreamTexture> &p_tex, const String &p_normal_path, VS::TextureDetectRoughnessChannel p_channel) { singleton->mutex->lock(); StringName path = p_tex->get_path(); if (!singleton->make_flags.has(path)) { - singleton->make_flags[path] = 0; + singleton->make_flags[path] = MakeInfo(); } - singleton->make_flags[path] |= MAKE_SRGB_FLAG; + singleton->make_flags[path].flags |= MAKE_ROUGHNESS_FLAG; + singleton->make_flags[path].channel_for_roughness = p_channel; + singleton->make_flags[path].normal_path_for_roughness = p_normal_path; singleton->mutex->unlock(); } @@ -56,10 +58,10 @@ void ResourceImporterTexture::_texture_reimport_3d(const Ref<StreamTexture> &p_t StringName path = p_tex->get_path(); if (!singleton->make_flags.has(path)) { - singleton->make_flags[path] = 0; + singleton->make_flags[path] = MakeInfo(); } - singleton->make_flags[path] |= MAKE_3D_FLAG; + singleton->make_flags[path].flags |= MAKE_3D_FLAG; singleton->mutex->unlock(); } @@ -70,10 +72,10 @@ void ResourceImporterTexture::_texture_reimport_normal(const Ref<StreamTexture> StringName path = p_tex->get_path(); if (!singleton->make_flags.has(path)) { - singleton->make_flags[path] = 0; + singleton->make_flags[path] = MakeInfo(); } - singleton->make_flags[path] |= MAKE_NORMAL_FLAG; + singleton->make_flags[path].flags |= MAKE_NORMAL_FLAG; singleton->mutex->unlock(); } @@ -91,7 +93,7 @@ void ResourceImporterTexture::update_imports() { } Vector<String> to_reimport; - for (Map<StringName, int>::Element *E = make_flags.front(); E; E = E->next()) { + for (Map<StringName, MakeInfo>::Element *E = make_flags.front(); E; E = E->next()) { Ref<ConfigFile> cf; cf.instance(); @@ -101,22 +103,27 @@ void ResourceImporterTexture::update_imports() { ERR_CONTINUE(err != OK); bool changed = false; - if (E->get() & MAKE_SRGB_FLAG && int(cf->get_value("params", "flags/srgb")) == 2) { - cf->set_value("params", "flags/srgb", 1); + + if (E->get().flags & MAKE_NORMAL_FLAG && int(cf->get_value("params", "compress/normal_map")) == 0) { + cf->set_value("params", "compress/normal_map", 1); changed = true; } - if (E->get() & MAKE_NORMAL_FLAG && int(cf->get_value("params", "compress/normal_map")) == 0) { - cf->set_value("params", "compress/normal_map", 1); + if (E->get().flags & MAKE_ROUGHNESS_FLAG && int(cf->get_value("params", "roughness/mode")) == 0) { + cf->set_value("params", "roughness/mode", E->get().channel_for_roughness + 2); + cf->set_value("params", "roughness/src_normal", E->get().normal_path_for_roughness); changed = true; } - if (E->get() & MAKE_3D_FLAG && bool(cf->get_value("params", "detect_3d"))) { - cf->set_value("params", "detect_3d", false); - cf->set_value("params", "compress/mode", 2); - cf->set_value("params", "flags/repeat", true); - cf->set_value("params", "flags/filter", true); - cf->set_value("params", "flags/mipmaps", true); + if (E->get().flags & MAKE_3D_FLAG && bool(cf->get_value("params", "detect_3d/compress_to"))) { + int compress_to = cf->get_value("params", "detect_3d/compress_to"); + cf->set_value("params", "detect_3d/compress_to", 0); + if (compress_to == 1) { + cf->set_value("params", "compress/mode", COMPRESS_VRAM_COMPRESSED); + } else if (compress_to == 2) { + cf->set_value("params", "compress/mode", COMPRESS_BASIS_UNIVERSAL); + } + cf->set_value("params", "mipmaps/generate", true); changed = true; } @@ -142,7 +149,7 @@ String ResourceImporterTexture::get_importer_name() const { String ResourceImporterTexture::get_visible_name() const { - return "Texture"; + return "Texture2D"; } void ResourceImporterTexture::get_recognized_extensions(List<String> *p_extensions) const { @@ -161,17 +168,20 @@ bool ResourceImporterTexture::get_option_visibility(const String &p_option, cons if (p_option == "compress/lossy_quality") { int compress_mode = int(p_options["compress/mode"]); - if (compress_mode != COMPRESS_LOSSY && compress_mode != COMPRESS_VIDEO_RAM) { + if (compress_mode != COMPRESS_LOSSY && compress_mode != COMPRESS_VRAM_COMPRESSED) { return false; } } else if (p_option == "compress/hdr_mode") { int compress_mode = int(p_options["compress/mode"]); - if (compress_mode != COMPRESS_VIDEO_RAM) { + if (compress_mode < COMPRESS_VRAM_COMPRESSED) { return false; } + } else if (p_option == "mipmaps/limit") { + return p_options["mipmaps/generate"]; + } else if (p_option == "compress/bptc_ldr") { int compress_mode = int(p_options["compress/mode"]); - if (compress_mode != COMPRESS_VIDEO_RAM) { + if (compress_mode < COMPRESS_VRAM_COMPRESSED) { return false; } if (!ProjectSettings::get_singleton()->get("rendering/vram_compression/import_bptc")) { @@ -199,202 +209,233 @@ String ResourceImporterTexture::get_preset_name(int p_idx) const { void ResourceImporterTexture::get_import_options(List<ImportOption> *r_options, int p_preset) const { - r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "compress/mode", PROPERTY_HINT_ENUM, "Lossless,Lossy,Video RAM,Uncompressed", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_UPDATE_ALL_IF_MODIFIED), p_preset == PRESET_3D ? 2 : 0)); + r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "compress/mode", PROPERTY_HINT_ENUM, "Lossless,Lossy,VRAM Compressed,VRAM Uncompressed,Basis Universal", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_UPDATE_ALL_IF_MODIFIED), p_preset == PRESET_3D ? 2 : 0)); r_options->push_back(ImportOption(PropertyInfo(Variant::REAL, "compress/lossy_quality", PROPERTY_HINT_RANGE, "0,1,0.01"), 0.7)); r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "compress/hdr_mode", PROPERTY_HINT_ENUM, "Enabled,Force RGBE"), 0)); r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "compress/bptc_ldr", PROPERTY_HINT_ENUM, "Enabled,RGBA Only"), 0)); r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "compress/normal_map", PROPERTY_HINT_ENUM, "Detect,Enable,Disabled"), 0)); - r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "flags/repeat", PROPERTY_HINT_ENUM, "Disabled,Enabled,Mirrored"), p_preset == PRESET_3D ? 1 : 0)); - r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "flags/filter"), p_preset != PRESET_2D_PIXEL)); - r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "flags/mipmaps"), p_preset == PRESET_3D)); - r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "flags/anisotropic"), false)); - r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "flags/srgb", PROPERTY_HINT_ENUM, "Disable,Enable,Detect"), 2)); + r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "compress/channel_pack", PROPERTY_HINT_ENUM, "sRGB Friendly,Optimized"), 0)); + r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "compress/streamed"), false)); + r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "mipmaps/generate"), (p_preset == PRESET_3D ? true : false))); + r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "mipmaps/limit", PROPERTY_HINT_RANGE, "-1,256"), -1)); + r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "roughness/mode", PROPERTY_HINT_ENUM, "Detect,Disabled,Red,Green,Blue,Alpha,Gray"), 0)); + r_options->push_back(ImportOption(PropertyInfo(Variant::STRING, "roughness/src_normal", PROPERTY_HINT_FILE, "*.png,*.jpg"), "")); r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "process/fix_alpha_border"), p_preset != PRESET_3D)); r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "process/premult_alpha"), false)); - r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "process/HDR_as_SRGB"), false)); r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "process/invert_color"), false)); - r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "stream"), false)); - r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "size_limit", PROPERTY_HINT_RANGE, "0,4096,1"), 0)); - r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "detect_3d"), p_preset == PRESET_DETECT)); + r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "process/HDR_as_SRGB"), false)); + r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "process/size_limit", PROPERTY_HINT_RANGE, "0,4096,1"), 0)); + r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "detect_3d/compress_to", PROPERTY_HINT_ENUM, "Disabled,VRAM Compressed,Basis Universal"), (p_preset == PRESET_DETECT) ? 1 : 0)); r_options->push_back(ImportOption(PropertyInfo(Variant::REAL, "svg/scale", PROPERTY_HINT_RANGE, "0.001,100,0.001"), 1.0)); } -void ResourceImporterTexture::_save_stex(const Ref<Image> &p_image, const String &p_to_path, int p_compress_mode, float p_lossy_quality, Image::CompressMode p_vram_compression, bool p_mipmaps, int p_texture_flags, bool p_streamable, bool p_detect_3d, bool p_detect_srgb, bool p_force_rgbe, bool p_detect_normal, bool p_force_normal, bool p_force_po2_for_compressed) { - - FileAccess *f = FileAccess::open(p_to_path, FileAccess::WRITE); - f->store_8('G'); - f->store_8('D'); - f->store_8('S'); - f->store_8('T'); //godot streamable texture - - bool resize_to_po2 = false; +void ResourceImporterTexture::save_to_stex_format(FileAccess *f, const Ref<Image> &p_image, CompressMode p_compress_mode, Image::UsedChannels p_channels, Image::CompressMode p_compress_format, float p_lossy_quality, bool p_force_rgbe) { - if (p_compress_mode == COMPRESS_VIDEO_RAM && p_force_po2_for_compressed && (p_mipmaps || p_texture_flags & Texture::FLAG_REPEAT)) { - resize_to_po2 = true; - f->store_16(next_power_of_2(p_image->get_width())); - f->store_16(p_image->get_width()); - f->store_16(next_power_of_2(p_image->get_height())); - f->store_16(p_image->get_height()); - } else { - f->store_16(p_image->get_width()); - f->store_16(0); - f->store_16(p_image->get_height()); - f->store_16(0); - } - f->store_32(p_texture_flags); + switch (p_compress_mode) { + case COMPRESS_LOSSLESS: { - uint32_t format = 0; + f->store_32(StreamTexture::DATA_FORMAT_LOSSLESS); + f->store_16(p_image->get_width()); + f->store_16(p_image->get_height()); + f->store_32(p_image->get_mipmap_count()); + f->store_32(p_image->get_format()); - if (p_streamable) - format |= StreamTexture::FORMAT_BIT_STREAM; - if (p_mipmaps) - format |= StreamTexture::FORMAT_BIT_HAS_MIPMAPS; //mipmaps bit - if (p_detect_3d) - format |= StreamTexture::FORMAT_BIT_DETECT_3D; - if (p_detect_srgb) - format |= StreamTexture::FORMAT_BIT_DETECT_SRGB; - if (p_detect_normal) - format |= StreamTexture::FORMAT_BIT_DETECT_NORMAL; + for (int i = 0; i < p_image->get_mipmap_count() + 1; i++) { - if ((p_compress_mode == COMPRESS_LOSSLESS || p_compress_mode == COMPRESS_LOSSY) && p_image->get_format() > Image::FORMAT_RGBA8) { - p_compress_mode = COMPRESS_UNCOMPRESSED; //these can't go as lossy - } - - switch (p_compress_mode) { - case COMPRESS_LOSSLESS: { + Vector<uint8_t> data = Image::lossless_packer(p_image->get_image_from_mipmap(i)); + int data_len = data.size(); + f->store_32(data_len); - Ref<Image> image = p_image->duplicate(); - if (p_mipmaps) { - image->generate_mipmaps(); - } else { - image->clear_mipmaps(); + const uint8_t *r = data.ptr(); + f->store_buffer(r, data_len); } - int mmc = image->get_mipmap_count() + 1; - - format |= StreamTexture::FORMAT_BIT_LOSSLESS; - f->store_32(format); - f->store_32(mmc); + } break; + case COMPRESS_LOSSY: { - for (int i = 0; i < mmc; i++) { + f->store_32(StreamTexture::DATA_FORMAT_LOSSY); + f->store_16(p_image->get_width()); + f->store_16(p_image->get_height()); + f->store_32(p_image->get_mipmap_count()); + f->store_32(p_image->get_format()); - if (i > 0) { - image->shrink_x2(); - } + for (int i = 0; i < p_image->get_mipmap_count() + 1; i++) { - PoolVector<uint8_t> data = Image::lossless_packer(image); + Vector<uint8_t> data = Image::lossy_packer(p_image->get_image_from_mipmap(i), p_lossy_quality); int data_len = data.size(); f->store_32(data_len); - PoolVector<uint8_t>::Read r = data.read(); - f->store_buffer(r.ptr(), data_len); + const uint8_t *r = data.ptr(); + f->store_buffer(r, data_len); } - } break; - case COMPRESS_LOSSY: { + case COMPRESS_VRAM_COMPRESSED: { + Ref<Image> image = p_image->duplicate(); - if (p_mipmaps) { - image->generate_mipmaps(); + + if (p_force_rgbe && image->get_format() >= Image::FORMAT_RF && image->get_format() < Image::FORMAT_RGBE9995) { + image->convert(Image::FORMAT_RGBE9995); } else { - image->clear_mipmaps(); + image->compress_from_channels(p_compress_format, p_channels, p_lossy_quality); } - int mmc = image->get_mipmap_count() + 1; + f->store_32(StreamTexture::DATA_FORMAT_IMAGE); + f->store_16(image->get_width()); + f->store_16(image->get_height()); + f->store_32(image->get_mipmap_count()); + f->store_32(image->get_format()); - format |= StreamTexture::FORMAT_BIT_LOSSY; - f->store_32(format); - f->store_32(mmc); + Vector<uint8_t> data = image->get_data(); + int dl = data.size(); + const uint8_t *r = data.ptr(); + f->store_buffer(r, dl); + } break; + case COMPRESS_VRAM_UNCOMPRESSED: { - for (int i = 0; i < mmc; i++) { + f->store_32(StreamTexture::DATA_FORMAT_IMAGE); + f->store_16(p_image->get_width()); + f->store_16(p_image->get_height()); + f->store_32(p_image->get_mipmap_count()); + f->store_32(p_image->get_format()); - if (i > 0) { - image->shrink_x2(); - } + Vector<uint8_t> data = p_image->get_data(); + int dl = data.size(); + const uint8_t *r = data.ptr(); + + f->store_buffer(r, dl); - PoolVector<uint8_t> data = Image::lossy_packer(image, p_lossy_quality); + } break; + case COMPRESS_BASIS_UNIVERSAL: { + + f->store_32(StreamTexture::DATA_FORMAT_BASIS_UNIVERSAL); + f->store_16(p_image->get_width()); + f->store_16(p_image->get_height()); + f->store_32(p_image->get_mipmap_count()); + f->store_32(p_image->get_format()); + + for (int i = 0; i < p_image->get_mipmap_count() + 1; i++) { + + Vector<uint8_t> data = Image::basis_universal_packer(p_image->get_image_from_mipmap(i), p_channels); int data_len = data.size(); f->store_32(data_len); - PoolVector<uint8_t>::Read r = data.read(); - f->store_buffer(r.ptr(), data_len); + const uint8_t *r = data.ptr(); + f->store_buffer(r, data_len); } } break; - case COMPRESS_VIDEO_RAM: { + } +} - Ref<Image> image = p_image->duplicate(); - if (resize_to_po2) { - image->resize_to_po2(); - } - if (p_mipmaps) { - image->generate_mipmaps(p_force_normal); - } +void ResourceImporterTexture::_save_stex(const Ref<Image> &p_image, const String &p_to_path, CompressMode p_compress_mode, float p_lossy_quality, Image::CompressMode p_vram_compression, bool p_mipmaps, bool p_streamable, bool p_detect_3d, bool p_detect_roughness, bool p_force_rgbe, bool p_detect_normal, bool p_force_normal, bool p_srgb_friendly, bool p_force_po2_for_compressed, uint32_t p_limit_mipmap, const Ref<Image> &p_normal, Image::RoughnessChannel p_roughness_channel) { - if (p_force_rgbe && image->get_format() >= Image::FORMAT_R8 && image->get_format() <= Image::FORMAT_RGBE9995) { - image->convert(Image::FORMAT_RGBE9995); - } else { - Image::CompressSource csource = Image::COMPRESS_SOURCE_GENERIC; - if (p_force_normal) { - csource = Image::COMPRESS_SOURCE_NORMAL; - } else if (p_texture_flags & VS::TEXTURE_FLAG_CONVERT_TO_LINEAR) { - csource = Image::COMPRESS_SOURCE_SRGB; - } + FileAccess *f = FileAccess::open(p_to_path, FileAccess::WRITE); + f->store_8('G'); + f->store_8('S'); + f->store_8('T'); + f->store_8('2'); //godot streamable texture 2D - image->compress(p_vram_compression, csource, p_lossy_quality); - } + //format version + f->store_32(StreamTexture::FORMAT_VERSION); + //texture may be resized later, so original size must be saved first + f->store_32(p_image->get_width()); + f->store_32(p_image->get_height()); - format |= image->get_format(); + uint32_t flags = 0; + if (p_streamable) + flags |= StreamTexture::FORMAT_BIT_STREAM; + if (p_mipmaps) + flags |= StreamTexture::FORMAT_BIT_HAS_MIPMAPS; //mipmaps bit + if (p_detect_3d) + flags |= StreamTexture::FORMAT_BIT_DETECT_3D; + if (p_detect_roughness) + flags |= StreamTexture::FORMAT_BIT_DETECT_ROUGNESS; + if (p_detect_normal) + flags |= StreamTexture::FORMAT_BIT_DETECT_NORMAL; + + f->store_32(flags); + f->store_32(p_limit_mipmap); + //reserverd for future use + f->store_32(0); + f->store_32(0); + f->store_32(0); + + /* + print_line("streamable " + itos(p_streamable)); + print_line("mipmaps " + itos(p_mipmaps)); + print_line("detect_3d " + itos(p_detect_3d)); + print_line("roughness " + itos(p_detect_roughness)); + print_line("normal " + itos(p_detect_normal)); +*/ - f->store_32(format); + if ((p_compress_mode == COMPRESS_LOSSLESS || p_compress_mode == COMPRESS_LOSSY) && p_image->get_format() > Image::FORMAT_RGBA8) { + p_compress_mode = COMPRESS_VRAM_UNCOMPRESSED; //these can't go as lossy + } - PoolVector<uint8_t> data = image->get_data(); - int dl = data.size(); - PoolVector<uint8_t>::Read r = data.read(); - f->store_buffer(r.ptr(), dl); - } break; - case COMPRESS_UNCOMPRESSED: { + Ref<Image> image = p_image->duplicate(); - Ref<Image> image = p_image->duplicate(); - if (p_mipmaps) { - image->generate_mipmaps(); - } else { - image->clear_mipmaps(); - } + if (((p_compress_mode == COMPRESS_BASIS_UNIVERSAL) || (p_compress_mode == COMPRESS_VRAM_COMPRESSED && p_force_po2_for_compressed)) && p_mipmaps) { + image->resize_to_po2(); + } - format |= image->get_format(); - f->store_32(format); + if (p_mipmaps && (!image->has_mipmaps() || p_force_normal)) { + image->generate_mipmaps(p_force_normal); + } - PoolVector<uint8_t> data = image->get_data(); - int dl = data.size(); - PoolVector<uint8_t>::Read r = data.read(); + if (!p_mipmaps) { + image->clear_mipmaps(); + } - f->store_buffer(r.ptr(), dl); + if (image->has_mipmaps() && p_normal.is_valid()) { + image->generate_mipmap_roughness(p_roughness_channel, p_normal); + } - } break; + if (p_force_rgbe && image->get_format() >= Image::FORMAT_RF && image->get_format() < Image::FORMAT_RGBE9995) { + image->convert(Image::FORMAT_RGBE9995); } + Image::CompressSource csource = Image::COMPRESS_SOURCE_GENERIC; + if (p_force_normal) { + csource = Image::COMPRESS_SOURCE_NORMAL; + } else if (p_srgb_friendly) { + csource = Image::COMPRESS_SOURCE_SRGB; + } + + Image::UsedChannels used_channels = image->detect_used_channels(csource); + + save_to_stex_format(f, image, p_compress_mode, used_channels, p_vram_compression, p_lossy_quality, p_force_rgbe); + memdelete(f); } Error ResourceImporterTexture::import(const String &p_source_file, const String &p_save_path, const Map<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files, Variant *r_metadata) { - int compress_mode = p_options["compress/mode"]; + CompressMode compress_mode = CompressMode(int(p_options["compress/mode"])); float lossy = p_options["compress/lossy_quality"]; - int repeat = p_options["flags/repeat"]; - bool filter = p_options["flags/filter"]; - bool mipmaps = p_options["flags/mipmaps"]; - bool anisotropic = p_options["flags/anisotropic"]; - int srgb = p_options["flags/srgb"]; + int pack_channels = p_options["compress/channel_pack"]; + bool mipmaps = p_options["mipmaps/generate"]; + uint32_t mipmap_limit = int(mipmaps ? int(p_options["mipmaps/limit"]) : int(-1)); bool fix_alpha_border = p_options["process/fix_alpha_border"]; bool premult_alpha = p_options["process/premult_alpha"]; bool invert_color = p_options["process/invert_color"]; - bool stream = p_options["stream"]; - int size_limit = p_options["size_limit"]; + bool stream = p_options["compress/streamed"]; + int size_limit = p_options["process/size_limit"]; bool hdr_as_srgb = p_options["process/HDR_as_SRGB"]; int normal = p_options["compress/normal_map"]; float scale = p_options["svg/scale"]; - bool force_rgbe = p_options["compress/hdr_mode"]; + bool force_rgbe = int(p_options["compress/hdr_mode"]) == 1; int bptc_ldr = p_options["compress/bptc_ldr"]; + int roughness = p_options["roughness/mode"]; + String normal_map = p_options["roughness/src_normal"]; + + Ref<Image> normal_image; + Image::RoughnessChannel roughness_channel; + if (mipmaps && roughness > 1 && FileAccess::exists(normal_map)) { + normal_image.instance(); + if (ImageLoader::load_image(normal_map, normal_image) == OK) { + roughness_channel = Image::RoughnessChannel(roughness - 2); + } + } Ref<Image> image; image.instance(); Error err = ImageLoader::load_image(p_source_file, image, NULL, hdr_as_srgb, scale); @@ -403,20 +444,6 @@ Error ResourceImporterTexture::import(const String &p_source_file, const String Array formats_imported; - int tex_flags = 0; - if (repeat > 0) - tex_flags |= Texture::FLAG_REPEAT; - if (repeat == 2) - tex_flags |= Texture::FLAG_MIRRORED_REPEAT; - if (filter) - tex_flags |= Texture::FLAG_FILTER; - if (mipmaps || compress_mode == COMPRESS_VIDEO_RAM) - tex_flags |= Texture::FLAG_MIPMAPS; - if (anisotropic) - tex_flags |= Texture::FLAG_ANISOTROPIC_FILTER; - if (srgb == 1) - tex_flags |= Texture::FLAG_CONVERT_TO_LINEAR; - if (size_limit > 0 && (image->get_width() > size_limit || image->get_height() > size_limit)) { //limit size if (image->get_width() >= image->get_height()) { @@ -449,41 +476,45 @@ Error ResourceImporterTexture::import(const String &p_source_file, const String int height = image->get_height(); int width = image->get_width(); - image->lock(); for (int i = 0; i < width; i++) { for (int j = 0; j < height; j++) { image->set_pixel(i, j, image->get_pixel(i, j).inverted()); } } - image->unlock(); } - bool detect_3d = p_options["detect_3d"]; - bool detect_srgb = srgb == 2; + if (compress_mode == COMPRESS_BASIS_UNIVERSAL && image->get_format() >= Image::FORMAT_RF) { + //basis universal does not support float formats, fall back + compress_mode = COMPRESS_VRAM_COMPRESSED; + } + + bool detect_3d = int(p_options["detect_3d/compress_to"]) > 0; + bool detect_roughness = roughness == 0; bool detect_normal = normal == 0; bool force_normal = normal == 1; + bool srgb_friendly_pack = pack_channels == 0; - if (compress_mode == COMPRESS_VIDEO_RAM) { + if (compress_mode == COMPRESS_VRAM_COMPRESSED) { //must import in all formats, in order of priority (so platform choses the best supported one. IE, etc2 over etc). //Android, GLES 2.x bool ok_on_pc = false; bool is_hdr = (image->get_format() >= Image::FORMAT_RF && image->get_format() <= Image::FORMAT_RGBE9995); - bool is_ldr = (image->get_format() >= Image::FORMAT_L8 && image->get_format() <= Image::FORMAT_RGBA5551); + bool is_ldr = (image->get_format() >= Image::FORMAT_L8 && image->get_format() <= Image::FORMAT_RGB565); bool can_bptc = ProjectSettings::get_singleton()->get("rendering/vram_compression/import_bptc"); bool can_s3tc = ProjectSettings::get_singleton()->get("rendering/vram_compression/import_s3tc"); if (can_bptc) { - Image::DetectChannels channels = image->get_detected_channels(); + Image::UsedChannels channels = image->detect_used_channels(); if (is_hdr) { - if (channels == Image::DETECTED_LA || channels == Image::DETECTED_RGBA) { + if (channels == Image::USED_CHANNELS_LA || channels == Image::USED_CHANNELS_RGBA) { can_bptc = false; } } else if (is_ldr) { //handle "RGBA Only" setting - if (bptc_ldr == 1 && channels != Image::DETECTED_LA && channels != Image::DETECTED_RGBA) { + if (bptc_ldr == 1 && channels != Image::USED_CHANNELS_LA && channels != Image::USED_CHANNELS_RGBA) { can_bptc = false; } } @@ -497,7 +528,7 @@ Error ResourceImporterTexture::import(const String &p_source_file, const String } if (can_bptc || can_s3tc) { - _save_stex(image, p_save_path + ".s3tc.stex", compress_mode, lossy, can_bptc ? Image::COMPRESS_BPTC : Image::COMPRESS_S3TC, mipmaps, tex_flags, stream, detect_3d, detect_srgb, force_rgbe, detect_normal, force_normal, false); + _save_stex(image, p_save_path + ".s3tc.stex", compress_mode, lossy, can_bptc ? Image::COMPRESS_BPTC : Image::COMPRESS_S3TC, mipmaps, stream, detect_3d, detect_roughness, force_rgbe, detect_normal, force_normal, srgb_friendly_pack, false, mipmap_limit, normal_image, roughness_channel); r_platform_variants->push_back("s3tc"); formats_imported.push_back("s3tc"); ok_on_pc = true; @@ -505,20 +536,20 @@ Error ResourceImporterTexture::import(const String &p_source_file, const String if (ProjectSettings::get_singleton()->get("rendering/vram_compression/import_etc2")) { - _save_stex(image, p_save_path + ".etc2.stex", compress_mode, lossy, Image::COMPRESS_ETC2, mipmaps, tex_flags, stream, detect_3d, detect_srgb, force_rgbe, detect_normal, force_normal, true); + _save_stex(image, p_save_path + ".etc2.stex", compress_mode, lossy, Image::COMPRESS_ETC2, mipmaps, stream, detect_3d, detect_roughness, force_rgbe, detect_normal, force_normal, srgb_friendly_pack, true, mipmap_limit, normal_image, roughness_channel); r_platform_variants->push_back("etc2"); formats_imported.push_back("etc2"); } if (ProjectSettings::get_singleton()->get("rendering/vram_compression/import_etc")) { - _save_stex(image, p_save_path + ".etc.stex", compress_mode, lossy, Image::COMPRESS_ETC, mipmaps, tex_flags, stream, detect_3d, detect_srgb, force_rgbe, detect_normal, force_normal, true); + _save_stex(image, p_save_path + ".etc.stex", compress_mode, lossy, Image::COMPRESS_ETC, mipmaps, stream, detect_3d, detect_roughness, force_rgbe, detect_normal, force_normal, srgb_friendly_pack, true, mipmap_limit, normal_image, roughness_channel); r_platform_variants->push_back("etc"); formats_imported.push_back("etc"); } if (ProjectSettings::get_singleton()->get("rendering/vram_compression/import_pvrtc")) { - _save_stex(image, p_save_path + ".pvrtc.stex", compress_mode, lossy, Image::COMPRESS_PVRTC4, mipmaps, tex_flags, stream, detect_3d, detect_srgb, force_rgbe, detect_normal, force_normal, true); + _save_stex(image, p_save_path + ".pvrtc.stex", compress_mode, lossy, Image::COMPRESS_PVRTC4, mipmaps, stream, detect_3d, detect_roughness, force_rgbe, detect_normal, force_normal, srgb_friendly_pack, true, mipmap_limit, normal_image, roughness_channel); r_platform_variants->push_back("pvrtc"); formats_imported.push_back("pvrtc"); } @@ -528,12 +559,12 @@ Error ResourceImporterTexture::import(const String &p_source_file, const String } } else { //import normally - _save_stex(image, p_save_path + ".stex", compress_mode, lossy, Image::COMPRESS_S3TC /*this is ignored */, mipmaps, tex_flags, stream, detect_3d, detect_srgb, force_rgbe, detect_normal, force_normal, false); + _save_stex(image, p_save_path + ".stex", compress_mode, lossy, Image::COMPRESS_S3TC /*this is ignored */, mipmaps, stream, detect_3d, detect_roughness, force_rgbe, detect_normal, force_normal, srgb_friendly_pack, false, mipmap_limit, normal_image, roughness_channel); } if (r_metadata) { Dictionary metadata; - metadata["vram_texture"] = compress_mode == COMPRESS_VIDEO_RAM; + metadata["vram_texture"] = compress_mode == COMPRESS_VRAM_COMPRESSED; if (formats_imported.size()) { metadata["imported_formats"] = formats_imported; } @@ -609,7 +640,7 @@ ResourceImporterTexture::ResourceImporterTexture() { singleton = this; StreamTexture::request_3d_callback = _texture_reimport_3d; - StreamTexture::request_srgb_callback = _texture_reimport_srgb; + StreamTexture::request_roughness_callback = _texture_reimport_roughness; StreamTexture::request_normal_callback = _texture_reimport_normal; mutex = Mutex::create(); } diff --git a/editor/import/resource_importer_texture.h b/editor/import/resource_importer_texture.h index fbfd47f4f0..19d5498b4a 100644 --- a/editor/import/resource_importer_texture.h +++ b/editor/import/resource_importer_texture.h @@ -33,30 +33,57 @@ #include "core/image.h" #include "core/io/resource_importer.h" +#include "core/os/file_access.h" +#include "scene/resources/texture.h" +#include "servers/visual_server.h" class StreamTexture; class ResourceImporterTexture : public ResourceImporter { GDCLASS(ResourceImporterTexture, ResourceImporter); +public: + enum CompressMode { + COMPRESS_LOSSLESS, + COMPRESS_LOSSY, + COMPRESS_VRAM_COMPRESSED, + COMPRESS_VRAM_UNCOMPRESSED, + COMPRESS_BASIS_UNIVERSAL + }; + protected: enum { MAKE_3D_FLAG = 1, - MAKE_SRGB_FLAG = 2, + MAKE_ROUGHNESS_FLAG = 2, MAKE_NORMAL_FLAG = 4 }; Mutex *mutex; - Map<StringName, int> make_flags; + struct MakeInfo { + + int flags; + String normal_path_for_roughness; + VS::TextureDetectRoughnessChannel channel_for_roughness; + MakeInfo() { + flags = 0; + channel_for_roughness = VS::TEXTURE_DETECT_ROUGNHESS_R; + } + }; + + Map<StringName, MakeInfo> make_flags; - static void _texture_reimport_srgb(const Ref<StreamTexture> &p_tex); + static void _texture_reimport_roughness(const Ref<StreamTexture> &p_tex, const String &p_normal_path, VisualServer::TextureDetectRoughnessChannel p_channel); static void _texture_reimport_3d(const Ref<StreamTexture> &p_tex); static void _texture_reimport_normal(const Ref<StreamTexture> &p_tex); static ResourceImporterTexture *singleton; static const char *compression_formats[]; + void _save_stex(const Ref<Image> &p_image, const String &p_to_path, CompressMode p_compress_mode, float p_lossy_quality, Image::CompressMode p_vram_compression, bool p_mipmaps, bool p_streamable, bool p_detect_3d, bool p_detect_srgb, bool p_force_rgbe, bool p_detect_normal, bool p_force_normal, bool p_srgb_friendly, bool p_force_po2_for_compressed, uint32_t p_limit_mipmap, const Ref<Image> &p_normal, Image::RoughnessChannel p_roughness_channel); + public: + void save_to_stex_format(FileAccess *f, const Ref<Image> &p_image, CompressMode p_compress_mode, Image::UsedChannels p_channels, Image::CompressMode p_compress_format, float p_lossy_quality, bool p_force_rgbe); + static ResourceImporterTexture *get_singleton() { return singleton; } virtual String get_importer_name() const; virtual String get_visible_name() const; @@ -71,21 +98,12 @@ public: PRESET_3D, }; - enum CompressMode { - COMPRESS_LOSSLESS, - COMPRESS_LOSSY, - COMPRESS_VIDEO_RAM, - COMPRESS_UNCOMPRESSED - }; - virtual int get_preset_count() const; virtual String get_preset_name(int p_idx) const; virtual void get_import_options(List<ImportOption> *r_options, int p_preset = 0) const; virtual bool get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const; - void _save_stex(const Ref<Image> &p_image, const String &p_to_path, int p_compress_mode, float p_lossy_quality, Image::CompressMode p_vram_compression, bool p_mipmaps, int p_texture_flags, bool p_streamable, bool p_detect_3d, bool p_detect_srgb, bool p_force_rgbe, bool p_detect_normal, bool p_force_normal, bool p_force_po2_for_compressed); - virtual Error import(const String &p_source_file, const String &p_save_path, const Map<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files = NULL, Variant *r_metadata = NULL); void update_imports(); diff --git a/editor/import/resource_importer_texture_atlas.cpp b/editor/import/resource_importer_texture_atlas.cpp index 335e1114e6..4291d6f2d7 100644 --- a/editor/import/resource_importer_texture_atlas.cpp +++ b/editor/import/resource_importer_texture_atlas.cpp @@ -58,7 +58,7 @@ String ResourceImporterTextureAtlas::get_save_extension() const { String ResourceImporterTextureAtlas::get_resource_type() const { - return "Texture"; + return "Texture2D"; } bool ResourceImporterTextureAtlas::get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const { @@ -286,12 +286,10 @@ Error ResourceImporterTextureAtlas::import_group_file(const String &p_group_file new_atlas.instance(); new_atlas->create(atlas_width, atlas_height, false, Image::FORMAT_RGBA8); - new_atlas->lock(); - for (int i = 0; i < pack_data_files.size(); i++) { PackData &pack_data = pack_data_files.write[i]; - pack_data.image->lock(); + for (int j = 0; j < pack_data.chart_pieces.size(); j++) { const EditorAtlasPacker::Chart &chart = charts[pack_data.chart_pieces[j]]; for (int k = 0; k < chart.faces.size(); k++) { @@ -304,16 +302,14 @@ Error ResourceImporterTextureAtlas::import_group_file(const String &p_group_file _plot_triangle(positions, chart.final_offset, chart.transposed, new_atlas, pack_data.image); } } - pack_data.image->unlock(); } - new_atlas->unlock(); //save the atlas new_atlas->save_png(p_group_file); //update cache if existing, else create - Ref<Texture> cache; + Ref<Texture2D> cache; if (ResourceCache::has(p_group_file)) { Resource *resptr = ResourceCache::get(p_group_file); cache.reference_ptr(resptr); @@ -331,7 +327,7 @@ Error ResourceImporterTextureAtlas::import_group_file(const String &p_group_file PackData &pack_data = pack_data_files.write[idx]; - Ref<Texture> texture; + Ref<Texture2D> texture; if (!pack_data.is_mesh) { Vector2 offset = charts[pack_data.chart_pieces[0]].vertices[0] + charts[pack_data.chart_pieces[0]].final_offset; @@ -350,9 +346,9 @@ Error ResourceImporterTextureAtlas::import_group_file(const String &p_group_file for (int i = 0; i < pack_data.chart_pieces.size(); i++) { const EditorAtlasPacker::Chart &chart = charts[pack_data.chart_pieces[i]]; - PoolVector<Vector2> vertices; - PoolVector<int> indices; - PoolVector<Vector2> uvs; + Vector<Vector2> vertices; + Vector<int> indices; + Vector<Vector2> uvs; int vc = chart.vertices.size(); int fc = chart.faces.size(); vertices.resize(vc); @@ -360,9 +356,9 @@ Error ResourceImporterTextureAtlas::import_group_file(const String &p_group_file indices.resize(fc * 3); { - PoolVector<Vector2>::Write vw = vertices.write(); - PoolVector<int>::Write iw = indices.write(); - PoolVector<Vector2>::Write uvw = uvs.write(); + Vector2 *vw = vertices.ptrw(); + int *iw = indices.ptrw(); + Vector2 *uvw = uvs.ptrw(); for (int j = 0; j < vc; j++) { vw[j] = chart.vertices[j]; diff --git a/editor/import/resource_importer_wav.cpp b/editor/import/resource_importer_wav.cpp index 2d43fa089d..b65209d204 100644 --- a/editor/import/resource_importer_wav.cpp +++ b/editor/import/resource_importer_wav.cpp @@ -467,7 +467,7 @@ Error ResourceImporterWAV::import(const String &p_source_file, const String &p_s is16 = false; } - PoolVector<uint8_t> dst_data; + Vector<uint8_t> dst_data; AudioStreamSample::Format dst_format; if (compression == 1) { @@ -490,8 +490,8 @@ Error ResourceImporterWAV::import(const String &p_source_file, const String &p_s right.write[i] = data[i * 2 + 1]; } - PoolVector<uint8_t> bleft; - PoolVector<uint8_t> bright; + Vector<uint8_t> bleft; + Vector<uint8_t> bright; _compress_ima_adpcm(left, bleft); _compress_ima_adpcm(right, bright); @@ -499,9 +499,9 @@ Error ResourceImporterWAV::import(const String &p_source_file, const String &p_s int dl = bleft.size(); dst_data.resize(dl * 2); - PoolVector<uint8_t>::Write w = dst_data.write(); - PoolVector<uint8_t>::Read rl = bleft.read(); - PoolVector<uint8_t>::Read rr = bright.read(); + uint8_t *w = dst_data.ptrw(); + const uint8_t *rl = bleft.ptr(); + const uint8_t *rr = bright.ptr(); for (int i = 0; i < dl; i++) { w[i * 2 + 0] = rl[i]; @@ -514,7 +514,7 @@ Error ResourceImporterWAV::import(const String &p_source_file, const String &p_s dst_format = is16 ? AudioStreamSample::FORMAT_16_BITS : AudioStreamSample::FORMAT_8_BITS; dst_data.resize(data.size() * (is16 ? 2 : 1)); { - PoolVector<uint8_t>::Write w = dst_data.write(); + uint8_t *w = dst_data.ptrw(); int ds = data.size(); for (int i = 0; i < ds; i++) { diff --git a/editor/import/resource_importer_wav.h b/editor/import/resource_importer_wav.h index 59d33feef0..6df5b88b13 100644 --- a/editor/import/resource_importer_wav.h +++ b/editor/import/resource_importer_wav.h @@ -49,7 +49,7 @@ public: virtual void get_import_options(List<ImportOption> *r_options, int p_preset = 0) const; virtual bool get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const; - static void _compress_ima_adpcm(const Vector<float> &p_data, PoolVector<uint8_t> &dst_data) { + static void _compress_ima_adpcm(const Vector<float> &p_data, Vector<uint8_t> &dst_data) { /*p_sample_data->data = (void*)malloc(len); xm_s8 *dataptr=(xm_s8*)p_sample_data->data;*/ @@ -76,10 +76,10 @@ public: datalen++; dst_data.resize(datalen / 2 + 4); - PoolVector<uint8_t>::Write w = dst_data.write(); + uint8_t *w = dst_data.ptrw(); int i, step_idx = 0, prev = 0; - uint8_t *out = w.ptr(); + uint8_t *out = w; //int16_t xm_prev=0; const float *in = p_data.ptr(); diff --git a/editor/import_dock.cpp b/editor/import_dock.cpp index 20d47e8250..06c6f9940c 100644 --- a/editor/import_dock.cpp +++ b/editor/import_dock.cpp @@ -49,7 +49,7 @@ public: values[p_name] = p_value; if (checking) { checked.insert(p_name); - _change_notify(String(p_name).utf8().get_data()); + _change_notify(); } return true; } @@ -159,24 +159,7 @@ void ImportDock::_update_options(const Ref<ConfigFile> &p_config) { } params->update(); - - preset->get_popup()->clear(); - - if (params->importer->get_preset_count() == 0) { - preset->get_popup()->add_item(TTR("Default")); - } else { - for (int i = 0; i < params->importer->get_preset_count(); i++) { - preset->get_popup()->add_item(params->importer->get_preset_name(i)); - } - } - - preset->get_popup()->add_separator(); - preset->get_popup()->add_item(vformat(TTR("Set as Default for '%s'"), params->importer->get_visible_name()), ITEM_SET_AS_DEFAULT); - if (ProjectSettings::get_singleton()->has_setting("importer_defaults/" + params->importer->get_importer_name())) { - preset->get_popup()->add_item(TTR("Load Default"), ITEM_LOAD_DEFAULT); - preset->get_popup()->add_separator(); - preset->get_popup()->add_item(vformat(TTR("Clear Default for '%s'"), params->importer->get_visible_name()), ITEM_CLEAR_DEFAULT); - } + _update_preset_menu(); } void ImportDock::set_edit_multiple_paths(const Vector<String> &p_paths) { @@ -276,6 +259,17 @@ void ImportDock::set_edit_multiple_paths(const Vector<String> &p_paths) { } } + _update_preset_menu(); + + params->paths = p_paths; + import->set_disabled(false); + import_as->set_disabled(false); + preset->set_disabled(false); + + imported->set_text(vformat(TTR("%d Files"), p_paths.size())); +} + +void ImportDock::_update_preset_menu() { preset->get_popup()->clear(); if (params->importer->get_preset_count() == 0) { @@ -286,12 +280,13 @@ void ImportDock::set_edit_multiple_paths(const Vector<String> &p_paths) { } } - params->paths = p_paths; - import->set_disabled(false); - import_as->set_disabled(false); - preset->set_disabled(false); - - imported->set_text(itos(p_paths.size()) + TTR(" Files")); + preset->get_popup()->add_separator(); + preset->get_popup()->add_item(vformat(TTR("Set as Default for '%s'"), params->importer->get_visible_name()), ITEM_SET_AS_DEFAULT); + if (ProjectSettings::get_singleton()->has_setting("importer_defaults/" + params->importer->get_importer_name())) { + preset->get_popup()->add_item(TTR("Load Default"), ITEM_LOAD_DEFAULT); + preset->get_popup()->add_separator(); + preset->get_popup()->add_item(vformat(TTR("Clear Default for '%s'"), params->importer->get_visible_name()), ITEM_CLEAR_DEFAULT); + } } void ImportDock::_importer_selected(int i_idx) { @@ -326,7 +321,7 @@ void ImportDock::_preset_selected(int p_idx) { ProjectSettings::get_singleton()->set("importer_defaults/" + params->importer->get_importer_name(), d); ProjectSettings::get_singleton()->save(); - + _update_preset_menu(); } break; case ITEM_LOAD_DEFAULT: { @@ -336,17 +331,22 @@ void ImportDock::_preset_selected(int p_idx) { List<Variant> v; d.get_key_list(&v); + if (params->checking) { + params->checked.clear(); + } for (List<Variant>::Element *E = v.front(); E; E = E->next()) { params->values[E->get()] = d[E->get()]; + if (params->checking) { + params->checked.insert(E->get()); + } } params->update(); - } break; case ITEM_CLEAR_DEFAULT: { ProjectSettings::get_singleton()->set("importer_defaults/" + params->importer->get_importer_name(), Variant()); ProjectSettings::get_singleton()->save(); - + _update_preset_menu(); } break; default: { @@ -354,11 +354,15 @@ void ImportDock::_preset_selected(int p_idx) { params->importer->get_import_options(&options, p_idx); + if (params->checking) { + params->checked.clear(); + } for (List<ResourceImporter::ImportOption>::Element *E = options.front(); E; E = E->next()) { - params->values[E->get().option.name] = E->get().default_value; + if (params->checking) { + params->checked.insert(E->get().option.name); + } } - params->update(); } break; } @@ -533,26 +537,26 @@ ImportDock::ImportDock() { add_margin_child(TTR("Import As:"), hb); import_as = memnew(OptionButton); import_as->set_disabled(true); - import_as->connect("item_selected", this, "_importer_selected"); + import_as->connect_compat("item_selected", this, "_importer_selected"); hb->add_child(import_as); import_as->set_h_size_flags(SIZE_EXPAND_FILL); preset = memnew(MenuButton); preset->set_text(TTR("Preset")); preset->set_disabled(true); - preset->get_popup()->connect("index_pressed", this, "_preset_selected"); + preset->get_popup()->connect_compat("index_pressed", this, "_preset_selected"); hb->add_child(preset); import_opts = memnew(EditorInspector); add_child(import_opts); import_opts->set_v_size_flags(SIZE_EXPAND_FILL); - import_opts->connect("property_toggled", this, "_property_toggled"); + import_opts->connect_compat("property_toggled", this, "_property_toggled"); hb = memnew(HBoxContainer); add_child(hb); import = memnew(Button); import->set_text(TTR("Reimport")); import->set_disabled(true); - import->connect("pressed", this, "_reimport_attempt"); + import->connect_compat("pressed", this, "_reimport_attempt"); hb->add_spacer(); hb->add_child(import); hb->add_spacer(); @@ -560,7 +564,7 @@ ImportDock::ImportDock() { reimport_confirm = memnew(ConfirmationDialog); reimport_confirm->get_ok()->set_text(TTR("Save scenes, re-import and restart")); add_child(reimport_confirm); - reimport_confirm->connect("confirmed", this, "_reimport_and_restart"); + reimport_confirm->connect_compat("confirmed", this, "_reimport_and_restart"); VBoxContainer *vbc_confirm = memnew(VBoxContainer()); vbc_confirm->add_child(memnew(Label(TTR("Changing the type of an imported file requires editor restart.")))); diff --git a/editor/import_dock.h b/editor/import_dock.h index a4378fb60d..7a2e669620 100644 --- a/editor/import_dock.h +++ b/editor/import_dock.h @@ -62,6 +62,7 @@ class ImportDock : public VBoxContainer { void _preset_selected(int p_idx); void _importer_selected(int i_idx); void _update_options(const Ref<ConfigFile> &p_config = Ref<ConfigFile>()); + void _update_preset_menu(); void _property_toggled(const StringName &p_prop, bool p_checked); void _reimport_attempt(); diff --git a/editor/inspector_dock.cpp b/editor/inspector_dock.cpp index ecd1e341d1..85356a209f 100644 --- a/editor/inspector_dock.cpp +++ b/editor/inspector_dock.cpp @@ -166,8 +166,8 @@ void InspectorDock::_resource_file_selected(String p_file) { } void InspectorDock::_save_resource(bool save_as) const { - uint32_t current = EditorNode::get_singleton()->get_editor_history()->get_current(); - Object *current_obj = current > 0 ? ObjectDB::get_instance(current) : NULL; + ObjectID current = EditorNode::get_singleton()->get_editor_history()->get_current(); + Object *current_obj = current.is_valid() ? ObjectDB::get_instance(current) : NULL; ERR_FAIL_COND(!Object::cast_to<Resource>(current_obj)); @@ -180,8 +180,8 @@ void InspectorDock::_save_resource(bool save_as) const { } void InspectorDock::_unref_resource() const { - uint32_t current = EditorNode::get_singleton()->get_editor_history()->get_current(); - Object *current_obj = current > 0 ? ObjectDB::get_instance(current) : NULL; + ObjectID current = EditorNode::get_singleton()->get_editor_history()->get_current(); + Object *current_obj = current.is_valid() ? ObjectDB::get_instance(current) : NULL; ERR_FAIL_COND(!Object::cast_to<Resource>(current_obj)); @@ -191,8 +191,8 @@ void InspectorDock::_unref_resource() const { } void InspectorDock::_copy_resource() const { - uint32_t current = EditorNode::get_singleton()->get_editor_history()->get_current(); - Object *current_obj = current > 0 ? ObjectDB::get_instance(current) : NULL; + ObjectID current = EditorNode::get_singleton()->get_editor_history()->get_current(); + Object *current_obj = current.is_valid() ? ObjectDB::get_instance(current) : NULL; ERR_FAIL_COND(!Object::cast_to<Resource>(current_obj)); @@ -215,7 +215,7 @@ void InspectorDock::_prepare_history() { history_menu->get_popup()->clear(); - Ref<Texture> base_icon = get_icon("Object", "EditorIcons"); + Ref<Texture2D> base_icon = get_icon("Object", "EditorIcons"); Set<ObjectID> already; for (int i = editor_history->get_history_len() - 1; i >= history_to; i--) { @@ -230,7 +230,7 @@ void InspectorDock::_prepare_history() { already.insert(id); - Ref<Texture> icon = EditorNode::get_singleton()->get_object_icon(obj, ""); + Ref<Texture2D> icon = EditorNode::get_singleton()->get_object_icon(obj, ""); if (icon.is_null()) { icon = base_icon; } @@ -247,7 +247,7 @@ void InspectorDock::_prepare_history() { } } else if (Object::cast_to<Node>(obj)) { text = Object::cast_to<Node>(obj)->get_name(); - } else if (obj->is_class("ScriptEditorDebuggerInspectedObject")) { + } else if (obj->is_class("EditorDebuggerRemoteObject")) { text = obj->call("get_title"); } else { text = obj->get_class(); @@ -349,7 +349,6 @@ void InspectorDock::_bind_methods() { ClassDB::bind_method("_property_keyed", &InspectorDock::_property_keyed); ClassDB::bind_method("_transform_keyed", &InspectorDock::_transform_keyed); - ClassDB::bind_method("_new_resource", &InspectorDock::_new_resource); ClassDB::bind_method("_resource_file_selected", &InspectorDock::_resource_file_selected); ClassDB::bind_method("_open_resource_selector", &InspectorDock::_open_resource_selector); ClassDB::bind_method("_unref_resource", &InspectorDock::_unref_resource); @@ -511,14 +510,14 @@ InspectorDock::InspectorDock(EditorNode *p_editor, EditorData &p_editor_data) { resource_new_button->set_tooltip(TTR("Create a new resource in memory and edit it.")); resource_new_button->set_icon(get_icon("New", "EditorIcons")); general_options_hb->add_child(resource_new_button); - resource_new_button->connect("pressed", this, "_new_resource"); + resource_new_button->connect("pressed", callable_mp(this, &InspectorDock::_new_resource)); resource_new_button->set_focus_mode(Control::FOCUS_NONE); resource_load_button = memnew(ToolButton); resource_load_button->set_tooltip(TTR("Load an existing resource from disk and edit it.")); resource_load_button->set_icon(get_icon("Load", "EditorIcons")); general_options_hb->add_child(resource_load_button); - resource_load_button->connect("pressed", this, "_open_resource_selector"); + resource_load_button->connect_compat("pressed", this, "_open_resource_selector"); resource_load_button->set_focus_mode(Control::FOCUS_NONE); resource_save_button = memnew(MenuButton); @@ -527,7 +526,7 @@ InspectorDock::InspectorDock(EditorNode *p_editor, EditorData &p_editor_data) { general_options_hb->add_child(resource_save_button); resource_save_button->get_popup()->add_item(TTR("Save"), RESOURCE_SAVE); resource_save_button->get_popup()->add_item(TTR("Save As..."), RESOURCE_SAVE_AS); - resource_save_button->get_popup()->connect("id_pressed", this, "_menu_option"); + resource_save_button->get_popup()->connect_compat("id_pressed", this, "_menu_option"); resource_save_button->set_focus_mode(Control::FOCUS_NONE); resource_save_button->set_disabled(true); @@ -539,7 +538,7 @@ InspectorDock::InspectorDock(EditorNode *p_editor, EditorData &p_editor_data) { backward_button->set_flat(true); backward_button->set_tooltip(TTR("Go to the previous edited object in history.")); backward_button->set_disabled(true); - backward_button->connect("pressed", this, "_edit_back"); + backward_button->connect_compat("pressed", this, "_edit_back"); forward_button = memnew(ToolButton); general_options_hb->add_child(forward_button); @@ -547,14 +546,14 @@ InspectorDock::InspectorDock(EditorNode *p_editor, EditorData &p_editor_data) { forward_button->set_flat(true); forward_button->set_tooltip(TTR("Go to the next edited object in history.")); forward_button->set_disabled(true); - forward_button->connect("pressed", this, "_edit_forward"); + forward_button->connect_compat("pressed", this, "_edit_forward"); history_menu = memnew(MenuButton); history_menu->set_tooltip(TTR("History of recently edited objects.")); history_menu->set_icon(get_icon("History", "EditorIcons")); general_options_hb->add_child(history_menu); - history_menu->connect("about_to_show", this, "_prepare_history"); - history_menu->get_popup()->connect("id_pressed", this, "_select_history"); + history_menu->connect_compat("about_to_show", this, "_prepare_history"); + history_menu->get_popup()->connect_compat("id_pressed", this, "_select_history"); HBoxContainer *node_info_hb = memnew(HBoxContainer); add_child(node_info_hb); @@ -567,12 +566,12 @@ InspectorDock::InspectorDock(EditorNode *p_editor, EditorData &p_editor_data) { object_menu->set_icon(get_icon("Tools", "EditorIcons")); node_info_hb->add_child(object_menu); object_menu->set_tooltip(TTR("Object properties.")); - object_menu->get_popup()->connect("id_pressed", this, "_menu_option"); + object_menu->get_popup()->connect_compat("id_pressed", this, "_menu_option"); new_resource_dialog = memnew(CreateDialog); editor->get_gui_base()->add_child(new_resource_dialog); new_resource_dialog->set_base_type("Resource"); - new_resource_dialog->connect("create", this, "_resource_created"); + new_resource_dialog->connect_compat("create", this, "_resource_created"); search = memnew(LineEdit); search->set_h_size_flags(Control::SIZE_EXPAND_FILL); @@ -588,7 +587,7 @@ InspectorDock::InspectorDock(EditorNode *p_editor, EditorData &p_editor_data) { warning->add_color_override("font_color", get_color("warning_color", "Editor")); warning->set_clip_text(true); warning->hide(); - warning->connect("pressed", this, "_warning_pressed"); + warning->connect_compat("pressed", this, "_warning_pressed"); warning_dialog = memnew(AcceptDialog); editor->get_gui_base()->add_child(warning_dialog); @@ -596,7 +595,7 @@ InspectorDock::InspectorDock(EditorNode *p_editor, EditorData &p_editor_data) { load_resource_dialog = memnew(EditorFileDialog); add_child(load_resource_dialog); load_resource_dialog->set_current_dir("res://"); - load_resource_dialog->connect("file_selected", this, "_resource_file_selected"); + load_resource_dialog->connect_compat("file_selected", this, "_resource_file_selected"); inspector = memnew(EditorInspector); add_child(inspector); @@ -612,8 +611,8 @@ InspectorDock::InspectorDock(EditorNode *p_editor, EditorData &p_editor_data) { inspector->set_use_filter(true); // TODO: check me - inspector->connect("resource_selected", this, "_resource_selected"); - inspector->connect("property_keyed", this, "_property_keyed"); + inspector->connect_compat("resource_selected", this, "_resource_selected"); + inspector->connect_compat("property_keyed", this, "_property_keyed"); } InspectorDock::~InspectorDock() { diff --git a/editor/node_dock.cpp b/editor/node_dock.cpp index c53c5f330b..f04afcd04d 100644 --- a/editor/node_dock.cpp +++ b/editor/node_dock.cpp @@ -107,7 +107,7 @@ NodeDock::NodeDock() { connections_button->set_h_size_flags(SIZE_EXPAND_FILL); connections_button->set_clip_text(true); mode_hb->add_child(connections_button); - connections_button->connect("pressed", this, "show_connections"); + connections_button->connect_compat("pressed", this, "show_connections"); groups_button = memnew(ToolButton); groups_button->set_text(TTR("Groups")); @@ -116,7 +116,7 @@ NodeDock::NodeDock() { groups_button->set_h_size_flags(SIZE_EXPAND_FILL); groups_button->set_clip_text(true); mode_hb->add_child(groups_button); - groups_button->connect("pressed", this, "show_groups"); + groups_button->connect_compat("pressed", this, "show_groups"); connections = memnew(ConnectionsDock(EditorNode::get_singleton())); connections->set_undoredo(EditorNode::get_undo_redo()); diff --git a/editor/pane_drag.cpp b/editor/pane_drag.cpp index eef4db456c..b143f86ada 100644 --- a/editor/pane_drag.cpp +++ b/editor/pane_drag.cpp @@ -45,7 +45,7 @@ void PaneDrag::_notification(int p_what) { case NOTIFICATION_DRAW: { - Ref<Texture> icon = mouse_over ? get_icon("PaneDragHover", "EditorIcons") : get_icon("PaneDrag", "EditorIcons"); + Ref<Texture2D> icon = mouse_over ? get_icon("PaneDragHover", "EditorIcons") : get_icon("PaneDrag", "EditorIcons"); if (!icon.is_null()) icon->draw(get_canvas_item(), Point2(0, 0)); @@ -62,7 +62,7 @@ void PaneDrag::_notification(int p_what) { } Size2 PaneDrag::get_minimum_size() const { - Ref<Texture> icon = get_icon("PaneDrag", "EditorIcons"); + Ref<Texture2D> icon = get_icon("PaneDrag", "EditorIcons"); if (!icon.is_null()) return icon->get_size(); return Size2(); diff --git a/editor/plugin_config_dialog.cpp b/editor/plugin_config_dialog.cpp index 1506ba319c..4e3333f528 100644 --- a/editor/plugin_config_dialog.cpp +++ b/editor/plugin_config_dialog.cpp @@ -132,8 +132,8 @@ void PluginConfigDialog::_on_required_text_changed(const String &) { void PluginConfigDialog::_notification(int p_what) { switch (p_what) { case NOTIFICATION_READY: { - connect("confirmed", this, "_on_confirmed"); - get_cancel()->connect("pressed", this, "_on_cancelled"); + connect_compat("confirmed", this, "_on_confirmed"); + get_cancel()->connect_compat("pressed", this, "_on_cancelled"); } break; case NOTIFICATION_POST_POPUP: { @@ -194,7 +194,7 @@ PluginConfigDialog::PluginConfigDialog() { grid->add_child(name_lb); name_edit = memnew(LineEdit); - name_edit->connect("text_changed", this, "_on_required_text_changed"); + name_edit->connect_compat("text_changed", this, "_on_required_text_changed"); name_edit->set_placeholder("MyPlugin"); grid->add_child(name_edit); @@ -253,7 +253,7 @@ PluginConfigDialog::PluginConfigDialog() { grid->add_child(script_lb); script_edit = memnew(LineEdit); - script_edit->connect("text_changed", this, "_on_required_text_changed"); + script_edit->connect_compat("text_changed", this, "_on_required_text_changed"); script_edit->set_placeholder("\"plugin.gd\" -> res://addons/my_plugin/plugin.gd"); grid->add_child(script_edit); diff --git a/editor/plugins/abstract_polygon_2d_editor.cpp b/editor/plugins/abstract_polygon_2d_editor.cpp index c8a36a3a99..6f29b6c76a 100644 --- a/editor/plugins/abstract_polygon_2d_editor.cpp +++ b/editor/plugins/abstract_polygon_2d_editor.cpp @@ -150,7 +150,7 @@ void AbstractPolygon2DEditor::_action_add_polygon(const Variant &p_polygon) { void AbstractPolygon2DEditor::_action_remove_polygon(int p_idx) { - _action_set_polygon(p_idx, _get_polygon(p_idx), PoolVector<Vector2>()); + _action_set_polygon(p_idx, _get_polygon(p_idx), Vector<Vector2>()); } void AbstractPolygon2DEditor::_action_set_polygon(int p_idx, const Variant &p_polygon) { @@ -209,8 +209,8 @@ void AbstractPolygon2DEditor::_notification(int p_what) { button_delete->set_icon(EditorNode::get_singleton()->get_gui_base()->get_icon("CurveDelete", "EditorIcons")); button_edit->set_pressed(true); - get_tree()->connect("node_removed", this, "_node_removed"); - create_resource->connect("confirmed", this, "_create_resource"); + get_tree()->connect_compat("node_removed", this, "_node_removed"); + create_resource->connect_compat("confirmed", this, "_create_resource"); } break; } } @@ -256,7 +256,7 @@ void AbstractPolygon2DEditor::_wip_close() { undo_redo->create_action(TTR("Create Polygon")); _action_add_polygon(wip); if (_has_uv()) { - undo_redo->add_do_method(_get_node(), "set_uv", PoolVector<Vector2>()); + undo_redo->add_do_method(_get_node(), "set_uv", Vector<Vector2>()); undo_redo->add_undo_method(_get_node(), "set_uv", _get_node()->get("uv")); } _commit_action(); @@ -573,7 +573,7 @@ void AbstractPolygon2DEditor::forward_canvas_draw_over_viewport(Control *p_overl Transform2D xform = canvas_item_editor->get_canvas_transform() * _get_node()->get_global_transform(); // All polygon points are sharp, so use the sharp handle icon - const Ref<Texture> handle = get_icon("EditorPathSharpHandle", "EditorIcons"); + const Ref<Texture2D> handle = get_icon("EditorPathSharpHandle", "EditorIcons"); const Vertex active_point = get_active_point(); const int n_polygons = _get_polygon_count(); @@ -584,7 +584,7 @@ void AbstractPolygon2DEditor::forward_canvas_draw_over_viewport(Control *p_overl if (wip_active && wip_destructive && j != -1) continue; - PoolVector<Vector2> points; + Vector<Vector2> points; Vector2 offset; if (wip_active && j == edited_point.polygon) { @@ -612,7 +612,7 @@ void AbstractPolygon2DEditor::forward_canvas_draw_over_viewport(Control *p_overl Vector2 point = xform.xform(p); Vector2 next_point = xform.xform(p2); - p_overlay->draw_line(point, next_point, col, Math::round(2 * EDSCALE), true); + p_overlay->draw_line(point, next_point, col, Math::round(2 * EDSCALE)); } } @@ -636,7 +636,7 @@ void AbstractPolygon2DEditor::forward_canvas_draw_over_viewport(Control *p_overl p2 = points[(i + 1) % n_points] + offset; const Vector2 next_point = xform.xform(p2); - p_overlay->draw_line(point, next_point, col, Math::round(2 * EDSCALE), true); + p_overlay->draw_line(point, next_point, col, Math::round(2 * EDSCALE)); } } @@ -661,7 +661,7 @@ void AbstractPolygon2DEditor::forward_canvas_draw_over_viewport(Control *p_overl if (edge_point.valid()) { - Ref<Texture> add_handle = get_icon("EditorHandleAdd", "EditorIcons"); + Ref<Texture2D> add_handle = get_icon("EditorHandleAdd", "EditorIcons"); p_overlay->draw_texture(add_handle, edge_point.pos - add_handle->get_size() * 0.5); } } @@ -703,7 +703,7 @@ void AbstractPolygon2DEditor::_bind_methods() { void AbstractPolygon2DEditor::remove_point(const Vertex &p_vertex) { - PoolVector<Vector2> vertices = _get_polygon(p_vertex.polygon); + Vector<Vector2> vertices = _get_polygon(p_vertex.polygon); if (vertices.size() > (_is_line() ? 2 : 3)) { @@ -744,7 +744,7 @@ AbstractPolygon2DEditor::PosVertex AbstractPolygon2DEditor::closest_point(const for (int j = 0; j < n_polygons; j++) { - PoolVector<Vector2> points = _get_polygon(j); + Vector<Vector2> points = _get_polygon(j); const Vector2 offset = _get_offset(j); const int n_points = points.size(); @@ -777,7 +777,7 @@ AbstractPolygon2DEditor::PosVertex AbstractPolygon2DEditor::closest_edge_point(c for (int j = 0; j < n_polygons; j++) { - PoolVector<Vector2> points = _get_polygon(j); + Vector<Vector2> points = _get_polygon(j); const Vector2 offset = _get_offset(j); const int n_points = points.size(); const int n_segments = n_points - (_is_line() ? 1 : 0); @@ -820,17 +820,17 @@ AbstractPolygon2DEditor::AbstractPolygon2DEditor(EditorNode *p_editor, bool p_wi add_child(memnew(VSeparator)); button_create = memnew(ToolButton); add_child(button_create); - button_create->connect("pressed", this, "_menu_option", varray(MODE_CREATE)); + button_create->connect_compat("pressed", this, "_menu_option", varray(MODE_CREATE)); button_create->set_toggle_mode(true); button_edit = memnew(ToolButton); add_child(button_edit); - button_edit->connect("pressed", this, "_menu_option", varray(MODE_EDIT)); + button_edit->connect_compat("pressed", this, "_menu_option", varray(MODE_EDIT)); button_edit->set_toggle_mode(true); button_delete = memnew(ToolButton); add_child(button_delete); - button_delete->connect("pressed", this, "_menu_option", varray(MODE_DELETE)); + button_delete->connect_compat("pressed", this, "_menu_option", varray(MODE_DELETE)); button_delete->set_toggle_mode(true); create_resource = memnew(ConfirmationDialog); diff --git a/editor/plugins/animation_blend_space_1d_editor.cpp b/editor/plugins/animation_blend_space_1d_editor.cpp index d743d1ac2f..c955f2b806 100644 --- a/editor/plugins/animation_blend_space_1d_editor.cpp +++ b/editor/plugins/animation_blend_space_1d_editor.cpp @@ -202,8 +202,8 @@ void AnimationNodeBlendSpace1DEditor::_blend_space_draw() { linecolor_soft.a *= 0.5; Ref<Font> font = get_font("font", "Label"); - Ref<Texture> icon = get_icon("KeyValue", "EditorIcons"); - Ref<Texture> icon_selected = get_icon("KeySelected", "EditorIcons"); + Ref<Texture2D> icon = get_icon("KeyValue", "EditorIcons"); + Ref<Texture2D> icon_selected = get_icon("KeySelected", "EditorIcons"); Size2 s = blend_space_draw->get_size(); @@ -622,28 +622,28 @@ AnimationNodeBlendSpace1DEditor::AnimationNodeBlendSpace1DEditor() { top_hb->add_child(tool_blend); tool_blend->set_pressed(true); tool_blend->set_tooltip(TTR("Set the blending position within the space")); - tool_blend->connect("pressed", this, "_tool_switch", varray(3)); + tool_blend->connect_compat("pressed", this, "_tool_switch", varray(3)); tool_select = memnew(ToolButton); tool_select->set_toggle_mode(true); tool_select->set_button_group(bg); top_hb->add_child(tool_select); tool_select->set_tooltip(TTR("Select and move points, create points with RMB.")); - tool_select->connect("pressed", this, "_tool_switch", varray(0)); + tool_select->connect_compat("pressed", this, "_tool_switch", varray(0)); tool_create = memnew(ToolButton); tool_create->set_toggle_mode(true); tool_create->set_button_group(bg); top_hb->add_child(tool_create); tool_create->set_tooltip(TTR("Create points.")); - tool_create->connect("pressed", this, "_tool_switch", varray(1)); + tool_create->connect_compat("pressed", this, "_tool_switch", varray(1)); tool_erase_sep = memnew(VSeparator); top_hb->add_child(tool_erase_sep); tool_erase = memnew(ToolButton); top_hb->add_child(tool_erase); tool_erase->set_tooltip(TTR("Erase points.")); - tool_erase->connect("pressed", this, "_erase_selected"); + tool_erase->connect_compat("pressed", this, "_erase_selected"); top_hb->add_child(memnew(VSeparator)); @@ -652,7 +652,7 @@ AnimationNodeBlendSpace1DEditor::AnimationNodeBlendSpace1DEditor() { top_hb->add_child(snap); snap->set_pressed(true); snap->set_tooltip(TTR("Enable snap and show grid.")); - snap->connect("pressed", this, "_snap_toggled"); + snap->connect_compat("pressed", this, "_snap_toggled"); snap_value = memnew(SpinBox); top_hb->add_child(snap_value); @@ -670,12 +670,12 @@ AnimationNodeBlendSpace1DEditor::AnimationNodeBlendSpace1DEditor() { edit_value->set_min(-1000); edit_value->set_max(1000); edit_value->set_step(0.01); - edit_value->connect("value_changed", this, "_edit_point_pos"); + edit_value->connect_compat("value_changed", this, "_edit_point_pos"); open_editor = memnew(Button); edit_hb->add_child(open_editor); open_editor->set_text(TTR("Open Editor")); - open_editor->connect("pressed", this, "_open_editor", varray(), CONNECT_DEFERRED); + open_editor->connect_compat("pressed", this, "_open_editor", varray(), CONNECT_DEFERRED); edit_hb->hide(); open_editor->hide(); @@ -691,8 +691,8 @@ AnimationNodeBlendSpace1DEditor::AnimationNodeBlendSpace1DEditor() { panel->set_v_size_flags(SIZE_EXPAND_FILL); blend_space_draw = memnew(Control); - blend_space_draw->connect("gui_input", this, "_blend_space_gui_input"); - blend_space_draw->connect("draw", this, "_blend_space_draw"); + blend_space_draw->connect_compat("gui_input", this, "_blend_space_gui_input"); + blend_space_draw->connect_compat("draw", this, "_blend_space_draw"); blend_space_draw->set_focus_mode(FOCUS_ALL); panel->add_child(blend_space_draw); @@ -724,10 +724,10 @@ AnimationNodeBlendSpace1DEditor::AnimationNodeBlendSpace1DEditor() { bottom_hb->add_child(max_value); } - snap_value->connect("value_changed", this, "_config_changed"); - min_value->connect("value_changed", this, "_config_changed"); - max_value->connect("value_changed", this, "_config_changed"); - label_value->connect("text_changed", this, "_labels_changed"); + snap_value->connect_compat("value_changed", this, "_config_changed"); + min_value->connect_compat("value_changed", this, "_config_changed"); + max_value->connect_compat("value_changed", this, "_config_changed"); + label_value->connect_compat("text_changed", this, "_labels_changed"); error_panel = memnew(PanelContainer); add_child(error_panel); @@ -740,18 +740,18 @@ AnimationNodeBlendSpace1DEditor::AnimationNodeBlendSpace1DEditor() { menu = memnew(PopupMenu); add_child(menu); - menu->connect("id_pressed", this, "_add_menu_type"); + menu->connect_compat("id_pressed", this, "_add_menu_type"); animations_menu = memnew(PopupMenu); menu->add_child(animations_menu); animations_menu->set_name("animations"); - animations_menu->connect("index_pressed", this, "_add_animation_type"); + animations_menu->connect_compat("index_pressed", this, "_add_animation_type"); open_file = memnew(EditorFileDialog); add_child(open_file); open_file->set_title(TTR("Open Animation Node")); open_file->set_mode(EditorFileDialog::MODE_OPEN_FILE); - open_file->connect("file_selected", this, "_file_opened"); + open_file->connect_compat("file_selected", this, "_file_opened"); undo_redo = EditorNode::get_undo_redo(); selected_point = -1; diff --git a/editor/plugins/animation_blend_space_2d_editor.cpp b/editor/plugins/animation_blend_space_2d_editor.cpp index dc7754ba9a..d2306a5d6b 100644 --- a/editor/plugins/animation_blend_space_2d_editor.cpp +++ b/editor/plugins/animation_blend_space_2d_editor.cpp @@ -55,12 +55,12 @@ void AnimationNodeBlendSpace2DEditor::_blend_space_changed() { void AnimationNodeBlendSpace2DEditor::edit(const Ref<AnimationNode> &p_node) { if (blend_space.is_valid()) { - blend_space->disconnect("triangles_updated", this, "_blend_space_changed"); + blend_space->disconnect_compat("triangles_updated", this, "_blend_space_changed"); } blend_space = p_node; if (!blend_space.is_null()) { - blend_space->connect("triangles_updated", this, "_blend_space_changed"); + blend_space->connect_compat("triangles_updated", this, "_blend_space_changed"); _update_space(); } } @@ -410,8 +410,8 @@ void AnimationNodeBlendSpace2DEditor::_blend_space_draw() { Color linecolor_soft = linecolor; linecolor_soft.a *= 0.5; Ref<Font> font = get_font("font", "Label"); - Ref<Texture> icon = get_icon("KeyValue", "EditorIcons"); - Ref<Texture> icon_selected = get_icon("KeySelected", "EditorIcons"); + Ref<Texture2D> icon = get_icon("KeyValue", "EditorIcons"); + Ref<Texture2D> icon_selected = get_icon("KeySelected", "EditorIcons"); Size2 s = blend_space_draw->get_size(); @@ -497,7 +497,7 @@ void AnimationNodeBlendSpace2DEditor::_blend_space_draw() { } for (int j = 0; j < 3; j++) { - blend_space_draw->draw_line(points[j], points[(j + 1) % 3], linecolor, 1, true); + blend_space_draw->draw_line(points[j], points[(j + 1) % 3], linecolor, 1); } Color color; @@ -553,9 +553,9 @@ void AnimationNodeBlendSpace2DEditor::_blend_space_draw() { } for (int i = 0; i < points.size() - 1; i++) { - blend_space_draw->draw_line(points[i], points[i + 1], linecolor, 2, true); + blend_space_draw->draw_line(points[i], points[i + 1], linecolor, 2); } - blend_space_draw->draw_line(points[points.size() - 1], blend_space_draw->get_local_mouse_position(), linecolor, 2, true); + blend_space_draw->draw_line(points[points.size() - 1], blend_space_draw->get_local_mouse_position(), linecolor, 2); } ///draw cursor position @@ -870,42 +870,42 @@ AnimationNodeBlendSpace2DEditor::AnimationNodeBlendSpace2DEditor() { top_hb->add_child(tool_blend); tool_blend->set_pressed(true); tool_blend->set_tooltip(TTR("Set the blending position within the space")); - tool_blend->connect("pressed", this, "_tool_switch", varray(3)); + tool_blend->connect_compat("pressed", this, "_tool_switch", varray(3)); tool_select = memnew(ToolButton); tool_select->set_toggle_mode(true); tool_select->set_button_group(bg); top_hb->add_child(tool_select); tool_select->set_tooltip(TTR("Select and move points, create points with RMB.")); - tool_select->connect("pressed", this, "_tool_switch", varray(0)); + tool_select->connect_compat("pressed", this, "_tool_switch", varray(0)); tool_create = memnew(ToolButton); tool_create->set_toggle_mode(true); tool_create->set_button_group(bg); top_hb->add_child(tool_create); tool_create->set_tooltip(TTR("Create points.")); - tool_create->connect("pressed", this, "_tool_switch", varray(1)); + tool_create->connect_compat("pressed", this, "_tool_switch", varray(1)); tool_triangle = memnew(ToolButton); tool_triangle->set_toggle_mode(true); tool_triangle->set_button_group(bg); top_hb->add_child(tool_triangle); tool_triangle->set_tooltip(TTR("Create triangles by connecting points.")); - tool_triangle->connect("pressed", this, "_tool_switch", varray(2)); + tool_triangle->connect_compat("pressed", this, "_tool_switch", varray(2)); tool_erase_sep = memnew(VSeparator); top_hb->add_child(tool_erase_sep); tool_erase = memnew(ToolButton); top_hb->add_child(tool_erase); tool_erase->set_tooltip(TTR("Erase points and triangles.")); - tool_erase->connect("pressed", this, "_erase_selected"); + tool_erase->connect_compat("pressed", this, "_erase_selected"); tool_erase->set_disabled(true); top_hb->add_child(memnew(VSeparator)); auto_triangles = memnew(ToolButton); top_hb->add_child(auto_triangles); - auto_triangles->connect("pressed", this, "_auto_triangles_toggled"); + auto_triangles->connect_compat("pressed", this, "_auto_triangles_toggled"); auto_triangles->set_toggle_mode(true); auto_triangles->set_tooltip(TTR("Generate blend triangles automatically (instead of manually)")); @@ -916,7 +916,7 @@ AnimationNodeBlendSpace2DEditor::AnimationNodeBlendSpace2DEditor() { top_hb->add_child(snap); snap->set_pressed(true); snap->set_tooltip(TTR("Enable snap and show grid.")); - snap->connect("pressed", this, "_snap_toggled"); + snap->connect_compat("pressed", this, "_snap_toggled"); snap_x = memnew(SpinBox); top_hb->add_child(snap_x); @@ -937,7 +937,7 @@ AnimationNodeBlendSpace2DEditor::AnimationNodeBlendSpace2DEditor() { top_hb->add_child(memnew(Label(TTR("Blend:")))); interpolation = memnew(OptionButton); top_hb->add_child(interpolation); - interpolation->connect("item_selected", this, "_config_changed"); + interpolation->connect_compat("item_selected", this, "_config_changed"); edit_hb = memnew(HBoxContainer); top_hb->add_child(edit_hb); @@ -948,17 +948,17 @@ AnimationNodeBlendSpace2DEditor::AnimationNodeBlendSpace2DEditor() { edit_x->set_min(-1000); edit_x->set_step(0.01); edit_x->set_max(1000); - edit_x->connect("value_changed", this, "_edit_point_pos"); + edit_x->connect_compat("value_changed", this, "_edit_point_pos"); edit_y = memnew(SpinBox); edit_hb->add_child(edit_y); edit_y->set_min(-1000); edit_y->set_step(0.01); edit_y->set_max(1000); - edit_y->connect("value_changed", this, "_edit_point_pos"); + edit_y->connect_compat("value_changed", this, "_edit_point_pos"); open_editor = memnew(Button); edit_hb->add_child(open_editor); open_editor->set_text(TTR("Open Editor")); - open_editor->connect("pressed", this, "_open_editor", varray(), CONNECT_DEFERRED); + open_editor->connect_compat("pressed", this, "_open_editor", varray(), CONNECT_DEFERRED); edit_hb->hide(); open_editor->hide(); @@ -999,8 +999,8 @@ AnimationNodeBlendSpace2DEditor::AnimationNodeBlendSpace2DEditor() { panel->set_h_size_flags(SIZE_EXPAND_FILL); blend_space_draw = memnew(Control); - blend_space_draw->connect("gui_input", this, "_blend_space_gui_input"); - blend_space_draw->connect("draw", this, "_blend_space_draw"); + blend_space_draw->connect_compat("gui_input", this, "_blend_space_gui_input"); + blend_space_draw->connect_compat("draw", this, "_blend_space_draw"); blend_space_draw->set_focus_mode(FOCUS_ALL); panel->add_child(blend_space_draw); @@ -1029,14 +1029,14 @@ AnimationNodeBlendSpace2DEditor::AnimationNodeBlendSpace2DEditor() { min_x_value->set_step(0.01); } - snap_x->connect("value_changed", this, "_config_changed"); - snap_y->connect("value_changed", this, "_config_changed"); - max_x_value->connect("value_changed", this, "_config_changed"); - min_x_value->connect("value_changed", this, "_config_changed"); - max_y_value->connect("value_changed", this, "_config_changed"); - min_y_value->connect("value_changed", this, "_config_changed"); - label_x->connect("text_changed", this, "_labels_changed"); - label_y->connect("text_changed", this, "_labels_changed"); + snap_x->connect_compat("value_changed", this, "_config_changed"); + snap_y->connect_compat("value_changed", this, "_config_changed"); + max_x_value->connect_compat("value_changed", this, "_config_changed"); + min_x_value->connect_compat("value_changed", this, "_config_changed"); + max_y_value->connect_compat("value_changed", this, "_config_changed"); + min_y_value->connect_compat("value_changed", this, "_config_changed"); + label_x->connect_compat("text_changed", this, "_labels_changed"); + label_y->connect_compat("text_changed", this, "_labels_changed"); error_panel = memnew(PanelContainer); add_child(error_panel); @@ -1050,18 +1050,18 @@ AnimationNodeBlendSpace2DEditor::AnimationNodeBlendSpace2DEditor() { menu = memnew(PopupMenu); add_child(menu); - menu->connect("id_pressed", this, "_add_menu_type"); + menu->connect_compat("id_pressed", this, "_add_menu_type"); animations_menu = memnew(PopupMenu); menu->add_child(animations_menu); animations_menu->set_name("animations"); - animations_menu->connect("index_pressed", this, "_add_animation_type"); + animations_menu->connect_compat("index_pressed", this, "_add_animation_type"); open_file = memnew(EditorFileDialog); add_child(open_file); open_file->set_title(TTR("Open Animation Node")); open_file->set_mode(EditorFileDialog::MODE_OPEN_FILE); - open_file->connect("file_selected", this, "_file_opened"); + open_file->connect_compat("file_selected", this, "_file_opened"); undo_redo = EditorNode::get_undo_redo(); selected_point = -1; diff --git a/editor/plugins/animation_blend_tree_editor_plugin.cpp b/editor/plugins/animation_blend_tree_editor_plugin.cpp index 2de224c043..f2daa809b4 100644 --- a/editor/plugins/animation_blend_tree_editor_plugin.cpp +++ b/editor/plugins/animation_blend_tree_editor_plugin.cpp @@ -146,11 +146,11 @@ void AnimationNodeBlendTreeEditor::_update_graph() { name->set_expand_to_text_length(true); node->add_child(name); node->set_slot(0, false, 0, Color(), true, 0, get_color("font_color", "Label")); - name->connect("text_entered", this, "_node_renamed", varray(agnode)); - name->connect("focus_exited", this, "_node_renamed_focus_out", varray(name, agnode), CONNECT_DEFERRED); + name->connect_compat("text_entered", this, "_node_renamed", varray(agnode)); + name->connect_compat("focus_exited", this, "_node_renamed_focus_out", varray(name, agnode), CONNECT_DEFERRED); base = 1; node->set_show_close_button(true); - node->connect("close_request", this, "_delete_request", varray(E->get()), CONNECT_DEFERRED); + node->connect_compat("close_request", this, "_delete_request", varray(E->get()), CONNECT_DEFERRED); } for (int i = 0; i < agnode->get_input_count(); i++) { @@ -173,13 +173,13 @@ void AnimationNodeBlendTreeEditor::_update_graph() { prop->set_object_and_property(AnimationTreeEditor::get_singleton()->get_tree(), base_path); prop->update_property(); prop->set_name_split_ratio(0); - prop->connect("property_changed", this, "_property_changed"); + prop->connect_compat("property_changed", this, "_property_changed"); node->add_child(prop); visible_properties.push_back(prop); } } - node->connect("dragged", this, "_node_dragged", varray(E->get())); + node->connect_compat("dragged", this, "_node_dragged", varray(E->get())); if (AnimationTreeEditor::get_singleton()->can_edit(agnode)) { node->add_child(memnew(HSeparator)); @@ -187,7 +187,7 @@ void AnimationNodeBlendTreeEditor::_update_graph() { open_in_editor->set_text(TTR("Open Editor")); open_in_editor->set_icon(get_icon("Edit", "EditorIcons")); node->add_child(open_in_editor); - open_in_editor->connect("pressed", this, "_open_in_editor", varray(E->get()), CONNECT_DEFERRED); + open_in_editor->connect_compat("pressed", this, "_open_in_editor", varray(E->get()), CONNECT_DEFERRED); open_in_editor->set_h_size_flags(SIZE_SHRINK_CENTER); } @@ -198,7 +198,7 @@ void AnimationNodeBlendTreeEditor::_update_graph() { edit_filters->set_text(TTR("Edit Filters")); edit_filters->set_icon(get_icon("AnimationFilter", "EditorIcons")); node->add_child(edit_filters); - edit_filters->connect("pressed", this, "_edit_filters", varray(E->get()), CONNECT_DEFERRED); + edit_filters->connect_compat("pressed", this, "_edit_filters", varray(E->get()), CONNECT_DEFERRED); edit_filters->set_h_size_flags(SIZE_SHRINK_CENTER); } @@ -238,7 +238,7 @@ void AnimationNodeBlendTreeEditor::_update_graph() { animations[E->get()] = pb; node->add_child(pb); - mb->get_popup()->connect("index_pressed", this, "_anim_selected", varray(options, E->get()), CONNECT_DEFERRED); + mb->get_popup()->connect_compat("index_pressed", this, "_anim_selected", varray(options, E->get()), CONNECT_DEFERRED); } if (EditorSettings::get_singleton()->get("interface/theme/use_graph_node_headers")) { @@ -312,7 +312,7 @@ void AnimationNodeBlendTreeEditor::_add_node(int p_idx) { AnimationNode *an = Object::cast_to<AnimationNode>(ClassDB::instance(base_type)); ERR_FAIL_COND(!an); anode = Ref<AnimationNode>(an); - anode->set_script(add_options[p_idx].script.get_ref_ptr()); + anode->set_script(add_options[p_idx].script); base_name = add_options[p_idx].name; } @@ -911,7 +911,7 @@ bool AnimationNodeBlendTreeEditor::can_edit(const Ref<AnimationNode> &p_node) { void AnimationNodeBlendTreeEditor::edit(const Ref<AnimationNode> &p_node) { if (blend_tree.is_valid()) { - blend_tree->disconnect("removed_from_graph", this, "_removed_from_graph"); + blend_tree->disconnect_compat("removed_from_graph", this, "_removed_from_graph"); } blend_tree = p_node; @@ -919,7 +919,7 @@ void AnimationNodeBlendTreeEditor::edit(const Ref<AnimationNode> &p_node) { if (blend_tree.is_null()) { hide(); } else { - blend_tree->connect("removed_from_graph", this, "_removed_from_graph"); + blend_tree->connect_compat("removed_from_graph", this, "_removed_from_graph"); _update_graph(); } @@ -936,12 +936,12 @@ AnimationNodeBlendTreeEditor::AnimationNodeBlendTreeEditor() { graph->add_valid_right_disconnect_type(0); graph->add_valid_left_disconnect_type(0); graph->set_v_size_flags(SIZE_EXPAND_FILL); - graph->connect("connection_request", this, "_connection_request", varray(), CONNECT_DEFERRED); - graph->connect("disconnection_request", this, "_disconnection_request", varray(), CONNECT_DEFERRED); - graph->connect("node_selected", this, "_node_selected"); - graph->connect("scroll_offset_changed", this, "_scroll_changed"); - graph->connect("delete_nodes_request", this, "_delete_nodes_request"); - graph->connect("popup_request", this, "_popup_request"); + graph->connect_compat("connection_request", this, "_connection_request", varray(), CONNECT_DEFERRED); + graph->connect_compat("disconnection_request", this, "_disconnection_request", varray(), CONNECT_DEFERRED); + graph->connect_compat("node_selected", this, "_node_selected"); + graph->connect_compat("scroll_offset_changed", this, "_scroll_changed"); + graph->connect_compat("delete_nodes_request", this, "_delete_nodes_request"); + graph->connect_compat("popup_request", this, "_popup_request"); VSeparator *vs = memnew(VSeparator); graph->get_zoom_hbox()->add_child(vs); @@ -951,8 +951,8 @@ AnimationNodeBlendTreeEditor::AnimationNodeBlendTreeEditor() { graph->get_zoom_hbox()->add_child(add_node); add_node->set_text(TTR("Add Node...")); graph->get_zoom_hbox()->move_child(add_node, 0); - add_node->get_popup()->connect("id_pressed", this, "_add_node"); - add_node->connect("about_to_show", this, "_update_options_menu"); + add_node->get_popup()->connect_compat("id_pressed", this, "_add_node"); + add_node->connect_compat("about_to_show", this, "_update_options_menu"); add_options.push_back(AddOption("Animation", "AnimationNodeAnimation")); add_options.push_back(AddOption("OneShot", "AnimationNodeOneShot")); @@ -984,19 +984,19 @@ AnimationNodeBlendTreeEditor::AnimationNodeBlendTreeEditor() { filter_enabled = memnew(CheckBox); filter_enabled->set_text(TTR("Enable Filtering")); - filter_enabled->connect("pressed", this, "_filter_toggled"); + filter_enabled->connect_compat("pressed", this, "_filter_toggled"); filter_vbox->add_child(filter_enabled); filters = memnew(Tree); filter_vbox->add_child(filters); filters->set_v_size_flags(SIZE_EXPAND_FILL); filters->set_hide_root(true); - filters->connect("item_edited", this, "_filter_edited"); + filters->connect_compat("item_edited", this, "_filter_edited"); open_file = memnew(EditorFileDialog); add_child(open_file); open_file->set_title(TTR("Open Animation Node")); open_file->set_mode(EditorFileDialog::MODE_OPEN_FILE); - open_file->connect("file_selected", this, "_file_opened"); + open_file->connect_compat("file_selected", this, "_file_opened"); undo_redo = EditorNode::get_undo_redo(); } diff --git a/editor/plugins/animation_player_editor_plugin.cpp b/editor/plugins/animation_player_editor_plugin.cpp index 5e69ce4e69..26c3c21d61 100644 --- a/editor/plugins/animation_player_editor_plugin.cpp +++ b/editor/plugins/animation_player_editor_plugin.cpp @@ -99,13 +99,13 @@ void AnimationPlayerEditor::_notification(int p_what) { } break; case NOTIFICATION_ENTER_TREE: { - tool_anim->get_popup()->connect("id_pressed", this, "_animation_tool_menu"); + tool_anim->get_popup()->connect_compat("id_pressed", this, "_animation_tool_menu"); - onion_skinning->get_popup()->connect("id_pressed", this, "_onion_skinning_menu"); + onion_skinning->get_popup()->connect_compat("id_pressed", this, "_onion_skinning_menu"); - blend_editor.next->connect("item_selected", this, "_blend_editor_next_changed"); + blend_editor.next->connect_compat("item_selected", this, "_blend_editor_next_changed"); - get_tree()->connect("node_removed", this, "_node_removed"); + get_tree()->connect_compat("node_removed", this, "_node_removed"); add_style_override("panel", editor->get_gui_base()->get_stylebox("panel", "Panel")); } break; @@ -1322,11 +1322,10 @@ void AnimationPlayerEditor::_allocate_onion_layers() { // Each capture is a viewport with a canvas item attached that renders a full-size rect with the contents of the main viewport. onion.captures.write[i] = VS::get_singleton()->viewport_create(); - VS::get_singleton()->viewport_set_usage(onion.captures[i], VS::VIEWPORT_USAGE_2D); + VS::get_singleton()->viewport_set_size(onion.captures[i], capture_size.width, capture_size.height); VS::get_singleton()->viewport_set_update_mode(onion.captures[i], VS::VIEWPORT_UPDATE_ALWAYS); VS::get_singleton()->viewport_set_transparent_background(onion.captures[i], !is_present); - VS::get_singleton()->viewport_set_vflip(onion.captures[i], true); VS::get_singleton()->viewport_attach_canvas(onion.captures[i], onion.capture.canvas); } @@ -1505,16 +1504,16 @@ void AnimationPlayerEditor::_prepare_onion_layers_2() { void AnimationPlayerEditor::_start_onion_skinning() { // FIXME: Using "idle_frame" makes onion layers update one frame behind the current. - if (!get_tree()->is_connected("idle_frame", this, "call_deferred")) { - get_tree()->connect("idle_frame", this, "call_deferred", varray("_prepare_onion_layers_1")); + if (!get_tree()->is_connected_compat("idle_frame", this, "call_deferred")) { + get_tree()->connect_compat("idle_frame", this, "call_deferred", varray("_prepare_onion_layers_1")); } } void AnimationPlayerEditor::_stop_onion_skinning() { - if (get_tree()->is_connected("idle_frame", this, "call_deferred")) { + if (get_tree()->is_connected_compat("idle_frame", this, "call_deferred")) { - get_tree()->disconnect("idle_frame", this, "call_deferred"); + get_tree()->disconnect_compat("idle_frame", this, "call_deferred"); _free_onion_layers(); @@ -1631,11 +1630,11 @@ AnimationPlayerEditor::AnimationPlayerEditor(EditorNode *p_editor, AnimationPlay accept = memnew(AcceptDialog); add_child(accept); - accept->connect("confirmed", this, "_menu_confirm_current"); + accept->connect_compat("confirmed", this, "_menu_confirm_current"); delete_dialog = memnew(ConfirmationDialog); add_child(delete_dialog); - delete_dialog->connect("confirmed", this, "_animation_remove_confirmed"); + delete_dialog->connect_compat("confirmed", this, "_animation_remove_confirmed"); tool_anim = memnew(MenuButton); tool_anim->set_flat(false); @@ -1680,7 +1679,7 @@ AnimationPlayerEditor::AnimationPlayerEditor(EditorNode *p_editor, AnimationPlay onion_toggle = memnew(ToolButton); onion_toggle->set_toggle_mode(true); onion_toggle->set_tooltip(TTR("Enable Onion Skinning")); - onion_toggle->connect("pressed", this, "_onion_skinning_menu", varray(ONION_SKINNING_ENABLE)); + onion_toggle->connect_compat("pressed", this, "_onion_skinning_menu", varray(ONION_SKINNING_ENABLE)); hb->add_child(onion_toggle); onion_skinning = memnew(MenuButton); @@ -1706,7 +1705,7 @@ AnimationPlayerEditor::AnimationPlayerEditor(EditorNode *p_editor, AnimationPlay pin->set_toggle_mode(true); pin->set_tooltip(TTR("Pin AnimationPlayer")); hb->add_child(pin); - pin->connect("pressed", this, "_pin_pressed"); + pin->connect_compat("pressed", this, "_pin_pressed"); file = memnew(EditorFileDialog); add_child(file); @@ -1730,7 +1729,7 @@ AnimationPlayerEditor::AnimationPlayerEditor(EditorNode *p_editor, AnimationPlay error_dialog->set_title(TTR("Error!")); add_child(error_dialog); - name_dialog->connect("confirmed", this, "_animation_name_edited"); + name_dialog->connect_compat("confirmed", this, "_animation_name_edited"); blend_editor.dialog = memnew(AcceptDialog); add_child(blend_editor.dialog); @@ -1746,21 +1745,21 @@ AnimationPlayerEditor::AnimationPlayerEditor(EditorNode *p_editor, AnimationPlay blend_editor.dialog->set_title(TTR("Cross-Animation Blend Times")); updating_blends = false; - blend_editor.tree->connect("item_edited", this, "_blend_edited"); + blend_editor.tree->connect_compat("item_edited", this, "_blend_edited"); - autoplay->connect("pressed", this, "_autoplay_pressed"); + autoplay->connect_compat("pressed", this, "_autoplay_pressed"); autoplay->set_toggle_mode(true); - play->connect("pressed", this, "_play_pressed"); - play_from->connect("pressed", this, "_play_from_pressed"); - play_bw->connect("pressed", this, "_play_bw_pressed"); - play_bw_from->connect("pressed", this, "_play_bw_from_pressed"); - stop->connect("pressed", this, "_stop_pressed"); + play->connect_compat("pressed", this, "_play_pressed"); + play_from->connect_compat("pressed", this, "_play_from_pressed"); + play_bw->connect_compat("pressed", this, "_play_bw_pressed"); + play_bw_from->connect_compat("pressed", this, "_play_bw_from_pressed"); + stop->connect_compat("pressed", this, "_stop_pressed"); - animation->connect("item_selected", this, "_animation_selected", Vector<Variant>(), true); + animation->connect_compat("item_selected", this, "_animation_selected", Vector<Variant>(), true); - file->connect("file_selected", this, "_dialog_action"); - frame->connect("value_changed", this, "_seek_value_changed", Vector<Variant>(), true); - scale->connect("text_entered", this, "_scale_changed", Vector<Variant>(), true); + file->connect_compat("file_selected", this, "_dialog_action"); + frame->connect_compat("value_changed", this, "_seek_value_changed", Vector<Variant>(), true); + scale->connect_compat("text_entered", this, "_scale_changed", Vector<Variant>(), true); renaming = false; last_active = false; @@ -1770,14 +1769,14 @@ AnimationPlayerEditor::AnimationPlayerEditor(EditorNode *p_editor, AnimationPlay add_child(track_editor); track_editor->set_v_size_flags(SIZE_EXPAND_FILL); - track_editor->connect("timeline_changed", this, "_animation_key_editor_seek"); - track_editor->connect("animation_len_changed", this, "_animation_key_editor_anim_len_changed"); + track_editor->connect_compat("timeline_changed", this, "_animation_key_editor_seek"); + track_editor->connect_compat("animation_len_changed", this, "_animation_key_editor_anim_len_changed"); _update_player(); // Onion skinning. - track_editor->connect("visibility_changed", this, "_editor_visibility_changed"); + track_editor->connect_compat("visibility_changed", this, "_editor_visibility_changed"); onion.enabled = false; onion.past = true; diff --git a/editor/plugins/animation_player_editor_plugin.h b/editor/plugins/animation_player_editor_plugin.h index 55c2f365ce..ab9db279d5 100644 --- a/editor/plugins/animation_player_editor_plugin.h +++ b/editor/plugins/animation_player_editor_plugin.h @@ -105,7 +105,7 @@ class AnimationPlayerEditor : public VBoxContainer { LineEdit *name; Label *name_title; UndoRedo *undo_redo; - Ref<Texture> autoplay_icon; + Ref<Texture2D> autoplay_icon; bool last_active; float timeline_position; diff --git a/editor/plugins/animation_state_machine_editor.cpp b/editor/plugins/animation_state_machine_editor.cpp index 2a582a1249..6f29aba356 100644 --- a/editor/plugins/animation_state_machine_editor.cpp +++ b/editor/plugins/animation_state_machine_editor.cpp @@ -514,7 +514,7 @@ void AnimationNodeStateMachineEditor::_connection_draw(const Vector2 &p_from, co accent.a *= 0.6; } - Ref<Texture> icons[6] = { + Ref<Texture2D> icons[6] = { get_icon("TransitionImmediateBig", "EditorIcons"), get_icon("TransitionSyncBig", "EditorIcons"), get_icon("TransitionEndBig", "EditorIcons"), @@ -524,16 +524,16 @@ void AnimationNodeStateMachineEditor::_connection_draw(const Vector2 &p_from, co }; if (p_selected) { - state_machine_draw->draw_line(p_from, p_to, accent, 6, true); + state_machine_draw->draw_line(p_from, p_to, accent, 6); } if (p_travel) { linecolor = accent; linecolor.set_hsv(1.0, linecolor.get_s(), linecolor.get_v()); } - state_machine_draw->draw_line(p_from, p_to, linecolor, 2, true); + state_machine_draw->draw_line(p_from, p_to, linecolor, 2); - Ref<Texture> icon = icons[p_mode + (p_auto_advance ? 3 : 0)]; + Ref<Texture2D> icon = icons[p_mode + (p_auto_advance ? 3 : 0)]; Transform2D xf; xf.elements[0] = (p_to - p_from).normalized(); @@ -578,9 +578,9 @@ void AnimationNodeStateMachineEditor::_state_machine_draw() { Ref<Font> font = get_font("title_font", "GraphNode"); Color font_color = get_color("title_color", "GraphNode"); - Ref<Texture> play = get_icon("Play", "EditorIcons"); - Ref<Texture> auto_play = get_icon("AutoPlay", "EditorIcons"); - Ref<Texture> edit = get_icon("Edit", "EditorIcons"); + Ref<Texture2D> play = get_icon("Play", "EditorIcons"); + Ref<Texture2D> auto_play = get_icon("AutoPlay", "EditorIcons"); + Ref<Texture2D> edit = get_icon("Edit", "EditorIcons"); Color accent = get_color("accent_color", "Editor"); Color linecolor = get_color("font_color", "Label"); linecolor.a *= 0.3; @@ -686,7 +686,7 @@ void AnimationNodeStateMachineEditor::_state_machine_draw() { _connection_draw(from, to, AnimationNodeStateMachineTransition::SwitchMode(transition_mode->get_selected()), true, false, false, false); } - Ref<Texture> tr_reference_icon = get_icon("TransitionImmediateBig", "EditorIcons"); + Ref<Texture2D> tr_reference_icon = get_icon("TransitionImmediateBig", "EditorIcons"); float tr_bidi_offset = int(tr_reference_icon->get_height() * 0.8); //draw transition lines @@ -796,7 +796,7 @@ void AnimationNodeStateMachineEditor::_state_machine_draw() { nr.play.position = offset + Vector2(0, (h - play->get_height()) / 2).floor(); nr.play.size = play->get_size(); - Ref<Texture> play_tex = onstart ? auto_play : play; + Ref<Texture2D> play_tex = onstart ? auto_play : play; if (over_node == name && over_node_what == 0) { state_machine_draw->draw_texture(play_tex, nr.play.position, accent); @@ -918,14 +918,6 @@ void AnimationNodeStateMachineEditor::_notification(int p_what) { transition_mode->add_icon_item(get_icon("TransitionSync", "EditorIcons"), TTR("Sync")); transition_mode->add_icon_item(get_icon("TransitionEnd", "EditorIcons"), TTR("At End")); - //force filter on those, so they deform better - get_icon("TransitionImmediateBig", "EditorIcons")->set_flags(Texture::FLAG_FILTER); - get_icon("TransitionEndBig", "EditorIcons")->set_flags(Texture::FLAG_FILTER); - get_icon("TransitionSyncBig", "EditorIcons")->set_flags(Texture::FLAG_FILTER); - get_icon("TransitionImmediateAutoBig", "EditorIcons")->set_flags(Texture::FLAG_FILTER); - get_icon("TransitionEndAutoBig", "EditorIcons")->set_flags(Texture::FLAG_FILTER); - get_icon("TransitionSyncAutoBig", "EditorIcons")->set_flags(Texture::FLAG_FILTER); - tool_erase->set_icon(get_icon("Remove", "EditorIcons")); tool_autoplay->set_icon(get_icon("AutoPlay", "EditorIcons")); tool_end->set_icon(get_icon("AutoEnd", "EditorIcons")); @@ -1284,21 +1276,21 @@ AnimationNodeStateMachineEditor::AnimationNodeStateMachineEditor() { tool_select->set_button_group(bg); tool_select->set_pressed(true); tool_select->set_tooltip(TTR("Select and move nodes.\nRMB to add new nodes.\nShift+LMB to create connections.")); - tool_select->connect("pressed", this, "_update_mode", varray(), CONNECT_DEFERRED); + tool_select->connect_compat("pressed", this, "_update_mode", varray(), CONNECT_DEFERRED); tool_create = memnew(ToolButton); top_hb->add_child(tool_create); tool_create->set_toggle_mode(true); tool_create->set_button_group(bg); tool_create->set_tooltip(TTR("Create new nodes.")); - tool_create->connect("pressed", this, "_update_mode", varray(), CONNECT_DEFERRED); + tool_create->connect_compat("pressed", this, "_update_mode", varray(), CONNECT_DEFERRED); tool_connect = memnew(ToolButton); top_hb->add_child(tool_connect); tool_connect->set_toggle_mode(true); tool_connect->set_button_group(bg); tool_connect->set_tooltip(TTR("Connect nodes.")); - tool_connect->connect("pressed", this, "_update_mode", varray(), CONNECT_DEFERRED); + tool_connect->connect_compat("pressed", this, "_update_mode", varray(), CONNECT_DEFERRED); tool_erase_hb = memnew(HBoxContainer); top_hb->add_child(tool_erase_hb); @@ -1306,7 +1298,7 @@ AnimationNodeStateMachineEditor::AnimationNodeStateMachineEditor() { tool_erase = memnew(ToolButton); tool_erase->set_tooltip(TTR("Remove selected node or transition.")); tool_erase_hb->add_child(tool_erase); - tool_erase->connect("pressed", this, "_erase_selected"); + tool_erase->connect_compat("pressed", this, "_erase_selected"); tool_erase->set_disabled(true); tool_erase_hb->add_child(memnew(VSeparator)); @@ -1314,13 +1306,13 @@ AnimationNodeStateMachineEditor::AnimationNodeStateMachineEditor() { tool_autoplay = memnew(ToolButton); tool_autoplay->set_tooltip(TTR("Toggle autoplay this animation on start, restart or seek to zero.")); tool_erase_hb->add_child(tool_autoplay); - tool_autoplay->connect("pressed", this, "_autoplay_selected"); + tool_autoplay->connect_compat("pressed", this, "_autoplay_selected"); tool_autoplay->set_disabled(true); tool_end = memnew(ToolButton); tool_end->set_tooltip(TTR("Set the end animation. This is useful for sub-transitions.")); tool_erase_hb->add_child(tool_end); - tool_end->connect("pressed", this, "_end_selected"); + tool_end->connect_compat("pressed", this, "_end_selected"); tool_end->set_disabled(true); top_hb->add_child(memnew(VSeparator)); @@ -1341,26 +1333,26 @@ AnimationNodeStateMachineEditor::AnimationNodeStateMachineEditor() { state_machine_draw = memnew(Control); panel->add_child(state_machine_draw); - state_machine_draw->connect("gui_input", this, "_state_machine_gui_input"); - state_machine_draw->connect("draw", this, "_state_machine_draw"); + state_machine_draw->connect_compat("gui_input", this, "_state_machine_gui_input"); + state_machine_draw->connect_compat("draw", this, "_state_machine_draw"); state_machine_draw->set_focus_mode(FOCUS_ALL); state_machine_play_pos = memnew(Control); state_machine_draw->add_child(state_machine_play_pos); state_machine_play_pos->set_mouse_filter(MOUSE_FILTER_PASS); //pass all to parent state_machine_play_pos->set_anchors_and_margins_preset(PRESET_WIDE); - state_machine_play_pos->connect("draw", this, "_state_machine_pos_draw"); + state_machine_play_pos->connect_compat("draw", this, "_state_machine_pos_draw"); v_scroll = memnew(VScrollBar); state_machine_draw->add_child(v_scroll); v_scroll->set_anchors_and_margins_preset(PRESET_RIGHT_WIDE); - v_scroll->connect("value_changed", this, "_scroll_changed"); + v_scroll->connect_compat("value_changed", this, "_scroll_changed"); h_scroll = memnew(HScrollBar); state_machine_draw->add_child(h_scroll); h_scroll->set_anchors_and_margins_preset(PRESET_BOTTOM_WIDE); h_scroll->set_margin(MARGIN_RIGHT, -v_scroll->get_size().x * EDSCALE); - h_scroll->connect("value_changed", this, "_scroll_changed"); + h_scroll->connect_compat("value_changed", this, "_scroll_changed"); error_panel = memnew(PanelContainer); add_child(error_panel); @@ -1374,25 +1366,25 @@ AnimationNodeStateMachineEditor::AnimationNodeStateMachineEditor() { menu = memnew(PopupMenu); add_child(menu); - menu->connect("id_pressed", this, "_add_menu_type"); + menu->connect_compat("id_pressed", this, "_add_menu_type"); animations_menu = memnew(PopupMenu); menu->add_child(animations_menu); animations_menu->set_name("animations"); - animations_menu->connect("index_pressed", this, "_add_animation_type"); + animations_menu->connect_compat("index_pressed", this, "_add_animation_type"); name_edit = memnew(LineEdit); state_machine_draw->add_child(name_edit); name_edit->hide(); - name_edit->connect("text_entered", this, "_name_edited"); - name_edit->connect("focus_exited", this, "_name_edited_focus_out"); + name_edit->connect_compat("text_entered", this, "_name_edited"); + name_edit->connect_compat("focus_exited", this, "_name_edited_focus_out"); name_edit->set_as_toplevel(true); open_file = memnew(EditorFileDialog); add_child(open_file); open_file->set_title(TTR("Open Animation Node")); open_file->set_mode(EditorFileDialog::MODE_OPEN_FILE); - open_file->connect("file_selected", this, "_file_opened"); + open_file->connect_compat("file_selected", this, "_file_opened"); undo_redo = EditorNode::get_undo_redo(); over_text = false; diff --git a/editor/plugins/animation_tree_editor_plugin.cpp b/editor/plugins/animation_tree_editor_plugin.cpp index 8dc7e4638d..8900882725 100644 --- a/editor/plugins/animation_tree_editor_plugin.cpp +++ b/editor/plugins/animation_tree_editor_plugin.cpp @@ -59,7 +59,7 @@ void AnimationTreeEditor::edit(AnimationTree *p_tree) { path = tree->get_meta("_tree_edit_path"); edit_path(path); } else { - current_root = 0; + current_root = ObjectID(); } } @@ -85,7 +85,7 @@ void AnimationTreeEditor::_update_path() { b->set_button_group(group); b->set_pressed(true); b->set_focus_mode(FOCUS_NONE); - b->connect("pressed", this, "_path_button_pressed", varray(-1)); + b->connect_compat("pressed", this, "_path_button_pressed", varray(-1)); path_hb->add_child(b); for (int i = 0; i < button_path.size(); i++) { b = memnew(Button); @@ -95,7 +95,7 @@ void AnimationTreeEditor::_update_path() { path_hb->add_child(b); b->set_pressed(true); b->set_focus_mode(FOCUS_NONE); - b->connect("pressed", this, "_path_button_pressed", varray(i)); + b->connect_compat("pressed", this, "_path_button_pressed", varray(i)); } } @@ -128,7 +128,7 @@ void AnimationTreeEditor::edit_path(const Vector<String> &p_path) { } } } else { - current_root = 0; + current_root = ObjectID(); edited_path = button_path; } @@ -151,7 +151,7 @@ void AnimationTreeEditor::_about_to_show_root() { void AnimationTreeEditor::_notification(int p_what) { if (p_what == NOTIFICATION_PROCESS) { - ObjectID root = 0; + ObjectID root; if (tree && tree->get_tree_root().is_valid()) { root = tree->get_tree_root()->get_instance_id(); } @@ -242,7 +242,6 @@ AnimationTreeEditor::AnimationTreeEditor() { add_child(memnew(HSeparator)); - current_root = 0; singleton = this; editor_base = memnew(PanelContainer); editor_base->set_v_size_flags(SIZE_EXPAND_FILL); diff --git a/editor/plugins/asset_library_editor_plugin.cpp b/editor/plugins/asset_library_editor_plugin.cpp index d88a716122..01c3c33995 100644 --- a/editor/plugins/asset_library_editor_plugin.cpp +++ b/editor/plugins/asset_library_editor_plugin.cpp @@ -50,7 +50,7 @@ void EditorAssetLibraryItem::configure(const String &p_title, int p_asset_id, co price->set_text(p_cost); } -void EditorAssetLibraryItem::set_image(int p_type, int p_index, const Ref<Texture> &p_image) { +void EditorAssetLibraryItem::set_image(int p_type, int p_index, const Ref<Texture2D> &p_image) { ERR_FAIL_COND(p_type != EditorAssetLibrary::IMAGE_QUEUE_ICON); ERR_FAIL_COND(p_index != 0); @@ -112,7 +112,7 @@ EditorAssetLibraryItem::EditorAssetLibraryItem() { icon = memnew(TextureButton); icon->set_custom_minimum_size(Size2(64, 64) * EDSCALE); icon->set_default_cursor_shape(CURSOR_POINTING_HAND); - icon->connect("pressed", this, "_asset_clicked"); + icon->connect_compat("pressed", this, "_asset_clicked"); hb->add_child(icon); @@ -123,17 +123,17 @@ EditorAssetLibraryItem::EditorAssetLibraryItem() { title = memnew(LinkButton); title->set_underline_mode(LinkButton::UNDERLINE_MODE_ON_HOVER); - title->connect("pressed", this, "_asset_clicked"); + title->connect_compat("pressed", this, "_asset_clicked"); vb->add_child(title); category = memnew(LinkButton); category->set_underline_mode(LinkButton::UNDERLINE_MODE_ON_HOVER); - category->connect("pressed", this, "_category_clicked"); + category->connect_compat("pressed", this, "_category_clicked"); vb->add_child(category); author = memnew(LinkButton); author->set_underline_mode(LinkButton::UNDERLINE_MODE_ON_HOVER); - author->connect("pressed", this, "_author_clicked"); + author->connect_compat("pressed", this, "_author_clicked"); vb->add_child(author); price = memnew(Label); @@ -145,7 +145,7 @@ EditorAssetLibraryItem::EditorAssetLibraryItem() { ////////////////////////////////////////////////////////////////////////////// -void EditorAssetLibraryItemDescription::set_image(int p_type, int p_index, const Ref<Texture> &p_image) { +void EditorAssetLibraryItemDescription::set_image(int p_type, int p_index, const Ref<Texture2D> &p_image) { switch (p_type) { @@ -166,9 +166,8 @@ void EditorAssetLibraryItemDescription::set_image(int p_type, int p_index, const // Overlay and thumbnail need the same format for `blend_rect` to work. thumbnail->convert(Image::FORMAT_RGBA8); - thumbnail->lock(); + thumbnail->blend_rect(overlay, overlay->get_used_rect(), overlay_pos); - thumbnail->unlock(); Ref<ImageTexture> tex; tex.instance(); @@ -264,7 +263,7 @@ void EditorAssetLibraryItemDescription::add_preview(int p_id, bool p_video, cons preview.button->set_flat(true); preview.button->set_icon(get_icon("ThumbnailWait", "EditorIcons")); preview.button->set_toggle_mode(true); - preview.button->connect("pressed", this, "_preview_click", varray(p_id)); + preview.button->connect_compat("pressed", this, "_preview_click", varray(p_id)); preview_hb->add_child(preview.button); if (!p_video) { preview.image = get_icon("ThumbnailWait", "EditorIcons"); @@ -291,7 +290,7 @@ EditorAssetLibraryItemDescription::EditorAssetLibraryItemDescription() { description = memnew(RichTextLabel); desc_vbox->add_child(description); description->set_v_size_flags(SIZE_EXPAND_FILL); - description->connect("meta_clicked", this, "_link_click"); + description->connect_compat("meta_clicked", this, "_link_click"); description->add_constant_override("line_separation", Math::round(5 * EDSCALE)); VBoxContainer *previews_vbox = memnew(VBoxContainer); @@ -322,7 +321,7 @@ EditorAssetLibraryItemDescription::EditorAssetLibraryItemDescription() { } /////////////////////////////////////////////////////////////////////////////////// -void EditorAssetLibraryItemDownload::_http_download_completed(int p_status, int p_code, const PoolStringArray &headers, const PoolByteArray &p_data) { +void EditorAssetLibraryItemDownload::_http_download_completed(int p_status, int p_code, const PackedStringArray &headers, const PackedByteArray &p_data) { String error_text; @@ -393,7 +392,7 @@ void EditorAssetLibraryItemDownload::_http_download_completed(int p_status, int set_process(false); } -void EditorAssetLibraryItemDownload::configure(const String &p_title, int p_asset_id, const Ref<Texture> &p_preview, const String &p_download_url, const String &p_sha256_hash) { +void EditorAssetLibraryItemDownload::configure(const String &p_title, int p_asset_id, const Ref<Texture2D> &p_preview, const String &p_download_url, const String &p_sha256_hash) { title->set_text(p_title); icon->set_texture(p_preview); @@ -527,7 +526,7 @@ EditorAssetLibraryItemDownload::EditorAssetLibraryItemDownload() { title->set_h_size_flags(SIZE_EXPAND_FILL); dismiss = memnew(TextureButton); - dismiss->connect("pressed", this, "_close"); + dismiss->connect_compat("pressed", this, "_close"); title_hb->add_child(dismiss); title->set_clip_text(true); @@ -547,11 +546,11 @@ EditorAssetLibraryItemDownload::EditorAssetLibraryItemDownload() { install = memnew(Button); install->set_text(TTR("Install...")); install->set_disabled(true); - install->connect("pressed", this, "_install"); + install->connect_compat("pressed", this, "_install"); retry = memnew(Button); retry->set_text(TTR("Retry")); - retry->connect("pressed", this, "_make_request"); + retry->connect_compat("pressed", this, "_make_request"); hb2->add_child(retry); hb2->add_child(install); @@ -559,7 +558,7 @@ EditorAssetLibraryItemDownload::EditorAssetLibraryItemDownload() { download = memnew(HTTPRequest); add_child(download); - download->connect("request_completed", this, "_http_download_completed"); + download->connect_compat("request_completed", this, "_http_download_completed"); download->set_use_threads(EDITOR_DEF("asset_library/use_threads", true)); download_error = memnew(AcceptDialog); @@ -568,7 +567,7 @@ EditorAssetLibraryItemDownload::EditorAssetLibraryItemDownload() { asset_installer = memnew(EditorAssetInstaller); add_child(asset_installer); - asset_installer->connect("confirmed", this, "_close"); + asset_installer->connect_compat("confirmed", this, "_close"); prev_status = -1; @@ -658,7 +657,7 @@ void EditorAssetLibrary::_install_asset() { if (templates_only) { download->set_external_install(true); - download->connect("install_asset", this, "_install_external_asset"); + download->connect_compat("install_asset", this, "_install_external_asset"); } } @@ -710,12 +709,12 @@ void EditorAssetLibrary::_select_asset(int p_id) { _api_request("asset/" + itos(p_id), REQUESTING_ASSET); } -void EditorAssetLibrary::_image_update(bool use_cache, bool final, const PoolByteArray &p_data, int p_queue_id) { +void EditorAssetLibrary::_image_update(bool use_cache, bool final, const PackedByteArray &p_data, int p_queue_id) { Object *obj = ObjectDB::get_instance(image_queue[p_queue_id].target); if (obj) { bool image_set = false; - PoolByteArray image_data = p_data; + PackedByteArray image_data = p_data; if (use_cache) { String cache_filename_base = EditorSettings::get_singleton()->get_cache_dir().plus_file("assetimage_" + image_queue[p_queue_id].image_url.md5_text()); @@ -723,12 +722,12 @@ void EditorAssetLibrary::_image_update(bool use_cache, bool final, const PoolByt FileAccess *file = FileAccess::open(cache_filename_base + ".data", FileAccess::READ); if (file) { - PoolByteArray cached_data; + PackedByteArray cached_data; int len = file->get_32(); cached_data.resize(len); - PoolByteArray::Write w = cached_data.write(); - file->get_buffer(w.ptr(), len); + uint8_t *w = cached_data.ptrw(); + file->get_buffer(w, len); image_data = cached_data; file->close(); @@ -737,17 +736,17 @@ void EditorAssetLibrary::_image_update(bool use_cache, bool final, const PoolByt } int len = image_data.size(); - PoolByteArray::Read r = image_data.read(); + const uint8_t *r = image_data.ptr(); Ref<Image> image = Ref<Image>(memnew(Image)); uint8_t png_signature[8] = { 137, 80, 78, 71, 13, 10, 26, 10 }; uint8_t jpg_signature[3] = { 255, 216, 255 }; - if (r.ptr()) { + if (r) { if ((memcmp(&r[0], &png_signature[0], 8) == 0) && Image::_png_mem_loader_func) { - image->copy_internals_from(Image::_png_mem_loader_func(r.ptr(), len)); + image->copy_internals_from(Image::_png_mem_loader_func(r, len)); } else if ((memcmp(&r[0], &jpg_signature[0], 3) == 0) && Image::_jpg_mem_loader_func) { - image->copy_internals_from(Image::_jpg_mem_loader_func(r.ptr(), len)); + image->copy_internals_from(Image::_jpg_mem_loader_func(r, len)); } } @@ -790,7 +789,7 @@ void EditorAssetLibrary::_image_update(bool use_cache, bool final, const PoolByt } } -void EditorAssetLibrary::_image_request_completed(int p_status, int p_code, const PoolStringArray &headers, const PoolByteArray &p_data, int p_queue_id) { +void EditorAssetLibrary::_image_request_completed(int p_status, int p_code, const PackedStringArray &headers, const PackedByteArray &p_data, int p_queue_id) { ERR_FAIL_COND(!image_queue.has(p_queue_id)); @@ -811,11 +810,11 @@ void EditorAssetLibrary::_image_request_completed(int p_status, int p_code, cons } int len = p_data.size(); - PoolByteArray::Read r = p_data.read(); + const uint8_t *r = p_data.ptr(); file = FileAccess::open(cache_filename_base + ".data", FileAccess::WRITE); if (file) { file->store_32(len); - file->store_buffer(r.ptr(), len); + file->store_buffer(r, len); file->close(); memdelete(file); } @@ -893,13 +892,13 @@ void EditorAssetLibrary::_request_image(ObjectID p_for, String p_image_url, Imag iq.queue_id = ++last_queue_id; iq.active = false; - iq.request->connect("request_completed", this, "_image_request_completed", varray(iq.queue_id)); + iq.request->connect_compat("request_completed", this, "_image_request_completed", varray(iq.queue_id)); image_queue[iq.queue_id] = iq; add_child(iq.request); - _image_update(true, false, PoolByteArray(), iq.queue_id); + _image_update(true, false, PackedByteArray(), iq.queue_id); _update_image_queue(); } @@ -992,7 +991,7 @@ HBoxContainer *EditorAssetLibrary::_make_pages(int p_page, int p_page_count, int Button *first = memnew(Button); first->set_text(TTR("First")); if (p_page != 0) { - first->connect("pressed", this, "_search", varray(0)); + first->connect_compat("pressed", this, "_search", varray(0)); } else { first->set_disabled(true); first->set_focus_mode(Control::FOCUS_NONE); @@ -1002,7 +1001,7 @@ HBoxContainer *EditorAssetLibrary::_make_pages(int p_page, int p_page_count, int Button *prev = memnew(Button); prev->set_text(TTR("Previous")); if (p_page > 0) { - prev->connect("pressed", this, "_search", varray(p_page - 1)); + prev->connect_compat("pressed", this, "_search", varray(p_page - 1)); } else { prev->set_disabled(true); prev->set_focus_mode(Control::FOCUS_NONE); @@ -1024,7 +1023,7 @@ HBoxContainer *EditorAssetLibrary::_make_pages(int p_page, int p_page_count, int Button *current = memnew(Button); current->set_text(itos(i + 1)); - current->connect("pressed", this, "_search", varray(i)); + current->connect_compat("pressed", this, "_search", varray(i)); hbc->add_child(current); } @@ -1033,7 +1032,7 @@ HBoxContainer *EditorAssetLibrary::_make_pages(int p_page, int p_page_count, int Button *next = memnew(Button); next->set_text(TTR("Next")); if (p_page < p_page_count - 1) { - next->connect("pressed", this, "_search", varray(p_page + 1)); + next->connect_compat("pressed", this, "_search", varray(p_page + 1)); } else { next->set_disabled(true); next->set_focus_mode(Control::FOCUS_NONE); @@ -1044,7 +1043,7 @@ HBoxContainer *EditorAssetLibrary::_make_pages(int p_page, int p_page_count, int Button *last = memnew(Button); last->set_text(TTR("Last")); if (p_page != p_page_count - 1) { - last->connect("pressed", this, "_search", varray(p_page_count - 1)); + last->connect_compat("pressed", this, "_search", varray(p_page_count - 1)); } else { last->set_disabled(true); last->set_focus_mode(Control::FOCUS_NONE); @@ -1068,14 +1067,14 @@ void EditorAssetLibrary::_api_request(const String &p_request, RequestType p_req request->request(host + "/" + p_request + p_arguments); } -void EditorAssetLibrary::_http_request_completed(int p_status, int p_code, const PoolStringArray &headers, const PoolByteArray &p_data) { +void EditorAssetLibrary::_http_request_completed(int p_status, int p_code, const PackedStringArray &headers, const PackedByteArray &p_data) { String str; { int datalen = p_data.size(); - PoolByteArray::Read r = p_data.read(); - str.parse_utf8((const char *)r.ptr(), datalen); + const uint8_t *r = p_data.ptr(); + str.parse_utf8((const char *)r, datalen); } bool error_abort = true; @@ -1230,9 +1229,9 @@ void EditorAssetLibrary::_http_request_completed(int p_status, int p_code, const EditorAssetLibraryItem *item = memnew(EditorAssetLibraryItem); asset_items->add_child(item); item->configure(r["title"], r["asset_id"], category_map[r["category_id"]], r["category_id"], r["author"], r["author_id"], r["cost"]); - item->connect("asset_selected", this, "_select_asset"); - item->connect("author_selected", this, "_select_author"); - item->connect("category_selected", this, "_select_category"); + item->connect_compat("asset_selected", this, "_select_asset"); + item->connect_compat("author_selected", this, "_select_author"); + item->connect_compat("category_selected", this, "_select_category"); if (r.has("icon_url") && r["icon_url"] != "") { _request_image(item->get_instance_id(), r["icon_url"], IMAGE_QUEUE_ICON, 0); @@ -1263,7 +1262,7 @@ void EditorAssetLibrary::_http_request_completed(int p_status, int p_code, const description = memnew(EditorAssetLibraryItemDescription); add_child(description); description->popup_centered_minsize(); - description->connect("confirmed", this, "_install_asset"); + description->connect_compat("confirmed", this, "_install_asset"); description->configure(r["title"], r["asset_id"], category_map[r["category_id"]], r["category_id"], r["author"], r["author_id"], r["cost"], r["version"], r["version_string"], r["description"], r["download_url"], r["browse_url"], r["download_hash"]); @@ -1375,9 +1374,9 @@ EditorAssetLibrary::EditorAssetLibrary(bool p_templates_only) { filter = memnew(LineEdit); search_hb->add_child(filter); filter->set_h_size_flags(SIZE_EXPAND_FILL); - filter->connect("text_entered", this, "_search_text_entered"); + filter->connect_compat("text_entered", this, "_search_text_entered"); search = memnew(Button(TTR("Search"))); - search->connect("pressed", this, "_search"); + search->connect_compat("pressed", this, "_search"); search_hb->add_child(search); if (!p_templates_only) @@ -1386,12 +1385,12 @@ EditorAssetLibrary::EditorAssetLibrary(bool p_templates_only) { Button *open_asset = memnew(Button); open_asset->set_text(TTR("Import...")); search_hb->add_child(open_asset); - open_asset->connect("pressed", this, "_asset_open"); + open_asset->connect_compat("pressed", this, "_asset_open"); Button *plugins = memnew(Button); plugins->set_text(TTR("Plugins...")); search_hb->add_child(plugins); - plugins->connect("pressed", this, "_manage_plugins"); + plugins->connect_compat("pressed", this, "_manage_plugins"); if (p_templates_only) { open_asset->hide(); @@ -1410,7 +1409,7 @@ EditorAssetLibrary::EditorAssetLibrary(bool p_templates_only) { search_hb2->add_child(sort); sort->set_h_size_flags(SIZE_EXPAND_FILL); - sort->connect("item_selected", this, "_rerun_search"); + sort->connect_compat("item_selected", this, "_rerun_search"); search_hb2->add_child(memnew(VSeparator)); @@ -1419,7 +1418,7 @@ EditorAssetLibrary::EditorAssetLibrary(bool p_templates_only) { categories->add_item(TTR("All")); search_hb2->add_child(categories); categories->set_h_size_flags(SIZE_EXPAND_FILL); - categories->connect("item_selected", this, "_rerun_search"); + categories->connect_compat("item_selected", this, "_rerun_search"); search_hb2->add_child(memnew(VSeparator)); @@ -1431,7 +1430,7 @@ EditorAssetLibrary::EditorAssetLibrary(bool p_templates_only) { repository->add_item("localhost"); repository->set_item_metadata(1, "http://127.0.0.1/asset-library/api"); - repository->connect("item_selected", this, "_repository_changed"); + repository->connect_compat("item_selected", this, "_repository_changed"); search_hb2->add_child(repository); repository->set_h_size_flags(SIZE_EXPAND_FILL); @@ -1446,7 +1445,7 @@ EditorAssetLibrary::EditorAssetLibrary(bool p_templates_only) { support->get_popup()->add_check_item(TTR("Testing"), SUPPORT_TESTING); support->get_popup()->set_item_checked(SUPPORT_OFFICIAL, true); support->get_popup()->set_item_checked(SUPPORT_COMMUNITY, true); - support->get_popup()->connect("id_pressed", this, "_support_toggled"); + support->get_popup()->connect_compat("id_pressed", this, "_support_toggled"); ///////// @@ -1502,7 +1501,7 @@ EditorAssetLibrary::EditorAssetLibrary(bool p_templates_only) { request = memnew(HTTPRequest); add_child(request); request->set_use_threads(EDITOR_DEF("asset_library/use_threads", true)); - request->connect("request_completed", this, "_http_request_completed"); + request->connect_compat("request_completed", this, "_http_request_completed"); last_queue_id = 0; @@ -1535,7 +1534,7 @@ EditorAssetLibrary::EditorAssetLibrary(bool p_templates_only) { asset_open->add_filter("*.zip ; " + TTR("Assets ZIP File")); asset_open->set_mode(EditorFileDialog::MODE_OPEN_FILE); add_child(asset_open); - asset_open->connect("file_selected", this, "_asset_file_selected"); + asset_open->connect_compat("file_selected", this, "_asset_file_selected"); asset_installer = NULL; } diff --git a/editor/plugins/asset_library_editor_plugin.h b/editor/plugins/asset_library_editor_plugin.h index 8852125b8b..536a855d03 100644 --- a/editor/plugins/asset_library_editor_plugin.h +++ b/editor/plugins/asset_library_editor_plugin.h @@ -68,7 +68,7 @@ class EditorAssetLibraryItem : public PanelContainer { void _category_clicked(); void _author_clicked(); - void set_image(int p_type, int p_index, const Ref<Texture> &p_image); + void set_image(int p_type, int p_index, const Ref<Texture2D> &p_image); protected: void _notification(int p_what); @@ -95,19 +95,19 @@ class EditorAssetLibraryItemDescription : public ConfirmationDialog { bool is_video; String video_link; Button *button; - Ref<Texture> image; + Ref<Texture2D> image; }; Vector<Preview> preview_images; TextureRect *preview; - void set_image(int p_type, int p_index, const Ref<Texture> &p_image); + void set_image(int p_type, int p_index, const Ref<Texture2D> &p_image); int asset_id; String download_url; String title; String sha256; - Ref<Texture> icon; + Ref<Texture2D> icon; void _link_click(const String &p_url); void _preview_click(int p_id); @@ -121,7 +121,7 @@ public: void add_preview(int p_id, bool p_video, const String &p_url); String get_title() { return title; } - Ref<Texture> get_preview_icon() { return icon; } + Ref<Texture2D> get_preview_icon() { return icon; } String get_download_url() { return download_url; } int get_asset_id() { return asset_id; } String get_sha256() { return sha256; } @@ -156,7 +156,7 @@ class EditorAssetLibraryItemDownload : public PanelContainer { void _close(); void _install(); void _make_request(); - void _http_download_completed(int p_status, int p_code, const PoolStringArray &headers, const PoolByteArray &p_data); + void _http_download_completed(int p_status, int p_code, const PackedStringArray &headers, const PackedByteArray &p_data); protected: void _notification(int p_what); @@ -165,7 +165,7 @@ protected: public: void set_external_install(bool p_enable) { external_install = p_enable; } int get_asset_id() { return asset_id; } - void configure(const String &p_title, int p_asset_id, const Ref<Texture> &p_preview, const String &p_download_url, const String &p_sha256_hash); + void configure(const String &p_title, int p_asset_id, const Ref<Texture2D> &p_preview, const String &p_download_url, const String &p_sha256_hash); EditorAssetLibraryItemDownload(); }; @@ -250,8 +250,8 @@ class EditorAssetLibrary : public PanelContainer { int last_queue_id; Map<int, ImageQueue> image_queue; - void _image_update(bool use_cache, bool final, const PoolByteArray &p_data, int p_queue_id); - void _image_request_completed(int p_status, int p_code, const PoolStringArray &headers, const PoolByteArray &p_data, int p_queue_id); + void _image_update(bool use_cache, bool final, const PackedByteArray &p_data, int p_queue_id); + void _image_request_completed(int p_status, int p_code, const PackedStringArray &headers, const PackedByteArray &p_data, int p_queue_id); void _request_image(ObjectID p_for, String p_image_url, ImageType p_type, int p_image_index); void _update_image_queue(); @@ -286,8 +286,8 @@ class EditorAssetLibrary : public PanelContainer { void _rerun_search(int p_ignore); void _search_text_entered(const String &p_text = ""); void _api_request(const String &p_request, RequestType p_request_type, const String &p_arguments = ""); - void _http_request_completed(int p_status, int p_code, const PoolStringArray &headers, const PoolByteArray &p_data); - void _http_download_completed(int p_status, int p_code, const PoolStringArray &headers, const PoolByteArray &p_data); + void _http_request_completed(int p_status, int p_code, const PackedStringArray &headers, const PackedByteArray &p_data); + void _http_download_completed(int p_status, int p_code, const PackedStringArray &headers, const PackedByteArray &p_data); void _repository_changed(int p_repository_id); void _support_toggled(int p_support); diff --git a/editor/plugins/audio_stream_editor_plugin.cpp b/editor/plugins/audio_stream_editor_plugin.cpp index 60cb2ff54d..e4a9c38a99 100644 --- a/editor/plugins/audio_stream_editor_plugin.cpp +++ b/editor/plugins/audio_stream_editor_plugin.cpp @@ -39,7 +39,7 @@ void AudioStreamEditor::_notification(int p_what) { if (p_what == NOTIFICATION_READY) { - AudioStreamPreviewGenerator::get_singleton()->connect("preview_updated", this, "_preview_changed"); + AudioStreamPreviewGenerator::get_singleton()->connect_compat("preview_updated", this, "_preview_changed"); } if (p_what == NOTIFICATION_THEME_CHANGED || p_what == NOTIFICATION_ENTER_TREE) { @@ -214,7 +214,7 @@ AudioStreamEditor::AudioStreamEditor() { _dragging = false; _player = memnew(AudioStreamPlayer); - _player->connect("finished", this, "_on_finished"); + _player->connect_compat("finished", this, "_on_finished"); add_child(_player); VBoxContainer *vbox = memnew(VBoxContainer); @@ -223,13 +223,13 @@ AudioStreamEditor::AudioStreamEditor() { _preview = memnew(ColorRect); _preview->set_v_size_flags(SIZE_EXPAND_FILL); - _preview->connect("draw", this, "_draw_preview"); + _preview->connect_compat("draw", this, "_draw_preview"); vbox->add_child(_preview); _indicator = memnew(Control); _indicator->set_anchors_and_margins_preset(PRESET_WIDE); - _indicator->connect("draw", this, "_draw_indicator"); - _indicator->connect("gui_input", this, "_on_input_indicator"); + _indicator->connect_compat("draw", this, "_draw_indicator"); + _indicator->connect_compat("gui_input", this, "_on_input_indicator"); _preview->add_child(_indicator); HBoxContainer *hbox = memnew(HBoxContainer); @@ -239,12 +239,12 @@ AudioStreamEditor::AudioStreamEditor() { _play_button = memnew(ToolButton); hbox->add_child(_play_button); _play_button->set_focus_mode(Control::FOCUS_NONE); - _play_button->connect("pressed", this, "_play"); + _play_button->connect_compat("pressed", this, "_play"); _stop_button = memnew(ToolButton); hbox->add_child(_stop_button); _stop_button->set_focus_mode(Control::FOCUS_NONE); - _stop_button->connect("pressed", this, "_stop"); + _stop_button->connect_compat("pressed", this, "_stop"); _current_label = memnew(Label); _current_label->set_align(Label::ALIGN_RIGHT); diff --git a/editor/plugins/baked_lightmap_editor_plugin.cpp b/editor/plugins/baked_lightmap_editor_plugin.cpp index 7db936ccb8..6bc9562c5a 100644 --- a/editor/plugins/baked_lightmap_editor_plugin.cpp +++ b/editor/plugins/baked_lightmap_editor_plugin.cpp @@ -28,6 +28,7 @@ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /*************************************************************************/ +#if 0 #include "baked_lightmap_editor_plugin.h" void BakedLightmapEditorPlugin::_bake() { @@ -124,3 +125,4 @@ BakedLightmapEditorPlugin::BakedLightmapEditorPlugin(EditorNode *p_node) { BakedLightmapEditorPlugin::~BakedLightmapEditorPlugin() { } +#endif diff --git a/editor/plugins/baked_lightmap_editor_plugin.h b/editor/plugins/baked_lightmap_editor_plugin.h index 8b94257a62..818cdfe8fa 100644 --- a/editor/plugins/baked_lightmap_editor_plugin.h +++ b/editor/plugins/baked_lightmap_editor_plugin.h @@ -28,6 +28,7 @@ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /*************************************************************************/ +#if 0 #ifndef BAKED_LIGHTMAP_EDITOR_PLUGIN_H #define BAKED_LIGHTMAP_EDITOR_PLUGIN_H @@ -67,3 +68,4 @@ public: }; #endif // BAKED_LIGHTMAP_EDITOR_PLUGIN_H +#endif diff --git a/editor/plugins/camera_editor_plugin.cpp b/editor/plugins/camera_editor_plugin.cpp index 6f5bc69bd1..0440785eaf 100644 --- a/editor/plugins/camera_editor_plugin.cpp +++ b/editor/plugins/camera_editor_plugin.cpp @@ -81,7 +81,7 @@ CameraEditor::CameraEditor() { preview->set_margin(MARGIN_RIGHT, 0); preview->set_margin(MARGIN_TOP, 0); preview->set_margin(MARGIN_BOTTOM, 10); - preview->connect("pressed", this, "_pressed"); + preview->connect_compat("pressed", this, "_pressed"); } void CameraEditorPlugin::edit(Object *p_object) { diff --git a/editor/plugins/canvas_item_editor_plugin.cpp b/editor/plugins/canvas_item_editor_plugin.cpp index 054c7741ba..f5cc0ccf2a 100644 --- a/editor/plugins/canvas_item_editor_plugin.cpp +++ b/editor/plugins/canvas_item_editor_plugin.cpp @@ -34,12 +34,12 @@ #include "core/os/keyboard.h" #include "core/print_string.h" #include "core/project_settings.h" +#include "editor/debugger/editor_debugger_node.h" #include "editor/editor_node.h" #include "editor/editor_scale.h" #include "editor/editor_settings.h" #include "editor/plugins/animation_player_editor_plugin.h" #include "editor/plugins/script_editor_plugin.h" -#include "editor/script_editor_debugger.h" #include "scene/2d/light_2d.h" #include "scene/2d/particles_2d.h" #include "scene/2d/polygon_2d.h" @@ -606,7 +606,7 @@ void CanvasItemEditor::_find_canvas_items_at_pos(const Point2 &p_pos, Node *p_no } } -void CanvasItemEditor::_get_canvas_items_at_pos(const Point2 &p_pos, Vector<_SelectResult> &r_items, bool p_ignore_groups) { +void CanvasItemEditor::_get_canvas_items_at_pos(const Point2 &p_pos, Vector<_SelectResult> &r_items, bool p_allow_locked) { Node *scene = editor->get_edited_scene(); @@ -622,7 +622,7 @@ void CanvasItemEditor::_get_canvas_items_at_pos(const Point2 &p_pos, Vector<_Sel }; CanvasItem *canvas_item = Object::cast_to<CanvasItem>(node); - if (!p_ignore_groups) { + if (!p_allow_locked) { // Replace the node by the group if grouped while (node && node != scene->get_parent()) { CanvasItem *canvas_item_tmp = Object::cast_to<CanvasItem>(node); @@ -643,7 +643,7 @@ void CanvasItemEditor::_get_canvas_items_at_pos(const Point2 &p_pos, Vector<_Sel } //Remove the item if invalid - if (!canvas_item || duplicate || (canvas_item != scene && canvas_item->get_owner() != scene && !scene->is_editable_instance(canvas_item->get_owner())) || (tool == TOOL_LIST_SELECT && _is_node_locked(canvas_item))) { + if (!canvas_item || duplicate || (canvas_item != scene && canvas_item->get_owner() != scene && !scene->is_editable_instance(canvas_item->get_owner())) || (!p_allow_locked && _is_node_locked(canvas_item))) { r_items.remove(i); i--; } else { @@ -2108,7 +2108,7 @@ bool CanvasItemEditor::_gui_input_move(const Ref<InputEvent> &p_event) { } // Move the canvas items with the arrow keys - if (k.is_valid() && k->is_pressed() && tool == TOOL_SELECT && + if (k.is_valid() && k->is_pressed() && (tool == TOOL_SELECT || tool == TOOL_MOVE) && (k->get_scancode() == KEY_UP || k->get_scancode() == KEY_DOWN || k->get_scancode() == KEY_LEFT || k->get_scancode() == KEY_RIGHT)) { if (!k->is_echo()) { // Start moving the canvas items with the keyboard @@ -2244,7 +2244,7 @@ bool CanvasItemEditor::_gui_input_select(const Ref<InputEvent> &p_event) { for (int i = 0; i < selection_results.size(); i++) { CanvasItem *item = selection_results[i].item; - Ref<Texture> icon = EditorNode::get_singleton()->get_object_icon(item, "Node"); + Ref<Texture2D> icon = EditorNode::get_singleton()->get_object_icon(item, "Node"); String node_path = "/" + root_name + "/" + root_path.rel_path_to(item->get_path()); int locked = 0; @@ -2859,7 +2859,7 @@ void CanvasItemEditor::_draw_ruler_tool() { bool draw_secondary_lines = !(Math::is_equal_approx(begin.y, corner.y) || Math::is_equal_approx(end.x, corner.x)); - viewport->draw_line(begin, end, ruler_primary_color, Math::round(EDSCALE * 3), true); + viewport->draw_line(begin, end, ruler_primary_color, Math::round(EDSCALE * 3)); if (draw_secondary_lines) { viewport->draw_line(begin, corner, ruler_secondary_color, Math::round(EDSCALE)); viewport->draw_line(corner, end, ruler_secondary_color, Math::round(EDSCALE)); @@ -2966,7 +2966,7 @@ void CanvasItemEditor::_draw_ruler_tool() { } else { if (grid_snap_active) { - Ref<Texture> position_icon = get_icon("EditorPosition", "EditorIcons"); + Ref<Texture2D> position_icon = get_icon("EditorPosition", "EditorIcons"); viewport->draw_texture(get_icon("EditorPosition", "EditorIcons"), (ruler_tool_origin - view_offset) * zoom - position_icon->get_size() / 2); } } @@ -3100,7 +3100,7 @@ void CanvasItemEditor::_draw_control_helpers(Control *control) { case DRAG_TOP_LEFT: case DRAG_BOTTOM_LEFT: _draw_margin_at_position(control->get_size().width, parent_transform.xform(Vector2((node_pos_in_parent[0] + node_pos_in_parent[2]) / 2, node_pos_in_parent[3])) + Vector2(0, 5), MARGIN_BOTTOM); - FALLTHROUGH; + [[fallthrough]]; case DRAG_MOVE: start = Vector2(node_pos_in_parent[0], Math::lerp(node_pos_in_parent[1], node_pos_in_parent[3], ratio)); end = start - Vector2(control->get_margin(MARGIN_LEFT), 0); @@ -3115,7 +3115,7 @@ void CanvasItemEditor::_draw_control_helpers(Control *control) { case DRAG_TOP_RIGHT: case DRAG_BOTTOM_RIGHT: _draw_margin_at_position(control->get_size().width, parent_transform.xform(Vector2((node_pos_in_parent[0] + node_pos_in_parent[2]) / 2, node_pos_in_parent[3])) + Vector2(0, 5), MARGIN_BOTTOM); - FALLTHROUGH; + [[fallthrough]]; case DRAG_MOVE: start = Vector2(node_pos_in_parent[2], Math::lerp(node_pos_in_parent[3], node_pos_in_parent[1], ratio)); end = start - Vector2(control->get_margin(MARGIN_RIGHT), 0); @@ -3130,7 +3130,7 @@ void CanvasItemEditor::_draw_control_helpers(Control *control) { case DRAG_TOP_LEFT: case DRAG_TOP_RIGHT: _draw_margin_at_position(control->get_size().height, parent_transform.xform(Vector2(node_pos_in_parent[2], (node_pos_in_parent[1] + node_pos_in_parent[3]) / 2)) + Vector2(5, 0), MARGIN_RIGHT); - FALLTHROUGH; + [[fallthrough]]; case DRAG_MOVE: start = Vector2(Math::lerp(node_pos_in_parent[0], node_pos_in_parent[2], ratio), node_pos_in_parent[1]); end = start - Vector2(0, control->get_margin(MARGIN_TOP)); @@ -3145,7 +3145,7 @@ void CanvasItemEditor::_draw_control_helpers(Control *control) { case DRAG_BOTTOM_LEFT: case DRAG_BOTTOM_RIGHT: _draw_margin_at_position(control->get_size().height, parent_transform.xform(Vector2(node_pos_in_parent[2], (node_pos_in_parent[1] + node_pos_in_parent[3]) / 2) + Vector2(5, 0)), MARGIN_RIGHT); - FALLTHROUGH; + [[fallthrough]]; case DRAG_MOVE: start = Vector2(Math::lerp(node_pos_in_parent[2], node_pos_in_parent[0], ratio), node_pos_in_parent[3]); end = start - Vector2(0, control->get_margin(MARGIN_BOTTOM)); @@ -3179,9 +3179,9 @@ void CanvasItemEditor::_draw_control_helpers(Control *control) { } void CanvasItemEditor::_draw_selection() { - Ref<Texture> pivot_icon = get_icon("EditorPivot", "EditorIcons"); - Ref<Texture> position_icon = get_icon("EditorPosition", "EditorIcons"); - Ref<Texture> previous_position_icon = get_icon("EditorPositionPrevious", "EditorIcons"); + Ref<Texture2D> pivot_icon = get_icon("EditorPivot", "EditorIcons"); + Ref<Texture2D> position_icon = get_icon("EditorPosition", "EditorIcons"); + Ref<Texture2D> previous_position_icon = get_icon("EditorPositionPrevious", "EditorIcons"); RID ci = viewport->get_canvas_item(); @@ -3210,7 +3210,7 @@ void CanvasItemEditor::_draw_selection() { }; for (int i = 0; i < 4; i++) { - viewport->draw_line(pre_drag_endpoints[i], pre_drag_endpoints[(i + 1) % 4], pre_drag_color, Math::round(2 * EDSCALE), true); + viewport->draw_line(pre_drag_endpoints[i], pre_drag_endpoints[(i + 1) % 4], pre_drag_color, Math::round(2 * EDSCALE)); } } else { viewport->draw_texture(previous_position_icon, (pre_drag_xform.xform(Point2()) - (previous_position_icon->get_size() / 2)).floor()); @@ -3232,7 +3232,7 @@ void CanvasItemEditor::_draw_selection() { Color c = Color(1, 0.6, 0.4, 0.7); for (int i = 0; i < 4; i++) { - viewport->draw_line(endpoints[i], endpoints[(i + 1) % 4], c, Math::round(2 * EDSCALE), true); + viewport->draw_line(endpoints[i], endpoints[(i + 1) % 4], c, Math::round(2 * EDSCALE)); } } else { @@ -3305,7 +3305,7 @@ void CanvasItemEditor::_draw_selection() { points.push_back(Vector2((move_factor.x + 10) * EDSCALE, 0)); viewport->draw_colored_polygon(points, get_color("axis_x_color", "Editor")); - viewport->draw_line(Point2(), Point2(move_factor.x * EDSCALE, 0), get_color("axis_x_color", "Editor"), Math::round(EDSCALE), true); + viewport->draw_line(Point2(), Point2(move_factor.x * EDSCALE, 0), get_color("axis_x_color", "Editor"), Math::round(EDSCALE)); points.clear(); points.push_back(Vector2(5 * EDSCALE, move_factor.y * EDSCALE)); @@ -3313,7 +3313,7 @@ void CanvasItemEditor::_draw_selection() { points.push_back(Vector2(0, (move_factor.y + 10) * EDSCALE)); viewport->draw_colored_polygon(points, get_color("axis_y_color", "Editor")); - viewport->draw_line(Point2(), Point2(0, move_factor.y * EDSCALE), get_color("axis_y_color", "Editor"), Math::round(EDSCALE), true); + viewport->draw_line(Point2(), Point2(0, move_factor.y * EDSCALE), get_color("axis_y_color", "Editor"), Math::round(EDSCALE)); viewport->draw_set_transform_matrix(viewport->get_transform()); } @@ -3344,11 +3344,11 @@ void CanvasItemEditor::_draw_selection() { viewport->draw_set_transform_matrix(simple_xform); Rect2 x_handle_rect = Rect2(scale_factor.x * EDSCALE, -5 * EDSCALE, 10 * EDSCALE, 10 * EDSCALE); viewport->draw_rect(x_handle_rect, get_color("axis_x_color", "Editor")); - viewport->draw_line(Point2(), Point2(scale_factor.x * EDSCALE, 0), get_color("axis_x_color", "Editor"), Math::round(EDSCALE), true); + viewport->draw_line(Point2(), Point2(scale_factor.x * EDSCALE, 0), get_color("axis_x_color", "Editor"), Math::round(EDSCALE)); Rect2 y_handle_rect = Rect2(-5 * EDSCALE, scale_factor.y * EDSCALE, 10 * EDSCALE, 10 * EDSCALE); viewport->draw_rect(y_handle_rect, get_color("axis_y_color", "Editor")); - viewport->draw_line(Point2(), Point2(0, scale_factor.y * EDSCALE), get_color("axis_y_color", "Editor"), Math::round(EDSCALE), true); + viewport->draw_line(Point2(), Point2(0, scale_factor.y * EDSCALE), get_color("axis_y_color", "Editor"), Math::round(EDSCALE)); viewport->draw_set_transform_matrix(viewport->get_transform()); } @@ -3378,8 +3378,7 @@ void CanvasItemEditor::_draw_selection() { transform.xform(drag_rotation_center), transform.xform(drag_to), get_color("accent_color", "Editor") * Color(1, 1, 1, 0.6), - Math::round(2 * EDSCALE), - true); + Math::round(2 * EDSCALE)); } } @@ -3540,7 +3539,7 @@ void CanvasItemEditor::_draw_invisible_nodes_positions(Node *p_node, const Trans Transform2D xform = transform * canvas_xform * parent_xform; // Draw the node's position - Ref<Texture> position_icon = get_icon("EditorPositionUnselected", "EditorIcons"); + Ref<Texture2D> position_icon = get_icon("EditorPositionUnselected", "EditorIcons"); Transform2D unscaled_transform = (xform * canvas_item->get_transform().affine_inverse() * canvas_item->_edit_get_transform()).orthonormalized(); Transform2D simple_xform = viewport->get_transform() * unscaled_transform; viewport->draw_set_transform_matrix(simple_xform); @@ -3554,7 +3553,7 @@ void CanvasItemEditor::_draw_hover() { for (int i = 0; i < hovering_results.size(); i++) { - Ref<Texture> node_icon = hovering_results[i].icon; + Ref<Texture2D> node_icon = hovering_results[i].icon; String node_name = hovering_results[i].name; Ref<Font> font = get_font("font", "Label"); @@ -3608,13 +3607,13 @@ void CanvasItemEditor::_draw_locks_and_groups(Node *p_node, const Transform2D &p if (canvas_item) { float offset = 0; - Ref<Texture> lock = get_icon("LockViewport", "EditorIcons"); + Ref<Texture2D> lock = get_icon("LockViewport", "EditorIcons"); if (p_node->has_meta("_edit_lock_") && show_edit_locks) { lock->draw(viewport_canvas_item, (transform * canvas_xform * parent_xform).xform(Point2(0, 0)) + Point2(offset, 0)); offset += lock->get_size().x; } - Ref<Texture> group = get_icon("GroupViewport", "EditorIcons"); + Ref<Texture2D> group = get_icon("GroupViewport", "EditorIcons"); if (canvas_item->has_meta("_edit_group_") && show_edit_locks) { group->draw(viewport_canvas_item, (transform * canvas_xform * parent_xform).xform(Point2(0, 0)) + Point2(offset, 0)); //offset += group->get_size().x; @@ -3660,7 +3659,7 @@ bool CanvasItemEditor::_build_bones_list(Node *p_node) { // Add a last bone if the Bone2D has no Bone2D child BoneKey bk; bk.from = canvas_item->get_instance_id(); - bk.to = 0; + bk.to = ObjectID(); if (!bone_list.has(bk)) { BoneList b; b.length = 0; @@ -3892,10 +3891,10 @@ void CanvasItemEditor::_notification(int p_what) { select_sb->set_default_margin(Margin(i), 4); } - AnimationPlayerEditor::singleton->get_track_editor()->connect("visibility_changed", this, "_keying_changed"); + AnimationPlayerEditor::singleton->get_track_editor()->connect_compat("visibility_changed", this, "_keying_changed"); _keying_changed(); - get_tree()->connect("node_added", this, "_tree_changed", varray()); - get_tree()->connect("node_removed", this, "_tree_changed", varray()); + get_tree()->connect_compat("node_added", this, "_tree_changed", varray()); + get_tree()->connect_compat("node_removed", this, "_tree_changed", varray()); } else if (p_what == EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED) { @@ -3903,8 +3902,8 @@ void CanvasItemEditor::_notification(int p_what) { } if (p_what == NOTIFICATION_EXIT_TREE) { - get_tree()->disconnect("node_added", this, "_tree_changed"); - get_tree()->disconnect("node_removed", this, "_tree_changed"); + get_tree()->disconnect_compat("node_added", this, "_tree_changed"); + get_tree()->disconnect_compat("node_removed", this, "_tree_changed"); } if (p_what == NOTIFICATION_ENTER_TREE || p_what == EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED) { @@ -3991,7 +3990,7 @@ void CanvasItemEditor::_notification(int p_what) { if (p_what == NOTIFICATION_VISIBILITY_CHANGED) { if (!is_visible() && override_camera_button->is_pressed()) { - ScriptEditorDebugger *debugger = ScriptEditor::get_singleton()->get_debugger(); + EditorDebuggerNode *debugger = EditorDebuggerNode::get_singleton(); debugger->set_camera_override(ScriptEditorDebugger::OVERRIDE_NONE); override_camera_button->set_pressed(false); @@ -4182,7 +4181,7 @@ void CanvasItemEditor::_popup_warning_temporarily(Control *p_control, const floa Timer *timer; if (!popup_temporarily_timers.has(p_control)) { timer = memnew(Timer); - timer->connect("timeout", this, "_popup_warning_depop", varray(p_control)); + timer->connect_compat("timeout", this, "_popup_warning_depop", varray(p_control)); timer->set_one_shot(true); add_child(timer); @@ -4346,7 +4345,7 @@ void CanvasItemEditor::_button_toggle_grid_snap(bool p_status) { viewport->update(); } void CanvasItemEditor::_button_override_camera(bool p_pressed) { - ScriptEditorDebugger *debugger = ScriptEditor::get_singleton()->get_debugger(); + EditorDebuggerNode *debugger = EditorDebuggerNode::get_singleton(); if (p_pressed) { debugger->set_camera_override(ScriptEditorDebugger::OVERRIDE_2D); @@ -5411,11 +5410,11 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { editor = p_editor; editor_selection = p_editor->get_editor_selection(); editor_selection->add_editor_plugin(this); - editor_selection->connect("selection_changed", this, "update"); - editor_selection->connect("selection_changed", this, "_selection_changed"); + editor_selection->connect_compat("selection_changed", this, "update"); + editor_selection->connect_compat("selection_changed", this, "_selection_changed"); - editor->call_deferred("connect", "play_pressed", this, "_update_override_camera_button", make_binds(true)); - editor->call_deferred("connect", "stop_pressed", this, "_update_override_camera_button", make_binds(false)); + editor->call_deferred("connect", make_binds("play_pressed", Callable(this, "_update_override_camera_button"), true)); + editor->call_deferred("connect", make_binds("stop_pressed", Callable(this, "_update_override_camera_button"), false)); hb = memnew(HBoxContainer); add_child(hb); @@ -5435,7 +5434,7 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { viewport_scrollable->set_clip_contents(true); viewport_scrollable->set_v_size_flags(SIZE_EXPAND_FILL); viewport_scrollable->set_h_size_flags(SIZE_EXPAND_FILL); - viewport_scrollable->connect("draw", this, "_update_scrollbars"); + viewport_scrollable->connect_compat("draw", this, "_update_scrollbars"); ViewportContainer *scene_tree = memnew(ViewportContainer); viewport_scrollable->add_child(scene_tree); @@ -5457,8 +5456,8 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { viewport->set_anchors_and_margins_preset(Control::PRESET_WIDE); viewport->set_clip_contents(true); viewport->set_focus_mode(FOCUS_ALL); - viewport->connect("draw", this, "_draw_viewport"); - viewport->connect("gui_input", this, "_gui_input_viewport"); + viewport->connect_compat("draw", this, "_draw_viewport"); + viewport->connect_compat("gui_input", this, "_gui_input_viewport"); info_overlay = memnew(VBoxContainer); info_overlay->set_anchors_and_margins_preset(Control::PRESET_BOTTOM_LEFT); @@ -5486,25 +5485,25 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { h_scroll = memnew(HScrollBar); viewport->add_child(h_scroll); - h_scroll->connect("value_changed", this, "_update_scroll"); + h_scroll->connect_compat("value_changed", this, "_update_scroll"); h_scroll->hide(); v_scroll = memnew(VScrollBar); viewport->add_child(v_scroll); - v_scroll->connect("value_changed", this, "_update_scroll"); + v_scroll->connect_compat("value_changed", this, "_update_scroll"); v_scroll->hide(); viewport->add_child(controls_vb); zoom_minus = memnew(ToolButton); zoom_hb->add_child(zoom_minus); - zoom_minus->connect("pressed", this, "_button_zoom_minus"); + zoom_minus->connect_compat("pressed", this, "_button_zoom_minus"); zoom_minus->set_shortcut(ED_SHORTCUT("canvas_item_editor/zoom_minus", TTR("Zoom Out"), KEY_MASK_CMD | KEY_MINUS)); zoom_minus->set_focus_mode(FOCUS_NONE); zoom_reset = memnew(ToolButton); zoom_hb->add_child(zoom_reset); - zoom_reset->connect("pressed", this, "_button_zoom_reset"); + zoom_reset->connect_compat("pressed", this, "_button_zoom_reset"); zoom_reset->set_shortcut(ED_SHORTCUT("canvas_item_editor/zoom_reset", TTR("Zoom Reset"), KEY_MASK_CMD | KEY_0)); zoom_reset->set_focus_mode(FOCUS_NONE); zoom_reset->set_text_align(Button::TextAlign::ALIGN_CENTER); @@ -5513,7 +5512,7 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { zoom_plus = memnew(ToolButton); zoom_hb->add_child(zoom_plus); - zoom_plus->connect("pressed", this, "_button_zoom_plus"); + zoom_plus->connect_compat("pressed", this, "_button_zoom_plus"); zoom_plus->set_shortcut(ED_SHORTCUT("canvas_item_editor/zoom_plus", TTR("Zoom In"), KEY_MASK_CMD | KEY_EQUAL)); // Usually direct access key for PLUS zoom_plus->set_focus_mode(FOCUS_NONE); @@ -5522,7 +5521,7 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { select_button = memnew(ToolButton); hb->add_child(select_button); select_button->set_toggle_mode(true); - select_button->connect("pressed", this, "_button_tool_select", make_binds(TOOL_SELECT)); + select_button->connect_compat("pressed", this, "_button_tool_select", make_binds(TOOL_SELECT)); select_button->set_pressed(true); select_button->set_shortcut(ED_SHORTCUT("canvas_item_editor/select_mode", TTR("Select Mode"), KEY_Q)); select_button->set_tooltip(keycode_get_string(KEY_MASK_CMD) + TTR("Drag: Rotate") + "\n" + TTR("Alt+Drag: Move") + "\n" + TTR("Press 'v' to Change Pivot, 'Shift+v' to Drag Pivot (while moving).") + "\n" + TTR("Alt+RMB: Depth list selection")); @@ -5532,21 +5531,21 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { move_button = memnew(ToolButton); hb->add_child(move_button); move_button->set_toggle_mode(true); - move_button->connect("pressed", this, "_button_tool_select", make_binds(TOOL_MOVE)); + move_button->connect_compat("pressed", this, "_button_tool_select", make_binds(TOOL_MOVE)); move_button->set_shortcut(ED_SHORTCUT("canvas_item_editor/move_mode", TTR("Move Mode"), KEY_W)); move_button->set_tooltip(TTR("Move Mode")); rotate_button = memnew(ToolButton); hb->add_child(rotate_button); rotate_button->set_toggle_mode(true); - rotate_button->connect("pressed", this, "_button_tool_select", make_binds(TOOL_ROTATE)); + rotate_button->connect_compat("pressed", this, "_button_tool_select", make_binds(TOOL_ROTATE)); rotate_button->set_shortcut(ED_SHORTCUT("canvas_item_editor/rotate_mode", TTR("Rotate Mode"), KEY_E)); rotate_button->set_tooltip(TTR("Rotate Mode")); scale_button = memnew(ToolButton); hb->add_child(scale_button); scale_button->set_toggle_mode(true); - scale_button->connect("pressed", this, "_button_tool_select", make_binds(TOOL_SCALE)); + scale_button->connect_compat("pressed", this, "_button_tool_select", make_binds(TOOL_SCALE)); scale_button->set_shortcut(ED_SHORTCUT("canvas_item_editor/scale_mode", TTR("Scale Mode"), KEY_S)); scale_button->set_tooltip(TTR("Scale Mode")); @@ -5555,25 +5554,25 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { list_select_button = memnew(ToolButton); hb->add_child(list_select_button); list_select_button->set_toggle_mode(true); - list_select_button->connect("pressed", this, "_button_tool_select", make_binds(TOOL_LIST_SELECT)); + list_select_button->connect_compat("pressed", this, "_button_tool_select", make_binds(TOOL_LIST_SELECT)); list_select_button->set_tooltip(TTR("Show a list of all objects at the position clicked\n(same as Alt+RMB in select mode).")); pivot_button = memnew(ToolButton); hb->add_child(pivot_button); pivot_button->set_toggle_mode(true); - pivot_button->connect("pressed", this, "_button_tool_select", make_binds(TOOL_EDIT_PIVOT)); + pivot_button->connect_compat("pressed", this, "_button_tool_select", make_binds(TOOL_EDIT_PIVOT)); pivot_button->set_tooltip(TTR("Click to change object's rotation pivot.")); pan_button = memnew(ToolButton); hb->add_child(pan_button); pan_button->set_toggle_mode(true); - pan_button->connect("pressed", this, "_button_tool_select", make_binds(TOOL_PAN)); + pan_button->connect_compat("pressed", this, "_button_tool_select", make_binds(TOOL_PAN)); pan_button->set_tooltip(TTR("Pan Mode")); ruler_button = memnew(ToolButton); hb->add_child(ruler_button); ruler_button->set_toggle_mode(true); - ruler_button->connect("pressed", this, "_button_tool_select", make_binds(TOOL_RULER)); + ruler_button->connect_compat("pressed", this, "_button_tool_select", make_binds(TOOL_RULER)); ruler_button->set_shortcut(ED_SHORTCUT("canvas_item_editor/ruler_mode", TTR("Ruler Mode"), KEY_R)); ruler_button->set_tooltip(TTR("Ruler Mode")); @@ -5582,14 +5581,14 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { smart_snap_button = memnew(ToolButton); hb->add_child(smart_snap_button); smart_snap_button->set_toggle_mode(true); - smart_snap_button->connect("toggled", this, "_button_toggle_smart_snap"); + smart_snap_button->connect_compat("toggled", this, "_button_toggle_smart_snap"); smart_snap_button->set_tooltip(TTR("Toggle smart snapping.")); smart_snap_button->set_shortcut(ED_SHORTCUT("canvas_item_editor/use_smart_snap", TTR("Use Smart Snap"), KEY_MASK_SHIFT | KEY_S)); grid_snap_button = memnew(ToolButton); hb->add_child(grid_snap_button); grid_snap_button->set_toggle_mode(true); - grid_snap_button->connect("toggled", this, "_button_toggle_grid_snap"); + grid_snap_button->connect_compat("toggled", this, "_button_toggle_grid_snap"); grid_snap_button->set_tooltip(TTR("Toggle grid snapping.")); grid_snap_button->set_shortcut(ED_SHORTCUT("canvas_item_editor/use_grid_snap", TTR("Use Grid Snap"), KEY_MASK_SHIFT | KEY_G)); @@ -5600,7 +5599,7 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { snap_config_menu->set_switch_on_hover(true); PopupMenu *p = snap_config_menu->get_popup(); - p->connect("id_pressed", this, "_popup_callback"); + p->connect_compat("id_pressed", this, "_popup_callback"); p->set_hide_on_checkable_item_selection(false); p->add_check_shortcut(ED_SHORTCUT("canvas_item_editor/use_rotation_snap", TTR("Use Rotation Snap")), SNAP_USE_ROTATION); p->add_check_shortcut(ED_SHORTCUT("canvas_item_editor/use_scale_snap", TTR("Use Scale Snap")), SNAP_USE_SCALE); @@ -5614,7 +5613,7 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { smartsnap_config_popup = memnew(PopupMenu); p->add_child(smartsnap_config_popup); smartsnap_config_popup->set_name("SmartSnapping"); - smartsnap_config_popup->connect("id_pressed", this, "_popup_callback"); + smartsnap_config_popup->connect_compat("id_pressed", this, "_popup_callback"); smartsnap_config_popup->set_hide_on_checkable_item_selection(false); smartsnap_config_popup->add_check_shortcut(ED_SHORTCUT("canvas_item_editor/snap_node_parent", TTR("Snap to Parent")), SNAP_USE_NODE_PARENT); smartsnap_config_popup->add_check_shortcut(ED_SHORTCUT("canvas_item_editor/snap_node_anchors", TTR("Snap to Node Anchor")), SNAP_USE_NODE_ANCHORS); @@ -5628,22 +5627,22 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { lock_button = memnew(ToolButton); hb->add_child(lock_button); - lock_button->connect("pressed", this, "_popup_callback", varray(LOCK_SELECTED)); + lock_button->connect_compat("pressed", this, "_popup_callback", varray(LOCK_SELECTED)); lock_button->set_tooltip(TTR("Lock the selected object in place (can't be moved).")); unlock_button = memnew(ToolButton); hb->add_child(unlock_button); - unlock_button->connect("pressed", this, "_popup_callback", varray(UNLOCK_SELECTED)); + unlock_button->connect_compat("pressed", this, "_popup_callback", varray(UNLOCK_SELECTED)); unlock_button->set_tooltip(TTR("Unlock the selected object (can be moved).")); group_button = memnew(ToolButton); hb->add_child(group_button); - group_button->connect("pressed", this, "_popup_callback", varray(GROUP_SELECTED)); + group_button->connect_compat("pressed", this, "_popup_callback", varray(GROUP_SELECTED)); group_button->set_tooltip(TTR("Makes sure the object's children are not selectable.")); ungroup_button = memnew(ToolButton); hb->add_child(ungroup_button); - ungroup_button->connect("pressed", this, "_popup_callback", varray(UNGROUP_SELECTED)); + ungroup_button->connect_compat("pressed", this, "_popup_callback", varray(UNGROUP_SELECTED)); ungroup_button->set_tooltip(TTR("Restores the object's children's ability to be selected.")); hb->add_child(memnew(VSeparator)); @@ -5662,13 +5661,13 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { p->add_separator(); p->add_shortcut(ED_SHORTCUT("canvas_item_editor/skeleton_make_bones", TTR("Make Custom Bone(s) from Node(s)"), KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_B), SKELETON_MAKE_BONES); p->add_shortcut(ED_SHORTCUT("canvas_item_editor/skeleton_clear_bones", TTR("Clear Custom Bones")), SKELETON_CLEAR_BONES); - p->connect("id_pressed", this, "_popup_callback"); + p->connect_compat("id_pressed", this, "_popup_callback"); hb->add_child(memnew(VSeparator)); override_camera_button = memnew(ToolButton); hb->add_child(override_camera_button); - override_camera_button->connect("toggled", this, "_button_override_camera"); + override_camera_button->connect_compat("toggled", this, "_button_override_camera"); override_camera_button->set_toggle_mode(true); override_camera_button->set_disabled(true); _update_override_camera_button(false); @@ -5678,7 +5677,7 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { view_menu = memnew(MenuButton); view_menu->set_text(TTR("View")); hb->add_child(view_menu); - view_menu->get_popup()->connect("id_pressed", this, "_popup_callback"); + view_menu->get_popup()->connect_compat("id_pressed", this, "_popup_callback"); view_menu->set_switch_on_hover(true); p = view_menu->get_popup(); @@ -5706,18 +5705,18 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { presets_menu->set_switch_on_hover(true); p = presets_menu->get_popup(); - p->connect("id_pressed", this, "_popup_callback"); + p->connect_compat("id_pressed", this, "_popup_callback"); anchors_popup = memnew(PopupMenu); p->add_child(anchors_popup); anchors_popup->set_name("Anchors"); - anchors_popup->connect("id_pressed", this, "_popup_callback"); + anchors_popup->connect_compat("id_pressed", this, "_popup_callback"); anchor_mode_button = memnew(ToolButton); hb->add_child(anchor_mode_button); anchor_mode_button->set_toggle_mode(true); anchor_mode_button->hide(); - anchor_mode_button->connect("toggled", this, "_button_toggle_anchor_mode"); + anchor_mode_button->connect_compat("toggled", this, "_button_toggle_anchor_mode"); animation_hb = memnew(HBoxContainer); hb->add_child(animation_hb); @@ -5729,7 +5728,7 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { key_loc_button->set_flat(true); key_loc_button->set_pressed(true); key_loc_button->set_focus_mode(FOCUS_NONE); - key_loc_button->connect("pressed", this, "_popup_callback", varray(ANIM_INSERT_POS)); + key_loc_button->connect_compat("pressed", this, "_popup_callback", varray(ANIM_INSERT_POS)); key_loc_button->set_tooltip(TTR("Translation mask for inserting keys.")); animation_hb->add_child(key_loc_button); key_rot_button = memnew(Button); @@ -5737,20 +5736,20 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { key_rot_button->set_flat(true); key_rot_button->set_pressed(true); key_rot_button->set_focus_mode(FOCUS_NONE); - key_rot_button->connect("pressed", this, "_popup_callback", varray(ANIM_INSERT_ROT)); + key_rot_button->connect_compat("pressed", this, "_popup_callback", varray(ANIM_INSERT_ROT)); key_rot_button->set_tooltip(TTR("Rotation mask for inserting keys.")); animation_hb->add_child(key_rot_button); key_scale_button = memnew(Button); key_scale_button->set_toggle_mode(true); key_scale_button->set_flat(true); key_scale_button->set_focus_mode(FOCUS_NONE); - key_scale_button->connect("pressed", this, "_popup_callback", varray(ANIM_INSERT_SCALE)); + key_scale_button->connect_compat("pressed", this, "_popup_callback", varray(ANIM_INSERT_SCALE)); key_scale_button->set_tooltip(TTR("Scale mask for inserting keys.")); animation_hb->add_child(key_scale_button); key_insert_button = memnew(Button); key_insert_button->set_flat(true); key_insert_button->set_focus_mode(FOCUS_NONE); - key_insert_button->connect("pressed", this, "_popup_callback", varray(ANIM_INSERT_KEY)); + key_insert_button->connect_compat("pressed", this, "_popup_callback", varray(ANIM_INSERT_KEY)); key_insert_button->set_tooltip(TTR("Insert keys (based on mask).")); key_insert_button->set_shortcut(ED_SHORTCUT("canvas_item_editor/anim_insert_key", TTR("Insert Key"), KEY_INSERT)); animation_hb->add_child(key_insert_button); @@ -5766,7 +5765,7 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { animation_menu = memnew(MenuButton); animation_menu->set_tooltip(TTR("Animation Key and Pose Options")); animation_hb->add_child(animation_menu); - animation_menu->get_popup()->connect("id_pressed", this, "_popup_callback"); + animation_menu->get_popup()->connect_compat("id_pressed", this, "_popup_callback"); animation_menu->set_switch_on_hover(true); p = animation_menu->get_popup(); @@ -5779,7 +5778,7 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { p->add_shortcut(ED_SHORTCUT("canvas_item_editor/anim_clear_pose", TTR("Clear Pose"), KEY_MASK_SHIFT | KEY_K), ANIM_CLEAR_POSE); snap_dialog = memnew(SnapDialog); - snap_dialog->connect("confirmed", this, "_snap_changed"); + snap_dialog->connect_compat("confirmed", this, "_snap_changed"); add_child(snap_dialog); select_sb = Ref<StyleBoxTexture>(memnew(StyleBoxTexture)); @@ -5787,8 +5786,8 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { selection_menu = memnew(PopupMenu); add_child(selection_menu); selection_menu->set_custom_minimum_size(Vector2(100, 0)); - selection_menu->connect("id_pressed", this, "_selection_result_pressed"); - selection_menu->connect("popup_hide", this, "_selection_menu_hide"); + selection_menu->connect_compat("id_pressed", this, "_selection_result_pressed"); + selection_menu->connect_compat("popup_hide", this, "_selection_menu_hide"); multiply_grid_step_shortcut = ED_SHORTCUT("canvas_item_editor/multiply_grid_step", TTR("Multiply grid step by 2"), KEY_KP_MULTIPLY); divide_grid_step_shortcut = ED_SHORTCUT("canvas_item_editor/divide_grid_step", TTR("Divide grid step by 2"), KEY_KP_DIVIDE); @@ -5887,7 +5886,7 @@ void CanvasItemEditorViewport::_create_preview(const Vector<String> &files) cons String path = files[i]; RES res = ResourceLoader::load(path); ERR_FAIL_COND(res.is_null()); - Ref<Texture> texture = Ref<Texture>(Object::cast_to<Texture>(*res)); + Ref<Texture2D> texture = Ref<Texture2D>(Object::cast_to<Texture2D>(*res)); Ref<PackedScene> scene = Ref<PackedScene>(Object::cast_to<PackedScene>(*res)); if (texture != NULL || scene != NULL) { if (texture != NULL) { @@ -5944,7 +5943,7 @@ bool CanvasItemEditorViewport::_cyclical_dependency_exists(const String &p_targe void CanvasItemEditorViewport::_create_nodes(Node *parent, Node *child, String &path, const Point2 &p_point) { child->set_name(path.get_file().get_basename()); - Ref<Texture> texture = Ref<Texture>(Object::cast_to<Texture>(ResourceCache::get(path))); + Ref<Texture2D> texture = Ref<Texture2D>(Object::cast_to<Texture2D>(ResourceCache::get(path))); Size2 texture_size = texture->get_size(); if (parent) { @@ -5961,9 +5960,9 @@ void CanvasItemEditorViewport::_create_nodes(Node *parent, Node *child, String & if (parent) { String new_name = parent->validate_child_name(child); - ScriptEditorDebugger *sed = ScriptEditor::get_singleton()->get_debugger(); - editor_data->get_undo_redo().add_do_method(sed, "live_debug_create_node", editor->get_edited_scene()->get_path_to(parent), child->get_class(), new_name); - editor_data->get_undo_redo().add_undo_method(sed, "live_debug_remove_node", NodePath(String(editor->get_edited_scene()->get_path_to(parent)) + "/" + new_name)); + EditorDebuggerNode *ed = EditorDebuggerNode::get_singleton(); + editor_data->get_undo_redo().add_do_method(ed, "live_debug_create_node", editor->get_edited_scene()->get_path_to(parent), child->get_class(), new_name); + editor_data->get_undo_redo().add_undo_method(ed, "live_debug_remove_node", NodePath(String(editor->get_edited_scene()->get_path_to(parent)) + "/" + new_name)); } // handle with different property for texture @@ -5988,7 +5987,7 @@ void CanvasItemEditorViewport::_create_nodes(Node *parent, Node *child, String & if (default_type == "NinePatchRect") { editor_data->get_undo_redo().add_do_property(child, "rect/size", texture_size); } else if (default_type == "Polygon2D") { - PoolVector<Vector2> list; + Vector<Vector2> list; list.push_back(Vector2(0, 0)); list.push_back(Vector2(texture_size.width, 0)); list.push_back(Vector2(texture_size.width, texture_size.height)); @@ -6031,9 +6030,9 @@ bool CanvasItemEditorViewport::_create_instance(Node *parent, String &path, cons editor_data->get_undo_redo().add_undo_method(parent, "remove_child", instanced_scene); String new_name = parent->validate_child_name(instanced_scene); - ScriptEditorDebugger *sed = ScriptEditor::get_singleton()->get_debugger(); - editor_data->get_undo_redo().add_do_method(sed, "live_debug_instance_node", editor->get_edited_scene()->get_path_to(parent), path, new_name); - editor_data->get_undo_redo().add_undo_method(sed, "live_debug_remove_node", NodePath(String(editor->get_edited_scene()->get_path_to(parent)) + "/" + new_name)); + EditorDebuggerNode *ed = EditorDebuggerNode::get_singleton(); + editor_data->get_undo_redo().add_do_method(ed, "live_debug_instance_node", editor->get_edited_scene()->get_path_to(parent), path, new_name); + editor_data->get_undo_redo().add_undo_method(ed, "live_debug_remove_node", NodePath(String(editor->get_edited_scene()->get_path_to(parent)) + "/" + new_name)); CanvasItem *parent_ci = Object::cast_to<CanvasItem>(parent); if (parent_ci) { @@ -6081,7 +6080,7 @@ void CanvasItemEditorViewport::_perform_drop_data() { } } } else { - Ref<Texture> texture = Ref<Texture>(Object::cast_to<Texture>(*res)); + Ref<Texture2D> texture = Ref<Texture2D>(Object::cast_to<Texture2D>(*res)); if (texture != NULL && texture.is_valid()) { Node *child; if (default_type == "Light2D") @@ -6136,7 +6135,7 @@ bool CanvasItemEditorViewport::can_drop_data(const Point2 &p_point, const Varian continue; } memdelete(instanced_scene); - } else if (type == "Texture" || + } else if (type == "Texture2D" || type == "ImageTexture" || type == "ViewportTexture" || type == "CurveTexture" || @@ -6144,7 +6143,7 @@ bool CanvasItemEditorViewport::can_drop_data(const Point2 &p_point, const Varian type == "StreamTexture" || type == "AtlasTexture" || type == "LargeTexture") { - Ref<Texture> texture = Ref<Texture>(Object::cast_to<Texture>(*res)); + Ref<Texture2D> texture = Ref<Texture2D>(Object::cast_to<Texture2D>(*res)); if (!texture.is_valid()) { continue; } @@ -6235,11 +6234,11 @@ void CanvasItemEditorViewport::drop_data(const Point2 &p_point, const Variant &p void CanvasItemEditorViewport::_notification(int p_what) { switch (p_what) { case NOTIFICATION_ENTER_TREE: { - connect("mouse_exited", this, "_on_mouse_exit"); + connect_compat("mouse_exited", this, "_on_mouse_exit"); label->add_color_override("font_color", get_color("warning_color", "Editor")); } break; case NOTIFICATION_EXIT_TREE: { - disconnect("mouse_exited", this, "_on_mouse_exit"); + disconnect_compat("mouse_exited", this, "_on_mouse_exit"); } break; default: break; @@ -6277,8 +6276,8 @@ CanvasItemEditorViewport::CanvasItemEditorViewport(EditorNode *p_node, CanvasIte selector = memnew(AcceptDialog); editor->get_gui_base()->add_child(selector); selector->set_title(TTR("Change Default Type")); - selector->connect("confirmed", this, "_on_change_type_confirmed"); - selector->connect("popup_hide", this, "_on_change_type_closed"); + selector->connect_compat("confirmed", this, "_on_change_type_confirmed"); + selector->connect_compat("popup_hide", this, "_on_change_type_closed"); VBoxContainer *vbc = memnew(VBoxContainer); selector->add_child(vbc); @@ -6295,7 +6294,7 @@ CanvasItemEditorViewport::CanvasItemEditorViewport(EditorNode *p_node, CanvasIte CheckBox *check = memnew(CheckBox); btn_group->add_child(check); check->set_text(types[i]); - check->connect("button_down", this, "_on_select_type", varray(check)); + check->connect_compat("button_down", this, "_on_select_type", varray(check)); check->set_button_group(button_group); } diff --git a/editor/plugins/canvas_item_editor_plugin.h b/editor/plugins/canvas_item_editor_plugin.h index 0ee155dfd0..3c4cacf5c8 100644 --- a/editor/plugins/canvas_item_editor_plugin.h +++ b/editor/plugins/canvas_item_editor_plugin.h @@ -306,7 +306,7 @@ private: struct _HoverResult { Point2 position; - Ref<Texture> icon; + Ref<Texture2D> icon; String name; }; Vector<_HoverResult> hovering_results; @@ -406,8 +406,8 @@ private: Point2 box_selecting_to; Ref<StyleBoxTexture> select_sb; - Ref<Texture> select_handle; - Ref<Texture> anchor_handle; + Ref<Texture2D> select_handle; + Ref<Texture2D> anchor_handle; Ref<ShortCut> drag_pivot_shortcut; Ref<ShortCut> set_pivot_shortcut; @@ -418,7 +418,7 @@ private: bool _is_node_locked(const Node *p_node); bool _is_node_movable(const Node *p_node, bool p_popup_warning = false); void _find_canvas_items_at_pos(const Point2 &p_pos, Node *p_node, Vector<_SelectResult> &r_items, const Transform2D &p_parent_xform = Transform2D(), const Transform2D &p_canvas_xform = Transform2D()); - void _get_canvas_items_at_pos(const Point2 &p_pos, Vector<_SelectResult> &r_items, bool p_ignore_groups = false); + void _get_canvas_items_at_pos(const Point2 &p_pos, Vector<_SelectResult> &r_items, bool p_allow_locked = false); void _get_bones_at_pos(const Point2 &p_pos, Vector<_SelectResult> &r_items); void _find_canvas_items_in_rect(const Rect2 &p_rect, Node *p_node, List<CanvasItem *> *r_items, const Transform2D &p_parent_xform = Transform2D(), const Transform2D &p_canvas_xform = Transform2D()); diff --git a/editor/plugins/collision_polygon_editor_plugin.cpp b/editor/plugins/collision_polygon_editor_plugin.cpp index 8620437ac6..59bbe031ed 100644 --- a/editor/plugins/collision_polygon_editor_plugin.cpp +++ b/editor/plugins/collision_polygon_editor_plugin.cpp @@ -47,7 +47,7 @@ void Polygon3DEditor::_notification(int p_what) { button_create->set_icon(get_icon("Edit", "EditorIcons")); button_edit->set_icon(get_icon("MovePoint", "EditorIcons")); button_edit->set_pressed(true); - get_tree()->connect("node_removed", this, "_node_removed"); + get_tree()->connect_compat("node_removed", this, "_node_removed"); } break; case NOTIFICATION_PROCESS: { @@ -384,7 +384,7 @@ void Polygon3DEditor::_polygon_draw() { imgeom->clear(); imgeom->set_material_override(line_material); - imgeom->begin(Mesh::PRIMITIVE_LINES, Ref<Texture>()); + imgeom->begin(Mesh::PRIMITIVE_LINES, Ref<Texture2D>()); Rect2 rect; @@ -463,20 +463,18 @@ void Polygon3DEditor::_polygon_draw() { imgeom->end(); - while (m->get_surface_count()) { - m->surface_remove(0); - } + m->clear_surfaces(); if (poly.size() == 0) return; Array a; a.resize(Mesh::ARRAY_MAX); - PoolVector<Vector3> va; + Vector<Vector3> va; { va.resize(poly.size()); - PoolVector<Vector3>::Write w = va.write(); + Vector3 *w = va.ptrw(); for (int i = 0; i < poly.size(); i++) { Vector2 p, p2; @@ -534,12 +532,12 @@ Polygon3DEditor::Polygon3DEditor(EditorNode *p_editor) { add_child(memnew(VSeparator)); button_create = memnew(ToolButton); add_child(button_create); - button_create->connect("pressed", this, "_menu_option", varray(MODE_CREATE)); + button_create->connect_compat("pressed", this, "_menu_option", varray(MODE_CREATE)); button_create->set_toggle_mode(true); button_edit = memnew(ToolButton); add_child(button_edit); - button_edit->connect("pressed", this, "_menu_option", varray(MODE_EDIT)); + button_edit->connect_compat("pressed", this, "_menu_option", varray(MODE_EDIT)); button_edit->set_toggle_mode(true); mode = MODE_EDIT; @@ -547,23 +545,22 @@ Polygon3DEditor::Polygon3DEditor(EditorNode *p_editor) { imgeom = memnew(ImmediateGeometry); imgeom->set_transform(Transform(Basis(), Vector3(0, 0, 0.00001))); - line_material = Ref<SpatialMaterial>(memnew(SpatialMaterial)); - line_material->set_flag(SpatialMaterial::FLAG_UNSHADED, true); - line_material->set_line_width(3.0); - line_material->set_feature(SpatialMaterial::FEATURE_TRANSPARENT, true); - line_material->set_flag(SpatialMaterial::FLAG_ALBEDO_FROM_VERTEX_COLOR, true); - line_material->set_flag(SpatialMaterial::FLAG_SRGB_VERTEX_COLOR, true); + line_material = Ref<StandardMaterial3D>(memnew(StandardMaterial3D)); + line_material->set_shading_mode(StandardMaterial3D::SHADING_MODE_UNSHADED); + line_material->set_transparency(StandardMaterial3D::TRANSPARENCY_ALPHA); + line_material->set_flag(StandardMaterial3D::FLAG_ALBEDO_FROM_VERTEX_COLOR, true); + line_material->set_flag(StandardMaterial3D::FLAG_SRGB_VERTEX_COLOR, true); line_material->set_albedo(Color(1, 1, 1)); - handle_material = Ref<SpatialMaterial>(memnew(SpatialMaterial)); - handle_material->set_flag(SpatialMaterial::FLAG_UNSHADED, true); - handle_material->set_flag(SpatialMaterial::FLAG_USE_POINT_SIZE, true); - handle_material->set_feature(SpatialMaterial::FEATURE_TRANSPARENT, true); - handle_material->set_flag(SpatialMaterial::FLAG_ALBEDO_FROM_VERTEX_COLOR, true); - handle_material->set_flag(SpatialMaterial::FLAG_SRGB_VERTEX_COLOR, true); - Ref<Texture> handle = editor->get_gui_base()->get_icon("Editor3DHandle", "EditorIcons"); + handle_material = Ref<StandardMaterial3D>(memnew(StandardMaterial3D)); + handle_material->set_shading_mode(StandardMaterial3D::SHADING_MODE_UNSHADED); + handle_material->set_flag(StandardMaterial3D::FLAG_USE_POINT_SIZE, true); + handle_material->set_transparency(StandardMaterial3D::TRANSPARENCY_ALPHA); + handle_material->set_flag(StandardMaterial3D::FLAG_ALBEDO_FROM_VERTEX_COLOR, true); + handle_material->set_flag(StandardMaterial3D::FLAG_SRGB_VERTEX_COLOR, true); + Ref<Texture2D> handle = editor->get_gui_base()->get_icon("Editor3DHandle", "EditorIcons"); handle_material->set_point_size(handle->get_width()); - handle_material->set_texture(SpatialMaterial::TEXTURE_ALBEDO, handle); + handle_material->set_texture(StandardMaterial3D::TEXTURE_ALBEDO, handle); pointsm = memnew(MeshInstance); imgeom->add_child(pointsm); diff --git a/editor/plugins/collision_polygon_editor_plugin.h b/editor/plugins/collision_polygon_editor_plugin.h index 1871c6ee7e..3b6c25ac17 100644 --- a/editor/plugins/collision_polygon_editor_plugin.h +++ b/editor/plugins/collision_polygon_editor_plugin.h @@ -57,8 +57,8 @@ class Polygon3DEditor : public HBoxContainer { ToolButton *button_create; ToolButton *button_edit; - Ref<SpatialMaterial> line_material; - Ref<SpatialMaterial> handle_material; + Ref<StandardMaterial3D> line_material; + Ref<StandardMaterial3D> handle_material; EditorNode *editor; Panel *panel; diff --git a/editor/plugins/collision_shape_2d_editor_plugin.cpp b/editor/plugins/collision_shape_2d_editor_plugin.cpp index 179ebca562..01b4a61a85 100644 --- a/editor/plugins/collision_shape_2d_editor_plugin.cpp +++ b/editor/plugins/collision_shape_2d_editor_plugin.cpp @@ -435,7 +435,7 @@ void CollisionShape2DEditor::forward_canvas_draw_over_viewport(Control *p_overla Transform2D gt = canvas_item_editor->get_canvas_transform() * node->get_global_transform(); - Ref<Texture> h = get_icon("EditorHandle", "EditorIcons"); + Ref<Texture2D> h = get_icon("EditorHandle", "EditorIcons"); Vector2 size = h->get_size() * 0.5; handles.clear(); diff --git a/editor/plugins/cpu_particles_2d_editor_plugin.cpp b/editor/plugins/cpu_particles_2d_editor_plugin.cpp index 655048c271..ad3f01ec37 100644 --- a/editor/plugins/cpu_particles_2d_editor_plugin.cpp +++ b/editor/plugins/cpu_particles_2d_editor_plugin.cpp @@ -118,8 +118,8 @@ void CPUParticles2DEditorPlugin::_generate_emission_mask() { int vpc = 0; { - PoolVector<uint8_t> data = img->get_data(); - PoolVector<uint8_t>::Read r = data.read(); + Vector<uint8_t> data = img->get_data(); + const uint8_t *r = data.ptr(); for (int i = 0; i < s.width; i++) { for (int j = 0; j < s.height; j++) { @@ -198,9 +198,9 @@ void CPUParticles2DEditorPlugin::_generate_emission_mask() { ERR_FAIL_COND_MSG(valid_positions.size() == 0, "No pixels with transparency > 128 in image..."); if (capture_colors) { - PoolColorArray pca; + PackedColorArray pca; pca.resize(vpc); - PoolColorArray::Write pcaw = pca.write(); + Color *pcaw = pca.ptrw(); for (int i = 0; i < vpc; i += 1) { Color color; color.r = valid_colors[i * 4 + 0] / 255.0f; @@ -214,9 +214,9 @@ void CPUParticles2DEditorPlugin::_generate_emission_mask() { if (valid_normals.size()) { particles->set_emission_shape(CPUParticles2D::EMISSION_SHAPE_DIRECTED_POINTS); - PoolVector2Array norms; + PackedVector2Array norms; norms.resize(valid_normals.size()); - PoolVector2Array::Write normsw = norms.write(); + Vector2 *normsw = norms.ptrw(); for (int i = 0; i < valid_normals.size(); i += 1) { normsw[i] = valid_normals[i]; } @@ -226,9 +226,9 @@ void CPUParticles2DEditorPlugin::_generate_emission_mask() { } { - PoolVector2Array points; + PackedVector2Array points; points.resize(valid_positions.size()); - PoolVector2Array::Write pointsw = points.write(); + Vector2 *pointsw = points.ptrw(); for (int i = 0; i < valid_positions.size(); i += 1) { pointsw[i] = valid_positions[i]; } @@ -240,9 +240,9 @@ void CPUParticles2DEditorPlugin::_notification(int p_what) { if (p_what == NOTIFICATION_ENTER_TREE) { - menu->get_popup()->connect("id_pressed", this, "_menu_callback"); + menu->get_popup()->connect_compat("id_pressed", this, "_menu_callback"); menu->set_icon(menu->get_popup()->get_icon("Particles2D", "EditorIcons")); - file->connect("file_selected", this, "_file_selected"); + file->connect_compat("file_selected", this, "_file_selected"); } } @@ -305,7 +305,7 @@ CPUParticles2DEditorPlugin::CPUParticles2DEditorPlugin(EditorNode *p_node) { toolbar->add_child(emission_mask); - emission_mask->connect("confirmed", this, "_generate_emission_mask"); + emission_mask->connect_compat("confirmed", this, "_generate_emission_mask"); } CPUParticles2DEditorPlugin::~CPUParticles2DEditorPlugin() { diff --git a/editor/plugins/cpu_particles_editor_plugin.cpp b/editor/plugins/cpu_particles_editor_plugin.cpp index 2074ba6b99..8a73ae1e1f 100644 --- a/editor/plugins/cpu_particles_editor_plugin.cpp +++ b/editor/plugins/cpu_particles_editor_plugin.cpp @@ -80,8 +80,8 @@ void CPUParticlesEditor::edit(CPUParticles *p_particles) { void CPUParticlesEditor::_generate_emission_points() { /// hacer codigo aca - PoolVector<Vector3> points; - PoolVector<Vector3> normals; + Vector<Vector3> points; + Vector<Vector3> normals; if (!_generate(points, normals)) { return; @@ -116,7 +116,7 @@ CPUParticlesEditor::CPUParticlesEditor() { options->get_popup()->add_item(TTR("Create Emission Points From Node"), MENU_OPTION_CREATE_EMISSION_VOLUME_FROM_NODE); options->get_popup()->add_separator(); options->get_popup()->add_item(TTR("Restart"), MENU_OPTION_RESTART); - options->get_popup()->connect("id_pressed", this, "_menu_option"); + options->get_popup()->connect_compat("id_pressed", this, "_menu_option"); } void CPUParticlesEditorPlugin::edit(Object *p_object) { diff --git a/editor/plugins/curve_editor_plugin.cpp b/editor/plugins/curve_editor_plugin.cpp index a4fc9b37ad..5f4fb19d9e 100644 --- a/editor/plugins/curve_editor_plugin.cpp +++ b/editor/plugins/curve_editor_plugin.cpp @@ -49,7 +49,7 @@ CurveEditor::CurveEditor() { set_clip_contents(true); _context_menu = memnew(PopupMenu); - _context_menu->connect("id_pressed", this, "_on_context_menu_item_selected"); + _context_menu->connect_compat("id_pressed", this, "_on_context_menu_item_selected"); add_child(_context_menu); _presets_menu = memnew(PopupMenu); @@ -60,7 +60,7 @@ CurveEditor::CurveEditor() { _presets_menu->add_item(TTR("Ease In"), PRESET_EASE_IN); _presets_menu->add_item(TTR("Ease Out"), PRESET_EASE_OUT); _presets_menu->add_item(TTR("Smoothstep"), PRESET_SMOOTHSTEP); - _presets_menu->connect("id_pressed", this, "_on_preset_item_selected"); + _presets_menu->connect_compat("id_pressed", this, "_on_preset_item_selected"); _context_menu->add_child(_presets_menu); } @@ -70,15 +70,15 @@ void CurveEditor::set_curve(Ref<Curve> curve) { return; if (_curve_ref.is_valid()) { - _curve_ref->disconnect(CoreStringNames::get_singleton()->changed, this, "_curve_changed"); - _curve_ref->disconnect(Curve::SIGNAL_RANGE_CHANGED, this, "_curve_changed"); + _curve_ref->disconnect_compat(CoreStringNames::get_singleton()->changed, this, "_curve_changed"); + _curve_ref->disconnect_compat(Curve::SIGNAL_RANGE_CHANGED, this, "_curve_changed"); } _curve_ref = curve; if (_curve_ref.is_valid()) { - _curve_ref->connect(CoreStringNames::get_singleton()->changed, this, "_curve_changed"); - _curve_ref->connect(Curve::SIGNAL_RANGE_CHANGED, this, "_curve_changed"); + _curve_ref->connect_compat(CoreStringNames::get_singleton()->changed, this, "_curve_changed"); + _curve_ref->connect_compat(Curve::SIGNAL_RANGE_CHANGED, this, "_curve_changed"); } _selected_point = -1; @@ -612,7 +612,7 @@ struct CanvasItemPlotCurve { void operator()(Vector2 pos0, Vector2 pos1, bool in_definition) { // FIXME: Using a line width greater than 1 breaks curve rendering - ci.draw_line(pos0, pos1, in_definition ? color1 : color2, 1, true); + ci.draw_line(pos0, pos1, in_definition ? color1 : color2, 1); } }; @@ -693,13 +693,13 @@ void CurveEditor::_draw() { if (i != 0) { Vector2 control_pos = get_tangent_view_pos(i, TANGENT_LEFT); - draw_line(get_view_pos(pos), control_pos, tangent_color, Math::round(EDSCALE), true); + draw_line(get_view_pos(pos), control_pos, tangent_color, Math::round(EDSCALE)); draw_rect(Rect2(control_pos, Vector2(1, 1)).grow(2), tangent_color); } if (i != curve.get_point_count() - 1) { Vector2 control_pos = get_tangent_view_pos(i, TANGENT_RIGHT); - draw_line(get_view_pos(pos), control_pos, tangent_color, Math::round(EDSCALE), true); + draw_line(get_view_pos(pos), control_pos, tangent_color, Math::round(EDSCALE)); draw_rect(Rect2(control_pos, Vector2(1, 1)).grow(2), tangent_color); } } @@ -787,10 +787,10 @@ bool CurvePreviewGenerator::handles(const String &p_type) const { return p_type == "Curve"; } -Ref<Texture> CurvePreviewGenerator::generate(const Ref<Resource> &p_from, const Size2 &p_size) const { +Ref<Texture2D> CurvePreviewGenerator::generate(const Ref<Resource> &p_from, const Size2 &p_size) const { Ref<Curve> curve_ref = p_from; - ERR_FAIL_COND_V_MSG(curve_ref.is_null(), Ref<Texture>(), "It's not a reference to a valid Resource object."); + ERR_FAIL_COND_V_MSG(curve_ref.is_null(), Ref<Texture2D>(), "It's not a reference to a valid Resource object."); Curve &curve = **curve_ref; // FIXME: Should be ported to use p_size as done in b2633a97 @@ -802,8 +802,6 @@ Ref<Texture> CurvePreviewGenerator::generate(const Ref<Resource> &p_from, const im.create(thumbnail_size, thumbnail_size / 2, 0, Image::FORMAT_RGBA8); - im.lock(); - Color bg_color(0.1, 0.1, 0.1, 1.0); for (int i = 0; i < thumbnail_size; i++) { for (int j = 0; j < thumbnail_size / 2; j++) { @@ -844,10 +842,8 @@ Ref<Texture> CurvePreviewGenerator::generate(const Ref<Resource> &p_from, const prev_y = y; } - im.unlock(); - Ref<ImageTexture> ptex = Ref<ImageTexture>(memnew(ImageTexture)); - ptex->create_from_image(img_ref, 0); + ptex->create_from_image(img_ref); return ptex; } diff --git a/editor/plugins/curve_editor_plugin.h b/editor/plugins/curve_editor_plugin.h index 06e2692373..c00aa3eca5 100644 --- a/editor/plugins/curve_editor_plugin.h +++ b/editor/plugins/curve_editor_plugin.h @@ -141,7 +141,7 @@ class CurvePreviewGenerator : public EditorResourcePreviewGenerator { public: virtual bool handles(const String &p_type) const; - virtual Ref<Texture> generate(const Ref<Resource> &p_from, const Size2 &p_size) const; + virtual Ref<Texture2D> generate(const Ref<Resource> &p_from, const Size2 &p_size) const; }; #endif // CURVE_EDITOR_PLUGIN_H diff --git a/editor/plugins/debugger_editor_plugin.cpp b/editor/plugins/debugger_editor_plugin.cpp new file mode 100644 index 0000000000..2534a2cc17 --- /dev/null +++ b/editor/plugins/debugger_editor_plugin.cpp @@ -0,0 +1,51 @@ +/*************************************************************************/ +/* debugger_editor_plugin.cpp */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*************************************************************************/ + +#include "debugger_editor_plugin.h" + +#include "core/os/keyboard.h" +#include "editor/debugger/editor_debugger_node.h" + +DebuggerEditorPlugin::DebuggerEditorPlugin(EditorNode *p_editor) { + ED_SHORTCUT("debugger/step_into", TTR("Step Into"), KEY_F11); + ED_SHORTCUT("debugger/step_over", TTR("Step Over"), KEY_F10); + ED_SHORTCUT("debugger/break", TTR("Break")); + ED_SHORTCUT("debugger/continue", TTR("Continue"), KEY_F12); + ED_SHORTCUT("debugger/keep_debugger_open", TTR("Keep Debugger Open")); + ED_SHORTCUT("debugger/debug_with_external_editor", TTR("Debug with External Editor")); + + EditorDebuggerNode *debugger = memnew(EditorDebuggerNode); + Button *db = EditorNode::get_singleton()->add_bottom_panel_item(TTR("Debugger"), debugger); + debugger->set_tool_button(db); +} + +DebuggerEditorPlugin::~DebuggerEditorPlugin() { + // Should delete debugger? +} diff --git a/editor/plugins/debugger_editor_plugin.h b/editor/plugins/debugger_editor_plugin.h new file mode 100644 index 0000000000..05d6ece72d --- /dev/null +++ b/editor/plugins/debugger_editor_plugin.h @@ -0,0 +1,50 @@ +/*************************************************************************/ +/* debugger_editor_plugin.h */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*************************************************************************/ + +#ifndef DEBUGGER_EDITOR_PLUGIN_H +#define DEBUGGER_EDITOR_PLUGIN_H + +#include "editor/debugger/editor_debugger_node.h" +#include "editor/editor_node.h" +#include "editor/editor_plugin.h" + +class DebuggerEditorPlugin : public EditorPlugin { + + GDCLASS(DebuggerEditorPlugin, EditorPlugin); + +public: + virtual String get_name() const { return "Debugger"; } + bool has_main_screen() const { return false; } + + DebuggerEditorPlugin(EditorNode *p_node); + ~DebuggerEditorPlugin(); +}; + +#endif // DEBUGGER_EDITOR_PLUGIN_H diff --git a/editor/plugins/editor_preview_plugins.cpp b/editor/plugins/editor_preview_plugins.cpp index 9b0d5d3daf..3c173ab783 100644 --- a/editor/plugins/editor_preview_plugins.cpp +++ b/editor/plugins/editor_preview_plugins.cpp @@ -47,8 +47,6 @@ void post_process_preview(Ref<Image> p_image) { if (p_image->get_format() != Image::FORMAT_RGBA8) p_image->convert(Image::FORMAT_RGBA8); - p_image->lock(); - const int w = p_image->get_width(); const int h = p_image->get_height(); @@ -70,40 +68,38 @@ void post_process_preview(Ref<Image> p_image) { } } } - - p_image->unlock(); } bool EditorTexturePreviewPlugin::handles(const String &p_type) const { - return ClassDB::is_parent_class(p_type, "Texture"); + return ClassDB::is_parent_class(p_type, "Texture2D"); } bool EditorTexturePreviewPlugin::generate_small_preview_automatically() const { return true; } -Ref<Texture> EditorTexturePreviewPlugin::generate(const RES &p_from, const Size2 &p_size) const { +Ref<Texture2D> EditorTexturePreviewPlugin::generate(const RES &p_from, const Size2 &p_size) const { Ref<Image> img; Ref<AtlasTexture> atex = p_from; Ref<LargeTexture> ltex = p_from; if (atex.is_valid()) { - Ref<Texture> tex = atex->get_atlas(); + Ref<Texture2D> tex = atex->get_atlas(); if (!tex.is_valid()) { - return Ref<Texture>(); + return Ref<Texture2D>(); } Ref<Image> atlas = tex->get_data(); if (!atlas.is_valid()) { - return Ref<Texture>(); + return Ref<Texture2D>(); } img = atlas->get_rect(atex->get_region()); } else if (ltex.is_valid()) { img = ltex->to_image(); } else { - Ref<Texture> tex = p_from; + Ref<Texture2D> tex = p_from; if (tex.is_valid()) { img = tex->get_data(); if (img.is_valid()) { @@ -113,13 +109,13 @@ Ref<Texture> EditorTexturePreviewPlugin::generate(const RES &p_from, const Size2 } if (img.is_null() || img->empty()) - return Ref<Texture>(); + return Ref<Texture2D>(); img->clear_mipmaps(); if (img->is_compressed()) { if (img->decompress() != OK) - return Ref<Texture>(); + return Ref<Texture2D>(); } else if (img->get_format() != Image::FORMAT_RGB8 && img->get_format() != Image::FORMAT_RGBA8) { img->convert(Image::FORMAT_RGBA8); } @@ -137,7 +133,7 @@ Ref<Texture> EditorTexturePreviewPlugin::generate(const RES &p_from, const Size2 Ref<ImageTexture> ptex = Ref<ImageTexture>(memnew(ImageTexture)); - ptex->create_from_image(img, 0); + ptex->create_from_image(img); return ptex; } @@ -151,7 +147,7 @@ bool EditorImagePreviewPlugin::handles(const String &p_type) const { return p_type == "Image"; } -Ref<Texture> EditorImagePreviewPlugin::generate(const RES &p_from, const Size2 &p_size) const { +Ref<Texture2D> EditorImagePreviewPlugin::generate(const RES &p_from, const Size2 &p_size) const { Ref<Image> img = p_from; @@ -182,7 +178,7 @@ Ref<Texture> EditorImagePreviewPlugin::generate(const RES &p_from, const Size2 & Ref<ImageTexture> ptex; ptex.instance(); - ptex->create_from_image(img, 0); + ptex->create_from_image(img); return ptex; } @@ -199,27 +195,27 @@ bool EditorBitmapPreviewPlugin::handles(const String &p_type) const { return ClassDB::is_parent_class(p_type, "BitMap"); } -Ref<Texture> EditorBitmapPreviewPlugin::generate(const RES &p_from, const Size2 &p_size) const { +Ref<Texture2D> EditorBitmapPreviewPlugin::generate(const RES &p_from, const Size2 &p_size) const { Ref<BitMap> bm = p_from; if (bm->get_size() == Size2()) { - return Ref<Texture>(); + return Ref<Texture2D>(); } - PoolVector<uint8_t> data; + Vector<uint8_t> data; data.resize(bm->get_size().width * bm->get_size().height); { - PoolVector<uint8_t>::Write w = data.write(); + uint8_t *w = data.ptrw(); for (int i = 0; i < bm->get_size().width; i++) { for (int j = 0; j < bm->get_size().height; j++) { if (bm->get_bit(Point2i(i, j))) { - w[j * bm->get_size().width + i] = 255; + w[j * (int)bm->get_size().width + i] = 255; } else { - w[j * bm->get_size().width + i] = 0; + w[j * (int)bm->get_size().width + i] = 0; } } } @@ -231,7 +227,7 @@ Ref<Texture> EditorBitmapPreviewPlugin::generate(const RES &p_from, const Size2 if (img->is_compressed()) { if (img->decompress() != OK) - return Ref<Texture>(); + return Ref<Texture2D>(); } else if (img->get_format() != Image::FORMAT_RGB8 && img->get_format() != Image::FORMAT_RGBA8) { img->convert(Image::FORMAT_RGBA8); } @@ -249,7 +245,7 @@ Ref<Texture> EditorBitmapPreviewPlugin::generate(const RES &p_from, const Size2 Ref<ImageTexture> ptex = Ref<ImageTexture>(memnew(ImageTexture)); - ptex->create_from_image(img, 0); + ptex->create_from_image(img); return ptex; } @@ -266,12 +262,13 @@ bool EditorPackedScenePreviewPlugin::handles(const String &p_type) const { return ClassDB::is_parent_class(p_type, "PackedScene"); } -Ref<Texture> EditorPackedScenePreviewPlugin::generate(const RES &p_from, const Size2 &p_size) const { + +Ref<Texture2D> EditorPackedScenePreviewPlugin::generate(const RES &p_from, const Size2 &p_size) const { return generate_from_path(p_from->get_path(), p_size); } -Ref<Texture> EditorPackedScenePreviewPlugin::generate_from_path(const String &p_path, const Size2 &p_size) const { +Ref<Texture2D> EditorPackedScenePreviewPlugin::generate_from_path(const String &p_path, const Size2 &p_size) const { String temp_path = EditorSettings::get_singleton()->get_cache_dir(); String cache_base = ProjectSettings::get_singleton()->globalize_path(p_path).md5_text(); @@ -282,7 +279,7 @@ Ref<Texture> EditorPackedScenePreviewPlugin::generate_from_path(const String &p_ String path = cache_base + ".png"; if (!FileAccess::exists(path)) - return Ref<Texture>(); + return Ref<Texture2D>(); Ref<Image> img; img.instance(); @@ -292,11 +289,11 @@ Ref<Texture> EditorPackedScenePreviewPlugin::generate_from_path(const String &p_ Ref<ImageTexture> ptex = Ref<ImageTexture>(memnew(ImageTexture)); post_process_preview(img); - ptex->create_from_image(img, 0); + ptex->create_from_image(img); return ptex; } else { - return Ref<Texture>(); + return Ref<Texture2D>(); } } @@ -324,10 +321,10 @@ bool EditorMaterialPreviewPlugin::generate_small_preview_automatically() const { return true; } -Ref<Texture> EditorMaterialPreviewPlugin::generate(const RES &p_from, const Size2 &p_size) const { +Ref<Texture2D> EditorMaterialPreviewPlugin::generate(const RES &p_from, const Size2 &p_size) const { Ref<Material> material = p_from; - ERR_FAIL_COND_V(material.is_null(), Ref<Texture>()); + ERR_FAIL_COND_V(material.is_null(), Ref<Texture2D>()); if (material->get_shader_mode() == Shader::MODE_SPATIAL) { @@ -342,7 +339,7 @@ Ref<Texture> EditorMaterialPreviewPlugin::generate(const RES &p_from, const Size OS::get_singleton()->delay_usec(10); } - Ref<Image> img = VS::get_singleton()->texture_get_data(viewport_texture); + Ref<Image> img = VS::get_singleton()->texture_2d_get(viewport_texture); VS::get_singleton()->mesh_surface_set_material(sphere, 0, RID()); ERR_FAIL_COND_V(!img.is_valid(), Ref<ImageTexture>()); @@ -352,11 +349,11 @@ Ref<Texture> EditorMaterialPreviewPlugin::generate(const RES &p_from, const Size img->resize(thumbnail_size, thumbnail_size, Image::INTERPOLATE_CUBIC); post_process_preview(img); Ref<ImageTexture> ptex = Ref<ImageTexture>(memnew(ImageTexture)); - ptex->create_from_image(img, 0); + ptex->create_from_image(img); return ptex; } - return Ref<Texture>(); + return Ref<Texture2D>(); } EditorMaterialPreviewPlugin::EditorMaterialPreviewPlugin() { @@ -369,7 +366,6 @@ EditorMaterialPreviewPlugin::EditorMaterialPreviewPlugin() { VS::get_singleton()->viewport_set_size(viewport, 128, 128); VS::get_singleton()->viewport_set_transparent_background(viewport, true); VS::get_singleton()->viewport_set_active(viewport, true); - VS::get_singleton()->viewport_set_vflip(viewport, true); viewport_texture = VS::get_singleton()->viewport_get_texture(viewport); camera = VS::get_singleton()->camera_create(); @@ -396,10 +392,10 @@ EditorMaterialPreviewPlugin::EditorMaterialPreviewPlugin() { int lons = 32; float radius = 1.0; - PoolVector<Vector3> vertices; - PoolVector<Vector3> normals; - PoolVector<Vector2> uvs; - PoolVector<float> tangents; + Vector<Vector3> vertices; + Vector<Vector3> normals; + Vector<Vector2> uvs; + Vector<float> tangents; Basis tt = Basis(Vector3(0, 1, 0), Math_PI * 0.5); for (int i = 1; i <= lats; i++) { @@ -490,15 +486,15 @@ bool EditorScriptPreviewPlugin::handles(const String &p_type) const { return ClassDB::is_parent_class(p_type, "Script"); } -Ref<Texture> EditorScriptPreviewPlugin::generate(const RES &p_from, const Size2 &p_size) const { +Ref<Texture2D> EditorScriptPreviewPlugin::generate(const RES &p_from, const Size2 &p_size) const { Ref<Script> scr = p_from; if (scr.is_null()) - return Ref<Texture>(); + return Ref<Texture2D>(); String code = scr->get_source_code().strip_edges(); if (code == "") - return Ref<Texture>(); + return Ref<Texture2D>(); List<String> kwors; scr->get_language()->get_reserved_words(&kwors); @@ -522,8 +518,6 @@ Ref<Texture> EditorScriptPreviewPlugin::generate(const RES &p_from, const Size2 Color text_color = EditorSettings::get_singleton()->get("text_editor/highlighting/text_color"); Color symbol_color = EditorSettings::get_singleton()->get("text_editor/highlighting/symbol_color"); - img->lock(); - if (bg_color.a == 0) bg_color = Color(0, 0, 0, 0); bg_color.a = MAX(bg_color.a, 0.2); // some background @@ -593,13 +587,11 @@ Ref<Texture> EditorScriptPreviewPlugin::generate(const RES &p_from, const Size2 col++; } - img->unlock(); - post_process_preview(img); Ref<ImageTexture> ptex = Ref<ImageTexture>(memnew(ImageTexture)); - ptex->create_from_image(img, 0); + ptex->create_from_image(img); return ptex; } @@ -612,22 +604,22 @@ bool EditorAudioStreamPreviewPlugin::handles(const String &p_type) const { return ClassDB::is_parent_class(p_type, "AudioStream"); } -Ref<Texture> EditorAudioStreamPreviewPlugin::generate(const RES &p_from, const Size2 &p_size) const { +Ref<Texture2D> EditorAudioStreamPreviewPlugin::generate(const RES &p_from, const Size2 &p_size) const { Ref<AudioStream> stream = p_from; - ERR_FAIL_COND_V(stream.is_null(), Ref<Texture>()); + ERR_FAIL_COND_V(stream.is_null(), Ref<Texture2D>()); - PoolVector<uint8_t> img; + Vector<uint8_t> img; int w = p_size.x; int h = p_size.y; img.resize(w * h * 3); - PoolVector<uint8_t>::Write imgdata = img.write(); - uint8_t *imgw = imgdata.ptr(); + uint8_t *imgdata = img.ptrw(); + uint8_t *imgw = imgdata; Ref<AudioStreamPlayback> playback = stream->instance_playback(); - ERR_FAIL_COND_V(playback.is_null(), Ref<Texture>()); + ERR_FAIL_COND_V(playback.is_null(), Ref<Texture2D>()); float len_s = stream->get_length(); if (len_s == 0) { @@ -680,14 +672,13 @@ Ref<Texture> EditorAudioStreamPreviewPlugin::generate(const RES &p_from, const S } } - imgdata.release(); //post_process_preview(img); Ref<ImageTexture> ptex = Ref<ImageTexture>(memnew(ImageTexture)); Ref<Image> image; image.instance(); image->create(w, h, false, Image::FORMAT_RGB8, img); - ptex->create_from_image(image, 0); + ptex->create_from_image(image); return ptex; } @@ -710,10 +701,10 @@ bool EditorMeshPreviewPlugin::handles(const String &p_type) const { return ClassDB::is_parent_class(p_type, "Mesh"); //any Mesh } -Ref<Texture> EditorMeshPreviewPlugin::generate(const RES &p_from, const Size2 &p_size) const { +Ref<Texture2D> EditorMeshPreviewPlugin::generate(const RES &p_from, const Size2 &p_size) const { Ref<Mesh> mesh = p_from; - ERR_FAIL_COND_V(mesh.is_null(), Ref<Texture>()); + ERR_FAIL_COND_V(mesh.is_null(), Ref<Texture2D>()); VS::get_singleton()->instance_set_base(mesh_instance, mesh->get_rid()); @@ -726,7 +717,7 @@ Ref<Texture> EditorMeshPreviewPlugin::generate(const RES &p_from, const Size2 &p AABB rot_aabb = xform.xform(aabb); float m = MAX(rot_aabb.size.x, rot_aabb.size.y) * 0.5; if (m == 0) - return Ref<Texture>(); + return Ref<Texture2D>(); m = 1.0 / m; m *= 0.5; xform.basis.scale(Vector3(m, m, m)); @@ -743,7 +734,7 @@ Ref<Texture> EditorMeshPreviewPlugin::generate(const RES &p_from, const Size2 &p OS::get_singleton()->delay_usec(10); } - Ref<Image> img = VS::get_singleton()->texture_get_data(viewport_texture); + Ref<Image> img = VS::get_singleton()->texture_2d_get(viewport_texture); ERR_FAIL_COND_V(img.is_null(), Ref<ImageTexture>()); VS::get_singleton()->instance_set_base(mesh_instance, RID()); @@ -762,7 +753,7 @@ Ref<Texture> EditorMeshPreviewPlugin::generate(const RES &p_from, const Size2 &p post_process_preview(img); Ref<ImageTexture> ptex = Ref<ImageTexture>(memnew(ImageTexture)); - ptex->create_from_image(img, 0); + ptex->create_from_image(img); return ptex; } @@ -772,7 +763,6 @@ EditorMeshPreviewPlugin::EditorMeshPreviewPlugin() { viewport = VS::get_singleton()->viewport_create(); VS::get_singleton()->viewport_set_update_mode(viewport, VS::VIEWPORT_UPDATE_DISABLED); - VS::get_singleton()->viewport_set_vflip(viewport, true); VS::get_singleton()->viewport_set_scenario(viewport, scenario); VS::get_singleton()->viewport_set_size(viewport, 128, 128); VS::get_singleton()->viewport_set_transparent_background(viewport, true); @@ -831,7 +821,7 @@ bool EditorFontPreviewPlugin::handles(const String &p_type) const { return ClassDB::is_parent_class(p_type, "DynamicFontData") || ClassDB::is_parent_class(p_type, "DynamicFont"); } -Ref<Texture> EditorFontPreviewPlugin::generate_from_path(const String &p_path, const Size2 &p_size) const { +Ref<Texture2D> EditorFontPreviewPlugin::generate_from_path(const String &p_path, const Size2 &p_size) const { RES res = ResourceLoader::load(p_path); Ref<DynamicFont> sampled_font; @@ -868,7 +858,7 @@ Ref<Texture> EditorFontPreviewPlugin::generate_from_path(const String &p_path, c VS::get_singleton()->canvas_item_clear(canvas_item); - Ref<Image> img = VS::get_singleton()->texture_get_data(viewport_texture); + Ref<Image> img = VS::get_singleton()->texture_2d_get(viewport_texture); ERR_FAIL_COND_V(img.is_null(), Ref<ImageTexture>()); img->convert(Image::FORMAT_RGBA8); @@ -885,16 +875,16 @@ Ref<Texture> EditorFontPreviewPlugin::generate_from_path(const String &p_path, c post_process_preview(img); Ref<ImageTexture> ptex = Ref<ImageTexture>(memnew(ImageTexture)); - ptex->create_from_image(img, 0); + ptex->create_from_image(img); return ptex; } -Ref<Texture> EditorFontPreviewPlugin::generate(const RES &p_from, const Size2 &p_size) const { +Ref<Texture2D> EditorFontPreviewPlugin::generate(const RES &p_from, const Size2 &p_size) const { String path = p_from->get_path(); if (!FileAccess::exists(path)) { - return Ref<Texture>(); + return Ref<Texture2D>(); } return generate_from_path(path, p_size); } @@ -903,7 +893,6 @@ EditorFontPreviewPlugin::EditorFontPreviewPlugin() { viewport = VS::get_singleton()->viewport_create(); VS::get_singleton()->viewport_set_update_mode(viewport, VS::VIEWPORT_UPDATE_DISABLED); - VS::get_singleton()->viewport_set_vflip(viewport, true); VS::get_singleton()->viewport_set_size(viewport, 128, 128); VS::get_singleton()->viewport_set_active(viewport, true); viewport_texture = VS::get_singleton()->viewport_get_texture(viewport); diff --git a/editor/plugins/editor_preview_plugins.h b/editor/plugins/editor_preview_plugins.h index e6e4aff8de..840fa2410a 100644 --- a/editor/plugins/editor_preview_plugins.h +++ b/editor/plugins/editor_preview_plugins.h @@ -41,7 +41,7 @@ class EditorTexturePreviewPlugin : public EditorResourcePreviewGenerator { public: virtual bool handles(const String &p_type) const; virtual bool generate_small_preview_automatically() const; - virtual Ref<Texture> generate(const RES &p_from, const Size2 &p_size) const; + virtual Ref<Texture2D> generate(const RES &p_from, const Size2 &p_size) const; EditorTexturePreviewPlugin(); }; @@ -52,7 +52,7 @@ class EditorImagePreviewPlugin : public EditorResourcePreviewGenerator { public: virtual bool handles(const String &p_type) const; virtual bool generate_small_preview_automatically() const; - virtual Ref<Texture> generate(const RES &p_from, const Size2 &p_size) const; + virtual Ref<Texture2D> generate(const RES &p_from, const Size2 &p_size) const; EditorImagePreviewPlugin(); }; @@ -63,7 +63,7 @@ class EditorBitmapPreviewPlugin : public EditorResourcePreviewGenerator { public: virtual bool handles(const String &p_type) const; virtual bool generate_small_preview_automatically() const; - virtual Ref<Texture> generate(const RES &p_from, const Size2 &p_size) const; + virtual Ref<Texture2D> generate(const RES &p_from, const Size2 &p_size) const; EditorBitmapPreviewPlugin(); }; @@ -72,8 +72,8 @@ class EditorPackedScenePreviewPlugin : public EditorResourcePreviewGenerator { public: virtual bool handles(const String &p_type) const; - virtual Ref<Texture> generate(const RES &p_from, const Size2 &p_size) const; - virtual Ref<Texture> generate_from_path(const String &p_path, const Size2 &p_size) const; + virtual Ref<Texture2D> generate(const RES &p_from, const Size2 &p_size) const; + virtual Ref<Texture2D> generate_from_path(const String &p_path, const Size2 &p_size) const; EditorPackedScenePreviewPlugin(); }; @@ -102,7 +102,7 @@ protected: public: virtual bool handles(const String &p_type) const; virtual bool generate_small_preview_automatically() const; - virtual Ref<Texture> generate(const RES &p_from, const Size2 &p_size) const; + virtual Ref<Texture2D> generate(const RES &p_from, const Size2 &p_size) const; EditorMaterialPreviewPlugin(); ~EditorMaterialPreviewPlugin(); @@ -111,7 +111,7 @@ public: class EditorScriptPreviewPlugin : public EditorResourcePreviewGenerator { public: virtual bool handles(const String &p_type) const; - virtual Ref<Texture> generate(const RES &p_from, const Size2 &p_size) const; + virtual Ref<Texture2D> generate(const RES &p_from, const Size2 &p_size) const; EditorScriptPreviewPlugin(); }; @@ -119,7 +119,7 @@ public: class EditorAudioStreamPreviewPlugin : public EditorResourcePreviewGenerator { public: virtual bool handles(const String &p_type) const; - virtual Ref<Texture> generate(const RES &p_from, const Size2 &p_size) const; + virtual Ref<Texture2D> generate(const RES &p_from, const Size2 &p_size) const; EditorAudioStreamPreviewPlugin(); }; @@ -146,7 +146,7 @@ protected: public: virtual bool handles(const String &p_type) const; - virtual Ref<Texture> generate(const RES &p_from, const Size2 &p_size) const; + virtual Ref<Texture2D> generate(const RES &p_from, const Size2 &p_size) const; EditorMeshPreviewPlugin(); ~EditorMeshPreviewPlugin(); @@ -169,8 +169,8 @@ protected: public: virtual bool handles(const String &p_type) const; - virtual Ref<Texture> generate(const RES &p_from, const Size2 &p_size) const; - virtual Ref<Texture> generate_from_path(const String &p_path, const Size2 &p_size) const; + virtual Ref<Texture2D> generate(const RES &p_from, const Size2 &p_size) const; + virtual Ref<Texture2D> generate_from_path(const String &p_path, const Size2 &p_size) const; EditorFontPreviewPlugin(); ~EditorFontPreviewPlugin(); diff --git a/editor/plugins/gi_probe_editor_plugin.cpp b/editor/plugins/gi_probe_editor_plugin.cpp index 8914e0ed01..9231d38a02 100644 --- a/editor/plugins/gi_probe_editor_plugin.cpp +++ b/editor/plugins/gi_probe_editor_plugin.cpp @@ -33,6 +33,18 @@ void GIProbeEditorPlugin::_bake() { if (gi_probe) { + if (gi_probe->get_probe_data().is_null()) { + String path = get_tree()->get_edited_scene_root()->get_filename(); + if (path == String()) { + path = "res://" + gi_probe->get_name() + "_data.res"; + } else { + String ext = path.get_extension(); + path = path.get_basename() + "." + gi_probe->get_name() + "_data.res"; + } + probe_file->set_current_path(path); + probe_file->popup_centered_ratio(); + return; + } gi_probe->bake(); } } @@ -51,13 +63,42 @@ bool GIProbeEditorPlugin::handles(Object *p_object) const { return p_object->is_class("GIProbe"); } +void GIProbeEditorPlugin::_notification(int p_what) { + + if (p_what == NOTIFICATION_PROCESS) { + if (!gi_probe) { + return; + } + + String text; + + Vector3i size = gi_probe->get_estimated_cell_size(); + text = itos(size.x) + ", " + itos(size.y) + ", " + itos(size.z); + int data_size = 4; + if (GLOBAL_GET("rendering/quality/gi_probes/anisotropic")) { + data_size += 4; + } + text += " - VRAM Size: " + String::num(size.x * size.y * size.z * data_size / (1024.0 * 1024.0), 2) + " Mb."; + + if (bake_info->get_text() == text) { + return; + } + + bake_info->add_color_override("font_color", bake_info->get_color("success_color", "Editor")); + + bake_info->set_text(text); + } +} + void GIProbeEditorPlugin::make_visible(bool p_visible) { if (p_visible) { - bake->show(); + bake_hb->show(); + set_process(true); } else { - bake->hide(); + bake_hb->hide(); + set_process(false); } } @@ -82,21 +123,45 @@ void GIProbeEditorPlugin::bake_func_end() { tmp_progress = NULL; } +void GIProbeEditorPlugin::_giprobe_save_path_and_bake(const String &p_path) { + probe_file->hide(); + if (gi_probe) { + gi_probe->bake(); + ERR_FAIL_COND(gi_probe->get_probe_data().is_null()); + ResourceSaver::save(p_path, gi_probe->get_probe_data(), ResourceSaver::FLAG_CHANGE_PATH); + } +} + void GIProbeEditorPlugin::_bind_methods() { ClassDB::bind_method("_bake", &GIProbeEditorPlugin::_bake); + ClassDB::bind_method("_giprobe_save_path_and_bake", &GIProbeEditorPlugin::_giprobe_save_path_and_bake); } GIProbeEditorPlugin::GIProbeEditorPlugin(EditorNode *p_node) { editor = p_node; + bake_hb = memnew(HBoxContainer); + bake_hb->set_h_size_flags(Control::SIZE_EXPAND_FILL); + bake_hb->hide(); bake = memnew(ToolButton); bake->set_icon(editor->get_gui_base()->get_icon("Bake", "EditorIcons")); bake->set_text(TTR("Bake GI Probe")); - bake->hide(); - bake->connect("pressed", this, "_bake"); - add_control_to_container(CONTAINER_SPATIAL_EDITOR_MENU, bake); + bake->connect_compat("pressed", this, "_bake"); + bake_hb->add_child(bake); + bake_info = memnew(Label); + bake_info->set_h_size_flags(Control::SIZE_EXPAND_FILL); + bake_info->set_clip_text(true); + bake_hb->add_child(bake_info); + + add_control_to_container(CONTAINER_SPATIAL_EDITOR_MENU, bake_hb); gi_probe = NULL; + probe_file = memnew(EditorFileDialog); + probe_file->set_mode(EditorFileDialog::MODE_SAVE_FILE); + probe_file->add_filter("*.res"); + probe_file->connect_compat("file_selected", this, "_giprobe_save_path_and_bake"); + get_editor_interface()->get_base_control()->add_child(probe_file); + probe_file->set_title(TTR("Select path for GIProbe Data File")); GIProbe::bake_begin_function = bake_func_begin; GIProbe::bake_step_function = bake_func_step; diff --git a/editor/plugins/gi_probe_editor_plugin.h b/editor/plugins/gi_probe_editor_plugin.h index 5db682835d..2068ebaaa8 100644 --- a/editor/plugins/gi_probe_editor_plugin.h +++ b/editor/plugins/gi_probe_editor_plugin.h @@ -42,18 +42,24 @@ class GIProbeEditorPlugin : public EditorPlugin { GIProbe *gi_probe; + HBoxContainer *bake_hb; + Label *bake_info; ToolButton *bake; EditorNode *editor; + EditorFileDialog *probe_file; + static EditorProgress *tmp_progress; static void bake_func_begin(int p_steps); static void bake_func_step(int p_step, const String &p_description); static void bake_func_end(); void _bake(); + void _giprobe_save_path_and_bake(const String &p_path); protected: static void _bind_methods(); + void _notification(int p_what); public: virtual String get_name() const { return "GIProbe"; } diff --git a/editor/plugins/gradient_editor_plugin.cpp b/editor/plugins/gradient_editor_plugin.cpp index 0a3a994eb7..b36782ee14 100644 --- a/editor/plugins/gradient_editor_plugin.cpp +++ b/editor/plugins/gradient_editor_plugin.cpp @@ -69,8 +69,8 @@ void GradientEditor::_bind_methods() { void GradientEditor::set_gradient(const Ref<Gradient> &p_gradient) { gradient = p_gradient; - connect("ramp_changed", this, "_ramp_changed"); - gradient->connect("changed", this, "_gradient_changed"); + connect_compat("ramp_changed", this, "_ramp_changed"); + gradient->connect_compat("changed", this, "_gradient_changed"); set_points(gradient->get_points()); } diff --git a/editor/plugins/item_list_editor_plugin.cpp b/editor/plugins/item_list_editor_plugin.cpp index 9f836ed0d3..b872a2d932 100644 --- a/editor/plugins/item_list_editor_plugin.cpp +++ b/editor/plugins/item_list_editor_plugin.cpp @@ -105,7 +105,7 @@ void ItemListPlugin::_get_property_list(List<PropertyInfo> *p_list) const { String base = itos(i) + "/"; p_list->push_back(PropertyInfo(Variant::STRING, base + "text")); - p_list->push_back(PropertyInfo(Variant::OBJECT, base + "icon", PROPERTY_HINT_RESOURCE_TYPE, "Texture")); + p_list->push_back(PropertyInfo(Variant::OBJECT, base + "icon", PROPERTY_HINT_RESOURCE_TYPE, "Texture2D")); int flags = get_flags(); @@ -268,7 +268,7 @@ void ItemListEditor::_notification(int p_notification) { del_button->set_icon(get_icon("Remove", "EditorIcons")); } else if (p_notification == NOTIFICATION_READY) { - get_tree()->connect("node_removed", this, "_node_removed"); + get_tree()->connect_compat("node_removed", this, "_node_removed"); } } @@ -359,7 +359,7 @@ ItemListEditor::ItemListEditor() { toolbar_button = memnew(ToolButton); toolbar_button->set_text(TTR("Items")); add_child(toolbar_button); - toolbar_button->connect("pressed", this, "_edit_items"); + toolbar_button->connect_compat("pressed", this, "_edit_items"); dialog = memnew(AcceptDialog); dialog->set_title(TTR("Item List Editor")); @@ -376,14 +376,14 @@ ItemListEditor::ItemListEditor() { add_button = memnew(Button); add_button->set_text(TTR("Add")); hbc->add_child(add_button); - add_button->connect("pressed", this, "_add_button"); + add_button->connect_compat("pressed", this, "_add_button"); hbc->add_spacer(); del_button = memnew(Button); del_button->set_text(TTR("Delete")); hbc->add_child(del_button); - del_button->connect("pressed", this, "_delete_button"); + del_button->connect_compat("pressed", this, "_delete_button"); property_editor = memnew(EditorInspector); vbc->add_child(property_editor); diff --git a/editor/plugins/item_list_editor_plugin.h b/editor/plugins/item_list_editor_plugin.h index 8a73367bf7..8dcf938139 100644 --- a/editor/plugins/item_list_editor_plugin.h +++ b/editor/plugins/item_list_editor_plugin.h @@ -66,8 +66,8 @@ public: virtual void set_item_text(int p_idx, const String &p_text) {} virtual String get_item_text(int p_idx) const { return ""; }; - virtual void set_item_icon(int p_idx, const Ref<Texture> &p_tex) {} - virtual Ref<Texture> get_item_icon(int p_idx) const { return Ref<Texture>(); }; + virtual void set_item_icon(int p_idx, const Ref<Texture2D> &p_tex) {} + virtual Ref<Texture2D> get_item_icon(int p_idx) const { return Ref<Texture2D>(); }; virtual void set_item_checkable(int p_idx, bool p_check) {} virtual void set_item_radio_checkable(int p_idx, bool p_check) {} @@ -109,8 +109,8 @@ public: virtual void set_item_text(int p_idx, const String &p_text) { ob->set_item_text(p_idx, p_text); } virtual String get_item_text(int p_idx) const { return ob->get_item_text(p_idx); } - virtual void set_item_icon(int p_idx, const Ref<Texture> &p_tex) { ob->set_item_icon(p_idx, p_tex); } - virtual Ref<Texture> get_item_icon(int p_idx) const { return ob->get_item_icon(p_idx); } + virtual void set_item_icon(int p_idx, const Ref<Texture2D> &p_tex) { ob->set_item_icon(p_idx, p_tex); } + virtual Ref<Texture2D> get_item_icon(int p_idx) const { return ob->get_item_icon(p_idx); } virtual void set_item_enabled(int p_idx, int p_enabled) { ob->set_item_disabled(p_idx, !p_enabled); } virtual bool is_item_enabled(int p_idx) const { return !ob->is_item_disabled(p_idx); } @@ -139,8 +139,8 @@ public: virtual void set_item_text(int p_idx, const String &p_text) { pp->set_item_text(p_idx, p_text); } virtual String get_item_text(int p_idx) const { return pp->get_item_text(p_idx); } - virtual void set_item_icon(int p_idx, const Ref<Texture> &p_tex) { pp->set_item_icon(p_idx, p_tex); } - virtual Ref<Texture> get_item_icon(int p_idx) const { return pp->get_item_icon(p_idx); } + virtual void set_item_icon(int p_idx, const Ref<Texture2D> &p_tex) { pp->set_item_icon(p_idx, p_tex); } + virtual Ref<Texture2D> get_item_icon(int p_idx) const { return pp->get_item_icon(p_idx); } virtual void set_item_checkable(int p_idx, bool p_check) { pp->set_item_as_checkable(p_idx, p_check); } virtual void set_item_radio_checkable(int p_idx, bool p_check) { pp->set_item_as_radio_checkable(p_idx, p_check); } @@ -182,8 +182,8 @@ public: virtual void set_item_text(int p_idx, const String &p_text) { pp->set_item_text(p_idx, p_text); } virtual String get_item_text(int p_idx) const { return pp->get_item_text(p_idx); } - virtual void set_item_icon(int p_idx, const Ref<Texture> &p_tex) { pp->set_item_icon(p_idx, p_tex); } - virtual Ref<Texture> get_item_icon(int p_idx) const { return pp->get_item_icon(p_idx); } + virtual void set_item_icon(int p_idx, const Ref<Texture2D> &p_tex) { pp->set_item_icon(p_idx, p_tex); } + virtual Ref<Texture2D> get_item_icon(int p_idx) const { return pp->get_item_icon(p_idx); } virtual void set_item_enabled(int p_idx, int p_enabled) { pp->set_item_disabled(p_idx, !p_enabled); } virtual bool is_item_enabled(int p_idx) const { return !pp->is_item_disabled(p_idx); } diff --git a/editor/plugins/material_editor_plugin.cpp b/editor/plugins/material_editor_plugin.cpp index 750f814319..bca0bde441 100644 --- a/editor/plugins/material_editor_plugin.cpp +++ b/editor/plugins/material_editor_plugin.cpp @@ -59,7 +59,7 @@ void MaterialEditor::_notification(int p_what) { if (p_what == NOTIFICATION_DRAW) { - Ref<Texture> checkerboard = get_icon("Checkerboard", "EditorIcons"); + Ref<Texture2D> checkerboard = get_icon("Checkerboard", "EditorIcons"); Size2 size = get_size(); draw_texture_rect(checkerboard, Rect2(Point2(), size), true); @@ -171,13 +171,13 @@ MaterialEditor::MaterialEditor() { sphere_switch->set_toggle_mode(true); sphere_switch->set_pressed(true); vb_shape->add_child(sphere_switch); - sphere_switch->connect("pressed", this, "_button_pressed", varray(sphere_switch)); + sphere_switch->connect_compat("pressed", this, "_button_pressed", varray(sphere_switch)); box_switch = memnew(TextureButton); box_switch->set_toggle_mode(true); box_switch->set_pressed(false); vb_shape->add_child(box_switch); - box_switch->connect("pressed", this, "_button_pressed", varray(box_switch)); + box_switch->connect_compat("pressed", this, "_button_pressed", varray(box_switch)); hb->add_spacer(); @@ -187,12 +187,12 @@ MaterialEditor::MaterialEditor() { light_1_switch = memnew(TextureButton); light_1_switch->set_toggle_mode(true); vb_light->add_child(light_1_switch); - light_1_switch->connect("pressed", this, "_button_pressed", varray(light_1_switch)); + light_1_switch->connect_compat("pressed", this, "_button_pressed", varray(light_1_switch)); light_2_switch = memnew(TextureButton); light_2_switch->set_toggle_mode(true); vb_light->add_child(light_2_switch); - light_2_switch->connect("pressed", this, "_button_pressed", varray(light_2_switch)); + light_2_switch->connect_compat("pressed", this, "_button_pressed", varray(light_2_switch)); first_enter = true; } @@ -225,7 +225,9 @@ EditorInspectorPluginMaterial::EditorInspectorPluginMaterial() { env.instance(); Ref<ProceduralSky> proc_sky = memnew(ProceduralSky(true)); env->set_sky(proc_sky); - env->set_background(Environment::BG_COLOR_SKY); + env->set_background(Environment::BG_COLOR); + env->set_ambient_source(Environment::AMBIENT_SOURCE_SKY); + env->set_reflection_source(Environment::REFLECTION_SOURCE_SKY); } MaterialEditorPlugin::MaterialEditorPlugin(EditorNode *p_node) { @@ -235,18 +237,18 @@ MaterialEditorPlugin::MaterialEditorPlugin(EditorNode *p_node) { add_inspector_plugin(plugin); } -String SpatialMaterialConversionPlugin::converts_to() const { +String StandardMaterial3DConversionPlugin::converts_to() const { return "ShaderMaterial"; } -bool SpatialMaterialConversionPlugin::handles(const Ref<Resource> &p_resource) const { +bool StandardMaterial3DConversionPlugin::handles(const Ref<Resource> &p_resource) const { - Ref<SpatialMaterial> mat = p_resource; + Ref<StandardMaterial3D> mat = p_resource; return mat.is_valid(); } -Ref<Resource> SpatialMaterialConversionPlugin::convert(const Ref<Resource> &p_resource) const { +Ref<Resource> StandardMaterial3DConversionPlugin::convert(const Ref<Resource> &p_resource) const { - Ref<SpatialMaterial> mat = p_resource; + Ref<StandardMaterial3D> mat = p_resource; ERR_FAIL_COND_V(!mat.is_valid(), Ref<Resource>()); Ref<ShaderMaterial> smat; @@ -266,9 +268,9 @@ Ref<Resource> SpatialMaterialConversionPlugin::convert(const Ref<Resource> &p_re for (List<PropertyInfo>::Element *E = params.front(); E; E = E->next()) { - // Texture parameter has to be treated specially since SpatialMaterial saved it + // Texture parameter has to be treated specially since StandardMaterial3D saved it // as RID but ShaderMaterial needs Texture itself - Ref<Texture> texture = mat->get_texture_by_name(E->get().name); + Ref<Texture2D> texture = mat->get_texture_by_name(E->get().name); if (texture.is_valid()) { smat->set_shader_param(E->get().name, texture); } else { diff --git a/editor/plugins/material_editor_plugin.h b/editor/plugins/material_editor_plugin.h index 7f0a373dc7..95a6c4bf8f 100644 --- a/editor/plugins/material_editor_plugin.h +++ b/editor/plugins/material_editor_plugin.h @@ -100,8 +100,8 @@ public: MaterialEditorPlugin(EditorNode *p_node); }; -class SpatialMaterialConversionPlugin : public EditorResourceConversionPlugin { - GDCLASS(SpatialMaterialConversionPlugin, EditorResourceConversionPlugin); +class StandardMaterial3DConversionPlugin : public EditorResourceConversionPlugin { + GDCLASS(StandardMaterial3DConversionPlugin, EditorResourceConversionPlugin); public: virtual String converts_to() const; diff --git a/editor/plugins/mesh_editor_plugin.cpp b/editor/plugins/mesh_editor_plugin.cpp index d06e5b6349..2b25a2328c 100644 --- a/editor/plugins/mesh_editor_plugin.cpp +++ b/editor/plugins/mesh_editor_plugin.cpp @@ -157,12 +157,12 @@ MeshEditor::MeshEditor() { light_1_switch = memnew(TextureButton); light_1_switch->set_toggle_mode(true); vb_light->add_child(light_1_switch); - light_1_switch->connect("pressed", this, "_button_pressed", varray(light_1_switch)); + light_1_switch->connect_compat("pressed", this, "_button_pressed", varray(light_1_switch)); light_2_switch = memnew(TextureButton); light_2_switch->set_toggle_mode(true); vb_light->add_child(light_2_switch); - light_2_switch->connect("pressed", this, "_button_pressed", varray(light_2_switch)); + light_2_switch->connect_compat("pressed", this, "_button_pressed", varray(light_2_switch)); first_enter = true; diff --git a/editor/plugins/mesh_instance_editor_plugin.cpp b/editor/plugins/mesh_instance_editor_plugin.cpp index aaba6406c7..182a8600e4 100644 --- a/editor/plugins/mesh_instance_editor_plugin.cpp +++ b/editor/plugins/mesh_instance_editor_plugin.cpp @@ -327,24 +327,24 @@ void MeshInstanceEditor::_create_uv_lines(int p_layer) { continue; Array a = mesh->surface_get_arrays(i); - PoolVector<Vector2> uv = a[p_layer == 0 ? Mesh::ARRAY_TEX_UV : Mesh::ARRAY_TEX_UV2]; + Vector<Vector2> uv = a[p_layer == 0 ? Mesh::ARRAY_TEX_UV : Mesh::ARRAY_TEX_UV2]; if (uv.size() == 0) { err_dialog->set_text(TTR("Model has no UV in this layer")); err_dialog->popup_centered_minsize(); return; } - PoolVector<Vector2>::Read r = uv.read(); + const Vector2 *r = uv.ptr(); - PoolVector<int> indices = a[Mesh::ARRAY_INDEX]; - PoolVector<int>::Read ri; + Vector<int> indices = a[Mesh::ARRAY_INDEX]; + const int *ri; int ic; bool use_indices; if (indices.size()) { ic = indices.size(); - ri = indices.read(); + ri = indices.ptr(); use_indices = true; } else { ic = uv.size(); @@ -469,7 +469,7 @@ MeshInstanceEditor::MeshInstanceEditor() { options->get_popup()->add_item(TTR("View UV2"), MENU_OPTION_DEBUG_UV2); options->get_popup()->add_item(TTR("Unwrap UV2 for Lightmap/AO"), MENU_OPTION_CREATE_UV2); - options->get_popup()->connect("id_pressed", this, "_menu_option"); + options->get_popup()->connect_compat("id_pressed", this, "_menu_option"); outline_dialog = memnew(ConfirmationDialog); outline_dialog->set_title(TTR("Create Outline Mesh")); @@ -487,7 +487,7 @@ MeshInstanceEditor::MeshInstanceEditor() { outline_dialog_vbc->add_margin_child(TTR("Outline Size:"), outline_size); add_child(outline_dialog); - outline_dialog->connect("confirmed", this, "_create_outline_mesh"); + outline_dialog->connect_compat("confirmed", this, "_create_outline_mesh"); err_dialog = memnew(AcceptDialog); add_child(err_dialog); @@ -497,7 +497,7 @@ MeshInstanceEditor::MeshInstanceEditor() { add_child(debug_uv_dialog); debug_uv = memnew(Control); debug_uv->set_custom_minimum_size(Size2(600, 600) * EDSCALE); - debug_uv->connect("draw", this, "_debug_uv_draw"); + debug_uv->connect_compat("draw", this, "_debug_uv_draw"); debug_uv_dialog->add_child(debug_uv); } diff --git a/editor/plugins/mesh_library_editor_plugin.cpp b/editor/plugins/mesh_library_editor_plugin.cpp index 42859e9190..ea8842a56f 100644 --- a/editor/plugins/mesh_library_editor_plugin.cpp +++ b/editor/plugins/mesh_library_editor_plugin.cpp @@ -182,7 +182,7 @@ void MeshLibraryEditor::_import_scene(Node *p_scene, Ref<MeshLibrary> p_library, } } - Vector<Ref<Texture> > textures = EditorInterface::get_singleton()->make_mesh_previews(meshes, &transforms, EditorSettings::get_singleton()->get("editors/grid_map/preview_size")); + Vector<Ref<Texture2D> > textures = EditorInterface::get_singleton()->make_mesh_previews(meshes, &transforms, EditorSettings::get_singleton()->get("editors/grid_map/preview_size")); int j = 0; for (int i = 0; i < ids.size(); i++) { @@ -268,7 +268,7 @@ MeshLibraryEditor::MeshLibraryEditor(EditorNode *p_editor) { file->add_filter("*." + extensions[i] + " ; " + extensions[i].to_upper()); } add_child(file); - file->connect("file_selected", this, "_import_scene_cbk"); + file->connect_compat("file_selected", this, "_import_scene_cbk"); menu = memnew(MenuButton); SpatialEditor::get_singleton()->add_control_to_menu_panel(menu); @@ -281,13 +281,13 @@ MeshLibraryEditor::MeshLibraryEditor(EditorNode *p_editor) { menu->get_popup()->add_item(TTR("Import from Scene"), MENU_OPTION_IMPORT_FROM_SCENE); menu->get_popup()->add_item(TTR("Update from Scene"), MENU_OPTION_UPDATE_FROM_SCENE); menu->get_popup()->set_item_disabled(menu->get_popup()->get_item_index(MENU_OPTION_UPDATE_FROM_SCENE), true); - menu->get_popup()->connect("id_pressed", this, "_menu_cbk"); + menu->get_popup()->connect_compat("id_pressed", this, "_menu_cbk"); menu->hide(); editor = p_editor; cd = memnew(ConfirmationDialog); add_child(cd); - cd->get_ok()->connect("pressed", this, "_menu_confirm"); + cd->get_ok()->connect_compat("pressed", this, "_menu_confirm"); } void MeshLibraryEditorPlugin::edit(Object *p_node) { diff --git a/editor/plugins/multimesh_editor_plugin.cpp b/editor/plugins/multimesh_editor_plugin.cpp index 5dc222f84c..b2ce01b8d8 100644 --- a/editor/plugins/multimesh_editor_plugin.cpp +++ b/editor/plugins/multimesh_editor_plugin.cpp @@ -124,7 +124,7 @@ void MultiMeshEditor::_populate() { Transform geom_xform = node->get_global_transform().affine_inverse() * ss_instance->get_global_transform(); - PoolVector<Face3> geometry = ss_instance->get_faces(VisualInstance::FACES_SOLID); + Vector<Face3> geometry = ss_instance->get_faces(VisualInstance::FACES_SOLID); if (geometry.size() == 0) { @@ -136,7 +136,7 @@ void MultiMeshEditor::_populate() { //make all faces local int gc = geometry.size(); - PoolVector<Face3>::Write w = geometry.write(); + Face3 *w = geometry.ptrw(); for (int i = 0; i < gc; i++) { for (int j = 0; j < 3; j++) { @@ -144,13 +144,11 @@ void MultiMeshEditor::_populate() { } } - w.release(); - - PoolVector<Face3> faces = geometry; + Vector<Face3> faces = geometry; int facecount = faces.size(); ERR_FAIL_COND_MSG(!facecount, "Parent has no solid faces to populate."); - PoolVector<Face3>::Read r = faces.read(); + const Face3 *r = faces.ptr(); float area_accum = 0; Map<float, int> triangle_area_map; @@ -172,7 +170,7 @@ void MultiMeshEditor::_populate() { int instance_count = populate_amount->get_value(); multimesh->set_transform_format(MultiMesh::TRANSFORM_3D); - multimesh->set_color_format(MultiMesh::COLOR_NONE); + multimesh->set_use_colors(false); multimesh->set_instance_count(instance_count); float _tilt_random = populate_tilt_random->get_value(); @@ -297,7 +295,7 @@ MultiMeshEditor::MultiMeshEditor() { options->set_icon(EditorNode::get_singleton()->get_gui_base()->get_icon("MultiMeshInstance", "EditorIcons")); options->get_popup()->add_item(TTR("Populate Surface")); - options->get_popup()->connect("id_pressed", this, "_menu_option"); + options->get_popup()->connect_compat("id_pressed", this, "_menu_option"); populate_dialog = memnew(ConfirmationDialog); populate_dialog->set_title(TTR("Populate MultiMesh")); @@ -315,7 +313,7 @@ MultiMeshEditor::MultiMeshEditor() { Button *b = memnew(Button); hbc->add_child(b); b->set_text(".."); - b->connect("pressed", this, "_browse", make_binds(false)); + b->connect_compat("pressed", this, "_browse", make_binds(false)); vbc->add_margin_child(TTR("Target Surface:"), hbc); @@ -327,7 +325,7 @@ MultiMeshEditor::MultiMeshEditor() { hbc->add_child(b); b->set_text(".."); vbc->add_margin_child(TTR("Source Mesh:"), hbc); - b->connect("pressed", this, "_browse", make_binds(true)); + b->connect_compat("pressed", this, "_browse", make_binds(true)); populate_axis = memnew(OptionButton); populate_axis->add_item(TTR("X-Axis")); @@ -373,10 +371,10 @@ MultiMeshEditor::MultiMeshEditor() { populate_dialog->get_ok()->set_text(TTR("Populate")); - populate_dialog->get_ok()->connect("pressed", this, "_populate"); + populate_dialog->get_ok()->connect_compat("pressed", this, "_populate"); std = memnew(SceneTreeDialog); populate_dialog->add_child(std); - std->connect("selected", this, "_browsed"); + std->connect_compat("selected", this, "_browsed"); _last_pp_node = NULL; diff --git a/editor/plugins/particles_2d_editor_plugin.cpp b/editor/plugins/particles_2d_editor_plugin.cpp index b036368bc8..ab23cb9054 100644 --- a/editor/plugins/particles_2d_editor_plugin.cpp +++ b/editor/plugins/particles_2d_editor_plugin.cpp @@ -191,8 +191,8 @@ void Particles2DEditorPlugin::_generate_emission_mask() { int vpc = 0; { - PoolVector<uint8_t> data = img->get_data(); - PoolVector<uint8_t>::Read r = data.read(); + Vector<uint8_t> data = img->get_data(); + const uint8_t *r = data.ptr(); for (int i = 0; i < s.width; i++) { for (int j = 0; j < s.height; j++) { @@ -270,7 +270,7 @@ void Particles2DEditorPlugin::_generate_emission_mask() { ERR_FAIL_COND_MSG(valid_positions.size() == 0, "No pixels with transparency > 128 in image..."); - PoolVector<uint8_t> texdata; + Vector<uint8_t> texdata; int w = 2048; int h = (vpc / 2048) + 1; @@ -278,8 +278,8 @@ void Particles2DEditorPlugin::_generate_emission_mask() { texdata.resize(w * h * 2 * sizeof(float)); { - PoolVector<uint8_t>::Write tw = texdata.write(); - float *twf = (float *)tw.ptr(); + uint8_t *tw = texdata.ptrw(); + float *twf = (float *)tw; for (int i = 0; i < vpc; i++) { twf[i * 2 + 0] = valid_positions[i].x; @@ -292,18 +292,18 @@ void Particles2DEditorPlugin::_generate_emission_mask() { Ref<ImageTexture> imgt; imgt.instance(); - imgt->create_from_image(img, 0); + imgt->create_from_image(img); pm->set_emission_point_texture(imgt); pm->set_emission_point_count(vpc); if (capture_colors) { - PoolVector<uint8_t> colordata; + Vector<uint8_t> colordata; colordata.resize(w * h * 4); //use RG texture { - PoolVector<uint8_t>::Write tw = colordata.write(); + uint8_t *tw = colordata.ptrw(); for (int i = 0; i < vpc * 4; i++) { tw[i] = valid_colors[i]; @@ -314,19 +314,19 @@ void Particles2DEditorPlugin::_generate_emission_mask() { img->create(w, h, false, Image::FORMAT_RGBA8, colordata); imgt.instance(); - imgt->create_from_image(img, 0); + imgt->create_from_image(img); pm->set_emission_color_texture(imgt); } if (valid_normals.size()) { pm->set_emission_shape(ParticlesMaterial::EMISSION_SHAPE_DIRECTED_POINTS); - PoolVector<uint8_t> normdata; + Vector<uint8_t> normdata; normdata.resize(w * h * 2 * sizeof(float)); //use RG texture { - PoolVector<uint8_t>::Write tw = normdata.write(); - float *twf = (float *)tw.ptr(); + uint8_t *tw = normdata.ptrw(); + float *twf = (float *)tw; for (int i = 0; i < vpc; i++) { twf[i * 2 + 0] = valid_normals[i].x; twf[i * 2 + 1] = valid_normals[i].y; @@ -337,7 +337,7 @@ void Particles2DEditorPlugin::_generate_emission_mask() { img->create(w, h, false, Image::FORMAT_RGF, normdata); imgt.instance(); - imgt->create_from_image(img, 0); + imgt->create_from_image(img); pm->set_emission_normal_texture(imgt); } else { @@ -349,9 +349,9 @@ void Particles2DEditorPlugin::_notification(int p_what) { if (p_what == NOTIFICATION_ENTER_TREE) { - menu->get_popup()->connect("id_pressed", this, "_menu_callback"); + menu->get_popup()->connect_compat("id_pressed", this, "_menu_callback"); menu->set_icon(menu->get_popup()->get_icon("Particles2D", "EditorIcons")); - file->connect("file_selected", this, "_file_selected"); + file->connect_compat("file_selected", this, "_file_selected"); } } @@ -416,7 +416,7 @@ Particles2DEditorPlugin::Particles2DEditorPlugin(EditorNode *p_node) { toolbar->add_child(generate_visibility_rect); - generate_visibility_rect->connect("confirmed", this, "_generate_visibility_rect"); + generate_visibility_rect->connect_compat("confirmed", this, "_generate_visibility_rect"); emission_mask = memnew(ConfirmationDialog); emission_mask->set_title(TTR("Load Emission Mask")); @@ -433,7 +433,7 @@ Particles2DEditorPlugin::Particles2DEditorPlugin(EditorNode *p_node) { toolbar->add_child(emission_mask); - emission_mask->connect("confirmed", this, "_generate_emission_mask"); + emission_mask->connect_compat("confirmed", this, "_generate_emission_mask"); } Particles2DEditorPlugin::~Particles2DEditorPlugin() { diff --git a/editor/plugins/particles_editor_plugin.cpp b/editor/plugins/particles_editor_plugin.cpp index f869dabf9a..cea2182ae9 100644 --- a/editor/plugins/particles_editor_plugin.cpp +++ b/editor/plugins/particles_editor_plugin.cpp @@ -35,7 +35,7 @@ #include "scene/3d/cpu_particles.h" #include "scene/resources/particles_material.h" -bool ParticlesEditorBase::_generate(PoolVector<Vector3> &points, PoolVector<Vector3> &normals) { +bool ParticlesEditorBase::_generate(Vector<Vector3> &points, Vector<Vector3> &normals) { bool use_normals = emission_fill->get_selected() == 1; @@ -93,7 +93,7 @@ bool ParticlesEditorBase::_generate(PoolVector<Vector3> &points, PoolVector<Vect return false; } - PoolVector<Face3>::Read r = geometry.read(); + const Face3 *r = geometry.ptr(); AABB aabb; @@ -191,7 +191,7 @@ void ParticlesEditorBase::_node_selected(const NodePath &p_path) { Transform geom_xform = base_node->get_global_transform().affine_inverse() * vi->get_global_transform(); int gc = geometry.size(); - PoolVector<Face3>::Write w = geometry.write(); + Face3 *w = geometry.ptrw(); for (int i = 0; i < gc; i++) { for (int j = 0; j < 3; j++) { @@ -199,8 +199,6 @@ void ParticlesEditorBase::_node_selected(const NodePath &p_path) { } } - w.release(); - emission_dialog->popup_centered(Size2(300, 130)); } @@ -231,14 +229,14 @@ ParticlesEditorBase::ParticlesEditorBase() { emd_vb->add_margin_child(TTR("Emission Source: "), emission_fill); emission_dialog->get_ok()->set_text(TTR("Create")); - emission_dialog->connect("confirmed", this, "_generate_emission_points"); + emission_dialog->connect_compat("confirmed", this, "_generate_emission_points"); emission_file_dialog = memnew(EditorFileDialog); add_child(emission_file_dialog); - emission_file_dialog->connect("file_selected", this, "_resource_seleted"); + emission_file_dialog->connect_compat("file_selected", this, "_resource_seleted"); emission_tree_dialog = memnew(SceneTreeDialog); add_child(emission_tree_dialog); - emission_tree_dialog->connect("selected", this, "_node_selected"); + emission_tree_dialog->connect_compat("selected", this, "_node_selected"); List<String> extensions; ResourceLoader::get_recognized_extensions_for_type("Mesh", &extensions); @@ -264,7 +262,7 @@ void ParticlesEditor::_notification(int p_notification) { if (p_notification == NOTIFICATION_ENTER_TREE) { options->set_icon(options->get_popup()->get_icon("Particles", "EditorIcons")); - get_tree()->connect("node_removed", this, "_node_removed"); + get_tree()->connect_compat("node_removed", this, "_node_removed"); } } @@ -379,8 +377,8 @@ void ParticlesEditor::edit(Particles *p_particles) { void ParticlesEditor::_generate_emission_points() { /// hacer codigo aca - PoolVector<Vector3> points; - PoolVector<Vector3> normals; + Vector<Vector3> points; + Vector<Vector3> normals; if (!_generate(points, normals)) { return; @@ -391,14 +389,14 @@ void ParticlesEditor::_generate_emission_points() { int w = 2048; int h = (point_count / 2048) + 1; - PoolVector<uint8_t> point_img; + Vector<uint8_t> point_img; point_img.resize(w * h * 3 * sizeof(float)); { - PoolVector<uint8_t>::Write iw = point_img.write(); - zeromem(iw.ptr(), w * h * 3 * sizeof(float)); - PoolVector<Vector3>::Read r = points.read(); - float *wf = (float *)iw.ptr(); + uint8_t *iw = point_img.ptrw(); + zeromem(iw, w * h * 3 * sizeof(float)); + const Vector3 *r = points.ptr(); + float *wf = (float *)iw; for (int i = 0; i < point_count; i++) { wf[i * 3 + 0] = r[i].x; wf[i * 3 + 1] = r[i].y; @@ -410,7 +408,6 @@ void ParticlesEditor::_generate_emission_points() { Ref<ImageTexture> tex; tex.instance(); - tex->create_from_image(image, Texture::FLAG_FILTER); Ref<ParticlesMaterial> material = node->get_process_material(); ERR_FAIL_COND(material.is_null()); @@ -421,14 +418,14 @@ void ParticlesEditor::_generate_emission_points() { material->set_emission_point_count(point_count); material->set_emission_point_texture(tex); - PoolVector<uint8_t> point_img2; + Vector<uint8_t> point_img2; point_img2.resize(w * h * 3 * sizeof(float)); { - PoolVector<uint8_t>::Write iw = point_img2.write(); - zeromem(iw.ptr(), w * h * 3 * sizeof(float)); - PoolVector<Vector3>::Read r = normals.read(); - float *wf = (float *)iw.ptr(); + uint8_t *iw = point_img2.ptrw(); + zeromem(iw, w * h * 3 * sizeof(float)); + const Vector3 *r = normals.ptr(); + float *wf = (float *)iw; for (int i = 0; i < point_count; i++) { wf[i * 3 + 0] = r[i].x; wf[i * 3 + 1] = r[i].y; @@ -440,7 +437,6 @@ void ParticlesEditor::_generate_emission_points() { Ref<ImageTexture> tex2; tex2.instance(); - tex2->create_from_image(image2, Texture::FLAG_FILTER); material->set_emission_normal_texture(tex2); } else { @@ -478,7 +474,7 @@ ParticlesEditor::ParticlesEditor() { options->get_popup()->add_separator(); options->get_popup()->add_item(TTR("Restart"), MENU_OPTION_RESTART); - options->get_popup()->connect("id_pressed", this, "_menu_option"); + options->get_popup()->connect_compat("id_pressed", this, "_menu_option"); generate_aabb = memnew(ConfirmationDialog); generate_aabb->set_title(TTR("Generate Visibility AABB")); @@ -492,7 +488,7 @@ ParticlesEditor::ParticlesEditor() { add_child(generate_aabb); - generate_aabb->connect("confirmed", this, "_generate_aabb"); + generate_aabb->connect_compat("confirmed", this, "_generate_aabb"); } void ParticlesEditorPlugin::edit(Object *p_object) { diff --git a/editor/plugins/particles_editor_plugin.h b/editor/plugins/particles_editor_plugin.h index 4b20d00670..5419b7d3d5 100644 --- a/editor/plugins/particles_editor_plugin.h +++ b/editor/plugins/particles_editor_plugin.h @@ -53,9 +53,9 @@ protected: SpinBox *emission_amount; OptionButton *emission_fill; - PoolVector<Face3> geometry; + Vector<Face3> geometry; - bool _generate(PoolVector<Vector3> &points, PoolVector<Vector3> &normals); + bool _generate(Vector<Vector3> &points, Vector<Vector3> &normals); virtual void _generate_emission_points() = 0; void _node_selected(const NodePath &p_path); diff --git a/editor/plugins/path_2d_editor_plugin.cpp b/editor/plugins/path_2d_editor_plugin.cpp index 3737dbdd57..e642233c64 100644 --- a/editor/plugins/path_2d_editor_plugin.cpp +++ b/editor/plugins/path_2d_editor_plugin.cpp @@ -373,12 +373,12 @@ void Path2DEditor::forward_canvas_draw_over_viewport(Control *p_overlay) { Transform2D xform = canvas_item_editor->get_canvas_transform() * node->get_global_transform(); - const Ref<Texture> path_sharp_handle = get_icon("EditorPathSharpHandle", "EditorIcons"); - const Ref<Texture> path_smooth_handle = get_icon("EditorPathSmoothHandle", "EditorIcons"); + const Ref<Texture2D> path_sharp_handle = get_icon("EditorPathSharpHandle", "EditorIcons"); + const Ref<Texture2D> path_smooth_handle = get_icon("EditorPathSmoothHandle", "EditorIcons"); // Both handle icons must be of the same size const Size2 handle_size = path_sharp_handle->get_size(); - const Ref<Texture> curve_handle = get_icon("EditorCurveHandle", "EditorIcons"); + const Ref<Texture2D> curve_handle = get_icon("EditorCurveHandle", "EditorIcons"); const Size2 curve_handle_size = curve_handle->get_size(); Ref<Curve2D> curve = node->get_curve(); @@ -396,8 +396,8 @@ void Path2DEditor::forward_canvas_draw_over_viewport(Control *p_overlay) { if (point != pointout) { smooth = true; // Draw the line with a dark and light color to be visible on all backgrounds - vpc->draw_line(point, pointout, Color(0, 0, 0, 0.5), Math::round(EDSCALE), true); - vpc->draw_line(point, pointout, Color(1, 1, 1, 0.5), Math::round(EDSCALE), true); + vpc->draw_line(point, pointout, Color(0, 0, 0, 0.5), Math::round(EDSCALE)); + vpc->draw_line(point, pointout, Color(1, 1, 1, 0.5), Math::round(EDSCALE)); vpc->draw_texture_rect(curve_handle, Rect2(pointout - curve_handle_size * 0.5, curve_handle_size), false, Color(1, 1, 1, 0.75)); } } @@ -407,8 +407,8 @@ void Path2DEditor::forward_canvas_draw_over_viewport(Control *p_overlay) { if (point != pointin) { smooth = true; // Draw the line with a dark and light color to be visible on all backgrounds - vpc->draw_line(point, pointin, Color(0, 0, 0, 0.5), Math::round(EDSCALE), true); - vpc->draw_line(point, pointin, Color(1, 1, 1, 0.5), Math::round(EDSCALE), true); + vpc->draw_line(point, pointin, Color(0, 0, 0, 0.5), Math::round(EDSCALE)); + vpc->draw_line(point, pointin, Color(1, 1, 1, 0.5), Math::round(EDSCALE)); vpc->draw_texture_rect(curve_handle, Rect2(pointin - curve_handle_size * 0.5, curve_handle_size), false, Color(1, 1, 1, 0.75)); } } @@ -420,7 +420,7 @@ void Path2DEditor::forward_canvas_draw_over_viewport(Control *p_overlay) { } if (on_edge) { - Ref<Texture> add_handle = get_icon("EditorHandleAdd", "EditorIcons"); + Ref<Texture2D> add_handle = get_icon("EditorHandleAdd", "EditorIcons"); p_overlay->draw_texture(add_handle, edge_point - add_handle->get_size() * 0.5); } } @@ -441,14 +441,14 @@ void Path2DEditor::edit(Node *p_path2d) { if (p_path2d) { node = Object::cast_to<Path2D>(p_path2d); - if (!node->is_connected("visibility_changed", this, "_node_visibility_changed")) - node->connect("visibility_changed", this, "_node_visibility_changed"); + if (!node->is_connected_compat("visibility_changed", this, "_node_visibility_changed")) + node->connect_compat("visibility_changed", this, "_node_visibility_changed"); } else { // node may have been deleted at this point - if (node && node->is_connected("visibility_changed", this, "_node_visibility_changed")) - node->disconnect("visibility_changed", this, "_node_visibility_changed"); + if (node && node->is_connected_compat("visibility_changed", this, "_node_visibility_changed")) + node->disconnect_compat("visibility_changed", this, "_node_visibility_changed"); node = NULL; } } @@ -555,34 +555,34 @@ Path2DEditor::Path2DEditor(EditorNode *p_editor) { curve_edit->set_toggle_mode(true); curve_edit->set_focus_mode(Control::FOCUS_NONE); curve_edit->set_tooltip(TTR("Select Points") + "\n" + TTR("Shift+Drag: Select Control Points") + "\n" + keycode_get_string(KEY_MASK_CMD) + TTR("Click: Add Point") + "\n" + TTR("Left Click: Split Segment (in curve)") + "\n" + TTR("Right Click: Delete Point")); - curve_edit->connect("pressed", this, "_mode_selected", varray(MODE_EDIT)); + curve_edit->connect_compat("pressed", this, "_mode_selected", varray(MODE_EDIT)); base_hb->add_child(curve_edit); curve_edit_curve = memnew(ToolButton); curve_edit_curve->set_icon(EditorNode::get_singleton()->get_gui_base()->get_icon("CurveCurve", "EditorIcons")); curve_edit_curve->set_toggle_mode(true); curve_edit_curve->set_focus_mode(Control::FOCUS_NONE); curve_edit_curve->set_tooltip(TTR("Select Control Points (Shift+Drag)")); - curve_edit_curve->connect("pressed", this, "_mode_selected", varray(MODE_EDIT_CURVE)); + curve_edit_curve->connect_compat("pressed", this, "_mode_selected", varray(MODE_EDIT_CURVE)); base_hb->add_child(curve_edit_curve); curve_create = memnew(ToolButton); curve_create->set_icon(EditorNode::get_singleton()->get_gui_base()->get_icon("CurveCreate", "EditorIcons")); curve_create->set_toggle_mode(true); curve_create->set_focus_mode(Control::FOCUS_NONE); curve_create->set_tooltip(TTR("Add Point (in empty space)")); - curve_create->connect("pressed", this, "_mode_selected", varray(MODE_CREATE)); + curve_create->connect_compat("pressed", this, "_mode_selected", varray(MODE_CREATE)); base_hb->add_child(curve_create); curve_del = memnew(ToolButton); curve_del->set_icon(EditorNode::get_singleton()->get_gui_base()->get_icon("CurveDelete", "EditorIcons")); curve_del->set_toggle_mode(true); curve_del->set_focus_mode(Control::FOCUS_NONE); curve_del->set_tooltip(TTR("Delete Point")); - curve_del->connect("pressed", this, "_mode_selected", varray(MODE_DELETE)); + curve_del->connect_compat("pressed", this, "_mode_selected", varray(MODE_DELETE)); base_hb->add_child(curve_del); curve_close = memnew(ToolButton); curve_close->set_icon(EditorNode::get_singleton()->get_gui_base()->get_icon("CurveClose", "EditorIcons")); curve_close->set_focus_mode(Control::FOCUS_NONE); curve_close->set_tooltip(TTR("Close Curve")); - curve_close->connect("pressed", this, "_mode_selected", varray(ACTION_CLOSE)); + curve_close->connect_compat("pressed", this, "_mode_selected", varray(ACTION_CLOSE)); base_hb->add_child(curve_close); PopupMenu *menu; @@ -596,7 +596,7 @@ Path2DEditor::Path2DEditor(EditorNode *p_editor) { menu->set_item_checked(HANDLE_OPTION_ANGLE, mirror_handle_angle); menu->add_check_item(TTR("Mirror Handle Lengths")); menu->set_item_checked(HANDLE_OPTION_LENGTH, mirror_handle_length); - menu->connect("id_pressed", this, "_handle_option_pressed"); + menu->connect_compat("id_pressed", this, "_handle_option_pressed"); base_hb->hide(); diff --git a/editor/plugins/path_editor_plugin.cpp b/editor/plugins/path_editor_plugin.cpp index 67889bc074..b955bf7f41 100644 --- a/editor/plugins/path_editor_plugin.cpp +++ b/editor/plugins/path_editor_plugin.cpp @@ -221,22 +221,22 @@ void PathSpatialGizmo::redraw() { clear(); - Ref<SpatialMaterial> path_material = gizmo_plugin->get_material("path_material", this); - Ref<SpatialMaterial> path_thin_material = gizmo_plugin->get_material("path_thin_material", this); - Ref<SpatialMaterial> handles_material = gizmo_plugin->get_material("handles"); + Ref<StandardMaterial3D> path_material = gizmo_plugin->get_material("path_material", this); + Ref<StandardMaterial3D> path_thin_material = gizmo_plugin->get_material("path_thin_material", this); + Ref<StandardMaterial3D> handles_material = gizmo_plugin->get_material("handles"); Ref<Curve3D> c = path->get_curve(); if (c.is_null()) return; - PoolVector<Vector3> v3a = c->tessellate(); - //PoolVector<Vector3> v3a=c->get_baked_points(); + Vector<Vector3> v3a = c->tessellate(); + //Vector<Vector3> v3a=c->get_baked_points(); int v3s = v3a.size(); if (v3s == 0) return; Vector<Vector3> v3p; - PoolVector<Vector3>::Read r = v3a.read(); + const Vector3 *r = v3a.ptr(); // BUG: the following won't work when v3s, avoid drawing as a temporary workaround. for (int i = 0; i < v3s - 1; i++) { @@ -315,7 +315,7 @@ bool PathEditorPlugin::forward_spatial_gui_input(Camera *p_camera, const Ref<Inp if (mb->is_pressed() && mb->get_button_index() == BUTTON_LEFT && (curve_create->is_pressed() || (curve_edit->is_pressed() && mb->get_control()))) { //click into curve, break it down - PoolVector<Vector3> v3a = c->tessellate(); + Vector<Vector3> v3a = c->tessellate(); int idx = 0; int rc = v3a.size(); int closest_seg = -1; @@ -323,7 +323,7 @@ bool PathEditorPlugin::forward_spatial_gui_input(Camera *p_camera, const Ref<Inp float closest_d = 1e20; if (rc >= 2) { - PoolVector<Vector3>::Read r = v3a.read(); + const Vector3 *r = v3a.ptr(); if (p_camera->unproject_position(gt.xform(c->get_point_position(0))).distance_to(mbpos) < click_dist) return false; //nope, existing @@ -543,10 +543,10 @@ void PathEditorPlugin::_notification(int p_what) { if (p_what == NOTIFICATION_ENTER_TREE) { - curve_create->connect("pressed", this, "_mode_changed", make_binds(0)); - curve_edit->connect("pressed", this, "_mode_changed", make_binds(1)); - curve_del->connect("pressed", this, "_mode_changed", make_binds(2)); - curve_close->connect("pressed", this, "_close_curve"); + curve_create->connect_compat("pressed", this, "_mode_changed", make_binds(0)); + curve_edit->connect_compat("pressed", this, "_mode_changed", make_binds(1)); + curve_del->connect_compat("pressed", this, "_mode_changed", make_binds(2)); + curve_close->connect_compat("pressed", this, "_close_curve"); } } @@ -614,7 +614,7 @@ PathEditorPlugin::PathEditorPlugin(EditorNode *p_node) { menu->set_item_checked(HANDLE_OPTION_ANGLE, mirror_handle_angle); menu->add_check_item(TTR("Mirror Handle Lengths")); menu->set_item_checked(HANDLE_OPTION_LENGTH, mirror_handle_length); - menu->connect("id_pressed", this, "_handle_option_pressed"); + menu->connect_compat("id_pressed", this, "_handle_option_pressed"); curve_edit->set_pressed(true); /* diff --git a/editor/plugins/physical_bone_plugin.cpp b/editor/plugins/physical_bone_plugin.cpp index 28099a927b..4b63d82961 100644 --- a/editor/plugins/physical_bone_plugin.cpp +++ b/editor/plugins/physical_bone_plugin.cpp @@ -64,7 +64,7 @@ PhysicalBoneEditor::PhysicalBoneEditor(EditorNode *p_editor) : button_transform_joint->set_text(TTR("Move Joint")); button_transform_joint->set_icon(SpatialEditor::get_singleton()->get_icon("PhysicalBone", "EditorIcons")); button_transform_joint->set_toggle_mode(true); - button_transform_joint->connect("toggled", this, "_on_toggle_button_transform_joint"); + button_transform_joint->connect_compat("toggled", this, "_on_toggle_button_transform_joint"); hide(); } diff --git a/editor/plugins/polygon_2d_editor_plugin.cpp b/editor/plugins/polygon_2d_editor_plugin.cpp index 35c0142d4b..91c0222f6d 100644 --- a/editor/plugins/polygon_2d_editor_plugin.cpp +++ b/editor/plugins/polygon_2d_editor_plugin.cpp @@ -125,12 +125,12 @@ void Polygon2DEditor::_sync_bones() { } else { for (int i = 0; i < skeleton->get_bone_count(); i++) { NodePath path = skeleton->get_path_to(skeleton->get_bone(i)); - PoolVector<float> weights; + Vector<float> weights; int wc = node->get_polygon().size(); for (int j = 0; j < prev_bones.size(); j += 2) { NodePath pvp = prev_bones[j]; - PoolVector<float> pv = prev_bones[j + 1]; + Vector<float> pv = prev_bones[j + 1]; if (pvp == path && pv.size() == wc) { weights = pv; } @@ -138,7 +138,7 @@ void Polygon2DEditor::_sync_bones() { if (weights.size() == 0) { //create them weights.resize(node->get_polygon().size()); - PoolVector<float>::Write w = weights.write(); + float *w = weights.ptrw(); for (int j = 0; j < wc; j++) { w[j] = 0.0; } @@ -192,7 +192,7 @@ void Polygon2DEditor::_update_bone_list() { if (np == selected || bone_scroll_vb->get_child_count() < 2) cb->set_pressed(true); - cb->connect("pressed", this, "_bone_paint_selected", varray(i)); + cb->connect_compat("pressed", this, "_bone_paint_selected", varray(i)); } uv_edit_draw->update(); @@ -293,8 +293,8 @@ void Polygon2DEditor::_menu_option(int p_option) { return; } - PoolVector<Vector2> points = node->get_polygon(); - PoolVector<Vector2> uvs = node->get_uv(); + Vector<Vector2> points = node->get_polygon(); + Vector<Vector2> uvs = node->get_uv(); if (uvs.size() != points.size()) { undo_redo->create_action(TTR("Create UV Map")); undo_redo->add_do_method(node, "set_uv", points); @@ -312,10 +312,10 @@ void Polygon2DEditor::_menu_option(int p_option) { } break; case UVEDIT_POLYGON_TO_UV: { - PoolVector<Vector2> points = node->get_polygon(); + Vector<Vector2> points = node->get_polygon(); if (points.size() == 0) break; - PoolVector<Vector2> uvs = node->get_uv(); + Vector<Vector2> uvs = node->get_uv(); undo_redo->create_action(TTR("Create UV Map")); undo_redo->add_do_method(node, "set_uv", points); undo_redo->add_undo_method(node, "set_uv", uvs); @@ -325,8 +325,8 @@ void Polygon2DEditor::_menu_option(int p_option) { } break; case UVEDIT_UV_TO_POLYGON: { - PoolVector<Vector2> points = node->get_polygon(); - PoolVector<Vector2> uvs = node->get_uv(); + Vector<Vector2> points = node->get_polygon(); + Vector<Vector2> uvs = node->get_uv(); if (uvs.size() == 0) break; @@ -339,11 +339,11 @@ void Polygon2DEditor::_menu_option(int p_option) { } break; case UVEDIT_UV_CLEAR: { - PoolVector<Vector2> uvs = node->get_uv(); + Vector<Vector2> uvs = node->get_uv(); if (uvs.size() == 0) break; undo_redo->create_action(TTR("Create UV Map")); - undo_redo->add_do_method(node, "set_uv", PoolVector<Vector2>()); + undo_redo->add_do_method(node, "set_uv", Vector<Vector2>()); undo_redo->add_undo_method(node, "set_uv", uvs); undo_redo->add_do_method(uv_edit_draw, "update"); undo_redo->add_undo_method(uv_edit_draw, "update"); @@ -567,7 +567,7 @@ void Polygon2DEditor::_uv_input(const Ref<InputEvent> &p_input) { undo_redo->add_do_method(node, "set_vertex_colors", uv_create_colors_prev); undo_redo->add_undo_method(node, "set_vertex_colors", node->get_vertex_colors()); for (int i = 0; i < node->get_bone_count(); i++) { - PoolVector<float> bonew = node->get_bone_weights(i); + Vector<float> bonew = node->get_bone_weights(i); bonew.push_back(0); undo_redo->add_do_method(node, "set_bone_weights", i, bonew); undo_redo->add_undo_method(node, "set_bone_weights", i, node->get_bone_weights(i)); @@ -622,7 +622,7 @@ void Polygon2DEditor::_uv_input(const Ref<InputEvent> &p_input) { undo_redo->add_do_method(node, "set_vertex_colors", uv_create_colors_prev); undo_redo->add_undo_method(node, "set_vertex_colors", node->get_vertex_colors()); for (int i = 0; i < node->get_bone_count(); i++) { - PoolVector<float> bonew = node->get_bone_weights(i); + Vector<float> bonew = node->get_bone_weights(i); bonew.remove(closest); undo_redo->add_do_method(node, "set_bone_weights", i, bonew); undo_redo->add_undo_method(node, "set_bone_weights", i, node->get_bone_weights(i)); @@ -712,7 +712,7 @@ void Polygon2DEditor::_uv_input(const Ref<InputEvent> &p_input) { int erase_index = -1; for (int i = polygons.size() - 1; i >= 0; i--) { - PoolVector<int> points = polygons[i]; + Vector<int> points = polygons[i]; Vector<Vector2> polys; polys.resize(points.size()); for (int j = 0; j < polys.size(); j++) { @@ -832,7 +832,7 @@ void Polygon2DEditor::_uv_input(const Ref<InputEvent> &p_input) { } break; case UV_MODE_EDIT_POINT: { - PoolVector<Vector2> uv_new = points_prev; + Vector<Vector2> uv_new = points_prev; uv_new.set(point_drag_index, uv_new[point_drag_index] + drag); if (uv_edit_mode[0]->is_pressed()) { //edit uv @@ -843,7 +843,7 @@ void Polygon2DEditor::_uv_input(const Ref<InputEvent> &p_input) { } break; case UV_MODE_MOVE: { - PoolVector<Vector2> uv_new = points_prev; + Vector<Vector2> uv_new = points_prev; for (int i = 0; i < uv_new.size(); i++) uv_new.set(i, uv_new[i] + drag); @@ -856,7 +856,7 @@ void Polygon2DEditor::_uv_input(const Ref<InputEvent> &p_input) { case UV_MODE_ROTATE: { Vector2 center; - PoolVector<Vector2> uv_new = points_prev; + Vector<Vector2> uv_new = points_prev; for (int i = 0; i < uv_new.size(); i++) center += points_prev[i]; @@ -879,7 +879,7 @@ void Polygon2DEditor::_uv_input(const Ref<InputEvent> &p_input) { case UV_MODE_SCALE: { Vector2 center; - PoolVector<Vector2> uv_new = points_prev; + Vector<Vector2> uv_new = points_prev; for (int i = 0; i < uv_new.size(); i++) center += points_prev[i]; @@ -914,7 +914,7 @@ void Polygon2DEditor::_uv_input(const Ref<InputEvent> &p_input) { } if (bone_painting) { - PoolVector<float> painted_weights = node->get_bone_weights(bone_painting_bone); + Vector<float> painted_weights = node->get_bone_weights(bone_painting_bone); { int pc = painted_weights.size(); @@ -925,9 +925,9 @@ void Polygon2DEditor::_uv_input(const Ref<InputEvent> &p_input) { amount = -amount; } - PoolVector<float>::Write w = painted_weights.write(); - PoolVector<float>::Read r = prev_weights.read(); - PoolVector<Vector2>::Read rv = points_prev.read(); + float *w = painted_weights.ptrw(); + const float *r = prev_weights.ptr(); + const Vector2 *rv = points_prev.ptr(); for (int i = 0; i < pc; i++) { if (mtx.xform(rv[i]).distance_to(bone_paint_pos) < radius) { @@ -980,7 +980,7 @@ void Polygon2DEditor::_uv_draw() { if (!uv_edit->is_visible() || !_get_node()) return; - Ref<Texture> base_tex = node->get_texture(); + Ref<Texture2D> base_tex = node->get_texture(); if (base_tex.is_null()) return; @@ -1024,14 +1024,14 @@ void Polygon2DEditor::_uv_draw() { Array polygons = node->get_polygons(); - PoolVector<Vector2> uvs; + Vector<Vector2> uvs; if (uv_edit_mode[0]->is_pressed()) { //edit uv uvs = node->get_uv(); } else { //edit polygon uvs = node->get_polygon(); } - PoolVector<float>::Read weight_r; + const float *weight_r; if (uv_edit_mode[3]->is_pressed()) { int bone_selected = -1; @@ -1045,12 +1045,12 @@ void Polygon2DEditor::_uv_draw() { if (bone_selected != -1 && node->get_bone_weights(bone_selected).size() == uvs.size()) { - weight_r = node->get_bone_weights(bone_selected).read(); + weight_r = node->get_bone_weights(bone_selected).ptr(); } } // All UV points are sharp, so use the sharp handle icon - Ref<Texture> handle = get_icon("EditorPathSharpHandle", "EditorIcons"); + Ref<Texture2D> handle = get_icon("EditorPathSharpHandle", "EditorIcons"); Color poly_line_color = Color(0.9, 0.5, 0.5); if (polygons.size() || polygon_create.size()) { @@ -1078,7 +1078,7 @@ void Polygon2DEditor::_uv_draw() { int next = uv_draw_max > 0 ? (i + 1) % uv_draw_max : 0; if (i < uv_draw_max && uv_drag && uv_move_current == UV_MODE_EDIT_POINT && EDITOR_DEF("editors/poly_editor/show_previous_outline", true)) { - uv_edit_draw->draw_line(mtx.xform(points_prev[i]), mtx.xform(points_prev[next]), prev_color, Math::round(EDSCALE), true); + uv_edit_draw->draw_line(mtx.xform(points_prev[i]), mtx.xform(points_prev[next]), prev_color, Math::round(EDSCALE)); } Vector2 next_point = uvs[next]; @@ -1086,7 +1086,7 @@ void Polygon2DEditor::_uv_draw() { next_point = uv_create_to; } if (i < uv_draw_max /*&& polygons.size() == 0 && polygon_create.size() == 0*/) { //if using or creating polygons, do not show outline (will show polygons instead) - uv_edit_draw->draw_line(mtx.xform(uvs[i]), mtx.xform(next_point), poly_line_color, Math::round(EDSCALE), true); + uv_edit_draw->draw_line(mtx.xform(uvs[i]), mtx.xform(next_point), poly_line_color, Math::round(EDSCALE)); } rect.expand_to(mtx.basis_xform(uvs[i])); @@ -1094,7 +1094,7 @@ void Polygon2DEditor::_uv_draw() { for (int i = 0; i < polygons.size(); i++) { - PoolVector<int> points = polygons[i]; + Vector<int> points = polygons[i]; Vector<Vector2> polypoints; for (int j = 0; j < points.size(); j++) { int next = (j + 1) % points.size(); @@ -1107,7 +1107,7 @@ void Polygon2DEditor::_uv_draw() { if (idx_next < 0 || idx_next >= uvs.size()) continue; - uv_edit_draw->draw_line(mtx.xform(uvs[idx]), mtx.xform(uvs[idx_next]), polygon_line_color, Math::round(EDSCALE), true); + uv_edit_draw->draw_line(mtx.xform(uvs[idx]), mtx.xform(uvs[idx_next]), polygon_line_color, Math::round(EDSCALE)); } if (points.size() >= 3) { uv_edit_draw->draw_polygon(polypoints, polygon_fill_color); @@ -1116,7 +1116,7 @@ void Polygon2DEditor::_uv_draw() { for (int i = 0; i < uvs.size(); i++) { - if (weight_r.ptr()) { + if (weight_r) { Vector2 draw_pos = mtx.xform(uvs[i]); float weight = weight_r[i]; uv_edit_draw->draw_rect(Rect2(draw_pos - Vector2(2, 2) * EDSCALE, Vector2(5, 5) * EDSCALE), Color(weight, weight, weight, 1.0), Math::round(EDSCALE)); @@ -1134,7 +1134,7 @@ void Polygon2DEditor::_uv_draw() { for (int i = 0; i < polygon_create.size(); i++) { Vector2 from = uvs[polygon_create[i]]; Vector2 to = (i + 1) < polygon_create.size() ? uvs[polygon_create[i + 1]] : uv_create_to; - uv_edit_draw->draw_line(mtx.xform(from), mtx.xform(to), polygon_line_color, Math::round(EDSCALE), true); + uv_edit_draw->draw_line(mtx.xform(from), mtx.xform(to), polygon_line_color, Math::round(EDSCALE)); } } @@ -1273,14 +1273,14 @@ Polygon2DEditor::Polygon2DEditor(EditorNode *p_editor) : button_uv = memnew(ToolButton); add_child(button_uv); button_uv->set_tooltip(TTR("Open Polygon 2D UV editor.")); - button_uv->connect("pressed", this, "_menu_option", varray(MODE_EDIT_UV)); + button_uv->connect_compat("pressed", this, "_menu_option", varray(MODE_EDIT_UV)); uv_mode = UV_MODE_EDIT_POINT; uv_edit = memnew(AcceptDialog); add_child(uv_edit); uv_edit->set_title(TTR("Polygon 2D UV Editor")); uv_edit->set_resizable(true); - uv_edit->connect("popup_hide", this, "_uv_edit_popup_hide"); + uv_edit->connect_compat("popup_hide", this, "_uv_edit_popup_hide"); VBoxContainer *uv_main_vb = memnew(VBoxContainer); uv_edit->add_child(uv_main_vb); @@ -1312,10 +1312,10 @@ Polygon2DEditor::Polygon2DEditor(EditorNode *p_editor) : uv_edit_mode[2]->set_button_group(uv_edit_group); uv_edit_mode[3]->set_button_group(uv_edit_group); - uv_edit_mode[0]->connect("pressed", this, "_uv_edit_mode_select", varray(0)); - uv_edit_mode[1]->connect("pressed", this, "_uv_edit_mode_select", varray(1)); - uv_edit_mode[2]->connect("pressed", this, "_uv_edit_mode_select", varray(2)); - uv_edit_mode[3]->connect("pressed", this, "_uv_edit_mode_select", varray(3)); + uv_edit_mode[0]->connect_compat("pressed", this, "_uv_edit_mode_select", varray(0)); + uv_edit_mode[1]->connect_compat("pressed", this, "_uv_edit_mode_select", varray(1)); + uv_edit_mode[2]->connect_compat("pressed", this, "_uv_edit_mode_select", varray(2)); + uv_edit_mode[3]->connect_compat("pressed", this, "_uv_edit_mode_select", varray(3)); uv_mode_hb->add_child(memnew(VSeparator)); @@ -1325,7 +1325,7 @@ Polygon2DEditor::Polygon2DEditor(EditorNode *p_editor) : uv_button[i] = memnew(ToolButton); uv_button[i]->set_toggle_mode(true); uv_mode_hb->add_child(uv_button[i]); - uv_button[i]->connect("pressed", this, "_uv_mode", varray(i)); + uv_button[i]->connect_compat("pressed", this, "_uv_mode", varray(i)); uv_button[i]->set_focus_mode(FOCUS_NONE); } @@ -1388,7 +1388,7 @@ Polygon2DEditor::Polygon2DEditor(EditorNode *p_editor) : uv_menu->get_popup()->add_item(TTR("Clear UV"), UVEDIT_UV_CLEAR); uv_menu->get_popup()->add_separator(); uv_menu->get_popup()->add_item(TTR("Grid Settings"), UVEDIT_GRID_SETTINGS); - uv_menu->get_popup()->connect("id_pressed", this, "_menu_option"); + uv_menu->get_popup()->connect_compat("id_pressed", this, "_menu_option"); uv_mode_hb->add_child(memnew(VSeparator)); @@ -1399,7 +1399,7 @@ Polygon2DEditor::Polygon2DEditor(EditorNode *p_editor) : b_snap_enable->set_toggle_mode(true); b_snap_enable->set_pressed(use_snap); b_snap_enable->set_tooltip(TTR("Enable Snap")); - b_snap_enable->connect("toggled", this, "_set_use_snap"); + b_snap_enable->connect_compat("toggled", this, "_set_use_snap"); b_snap_grid = memnew(ToolButton); uv_mode_hb->add_child(b_snap_grid); @@ -1408,7 +1408,7 @@ Polygon2DEditor::Polygon2DEditor(EditorNode *p_editor) : b_snap_grid->set_toggle_mode(true); b_snap_grid->set_pressed(snap_show_grid); b_snap_grid->set_tooltip(TTR("Show Grid")); - b_snap_grid->connect("toggled", this, "_set_show_grid"); + b_snap_grid->connect_compat("toggled", this, "_set_show_grid"); grid_settings = memnew(AcceptDialog); grid_settings->set_title(TTR("Configure Grid:")); @@ -1422,7 +1422,7 @@ Polygon2DEditor::Polygon2DEditor(EditorNode *p_editor) : sb_off_x->set_step(1); sb_off_x->set_value(snap_offset.x); sb_off_x->set_suffix("px"); - sb_off_x->connect("value_changed", this, "_set_snap_off_x"); + sb_off_x->connect_compat("value_changed", this, "_set_snap_off_x"); grid_settings_vb->add_margin_child(TTR("Grid Offset X:"), sb_off_x); SpinBox *sb_off_y = memnew(SpinBox); @@ -1431,7 +1431,7 @@ Polygon2DEditor::Polygon2DEditor(EditorNode *p_editor) : sb_off_y->set_step(1); sb_off_y->set_value(snap_offset.y); sb_off_y->set_suffix("px"); - sb_off_y->connect("value_changed", this, "_set_snap_off_y"); + sb_off_y->connect_compat("value_changed", this, "_set_snap_off_y"); grid_settings_vb->add_margin_child(TTR("Grid Offset Y:"), sb_off_y); SpinBox *sb_step_x = memnew(SpinBox); @@ -1440,7 +1440,7 @@ Polygon2DEditor::Polygon2DEditor(EditorNode *p_editor) : sb_step_x->set_step(1); sb_step_x->set_value(snap_step.x); sb_step_x->set_suffix("px"); - sb_step_x->connect("value_changed", this, "_set_snap_step_x"); + sb_step_x->connect_compat("value_changed", this, "_set_snap_step_x"); grid_settings_vb->add_margin_child(TTR("Grid Step X:"), sb_step_x); SpinBox *sb_step_y = memnew(SpinBox); @@ -1449,7 +1449,7 @@ Polygon2DEditor::Polygon2DEditor(EditorNode *p_editor) : sb_step_y->set_step(1); sb_step_y->set_value(snap_step.y); sb_step_y->set_suffix("px"); - sb_step_y->connect("value_changed", this, "_set_snap_step_y"); + sb_step_y->connect_compat("value_changed", this, "_set_snap_step_y"); grid_settings_vb->add_margin_child(TTR("Grid Step Y:"), sb_step_y); uv_mode_hb->add_child(memnew(VSeparator)); @@ -1469,16 +1469,16 @@ Polygon2DEditor::Polygon2DEditor(EditorNode *p_editor) : uv_zoom->share(uv_zoom_value); uv_zoom_value->set_custom_minimum_size(Size2(50, 0)); uv_mode_hb->add_child(uv_zoom_value); - uv_zoom->connect("value_changed", this, "_uv_scroll_changed"); + uv_zoom->connect_compat("value_changed", this, "_uv_scroll_changed"); uv_vscroll = memnew(VScrollBar); uv_vscroll->set_step(0.001); uv_edit_draw->add_child(uv_vscroll); - uv_vscroll->connect("value_changed", this, "_uv_scroll_changed"); + uv_vscroll->connect_compat("value_changed", this, "_uv_scroll_changed"); uv_hscroll = memnew(HScrollBar); uv_hscroll->set_step(0.001); uv_edit_draw->add_child(uv_hscroll); - uv_hscroll->connect("value_changed", this, "_uv_scroll_changed"); + uv_hscroll->connect_compat("value_changed", this, "_uv_scroll_changed"); bone_scroll_main_vb = memnew(VBoxContainer); bone_scroll_main_vb->hide(); @@ -1486,7 +1486,7 @@ Polygon2DEditor::Polygon2DEditor(EditorNode *p_editor) : sync_bones = memnew(Button(TTR("Sync Bones to Polygon"))); bone_scroll_main_vb->add_child(sync_bones); sync_bones->set_h_size_flags(0); - sync_bones->connect("pressed", this, "_sync_bones"); + sync_bones->connect_compat("pressed", this, "_sync_bones"); uv_main_hsc->add_child(bone_scroll_main_vb); bone_scroll = memnew(ScrollContainer); bone_scroll->set_v_scroll(true); @@ -1496,8 +1496,8 @@ Polygon2DEditor::Polygon2DEditor(EditorNode *p_editor) : bone_scroll_vb = memnew(VBoxContainer); bone_scroll->add_child(bone_scroll_vb); - uv_edit_draw->connect("draw", this, "_uv_draw"); - uv_edit_draw->connect("gui_input", this, "_uv_input"); + uv_edit_draw->connect_compat("draw", this, "_uv_draw"); + uv_edit_draw->connect_compat("gui_input", this, "_uv_input"); uv_draw_zoom = 1.0; point_drag_index = -1; uv_drag = false; diff --git a/editor/plugins/polygon_2d_editor_plugin.h b/editor/plugins/polygon_2d_editor_plugin.h index 1454a03325..2b00b50e5c 100644 --- a/editor/plugins/polygon_2d_editor_plugin.h +++ b/editor/plugins/polygon_2d_editor_plugin.h @@ -88,7 +88,7 @@ class Polygon2DEditor : public AbstractPolygon2DEditor { Label *bone_paint_radius_label; bool bone_painting; int bone_painting_bone; - PoolVector<float> prev_weights; + Vector<float> prev_weights; Vector2 bone_paint_pos; AcceptDialog *grid_settings; @@ -97,10 +97,10 @@ class Polygon2DEditor : public AbstractPolygon2DEditor { Vector2 uv_draw_ofs; float uv_draw_zoom; - PoolVector<Vector2> points_prev; - PoolVector<Vector2> uv_create_uv_prev; - PoolVector<Vector2> uv_create_poly_prev; - PoolVector<Color> uv_create_colors_prev; + Vector<Vector2> points_prev; + Vector<Vector2> uv_create_uv_prev; + Vector<Vector2> uv_create_poly_prev; + Vector<Color> uv_create_colors_prev; int uv_create_prev_internal_vertices; Array uv_create_bones_prev; Array polygons_prev; diff --git a/editor/plugins/resource_preloader_editor_plugin.cpp b/editor/plugins/resource_preloader_editor_plugin.cpp index fb04f50827..12b8ac9008 100644 --- a/editor/plugins/resource_preloader_editor_plugin.cpp +++ b/editor/plugins/resource_preloader_editor_plugin.cpp @@ -382,7 +382,7 @@ ResourcePreloaderEditor::ResourcePreloaderEditor() { add_child(file); tree = memnew(Tree); - tree->connect("button_pressed", this, "_cell_button_pressed"); + tree->connect_compat("button_pressed", this, "_cell_button_pressed"); tree->set_columns(2); tree->set_column_min_width(0, 2); tree->set_column_min_width(1, 3); @@ -396,10 +396,10 @@ ResourcePreloaderEditor::ResourcePreloaderEditor() { dialog = memnew(AcceptDialog); add_child(dialog); - load->connect("pressed", this, "_load_pressed"); - paste->connect("pressed", this, "_paste_pressed"); - file->connect("files_selected", this, "_files_load_request"); - tree->connect("item_edited", this, "_item_edited"); + load->connect_compat("pressed", this, "_load_pressed"); + paste->connect_compat("pressed", this, "_paste_pressed"); + file->connect_compat("files_selected", this, "_files_load_request"); + tree->connect_compat("item_edited", this, "_item_edited"); loading_scene = false; } diff --git a/editor/plugins/root_motion_editor_plugin.cpp b/editor/plugins/root_motion_editor_plugin.cpp index 3489537fa4..132ec40dd2 100644 --- a/editor/plugins/root_motion_editor_plugin.cpp +++ b/editor/plugins/root_motion_editor_plugin.cpp @@ -205,7 +205,7 @@ void EditorPropertyRootMotion::update_property() { assign->set_tooltip(p); if (p == NodePath()) { - assign->set_icon(Ref<Texture>()); + assign->set_icon(Ref<Texture2D>()); assign->set_text(TTR("Assign...")); assign->set_flat(false); return; @@ -222,7 +222,7 @@ void EditorPropertyRootMotion::update_property() { } if (!base_node || !base_node->has_node(p)) { - assign->set_icon(Ref<Texture>()); + assign->set_icon(Ref<Texture2D>()); assign->set_text(p); return; } @@ -242,7 +242,7 @@ void EditorPropertyRootMotion::setup(const NodePath &p_base_hint) { void EditorPropertyRootMotion::_notification(int p_what) { if (p_what == NOTIFICATION_ENTER_TREE || p_what == NOTIFICATION_THEME_CHANGED) { - Ref<Texture> t = get_icon("Clear", "EditorIcons"); + Ref<Texture2D> t = get_icon("Clear", "EditorIcons"); clear->set_icon(t); } } @@ -262,24 +262,24 @@ EditorPropertyRootMotion::EditorPropertyRootMotion() { assign->set_flat(true); assign->set_h_size_flags(SIZE_EXPAND_FILL); assign->set_clip_text(true); - assign->connect("pressed", this, "_node_assign"); + assign->connect_compat("pressed", this, "_node_assign"); hbc->add_child(assign); clear = memnew(Button); clear->set_flat(true); - clear->connect("pressed", this, "_node_clear"); + clear->connect_compat("pressed", this, "_node_clear"); hbc->add_child(clear); filter_dialog = memnew(ConfirmationDialog); add_child(filter_dialog); filter_dialog->set_title(TTR("Edit Filtered Tracks:")); - filter_dialog->connect("confirmed", this, "_confirmed"); + filter_dialog->connect_compat("confirmed", this, "_confirmed"); filters = memnew(Tree); filter_dialog->add_child(filters); filters->set_v_size_flags(SIZE_EXPAND_FILL); filters->set_hide_root(true); - filters->connect("item_activated", this, "_confirmed"); + filters->connect_compat("item_activated", this, "_confirmed"); //filters->connect("item_edited", this, "_filter_edited"); } ////////////////////////// diff --git a/editor/plugins/script_editor_plugin.cpp b/editor/plugins/script_editor_plugin.cpp index 1da47196f8..9dc98dc2a0 100644 --- a/editor/plugins/script_editor_plugin.cpp +++ b/editor/plugins/script_editor_plugin.cpp @@ -36,6 +36,8 @@ #include "core/os/keyboard.h" #include "core/os/os.h" #include "core/project_settings.h" +#include "editor/debugger/editor_debugger_node.h" +#include "editor/debugger/script_editor_debugger.h" #include "editor/editor_node.h" #include "editor/editor_run_script.h" #include "editor/editor_scale.h" @@ -44,7 +46,6 @@ #include "editor/find_in_files.h" #include "editor/node_dock.h" #include "editor/plugins/shader_editor_plugin.h" -#include "editor/script_editor_debugger.h" #include "scene/main/viewport.h" #include "scene/scene_string_names.h" #include "script_text_editor.h" @@ -62,6 +63,7 @@ void ScriptEditorBase::_bind_methods() { ADD_SIGNAL(MethodInfo("go_to_help", PropertyInfo(Variant::STRING, "what"))); // TODO: This signal is no use for VisualScript. ADD_SIGNAL(MethodInfo("search_in_files_requested", PropertyInfo(Variant::STRING, "text"))); + ADD_SIGNAL(MethodInfo("replace_in_files_requested", PropertyInfo(Variant::STRING, "text"))); } static bool _is_built_in_script(Script *p_script) { @@ -209,16 +211,16 @@ void ScriptEditorQuickOpen::_notification(int p_what) { switch (p_what) { case NOTIFICATION_ENTER_TREE: { - connect("confirmed", this, "_confirmed"); + connect_compat("confirmed", this, "_confirmed"); search_box->set_clear_button_enabled(true); - FALLTHROUGH; + [[fallthrough]]; } case NOTIFICATION_THEME_CHANGED: { search_box->set_right_icon(get_icon("Search", "EditorIcons")); } break; case NOTIFICATION_EXIT_TREE: { - disconnect("confirmed", this, "_confirmed"); + disconnect_compat("confirmed", this, "_confirmed"); } break; } } @@ -238,15 +240,15 @@ ScriptEditorQuickOpen::ScriptEditorQuickOpen() { add_child(vbc); search_box = memnew(LineEdit); vbc->add_margin_child(TTR("Search:"), search_box); - search_box->connect("text_changed", this, "_text_changed"); - search_box->connect("gui_input", this, "_sbox_input"); + search_box->connect_compat("text_changed", this, "_text_changed"); + search_box->connect_compat("gui_input", this, "_sbox_input"); search_options = memnew(Tree); vbc->add_margin_child(TTR("Matches:"), search_options, true); get_ok()->set_text(TTR("Open")); get_ok()->set_disabled(true); register_text_enter(search_box); set_hide_on_ok(false); - search_options->connect("item_activated", this, "_confirmed"); + search_options->connect_compat("item_activated", this, "_confirmed"); search_options->set_hide_root(true); search_options->set_hide_folding(true); search_options->add_constant_override("draw_guides", 1); @@ -260,7 +262,7 @@ ScriptEditor *ScriptEditor::script_editor = NULL; String ScriptEditor::_get_debug_tooltip(const String &p_text, Node *_se) { - String val = debugger->get_var_value(p_text); + String val = EditorDebuggerNode::get_singleton()->get_var_value(p_text); if (val != String()) { return p_text + ": " + val; } else { @@ -275,11 +277,6 @@ void ScriptEditor::_breaked(bool p_breaked, bool p_can_debug) { return; } - debug_menu->get_popup()->set_item_disabled(debug_menu->get_popup()->get_item_index(DEBUG_NEXT), !(p_breaked && p_can_debug)); - debug_menu->get_popup()->set_item_disabled(debug_menu->get_popup()->get_item_index(DEBUG_STEP), !(p_breaked && p_can_debug)); - debug_menu->get_popup()->set_item_disabled(debug_menu->get_popup()->get_item_index(DEBUG_BREAK), p_breaked); - debug_menu->get_popup()->set_item_disabled(debug_menu->get_popup()->get_item_index(DEBUG_CONTINUE), !p_breaked); - for (int i = 0; i < tab_container->get_child_count(); i++) { ScriptEditorBase *se = Object::cast_to<ScriptEditorBase>(tab_container->get_child(i)); @@ -291,11 +288,6 @@ void ScriptEditor::_breaked(bool p_breaked, bool p_can_debug) { } } -void ScriptEditor::_show_debugger(bool p_show) { - - //debug_menu->get_popup()->set_item_checked( debug_menu->get_popup()->get_item_index(DEBUG_SHOW), p_show); -} - void ScriptEditor::_script_created(Ref<Script> p_script) { editor->push_item(p_script.operator->()); } @@ -842,7 +834,7 @@ void ScriptEditor::_res_saved_callback(const Ref<Resource> &p_res) { void ScriptEditor::_live_auto_reload_running_scripts() { pending_auto_reload = false; - debugger->reload_scripts(); + EditorDebuggerNode::get_singleton()->reload_scripts(); } bool ScriptEditor::_test_script_times_on_disk(RES p_for_script) { @@ -908,7 +900,7 @@ void ScriptEditor::_file_dialog_action(String p_file) { } file->close(); memdelete(file); - FALLTHROUGH; + [[fallthrough]]; } case FILE_OPEN: { @@ -1093,6 +1085,10 @@ void ScriptEditor::_menu_option(int p_option) { _on_find_in_files_requested(""); } break; + case REPLACE_IN_FILES: { + + _on_replace_in_files_requested(""); + } break; case SEARCH_HELP: { help_search_dialog->popup_dialog(); @@ -1118,27 +1114,6 @@ void ScriptEditor::_menu_option(int p_option) { _sort_list_on_update = true; _update_script_names(); } break; - case DEBUG_SHOW: { - if (debugger) { - bool visible = debug_menu->get_popup()->is_item_checked(debug_menu->get_popup()->get_item_index(DEBUG_SHOW)); - debug_menu->get_popup()->set_item_checked(debug_menu->get_popup()->get_item_index(DEBUG_SHOW), !visible); - if (visible) - debugger->hide(); - else - debugger->show(); - } - } break; - case DEBUG_SHOW_KEEP_OPEN: { - bool visible = debug_menu->get_popup()->is_item_checked(debug_menu->get_popup()->get_item_index(DEBUG_SHOW_KEEP_OPEN)); - if (debugger) - debugger->set_hide_on_stop(visible); - debug_menu->get_popup()->set_item_checked(debug_menu->get_popup()->get_item_index(DEBUG_SHOW_KEEP_OPEN), !visible); - } break; - case DEBUG_WITH_EXTERNAL_EDITOR: { - bool debug_with_external_editor = !debug_menu->get_popup()->is_item_checked(debug_menu->get_popup()->get_item_index(DEBUG_WITH_EXTERNAL_EDITOR)); - debugger->set_debug_with_external_editor(debug_with_external_editor); - debug_menu->get_popup()->set_item_checked(debug_menu->get_popup()->get_item_index(DEBUG_WITH_EXTERNAL_EDITOR), debug_with_external_editor); - } break; case TOGGLE_SCRIPTS_PANEL: { if (current) { ScriptTextEditor *editor = Object::cast_to<ScriptTextEditor>(current); @@ -1252,7 +1227,7 @@ void ScriptEditor::_menu_option(int p_option) { } Ref<EditorScript> es = memnew(EditorScript); - es->set_script(scr.get_ref_ptr()); + es->set_script(scr); es->set_editor(EditorNode::get_singleton()); es->_run(); @@ -1289,29 +1264,6 @@ void ScriptEditor::_menu_option(int p_option) { case CLOSE_ALL: { _close_all_tabs(); } break; - case DEBUG_NEXT: { - - if (debugger) - debugger->debug_next(); - } break; - case DEBUG_STEP: { - - if (debugger) - debugger->debug_step(); - - } break; - case DEBUG_BREAK: { - - if (debugger) - debugger->debug_break(); - - } break; - case DEBUG_CONTINUE: { - - if (debugger) - debugger->debug_continue(); - - } break; case WINDOW_MOVE_UP: { if (tab_container->get_current_tab() > 0) { @@ -1434,19 +1386,17 @@ void ScriptEditor::_notification(int p_what) { case NOTIFICATION_ENTER_TREE: { - editor->connect("play_pressed", this, "_editor_play"); - editor->connect("pause_pressed", this, "_editor_pause"); - editor->connect("stop_pressed", this, "_editor_stop"); - editor->connect("script_add_function_request", this, "_add_callback"); - editor->connect("resource_saved", this, "_res_saved_callback"); - script_list->connect("item_selected", this, "_script_selected"); + editor->connect_compat("stop_pressed", this, "_editor_stop"); + editor->connect_compat("script_add_function_request", this, "_add_callback"); + editor->connect_compat("resource_saved", this, "_res_saved_callback"); + script_list->connect_compat("item_selected", this, "_script_selected"); - members_overview->connect("item_selected", this, "_members_overview_selected"); - help_overview->connect("item_selected", this, "_help_overview_selected"); - script_split->connect("dragged", this, "_script_split_dragged"); + members_overview->connect_compat("item_selected", this, "_members_overview_selected"); + help_overview->connect_compat("item_selected", this, "_help_overview_selected"); + script_split->connect_compat("dragged", this, "_script_split_dragged"); - EditorSettings::get_singleton()->connect("settings_changed", this, "_editor_settings_changed"); - FALLTHROUGH; + EditorSettings::get_singleton()->connect_compat("settings_changed", this, "_editor_settings_changed"); + [[fallthrough]]; } case NOTIFICATION_THEME_CHANGED: { @@ -1469,16 +1419,14 @@ void ScriptEditor::_notification(int p_what) { case NOTIFICATION_READY: { - get_tree()->connect("tree_changed", this, "_tree_changed"); - editor->get_inspector_dock()->connect("request_help", this, "_request_help"); - editor->connect("request_help_search", this, "_help_search"); + get_tree()->connect_compat("tree_changed", this, "_tree_changed"); + editor->get_inspector_dock()->connect_compat("request_help", this, "_request_help"); + editor->connect_compat("request_help_search", this, "_help_search"); } break; case NOTIFICATION_EXIT_TREE: { - editor->disconnect("play_pressed", this, "_editor_play"); - editor->disconnect("pause_pressed", this, "_editor_pause"); - editor->disconnect("stop_pressed", this, "_editor_stop"); + editor->disconnect_compat("stop_pressed", this, "_editor_stop"); } break; case MainLoop::NOTIFICATION_WM_FOCUS_IN: { @@ -1647,7 +1595,7 @@ struct _ScriptEditorItemData { String name; String sort_key; - Ref<Texture> icon; + Ref<Texture2D> icon; int index; String tooltip; bool used; @@ -1832,7 +1780,7 @@ void ScriptEditor::_update_script_names() { ScriptEditorBase *se = Object::cast_to<ScriptEditorBase>(tab_container->get_child(i)); if (se) { - Ref<Texture> icon = se->get_icon(); + Ref<Texture2D> icon = se->get_icon(); String path = se->get_edited_resource()->get_path(); bool built_in = !path.is_resource_file(); String name; @@ -1893,7 +1841,7 @@ void ScriptEditor::_update_script_names() { if (eh) { String name = eh->get_class(); - Ref<Texture> icon = get_icon("Help", "EditorIcons"); + Ref<Texture2D> icon = get_icon("Help", "EditorIcons"); String tooltip = vformat(TTR("%s Class Reference"), name); _ScriptEditorItemData sd; @@ -2057,7 +2005,7 @@ bool ScriptEditor::edit(const RES &p_resource, int p_line, int p_col, bool p_gra return false; } - if ((debugger->get_dump_stack_script() != p_resource || debugger->get_debug_with_external_editor()) && + if ((EditorDebuggerNode::get_singleton()->get_dump_stack_script() != p_resource || EditorDebuggerNode::get_singleton()->get_debug_with_external_editor()) && p_resource->get_path().is_resource_file() && p_resource->get_class_name() != StringName("VisualScript") && bool(EditorSettings::get_singleton()->get("text_editor/external/use_external_editor"))) { @@ -2189,13 +2137,14 @@ bool ScriptEditor::edit(const RES &p_resource, int p_line, int p_col, bool p_gra _sort_list_on_update = true; _update_script_names(); _save_layout(); - se->connect("name_changed", this, "_update_script_names"); - se->connect("edited_script_changed", this, "_script_changed"); - se->connect("request_help", this, "_help_search"); - se->connect("request_open_script_at_line", this, "_goto_script_line"); - se->connect("go_to_help", this, "_help_class_goto"); - se->connect("request_save_history", this, "_save_history"); - se->connect("search_in_files_requested", this, "_on_find_in_files_requested"); + se->connect_compat("name_changed", this, "_update_script_names"); + se->connect_compat("edited_script_changed", this, "_script_changed"); + se->connect_compat("request_help", this, "_help_search"); + se->connect_compat("request_open_script_at_line", this, "_goto_script_line"); + se->connect_compat("go_to_help", this, "_help_class_goto"); + se->connect_compat("request_save_history", this, "_save_history"); + se->connect_compat("search_in_files_requested", this, "_on_find_in_files_requested"); + se->connect_compat("replace_in_files_requested", this, "_on_replace_in_files_requested"); //test for modification, maybe the script was not edited but was loaded @@ -2271,26 +2220,7 @@ void ScriptEditor::open_script_create_dialog(const String &p_base_name, const St script_create_dialog->config(p_base_name, p_base_path); } -void ScriptEditor::_editor_play() { - - debugger->start(); - debug_menu->get_popup()->grab_focus(); - debug_menu->get_popup()->set_item_disabled(debug_menu->get_popup()->get_item_index(DEBUG_NEXT), true); - debug_menu->get_popup()->set_item_disabled(debug_menu->get_popup()->get_item_index(DEBUG_STEP), true); - debug_menu->get_popup()->set_item_disabled(debug_menu->get_popup()->get_item_index(DEBUG_BREAK), false); - debug_menu->get_popup()->set_item_disabled(debug_menu->get_popup()->get_item_index(DEBUG_CONTINUE), true); -} - -void ScriptEditor::_editor_pause() { -} void ScriptEditor::_editor_stop() { - - debugger->stop(); - debug_menu->get_popup()->set_item_disabled(debug_menu->get_popup()->get_item_index(DEBUG_NEXT), true); - debug_menu->get_popup()->set_item_disabled(debug_menu->get_popup()->get_item_index(DEBUG_STEP), true); - debug_menu->get_popup()->set_item_disabled(debug_menu->get_popup()->get_item_index(DEBUG_BREAK), true); - debug_menu->get_popup()->set_item_disabled(debug_menu->get_popup()->get_item_index(DEBUG_CONTINUE), true); - for (int i = 0; i < tab_container->get_child_count(); i++) { ScriptEditorBase *se = Object::cast_to<ScriptEditorBase>(tab_container->get_child(i)); @@ -2303,7 +2233,7 @@ void ScriptEditor::_editor_stop() { } } -void ScriptEditor::_add_callback(Object *p_obj, const String &p_function, const PoolStringArray &p_args) { +void ScriptEditor::_add_callback(Object *p_obj, const String &p_function, const PackedStringArray &p_args) { ERR_FAIL_COND(!p_obj); Ref<Script> script = p_obj->get_script(); @@ -2416,7 +2346,7 @@ Variant ScriptEditor::get_drag_data_fw(const Point2 &p_point, Control *p_from) { HBoxContainer *drag_preview = memnew(HBoxContainer); String preview_name = ""; - Ref<Texture> preview_icon; + Ref<Texture2D> preview_icon; ScriptEditorBase *se = Object::cast_to<ScriptEditorBase>(cur_node); if (se) { @@ -2807,7 +2737,7 @@ void ScriptEditor::_help_class_open(const String &p_class) { tab_container->add_child(eh); _go_to_tab(tab_container->get_tab_count() - 1); eh->go_to_class(p_class, 0); - eh->connect("go_to_help", this, "_help_class_goto"); + eh->connect_compat("go_to_help", this, "_help_class_goto"); _add_recent_script(p_class); _sort_list_on_update = true; _update_script_names(); @@ -2837,7 +2767,7 @@ void ScriptEditor::_help_class_goto(const String &p_desc) { tab_container->add_child(eh); _go_to_tab(tab_container->get_tab_count() - 1); eh->go_to_help(p_desc); - eh->connect("go_to_help", this, "_help_class_goto"); + eh->connect_compat("go_to_help", this, "_help_class_goto"); _add_recent_script(eh->get_class()); _sort_list_on_update = true; _update_script_names(); @@ -3025,10 +2955,19 @@ void ScriptEditor::_script_changed() { void ScriptEditor::_on_find_in_files_requested(String text) { + find_in_files_dialog->set_find_in_files_mode(FindInFilesDialog::SEARCH_MODE); find_in_files_dialog->set_search_text(text); find_in_files_dialog->popup_centered_minsize(); } +void ScriptEditor::_on_replace_in_files_requested(String text) { + + find_in_files_dialog->set_find_in_files_mode(FindInFilesDialog::REPLACE_MODE); + find_in_files_dialog->set_search_text(text); + find_in_files_dialog->set_replace_text(""); + find_in_files_dialog->popup_centered_minsize(); +} + void ScriptEditor::_on_find_in_files_result_selected(String fpath, int line_number, int begin, int end) { if (ResourceLoader::exists(fpath)) { @@ -3078,12 +3017,13 @@ void ScriptEditor::_start_find_in_files(bool with_replace) { f->set_filter(find_in_files_dialog->get_filter()); find_in_files->set_with_replace(with_replace); + find_in_files->set_replace_text(find_in_files_dialog->get_replace_text()); find_in_files->start_search(); editor->make_bottom_panel_item_visible(find_in_files); } -void ScriptEditor::_on_find_in_files_modified_files(PoolStringArray paths) { +void ScriptEditor::_on_find_in_files_modified_files(PackedStringArray paths) { _test_script_times_on_disk(); _update_modified_scripts_for_external_editor(); @@ -3109,8 +3049,6 @@ void ScriptEditor::_bind_methods() { ClassDB::bind_method("_close_other_tabs", &ScriptEditor::_close_other_tabs); ClassDB::bind_method("_open_recent_script", &ScriptEditor::_open_recent_script); ClassDB::bind_method("_theme_option", &ScriptEditor::_theme_option); - ClassDB::bind_method("_editor_play", &ScriptEditor::_editor_play); - ClassDB::bind_method("_editor_pause", &ScriptEditor::_editor_pause); ClassDB::bind_method("_editor_stop", &ScriptEditor::_editor_stop); ClassDB::bind_method("_add_callback", &ScriptEditor::_add_callback); ClassDB::bind_method("_reload_scripts", &ScriptEditor::_reload_scripts); @@ -3125,7 +3063,6 @@ void ScriptEditor::_bind_methods() { ClassDB::bind_method("_copy_script_path", &ScriptEditor::_copy_script_path); ClassDB::bind_method("_breaked", &ScriptEditor::_breaked); - ClassDB::bind_method("_show_debugger", &ScriptEditor::_show_debugger); ClassDB::bind_method("_get_debug_tooltip", &ScriptEditor::_get_debug_tooltip); ClassDB::bind_method("_autosave_scripts", &ScriptEditor::_autosave_scripts); ClassDB::bind_method("_update_autosave_timer", &ScriptEditor::_update_autosave_timer); @@ -3153,6 +3090,7 @@ void ScriptEditor::_bind_methods() { ClassDB::bind_method("_filter_methods_text_changed", &ScriptEditor::_filter_methods_text_changed); ClassDB::bind_method("_update_recent_scripts", &ScriptEditor::_update_recent_scripts); ClassDB::bind_method("_on_find_in_files_requested", &ScriptEditor::_on_find_in_files_requested); + ClassDB::bind_method("_on_replace_in_files_requested", &ScriptEditor::_on_replace_in_files_requested); ClassDB::bind_method("_start_find_in_files", &ScriptEditor::_start_find_in_files); ClassDB::bind_method("_on_find_in_files_result_selected", &ScriptEditor::_on_find_in_files_result_selected); ClassDB::bind_method("_on_find_in_files_modified_files", &ScriptEditor::_on_find_in_files_modified_files); @@ -3204,7 +3142,7 @@ ScriptEditor::ScriptEditor(EditorNode *p_editor) { filter_scripts = memnew(LineEdit); filter_scripts->set_placeholder(TTR("Filter scripts")); filter_scripts->set_clear_button_enabled(true); - filter_scripts->connect("text_changed", this, "_filter_scripts_text_changed"); + filter_scripts->connect_compat("text_changed", this, "_filter_scripts_text_changed"); scripts_vbox->add_child(filter_scripts); script_list = memnew(ItemList); @@ -3213,13 +3151,13 @@ ScriptEditor::ScriptEditor(EditorNode *p_editor) { script_list->set_v_size_flags(SIZE_EXPAND_FILL); script_split->set_split_offset(140); _sort_list_on_update = true; - script_list->connect("gui_input", this, "_script_list_gui_input", varray(), CONNECT_DEFERRED); + script_list->connect_compat("gui_input", this, "_script_list_gui_input", varray(), CONNECT_DEFERRED); script_list->set_allow_rmb_select(true); script_list->set_drag_forwarding(this); context_menu = memnew(PopupMenu); add_child(context_menu); - context_menu->connect("id_pressed", this, "_menu_option"); + context_menu->connect_compat("id_pressed", this, "_menu_option"); context_menu->set_hide_on_window_lose_focus(true); overview_vbox = memnew(VBoxContainer); @@ -3240,14 +3178,14 @@ ScriptEditor::ScriptEditor(EditorNode *p_editor) { members_overview_alphabeta_sort_button->set_tooltip(TTR("Toggle alphabetical sorting of the method list.")); members_overview_alphabeta_sort_button->set_toggle_mode(true); members_overview_alphabeta_sort_button->set_pressed(EditorSettings::get_singleton()->get("text_editor/tools/sort_members_outline_alphabetically")); - members_overview_alphabeta_sort_button->connect("toggled", this, "_toggle_members_overview_alpha_sort"); + members_overview_alphabeta_sort_button->connect_compat("toggled", this, "_toggle_members_overview_alpha_sort"); buttons_hbox->add_child(members_overview_alphabeta_sort_button); filter_methods = memnew(LineEdit); filter_methods->set_placeholder(TTR("Filter methods")); filter_methods->set_clear_button_enabled(true); - filter_methods->connect("text_changed", this, "_filter_methods_text_changed"); + filter_methods->connect_compat("text_changed", this, "_filter_methods_text_changed"); overview_vbox->add_child(filter_methods); members_overview = memnew(ItemList); @@ -3291,7 +3229,7 @@ ScriptEditor::ScriptEditor(EditorNode *p_editor) { recent_scripts = memnew(PopupMenu); recent_scripts->set_name("RecentScripts"); file_menu->get_popup()->add_child(recent_scripts); - recent_scripts->connect("id_pressed", this, "_open_recent_script"); + recent_scripts->connect_compat("id_pressed", this, "_open_recent_script"); _update_recent_scripts(); file_menu->get_popup()->add_separator(); @@ -3313,7 +3251,7 @@ ScriptEditor::ScriptEditor(EditorNode *p_editor) { theme_submenu = memnew(PopupMenu); theme_submenu->set_name("Theme"); file_menu->get_popup()->add_child(theme_submenu); - theme_submenu->connect("id_pressed", this, "_theme_option"); + theme_submenu->connect_compat("id_pressed", this, "_theme_option"); theme_submenu->add_shortcut(ED_SHORTCUT("script_editor/import_theme", TTR("Import Theme...")), THEME_IMPORT); theme_submenu->add_shortcut(ED_SHORTCUT("script_editor/reload_theme", TTR("Reload Theme")), THEME_RELOAD); @@ -3332,35 +3270,25 @@ ScriptEditor::ScriptEditor(EditorNode *p_editor) { file_menu->get_popup()->add_separator(); file_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/toggle_scripts_panel", TTR("Toggle Scripts Panel"), KEY_MASK_CMD | KEY_BACKSLASH), TOGGLE_SCRIPTS_PANEL); - file_menu->get_popup()->connect("id_pressed", this, "_menu_option"); + file_menu->get_popup()->connect_compat("id_pressed", this, "_menu_option"); script_search_menu = memnew(MenuButton); menu_hb->add_child(script_search_menu); script_search_menu->set_text(TTR("Search")); script_search_menu->set_switch_on_hover(true); script_search_menu->get_popup()->set_hide_on_window_lose_focus(true); - script_search_menu->get_popup()->connect("id_pressed", this, "_menu_option"); + script_search_menu->get_popup()->connect_compat("id_pressed", this, "_menu_option"); - debug_menu = memnew(MenuButton); + MenuButton *debug_menu = memnew(MenuButton); menu_hb->add_child(debug_menu); - debug_menu->set_text(TTR("Debug")); - debug_menu->set_switch_on_hover(true); - debug_menu->get_popup()->set_hide_on_window_lose_focus(true); - debug_menu->get_popup()->add_shortcut(ED_SHORTCUT("debugger/step_into", TTR("Step Into"), KEY_F11), DEBUG_STEP); - debug_menu->get_popup()->add_shortcut(ED_SHORTCUT("debugger/step_over", TTR("Step Over"), KEY_F10), DEBUG_NEXT); - debug_menu->get_popup()->add_separator(); - debug_menu->get_popup()->add_shortcut(ED_SHORTCUT("debugger/break", TTR("Break")), DEBUG_BREAK); - debug_menu->get_popup()->add_shortcut(ED_SHORTCUT("debugger/continue", TTR("Continue"), KEY_F12), DEBUG_CONTINUE); - debug_menu->get_popup()->add_separator(); - //debug_menu->get_popup()->add_check_item("Show Debugger",DEBUG_SHOW); - debug_menu->get_popup()->add_check_shortcut(ED_SHORTCUT("debugger/keep_debugger_open", TTR("Keep Debugger Open")), DEBUG_SHOW_KEEP_OPEN); - debug_menu->get_popup()->add_check_shortcut(ED_SHORTCUT("debugger/debug_with_external_editor", TTR("Debug with External Editor")), DEBUG_WITH_EXTERNAL_EDITOR); - debug_menu->get_popup()->connect("id_pressed", this, "_menu_option"); - - debug_menu->get_popup()->set_item_disabled(debug_menu->get_popup()->get_item_index(DEBUG_NEXT), true); - debug_menu->get_popup()->set_item_disabled(debug_menu->get_popup()->get_item_index(DEBUG_STEP), true); - debug_menu->get_popup()->set_item_disabled(debug_menu->get_popup()->get_item_index(DEBUG_BREAK), true); - debug_menu->get_popup()->set_item_disabled(debug_menu->get_popup()->get_item_index(DEBUG_CONTINUE), true); + debug_menu->hide(); // Handled by EditorDebuggerNode below. + + EditorDebuggerNode *debugger = EditorDebuggerNode::get_singleton(); + debugger->set_script_debug_button(debug_menu); + debugger->connect_compat("goto_script_line", this, "_goto_script_line"); + debugger->connect_compat("set_execution", this, "_set_execution"); + debugger->connect_compat("clear_execution", this, "_clear_execution"); + debugger->connect_compat("breaked", this, "_breaked"); menu_hb->add_spacer(); @@ -3376,64 +3304,58 @@ ScriptEditor::ScriptEditor(EditorNode *p_editor) { site_search = memnew(ToolButton); site_search->set_text(TTR("Online Docs")); - site_search->connect("pressed", this, "_menu_option", varray(SEARCH_WEBSITE)); + site_search->connect_compat("pressed", this, "_menu_option", varray(SEARCH_WEBSITE)); menu_hb->add_child(site_search); site_search->set_tooltip(TTR("Open Godot online documentation.")); request_docs = memnew(ToolButton); request_docs->set_text(TTR("Request Docs")); - request_docs->connect("pressed", this, "_menu_option", varray(REQUEST_DOCS)); + request_docs->connect_compat("pressed", this, "_menu_option", varray(REQUEST_DOCS)); menu_hb->add_child(request_docs); request_docs->set_tooltip(TTR("Help improve the Godot documentation by giving feedback.")); help_search = memnew(ToolButton); help_search->set_text(TTR("Search Help")); - help_search->connect("pressed", this, "_menu_option", varray(SEARCH_HELP)); + help_search->connect_compat("pressed", this, "_menu_option", varray(SEARCH_HELP)); menu_hb->add_child(help_search); help_search->set_tooltip(TTR("Search the reference documentation.")); menu_hb->add_child(memnew(VSeparator)); script_back = memnew(ToolButton); - script_back->connect("pressed", this, "_history_back"); + script_back->connect_compat("pressed", this, "_history_back"); menu_hb->add_child(script_back); script_back->set_disabled(true); script_back->set_tooltip(TTR("Go to previous edited document.")); script_forward = memnew(ToolButton); - script_forward->connect("pressed", this, "_history_forward"); + script_forward->connect_compat("pressed", this, "_history_forward"); menu_hb->add_child(script_forward); script_forward->set_disabled(true); script_forward->set_tooltip(TTR("Go to next edited document.")); - tab_container->connect("tab_changed", this, "_tab_changed"); + tab_container->connect_compat("tab_changed", this, "_tab_changed"); erase_tab_confirm = memnew(ConfirmationDialog); erase_tab_confirm->get_ok()->set_text(TTR("Save")); erase_tab_confirm->add_button(TTR("Discard"), OS::get_singleton()->get_swap_ok_cancel(), "discard"); - erase_tab_confirm->connect("confirmed", this, "_close_current_tab"); - erase_tab_confirm->connect("custom_action", this, "_close_discard_current_tab"); + erase_tab_confirm->connect_compat("confirmed", this, "_close_current_tab"); + erase_tab_confirm->connect_compat("custom_action", this, "_close_discard_current_tab"); add_child(erase_tab_confirm); script_create_dialog = memnew(ScriptCreateDialog); script_create_dialog->set_title(TTR("Create Script")); add_child(script_create_dialog); - script_create_dialog->connect("script_created", this, "_script_created"); + script_create_dialog->connect_compat("script_created", this, "_script_created"); file_dialog_option = -1; file_dialog = memnew(EditorFileDialog); add_child(file_dialog); - file_dialog->connect("file_selected", this, "_file_dialog_action"); + file_dialog->connect_compat("file_selected", this, "_file_dialog_action"); error_dialog = memnew(AcceptDialog); add_child(error_dialog); - debugger = memnew(ScriptEditorDebugger(editor)); - debugger->connect("goto_script_line", this, "_goto_script_line"); - debugger->connect("set_execution", this, "_set_execution"); - debugger->connect("clear_execution", this, "_clear_execution"); - debugger->connect("show_debugger", this, "_show_debugger"); - disk_changed = memnew(ConfirmationDialog); { VBoxContainer *vbc = memnew(VBoxContainer); @@ -3447,48 +3369,42 @@ ScriptEditor::ScriptEditor(EditorNode *p_editor) { vbc->add_child(disk_changed_list); disk_changed_list->set_v_size_flags(SIZE_EXPAND_FILL); - disk_changed->connect("confirmed", this, "_reload_scripts"); + disk_changed->connect_compat("confirmed", this, "_reload_scripts"); disk_changed->get_ok()->set_text(TTR("Reload")); disk_changed->add_button(TTR("Resave"), !OS::get_singleton()->get_swap_ok_cancel(), "resave"); - disk_changed->connect("custom_action", this, "_resave_scripts"); + disk_changed->connect_compat("custom_action", this, "_resave_scripts"); } add_child(disk_changed); script_editor = this; - Button *db = EditorNode::get_singleton()->add_bottom_panel_item(TTR("Debugger"), debugger); - debugger->set_tool_button(db); - - debugger->connect("breaked", this, "_breaked"); - autosave_timer = memnew(Timer); autosave_timer->set_one_shot(false); - autosave_timer->connect(SceneStringNames::get_singleton()->tree_entered, this, "_update_autosave_timer"); - autosave_timer->connect("timeout", this, "_autosave_scripts"); + autosave_timer->connect_compat(SceneStringNames::get_singleton()->tree_entered, this, "_update_autosave_timer"); + autosave_timer->connect_compat("timeout", this, "_autosave_scripts"); add_child(autosave_timer); grab_focus_block = false; help_search_dialog = memnew(EditorHelpSearch); add_child(help_search_dialog); - help_search_dialog->connect("go_to_help", this, "_help_class_goto"); + help_search_dialog->connect_compat("go_to_help", this, "_help_class_goto"); find_in_files_dialog = memnew(FindInFilesDialog); - find_in_files_dialog->connect(FindInFilesDialog::SIGNAL_FIND_REQUESTED, this, "_start_find_in_files", varray(false)); - find_in_files_dialog->connect(FindInFilesDialog::SIGNAL_REPLACE_REQUESTED, this, "_start_find_in_files", varray(true)); + find_in_files_dialog->connect_compat(FindInFilesDialog::SIGNAL_FIND_REQUESTED, this, "_start_find_in_files", varray(false)); + find_in_files_dialog->connect_compat(FindInFilesDialog::SIGNAL_REPLACE_REQUESTED, this, "_start_find_in_files", varray(true)); add_child(find_in_files_dialog); find_in_files = memnew(FindInFilesPanel); find_in_files_button = editor->add_bottom_panel_item(TTR("Search Results"), find_in_files); find_in_files->set_custom_minimum_size(Size2(0, 200) * EDSCALE); - find_in_files->connect(FindInFilesPanel::SIGNAL_RESULT_SELECTED, this, "_on_find_in_files_result_selected"); - find_in_files->connect(FindInFilesPanel::SIGNAL_FILES_MODIFIED, this, "_on_find_in_files_modified_files"); + find_in_files->connect_compat(FindInFilesPanel::SIGNAL_RESULT_SELECTED, this, "_on_find_in_files_result_selected"); + find_in_files->connect_compat(FindInFilesPanel::SIGNAL_FILES_MODIFIED, this, "_on_find_in_files_modified_files"); find_in_files->hide(); find_in_files_button->hide(); history_pos = -1; - //debugger_gui->hide(); edit_pass = 0; trim_trailing_whitespace_on_save = EditorSettings::get_singleton()->get("text_editor/files/trim_trailing_whitespace_on_save"); diff --git a/editor/plugins/script_editor_plugin.h b/editor/plugins/script_editor_plugin.h index a41480c80d..b4b4f33fc5 100644 --- a/editor/plugins/script_editor_plugin.h +++ b/editor/plugins/script_editor_plugin.h @@ -73,7 +73,7 @@ public: ScriptEditorQuickOpen(); }; -class ScriptEditorDebugger; +class EditorDebuggerNode; class ScriptEditorBase : public VBoxContainer { @@ -92,7 +92,7 @@ public: virtual void set_edited_resource(const RES &p_res) = 0; virtual void reload_text() = 0; virtual String get_name() = 0; - virtual Ref<Texture> get_icon() = 0; + virtual Ref<Texture2D> get_icon() = 0; virtual bool is_unsaved() = 0; virtual Variant get_edit_state() = 0; virtual void set_edit_state(const Variant &p_state) = 0; @@ -107,7 +107,7 @@ public: virtual void tag_saved_version() = 0; virtual void reload(bool p_soft) {} virtual void get_breakpoints(List<int> *p_breakpoints) = 0; - virtual void add_callback(const String &p_function, PoolStringArray p_args) = 0; + virtual void add_callback(const String &p_function, PackedStringArray p_args) = 0; virtual void update_settings() = 0; virtual void set_debugger_active(bool p_active) = 0; virtual bool can_lose_focus_on_node_selection() { return true; } @@ -155,14 +155,8 @@ class ScriptEditor : public PanelContainer { FILE_COPY_PATH, FILE_TOOL_RELOAD, FILE_TOOL_RELOAD_SOFT, - DEBUG_NEXT, - DEBUG_STEP, - DEBUG_BREAK, - DEBUG_CONTINUE, - DEBUG_SHOW, - DEBUG_SHOW_KEEP_OPEN, - DEBUG_WITH_EXTERNAL_EDITOR, SEARCH_IN_FILES, + REPLACE_IN_FILES, SEARCH_HELP, SEARCH_WEBSITE, REQUEST_DOCS, @@ -232,7 +226,6 @@ class ScriptEditor : public PanelContainer { AcceptDialog *error_dialog; ConfirmationDialog *erase_tab_confirm; ScriptCreateDialog *script_create_dialog; - ScriptEditorDebugger *debugger; ToolButton *scripts_visible; String current_theme; @@ -314,13 +307,11 @@ class ScriptEditor : public PanelContainer { EditorScriptCodeCompletionCache *completion_cache; - void _editor_play(); - void _editor_pause(); void _editor_stop(); int edit_pass; - void _add_callback(Object *p_obj, const String &p_function, const PoolStringArray &p_args); + void _add_callback(Object *p_obj, const String &p_function, const PackedStringArray &p_args); void _res_saved_callback(const Ref<Resource> &p_res); bool trim_trailing_whitespace_on_save; @@ -334,7 +325,6 @@ class ScriptEditor : public PanelContainer { void _set_execution(REF p_script, int p_line); void _clear_execution(REF p_script); void _breaked(bool p_breaked, bool p_can_debug); - void _show_debugger(bool p_show); void _update_window_menu(); void _script_created(Ref<Script> p_script); @@ -404,9 +394,10 @@ class ScriptEditor : public PanelContainer { Error _save_text_file(Ref<TextFile> p_text_file, const String &p_path); void _on_find_in_files_requested(String text); + void _on_replace_in_files_requested(String text); void _on_find_in_files_result_selected(String fpath, int line_number, int begin, int end); void _start_find_in_files(bool with_replace); - void _on_find_in_files_modified_files(PoolStringArray paths); + void _on_find_in_files_modified_files(PackedStringArray paths); static void _open_script_request(const String &p_path); @@ -455,7 +446,6 @@ public: VSplitContainer *get_left_list_split() { return list_split; } - ScriptEditorDebugger *get_debugger() { return debugger; } void set_live_auto_reload_running_scripts(bool p_enabled); static void register_create_syntax_highlighter_function(CreateSyntaxHighlighterFunc p_func); diff --git a/editor/plugins/script_text_editor.cpp b/editor/plugins/script_text_editor.cpp index 1432c3fc63..4986e60ff0 100644 --- a/editor/plugins/script_text_editor.cpp +++ b/editor/plugins/script_text_editor.cpp @@ -32,10 +32,10 @@ #include "core/math/expression.h" #include "core/os/keyboard.h" +#include "editor/debugger/editor_debugger_node.h" #include "editor/editor_node.h" #include "editor/editor_scale.h" #include "editor/editor_settings.h" -#include "editor/script_editor_debugger.h" void ConnectionInfoDialog::ok_pressed() { } @@ -53,30 +53,30 @@ void ConnectionInfoDialog::popup_connections(String p_method, Vector<Node *> p_n for (List<Connection>::Element *E = all_connections.front(); E; E = E->next()) { Connection connection = E->get(); - if (connection.method != p_method) { + if (connection.callable.get_method() != p_method) { continue; } TreeItem *node_item = tree->create_item(root); - node_item->set_text(0, Object::cast_to<Node>(connection.source)->get_name()); - node_item->set_icon(0, EditorNode::get_singleton()->get_object_icon(connection.source, "Node")); + node_item->set_text(0, Object::cast_to<Node>(connection.signal.get_object())->get_name()); + node_item->set_icon(0, EditorNode::get_singleton()->get_object_icon(connection.signal.get_object(), "Node")); node_item->set_selectable(0, false); node_item->set_editable(0, false); - node_item->set_text(1, connection.signal); + node_item->set_text(1, connection.signal.get_name()); node_item->set_icon(1, get_parent_control()->get_icon("Slot", "EditorIcons")); node_item->set_selectable(1, false); node_item->set_editable(1, false); - node_item->set_text(2, Object::cast_to<Node>(connection.target)->get_name()); - node_item->set_icon(2, EditorNode::get_singleton()->get_object_icon(connection.target, "Node")); + node_item->set_text(2, Object::cast_to<Node>(connection.callable.get_object())->get_name()); + node_item->set_icon(2, EditorNode::get_singleton()->get_object_icon(connection.callable.get_object(), "Node")); node_item->set_selectable(2, false); node_item->set_editable(2, false); } } - popup_centered(Size2(400, 300) * EDSCALE); + popup_centered(Size2(600, 300) * EDSCALE); } ConnectionInfoDialog::ConnectionInfoDialog() { @@ -306,13 +306,13 @@ void ScriptTextEditor::_set_theme_for_script() { text_edit->add_keyword_color("RID", basetype_color); text_edit->add_keyword_color("Dictionary", basetype_color); text_edit->add_keyword_color("Array", basetype_color); - text_edit->add_keyword_color("PoolByteArray", basetype_color); - text_edit->add_keyword_color("PoolIntArray", basetype_color); - text_edit->add_keyword_color("PoolRealArray", basetype_color); - text_edit->add_keyword_color("PoolStringArray", basetype_color); - text_edit->add_keyword_color("PoolVector2Array", basetype_color); - text_edit->add_keyword_color("PoolVector3Array", basetype_color); - text_edit->add_keyword_color("PoolColorArray", basetype_color); + text_edit->add_keyword_color("PackedByteArray", basetype_color); + text_edit->add_keyword_color("PackedIntArray", basetype_color); + text_edit->add_keyword_color("PackedRealArray", basetype_color); + text_edit->add_keyword_color("PackedStringArray", basetype_color); + text_edit->add_keyword_color("PackedVector2Array", basetype_color); + text_edit->add_keyword_color("PackedVector3Array", basetype_color); + text_edit->add_keyword_color("PackedColorArray", basetype_color); //colorize engine types List<StringName> types; @@ -424,7 +424,7 @@ void ScriptTextEditor::_notification(int p_what) { } } -void ScriptTextEditor::add_callback(const String &p_function, PoolStringArray p_args) { +void ScriptTextEditor::add_callback(const String &p_function, PackedStringArray p_args) { String code = code_editor->get_text_edit()->get_text(); int pos = script->get_language()->find_function(p_function, code); @@ -548,13 +548,13 @@ String ScriptTextEditor::get_name() { return name; } -Ref<Texture> ScriptTextEditor::get_icon() { +Ref<Texture2D> ScriptTextEditor::get_icon() { if (get_parent_control() && get_parent_control()->has_icon(script->get_class(), "EditorIcons")) { return get_parent_control()->get_icon(script->get_class(), "EditorIcons"); } - return Ref<Texture>(); + return Ref<Texture2D>(); } void ScriptTextEditor::_validate_script() { @@ -603,12 +603,12 @@ void ScriptTextEditor::_validate_script() { Connection connection = E->get(); String base_path = base->get_name(); - String source_path = base == connection.source ? base_path : base_path + "/" + base->get_path_to(Object::cast_to<Node>(connection.source)); - String target_path = base == connection.target ? base_path : base_path + "/" + base->get_path_to(Object::cast_to<Node>(connection.target)); + String source_path = base == connection.signal.get_object() ? base_path : base_path + "/" + base->get_path_to(Object::cast_to<Node>(connection.signal.get_object())); + String target_path = base == connection.callable.get_object() ? base_path : base_path + "/" + base->get_path_to(Object::cast_to<Node>(connection.callable.get_object())); warnings_panel->push_cell(); warnings_panel->push_color(warnings_panel->get_color("warning_color", "Editor")); - warnings_panel->add_text(vformat(TTR("Missing connected method '%s' for signal '%s' from node '%s' to node '%s'."), connection.method, connection.signal, source_path, target_path)); + warnings_panel->add_text(vformat(TTR("Missing connected method '%s' for signal '%s' from node '%s' to node '%s'."), connection.callable.get_method(), connection.signal.get_name(), source_path, target_path)); warnings_panel->pop(); // Color. warnings_panel->pop(); // Cell. } @@ -870,7 +870,7 @@ void ScriptTextEditor::_breakpoint_item_pressed(int p_idx) { void ScriptTextEditor::_breakpoint_toggled(int p_row) { - ScriptEditor::get_singleton()->get_debugger()->set_breakpoint(script->get_path(), p_row + 1, code_editor->get_text_edit()->is_line_set_as_breakpoint(p_row)); + EditorDebuggerNode::get_singleton()->set_breakpoint(script->get_path(), p_row + 1, code_editor->get_text_edit()->is_line_set_as_breakpoint(p_row)); } void ScriptTextEditor::_lookup_symbol(const String &p_symbol, int p_row, int p_column) { @@ -1006,24 +1006,24 @@ void ScriptTextEditor::_update_connected_methods() { } // As deleted nodes are still accessible via the undo/redo system, check if they're still on the tree. - Node *source = Object::cast_to<Node>(connection.source); + Node *source = Object::cast_to<Node>(connection.signal.get_object()); if (source && !source->is_inside_tree()) { continue; } - if (methods_found.has(connection.method)) { + if (methods_found.has(connection.callable.get_method())) { continue; } - if (!ClassDB::has_method(script->get_instance_base_type(), connection.method)) { + if (!ClassDB::has_method(script->get_instance_base_type(), connection.callable.get_method())) { int line = -1; for (int j = 0; j < functions.size(); j++) { String name = functions[j].get_slice(":", 0); - if (name == connection.method) { + if (name == connection.callable.get_method()) { line = functions[j].get_slice(":", 1).to_int(); - text_edit->set_line_info_icon(line - 1, get_parent_control()->get_icon("Slot", "EditorIcons"), connection.method); - methods_found.insert(connection.method); + text_edit->set_line_info_icon(line - 1, get_parent_control()->get_icon("Slot", "EditorIcons"), connection.callable.get_method()); + methods_found.insert(connection.callable.get_method()); break; } } @@ -1036,7 +1036,7 @@ void ScriptTextEditor::_update_connected_methods() { bool found_inherited_function = false; Ref<Script> inherited_script = script->get_base_script(); while (!inherited_script.is_null()) { - if (inherited_script->has_method(connection.method)) { + if (inherited_script->has_method(connection.callable.get_method())) { found_inherited_function = true; break; } @@ -1212,7 +1212,7 @@ void ScriptTextEditor::_edit_option(int p_op) { Expression expression; Vector<String> lines = code_editor->get_text_edit()->get_selection_text().split("\n"); - PoolStringArray results; + PackedStringArray results; for (int i = 0; i < lines.size(); i++) { String line = lines[i]; @@ -1221,17 +1221,17 @@ void ScriptTextEditor::_edit_option(int p_op) { if (expression.parse(line) == OK) { Variant result = expression.execute(Array(), Variant(), false); if (expression.get_error_text() == "") { - results.append(whitespace + result.get_construct_string()); + results.push_back(whitespace + result.get_construct_string()); } else { - results.append(line); + results.push_back(line); } } else { - results.append(line); + results.push_back(line); } } code_editor->get_text_edit()->begin_complex_operation(); //prevents creating a two-step undo - code_editor->get_text_edit()->insert_text_at_cursor(results.join("\n")); + code_editor->get_text_edit()->insert_text_at_cursor(String("\n").join(results)); code_editor->get_text_edit()->end_complex_operation(); } break; case SEARCH_FIND: { @@ -1258,6 +1258,12 @@ void ScriptTextEditor::_edit_option(int p_op) { // So this will be delegated to the ScriptEditor. emit_signal("search_in_files_requested", selected_text); } break; + case REPLACE_IN_FILES: { + + String selected_text = code_editor->get_text_edit()->get_selection_text(); + + emit_signal("replace_in_files_requested", selected_text); + } break; case SEARCH_LOCATE_FUNCTION: { quick_open->popup_dialog(get_functions()); @@ -1288,7 +1294,7 @@ void ScriptTextEditor::_edit_option(int p_op) { int line = tx->cursor_get_line(); bool dobreak = !tx->is_line_set_as_breakpoint(line); tx->set_line_as_breakpoint(line, dobreak); - ScriptEditor::get_singleton()->get_debugger()->set_breakpoint(script->get_path(), line + 1, dobreak); + EditorDebuggerNode::get_singleton()->set_breakpoint(script->get_path(), line + 1, dobreak); } break; case DEBUG_REMOVE_ALL_BREAKPOINTS: { @@ -1299,7 +1305,7 @@ void ScriptTextEditor::_edit_option(int p_op) { int line = E->get(); bool dobreak = !tx->is_line_set_as_breakpoint(line); tx->set_line_as_breakpoint(line, dobreak); - ScriptEditor::get_singleton()->get_debugger()->set_breakpoint(script->get_path(), line + 1, dobreak); + EditorDebuggerNode::get_singleton()->set_breakpoint(script->get_path(), line + 1, dobreak); } } break; case DEBUG_GOTO_NEXT_BREAKPOINT: { @@ -1768,12 +1774,12 @@ ScriptTextEditor::ScriptTextEditor() { editor_box->add_child(code_editor); code_editor->add_constant_override("separation", 2); code_editor->set_anchors_and_margins_preset(Control::PRESET_WIDE); - code_editor->connect("validate_script", this, "_validate_script"); - code_editor->connect("load_theme_settings", this, "_load_theme_settings"); + code_editor->connect_compat("validate_script", this, "_validate_script"); + code_editor->connect_compat("load_theme_settings", this, "_load_theme_settings"); code_editor->set_code_complete_func(_code_complete_scripts, this); - code_editor->get_text_edit()->connect("breakpoint_toggled", this, "_breakpoint_toggled"); - code_editor->get_text_edit()->connect("symbol_lookup", this, "_lookup_symbol"); - code_editor->get_text_edit()->connect("info_clicked", this, "_lookup_connections"); + code_editor->get_text_edit()->connect_compat("breakpoint_toggled", this, "_breakpoint_toggled"); + code_editor->get_text_edit()->connect_compat("symbol_lookup", this, "_lookup_symbol"); + code_editor->get_text_edit()->connect_compat("info_clicked", this, "_lookup_connections"); code_editor->set_v_size_flags(SIZE_EXPAND_FILL); code_editor->show_toggle_scripts_button(); @@ -1786,9 +1792,9 @@ ScriptTextEditor::ScriptTextEditor() { warnings_panel->set_focus_mode(FOCUS_CLICK); warnings_panel->hide(); - code_editor->connect("error_pressed", this, "_error_pressed"); - code_editor->connect("show_warnings_panel", this, "_show_warnings_panel"); - warnings_panel->connect("meta_clicked", this, "_warning_clicked"); + code_editor->connect_compat("error_pressed", this, "_error_pressed"); + code_editor->connect_compat("show_warnings_panel", this, "_show_warnings_panel"); + warnings_panel->connect_compat("meta_clicked", this, "_warning_clicked"); update_settings(); @@ -1798,11 +1804,11 @@ ScriptTextEditor::ScriptTextEditor() { code_editor->get_text_edit()->set_select_identifiers_on_hover(true); code_editor->get_text_edit()->set_context_menu_enabled(false); - code_editor->get_text_edit()->connect("gui_input", this, "_text_edit_gui_input"); + code_editor->get_text_edit()->connect_compat("gui_input", this, "_text_edit_gui_input"); context_menu = memnew(PopupMenu); add_child(context_menu); - context_menu->connect("id_pressed", this, "_edit_option"); + context_menu->connect_compat("id_pressed", this, "_edit_option"); context_menu->set_hide_on_window_lose_focus(true); color_panel = memnew(PopupPanel); @@ -1810,7 +1816,7 @@ ScriptTextEditor::ScriptTextEditor() { color_picker = memnew(ColorPicker); color_picker->set_deferred_mode(true); color_panel->add_child(color_picker); - color_picker->connect("color_changed", this, "_color_changed"); + color_picker->connect_compat("color_changed", this, "_color_changed"); // get default color picker mode from editor settings int default_color_mode = EDITOR_GET("interface/inspector/default_color_picker_mode"); @@ -1851,7 +1857,7 @@ ScriptTextEditor::ScriptTextEditor() { edit_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/convert_indent_to_spaces"), EDIT_CONVERT_INDENT_TO_SPACES); edit_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/convert_indent_to_tabs"), EDIT_CONVERT_INDENT_TO_TABS); edit_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/auto_indent"), EDIT_AUTO_INDENT); - edit_menu->get_popup()->connect("id_pressed", this, "_edit_option"); + edit_menu->get_popup()->connect_compat("id_pressed", this, "_edit_option"); edit_menu->get_popup()->add_separator(); PopupMenu *convert_case = memnew(PopupMenu); @@ -1861,7 +1867,7 @@ ScriptTextEditor::ScriptTextEditor() { convert_case->add_shortcut(ED_SHORTCUT("script_text_editor/convert_to_uppercase", TTR("Uppercase"), KEY_MASK_SHIFT | KEY_F4), EDIT_TO_UPPERCASE); convert_case->add_shortcut(ED_SHORTCUT("script_text_editor/convert_to_lowercase", TTR("Lowercase"), KEY_MASK_SHIFT | KEY_F5), EDIT_TO_LOWERCASE); convert_case->add_shortcut(ED_SHORTCUT("script_text_editor/capitalize", TTR("Capitalize"), KEY_MASK_SHIFT | KEY_F6), EDIT_CAPITALIZE); - convert_case->connect("id_pressed", this, "_edit_option"); + convert_case->connect_compat("id_pressed", this, "_edit_option"); highlighters[TTR("Standard")] = NULL; highlighter_menu = memnew(PopupMenu); @@ -1869,7 +1875,7 @@ ScriptTextEditor::ScriptTextEditor() { edit_menu->get_popup()->add_child(highlighter_menu); edit_menu->get_popup()->add_submenu_item(TTR("Syntax Highlighter"), "highlighter_menu"); highlighter_menu->add_radio_check_item(TTR("Standard")); - highlighter_menu->connect("id_pressed", this, "_change_syntax_highlighter"); + highlighter_menu->connect_compat("id_pressed", this, "_change_syntax_highlighter"); search_menu = memnew(MenuButton); edit_hb->add_child(search_menu); @@ -1882,9 +1888,10 @@ ScriptTextEditor::ScriptTextEditor() { search_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/replace"), SEARCH_REPLACE); search_menu->get_popup()->add_separator(); search_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/find_in_files"), SEARCH_IN_FILES); + search_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/replace_in_files"), REPLACE_IN_FILES); search_menu->get_popup()->add_separator(); search_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/contextual_help"), HELP_CONTEXTUAL); - search_menu->get_popup()->connect("id_pressed", this, "_edit_option"); + search_menu->get_popup()->connect_compat("id_pressed", this, "_edit_option"); edit_hb->add_child(edit_menu); @@ -1892,7 +1899,7 @@ ScriptTextEditor::ScriptTextEditor() { edit_hb->add_child(goto_menu); goto_menu->set_text(TTR("Go To")); goto_menu->set_switch_on_hover(true); - goto_menu->get_popup()->connect("id_pressed", this, "_edit_option"); + goto_menu->get_popup()->connect_compat("id_pressed", this, "_edit_option"); goto_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/goto_function"), SEARCH_LOCATE_FUNCTION); goto_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/goto_line"), SEARCH_GOTO_LINE); @@ -1903,20 +1910,20 @@ ScriptTextEditor::ScriptTextEditor() { goto_menu->get_popup()->add_child(bookmarks_menu); goto_menu->get_popup()->add_submenu_item(TTR("Bookmarks"), "Bookmarks"); _update_bookmark_list(); - bookmarks_menu->connect("about_to_show", this, "_update_bookmark_list"); - bookmarks_menu->connect("index_pressed", this, "_bookmark_item_pressed"); + bookmarks_menu->connect_compat("about_to_show", this, "_update_bookmark_list"); + bookmarks_menu->connect_compat("index_pressed", this, "_bookmark_item_pressed"); breakpoints_menu = memnew(PopupMenu); breakpoints_menu->set_name("Breakpoints"); goto_menu->get_popup()->add_child(breakpoints_menu); goto_menu->get_popup()->add_submenu_item(TTR("Breakpoints"), "Breakpoints"); _update_breakpoint_list(); - breakpoints_menu->connect("about_to_show", this, "_update_breakpoint_list"); - breakpoints_menu->connect("index_pressed", this, "_breakpoint_item_pressed"); + breakpoints_menu->connect_compat("about_to_show", this, "_update_breakpoint_list"); + breakpoints_menu->connect_compat("index_pressed", this, "_breakpoint_item_pressed"); quick_open = memnew(ScriptEditorQuickOpen); add_child(quick_open); - quick_open->connect("goto_line", this, "_goto_line"); + quick_open->connect_compat("goto_line", this, "_goto_line"); goto_line_dialog = memnew(GotoLineDialog); add_child(goto_line_dialog); @@ -1990,6 +1997,7 @@ void ScriptTextEditor::register_editor() { #endif ED_SHORTCUT("script_text_editor/find_in_files", TTR("Find in Files..."), KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_F); + ED_SHORTCUT("script_text_editor/replace_in_files", TTR("Replace in Files..."), KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_R); #ifdef OSX_ENABLED ED_SHORTCUT("script_text_editor/contextual_help", TTR("Contextual Help"), KEY_MASK_ALT | KEY_MASK_SHIFT | KEY_SPACE); diff --git a/editor/plugins/script_text_editor.h b/editor/plugins/script_text_editor.h index 9018e9d3c2..e23160d029 100644 --- a/editor/plugins/script_text_editor.h +++ b/editor/plugins/script_text_editor.h @@ -133,6 +133,7 @@ class ScriptTextEditor : public ScriptEditorBase { SEARCH_LOCATE_FUNCTION, SEARCH_GOTO_LINE, SEARCH_IN_FILES, + REPLACE_IN_FILES, BOOKMARK_TOGGLE, BOOKMARK_GOTO_NEXT, BOOKMARK_GOTO_PREV, @@ -199,7 +200,7 @@ public: virtual Vector<String> get_functions(); virtual void reload_text(); virtual String get_name(); - virtual Ref<Texture> get_icon(); + virtual Ref<Texture2D> get_icon(); virtual bool is_unsaved(); virtual Variant get_edit_state(); virtual void set_edit_state(const Variant &p_state); @@ -219,7 +220,7 @@ public: virtual void reload(bool p_soft); virtual void get_breakpoints(List<int> *p_breakpoints); - virtual void add_callback(const String &p_function, PoolStringArray p_args); + virtual void add_callback(const String &p_function, PackedStringArray p_args); virtual void update_settings(); virtual bool show_members_overview(); diff --git a/editor/plugins/shader_editor_plugin.cpp b/editor/plugins/shader_editor_plugin.cpp index a19f0b4975..6c20483cf6 100644 --- a/editor/plugins/shader_editor_plugin.cpp +++ b/editor/plugins/shader_editor_plugin.cpp @@ -607,8 +607,8 @@ ShaderEditor::ShaderEditor(EditorNode *p_node) { shader_editor->add_constant_override("separation", 0); shader_editor->set_anchors_and_margins_preset(Control::PRESET_WIDE); - shader_editor->connect("script_changed", this, "apply_shaders"); - EditorSettings::get_singleton()->connect("settings_changed", this, "_editor_settings_changed"); + shader_editor->connect_compat("script_changed", this, "apply_shaders"); + EditorSettings::get_singleton()->connect_compat("settings_changed", this, "_editor_settings_changed"); shader_editor->get_text_edit()->set_callhint_settings( EditorSettings::get_singleton()->get("text_editor/completion/put_callhint_tooltip_below_current_line"), @@ -616,13 +616,13 @@ ShaderEditor::ShaderEditor(EditorNode *p_node) { shader_editor->get_text_edit()->set_select_identifiers_on_hover(true); shader_editor->get_text_edit()->set_context_menu_enabled(false); - shader_editor->get_text_edit()->connect("gui_input", this, "_text_edit_gui_input"); + shader_editor->get_text_edit()->connect_compat("gui_input", this, "_text_edit_gui_input"); shader_editor->update_editor_settings(); context_menu = memnew(PopupMenu); add_child(context_menu); - context_menu->connect("id_pressed", this, "_menu_option"); + context_menu->connect_compat("id_pressed", this, "_menu_option"); context_menu->set_hide_on_window_lose_focus(true); VBoxContainer *main_container = memnew(VBoxContainer); @@ -650,7 +650,7 @@ ShaderEditor::ShaderEditor(EditorNode *p_node) { edit_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/clone_down"), EDIT_CLONE_DOWN); edit_menu->get_popup()->add_separator(); edit_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/complete_symbol"), EDIT_COMPLETE); - edit_menu->get_popup()->connect("id_pressed", this, "_menu_option"); + edit_menu->get_popup()->connect_compat("id_pressed", this, "_menu_option"); search_menu = memnew(MenuButton); search_menu->set_text(TTR("Search")); @@ -660,12 +660,12 @@ ShaderEditor::ShaderEditor(EditorNode *p_node) { search_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/find_next"), SEARCH_FIND_NEXT); search_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/find_previous"), SEARCH_FIND_PREV); search_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/replace"), SEARCH_REPLACE); - search_menu->get_popup()->connect("id_pressed", this, "_menu_option"); + search_menu->get_popup()->connect_compat("id_pressed", this, "_menu_option"); MenuButton *goto_menu = memnew(MenuButton); goto_menu->set_text(TTR("Go To")); goto_menu->set_switch_on_hover(true); - goto_menu->get_popup()->connect("id_pressed", this, "_menu_option"); + goto_menu->get_popup()->connect_compat("id_pressed", this, "_menu_option"); goto_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/goto_line"), SEARCH_GOTO_LINE); goto_menu->get_popup()->add_separator(); @@ -675,14 +675,14 @@ ShaderEditor::ShaderEditor(EditorNode *p_node) { goto_menu->get_popup()->add_child(bookmarks_menu); goto_menu->get_popup()->add_submenu_item(TTR("Bookmarks"), "Bookmarks"); _update_bookmark_list(); - bookmarks_menu->connect("about_to_show", this, "_update_bookmark_list"); - bookmarks_menu->connect("index_pressed", this, "_bookmark_item_pressed"); + bookmarks_menu->connect_compat("about_to_show", this, "_update_bookmark_list"); + bookmarks_menu->connect_compat("index_pressed", this, "_bookmark_item_pressed"); help_menu = memnew(MenuButton); help_menu->set_text(TTR("Help")); help_menu->set_switch_on_hover(true); help_menu->get_popup()->add_icon_item(p_node->get_gui_base()->get_icon("Instance", "EditorIcons"), TTR("Online Docs"), HELP_DOCS); - help_menu->get_popup()->connect("id_pressed", this, "_menu_option"); + help_menu->get_popup()->connect_compat("id_pressed", this, "_menu_option"); add_child(main_container); main_container->add_child(hbc); @@ -705,11 +705,11 @@ ShaderEditor::ShaderEditor(EditorNode *p_node) { dl->set_text(TTR("This shader has been modified on on disk.\nWhat action should be taken?")); vbc->add_child(dl); - disk_changed->connect("confirmed", this, "_reload_shader_from_disk"); + disk_changed->connect_compat("confirmed", this, "_reload_shader_from_disk"); disk_changed->get_ok()->set_text(TTR("Reload")); disk_changed->add_button(TTR("Resave"), !OS::get_singleton()->get_swap_ok_cancel(), "resave"); - disk_changed->connect("custom_action", this, "save_external_data"); + disk_changed->connect_compat("custom_action", this, "save_external_data"); add_child(disk_changed); diff --git a/editor/plugins/skeleton_2d_editor_plugin.cpp b/editor/plugins/skeleton_2d_editor_plugin.cpp index dbe64f202d..d83a8ddf2d 100644 --- a/editor/plugins/skeleton_2d_editor_plugin.cpp +++ b/editor/plugins/skeleton_2d_editor_plugin.cpp @@ -110,7 +110,7 @@ Skeleton2DEditor::Skeleton2DEditor() { options->get_popup()->add_item(TTR("Set Bones to Rest Pose"), MENU_OPTION_SET_REST); options->set_switch_on_hover(true); - options->get_popup()->connect("id_pressed", this, "_menu_option"); + options->get_popup()->connect_compat("id_pressed", this, "_menu_option"); err_dialog = memnew(AcceptDialog); add_child(err_dialog); diff --git a/editor/plugins/skeleton_editor_plugin.cpp b/editor/plugins/skeleton_editor_plugin.cpp index 9101c64eab..43ba99317e 100644 --- a/editor/plugins/skeleton_editor_plugin.cpp +++ b/editor/plugins/skeleton_editor_plugin.cpp @@ -137,7 +137,7 @@ void SkeletonEditor::edit(Skeleton *p_node) { void SkeletonEditor::_notification(int p_what) { if (p_what == NOTIFICATION_ENTER_TREE) { - get_tree()->connect("node_removed", this, "_node_removed"); + get_tree()->connect_compat("node_removed", this, "_node_removed"); } } @@ -164,7 +164,7 @@ SkeletonEditor::SkeletonEditor() { options->get_popup()->add_item(TTR("Create physical skeleton"), MENU_OPTION_CREATE_PHYSICAL_SKELETON); - options->get_popup()->connect("id_pressed", this, "_on_click_option"); + options->get_popup()->connect_compat("id_pressed", this, "_on_click_option"); options->hide(); } diff --git a/editor/plugins/skeleton_ik_editor_plugin.cpp b/editor/plugins/skeleton_ik_editor_plugin.cpp index eb6ad9498d..a09dcca279 100644 --- a/editor/plugins/skeleton_ik_editor_plugin.cpp +++ b/editor/plugins/skeleton_ik_editor_plugin.cpp @@ -93,7 +93,7 @@ SkeletonIKEditorPlugin::SkeletonIKEditorPlugin(EditorNode *p_node) { play_btn->set_text(TTR("Play IK")); play_btn->set_toggle_mode(true); play_btn->hide(); - play_btn->connect("pressed", this, "_play"); + play_btn->connect_compat("pressed", this, "_play"); add_control_to_container(CONTAINER_SPATIAL_EDITOR_MENU, play_btn); skeleton_ik = NULL; } diff --git a/editor/plugins/spatial_editor_plugin.cpp b/editor/plugins/spatial_editor_plugin.cpp index 8f7ff04b2c..6e8eeaec82 100644 --- a/editor/plugins/spatial_editor_plugin.cpp +++ b/editor/plugins/spatial_editor_plugin.cpp @@ -36,12 +36,12 @@ #include "core/print_string.h" #include "core/project_settings.h" #include "core/sort_array.h" +#include "editor/debugger/editor_debugger_node.h" #include "editor/editor_node.h" #include "editor/editor_scale.h" #include "editor/editor_settings.h" #include "editor/plugins/animation_player_editor_plugin.h" #include "editor/plugins/script_editor_plugin.h" -#include "editor/script_editor_debugger.h" #include "editor/spatial_editor_gizmos.h" #include "scene/3d/camera.h" #include "scene/3d/collision_shape.h" @@ -252,7 +252,7 @@ void SpatialEditorViewport::_clear_selected() { void SpatialEditorViewport::_select_clicked(bool p_append, bool p_single, bool p_allow_locked) { - if (!clicked) + if (clicked.is_null()) return; Node *node = Object::cast_to<Node>(ObjectDB::get_instance(clicked)); @@ -309,7 +309,7 @@ ObjectID SpatialEditorViewport::_select_ray(const Point2 &p_pos, bool p_append, Set<Ref<EditorSpatialGizmo> > found_gizmos; Node *edited_scene = get_tree()->get_edited_scene_root(); - ObjectID closest = 0; + ObjectID closest; Node *item = NULL; float closest_dist = 1e20; int selected_handle = -1; @@ -356,7 +356,7 @@ ObjectID SpatialEditorViewport::_select_ray(const Point2 &p_pos, bool p_append, } if (!item) - return 0; + return ObjectID(); if (!editor_selection->is_selected(item) || (r_gizmo_handle && selected_handle >= 0)) { @@ -850,9 +850,9 @@ void SpatialEditorViewport::_list_select(Ref<InputEventMouseButton> b) { clicked = selection_results[0].item->get_instance_id(); selection_results.clear(); - if (clicked) { + if (clicked.is_valid()) { _select_clicked(clicked_wants_append, true, spatial_editor->get_tool_mode() != SpatialEditor::TOOL_MODE_LIST_SELECT); - clicked = 0; + clicked = ObjectID(); } } else if (!selection_results.empty()) { @@ -864,7 +864,7 @@ void SpatialEditorViewport::_list_select(Ref<InputEventMouseButton> b) { Spatial *spat = selection_results[i].item; - Ref<Texture> icon = EditorNode::get_singleton()->get_object_icon(spat, "Node"); + Ref<Texture2D> icon = EditorNode::get_singleton()->get_object_icon(spat, "Node"); String node_path = "/" + root_name + "/" + root_path.rel_path_to(spat->get_path()); @@ -1095,7 +1095,7 @@ void SpatialEditorViewport::_sinput(const Ref<InputEvent> &p_event) { if (_gizmo_select(_edit.mouse_pos)) break; - clicked = 0; + clicked = ObjectID(); clicked_includes_current = false; if ((spatial_editor->get_tool_mode() == SpatialEditor::TOOL_MODE_SELECT && b->get_control()) || spatial_editor->get_tool_mode() == SpatialEditor::TOOL_MODE_ROTATE) { @@ -1139,7 +1139,7 @@ void SpatialEditorViewport::_sinput(const Ref<InputEvent> &p_event) { clicked_wants_append = b->get_shift(); - if (!clicked) { + if (clicked.is_null()) { if (!clicked_wants_append) _clear_selected(); @@ -1150,7 +1150,7 @@ void SpatialEditorViewport::_sinput(const Ref<InputEvent> &p_event) { cursor.region_end = b->get_position(); } - if (clicked && gizmo_handle >= 0) { + if (clicked.is_valid() && gizmo_handle >= 0) { Spatial *spa = Object::cast_to<Spatial>(ObjectDB::get_instance(clicked)); if (spa) { @@ -1175,10 +1175,10 @@ void SpatialEditorViewport::_sinput(const Ref<InputEvent> &p_event) { _edit.gizmo = Ref<EditorSpatialGizmo>(); break; } - if (clicked) { + if (clicked.is_valid()) { _select_clicked(clicked_wants_append, true); // Processing was deferred. - clicked = 0; + clicked = ObjectID(); } if (cursor.region_select) { @@ -1279,7 +1279,7 @@ void SpatialEditorViewport::_sinput(const Ref<InputEvent> &p_event) { } else if (nav_scheme == NAVIGATION_MODO && m->get_alt()) { nav_mode = NAVIGATION_ORBIT; } else { - if (clicked) { + if (clicked.is_valid()) { if (!clicked_includes_current) { @@ -1288,7 +1288,7 @@ void SpatialEditorViewport::_sinput(const Ref<InputEvent> &p_event) { } _compute_edit(_edit.mouse_pos); - clicked = 0; + clicked = ObjectID(); _edit.mode = TRANSFORM_TRANSLATE; } @@ -2147,6 +2147,8 @@ void SpatialEditorViewport::_notification(int p_what) { set_process(visible); if (visible) { + orthogonal = view_menu->get_popup()->is_item_checked(view_menu->get_popup()->get_item_index(VIEW_ORTHOGONAL)); + _update_name(); _update_camera(0); } else { set_freelook_active(false); @@ -2185,10 +2187,10 @@ void SpatialEditorViewport::_notification(int p_what) { if (cam != NULL && cam != previewing) { //then switch the viewport's camera to the scene's viewport camera if (previewing != NULL) { - previewing->disconnect("tree_exited", this, "_preview_exited_scene"); + previewing->disconnect_compat("tree_exited", this, "_preview_exited_scene"); } previewing = cam; - previewing->connect("tree_exited", this, "_preview_exited_scene"); + previewing->connect_compat("tree_exited", this, "_preview_exited_scene"); VS::get_singleton()->viewport_attach_camera(viewport->get_viewport_rid(), cam->get_camera()); surface->update(); } @@ -2272,9 +2274,6 @@ void SpatialEditorViewport::_notification(int p_what) { int msaa_mode = ProjectSettings::get_singleton()->get("rendering/quality/filters/msaa"); viewport->set_msaa(Viewport::MSAA(msaa_mode)); - bool hdr = ProjectSettings::get_singleton()->get("rendering/quality/depth/hdr"); - viewport->set_hdr(hdr); - bool show_info = view_menu->get_popup()->is_item_checked(view_menu->get_popup()->get_item_index(VIEW_INFORMATION)); info_label->set_visible(show_info); @@ -2332,12 +2331,12 @@ void SpatialEditorViewport::_notification(int p_what) { if (p_what == NOTIFICATION_ENTER_TREE) { - surface->connect("draw", this, "_draw"); - surface->connect("gui_input", this, "_sinput"); - surface->connect("mouse_entered", this, "_surface_mouse_enter"); - surface->connect("mouse_exited", this, "_surface_mouse_exit"); - surface->connect("focus_entered", this, "_surface_focus_enter"); - surface->connect("focus_exited", this, "_surface_focus_exit"); + surface->connect_compat("draw", this, "_draw"); + surface->connect_compat("gui_input", this, "_sinput"); + surface->connect_compat("mouse_entered", this, "_surface_mouse_enter"); + surface->connect_compat("mouse_exited", this, "_surface_mouse_exit"); + surface->connect_compat("focus_entered", this, "_surface_focus_enter"); + surface->connect_compat("focus_exited", this, "_surface_focus_exit"); _init_gizmo_instance(index); } @@ -2371,7 +2370,7 @@ void SpatialEditorViewport::_notification(int p_what) { } } -static void draw_indicator_bar(Control &surface, real_t fill, Ref<Texture> icon) { +static void draw_indicator_bar(Control &surface, real_t fill, Ref<Texture2D> icon) { // Adjust bar size from control height Vector2 surface_size = surface.get_size(); @@ -2442,8 +2441,7 @@ void SpatialEditorViewport::_draw() { _edit.mouse_pos, center, get_color("accent_color", "Editor") * Color(1, 1, 1, 0.6), - Math::round(2 * EDSCALE), - true); + Math::round(2 * EDSCALE)); } if (previewing) { @@ -2763,53 +2761,86 @@ void SpatialEditorViewport::_menu_option(int p_option) { view_menu->get_popup()->set_item_checked(idx, !current); } break; - case VIEW_DISPLAY_NORMAL: { - - viewport->set_debug_draw(Viewport::DEBUG_DRAW_DISABLED); - - view_menu->get_popup()->set_item_checked(view_menu->get_popup()->get_item_index(VIEW_DISPLAY_NORMAL), true); - view_menu->get_popup()->set_item_checked(view_menu->get_popup()->get_item_index(VIEW_DISPLAY_WIREFRAME), false); - view_menu->get_popup()->set_item_checked(view_menu->get_popup()->get_item_index(VIEW_DISPLAY_OVERDRAW), false); - view_menu->get_popup()->set_item_checked(view_menu->get_popup()->get_item_index(VIEW_DISPLAY_SHADELESS), false); - } break; - case VIEW_DISPLAY_WIREFRAME: { - - viewport->set_debug_draw(Viewport::DEBUG_DRAW_WIREFRAME); - view_menu->get_popup()->set_item_checked(view_menu->get_popup()->get_item_index(VIEW_DISPLAY_NORMAL), false); - view_menu->get_popup()->set_item_checked(view_menu->get_popup()->get_item_index(VIEW_DISPLAY_WIREFRAME), true); - view_menu->get_popup()->set_item_checked(view_menu->get_popup()->get_item_index(VIEW_DISPLAY_OVERDRAW), false); - view_menu->get_popup()->set_item_checked(view_menu->get_popup()->get_item_index(VIEW_DISPLAY_SHADELESS), false); - - } break; - case VIEW_DISPLAY_OVERDRAW: { - - viewport->set_debug_draw(Viewport::DEBUG_DRAW_OVERDRAW); - VisualServer::get_singleton()->scenario_set_debug(get_tree()->get_root()->get_world()->get_scenario(), VisualServer::SCENARIO_DEBUG_OVERDRAW); - view_menu->get_popup()->set_item_checked(view_menu->get_popup()->get_item_index(VIEW_DISPLAY_NORMAL), false); - view_menu->get_popup()->set_item_checked(view_menu->get_popup()->get_item_index(VIEW_DISPLAY_WIREFRAME), false); - view_menu->get_popup()->set_item_checked(view_menu->get_popup()->get_item_index(VIEW_DISPLAY_OVERDRAW), true); - view_menu->get_popup()->set_item_checked(view_menu->get_popup()->get_item_index(VIEW_DISPLAY_SHADELESS), false); - - } break; - case VIEW_DISPLAY_SHADELESS: { - - viewport->set_debug_draw(Viewport::DEBUG_DRAW_UNSHADED); - VisualServer::get_singleton()->scenario_set_debug(get_tree()->get_root()->get_world()->get_scenario(), VisualServer::SCENARIO_DEBUG_SHADELESS); - view_menu->get_popup()->set_item_checked(view_menu->get_popup()->get_item_index(VIEW_DISPLAY_NORMAL), false); - view_menu->get_popup()->set_item_checked(view_menu->get_popup()->get_item_index(VIEW_DISPLAY_WIREFRAME), false); - view_menu->get_popup()->set_item_checked(view_menu->get_popup()->get_item_index(VIEW_DISPLAY_OVERDRAW), false); - view_menu->get_popup()->set_item_checked(view_menu->get_popup()->get_item_index(VIEW_DISPLAY_SHADELESS), true); + case VIEW_DISPLAY_NORMAL: + case VIEW_DISPLAY_WIREFRAME: + case VIEW_DISPLAY_OVERDRAW: + case VIEW_DISPLAY_SHADELESS: + case VIEW_DISPLAY_LIGHTING: + case VIEW_DISPLAY_NORMAL_BUFFER: + case VIEW_DISPLAY_DEBUG_SHADOW_ATLAS: + case VIEW_DISPLAY_DEBUG_DIRECTIONAL_SHADOW_ATLAS: + case VIEW_DISPLAY_DEBUG_GIPROBE_ALBEDO: + case VIEW_DISPLAY_DEBUG_GIPROBE_LIGHTING: + case VIEW_DISPLAY_DEBUG_GIPROBE_EMISSION: + case VIEW_DISPLAY_DEBUG_SCENE_LUMINANCE: + case VIEW_DISPLAY_DEBUG_SSAO: + case VIEW_DISPLAY_DEBUG_ROUGHNESS_LIMITER: { + + static const int display_options[] = { + VIEW_DISPLAY_NORMAL, + VIEW_DISPLAY_WIREFRAME, + VIEW_DISPLAY_OVERDRAW, + VIEW_DISPLAY_SHADELESS, + VIEW_DISPLAY_LIGHTING, + VIEW_DISPLAY_NORMAL_BUFFER, + VIEW_DISPLAY_WIREFRAME, + VIEW_DISPLAY_DEBUG_SHADOW_ATLAS, + VIEW_DISPLAY_DEBUG_DIRECTIONAL_SHADOW_ATLAS, + VIEW_DISPLAY_DEBUG_GIPROBE_ALBEDO, + VIEW_DISPLAY_DEBUG_GIPROBE_LIGHTING, + VIEW_DISPLAY_DEBUG_GIPROBE_EMISSION, + VIEW_DISPLAY_DEBUG_SCENE_LUMINANCE, + VIEW_DISPLAY_DEBUG_SSAO, + VIEW_DISPLAY_DEBUG_ROUGHNESS_LIMITER, + VIEW_MAX + }; + static const Viewport::DebugDraw debug_draw_modes[] = { + Viewport::DEBUG_DRAW_DISABLED, + Viewport::DEBUG_DRAW_WIREFRAME, + Viewport::DEBUG_DRAW_OVERDRAW, + Viewport::DEBUG_DRAW_UNSHADED, + Viewport::DEBUG_DRAW_LIGHTING, + Viewport::DEBUG_DRAW_NORMAL_BUFFER, + Viewport::DEBUG_DRAW_WIREFRAME, + Viewport::DEBUG_DRAW_SHADOW_ATLAS, + Viewport::DEBUG_DRAW_DIRECTIONAL_SHADOW_ATLAS, + Viewport::DEBUG_DRAW_GI_PROBE_ALBEDO, + Viewport::DEBUG_DRAW_GI_PROBE_LIGHTING, + Viewport::DEBUG_DRAW_GI_PROBE_EMISSION, + Viewport::DEBUG_DRAW_SCENE_LUMINANCE, + Viewport::DEBUG_DRAW_SSAO, + Viewport::DEBUG_DRAW_ROUGHNESS_LIMITER, + }; + + int idx = 0; + + while (display_options[idx] != VIEW_MAX) { + + int id = display_options[idx]; + int item_idx = view_menu->get_popup()->get_item_index(id); + if (item_idx != -1) { + view_menu->get_popup()->set_item_checked(item_idx, id == p_option); + } + item_idx = display_submenu->get_item_index(id); + if (item_idx != -1) { + display_submenu->set_item_checked(item_idx, id == p_option); + } + if (id == p_option) { + viewport->set_debug_draw(debug_draw_modes[idx]); + } + idx++; + } } break; } } void SpatialEditorViewport::_preview_exited_scene() { - preview_camera->disconnect("toggled", this, "_toggle_camera_preview"); + preview_camera->disconnect_compat("toggled", this, "_toggle_camera_preview"); preview_camera->set_pressed(false); _toggle_camera_preview(false); - preview_camera->connect("toggled", this, "_toggle_camera_preview"); + preview_camera->connect_compat("toggled", this, "_toggle_camera_preview"); view_menu->show(); } @@ -2872,7 +2903,7 @@ void SpatialEditorViewport::_toggle_camera_preview(bool p_activate) { if (!p_activate) { - previewing->disconnect("tree_exiting", this, "_preview_exited_scene"); + previewing->disconnect_compat("tree_exiting", this, "_preview_exited_scene"); previewing = NULL; VS::get_singleton()->viewport_attach_camera(viewport->get_viewport_rid(), camera->get_camera()); //restore if (!preview) @@ -2883,7 +2914,7 @@ void SpatialEditorViewport::_toggle_camera_preview(bool p_activate) { } else { previewing = preview; - previewing->connect("tree_exiting", this, "_preview_exited_scene"); + previewing->connect_compat("tree_exiting", this, "_preview_exited_scene"); VS::get_singleton()->viewport_attach_camera(viewport->get_viewport_rid(), preview->get_camera()); //replace view_menu->set_disabled(true); surface->update(); @@ -2894,7 +2925,7 @@ void SpatialEditorViewport::_toggle_cinema_preview(bool p_activate) { previewing_cinema = p_activate; if (!previewing_cinema) { if (previewing != NULL) - previewing->disconnect("tree_exited", this, "_preview_exited_scene"); + previewing->disconnect_compat("tree_exited", this, "_preview_exited_scene"); previewing = NULL; VS::get_singleton()->viewport_attach_camera(viewport->get_viewport_rid(), camera->get_camera()); //restore @@ -2916,9 +2947,9 @@ void SpatialEditorViewport::_selection_result_pressed(int p_result) { clicked = selection_results[p_result].item->get_instance_id(); - if (clicked) { + if (clicked.is_valid()) { _select_clicked(clicked_wants_append, true, spatial_editor->get_tool_mode() != SpatialEditor::TOOL_MODE_LIST_SELECT); - clicked = 0; + clicked = ObjectID(); } } @@ -3079,14 +3110,14 @@ void SpatialEditorViewport::set_state(const Dictionary &p_state) { view_menu->get_popup()->set_item_checked(idx, previewing_cinema); } - if (preview_camera->is_connected("toggled", this, "_toggle_camera_preview")) { - preview_camera->disconnect("toggled", this, "_toggle_camera_preview"); + if (preview_camera->is_connected_compat("toggled", this, "_toggle_camera_preview")) { + preview_camera->disconnect_compat("toggled", this, "_toggle_camera_preview"); } if (p_state.has("previewing")) { Node *pv = EditorNode::get_singleton()->get_edited_scene()->get_node(p_state["previewing"]); if (Object::cast_to<Camera>(pv)) { previewing = Object::cast_to<Camera>(pv); - previewing->connect("tree_exiting", this, "_preview_exited_scene"); + previewing->connect_compat("tree_exiting", this, "_preview_exited_scene"); VS::get_singleton()->viewport_attach_camera(viewport->get_viewport_rid(), previewing->get_camera()); //replace view_menu->set_disabled(true); surface->update(); @@ -3094,7 +3125,7 @@ void SpatialEditorViewport::set_state(const Dictionary &p_state) { preview_camera->show(); } } - preview_camera->connect("toggled", this, "_toggle_camera_preview"); + preview_camera->connect_compat("toggled", this, "_toggle_camera_preview"); } Dictionary SpatialEditorViewport::get_state() const { @@ -3390,9 +3421,9 @@ bool SpatialEditorViewport::_create_instance(Node *parent, String &path, const P editor_data->get_undo_redo().add_undo_method(parent, "remove_child", instanced_scene); String new_name = parent->validate_child_name(instanced_scene); - ScriptEditorDebugger *sed = ScriptEditor::get_singleton()->get_debugger(); - editor_data->get_undo_redo().add_do_method(sed, "live_debug_instance_node", editor->get_edited_scene()->get_path_to(parent), path, new_name); - editor_data->get_undo_redo().add_undo_method(sed, "live_debug_remove_node", NodePath(String(editor->get_edited_scene()->get_path_to(parent)) + "/" + new_name)); + EditorDebuggerNode *ed = EditorDebuggerNode::get_singleton(); + editor_data->get_undo_redo().add_do_method(ed, "live_debug_instance_node", editor->get_edited_scene()->get_path_to(parent), path, new_name); + editor_data->get_undo_redo().add_undo_method(ed, "live_debug_remove_node", NodePath(String(editor->get_edited_scene()->get_path_to(parent)) + "/" + new_name)); Transform global_transform; Spatial *parent_spatial = Object::cast_to<Spatial>(parent); @@ -3552,7 +3583,7 @@ SpatialEditorViewport::SpatialEditorViewport(SpatialEditor *p_spatial_editor, Ed editor_data = editor->get_scene_tree_dock()->get_editor_data(); editor_selection = editor->get_editor_selection(); undo_redo = editor->get_undo_redo(); - clicked = 0; + clicked_includes_current = false; orthogonal = false; lock_rotation = false; @@ -3594,6 +3625,9 @@ SpatialEditorViewport::SpatialEditorViewport(SpatialEditor *p_spatial_editor, Ed vbox->add_child(view_menu); view_menu->set_h_size_flags(0); + display_submenu = memnew(PopupMenu); + view_menu->get_popup()->add_child(display_submenu); + view_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("spatial_editor/top_view"), VIEW_TOP); view_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("spatial_editor/bottom_view"), VIEW_BOTTOM); view_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("spatial_editor/left_view"), VIEW_LEFT); @@ -3610,8 +3644,25 @@ SpatialEditorViewport::SpatialEditorViewport(SpatialEditor *p_spatial_editor, Ed view_menu->get_popup()->add_radio_check_shortcut(ED_SHORTCUT("spatial_editor/view_display_normal", TTR("Display Normal")), VIEW_DISPLAY_NORMAL); view_menu->get_popup()->add_radio_check_shortcut(ED_SHORTCUT("spatial_editor/view_display_wireframe", TTR("Display Wireframe")), VIEW_DISPLAY_WIREFRAME); view_menu->get_popup()->add_radio_check_shortcut(ED_SHORTCUT("spatial_editor/view_display_overdraw", TTR("Display Overdraw")), VIEW_DISPLAY_OVERDRAW); + view_menu->get_popup()->add_radio_check_shortcut(ED_SHORTCUT("spatial_editor/view_display_lighting", TTR("Display Lighting")), VIEW_DISPLAY_LIGHTING); view_menu->get_popup()->add_radio_check_shortcut(ED_SHORTCUT("spatial_editor/view_display_unshaded", TTR("Display Unshaded")), VIEW_DISPLAY_SHADELESS); view_menu->get_popup()->set_item_checked(view_menu->get_popup()->get_item_index(VIEW_DISPLAY_NORMAL), true); + display_submenu->add_radio_check_item(TTR("Normal Buffer"), VIEW_DISPLAY_NORMAL_BUFFER); + display_submenu->add_separator(); + display_submenu->add_radio_check_item(TTR("Shadow Atlas"), VIEW_DISPLAY_DEBUG_SHADOW_ATLAS); + display_submenu->add_radio_check_item(TTR("Directional Shadow"), VIEW_DISPLAY_DEBUG_DIRECTIONAL_SHADOW_ATLAS); + display_submenu->add_separator(); + display_submenu->add_radio_check_item(TTR("GIProbe Lighting"), VIEW_DISPLAY_DEBUG_GIPROBE_LIGHTING); + display_submenu->add_radio_check_item(TTR("GIProbe Albedo"), VIEW_DISPLAY_DEBUG_GIPROBE_ALBEDO); + display_submenu->add_radio_check_item(TTR("GIProbe Emission"), VIEW_DISPLAY_DEBUG_GIPROBE_EMISSION); + display_submenu->add_separator(); + display_submenu->add_radio_check_item(TTR("Scene Luminance"), VIEW_DISPLAY_DEBUG_SCENE_LUMINANCE); + display_submenu->add_separator(); + display_submenu->add_radio_check_item(TTR("SSAO"), VIEW_DISPLAY_DEBUG_SSAO); + display_submenu->add_separator(); + display_submenu->add_radio_check_item(TTR("Roughness Limiter"), VIEW_DISPLAY_DEBUG_ROUGHNESS_LIMITER); + display_submenu->set_name("display_advanced"); + view_menu->get_popup()->add_submenu_item(TTR("Display Advanced..."), "display_advanced"); view_menu->get_popup()->add_separator(); view_menu->get_popup()->add_check_shortcut(ED_SHORTCUT("spatial_editor/view_environment", TTR("View Environment")), VIEW_ENVIRONMENT); view_menu->get_popup()->add_check_shortcut(ED_SHORTCUT("spatial_editor/view_gizmos", TTR("View Gizmos")), VIEW_GIZMOS); @@ -3633,12 +3684,12 @@ SpatialEditorViewport::SpatialEditorViewport(SpatialEditor *p_spatial_editor, Ed view_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("spatial_editor/focus_selection"), VIEW_CENTER_TO_SELECTION); view_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("spatial_editor/align_transform_with_view"), VIEW_ALIGN_TRANSFORM_WITH_VIEW); view_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("spatial_editor/align_rotation_with_view"), VIEW_ALIGN_ROTATION_WITH_VIEW); - view_menu->get_popup()->connect("id_pressed", this, "_menu_option"); - + view_menu->get_popup()->connect_compat("id_pressed", this, "_menu_option"); + display_submenu->connect_compat("id_pressed", this, "_menu_option"); view_menu->set_disable_shortcuts(true); if (OS::get_singleton()->get_current_video_driver() == OS::VIDEO_DRIVER_GLES2) { - // Alternate display modes only work when using the GLES3 renderer; make this explicit. + // Alternate display modes only work when using the Vulkan renderer; make this explicit. const int normal_idx = view_menu->get_popup()->get_item_index(VIEW_DISPLAY_NORMAL); const int wireframe_idx = view_menu->get_popup()->get_item_index(VIEW_DISPLAY_WIREFRAME); const int overdraw_idx = view_menu->get_popup()->get_item_index(VIEW_DISPLAY_OVERDRAW); @@ -3669,7 +3720,7 @@ SpatialEditorViewport::SpatialEditorViewport(SpatialEditor *p_spatial_editor, Ed vbox->add_child(preview_camera); preview_camera->set_h_size_flags(0); preview_camera->hide(); - preview_camera->connect("toggled", this, "_toggle_camera_preview"); + preview_camera->connect_compat("toggled", this, "_toggle_camera_preview"); previewing = NULL; gizmo_scale = 1.0; @@ -3722,8 +3773,8 @@ SpatialEditorViewport::SpatialEditorViewport(SpatialEditor *p_spatial_editor, Ed selection_menu = memnew(PopupMenu); add_child(selection_menu); selection_menu->set_custom_minimum_size(Size2(100, 0) * EDSCALE); - selection_menu->connect("id_pressed", this, "_selection_result_pressed"); - selection_menu->connect("popup_hide", this, "_selection_menu_hide"); + selection_menu->connect_compat("id_pressed", this, "_selection_result_pressed"); + selection_menu->connect_compat("popup_hide", this, "_selection_menu_hide"); if (p_index == 0) { view_menu->get_popup()->set_item_checked(view_menu->get_popup()->get_item_index(VIEW_AUDIO_LISTENER), true); @@ -3733,7 +3784,7 @@ SpatialEditorViewport::SpatialEditorViewport(SpatialEditor *p_spatial_editor, Ed name = ""; _update_name(); - EditorSettings::get_singleton()->connect("settings_changed", this, "update_transform_gizmo_view"); + EditorSettings::get_singleton()->connect_compat("settings_changed", this, "update_transform_gizmo_view"); } ////////////////////////////////////////////////////////////// @@ -3841,12 +3892,12 @@ void SpatialEditorViewportContainer::_notification(int p_what) { if (p_what == NOTIFICATION_DRAW && mouseover) { - Ref<Texture> h_grabber = get_icon("grabber", "HSplitContainer"); - Ref<Texture> v_grabber = get_icon("grabber", "VSplitContainer"); + Ref<Texture2D> h_grabber = get_icon("grabber", "HSplitContainer"); + Ref<Texture2D> v_grabber = get_icon("grabber", "VSplitContainer"); - Ref<Texture> hdiag_grabber = get_icon("GuiViewportHdiagsplitter", "EditorIcons"); - Ref<Texture> vdiag_grabber = get_icon("GuiViewportVdiagsplitter", "EditorIcons"); - Ref<Texture> vh_grabber = get_icon("GuiViewportVhsplitter", "EditorIcons"); + Ref<Texture2D> hdiag_grabber = get_icon("GuiViewportHdiagsplitter", "EditorIcons"); + Ref<Texture2D> vdiag_grabber = get_icon("GuiViewportVdiagsplitter", "EditorIcons"); + Ref<Texture2D> vh_grabber = get_icon("GuiViewportVhsplitter", "EditorIcons"); Vector2 size = get_size(); @@ -4198,12 +4249,12 @@ void SpatialEditor::_generate_selection_box() { st->add_vertex(b); } - Ref<SpatialMaterial> mat = memnew(SpatialMaterial); - mat->set_flag(SpatialMaterial::FLAG_UNSHADED, true); + Ref<StandardMaterial3D> mat = memnew(StandardMaterial3D); + mat->set_shading_mode(StandardMaterial3D::SHADING_MODE_UNSHADED); mat->set_albedo(Color(1, 1, 1)); - mat->set_feature(SpatialMaterial::FEATURE_TRANSPARENT, true); - mat->set_flag(SpatialMaterial::FLAG_ALBEDO_FROM_VERTEX_COLOR, true); - mat->set_flag(SpatialMaterial::FLAG_SRGB_VERTEX_COLOR, true); + mat->set_transparency(StandardMaterial3D::TRANSPARENCY_ALPHA); + mat->set_flag(StandardMaterial3D::FLAG_ALBEDO_FROM_VERTEX_COLOR, true); + mat->set_flag(StandardMaterial3D::FLAG_SRGB_VERTEX_COLOR, true); st->set_material(mat); selection_box = st->commit(); } @@ -4446,7 +4497,7 @@ void SpatialEditor::_menu_item_toggled(bool pressed, int p_option) { } break; case MENU_TOOL_OVERRIDE_CAMERA: { - ScriptEditorDebugger *const debugger = ScriptEditor::get_singleton()->get_debugger(); + EditorDebuggerNode *const debugger = EditorDebuggerNode::get_singleton(); if (pressed) { using Override = ScriptEditorDebugger::CameraOverride; @@ -4503,7 +4554,7 @@ void SpatialEditor::_update_camera_override_viewport(Object *p_viewport) { if (!current_viewport) return; - ScriptEditorDebugger *const debugger = ScriptEditor::get_singleton()->get_debugger(); + EditorDebuggerNode *const debugger = EditorDebuggerNode::get_singleton(); camera_override_viewport_id = current_viewport->index; if (debugger->get_camera_override() >= ScriptEditorDebugger::OVERRIDE_3D_1) { @@ -4757,9 +4808,9 @@ void SpatialEditor::_init_indicators() { grid_enabled = true; indicator_mat.instance(); - indicator_mat->set_flag(SpatialMaterial::FLAG_UNSHADED, true); - indicator_mat->set_flag(SpatialMaterial::FLAG_ALBEDO_FROM_VERTEX_COLOR, true); - indicator_mat->set_flag(SpatialMaterial::FLAG_SRGB_VERTEX_COLOR, true); + indicator_mat->set_shading_mode(StandardMaterial3D::SHADING_MODE_UNSHADED); + indicator_mat->set_flag(StandardMaterial3D::FLAG_ALBEDO_FROM_VERTEX_COLOR, true); + indicator_mat->set_flag(StandardMaterial3D::FLAG_SRGB_VERTEX_COLOR, true); Vector<Color> origin_colors; Vector<Vector3> origin_points; @@ -4842,14 +4893,14 @@ void SpatialEditor::_init_indicators() { scale_gizmo[i] = Ref<ArrayMesh>(memnew(ArrayMesh)); scale_plane_gizmo[i] = Ref<ArrayMesh>(memnew(ArrayMesh)); - Ref<SpatialMaterial> mat = memnew(SpatialMaterial); - mat->set_flag(SpatialMaterial::FLAG_UNSHADED, true); + Ref<StandardMaterial3D> mat = memnew(StandardMaterial3D); + mat->set_shading_mode(StandardMaterial3D::SHADING_MODE_UNSHADED); mat->set_on_top_of_alpha(); - mat->set_feature(SpatialMaterial::FEATURE_TRANSPARENT, true); + mat->set_transparency(StandardMaterial3D::TRANSPARENCY_ALPHA); mat->set_albedo(col); gizmo_color[i] = mat; - Ref<SpatialMaterial> mat_hl = mat->duplicate(); + Ref<StandardMaterial3D> mat_hl = mat->duplicate(); mat_hl->set_albedo(Color(col.r, col.g, col.b, 1.0)); gizmo_color_hl[i] = mat_hl; @@ -4937,17 +4988,17 @@ void SpatialEditor::_init_indicators() { surftool->add_vertex(points[2]); surftool->add_vertex(points[3]); - Ref<SpatialMaterial> plane_mat = memnew(SpatialMaterial); - plane_mat->set_flag(SpatialMaterial::FLAG_UNSHADED, true); + Ref<StandardMaterial3D> plane_mat = memnew(StandardMaterial3D); + plane_mat->set_shading_mode(StandardMaterial3D::SHADING_MODE_UNSHADED); plane_mat->set_on_top_of_alpha(); - plane_mat->set_feature(SpatialMaterial::FEATURE_TRANSPARENT, true); - plane_mat->set_cull_mode(SpatialMaterial::CULL_DISABLED); + plane_mat->set_transparency(StandardMaterial3D::TRANSPARENCY_ALPHA); + plane_mat->set_cull_mode(StandardMaterial3D::CULL_DISABLED); plane_mat->set_albedo(col); plane_gizmo_color[i] = plane_mat; // needed, so we can draw planes from both sides surftool->set_material(plane_mat); surftool->commit(move_plane_gizmo[i]); - Ref<SpatialMaterial> plane_mat_hl = plane_mat->duplicate(); + Ref<StandardMaterial3D> plane_mat_hl = plane_mat->duplicate(); plane_mat_hl->set_albedo(Color(col.r, col.g, col.b, 1.0)); plane_gizmo_color_hl[i] = plane_mat_hl; // needed, so we can draw planes from both sides } @@ -5067,17 +5118,17 @@ void SpatialEditor::_init_indicators() { surftool->add_vertex(points[2]); surftool->add_vertex(points[3]); - Ref<SpatialMaterial> plane_mat = memnew(SpatialMaterial); - plane_mat->set_flag(SpatialMaterial::FLAG_UNSHADED, true); + Ref<StandardMaterial3D> plane_mat = memnew(StandardMaterial3D); + plane_mat->set_shading_mode(StandardMaterial3D::SHADING_MODE_UNSHADED); plane_mat->set_on_top_of_alpha(); - plane_mat->set_feature(SpatialMaterial::FEATURE_TRANSPARENT, true); - plane_mat->set_cull_mode(SpatialMaterial::CULL_DISABLED); + plane_mat->set_transparency(StandardMaterial3D::TRANSPARENCY_ALPHA); + plane_mat->set_cull_mode(StandardMaterial3D::CULL_DISABLED); plane_mat->set_albedo(col); plane_gizmo_color[i] = plane_mat; // needed, so we can draw planes from both sides surftool->set_material(plane_mat); surftool->commit(scale_plane_gizmo[i]); - Ref<SpatialMaterial> plane_mat_hl = plane_mat->duplicate(); + Ref<StandardMaterial3D> plane_mat_hl = plane_mat->duplicate(); plane_mat_hl->set_albedo(Color(col.r, col.g, col.b, 1.0)); plane_gizmo_color_hl[i] = plane_mat_hl; // needed, so we can draw planes from both sides } @@ -5132,8 +5183,8 @@ void SpatialEditor::_update_gizmos_menu_theme() { void SpatialEditor::_init_grid() { - PoolVector<Color> grid_colors[3]; - PoolVector<Vector3> grid_points[3]; + Vector<Color> grid_colors[3]; + Vector<Vector3> grid_points[3]; Color primary_grid_color = EditorSettings::get_singleton()->get("editors/3d/primary_grid_color"); Color secondary_grid_color = EditorSettings::get_singleton()->get("editors/3d/secondary_grid_color"); @@ -5420,12 +5471,12 @@ void SpatialEditor::_notification(int p_what) { _refresh_menu_icons(); - get_tree()->connect("node_removed", this, "_node_removed"); - EditorNode::get_singleton()->get_scene_tree_dock()->get_tree_editor()->connect("node_changed", this, "_refresh_menu_icons"); - editor_selection->connect("selection_changed", this, "_refresh_menu_icons"); + get_tree()->connect_compat("node_removed", this, "_node_removed"); + EditorNode::get_singleton()->get_scene_tree_dock()->get_tree_editor()->connect_compat("node_changed", this, "_refresh_menu_icons"); + editor_selection->connect_compat("selection_changed", this, "_refresh_menu_icons"); - editor->connect("stop_pressed", this, "_update_camera_override_button", make_binds(false)); - editor->connect("play_pressed", this, "_update_camera_override_button", make_binds(true)); + editor->connect_compat("stop_pressed", this, "_update_camera_override_button", make_binds(false)); + editor->connect_compat("play_pressed", this, "_update_camera_override_button", make_binds(true)); } else if (p_what == NOTIFICATION_ENTER_TREE) { _register_all_gizmos(); @@ -5462,7 +5513,7 @@ void SpatialEditor::_notification(int p_what) { _init_grid(); } else if (p_what == NOTIFICATION_VISIBILITY_CHANGED) { if (!is_visible() && tool_option_button[TOOL_OPT_OVERRIDE_CAMERA]->is_pressed()) { - ScriptEditorDebugger *debugger = ScriptEditor::get_singleton()->get_debugger(); + EditorDebuggerNode *debugger = EditorDebuggerNode::get_singleton(); debugger->set_camera_override(ScriptEditorDebugger::OVERRIDE_NONE); tool_option_button[TOOL_OPT_OVERRIDE_CAMERA]->set_pressed(false); @@ -5591,7 +5642,7 @@ void SpatialEditor::_register_all_gizmos() { add_gizmo_plugin(Ref<CPUParticlesGizmoPlugin>(memnew(CPUParticlesGizmoPlugin))); add_gizmo_plugin(Ref<ReflectionProbeGizmoPlugin>(memnew(ReflectionProbeGizmoPlugin))); add_gizmo_plugin(Ref<GIProbeGizmoPlugin>(memnew(GIProbeGizmoPlugin))); - add_gizmo_plugin(Ref<BakedIndirectLightGizmoPlugin>(memnew(BakedIndirectLightGizmoPlugin))); + // add_gizmo_plugin(Ref<BakedIndirectLightGizmoPlugin>(memnew(BakedIndirectLightGizmoPlugin))); add_gizmo_plugin(Ref<CollisionShapeSpatialGizmoPlugin>(memnew(CollisionShapeSpatialGizmoPlugin))); add_gizmo_plugin(Ref<CollisionPolygonSpatialGizmoPlugin>(memnew(CollisionPolygonSpatialGizmoPlugin))); add_gizmo_plugin(Ref<NavigationMeshSpatialGizmoPlugin>(memnew(NavigationMeshSpatialGizmoPlugin))); @@ -5681,7 +5732,7 @@ SpatialEditor::SpatialEditor(EditorNode *p_editor) { tool_button[TOOL_MODE_SELECT]->set_flat(true); tool_button[TOOL_MODE_SELECT]->set_pressed(true); button_binds.write[0] = MENU_TOOL_SELECT; - tool_button[TOOL_MODE_SELECT]->connect("pressed", this, "_menu_item_pressed", button_binds); + tool_button[TOOL_MODE_SELECT]->connect_compat("pressed", this, "_menu_item_pressed", button_binds); tool_button[TOOL_MODE_SELECT]->set_shortcut(ED_SHORTCUT("spatial_editor/tool_select", TTR("Select Mode"), KEY_Q)); tool_button[TOOL_MODE_SELECT]->set_tooltip(keycode_get_string(KEY_MASK_CMD) + TTR("Drag: Rotate\nAlt+Drag: Move\nAlt+RMB: Depth list selection")); @@ -5692,7 +5743,7 @@ SpatialEditor::SpatialEditor(EditorNode *p_editor) { tool_button[TOOL_MODE_MOVE]->set_toggle_mode(true); tool_button[TOOL_MODE_MOVE]->set_flat(true); button_binds.write[0] = MENU_TOOL_MOVE; - tool_button[TOOL_MODE_MOVE]->connect("pressed", this, "_menu_item_pressed", button_binds); + tool_button[TOOL_MODE_MOVE]->connect_compat("pressed", this, "_menu_item_pressed", button_binds); tool_button[TOOL_MODE_MOVE]->set_shortcut(ED_SHORTCUT("spatial_editor/tool_move", TTR("Move Mode"), KEY_W)); tool_button[TOOL_MODE_ROTATE] = memnew(ToolButton); @@ -5700,7 +5751,7 @@ SpatialEditor::SpatialEditor(EditorNode *p_editor) { tool_button[TOOL_MODE_ROTATE]->set_toggle_mode(true); tool_button[TOOL_MODE_ROTATE]->set_flat(true); button_binds.write[0] = MENU_TOOL_ROTATE; - tool_button[TOOL_MODE_ROTATE]->connect("pressed", this, "_menu_item_pressed", button_binds); + tool_button[TOOL_MODE_ROTATE]->connect_compat("pressed", this, "_menu_item_pressed", button_binds); tool_button[TOOL_MODE_ROTATE]->set_shortcut(ED_SHORTCUT("spatial_editor/tool_rotate", TTR("Rotate Mode"), KEY_E)); tool_button[TOOL_MODE_SCALE] = memnew(ToolButton); @@ -5708,7 +5759,7 @@ SpatialEditor::SpatialEditor(EditorNode *p_editor) { tool_button[TOOL_MODE_SCALE]->set_toggle_mode(true); tool_button[TOOL_MODE_SCALE]->set_flat(true); button_binds.write[0] = MENU_TOOL_SCALE; - tool_button[TOOL_MODE_SCALE]->connect("pressed", this, "_menu_item_pressed", button_binds); + tool_button[TOOL_MODE_SCALE]->connect_compat("pressed", this, "_menu_item_pressed", button_binds); tool_button[TOOL_MODE_SCALE]->set_shortcut(ED_SHORTCUT("spatial_editor/tool_scale", TTR("Scale Mode"), KEY_R)); hbc_menu->add_child(memnew(VSeparator)); @@ -5718,31 +5769,31 @@ SpatialEditor::SpatialEditor(EditorNode *p_editor) { tool_button[TOOL_MODE_LIST_SELECT]->set_toggle_mode(true); tool_button[TOOL_MODE_LIST_SELECT]->set_flat(true); button_binds.write[0] = MENU_TOOL_LIST_SELECT; - tool_button[TOOL_MODE_LIST_SELECT]->connect("pressed", this, "_menu_item_pressed", button_binds); + tool_button[TOOL_MODE_LIST_SELECT]->connect_compat("pressed", this, "_menu_item_pressed", button_binds); tool_button[TOOL_MODE_LIST_SELECT]->set_tooltip(TTR("Show a list of all objects at the position clicked\n(same as Alt+RMB in select mode).")); tool_button[TOOL_LOCK_SELECTED] = memnew(ToolButton); hbc_menu->add_child(tool_button[TOOL_LOCK_SELECTED]); button_binds.write[0] = MENU_LOCK_SELECTED; - tool_button[TOOL_LOCK_SELECTED]->connect("pressed", this, "_menu_item_pressed", button_binds); + tool_button[TOOL_LOCK_SELECTED]->connect_compat("pressed", this, "_menu_item_pressed", button_binds); tool_button[TOOL_LOCK_SELECTED]->set_tooltip(TTR("Lock the selected object in place (can't be moved).")); tool_button[TOOL_UNLOCK_SELECTED] = memnew(ToolButton); hbc_menu->add_child(tool_button[TOOL_UNLOCK_SELECTED]); button_binds.write[0] = MENU_UNLOCK_SELECTED; - tool_button[TOOL_UNLOCK_SELECTED]->connect("pressed", this, "_menu_item_pressed", button_binds); + tool_button[TOOL_UNLOCK_SELECTED]->connect_compat("pressed", this, "_menu_item_pressed", button_binds); tool_button[TOOL_UNLOCK_SELECTED]->set_tooltip(TTR("Unlock the selected object (can be moved).")); tool_button[TOOL_GROUP_SELECTED] = memnew(ToolButton); hbc_menu->add_child(tool_button[TOOL_GROUP_SELECTED]); button_binds.write[0] = MENU_GROUP_SELECTED; - tool_button[TOOL_GROUP_SELECTED]->connect("pressed", this, "_menu_item_pressed", button_binds); + tool_button[TOOL_GROUP_SELECTED]->connect_compat("pressed", this, "_menu_item_pressed", button_binds); tool_button[TOOL_GROUP_SELECTED]->set_tooltip(TTR("Makes sure the object's children are not selectable.")); tool_button[TOOL_UNGROUP_SELECTED] = memnew(ToolButton); hbc_menu->add_child(tool_button[TOOL_UNGROUP_SELECTED]); button_binds.write[0] = MENU_UNGROUP_SELECTED; - tool_button[TOOL_UNGROUP_SELECTED]->connect("pressed", this, "_menu_item_pressed", button_binds); + tool_button[TOOL_UNGROUP_SELECTED]->connect_compat("pressed", this, "_menu_item_pressed", button_binds); tool_button[TOOL_UNGROUP_SELECTED]->set_tooltip(TTR("Restores the object's children's ability to be selected.")); hbc_menu->add_child(memnew(VSeparator)); @@ -5752,7 +5803,7 @@ SpatialEditor::SpatialEditor(EditorNode *p_editor) { tool_option_button[TOOL_OPT_LOCAL_COORDS]->set_toggle_mode(true); tool_option_button[TOOL_OPT_LOCAL_COORDS]->set_flat(true); button_binds.write[0] = MENU_TOOL_LOCAL_COORDS; - tool_option_button[TOOL_OPT_LOCAL_COORDS]->connect("toggled", this, "_menu_item_toggled", button_binds); + tool_option_button[TOOL_OPT_LOCAL_COORDS]->connect_compat("toggled", this, "_menu_item_toggled", button_binds); tool_option_button[TOOL_OPT_LOCAL_COORDS]->set_shortcut(ED_SHORTCUT("spatial_editor/local_coords", TTR("Use Local Space"), KEY_T)); tool_option_button[TOOL_OPT_USE_SNAP] = memnew(ToolButton); @@ -5760,7 +5811,7 @@ SpatialEditor::SpatialEditor(EditorNode *p_editor) { tool_option_button[TOOL_OPT_USE_SNAP]->set_toggle_mode(true); tool_option_button[TOOL_OPT_USE_SNAP]->set_flat(true); button_binds.write[0] = MENU_TOOL_USE_SNAP; - tool_option_button[TOOL_OPT_USE_SNAP]->connect("toggled", this, "_menu_item_toggled", button_binds); + tool_option_button[TOOL_OPT_USE_SNAP]->connect_compat("toggled", this, "_menu_item_toggled", button_binds); tool_option_button[TOOL_OPT_USE_SNAP]->set_shortcut(ED_SHORTCUT("spatial_editor/snap", TTR("Use Snap"), KEY_Y)); hbc_menu->add_child(memnew(VSeparator)); @@ -5771,7 +5822,7 @@ SpatialEditor::SpatialEditor(EditorNode *p_editor) { tool_option_button[TOOL_OPT_OVERRIDE_CAMERA]->set_flat(true); tool_option_button[TOOL_OPT_OVERRIDE_CAMERA]->set_disabled(true); button_binds.write[0] = MENU_TOOL_OVERRIDE_CAMERA; - tool_option_button[TOOL_OPT_OVERRIDE_CAMERA]->connect("toggled", this, "_menu_item_toggled", button_binds); + tool_option_button[TOOL_OPT_OVERRIDE_CAMERA]->connect_compat("toggled", this, "_menu_item_toggled", button_binds); _update_camera_override_button(false); hbc_menu->add_child(memnew(VSeparator)); @@ -5808,7 +5859,7 @@ SpatialEditor::SpatialEditor(EditorNode *p_editor) { p->add_separator(); p->add_shortcut(ED_SHORTCUT("spatial_editor/configure_snap", TTR("Configure Snap...")), MENU_TRANSFORM_CONFIGURE_SNAP); - p->connect("id_pressed", this, "_menu_item_pressed"); + p->connect_compat("id_pressed", this, "_menu_item_pressed"); view_menu = memnew(MenuButton); view_menu->set_text(TTR("View")); @@ -5840,13 +5891,13 @@ SpatialEditor::SpatialEditor(EditorNode *p_editor) { p->set_item_checked(p->get_item_index(MENU_VIEW_ORIGIN), true); p->set_item_checked(p->get_item_index(MENU_VIEW_GRID), true); - p->connect("id_pressed", this, "_menu_item_pressed"); + p->connect_compat("id_pressed", this, "_menu_item_pressed"); gizmos_menu = memnew(PopupMenu); p->add_child(gizmos_menu); gizmos_menu->set_name("GizmosMenu"); gizmos_menu->set_hide_on_checkable_item_selection(false); - gizmos_menu->connect("id_pressed", this, "_menu_gizmo_toggled"); + gizmos_menu->connect_compat("id_pressed", this, "_menu_gizmo_toggled"); /* REST OF MENU */ @@ -5863,8 +5914,8 @@ SpatialEditor::SpatialEditor(EditorNode *p_editor) { for (uint32_t i = 0; i < VIEWPORTS_COUNT; i++) { viewports[i] = memnew(SpatialEditorViewport(this, editor, i)); - viewports[i]->connect("toggle_maximize_view", this, "_toggle_maximize_view"); - viewports[i]->connect("clicked", this, "_update_camera_override_viewport"); + viewports[i]->connect_compat("toggle_maximize_view", this, "_toggle_maximize_view"); + viewports[i]->connect_compat("clicked", this, "_update_camera_override_viewport"); viewports[i]->assign_pending_data_pointers(preview_node, &preview_bounds, accept); viewport_base->add_child(viewports[i]); } @@ -5979,7 +6030,7 @@ SpatialEditor::SpatialEditor(EditorNode *p_editor) { xform_type->add_item(TTR("Post")); xform_vbc->add_child(xform_type); - xform_dialog->connect("confirmed", this, "_xform_dialog_action"); + xform_dialog->connect_compat("confirmed", this, "_xform_dialog_action"); scenario_debug = VisualServer::SCENARIO_DEBUG_DISABLED; @@ -6133,7 +6184,7 @@ SpatialEditorPlugin::SpatialEditorPlugin(EditorNode *p_node) { editor->get_viewport()->add_child(spatial_editor); spatial_editor->hide(); - spatial_editor->connect("transform_key_request", editor->get_inspector_dock(), "_transform_keyed"); + spatial_editor->connect_compat("transform_key_request", editor->get_inspector_dock(), "_transform_keyed"); } SpatialEditorPlugin::~SpatialEditorPlugin() { @@ -6143,13 +6194,13 @@ void EditorSpatialGizmoPlugin::create_material(const String &p_name, const Color Color instanced_color = EDITOR_DEF("editors/3d_gizmos/gizmo_colors/instanced", Color(0.7, 0.7, 0.7, 0.6)); - Vector<Ref<SpatialMaterial> > mats; + Vector<Ref<StandardMaterial3D> > mats; for (int i = 0; i < 4; i++) { bool selected = i % 2 == 1; bool instanced = i < 2; - Ref<SpatialMaterial> material = Ref<SpatialMaterial>(memnew(SpatialMaterial)); + Ref<StandardMaterial3D> material = Ref<StandardMaterial3D>(memnew(StandardMaterial3D)); Color color = instanced ? instanced_color : p_color; @@ -6158,17 +6209,17 @@ void EditorSpatialGizmoPlugin::create_material(const String &p_name, const Color } material->set_albedo(color); - material->set_flag(SpatialMaterial::FLAG_UNSHADED, true); - material->set_feature(SpatialMaterial::FEATURE_TRANSPARENT, true); - material->set_render_priority(SpatialMaterial::RENDER_PRIORITY_MIN + 1); + material->set_shading_mode(StandardMaterial3D::SHADING_MODE_UNSHADED); + material->set_transparency(StandardMaterial3D::TRANSPARENCY_ALPHA); + material->set_render_priority(StandardMaterial3D::RENDER_PRIORITY_MIN + 1); if (p_use_vertex_color) { - material->set_flag(SpatialMaterial::FLAG_ALBEDO_FROM_VERTEX_COLOR, true); - material->set_flag(SpatialMaterial::FLAG_SRGB_VERTEX_COLOR, true); + material->set_flag(StandardMaterial3D::FLAG_ALBEDO_FROM_VERTEX_COLOR, true); + material->set_flag(StandardMaterial3D::FLAG_SRGB_VERTEX_COLOR, true); } if (p_billboard) { - material->set_billboard_mode(SpatialMaterial::BILLBOARD_ENABLED); + material->set_billboard_mode(StandardMaterial3D::BILLBOARD_ENABLED); } if (p_on_top && selected) { @@ -6181,17 +6232,17 @@ void EditorSpatialGizmoPlugin::create_material(const String &p_name, const Color materials[p_name] = mats; } -void EditorSpatialGizmoPlugin::create_icon_material(const String &p_name, const Ref<Texture> &p_texture, bool p_on_top, const Color &p_albedo) { +void EditorSpatialGizmoPlugin::create_icon_material(const String &p_name, const Ref<Texture2D> &p_texture, bool p_on_top, const Color &p_albedo) { Color instanced_color = EDITOR_DEF("editors/3d_gizmos/gizmo_colors/instanced", Color(0.7, 0.7, 0.7, 0.6)); - Vector<Ref<SpatialMaterial> > icons; + Vector<Ref<StandardMaterial3D> > icons; for (int i = 0; i < 4; i++) { bool selected = i % 2 == 1; bool instanced = i < 2; - Ref<SpatialMaterial> icon = Ref<SpatialMaterial>(memnew(SpatialMaterial)); + Ref<StandardMaterial3D> icon = Ref<StandardMaterial3D>(memnew(StandardMaterial3D)); Color color = instanced ? instanced_color : p_albedo; @@ -6201,16 +6252,16 @@ void EditorSpatialGizmoPlugin::create_icon_material(const String &p_name, const icon->set_albedo(color); - icon->set_flag(SpatialMaterial::FLAG_UNSHADED, true); - icon->set_flag(SpatialMaterial::FLAG_ALBEDO_FROM_VERTEX_COLOR, true); - icon->set_flag(SpatialMaterial::FLAG_SRGB_VERTEX_COLOR, true); - icon->set_cull_mode(SpatialMaterial::CULL_DISABLED); - icon->set_depth_draw_mode(SpatialMaterial::DEPTH_DRAW_DISABLED); - icon->set_feature(SpatialMaterial::FEATURE_TRANSPARENT, true); - icon->set_texture(SpatialMaterial::TEXTURE_ALBEDO, p_texture); - icon->set_flag(SpatialMaterial::FLAG_FIXED_SIZE, true); - icon->set_billboard_mode(SpatialMaterial::BILLBOARD_ENABLED); - icon->set_render_priority(SpatialMaterial::RENDER_PRIORITY_MIN); + icon->set_shading_mode(StandardMaterial3D::SHADING_MODE_UNSHADED); + icon->set_flag(StandardMaterial3D::FLAG_ALBEDO_FROM_VERTEX_COLOR, true); + icon->set_flag(StandardMaterial3D::FLAG_SRGB_VERTEX_COLOR, true); + icon->set_cull_mode(StandardMaterial3D::CULL_DISABLED); + icon->set_depth_draw_mode(StandardMaterial3D::DEPTH_DRAW_DISABLED); + icon->set_transparency(StandardMaterial3D::TRANSPARENCY_ALPHA); + icon->set_texture(StandardMaterial3D::TEXTURE_ALBEDO, p_texture); + icon->set_flag(StandardMaterial3D::FLAG_FIXED_SIZE, true); + icon->set_billboard_mode(StandardMaterial3D::BILLBOARD_ENABLED); + icon->set_render_priority(StandardMaterial3D::RENDER_PRIORITY_MIN); if (p_on_top && selected) { icon->set_on_top_of_alpha(); @@ -6223,46 +6274,46 @@ void EditorSpatialGizmoPlugin::create_icon_material(const String &p_name, const } void EditorSpatialGizmoPlugin::create_handle_material(const String &p_name, bool p_billboard) { - Ref<SpatialMaterial> handle_material = Ref<SpatialMaterial>(memnew(SpatialMaterial)); + Ref<StandardMaterial3D> handle_material = Ref<StandardMaterial3D>(memnew(StandardMaterial3D)); - handle_material->set_flag(SpatialMaterial::FLAG_UNSHADED, true); - handle_material->set_flag(SpatialMaterial::FLAG_USE_POINT_SIZE, true); - Ref<Texture> handle_t = SpatialEditor::get_singleton()->get_icon("Editor3DHandle", "EditorIcons"); + handle_material->set_shading_mode(StandardMaterial3D::SHADING_MODE_UNSHADED); + handle_material->set_flag(StandardMaterial3D::FLAG_USE_POINT_SIZE, true); + Ref<Texture2D> handle_t = SpatialEditor::get_singleton()->get_icon("Editor3DHandle", "EditorIcons"); handle_material->set_point_size(handle_t->get_width()); - handle_material->set_texture(SpatialMaterial::TEXTURE_ALBEDO, handle_t); + handle_material->set_texture(StandardMaterial3D::TEXTURE_ALBEDO, handle_t); handle_material->set_albedo(Color(1, 1, 1)); - handle_material->set_feature(SpatialMaterial::FEATURE_TRANSPARENT, true); - handle_material->set_flag(SpatialMaterial::FLAG_ALBEDO_FROM_VERTEX_COLOR, true); - handle_material->set_flag(SpatialMaterial::FLAG_SRGB_VERTEX_COLOR, true); + handle_material->set_transparency(StandardMaterial3D::TRANSPARENCY_ALPHA); + handle_material->set_flag(StandardMaterial3D::FLAG_ALBEDO_FROM_VERTEX_COLOR, true); + handle_material->set_flag(StandardMaterial3D::FLAG_SRGB_VERTEX_COLOR, true); handle_material->set_on_top_of_alpha(); if (p_billboard) { - handle_material->set_billboard_mode(SpatialMaterial::BILLBOARD_ENABLED); + handle_material->set_billboard_mode(StandardMaterial3D::BILLBOARD_ENABLED); handle_material->set_on_top_of_alpha(); } - materials[p_name] = Vector<Ref<SpatialMaterial> >(); + materials[p_name] = Vector<Ref<StandardMaterial3D> >(); materials[p_name].push_back(handle_material); } -void EditorSpatialGizmoPlugin::add_material(const String &p_name, Ref<SpatialMaterial> p_material) { - materials[p_name] = Vector<Ref<SpatialMaterial> >(); +void EditorSpatialGizmoPlugin::add_material(const String &p_name, Ref<StandardMaterial3D> p_material) { + materials[p_name] = Vector<Ref<StandardMaterial3D> >(); materials[p_name].push_back(p_material); } -Ref<SpatialMaterial> EditorSpatialGizmoPlugin::get_material(const String &p_name, const Ref<EditorSpatialGizmo> &p_gizmo) { - ERR_FAIL_COND_V(!materials.has(p_name), Ref<SpatialMaterial>()); - ERR_FAIL_COND_V(materials[p_name].size() == 0, Ref<SpatialMaterial>()); +Ref<StandardMaterial3D> EditorSpatialGizmoPlugin::get_material(const String &p_name, const Ref<EditorSpatialGizmo> &p_gizmo) { + ERR_FAIL_COND_V(!materials.has(p_name), Ref<StandardMaterial3D>()); + ERR_FAIL_COND_V(materials[p_name].size() == 0, Ref<StandardMaterial3D>()); if (p_gizmo.is_null() || materials[p_name].size() == 1) return materials[p_name][0]; int index = (p_gizmo->is_selected() ? 1 : 0) + (p_gizmo->is_editable() ? 2 : 0); - Ref<SpatialMaterial> mat = materials[p_name][index]; + Ref<StandardMaterial3D> mat = materials[p_name][index]; if (current_state == ON_TOP && p_gizmo->is_selected()) { - mat->set_flag(SpatialMaterial::FLAG_DISABLE_DEPTH_TEST, true); + mat->set_flag(StandardMaterial3D::FLAG_DISABLE_DEPTH_TEST, true); } else { - mat->set_flag(SpatialMaterial::FLAG_DISABLE_DEPTH_TEST, false); + mat->set_flag(StandardMaterial3D::FLAG_DISABLE_DEPTH_TEST, false); } return mat; diff --git a/editor/plugins/spatial_editor_plugin.h b/editor/plugins/spatial_editor_plugin.h index 269e1715ef..a4d6b13389 100644 --- a/editor/plugins/spatial_editor_plugin.h +++ b/editor/plugins/spatial_editor_plugin.h @@ -167,8 +167,19 @@ class SpatialEditorViewport : public Control { VIEW_DISPLAY_WIREFRAME, VIEW_DISPLAY_OVERDRAW, VIEW_DISPLAY_SHADELESS, + VIEW_DISPLAY_LIGHTING, + VIEW_DISPLAY_NORMAL_BUFFER, + VIEW_DISPLAY_DEBUG_SHADOW_ATLAS, + VIEW_DISPLAY_DEBUG_DIRECTIONAL_SHADOW_ATLAS, + VIEW_DISPLAY_DEBUG_GIPROBE_ALBEDO, + VIEW_DISPLAY_DEBUG_GIPROBE_LIGHTING, + VIEW_DISPLAY_DEBUG_GIPROBE_EMISSION, + VIEW_DISPLAY_DEBUG_SCENE_LUMINANCE, + VIEW_DISPLAY_DEBUG_SSAO, + VIEW_DISPLAY_DEBUG_ROUGHNESS_LIMITER, VIEW_LOCK_ROTATION, - VIEW_CINEMATIC_PREVIEW + VIEW_CINEMATIC_PREVIEW, + VIEW_MAX }; public: @@ -205,6 +216,7 @@ private: ViewportContainer *viewport_container; MenuButton *view_menu; + PopupMenu *display_submenu; Control *surface; Viewport *viewport; @@ -527,10 +539,10 @@ private: bool grid_enabled; Ref<ArrayMesh> move_gizmo[3], move_plane_gizmo[3], rotate_gizmo[3], scale_gizmo[3], scale_plane_gizmo[3]; - Ref<SpatialMaterial> gizmo_color[3]; - Ref<SpatialMaterial> plane_gizmo_color[3]; - Ref<SpatialMaterial> gizmo_color_hl[3]; - Ref<SpatialMaterial> plane_gizmo_color_hl[3]; + Ref<StandardMaterial3D> gizmo_color[3]; + Ref<StandardMaterial3D> plane_gizmo_color[3]; + Ref<StandardMaterial3D> gizmo_color_hl[3]; + Ref<StandardMaterial3D> plane_gizmo_color_hl[3]; int over_gizmo_handle; @@ -539,8 +551,8 @@ private: RID indicators_instance; RID cursor_mesh; RID cursor_instance; - Ref<SpatialMaterial> indicator_mat; - Ref<SpatialMaterial> cursor_material; + Ref<StandardMaterial3D> indicator_mat; + Ref<StandardMaterial3D> cursor_material; // Scene drag and drop support Spatial *preview_node; @@ -776,7 +788,7 @@ public: private: int current_state; List<EditorSpatialGizmo *> current_gizmos; - HashMap<String, Vector<Ref<SpatialMaterial> > > materials; + HashMap<String, Vector<Ref<StandardMaterial3D> > > materials; protected: static void _bind_methods(); @@ -785,11 +797,11 @@ protected: public: void create_material(const String &p_name, const Color &p_color, bool p_billboard = false, bool p_on_top = false, bool p_use_vertex_color = false); - void create_icon_material(const String &p_name, const Ref<Texture> &p_texture, bool p_on_top = false, const Color &p_albedo = Color(1, 1, 1, 1)); + void create_icon_material(const String &p_name, const Ref<Texture2D> &p_texture, bool p_on_top = false, const Color &p_albedo = Color(1, 1, 1, 1)); void create_handle_material(const String &p_name, bool p_billboard = false); - void add_material(const String &p_name, Ref<SpatialMaterial> p_material); + void add_material(const String &p_name, Ref<StandardMaterial3D> p_material); - Ref<SpatialMaterial> get_material(const String &p_name, const Ref<EditorSpatialGizmo> &p_gizmo = Ref<EditorSpatialGizmo>()); + Ref<StandardMaterial3D> get_material(const String &p_name, const Ref<EditorSpatialGizmo> &p_gizmo = Ref<EditorSpatialGizmo>()); virtual String get_name() const; virtual int get_priority() const; diff --git a/editor/plugins/sprite_editor_plugin.cpp b/editor/plugins/sprite_editor_plugin.cpp index 6757b180a3..92bdbdd733 100644 --- a/editor/plugins/sprite_editor_plugin.cpp +++ b/editor/plugins/sprite_editor_plugin.cpp @@ -167,7 +167,7 @@ void SpriteEditor::_menu_option(int p_option) { void SpriteEditor::_update_mesh_data() { - Ref<Texture> texture = node->get_texture(); + Ref<Texture2D> texture = node->get_texture(); if (texture.is_null()) { err_dialog->set_text(TTR("Sprite is empty!")); err_dialog->popup_centered_minsize(); @@ -330,7 +330,7 @@ void SpriteEditor::_convert_to_mesh_2d_node() { a[Mesh::ARRAY_TEX_UV] = computed_uv; a[Mesh::ARRAY_INDEX] = computed_indices; - mesh->add_surface_from_arrays(Mesh::PRIMITIVE_TRIANGLES, a, Array(), Mesh::ARRAY_FLAG_USE_2D_VERTICES); + mesh->add_surface_from_arrays(Mesh::PRIMITIVE_TRIANGLES, a, Array(), Dictionary(), Mesh::ARRAY_FLAG_USE_2D_VERTICES); MeshInstance2D *mesh_instance = memnew(MeshInstance2D); mesh_instance->set_mesh(mesh); @@ -358,13 +358,13 @@ void SpriteEditor::_convert_to_polygon_2d_node() { for (int i = 0; i < computed_outline_lines.size(); i++) total_point_count += computed_outline_lines[i].size(); - PoolVector2Array polygon; + PackedVector2Array polygon; polygon.resize(total_point_count); - PoolVector2Array::Write polygon_write = polygon.write(); + Vector2 *polygon_write = polygon.ptrw(); - PoolVector2Array uvs; + PackedVector2Array uvs; uvs.resize(total_point_count); - PoolVector2Array::Write uvs_write = uvs.write(); + Vector2 *uvs_write = uvs.ptrw(); int current_point_index = 0; @@ -376,9 +376,9 @@ void SpriteEditor::_convert_to_polygon_2d_node() { Vector<Vector2> outline = computed_outline_lines[i]; Vector<Vector2> uv_outline = outline_lines[i]; - PoolIntArray pia; + PackedIntArray pia; pia.resize(outline.size()); - PoolIntArray::Write pia_write = pia.write(); + int *pia_write = pia.ptrw(); for (int pi = 0; pi < outline.size(); pi++) { polygon_write[current_point_index] = outline[pi]; @@ -442,9 +442,9 @@ void SpriteEditor::_create_light_occluder_2d_node() { Ref<OccluderPolygon2D> polygon; polygon.instance(); - PoolVector2Array a; + PackedVector2Array a; a.resize(outline.size()); - PoolVector2Array::Write aw = a.write(); + Vector2 *aw = a.ptrw(); for (int io = 0; io < outline.size(); io++) { aw[io] = outline[io]; } @@ -476,7 +476,7 @@ void SpriteEditor::_add_as_sibling_or_child(Node *p_own_node, Node *p_new_node) void SpriteEditor::_debug_uv_draw() { - Ref<Texture> tex = node->get_texture(); + Ref<Texture2D> tex = node->get_texture(); ERR_FAIL_COND(!tex.is_valid()); Point2 draw_pos_offset = Point2(1.0, 1.0); @@ -526,7 +526,7 @@ SpriteEditor::SpriteEditor() { options->get_popup()->add_item(TTR("Create LightOccluder2D Sibling"), MENU_OPTION_CREATE_LIGHT_OCCLUDER_2D); options->set_switch_on_hover(true); - options->get_popup()->connect("id_pressed", this, "_menu_option"); + options->get_popup()->connect_compat("id_pressed", this, "_menu_option"); err_dialog = memnew(AcceptDialog); add_child(err_dialog); @@ -542,9 +542,9 @@ SpriteEditor::SpriteEditor() { scroll->set_enable_v_scroll(true); vb->add_margin_child(TTR("Preview:"), scroll, true); debug_uv = memnew(Control); - debug_uv->connect("draw", this, "_debug_uv_draw"); + debug_uv->connect_compat("draw", this, "_debug_uv_draw"); scroll->add_child(debug_uv); - debug_uv_dialog->connect("confirmed", this, "_create_node"); + debug_uv_dialog->connect_compat("confirmed", this, "_create_node"); HBoxContainer *hb = memnew(HBoxContainer); hb->add_child(memnew(Label(TTR("Simplification: ")))); @@ -573,7 +573,7 @@ SpriteEditor::SpriteEditor() { hb->add_spacer(); update_preview = memnew(Button); update_preview->set_text(TTR("Update Preview")); - update_preview->connect("pressed", this, "_update_mesh_data"); + update_preview->connect_compat("pressed", this, "_update_mesh_data"); hb->add_child(update_preview); vb->add_margin_child(TTR("Settings:"), hb); diff --git a/editor/plugins/sprite_frames_editor_plugin.cpp b/editor/plugins/sprite_frames_editor_plugin.cpp index 4101980e29..c80ba873fb 100644 --- a/editor/plugins/sprite_frames_editor_plugin.cpp +++ b/editor/plugins/sprite_frames_editor_plugin.cpp @@ -44,7 +44,7 @@ void SpriteFramesEditor::_open_sprite_sheet() { file_split_sheet->clear_filters(); List<String> extensions; - ResourceLoader::get_recognized_extensions_for_type("Texture", &extensions); + ResourceLoader::get_recognized_extensions_for_type("Texture2D", &extensions); for (int i = 0; i < extensions.size(); i++) { file_split_sheet->add_filter("*." + extensions[i]); } @@ -234,7 +234,7 @@ void SpriteFramesEditor::_notification(int p_what) { _delete->set_icon(get_icon("Remove", "EditorIcons")); new_anim->set_icon(get_icon("New", "EditorIcons")); remove_anim->set_icon(get_icon("Remove", "EditorIcons")); - FALLTHROUGH; + [[fallthrough]]; } case NOTIFICATION_THEME_CHANGED: { splite_sheet_scroll->add_style_override("bg", get_stylebox("bg", "Tree")); @@ -245,15 +245,15 @@ void SpriteFramesEditor::_notification(int p_what) { } } -void SpriteFramesEditor::_file_load_request(const PoolVector<String> &p_path, int p_at_pos) { +void SpriteFramesEditor::_file_load_request(const Vector<String> &p_path, int p_at_pos) { ERR_FAIL_COND(!frames->has_animation(edited_anim)); - List<Ref<Texture> > resources; + List<Ref<Texture2D> > resources; for (int i = 0; i < p_path.size(); i++) { - Ref<Texture> resource; + Ref<Texture2D> resource; resource = ResourceLoader::load(p_path[i]); if (resource.is_null()) { @@ -278,7 +278,7 @@ void SpriteFramesEditor::_file_load_request(const PoolVector<String> &p_path, in int count = 0; - for (List<Ref<Texture> >::Element *E = resources.front(); E; E = E->next()) { + for (List<Ref<Texture2D> >::Element *E = resources.front(); E; E = E->next()) { undo_redo->add_do_method(frames, "add_frame", edited_anim, E->get(), p_at_pos == -1 ? -1 : p_at_pos + count); undo_redo->add_undo_method(frames, "remove_frame", edited_anim, p_at_pos == -1 ? fc : p_at_pos); @@ -297,7 +297,7 @@ void SpriteFramesEditor::_load_pressed() { file->clear_filters(); List<String> extensions; - ResourceLoader::get_recognized_extensions_for_type("Texture", &extensions); + ResourceLoader::get_recognized_extensions_for_type("Texture2D", &extensions); for (int i = 0; i < extensions.size(); i++) file->add_filter("*." + extensions[i]); @@ -310,7 +310,7 @@ void SpriteFramesEditor::_paste_pressed() { ERR_FAIL_COND(!frames->has_animation(edited_anim)); - Ref<Texture> r = EditorSettings::get_singleton()->get_resource_clipboard(); + Ref<Texture2D> r = EditorSettings::get_singleton()->get_resource_clipboard(); if (!r.is_valid()) { dialog->set_text(TTR("Resource clipboard is empty or not a texture!")); dialog->set_title(TTR("Error!")); @@ -333,7 +333,7 @@ void SpriteFramesEditor::_copy_pressed() { if (tree->get_current() < 0) return; - Ref<Texture> r = frames->get_frame(edited_anim, tree->get_current()); + Ref<Texture2D> r = frames->get_frame(edited_anim, tree->get_current()); if (!r.is_valid()) { return; } @@ -356,7 +356,7 @@ void SpriteFramesEditor::_empty_pressed() { from = frames->get_frame_count(edited_anim); } - Ref<Texture> r; + Ref<Texture2D> r; undo_redo->create_action(TTR("Add Empty")); undo_redo->add_do_method(frames, "add_frame", edited_anim, r, from); @@ -381,7 +381,7 @@ void SpriteFramesEditor::_empty2_pressed() { from = frames->get_frame_count(edited_anim); } - Ref<Texture> r; + Ref<Texture2D> r; undo_redo->create_action(TTR("Add Empty")); undo_redo->add_do_method(frames, "add_frame", edited_anim, r, from + 1); @@ -603,7 +603,7 @@ void SpriteFramesEditor::_animation_remove_confirmed() { undo_redo->add_undo_method(frames, "set_animation_loop", edited_anim, frames->get_animation_loop(edited_anim)); int fc = frames->get_frame_count(edited_anim); for (int i = 0; i < fc; i++) { - Ref<Texture> frame = frames->get_frame(edited_anim, i); + Ref<Texture2D> frame = frames->get_frame(edited_anim, i); undo_redo->add_undo_method(frames, "add_frame", edited_anim, frame); } undo_redo->add_do_method(this, "_update_library"); @@ -688,7 +688,7 @@ void SpriteFramesEditor::_update_library(bool p_skip_selector) { for (int i = 0; i < frames->get_frame_count(edited_anim); i++) { String name; - Ref<Texture> icon; + Ref<Texture2D> icon; if (frames->get_frame(edited_anim, i).is_null()) { @@ -775,7 +775,7 @@ bool SpriteFramesEditor::can_drop_data_fw(const Point2 &p_point, const Variant & if (String(d["type"]) == "resource" && d.has("resource")) { RES r = d["resource"]; - Ref<Texture> texture = r; + Ref<Texture2D> texture = r; if (texture.is_valid()) { @@ -794,7 +794,7 @@ bool SpriteFramesEditor::can_drop_data_fw(const Point2 &p_point, const Variant & String file = files[i]; String ftype = EditorFileSystem::get_singleton()->get_file_type(file); - if (!ClassDB::is_parent_class(ftype, "Texture")) { + if (!ClassDB::is_parent_class(ftype, "Texture2D")) { return false; } } @@ -819,7 +819,7 @@ void SpriteFramesEditor::drop_data_fw(const Point2 &p_point, const Variant &p_da if (String(d["type"]) == "resource" && d.has("resource")) { RES r = d["resource"]; - Ref<Texture> texture = r; + Ref<Texture2D> texture = r; if (texture.is_valid()) { bool reorder = false; @@ -852,7 +852,7 @@ void SpriteFramesEditor::drop_data_fw(const Point2 &p_point, const Variant &p_da if (String(d["type"]) == "files") { - PoolVector<String> files = d["files"]; + Vector<String> files = d["files"]; _file_load_request(files, at_pos); } @@ -905,19 +905,19 @@ SpriteFramesEditor::SpriteFramesEditor() { new_anim = memnew(ToolButton); new_anim->set_tooltip(TTR("New Animation")); hbc_animlist->add_child(new_anim); - new_anim->connect("pressed", this, "_animation_add"); + new_anim->connect_compat("pressed", this, "_animation_add"); remove_anim = memnew(ToolButton); remove_anim->set_tooltip(TTR("Remove Animation")); hbc_animlist->add_child(remove_anim); - remove_anim->connect("pressed", this, "_animation_remove"); + remove_anim->connect_compat("pressed", this, "_animation_remove"); animations = memnew(Tree); sub_vb->add_child(animations); animations->set_v_size_flags(SIZE_EXPAND_FILL); animations->set_hide_root(true); - animations->connect("cell_selected", this, "_animation_select"); - animations->connect("item_edited", this, "_animation_name_edited"); + animations->connect_compat("cell_selected", this, "_animation_select"); + animations->connect_compat("item_edited", this, "_animation_name_edited"); animations->set_allow_reselect(true); anim_speed = memnew(SpinBox); @@ -925,12 +925,12 @@ SpriteFramesEditor::SpriteFramesEditor() { anim_speed->set_min(0); anim_speed->set_max(100); anim_speed->set_step(0.01); - anim_speed->connect("value_changed", this, "_animation_fps_changed"); + anim_speed->connect_compat("value_changed", this, "_animation_fps_changed"); anim_loop = memnew(CheckButton); anim_loop->set_text(TTR("Loop")); vbc_animlist->add_child(anim_loop); - anim_loop->connect("pressed", this, "_animation_loop_changed"); + anim_loop->connect_compat("pressed", this, "_animation_loop_changed"); VBoxContainer *vbc = memnew(VBoxContainer); add_child(vbc); @@ -1004,16 +1004,16 @@ SpriteFramesEditor::SpriteFramesEditor() { dialog = memnew(AcceptDialog); add_child(dialog); - load->connect("pressed", this, "_load_pressed"); - load_sheet->connect("pressed", this, "_open_sprite_sheet"); - _delete->connect("pressed", this, "_delete_pressed"); - copy->connect("pressed", this, "_copy_pressed"); - paste->connect("pressed", this, "_paste_pressed"); - empty->connect("pressed", this, "_empty_pressed"); - empty2->connect("pressed", this, "_empty2_pressed"); - move_up->connect("pressed", this, "_up_pressed"); - move_down->connect("pressed", this, "_down_pressed"); - file->connect("files_selected", this, "_file_load_request"); + load->connect_compat("pressed", this, "_load_pressed"); + load_sheet->connect_compat("pressed", this, "_open_sprite_sheet"); + _delete->connect_compat("pressed", this, "_delete_pressed"); + copy->connect_compat("pressed", this, "_copy_pressed"); + paste->connect_compat("pressed", this, "_paste_pressed"); + empty->connect_compat("pressed", this, "_empty_pressed"); + empty2->connect_compat("pressed", this, "_empty2_pressed"); + move_up->connect_compat("pressed", this, "_up_pressed"); + move_down->connect_compat("pressed", this, "_down_pressed"); + file->connect_compat("files_selected", this, "_file_load_request"); loading_scene = false; sel = -1; @@ -1023,14 +1023,14 @@ SpriteFramesEditor::SpriteFramesEditor() { delete_dialog = memnew(ConfirmationDialog); add_child(delete_dialog); - delete_dialog->connect("confirmed", this, "_animation_remove_confirmed"); + delete_dialog->connect_compat("confirmed", this, "_animation_remove_confirmed"); split_sheet_dialog = memnew(ConfirmationDialog); add_child(split_sheet_dialog); VBoxContainer *split_sheet_vb = memnew(VBoxContainer); split_sheet_dialog->add_child(split_sheet_vb); split_sheet_dialog->set_title(TTR("Select Frames")); - split_sheet_dialog->connect("confirmed", this, "_sheet_add_frames"); + split_sheet_dialog->connect_compat("confirmed", this, "_sheet_add_frames"); HBoxContainer *split_sheet_hb = memnew(HBoxContainer); @@ -1041,7 +1041,7 @@ SpriteFramesEditor::SpriteFramesEditor() { split_sheet_h->set_max(128); split_sheet_h->set_step(1); split_sheet_hb->add_child(split_sheet_h); - split_sheet_h->connect("value_changed", this, "_sheet_spin_changed"); + split_sheet_h->connect_compat("value_changed", this, "_sheet_spin_changed"); ss_label = memnew(Label(TTR("Vertical:"))); split_sheet_hb->add_child(ss_label); @@ -1050,13 +1050,13 @@ SpriteFramesEditor::SpriteFramesEditor() { split_sheet_v->set_max(128); split_sheet_v->set_step(1); split_sheet_hb->add_child(split_sheet_v); - split_sheet_v->connect("value_changed", this, "_sheet_spin_changed"); + split_sheet_v->connect_compat("value_changed", this, "_sheet_spin_changed"); split_sheet_hb->add_spacer(); Button *select_clear_all = memnew(Button); select_clear_all->set_text(TTR("Select/Clear All Frames")); - select_clear_all->connect("pressed", this, "_sheet_select_clear_all_frames"); + select_clear_all->connect_compat("pressed", this, "_sheet_select_clear_all_frames"); split_sheet_hb->add_child(select_clear_all); split_sheet_vb->add_child(split_sheet_hb); @@ -1064,8 +1064,8 @@ SpriteFramesEditor::SpriteFramesEditor() { split_sheet_preview = memnew(TextureRect); split_sheet_preview->set_expand(false); split_sheet_preview->set_mouse_filter(MOUSE_FILTER_PASS); - split_sheet_preview->connect("draw", this, "_sheet_preview_draw"); - split_sheet_preview->connect("gui_input", this, "_sheet_preview_input"); + split_sheet_preview->connect_compat("draw", this, "_sheet_preview_draw"); + split_sheet_preview->connect_compat("gui_input", this, "_sheet_preview_input"); splite_sheet_scroll = memnew(ScrollContainer); splite_sheet_scroll->set_enable_h_scroll(true); @@ -1083,7 +1083,7 @@ SpriteFramesEditor::SpriteFramesEditor() { file_split_sheet->set_title(TTR("Create Frames from Sprite Sheet")); file_split_sheet->set_mode(EditorFileDialog::MODE_OPEN_FILE); add_child(file_split_sheet); - file_split_sheet->connect("file_selected", this, "_prepare_sprite_sheet"); + file_split_sheet->connect_compat("file_selected", this, "_prepare_sprite_sheet"); } void SpriteFramesEditorPlugin::edit(Object *p_object) { diff --git a/editor/plugins/sprite_frames_editor_plugin.h b/editor/plugins/sprite_frames_editor_plugin.h index aa683605ed..1fa93b5c47 100644 --- a/editor/plugins/sprite_frames_editor_plugin.h +++ b/editor/plugins/sprite_frames_editor_plugin.h @@ -86,7 +86,7 @@ class SpriteFramesEditor : public HSplitContainer { void _load_pressed(); void _load_scene_pressed(); - void _file_load_request(const PoolVector<String> &p_path, int p_at_pos = -1); + void _file_load_request(const Vector<String> &p_path, int p_at_pos = -1); void _copy_pressed(); void _paste_pressed(); void _empty_pressed(); diff --git a/editor/plugins/style_box_editor_plugin.cpp b/editor/plugins/style_box_editor_plugin.cpp index eebcd567a4..a9936658c3 100644 --- a/editor/plugins/style_box_editor_plugin.cpp +++ b/editor/plugins/style_box_editor_plugin.cpp @@ -54,11 +54,11 @@ void EditorInspectorPluginStyleBox::parse_end() { void StyleBoxPreview::edit(const Ref<StyleBox> &p_stylebox) { if (stylebox.is_valid()) - stylebox->disconnect("changed", this, "_sb_changed"); + stylebox->disconnect_compat("changed", this, "_sb_changed"); stylebox = p_stylebox; if (p_stylebox.is_valid()) { preview->add_style_override("panel", stylebox); - stylebox->connect("changed", this, "_sb_changed"); + stylebox->connect_compat("changed", this, "_sb_changed"); } _sb_changed(); } @@ -91,7 +91,7 @@ StyleBoxPreview::StyleBoxPreview() { preview = memnew(Control); preview->set_custom_minimum_size(Size2(0, 150 * EDSCALE)); preview->set_clip_contents(true); - preview->connect("draw", this, "_redraw"); + preview->connect_compat("draw", this, "_redraw"); add_margin_child(TTR("Preview:"), preview); } diff --git a/editor/plugins/text_editor.cpp b/editor/plugins/text_editor.cpp index 57447abf47..a8b6d74c1f 100644 --- a/editor/plugins/text_editor.cpp +++ b/editor/plugins/text_editor.cpp @@ -163,7 +163,7 @@ String TextEditor::get_name() { return name; } -Ref<Texture> TextEditor::get_icon() { +Ref<Texture2D> TextEditor::get_icon() { return EditorNode::get_singleton()->get_object_icon(text_file.operator->(), ""); } @@ -185,7 +185,7 @@ void TextEditor::set_edited_resource(const RES &p_res) { code_editor->update_line_and_column(); } -void TextEditor::add_callback(const String &p_function, PoolStringArray p_args) { +void TextEditor::add_callback(const String &p_function, PackedStringArray p_args) { } void TextEditor::set_debugger_active(bool p_active) { @@ -491,6 +491,12 @@ void TextEditor::_edit_option(int p_op) { // So this will be delegated to the ScriptEditor. emit_signal("search_in_files_requested", selected_text); } break; + case REPLACE_IN_FILES: { + + String selected_text = code_editor->get_text_edit()->get_selection_text(); + + emit_signal("replace_in_files_requested", selected_text); + } break; case SEARCH_GOTO_LINE: { goto_line_dialog->popup_find_line(tx); @@ -627,19 +633,19 @@ TextEditor::TextEditor() { code_editor = memnew(CodeTextEditor); add_child(code_editor); code_editor->add_constant_override("separation", 0); - code_editor->connect("load_theme_settings", this, "_load_theme_settings"); - code_editor->connect("validate_script", this, "_validate_script"); + code_editor->connect_compat("load_theme_settings", this, "_load_theme_settings"); + code_editor->connect_compat("validate_script", this, "_validate_script"); code_editor->set_anchors_and_margins_preset(Control::PRESET_WIDE); code_editor->set_v_size_flags(Control::SIZE_EXPAND_FILL); update_settings(); code_editor->get_text_edit()->set_context_menu_enabled(false); - code_editor->get_text_edit()->connect("gui_input", this, "_text_edit_gui_input"); + code_editor->get_text_edit()->connect_compat("gui_input", this, "_text_edit_gui_input"); context_menu = memnew(PopupMenu); add_child(context_menu); - context_menu->connect("id_pressed", this, "_edit_option"); + context_menu->connect_compat("id_pressed", this, "_edit_option"); edit_hb = memnew(HBoxContainer); @@ -647,7 +653,7 @@ TextEditor::TextEditor() { edit_hb->add_child(search_menu); search_menu->set_text(TTR("Search")); search_menu->set_switch_on_hover(true); - search_menu->get_popup()->connect("id_pressed", this, "_edit_option"); + search_menu->get_popup()->connect_compat("id_pressed", this, "_edit_option"); search_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/find"), SEARCH_FIND); search_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/find_next"), SEARCH_FIND_NEXT); @@ -655,12 +661,13 @@ TextEditor::TextEditor() { search_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/replace"), SEARCH_REPLACE); search_menu->get_popup()->add_separator(); search_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/find_in_files"), SEARCH_IN_FILES); + search_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/replace_in_files"), REPLACE_IN_FILES); edit_menu = memnew(MenuButton); edit_hb->add_child(edit_menu); edit_menu->set_text(TTR("Edit")); edit_menu->set_switch_on_hover(true); - edit_menu->get_popup()->connect("id_pressed", this, "_edit_option"); + edit_menu->get_popup()->connect_compat("id_pressed", this, "_edit_option"); edit_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/undo"), EDIT_UNDO); edit_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/redo"), EDIT_REDO); @@ -693,7 +700,7 @@ TextEditor::TextEditor() { convert_case->add_shortcut(ED_SHORTCUT("script_text_editor/convert_to_uppercase", TTR("Uppercase")), EDIT_TO_UPPERCASE); convert_case->add_shortcut(ED_SHORTCUT("script_text_editor/convert_to_lowercase", TTR("Lowercase")), EDIT_TO_LOWERCASE); convert_case->add_shortcut(ED_SHORTCUT("script_text_editor/capitalize", TTR("Capitalize")), EDIT_CAPITALIZE); - convert_case->connect("id_pressed", this, "_edit_option"); + convert_case->connect_compat("id_pressed", this, "_edit_option"); highlighters["Standard"] = NULL; highlighter_menu = memnew(PopupMenu); @@ -701,13 +708,13 @@ TextEditor::TextEditor() { edit_menu->get_popup()->add_child(highlighter_menu); edit_menu->get_popup()->add_submenu_item(TTR("Syntax Highlighter"), "highlighter_menu"); highlighter_menu->add_radio_check_item(TTR("Standard")); - highlighter_menu->connect("id_pressed", this, "_change_syntax_highlighter"); + highlighter_menu->connect_compat("id_pressed", this, "_change_syntax_highlighter"); MenuButton *goto_menu = memnew(MenuButton); edit_hb->add_child(goto_menu); goto_menu->set_text(TTR("Go To")); goto_menu->set_switch_on_hover(true); - goto_menu->get_popup()->connect("id_pressed", this, "_edit_option"); + goto_menu->get_popup()->connect_compat("id_pressed", this, "_edit_option"); goto_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/goto_line"), SEARCH_GOTO_LINE); goto_menu->get_popup()->add_separator(); @@ -717,8 +724,8 @@ TextEditor::TextEditor() { goto_menu->get_popup()->add_child(bookmarks_menu); goto_menu->get_popup()->add_submenu_item(TTR("Bookmarks"), "Bookmarks"); _update_bookmark_list(); - bookmarks_menu->connect("about_to_show", this, "_update_bookmark_list"); - bookmarks_menu->connect("index_pressed", this, "_bookmark_item_pressed"); + bookmarks_menu->connect_compat("about_to_show", this, "_update_bookmark_list"); + bookmarks_menu->connect_compat("index_pressed", this, "_bookmark_item_pressed"); goto_line_dialog = memnew(GotoLineDialog); add_child(goto_line_dialog); diff --git a/editor/plugins/text_editor.h b/editor/plugins/text_editor.h index fe157a29e6..c80052e7ba 100644 --- a/editor/plugins/text_editor.h +++ b/editor/plugins/text_editor.h @@ -88,6 +88,7 @@ private: SEARCH_FIND_PREV, SEARCH_REPLACE, SEARCH_IN_FILES, + REPLACE_IN_FILES, SEARCH_GOTO_LINE, BOOKMARK_TOGGLE, BOOKMARK_GOTO_NEXT, @@ -120,7 +121,7 @@ public: virtual void set_syntax_highlighter(SyntaxHighlighter *p_highlighter); virtual String get_name(); - virtual Ref<Texture> get_icon(); + virtual Ref<Texture2D> get_icon(); virtual RES get_edited_resource() const; virtual void set_edited_resource(const RES &p_res); void set_edited_file(const Ref<TextFile> &p_file); @@ -146,7 +147,7 @@ public: virtual bool can_lose_focus_on_node_selection() { return true; } virtual void set_debugger_active(bool p_active); virtual void set_tooltip_request_func(String p_method, Object *p_obj); - virtual void add_callback(const String &p_function, PoolStringArray p_args); + virtual void add_callback(const String &p_function, PackedStringArray p_args); virtual Control *get_edit_menu(); virtual void clear_edit_menu(); diff --git a/editor/plugins/texture_editor_plugin.cpp b/editor/plugins/texture_editor_plugin.cpp index 9489836984..60f9bb5dc1 100644 --- a/editor/plugins/texture_editor_plugin.cpp +++ b/editor/plugins/texture_editor_plugin.cpp @@ -46,7 +46,7 @@ void TextureEditor::_notification(int p_what) { if (p_what == NOTIFICATION_DRAW) { - Ref<Texture> checkerboard = get_icon("Checkerboard", "EditorIcons"); + Ref<Texture2D> checkerboard = get_icon("Checkerboard", "EditorIcons"); Size2 size = get_size(); draw_texture_rect(checkerboard, Rect2(Point2(), size), true); @@ -110,7 +110,7 @@ void TextureEditor::_changed_callback(Object *p_changed, const char *p_prop) { update(); } -void TextureEditor::edit(Ref<Texture> p_texture) { +void TextureEditor::edit(Ref<Texture2D> p_texture) { if (!texture.is_null()) texture->remove_change_receptor(this); @@ -132,6 +132,7 @@ void TextureEditor::_bind_methods() { TextureEditor::TextureEditor() { + set_texture_repeat(TextureRepeat::TEXTURE_REPEAT_ENABLED); set_custom_minimum_size(Size2(1, 150)); } @@ -148,11 +149,11 @@ bool EditorInspectorPluginTexture::can_handle(Object *p_object) { void EditorInspectorPluginTexture::parse_begin(Object *p_object) { - Texture *texture = Object::cast_to<Texture>(p_object); + Texture2D *texture = Object::cast_to<Texture2D>(p_object); if (!texture) { return; } - Ref<Texture> m(texture); + Ref<Texture2D> m(texture); TextureEditor *editor = memnew(TextureEditor); editor->edit(m); diff --git a/editor/plugins/texture_editor_plugin.h b/editor/plugins/texture_editor_plugin.h index f587579902..29ad0183dc 100644 --- a/editor/plugins/texture_editor_plugin.h +++ b/editor/plugins/texture_editor_plugin.h @@ -39,7 +39,7 @@ class TextureEditor : public Control { GDCLASS(TextureEditor, Control); - Ref<Texture> texture; + Ref<Texture2D> texture; protected: void _notification(int p_what); @@ -48,7 +48,7 @@ protected: static void _bind_methods(); public: - void edit(Ref<Texture> p_texture); + void edit(Ref<Texture2D> p_texture); TextureEditor(); ~TextureEditor(); }; @@ -66,7 +66,7 @@ class TextureEditorPlugin : public EditorPlugin { GDCLASS(TextureEditorPlugin, EditorPlugin); public: - virtual String get_name() const { return "Texture"; } + virtual String get_name() const { return "Texture2D"; } TextureEditorPlugin(EditorNode *p_node); }; diff --git a/editor/plugins/texture_region_editor_plugin.cpp b/editor/plugins/texture_region_editor_plugin.cpp index 94aef60f1f..065833fd2b 100644 --- a/editor/plugins/texture_region_editor_plugin.cpp +++ b/editor/plugins/texture_region_editor_plugin.cpp @@ -49,7 +49,7 @@ void draw_margin_line(Control *edit_draw, Vector2 from, Vector2 to) { } void TextureRegionEditor::_region_draw() { - Ref<Texture> base_tex = NULL; + Ref<Texture2D> base_tex = NULL; if (node_sprite) base_tex = node_sprite->get_texture(); else if (node_sprite_3d) @@ -134,7 +134,7 @@ void TextureRegionEditor::_region_draw() { } } - Ref<Texture> select_handle = get_icon("EditorHandle", "EditorIcons"); + Ref<Texture2D> select_handle = get_icon("EditorHandle", "EditorIcons"); Rect2 scroll_rect(Point2(), base_tex->get_size()); @@ -672,7 +672,7 @@ void TextureRegionEditor::_update_autoslice() { autoslice_is_dirty = false; autoslice_cache.clear(); - Ref<Texture> texture = NULL; + Ref<Texture2D> texture = NULL; if (node_sprite) texture = node_sprite->get_texture(); else if (node_sprite_3d) @@ -863,7 +863,7 @@ void TextureRegionEditor::_changed_callback(Object *p_changed, const char *p_pro } void TextureRegionEditor::_edit_region() { - Ref<Texture> texture = NULL; + Ref<Texture2D> texture = NULL; if (node_sprite) texture = node_sprite->get_texture(); else if (node_sprite_3d) @@ -935,7 +935,7 @@ TextureRegionEditor::TextureRegionEditor(EditorNode *p_editor) { snap_mode_button->add_item(TTR("Grid Snap"), 2); snap_mode_button->add_item(TTR("Auto Slice"), 3); snap_mode_button->select(0); - snap_mode_button->connect("item_selected", this, "_set_snap_mode"); + snap_mode_button->connect_compat("item_selected", this, "_set_snap_mode"); hb_grid = memnew(HBoxContainer); hb_tools->add_child(hb_grid); @@ -949,7 +949,7 @@ TextureRegionEditor::TextureRegionEditor(EditorNode *p_editor) { sb_off_x->set_step(1); sb_off_x->set_value(snap_offset.x); sb_off_x->set_suffix("px"); - sb_off_x->connect("value_changed", this, "_set_snap_off_x"); + sb_off_x->connect_compat("value_changed", this, "_set_snap_off_x"); hb_grid->add_child(sb_off_x); sb_off_y = memnew(SpinBox); @@ -958,7 +958,7 @@ TextureRegionEditor::TextureRegionEditor(EditorNode *p_editor) { sb_off_y->set_step(1); sb_off_y->set_value(snap_offset.y); sb_off_y->set_suffix("px"); - sb_off_y->connect("value_changed", this, "_set_snap_off_y"); + sb_off_y->connect_compat("value_changed", this, "_set_snap_off_y"); hb_grid->add_child(sb_off_y); hb_grid->add_child(memnew(VSeparator)); @@ -970,7 +970,7 @@ TextureRegionEditor::TextureRegionEditor(EditorNode *p_editor) { sb_step_x->set_step(1); sb_step_x->set_value(snap_step.x); sb_step_x->set_suffix("px"); - sb_step_x->connect("value_changed", this, "_set_snap_step_x"); + sb_step_x->connect_compat("value_changed", this, "_set_snap_step_x"); hb_grid->add_child(sb_step_x); sb_step_y = memnew(SpinBox); @@ -979,7 +979,7 @@ TextureRegionEditor::TextureRegionEditor(EditorNode *p_editor) { sb_step_y->set_step(1); sb_step_y->set_value(snap_step.y); sb_step_y->set_suffix("px"); - sb_step_y->connect("value_changed", this, "_set_snap_step_y"); + sb_step_y->connect_compat("value_changed", this, "_set_snap_step_y"); hb_grid->add_child(sb_step_y); hb_grid->add_child(memnew(VSeparator)); @@ -991,7 +991,7 @@ TextureRegionEditor::TextureRegionEditor(EditorNode *p_editor) { sb_sep_x->set_step(1); sb_sep_x->set_value(snap_separation.x); sb_sep_x->set_suffix("px"); - sb_sep_x->connect("value_changed", this, "_set_snap_sep_x"); + sb_sep_x->connect_compat("value_changed", this, "_set_snap_sep_x"); hb_grid->add_child(sb_sep_x); sb_sep_y = memnew(SpinBox); @@ -1000,7 +1000,7 @@ TextureRegionEditor::TextureRegionEditor(EditorNode *p_editor) { sb_sep_y->set_step(1); sb_sep_y->set_value(snap_separation.y); sb_sep_y->set_suffix("px"); - sb_sep_y->connect("value_changed", this, "_set_snap_sep_y"); + sb_sep_y->connect_compat("value_changed", this, "_set_snap_sep_y"); hb_grid->add_child(sb_sep_y); hb_grid->hide(); @@ -1008,8 +1008,8 @@ TextureRegionEditor::TextureRegionEditor(EditorNode *p_editor) { edit_draw = memnew(Panel); add_child(edit_draw); edit_draw->set_v_size_flags(SIZE_EXPAND_FILL); - edit_draw->connect("draw", this, "_region_draw"); - edit_draw->connect("gui_input", this, "_region_input"); + edit_draw->connect_compat("draw", this, "_region_draw"); + edit_draw->connect_compat("gui_input", this, "_region_input"); draw_zoom = 1.0; edit_draw->set_clip_contents(true); @@ -1020,27 +1020,27 @@ TextureRegionEditor::TextureRegionEditor(EditorNode *p_editor) { zoom_out = memnew(ToolButton); zoom_out->set_tooltip(TTR("Zoom Out")); - zoom_out->connect("pressed", this, "_zoom_out"); + zoom_out->connect_compat("pressed", this, "_zoom_out"); zoom_hb->add_child(zoom_out); zoom_reset = memnew(ToolButton); zoom_reset->set_tooltip(TTR("Zoom Reset")); - zoom_reset->connect("pressed", this, "_zoom_reset"); + zoom_reset->connect_compat("pressed", this, "_zoom_reset"); zoom_hb->add_child(zoom_reset); zoom_in = memnew(ToolButton); zoom_in->set_tooltip(TTR("Zoom In")); - zoom_in->connect("pressed", this, "_zoom_in"); + zoom_in->connect_compat("pressed", this, "_zoom_in"); zoom_hb->add_child(zoom_in); vscroll = memnew(VScrollBar); vscroll->set_step(0.001); edit_draw->add_child(vscroll); - vscroll->connect("value_changed", this, "_scroll_changed"); + vscroll->connect_compat("value_changed", this, "_scroll_changed"); hscroll = memnew(HScrollBar); hscroll->set_step(0.001); edit_draw->add_child(hscroll); - hscroll->connect("value_changed", this, "_scroll_changed"); + hscroll->connect_compat("value_changed", this, "_scroll_changed"); updating_scroll = false; } @@ -1125,7 +1125,7 @@ TextureRegionEditorPlugin::TextureRegionEditorPlugin(EditorNode *p_node) { region_editor = memnew(TextureRegionEditor(p_node)); region_editor->set_custom_minimum_size(Size2(0, 200) * EDSCALE); region_editor->hide(); - region_editor->connect("visibility_changed", this, "_editor_visiblity_changed"); + region_editor->connect_compat("visibility_changed", this, "_editor_visiblity_changed"); texture_region_button = p_node->add_bottom_panel_item(TTR("TextureRegion"), region_editor); texture_region_button->hide(); diff --git a/editor/plugins/theme_editor_plugin.cpp b/editor/plugins/theme_editor_plugin.cpp index 22105f7ed4..717c9adad3 100644 --- a/editor/plugins/theme_editor_plugin.cpp +++ b/editor/plugins/theme_editor_plugin.cpp @@ -122,7 +122,7 @@ struct _TECategory { Set<RefItem<StyleBox> > stylebox_items; Set<RefItem<Font> > font_items; - Set<RefItem<Texture> > icon_items; + Set<RefItem<Texture2D> > icon_items; Set<Item<Color> > color_items; Set<Item<int> > constant_items; @@ -167,7 +167,7 @@ void ThemeEditor::_save_template_cbk(String fname) { List<StringName> icon_list; Theme::get_default()->get_icon_list(E->key(), &icon_list); for (List<StringName>::Element *F = icon_list.front(); F; F = F->next()) { - _TECategory::RefItem<Texture> it; + _TECategory::RefItem<Texture2D> it; it.name = F->get(); it.item = Theme::get_default()->get_icon(F->get(), E->key()); tc.icon_items.insert(it); @@ -291,7 +291,7 @@ void ThemeEditor::_save_template_cbk(String fname) { if (tc.icon_items.size()) file->store_line("\n; Icon Items:\n"); - for (Set<_TECategory::RefItem<Texture> >::Element *F = tc.icon_items.front(); F; F = F->next()) { + for (Set<_TECategory::RefItem<Texture2D> >::Element *F = tc.icon_items.front(); F; F = F->next()) { file->store_line(E->key() + "." + F->get().name + " = default"); } @@ -324,7 +324,7 @@ void ThemeEditor::_dialog_cbk() { switch (type_select->get_selected()) { - case 0: theme->set_icon(name_edit->get_text(), type_edit->get_text(), Ref<Texture>()); break; + case 0: theme->set_icon(name_edit->get_text(), type_edit->get_text(), Ref<Texture2D>()); break; case 1: theme->set_stylebox(name_edit->get_text(), type_edit->get_text(), Ref<StyleBox>()); break; case 2: theme->set_font(name_edit->get_text(), type_edit->get_text(), Ref<Font>()); break; case 3: theme->set_color(name_edit->get_text(), type_edit->get_text(), Color()); break; @@ -341,7 +341,7 @@ void ThemeEditor::_dialog_cbk() { names.clear(); Theme::get_default()->get_icon_list(fromtype, &names); for (List<StringName>::Element *E = names.front(); E; E = E->next()) { - theme->set_icon(E->get(), fromtype, Ref<Texture>()); + theme->set_icon(E->get(), fromtype, Ref<Texture2D>()); } } { @@ -454,7 +454,7 @@ void ThemeEditor::_theme_menu_cbk(int p_option) { base_theme->get_icon_list(type, &icons); for (List<StringName>::Element *E = icons.front(); E; E = E->next()) { - theme->set_icon(E->get(), type, import ? base_theme->get_icon(E->get(), type) : Ref<Texture>()); + theme->set_icon(E->get(), type, import ? base_theme->get_icon(E->get(), type) : Ref<Texture2D>()); } List<StringName> shaders; @@ -629,7 +629,7 @@ ThemeEditor::ThemeEditor() { theme_menu->get_popup()->add_item(TTR("Create Empty Editor Template"), POPUP_CREATE_EDITOR_EMPTY); theme_menu->get_popup()->add_item(TTR("Create From Current Editor Theme"), POPUP_IMPORT_EDITOR_THEME); top_menu->add_child(theme_menu); - theme_menu->get_popup()->connect("id_pressed", this, "_theme_menu_cbk"); + theme_menu->get_popup()->connect_compat("id_pressed", this, "_theme_menu_cbk"); ScrollContainer *scroll = memnew(ScrollContainer); add_child(scroll); @@ -835,7 +835,7 @@ ThemeEditor::ThemeEditor() { type_menu->set_text(".."); type_hbc->add_child(type_menu); - type_menu->get_popup()->connect("id_pressed", this, "_type_menu_cbk"); + type_menu->get_popup()->connect_compat("id_pressed", this, "_type_menu_cbk"); l = memnew(Label); l->set_text(TTR("Name:")); @@ -853,8 +853,8 @@ ThemeEditor::ThemeEditor() { name_menu->set_text(".."); name_hbc->add_child(name_menu); - name_menu->get_popup()->connect("about_to_show", this, "_name_menu_about_to_show"); - name_menu->get_popup()->connect("id_pressed", this, "_name_menu_cbk"); + name_menu->get_popup()->connect_compat("about_to_show", this, "_name_menu_about_to_show"); + name_menu->get_popup()->connect_compat("id_pressed", this, "_name_menu_cbk"); type_select_label = memnew(Label); type_select_label->set_text(TTR("Data Type:")); @@ -869,12 +869,12 @@ ThemeEditor::ThemeEditor() { dialog_vbc->add_child(type_select); - add_del_dialog->get_ok()->connect("pressed", this, "_dialog_cbk"); + add_del_dialog->get_ok()->connect_compat("pressed", this, "_dialog_cbk"); file_dialog = memnew(EditorFileDialog); file_dialog->add_filter("*.theme ; " + TTR("Theme File")); add_child(file_dialog); - file_dialog->connect("file_selected", this, "_save_template_cbk"); + file_dialog->connect_compat("file_selected", this, "_save_template_cbk"); } void ThemeEditorPlugin::edit(Object *p_node) { diff --git a/editor/plugins/tile_map_editor_plugin.cpp b/editor/plugins/tile_map_editor_plugin.cpp index 0c3e29028c..10d00b2a1d 100644 --- a/editor/plugins/tile_map_editor_plugin.cpp +++ b/editor/plugins/tile_map_editor_plugin.cpp @@ -55,7 +55,7 @@ void TileMapEditor::_notification(int p_what) { if (is_visible_in_tree()) { _update_palette(); } - FALLTHROUGH; + [[fallthrough]]; } case NOTIFICATION_ENTER_TREE: { @@ -468,7 +468,7 @@ void TileMapEditor::_update_palette() { palette->add_item(String()); } - Ref<Texture> tex = tileset->tile_get_texture(entries[i].id); + Ref<Texture2D> tex = tileset->tile_get_texture(entries[i].id); if (tex.is_valid()) { Rect2 region = tileset->tile_get_region(entries[i].id); @@ -528,7 +528,7 @@ void TileMapEditor::_update_palette() { }; entries2.sort_custom<SwapComparator>(); - Ref<Texture> tex = tileset->tile_get_texture(sel_tile); + Ref<Texture2D> tex = tileset->tile_get_texture(sel_tile); for (int i = 0; i < entries2.size(); i++) { @@ -598,7 +598,7 @@ void TileMapEditor::_pick_tile(const Point2 &p_pos) { CanvasItemEditor::get_singleton()->update_viewport(); } -PoolVector<Vector2> TileMapEditor::_bucket_fill(const Point2i &p_start, bool erase, bool preview) { +Vector<Vector2> TileMapEditor::_bucket_fill(const Point2i &p_start, bool erase, bool preview) { int prev_id = node->get_cell(p_start.x, p_start.y); Vector<int> ids; @@ -607,14 +607,14 @@ PoolVector<Vector2> TileMapEditor::_bucket_fill(const Point2i &p_start, bool era ids = get_selected_tiles(); if (ids.size() == 0 || ids[0] == TileMap::INVALID_CELL) - return PoolVector<Vector2>(); + return Vector<Vector2>(); } else if (prev_id == TileMap::INVALID_CELL) { - return PoolVector<Vector2>(); + return Vector<Vector2>(); } if (ids.size() == 1 && ids[0] == prev_id) { // Same ID, nothing to change - return PoolVector<Vector2>(); + return Vector<Vector2>(); } Rect2i r = node->get_used_rect(); @@ -640,14 +640,14 @@ PoolVector<Vector2> TileMapEditor::_bucket_fill(const Point2i &p_start, bool era if (invalidate_cache) { for (int i = 0; i < area; ++i) bucket_cache_visited[i] = false; - bucket_cache = PoolVector<Vector2>(); + bucket_cache = Vector<Vector2>(); bucket_cache_tile = prev_id; bucket_cache_rect = r; bucket_queue.clear(); } } - PoolVector<Vector2> points; + Vector<Vector2> points; Vector<Vector2> non_preview_cache; int count = 0; int limit = 0; @@ -698,10 +698,10 @@ PoolVector<Vector2> TileMapEditor::_bucket_fill(const Point2i &p_start, bool era return preview ? bucket_cache : points; } -void TileMapEditor::_fill_points(const PoolVector<Vector2> &p_points, const Dictionary &p_op) { +void TileMapEditor::_fill_points(const Vector<Vector2> &p_points, const Dictionary &p_op) { int len = p_points.size(); - PoolVector<Vector2>::Read pr = p_points.read(); + const Vector2 *pr = p_points.ptr(); Vector<int> ids = p_op["id"]; bool xf = p_op["flip_h"]; @@ -716,10 +716,10 @@ void TileMapEditor::_fill_points(const PoolVector<Vector2> &p_points, const Dict node->update_dirty_bitmask(); } -void TileMapEditor::_erase_points(const PoolVector<Vector2> &p_points) { +void TileMapEditor::_erase_points(const Vector<Vector2> &p_points) { int len = p_points.size(); - PoolVector<Vector2>::Read pr = p_points.read(); + const Vector2 *pr = p_points.ptr(); for (int i = 0; i < len; i++) { @@ -761,7 +761,7 @@ void TileMapEditor::_erase_selection() { void TileMapEditor::_draw_cell(Control *p_viewport, int p_cell, const Point2i &p_point, bool p_flip_h, bool p_flip_v, bool p_transpose, const Point2i &p_autotile_coord, const Transform2D &p_xform) { - Ref<Texture> t = node->get_tileset()->tile_get_texture(p_cell); + Ref<Texture2D> t = node->get_tileset()->tile_get_texture(p_cell); if (t.is_null()) return; @@ -882,8 +882,8 @@ void TileMapEditor::_draw_cell(Control *p_viewport, int p_cell, const Point2i &p void TileMapEditor::_draw_fill_preview(Control *p_viewport, int p_cell, const Point2i &p_point, bool p_flip_h, bool p_flip_v, bool p_transpose, const Point2i &p_autotile_coord, const Transform2D &p_xform) { - PoolVector<Vector2> points = _bucket_fill(p_point, false, true); - PoolVector<Vector2>::Read pr = points.read(); + Vector<Vector2> points = _bucket_fill(p_point, false, true); + const Vector2 *pr = points.ptr(); int len = points.size(); for (int i = 0; i < len; ++i) { @@ -1109,7 +1109,7 @@ bool TileMapEditor::forward_gui_input(const Ref<InputEvent> &p_event) { } else if (tool == TOOL_BUCKET) { - PoolVector<Vector2> points = _bucket_fill(over_tile); + Vector<Vector2> points = _bucket_fill(over_tile); if (points.size() == 0) return false; @@ -1216,7 +1216,7 @@ bool TileMapEditor::forward_gui_input(const Ref<InputEvent> &p_event) { pop["flip_v"] = node->is_cell_y_flipped(over_tile.x, over_tile.y); pop["transpose"] = node->is_cell_transposed(over_tile.x, over_tile.y); - PoolVector<Vector2> points = _bucket_fill(over_tile, true); + Vector<Vector2> points = _bucket_fill(over_tile, true); if (points.size() == 0) return false; @@ -1761,30 +1761,30 @@ void TileMapEditor::edit(Node *p_tile_map) { } if (node) - node->disconnect("settings_changed", this, "_tileset_settings_changed"); + node->disconnect_compat("settings_changed", this, "_tileset_settings_changed"); if (p_tile_map) { node = Object::cast_to<TileMap>(p_tile_map); - if (!canvas_item_editor_viewport->is_connected("mouse_entered", this, "_canvas_mouse_enter")) - canvas_item_editor_viewport->connect("mouse_entered", this, "_canvas_mouse_enter"); - if (!canvas_item_editor_viewport->is_connected("mouse_exited", this, "_canvas_mouse_exit")) - canvas_item_editor_viewport->connect("mouse_exited", this, "_canvas_mouse_exit"); + if (!canvas_item_editor_viewport->is_connected_compat("mouse_entered", this, "_canvas_mouse_enter")) + canvas_item_editor_viewport->connect_compat("mouse_entered", this, "_canvas_mouse_enter"); + if (!canvas_item_editor_viewport->is_connected_compat("mouse_exited", this, "_canvas_mouse_exit")) + canvas_item_editor_viewport->connect_compat("mouse_exited", this, "_canvas_mouse_exit"); _update_palette(); } else { node = NULL; - if (canvas_item_editor_viewport->is_connected("mouse_entered", this, "_canvas_mouse_enter")) - canvas_item_editor_viewport->disconnect("mouse_entered", this, "_canvas_mouse_enter"); - if (canvas_item_editor_viewport->is_connected("mouse_exited", this, "_canvas_mouse_exit")) - canvas_item_editor_viewport->disconnect("mouse_exited", this, "_canvas_mouse_exit"); + if (canvas_item_editor_viewport->is_connected_compat("mouse_entered", this, "_canvas_mouse_enter")) + canvas_item_editor_viewport->disconnect_compat("mouse_entered", this, "_canvas_mouse_enter"); + if (canvas_item_editor_viewport->is_connected_compat("mouse_exited", this, "_canvas_mouse_exit")) + canvas_item_editor_viewport->disconnect_compat("mouse_exited", this, "_canvas_mouse_exit"); _update_palette(); } if (node) - node->connect("settings_changed", this, "_tileset_settings_changed"); + node->connect_compat("settings_changed", this, "_tileset_settings_changed"); _clear_bucket_cache(); } @@ -1939,20 +1939,20 @@ TileMapEditor::TileMapEditor(EditorNode *p_editor) { manual_button = memnew(CheckBox); manual_button->set_text(TTR("Disable Autotile")); - manual_button->connect("toggled", this, "_manual_toggled"); + manual_button->connect_compat("toggled", this, "_manual_toggled"); add_child(manual_button); priority_button = memnew(CheckBox); priority_button->set_text(TTR("Enable Priority")); - priority_button->connect("toggled", this, "_priority_toggled"); + priority_button->connect_compat("toggled", this, "_priority_toggled"); add_child(priority_button); search_box = memnew(LineEdit); search_box->set_placeholder(TTR("Filter tiles")); search_box->set_h_size_flags(SIZE_EXPAND_FILL); - search_box->connect("text_entered", this, "_text_entered"); - search_box->connect("text_changed", this, "_text_changed"); - search_box->connect("gui_input", this, "_sbox_input"); + search_box->connect_compat("text_entered", this, "_text_entered"); + search_box->connect_compat("text_changed", this, "_text_changed"); + search_box->connect_compat("gui_input", this, "_sbox_input"); add_child(search_box); size_slider = memnew(HSlider); @@ -1961,7 +1961,7 @@ TileMapEditor::TileMapEditor(EditorNode *p_editor) { size_slider->set_max(4.0f); size_slider->set_step(0.1f); size_slider->set_value(1.0f); - size_slider->connect("value_changed", this, "_icon_size_changed"); + size_slider->connect_compat("value_changed", this, "_icon_size_changed"); add_child(size_slider); int mw = EDITOR_DEF("editors/tile_map/palette_min_width", 80); @@ -1980,8 +1980,8 @@ TileMapEditor::TileMapEditor(EditorNode *p_editor) { palette->set_max_text_lines(2); palette->set_select_mode(ItemList::SELECT_MULTI); palette->add_constant_override("vseparation", 8 * EDSCALE); - palette->connect("item_selected", this, "_palette_selected"); - palette->connect("multi_selected", this, "_palette_multi_selected"); + palette->connect_compat("item_selected", this, "_palette_selected"); + palette->connect_compat("multi_selected", this, "_palette_multi_selected"); palette_container->add_child(palette); // Add message for when no texture is selected. @@ -2015,25 +2015,25 @@ TileMapEditor::TileMapEditor(EditorNode *p_editor) { paint_button = memnew(ToolButton); paint_button->set_shortcut(ED_SHORTCUT("tile_map_editor/paint_tile", TTR("Paint Tile"), KEY_P)); paint_button->set_tooltip(TTR("Shift+LMB: Line Draw\nShift+Ctrl+LMB: Rectangle Paint")); - paint_button->connect("pressed", this, "_button_tool_select", make_binds(TOOL_NONE)); + paint_button->connect_compat("pressed", this, "_button_tool_select", make_binds(TOOL_NONE)); paint_button->set_toggle_mode(true); toolbar->add_child(paint_button); bucket_fill_button = memnew(ToolButton); bucket_fill_button->set_shortcut(ED_SHORTCUT("tile_map_editor/bucket_fill", TTR("Bucket Fill"), KEY_G)); - bucket_fill_button->connect("pressed", this, "_button_tool_select", make_binds(TOOL_BUCKET)); + bucket_fill_button->connect_compat("pressed", this, "_button_tool_select", make_binds(TOOL_BUCKET)); bucket_fill_button->set_toggle_mode(true); toolbar->add_child(bucket_fill_button); picker_button = memnew(ToolButton); picker_button->set_shortcut(ED_SHORTCUT("tile_map_editor/pick_tile", TTR("Pick Tile"), KEY_I)); - picker_button->connect("pressed", this, "_button_tool_select", make_binds(TOOL_PICKING)); + picker_button->connect_compat("pressed", this, "_button_tool_select", make_binds(TOOL_PICKING)); picker_button->set_toggle_mode(true); toolbar->add_child(picker_button); select_button = memnew(ToolButton); select_button->set_shortcut(ED_SHORTCUT("tile_map_editor/select", TTR("Select"), KEY_M)); - select_button->connect("pressed", this, "_button_tool_select", make_binds(TOOL_SELECTING)); + select_button->connect_compat("pressed", this, "_button_tool_select", make_binds(TOOL_SELECTING)); select_button->set_toggle_mode(true); toolbar->add_child(select_button); @@ -2068,40 +2068,40 @@ TileMapEditor::TileMapEditor(EditorNode *p_editor) { p->add_shortcut(ED_GET_SHORTCUT("tile_map_editor/erase_selection"), OPTION_ERASE_SELECTION); p->add_separator(); p->add_item(TTR("Fix Invalid Tiles"), OPTION_FIX_INVALID); - p->connect("id_pressed", this, "_menu_option"); + p->connect_compat("id_pressed", this, "_menu_option"); rotate_left_button = memnew(ToolButton); rotate_left_button->set_tooltip(TTR("Rotate Left")); rotate_left_button->set_focus_mode(FOCUS_NONE); - rotate_left_button->connect("pressed", this, "_rotate", varray(-1)); + rotate_left_button->connect_compat("pressed", this, "_rotate", varray(-1)); rotate_left_button->set_shortcut(ED_SHORTCUT("tile_map_editor/rotate_left", TTR("Rotate Left"), KEY_A)); tool_hb->add_child(rotate_left_button); rotate_right_button = memnew(ToolButton); rotate_right_button->set_tooltip(TTR("Rotate Right")); rotate_right_button->set_focus_mode(FOCUS_NONE); - rotate_right_button->connect("pressed", this, "_rotate", varray(1)); + rotate_right_button->connect_compat("pressed", this, "_rotate", varray(1)); rotate_right_button->set_shortcut(ED_SHORTCUT("tile_map_editor/rotate_right", TTR("Rotate Right"), KEY_S)); tool_hb->add_child(rotate_right_button); flip_horizontal_button = memnew(ToolButton); flip_horizontal_button->set_tooltip(TTR("Flip Horizontally")); flip_horizontal_button->set_focus_mode(FOCUS_NONE); - flip_horizontal_button->connect("pressed", this, "_flip_horizontal"); + flip_horizontal_button->connect_compat("pressed", this, "_flip_horizontal"); flip_horizontal_button->set_shortcut(ED_SHORTCUT("tile_map_editor/flip_horizontal", TTR("Flip Horizontally"), KEY_X)); tool_hb->add_child(flip_horizontal_button); flip_vertical_button = memnew(ToolButton); flip_vertical_button->set_tooltip(TTR("Flip Vertically")); flip_vertical_button->set_focus_mode(FOCUS_NONE); - flip_vertical_button->connect("pressed", this, "_flip_vertical"); + flip_vertical_button->connect_compat("pressed", this, "_flip_vertical"); flip_vertical_button->set_shortcut(ED_SHORTCUT("tile_map_editor/flip_vertical", TTR("Flip Vertically"), KEY_Z)); tool_hb->add_child(flip_vertical_button); clear_transform_button = memnew(ToolButton); clear_transform_button->set_tooltip(TTR("Clear Transform")); clear_transform_button->set_focus_mode(FOCUS_NONE); - clear_transform_button->connect("pressed", this, "_clear_transform"); + clear_transform_button->connect_compat("pressed", this, "_clear_transform"); clear_transform_button->set_shortcut(ED_SHORTCUT("tile_map_editor/clear_transform", TTR("Clear Transform"), KEY_W)); tool_hb->add_child(clear_transform_button); diff --git a/editor/plugins/tile_map_editor_plugin.h b/editor/plugins/tile_map_editor_plugin.h index 927f0887bb..74969d3e64 100644 --- a/editor/plugins/tile_map_editor_plugin.h +++ b/editor/plugins/tile_map_editor_plugin.h @@ -123,7 +123,7 @@ class TileMapEditor : public VBoxContainer { bool *bucket_cache_visited; Rect2i bucket_cache_rect; int bucket_cache_tile; - PoolVector<Vector2> bucket_cache; + Vector<Vector2> bucket_cache; List<Point2i> bucket_queue; struct CellOp { @@ -164,10 +164,10 @@ class TileMapEditor : public VBoxContainer { void _pick_tile(const Point2 &p_pos); - PoolVector<Vector2> _bucket_fill(const Point2i &p_start, bool erase = false, bool preview = false); + Vector<Vector2> _bucket_fill(const Point2i &p_start, bool erase = false, bool preview = false); - void _fill_points(const PoolVector<Vector2> &p_points, const Dictionary &p_op); - void _erase_points(const PoolVector<Vector2> &p_points); + void _fill_points(const Vector<Vector2> &p_points, const Dictionary &p_op); + void _erase_points(const Vector<Vector2> &p_points); void _select(const Point2i &p_from, const Point2i &p_to); void _erase_selection(); diff --git a/editor/plugins/tile_set_editor_plugin.cpp b/editor/plugins/tile_set_editor_plugin.cpp index b24d5add9f..02c3709766 100644 --- a/editor/plugins/tile_set_editor_plugin.cpp +++ b/editor/plugins/tile_set_editor_plugin.cpp @@ -62,8 +62,8 @@ void TileSetEditor::_import_node(Node *p_node, Ref<TileSet> p_library) { } Sprite *mi = Object::cast_to<Sprite>(child); - Ref<Texture> texture = mi->get_texture(); - Ref<Texture> normal_map = mi->get_normal_map(); + Ref<Texture2D> texture = mi->get_texture(); + Ref<Texture2D> normal_map = mi->get_normal_map(); Ref<ShaderMaterial> material = mi->get_material(); if (texture.is_null()) @@ -195,7 +195,7 @@ bool TileSetEditor::can_drop_data_fw(const Point2 &p_point, const Variant &p_dat if (String(d["type"]) == "resource" && d.has("resource")) { RES r = d["resource"]; - Ref<Texture> texture = r; + Ref<Texture2D> texture = r; if (texture.is_valid()) { @@ -237,7 +237,7 @@ void TileSetEditor::drop_data_fw(const Point2 &p_point, const Variant &p_data, C if (String(d["type"]) == "resource" && d.has("resource")) { RES r = d["resource"]; - Ref<Texture> texture = r; + Ref<Texture2D> texture = r; if (texture.is_valid()) add_texture(texture); @@ -251,7 +251,7 @@ void TileSetEditor::drop_data_fw(const Point2 &p_point, const Variant &p_data, C if (String(d["type"]) == "files") { - PoolVector<String> files = d["files"]; + Vector<String> files = d["files"]; _on_textures_added(files); } @@ -358,19 +358,19 @@ TileSetEditor::TileSetEditor(EditorNode *p_editor) { left_container->add_child(texture_list); texture_list->set_v_size_flags(SIZE_EXPAND_FILL); texture_list->set_custom_minimum_size(Size2(200, 0)); - texture_list->connect("item_selected", this, "_on_texture_list_selected"); + texture_list->connect_compat("item_selected", this, "_on_texture_list_selected"); texture_list->set_drag_forwarding(this); HBoxContainer *tileset_toolbar_container = memnew(HBoxContainer); left_container->add_child(tileset_toolbar_container); tileset_toolbar_buttons[TOOL_TILESET_ADD_TEXTURE] = memnew(ToolButton); - tileset_toolbar_buttons[TOOL_TILESET_ADD_TEXTURE]->connect("pressed", this, "_on_tileset_toolbar_button_pressed", varray(TOOL_TILESET_ADD_TEXTURE)); + tileset_toolbar_buttons[TOOL_TILESET_ADD_TEXTURE]->connect_compat("pressed", this, "_on_tileset_toolbar_button_pressed", varray(TOOL_TILESET_ADD_TEXTURE)); tileset_toolbar_container->add_child(tileset_toolbar_buttons[TOOL_TILESET_ADD_TEXTURE]); tileset_toolbar_buttons[TOOL_TILESET_ADD_TEXTURE]->set_tooltip(TTR("Add Texture(s) to TileSet.")); tileset_toolbar_buttons[TOOL_TILESET_REMOVE_TEXTURE] = memnew(ToolButton); - tileset_toolbar_buttons[TOOL_TILESET_REMOVE_TEXTURE]->connect("pressed", this, "_on_tileset_toolbar_button_pressed", varray(TOOL_TILESET_REMOVE_TEXTURE)); + tileset_toolbar_buttons[TOOL_TILESET_REMOVE_TEXTURE]->connect_compat("pressed", this, "_on_tileset_toolbar_button_pressed", varray(TOOL_TILESET_REMOVE_TEXTURE)); tileset_toolbar_container->add_child(tileset_toolbar_buttons[TOOL_TILESET_REMOVE_TEXTURE]); tileset_toolbar_buttons[TOOL_TILESET_REMOVE_TEXTURE]->set_tooltip(TTR("Remove selected Texture from TileSet.")); @@ -383,7 +383,7 @@ TileSetEditor::TileSetEditor(EditorNode *p_editor) { tileset_toolbar_tools->get_popup()->add_item(TTR("Create from Scene"), TOOL_TILESET_CREATE_SCENE); tileset_toolbar_tools->get_popup()->add_item(TTR("Merge from Scene"), TOOL_TILESET_MERGE_SCENE); - tileset_toolbar_tools->get_popup()->connect("id_pressed", this, "_on_tileset_toolbar_button_pressed"); + tileset_toolbar_tools->get_popup()->connect_compat("id_pressed", this, "_on_tileset_toolbar_button_pressed"); tileset_toolbar_container->add_child(tileset_toolbar_tools); //--------------- @@ -416,7 +416,7 @@ TileSetEditor::TileSetEditor(EditorNode *p_editor) { tool_workspacemode[i]->set_text(workspace_label[i]); tool_workspacemode[i]->set_toggle_mode(true); tool_workspacemode[i]->set_button_group(g); - tool_workspacemode[i]->connect("pressed", this, "_on_workspace_mode_changed", varray(i)); + tool_workspacemode[i]->connect_compat("pressed", this, "_on_workspace_mode_changed", varray(i)); tool_hb->add_child(tool_workspacemode[i]); } @@ -429,14 +429,14 @@ TileSetEditor::TileSetEditor(EditorNode *p_editor) { tool_hb->add_child(tools[SELECT_NEXT]); tool_hb->move_child(tools[SELECT_NEXT], WORKSPACE_CREATE_SINGLE); tools[SELECT_NEXT]->set_shortcut(ED_SHORTCUT("tileset_editor/next_shape", TTR("Next Coordinate"), KEY_PAGEDOWN)); - tools[SELECT_NEXT]->connect("pressed", this, "_on_tool_clicked", varray(SELECT_NEXT)); + tools[SELECT_NEXT]->connect_compat("pressed", this, "_on_tool_clicked", varray(SELECT_NEXT)); tools[SELECT_NEXT]->set_tooltip(TTR("Select the next shape, subtile, or Tile.")); tools[SELECT_PREVIOUS] = memnew(ToolButton); tool_hb->add_child(tools[SELECT_PREVIOUS]); tool_hb->move_child(tools[SELECT_PREVIOUS], WORKSPACE_CREATE_SINGLE); tools[SELECT_PREVIOUS]->set_shortcut(ED_SHORTCUT("tileset_editor/previous_shape", TTR("Previous Coordinate"), KEY_PAGEUP)); tools[SELECT_PREVIOUS]->set_tooltip(TTR("Select the previous shape, subtile, or Tile.")); - tools[SELECT_PREVIOUS]->connect("pressed", this, "_on_tool_clicked", varray(SELECT_PREVIOUS)); + tools[SELECT_PREVIOUS]->connect_compat("pressed", this, "_on_tool_clicked", varray(SELECT_PREVIOUS)); VSeparator *separator_shape_selection = memnew(VSeparator); tool_hb->add_child(separator_shape_selection); @@ -466,7 +466,7 @@ TileSetEditor::TileSetEditor(EditorNode *p_editor) { tool_editmode[i]->set_text(label[i]); tool_editmode[i]->set_toggle_mode(true); tool_editmode[i]->set_button_group(g); - tool_editmode[i]->connect("pressed", this, "_on_edit_mode_changed", varray(i)); + tool_editmode[i]->connect_compat("pressed", this, "_on_edit_mode_changed", varray(i)); tool_hb->add_child(tool_editmode[i]); } tool_editmode[EDITMODE_COLLISION]->set_pressed(true); @@ -493,21 +493,21 @@ TileSetEditor::TileSetEditor(EditorNode *p_editor) { tools[TOOL_SELECT]->set_toggle_mode(true); tools[TOOL_SELECT]->set_button_group(tg); tools[TOOL_SELECT]->set_pressed(true); - tools[TOOL_SELECT]->connect("pressed", this, "_on_tool_clicked", varray(TOOL_SELECT)); + tools[TOOL_SELECT]->connect_compat("pressed", this, "_on_tool_clicked", varray(TOOL_SELECT)); separator_bitmask = memnew(VSeparator); toolbar->add_child(separator_bitmask); tools[BITMASK_COPY] = memnew(ToolButton); tools[BITMASK_COPY]->set_tooltip(TTR("Copy bitmask.")); - tools[BITMASK_COPY]->connect("pressed", this, "_on_tool_clicked", varray(BITMASK_COPY)); + tools[BITMASK_COPY]->connect_compat("pressed", this, "_on_tool_clicked", varray(BITMASK_COPY)); toolbar->add_child(tools[BITMASK_COPY]); tools[BITMASK_PASTE] = memnew(ToolButton); tools[BITMASK_PASTE]->set_tooltip(TTR("Paste bitmask.")); - tools[BITMASK_PASTE]->connect("pressed", this, "_on_tool_clicked", varray(BITMASK_PASTE)); + tools[BITMASK_PASTE]->connect_compat("pressed", this, "_on_tool_clicked", varray(BITMASK_PASTE)); toolbar->add_child(tools[BITMASK_PASTE]); tools[BITMASK_CLEAR] = memnew(ToolButton); tools[BITMASK_CLEAR]->set_tooltip(TTR("Erase bitmask.")); - tools[BITMASK_CLEAR]->connect("pressed", this, "_on_tool_clicked", varray(BITMASK_CLEAR)); + tools[BITMASK_CLEAR]->connect_compat("pressed", this, "_on_tool_clicked", varray(BITMASK_CLEAR)); toolbar->add_child(tools[BITMASK_CLEAR]); tools[SHAPE_NEW_RECTANGLE] = memnew(ToolButton); @@ -525,13 +525,13 @@ TileSetEditor::TileSetEditor(EditorNode *p_editor) { separator_shape_toggle = memnew(VSeparator); toolbar->add_child(separator_shape_toggle); tools[SHAPE_TOGGLE_TYPE] = memnew(ToolButton); - tools[SHAPE_TOGGLE_TYPE]->connect("pressed", this, "_on_tool_clicked", varray(SHAPE_TOGGLE_TYPE)); + tools[SHAPE_TOGGLE_TYPE]->connect_compat("pressed", this, "_on_tool_clicked", varray(SHAPE_TOGGLE_TYPE)); toolbar->add_child(tools[SHAPE_TOGGLE_TYPE]); separator_delete = memnew(VSeparator); toolbar->add_child(separator_delete); tools[SHAPE_DELETE] = memnew(ToolButton); - tools[SHAPE_DELETE]->connect("pressed", this, "_on_tool_clicked", varray(SHAPE_DELETE)); + tools[SHAPE_DELETE]->connect_compat("pressed", this, "_on_tool_clicked", varray(SHAPE_DELETE)); toolbar->add_child(tools[SHAPE_DELETE]); spin_priority = memnew(SpinBox); @@ -539,7 +539,7 @@ TileSetEditor::TileSetEditor(EditorNode *p_editor) { spin_priority->set_max(255); spin_priority->set_step(1); spin_priority->set_custom_minimum_size(Size2(100, 0)); - spin_priority->connect("value_changed", this, "_on_priority_changed"); + spin_priority->connect_compat("value_changed", this, "_on_priority_changed"); spin_priority->hide(); toolbar->add_child(spin_priority); @@ -548,7 +548,7 @@ TileSetEditor::TileSetEditor(EditorNode *p_editor) { spin_z_index->set_max(VS::CANVAS_ITEM_Z_MAX); spin_z_index->set_step(1); spin_z_index->set_custom_minimum_size(Size2(100, 0)); - spin_z_index->connect("value_changed", this, "_on_z_index_changed"); + spin_z_index->connect_compat("value_changed", this, "_on_z_index_changed"); spin_z_index->hide(); toolbar->add_child(spin_z_index); @@ -562,7 +562,7 @@ TileSetEditor::TileSetEditor(EditorNode *p_editor) { tools[TOOL_GRID_SNAP] = memnew(ToolButton); tools[TOOL_GRID_SNAP]->set_toggle_mode(true); tools[TOOL_GRID_SNAP]->set_tooltip(TTR("Enable snap and show grid (configurable via the Inspector).")); - tools[TOOL_GRID_SNAP]->connect("toggled", this, "_on_grid_snap_toggled"); + tools[TOOL_GRID_SNAP]->connect_compat("toggled", this, "_on_grid_snap_toggled"); toolbar->add_child(tools[TOOL_GRID_SNAP]); Control *separator = memnew(Control); @@ -570,15 +570,15 @@ TileSetEditor::TileSetEditor(EditorNode *p_editor) { toolbar->add_child(separator); tools[ZOOM_OUT] = memnew(ToolButton); - tools[ZOOM_OUT]->connect("pressed", this, "_zoom_out"); + tools[ZOOM_OUT]->connect_compat("pressed", this, "_zoom_out"); toolbar->add_child(tools[ZOOM_OUT]); tools[ZOOM_OUT]->set_tooltip(TTR("Zoom Out")); tools[ZOOM_1] = memnew(ToolButton); - tools[ZOOM_1]->connect("pressed", this, "_zoom_reset"); + tools[ZOOM_1]->connect_compat("pressed", this, "_zoom_reset"); toolbar->add_child(tools[ZOOM_1]); tools[ZOOM_1]->set_tooltip(TTR("Zoom Reset")); tools[ZOOM_IN] = memnew(ToolButton); - tools[ZOOM_IN]->connect("pressed", this, "_zoom_in"); + tools[ZOOM_IN]->connect_compat("pressed", this, "_zoom_in"); toolbar->add_child(tools[ZOOM_IN]); tools[ZOOM_IN]->set_tooltip(TTR("Zoom In")); @@ -607,13 +607,13 @@ TileSetEditor::TileSetEditor(EditorNode *p_editor) { scroll->add_child(workspace_container); workspace_overlay = memnew(Control); - workspace_overlay->connect("draw", this, "_on_workspace_overlay_draw"); + workspace_overlay->connect_compat("draw", this, "_on_workspace_overlay_draw"); workspace_container->add_child(workspace_overlay); workspace = memnew(Control); workspace->set_focus_mode(FOCUS_ALL); - workspace->connect("draw", this, "_on_workspace_draw"); - workspace->connect("gui_input", this, "_on_workspace_input"); + workspace->connect_compat("draw", this, "_on_workspace_draw"); + workspace->connect_compat("gui_input", this, "_on_workspace_input"); workspace->set_draw_behind_parent(true); workspace_overlay->add_child(workspace); @@ -626,7 +626,7 @@ TileSetEditor::TileSetEditor(EditorNode *p_editor) { //--------------- cd = memnew(ConfirmationDialog); add_child(cd); - cd->connect("confirmed", this, "_on_tileset_toolbar_confirm"); + cd->connect_compat("confirmed", this, "_on_tileset_toolbar_confirm"); //--------------- err_dialog = memnew(AcceptDialog); @@ -639,13 +639,13 @@ TileSetEditor::TileSetEditor(EditorNode *p_editor) { texture_dialog->clear_filters(); List<String> extensions; - ResourceLoader::get_recognized_extensions_for_type("Texture", &extensions); + ResourceLoader::get_recognized_extensions_for_type("Texture2D", &extensions); for (List<String>::Element *E = extensions.front(); E; E = E->next()) { texture_dialog->add_filter("*." + E->get() + " ; " + E->get().to_upper()); } add_child(texture_dialog); - texture_dialog->connect("files_selected", this, "_on_textures_added"); + texture_dialog->connect_compat("files_selected", this, "_on_textures_added"); //--------------- helper = memnew(TilesetEditorContext(this)); @@ -750,10 +750,10 @@ void TileSetEditor::_on_texture_list_selected(int p_index) { workspace->update(); } -void TileSetEditor::_on_textures_added(const PoolStringArray &p_paths) { +void TileSetEditor::_on_textures_added(const PackedStringArray &p_paths) { int invalid_count = 0; for (int i = 0; i < p_paths.size(); i++) { - Ref<Texture> t = Ref<Texture>(ResourceLoader::load(p_paths[i])); + Ref<Texture2D> t = Ref<Texture2D>(ResourceLoader::load(p_paths[i])); ERR_CONTINUE_MSG(!t.is_valid(), "'" + p_paths[i] + "' is not a valid texture."); @@ -1183,7 +1183,7 @@ void TileSetEditor::_on_workspace_overlay_draw() { if (t_id < 0) return; - Ref<Texture> handle = get_icon("EditorHandle", "EditorIcons"); + Ref<Texture2D> handle = get_icon("EditorHandle", "EditorIcons"); if (draw_handles) { for (int i = 0; i < current_shape.size(); i++) { workspace_overlay->draw_texture(handle, current_shape[i] * workspace->get_scale().x - handle->get_size() * 0.5); @@ -1618,16 +1618,14 @@ void TileSetEditor::_on_workspace_input(const Ref<InputEvent> &p_ie) { if (dragging_point >= 0) { dragging_point = -1; - PoolVector<Vector2> polygon; + Vector<Vector2> polygon; polygon.resize(current_shape.size()); - PoolVector<Vector2>::Write w = polygon.write(); + Vector2 *w = polygon.ptrw(); for (int i = 0; i < current_shape.size(); i++) { w[i] = current_shape[i] - shape_anchor; } - w.release(); - undo_redo->create_action(TTR("Edit Occlusion Polygon")); undo_redo->add_do_method(edited_occlusion_shape.ptr(), "set_polygon", polygon); undo_redo->add_undo_method(edited_occlusion_shape.ptr(), "set_polygon", edited_occlusion_shape->get_polygon()); @@ -1639,18 +1637,16 @@ void TileSetEditor::_on_workspace_input(const Ref<InputEvent> &p_ie) { if (dragging_point >= 0) { dragging_point = -1; - PoolVector<Vector2> polygon; + Vector<Vector2> polygon; Vector<int> indices; polygon.resize(current_shape.size()); - PoolVector<Vector2>::Write w = polygon.write(); + Vector2 *w = polygon.ptrw(); for (int i = 0; i < current_shape.size(); i++) { w[i] = current_shape[i] - shape_anchor; indices.push_back(i); } - w.release(); - undo_redo->create_action(TTR("Edit Navigation Polygon")); undo_redo->add_do_method(edited_navigation_shape.ptr(), "set_vertices", polygon); undo_redo->add_undo_method(edited_navigation_shape.ptr(), "set_vertices", edited_navigation_shape->get_vertices()); @@ -1794,13 +1790,13 @@ void TileSetEditor::_on_tool_clicked(int p_tool) { Array sd = tileset->call("tile_get_shapes", get_current_tile()); if (convex.is_valid()) { - // Make concave + // Make concave. undo_redo->create_action(TTR("Make Polygon Concave")); Ref<ConcavePolygonShape2D> _concave = memnew(ConcavePolygonShape2D); edited_collision_shape = _concave; _set_edited_shape_points(_get_collision_shape_points(convex)); } else if (concave.is_valid()) { - // Make convex + // Make convex. undo_redo->create_action(TTR("Make Polygon Convex")); Ref<ConvexPolygonShape2D> _convex = memnew(ConvexPolygonShape2D); edited_collision_shape = _convex; @@ -1810,14 +1806,20 @@ void TileSetEditor::_on_tool_clicked(int p_tool) { if (sd[i].get("shape") == previous_shape) { undo_redo->add_undo_method(tileset.ptr(), "tile_set_shapes", get_current_tile(), sd.duplicate()); sd.remove(i); - sd.insert(i, edited_collision_shape); - undo_redo->add_do_method(tileset.ptr(), "tile_set_shapes", get_current_tile(), sd); - undo_redo->add_do_method(this, "_select_edited_shape_coord"); - undo_redo->add_undo_method(this, "_select_edited_shape_coord"); - undo_redo->commit_action(); break; } } + + undo_redo->add_do_method(tileset.ptr(), "tile_set_shapes", get_current_tile(), sd); + if (tileset->tile_get_tile_mode(get_current_tile()) == TileSet::AUTO_TILE || tileset->tile_get_tile_mode(get_current_tile()) == TileSet::ATLAS_TILE) { + undo_redo->add_do_method(tileset.ptr(), "tile_add_shape", get_current_tile(), edited_collision_shape, Transform2D(), false, edited_shape_coord); + } else { + undo_redo->add_do_method(tileset.ptr(), "tile_add_shape", get_current_tile(), edited_collision_shape, Transform2D()); + } + undo_redo->add_do_method(this, "_select_edited_shape_coord"); + undo_redo->add_undo_method(this, "_select_edited_shape_coord"); + undo_redo->commit_action(); + _update_toggle_shape_button(); workspace->update(); workspace_container->update(); @@ -1977,18 +1979,15 @@ void TileSetEditor::_set_edited_shape_points(const Vector<Vector2> &points) { undo_redo->add_do_method(convex.ptr(), "set_points", points); undo_redo->add_undo_method(convex.ptr(), "set_points", _get_edited_shape_points()); } else if (concave.is_valid()) { - PoolVector2Array segments; + PackedVector2Array segments; for (int i = 0; i < points.size() - 1; i++) { segments.push_back(points[i]); segments.push_back(points[i + 1]); } segments.push_back(points[points.size() - 1]); segments.push_back(points[0]); - concave->set_segments(segments); undo_redo->add_do_method(concave.ptr(), "set_segments", segments); undo_redo->add_undo_method(concave.ptr(), "set_segments", concave->get_segments()); - } else { - // Invalid shape } } @@ -2662,9 +2661,9 @@ void TileSetEditor::draw_polygon_shapes() { if (coord == edited_shape_coord || tileset->tile_get_tile_mode(get_current_tile()) == TileSet::SINGLE_TILE) { if (!creating_shape) { for (int j = 0; j < polygon.size() - 1; j++) { - workspace->draw_line(polygon[j], polygon[j + 1], c_border, 1, true); + workspace->draw_line(polygon[j], polygon[j + 1], c_border, 1); } - workspace->draw_line(polygon[polygon.size() - 1], polygon[0], c_border, 1, true); + workspace->draw_line(polygon[polygon.size() - 1], polygon[0], c_border, 1); } if (shape == edited_collision_shape) { draw_handles = true; @@ -2700,9 +2699,9 @@ void TileSetEditor::draw_polygon_shapes() { if (!creating_shape) { if (polygon.size() > 1) { for (int j = 0; j < polygon.size() - 1; j++) { - workspace->draw_line(polygon[j], polygon[j + 1], c_border, 1, true); + workspace->draw_line(polygon[j], polygon[j + 1], c_border, 1); } - workspace->draw_line(polygon[polygon.size() - 1], polygon[0], c_border, 1, true); + workspace->draw_line(polygon[polygon.size() - 1], polygon[0], c_border, 1); } } if (shape == edited_occlusion_shape) { @@ -2749,9 +2748,9 @@ void TileSetEditor::draw_polygon_shapes() { if (coord == edited_shape_coord) { if (!creating_shape) { for (int j = 0; j < polygon.size() - 1; j++) { - workspace->draw_line(polygon[j], polygon[j + 1], c_border, 1, true); + workspace->draw_line(polygon[j], polygon[j + 1], c_border, 1); } - workspace->draw_line(polygon[polygon.size() - 1], polygon[0], c_border, 1, true); + workspace->draw_line(polygon[polygon.size() - 1], polygon[0], c_border, 1); } if (shape == edited_occlusion_shape) { draw_handles = true; @@ -2779,7 +2778,7 @@ void TileSetEditor::draw_polygon_shapes() { colors.push_back(c_bg); } } else { - PoolVector<Vector2> vertices = shape->get_vertices(); + Vector<Vector2> vertices = shape->get_vertices(); for (int j = 0; j < shape->get_polygon(0).size(); j++) { polygon.push_back(vertices[shape->get_polygon(0)[j]] + anchor); colors.push_back(c_bg); @@ -2789,9 +2788,9 @@ void TileSetEditor::draw_polygon_shapes() { if (!creating_shape) { for (int j = 0; j < polygon.size() - 1; j++) { - workspace->draw_line(polygon[j], polygon[j + 1], c_border, 1, true); + workspace->draw_line(polygon[j], polygon[j + 1], c_border, 1); } - workspace->draw_line(polygon[polygon.size() - 1], polygon[0], c_border, 1, true); + workspace->draw_line(polygon[polygon.size() - 1], polygon[0], c_border, 1); } if (shape == edited_navigation_shape) { draw_handles = true; @@ -2827,7 +2826,7 @@ void TileSetEditor::draw_polygon_shapes() { colors.push_back(c_bg); } } else { - PoolVector<Vector2> vertices = shape->get_vertices(); + Vector<Vector2> vertices = shape->get_vertices(); for (int j = 0; j < shape->get_polygon(0).size(); j++) { polygon.push_back(vertices[shape->get_polygon(0)[j]] + anchor); colors.push_back(c_bg); @@ -2838,9 +2837,9 @@ void TileSetEditor::draw_polygon_shapes() { if (coord == edited_shape_coord) { if (!creating_shape) { for (int j = 0; j < polygon.size() - 1; j++) { - workspace->draw_line(polygon[j], polygon[j + 1], c_border, 1, true); + workspace->draw_line(polygon[j], polygon[j + 1], c_border, 1); } - workspace->draw_line(polygon[polygon.size() - 1], polygon[0], c_border, 1, true); + workspace->draw_line(polygon[polygon.size() - 1], polygon[0], c_border, 1); } if (shape == edited_navigation_shape) { draw_handles = true; @@ -2856,9 +2855,9 @@ void TileSetEditor::draw_polygon_shapes() { if (creating_shape) { for (int j = 0; j < current_shape.size() - 1; j++) { - workspace->draw_line(current_shape[j], current_shape[j + 1], Color(0, 1, 1), 1, true); + workspace->draw_line(current_shape[j], current_shape[j + 1], Color(0, 1, 1), 1); } - workspace->draw_line(current_shape[current_shape.size() - 1], snap_point(workspace->get_local_mouse_position()), Color(0, 1, 1), 1, true); + workspace->draw_line(current_shape[current_shape.size() - 1], snap_point(workspace->get_local_mouse_position()), Color(0, 1, 1), 1); draw_handles = true; } } @@ -2914,15 +2913,14 @@ void TileSetEditor::close_shape(const Vector2 &shape_anchor) { } else if (edit_mode == EDITMODE_OCCLUSION) { Ref<OccluderPolygon2D> shape = memnew(OccluderPolygon2D); - PoolVector<Vector2> polygon; + Vector<Vector2> polygon; polygon.resize(current_shape.size()); - PoolVector<Vector2>::Write w = polygon.write(); + Vector2 *w = polygon.ptrw(); for (int i = 0; i < current_shape.size(); i++) { w[i] = current_shape[i] - shape_anchor; } - w.release(); shape->set_polygon(polygon); undo_redo->create_action(TTR("Create Occlusion Polygon")); @@ -2940,17 +2938,16 @@ void TileSetEditor::close_shape(const Vector2 &shape_anchor) { } else if (edit_mode == EDITMODE_NAVIGATION) { Ref<NavigationPolygon> shape = memnew(NavigationPolygon); - PoolVector<Vector2> polygon; + Vector<Vector2> polygon; Vector<int> indices; polygon.resize(current_shape.size()); - PoolVector<Vector2>::Write w = polygon.write(); + Vector2 *w = polygon.ptrw(); for (int i = 0; i < current_shape.size(); i++) { w[i] = current_shape[i] - shape_anchor; indices.push_back(i); } - w.release(); shape->set_vertices(polygon); shape->add_polygon(indices); @@ -2972,7 +2969,7 @@ void TileSetEditor::close_shape(const Vector2 &shape_anchor) { void TileSetEditor::select_coord(const Vector2 &coord) { _update_tile_data(); - current_shape = PoolVector2Array(); + current_shape = PackedVector2Array(); if (get_current_tile() == -1) return; Rect2 current_tile_region = tileset->tile_get_region(get_current_tile()); @@ -3003,7 +3000,7 @@ void TileSetEditor::select_coord(const Vector2 &coord) { current_shape.resize(0); if (edited_navigation_shape.is_valid()) { if (edited_navigation_shape->get_polygon_count() > 0) { - PoolVector<Vector2> vertices = edited_navigation_shape->get_vertices(); + Vector<Vector2> vertices = edited_navigation_shape->get_vertices(); for (int i = 0; i < edited_navigation_shape->get_polygon(0).size(); i++) { current_shape.push_back(vertices[edited_navigation_shape->get_polygon(0)[i]] + current_tile_region.position); } @@ -3052,7 +3049,7 @@ void TileSetEditor::select_coord(const Vector2 &coord) { current_shape.resize(0); if (edited_navigation_shape.is_valid()) { if (edited_navigation_shape->get_polygon_count() > 0) { - PoolVector<Vector2> vertices = edited_navigation_shape->get_vertices(); + Vector<Vector2> vertices = edited_navigation_shape->get_vertices(); for (int i = 0; i < edited_navigation_shape->get_polygon(0).size(); i++) { current_shape.push_back(vertices[edited_navigation_shape->get_polygon(0)[i]] + shape_anchor); } @@ -3098,13 +3095,13 @@ Vector2 TileSetEditor::snap_point(const Vector2 &point) { return p; } -void TileSetEditor::add_texture(Ref<Texture> p_texture) { +void TileSetEditor::add_texture(Ref<Texture2D> p_texture) { texture_list->add_item(p_texture->get_path().get_file()); texture_map.insert(p_texture->get_rid(), p_texture); texture_list->set_item_metadata(texture_list->get_item_count() - 1, p_texture->get_rid()); } -void TileSetEditor::remove_texture(Ref<Texture> p_texture) { +void TileSetEditor::remove_texture(Ref<Texture2D> p_texture) { texture_list->remove_item(texture_list->find_metadata(p_texture->get_rid())); texture_map.erase(p_texture->get_rid()); @@ -3117,7 +3114,7 @@ void TileSetEditor::remove_texture(Ref<Texture> p_texture) { } void TileSetEditor::update_texture_list() { - Ref<Texture> selected_texture = get_current_texture(); + Ref<Texture2D> selected_texture = get_current_texture(); helper->set_tileset(tileset); @@ -3326,9 +3323,9 @@ void TileSetEditor::set_current_tile(int p_id) { } } -Ref<Texture> TileSetEditor::get_current_texture() { +Ref<Texture2D> TileSetEditor::get_current_texture() { if (texture_list->get_selected_items().size() == 0) - return Ref<Texture>(); + return Ref<Texture2D>(); else return texture_map[texture_list->get_item_metadata(texture_list->get_selected_items()[0])]; } @@ -3487,7 +3484,7 @@ void TilesetEditorContext::_get_property_list(List<PropertyInfo> *p_list) const int id = tileset_editor->get_current_tile(); p_list->push_back(PropertyInfo(Variant::NIL, "Selected Tile", PROPERTY_HINT_NONE, "tile_", PROPERTY_USAGE_GROUP)); p_list->push_back(PropertyInfo(Variant::STRING, "tile_name")); - p_list->push_back(PropertyInfo(Variant::OBJECT, "tile_normal_map", PROPERTY_HINT_RESOURCE_TYPE, "Texture")); + p_list->push_back(PropertyInfo(Variant::OBJECT, "tile_normal_map", PROPERTY_HINT_RESOURCE_TYPE, "Texture2D")); p_list->push_back(PropertyInfo(Variant::VECTOR2, "tile_tex_offset")); p_list->push_back(PropertyInfo(Variant::OBJECT, "tile_material", PROPERTY_HINT_RESOURCE_TYPE, "ShaderMaterial")); p_list->push_back(PropertyInfo(Variant::COLOR, "tile_modulate")); @@ -3551,11 +3548,11 @@ void TileSetEditorPlugin::make_visible(bool p_visible) { if (p_visible) { tileset_editor_button->show(); editor->make_bottom_panel_item_visible(tileset_editor); - get_tree()->connect("idle_frame", tileset_editor, "_on_workspace_process"); + get_tree()->connect_compat("idle_frame", tileset_editor, "_on_workspace_process"); } else { editor->hide_bottom_panel(); tileset_editor_button->hide(); - get_tree()->disconnect("idle_frame", tileset_editor, "_on_workspace_process"); + get_tree()->disconnect_compat("idle_frame", tileset_editor, "_on_workspace_process"); } } diff --git a/editor/plugins/tile_set_editor_plugin.h b/editor/plugins/tile_set_editor_plugin.h index 0e0bd6448c..7b49e2ece2 100644 --- a/editor/plugins/tile_set_editor_plugin.h +++ b/editor/plugins/tile_set_editor_plugin.h @@ -114,7 +114,7 @@ class TileSetEditor : public HSplitContainer { int option; ToolButton *tileset_toolbar_buttons[TOOL_TILESET_MAX]; MenuButton *tileset_toolbar_tools; - Map<RID, Ref<Texture> > texture_map; + Map<RID, Ref<Texture2D> > texture_map; bool creating_shape; int dragging_point; @@ -123,7 +123,7 @@ class TileSetEditor : public HSplitContainer { Rect2 edited_region; bool draw_edited_region; Vector2 edited_shape_coord; - PoolVector2Array current_shape; + PackedVector2Array current_shape; Map<Vector2i, SubtileData> current_tile_data; Map<Vector2, uint32_t> bitmask_map_copy; @@ -165,10 +165,10 @@ class TileSetEditor : public HSplitContainer { void update_texture_list(); void update_texture_list_icon(); - void add_texture(Ref<Texture> p_texture); - void remove_texture(Ref<Texture> p_texture); + void add_texture(Ref<Texture2D> p_texture); + void remove_texture(Ref<Texture2D> p_texture); - Ref<Texture> get_current_texture(); + Ref<Texture2D> get_current_texture(); static void _import_node(Node *p_node, Ref<TileSet> p_library); static void _import_scene(Node *p_scene, Ref<TileSet> p_library, bool p_merge); @@ -178,7 +178,7 @@ class TileSetEditor : public HSplitContainer { Variant get_drag_data_fw(const Point2 &p_point, Control *p_from); bool can_drop_data_fw(const Point2 &p_point, const Variant &p_data, Control *p_from) const; void drop_data_fw(const Point2 &p_point, const Variant &p_data, Control *p_from); - void _file_load_request(const PoolVector<String> &p_path, int p_at_pos = -1); + void _file_load_request(const Vector<String> &p_path, int p_at_pos = -1); protected: static void _bind_methods(); @@ -195,7 +195,7 @@ private: void _on_tileset_toolbar_button_pressed(int p_index); void _on_tileset_toolbar_confirm(); void _on_texture_list_selected(int p_index); - void _on_textures_added(const PoolStringArray &p_paths); + void _on_textures_added(const PackedStringArray &p_paths); void _on_edit_mode_changed(int p_edit_mode); void _on_workspace_mode_changed(int p_workspace_mode); void _on_workspace_overlay_draw(); diff --git a/editor/plugins/version_control_editor_plugin.cpp b/editor/plugins/version_control_editor_plugin.cpp index 3622ca8d61..cfa10488ab 100644 --- a/editor/plugins/version_control_editor_plugin.cpp +++ b/editor/plugins/version_control_editor_plugin.cpp @@ -124,10 +124,10 @@ void VersionControlEditorPlugin::_initialize_vcs() { ERR_FAIL_COND_MSG(!addon_script_instance, "Failed to create addon script instance."); // The addon is attached as a script to the VCS interface as a proxy end-point - vcs_interface->set_script_and_instance(script.get_ref_ptr(), addon_script_instance); + vcs_interface->set_script_and_instance(script, addon_script_instance); EditorVCSInterface::set_singleton(vcs_interface); - EditorFileSystem::get_singleton()->connect("filesystem_changed", this, "_refresh_stage_area"); + EditorFileSystem::get_singleton()->connect_compat("filesystem_changed", this, "_refresh_stage_area"); String res_dir = OS::get_singleton()->get_resource_dir(); @@ -388,8 +388,8 @@ void VersionControlEditorPlugin::clear_stage_area() { void VersionControlEditorPlugin::shut_down() { if (EditorVCSInterface::get_singleton()) { - if (EditorFileSystem::get_singleton()->is_connected("filesystem_changed", this, "_refresh_stage_area")) { - EditorFileSystem::get_singleton()->disconnect("filesystem_changed", this, "_refresh_stage_area"); + if (EditorFileSystem::get_singleton()->is_connected_compat("filesystem_changed", this, "_refresh_stage_area")) { + EditorFileSystem::get_singleton()->disconnect_compat("filesystem_changed", this, "_refresh_stage_area"); } EditorVCSInterface::get_singleton()->shut_down(); memdelete(EditorVCSInterface::get_singleton()); @@ -444,14 +444,14 @@ VersionControlEditorPlugin::VersionControlEditorPlugin() { set_up_choice = memnew(OptionButton); set_up_choice->set_h_size_flags(HBoxContainer::SIZE_EXPAND_FILL); - set_up_choice->connect("item_selected", this, "_selected_a_vcs"); + set_up_choice->connect_compat("item_selected", this, "_selected_a_vcs"); set_up_hbc->add_child(set_up_choice); set_up_init_settings = NULL; set_up_init_button = memnew(Button); set_up_init_button->set_text(TTR("Initialize")); - set_up_init_button->connect("pressed", this, "_initialize_vcs"); + set_up_init_button->connect_compat("pressed", this, "_initialize_vcs"); set_up_vbc->add_child(set_up_init_button); version_control_actions->set_v_size_flags(PopupMenu::SIZE_EXPAND_FILL); @@ -479,7 +479,7 @@ VersionControlEditorPlugin::VersionControlEditorPlugin() { refresh_button->set_tooltip(TTR("Detect new changes")); refresh_button->set_text(TTR("Refresh")); refresh_button->set_icon(EditorNode::get_singleton()->get_gui_base()->get_icon("Reload", "EditorIcons")); - refresh_button->connect("pressed", this, "_refresh_stage_area"); + refresh_button->connect_compat("pressed", this, "_refresh_stage_area"); stage_tools->add_child(refresh_button); stage_files = memnew(Tree); @@ -492,7 +492,7 @@ VersionControlEditorPlugin::VersionControlEditorPlugin() { stage_files->set_allow_rmb_select(true); stage_files->set_select_mode(Tree::SelectMode::SELECT_MULTI); stage_files->set_edit_checkbox_cell_only_when_checkbox_is_pressed(true); - stage_files->connect("cell_selected", this, "_view_file_diff"); + stage_files->connect_compat("cell_selected", this, "_view_file_diff"); stage_files->create_item(); stage_files->set_hide_root(true); commit_box_vbc->add_child(stage_files); @@ -516,12 +516,12 @@ VersionControlEditorPlugin::VersionControlEditorPlugin() { stage_selected_button = memnew(Button); stage_selected_button->set_h_size_flags(Button::SIZE_EXPAND_FILL); stage_selected_button->set_text(TTR("Stage Selected")); - stage_selected_button->connect("pressed", this, "_stage_selected"); + stage_selected_button->connect_compat("pressed", this, "_stage_selected"); stage_buttons->add_child(stage_selected_button); stage_all_button = memnew(Button); stage_all_button->set_text(TTR("Stage All")); - stage_all_button->connect("pressed", this, "_stage_all"); + stage_all_button->connect_compat("pressed", this, "_stage_all"); stage_buttons->add_child(stage_all_button); commit_box_vbc->add_child(memnew(HSeparator)); @@ -537,7 +537,7 @@ VersionControlEditorPlugin::VersionControlEditorPlugin() { commit_button = memnew(Button); commit_button->set_text(TTR("Commit Changes")); - commit_button->connect("pressed", this, "_send_commit_msg"); + commit_button->connect_compat("pressed", this, "_send_commit_msg"); commit_box_vbc->add_child(commit_button); commit_status = memnew(Label); @@ -571,7 +571,7 @@ VersionControlEditorPlugin::VersionControlEditorPlugin() { diff_refresh_button = memnew(Button); diff_refresh_button->set_tooltip(TTR("Detect changes in file diff")); diff_refresh_button->set_icon(EditorNode::get_singleton()->get_gui_base()->get_icon("Reload", "EditorIcons")); - diff_refresh_button->connect("pressed", this, "_refresh_file_diff"); + diff_refresh_button->connect_compat("pressed", this, "_refresh_file_diff"); diff_hbc->add_child(diff_refresh_button); diff = memnew(RichTextLabel); diff --git a/editor/plugins/visual_shader_editor_plugin.cpp b/editor/plugins/visual_shader_editor_plugin.cpp index fb095692bc..e228f25c62 100644 --- a/editor/plugins/visual_shader_editor_plugin.cpp +++ b/editor/plugins/visual_shader_editor_plugin.cpp @@ -72,14 +72,14 @@ void VisualShaderEditor::edit(VisualShader *p_visual_shader) { } } visual_shader = Ref<VisualShader>(p_visual_shader); - if (!visual_shader->is_connected("changed", this, "_update_preview")) { - visual_shader->connect("changed", this, "_update_preview"); + if (!visual_shader->is_connected_compat("changed", this, "_update_preview")) { + visual_shader->connect_compat("changed", this, "_update_preview"); } visual_shader->set_graph_offset(graph->get_scroll_ofs() / EDSCALE); } else { if (visual_shader.is_valid()) { - if (visual_shader->is_connected("changed", this, "")) { - visual_shader->disconnect("changed", this, "_update_preview"); + if (visual_shader->is_connected_compat("changed", this, "")) { + visual_shader->disconnect_compat("changed", this, "_update_preview"); } } visual_shader.unref(); @@ -116,7 +116,7 @@ void VisualShaderEditor::clear_custom_types() { } } -void VisualShaderEditor::add_custom_type(const String &p_name, const Ref<Script> &p_script, const String &p_description, int p_return_icon_type, const String &p_category, const String &p_subcategory) { +void VisualShaderEditor::add_custom_type(const String &p_name, const Ref<Script> &p_script, const String &p_description, int p_return_icon_type, const String &p_category, bool p_highend) { ERR_FAIL_COND(!p_name.is_valid_identifier()); ERR_FAIL_COND(!p_script.is_valid()); @@ -134,14 +134,15 @@ void VisualShaderEditor::add_custom_type(const String &p_name, const Ref<Script> ao.return_type = p_return_icon_type; ao.description = p_description; ao.category = p_category; - ao.sub_category = p_subcategory; + ao.highend = p_highend; ao.is_custom = true; bool begin = false; + String root = p_category.split("/")[0]; for (int i = 0; i < add_options.size(); i++) { if (add_options[i].is_custom) { - if (add_options[i].category == p_category) { + if (add_options[i].category == root) { if (!begin) { begin = true; } @@ -215,7 +216,7 @@ void VisualShaderEditor::update_custom_nodes() { Ref<VisualShaderNodeCustom> ref; ref.instance(); - ref->set_script(script.get_ref_ptr()); + ref->set_script(script); String name; if (ref->has_method("_get_name")) { @@ -238,31 +239,35 @@ void VisualShaderEditor::update_custom_nodes() { if (ref->has_method("_get_category")) { category = (String)ref->call("_get_category"); } - if (category == "") { - category = "Custom"; - } String subcategory = ""; if (ref->has_method("_get_subcategory")) { subcategory = (String)ref->call("_get_subcategory"); } + bool highend = false; + if (ref->has_method("_is_highend")) { + highend = (bool)ref->call("_is_highend"); + } + Dictionary dict; dict["name"] = name; dict["script"] = script; dict["description"] = description; dict["return_icon_type"] = return_icon_type; - dict["category"] = category; - dict["subcategory"] = subcategory; - String key; - key = category; - key += "/"; + category = category.rstrip("/"); + category = category.lstrip("/"); + category = "Addons/" + category; if (subcategory != "") { - key += subcategory; - key += "/"; + category += "/" + subcategory; } - key += name; + + dict["category"] = category; + dict["highend"] = highend; + + String key; + key = category + "/" + name; added[key] = dict; } @@ -277,18 +282,14 @@ void VisualShaderEditor::update_custom_nodes() { const Dictionary &value = (Dictionary)added[key]; - add_custom_type(value["name"], value["script"], value["description"], value["return_icon_type"], value["category"], value["subcategory"]); + add_custom_type(value["name"], value["script"], value["description"], value["return_icon_type"], value["category"], value["highend"]); } _update_options_menu(); } String VisualShaderEditor::_get_description(int p_idx) { - if (add_options[p_idx].highend) { - return TTR("(GLES3 only)") + " " + add_options[p_idx].description; // TODO: change it to (Vulkan Only) when its ready - } else { - return add_options[p_idx].description; - } + return add_options[p_idx].description; } void VisualShaderEditor::_update_options_menu() { @@ -296,22 +297,12 @@ void VisualShaderEditor::_update_options_menu() { node_desc->set_text(""); members_dialog->get_ok()->set_disabled(true); - String prev_category; - String prev_sub_category; - members->clear(); TreeItem *root = members->create_item(); - TreeItem *category = NULL; - TreeItem *sub_category = NULL; String filter = node_filter->get_text().strip_edges(); bool use_filter = !filter.empty(); - Vector<String> categories; - Vector<String> sub_categories; - - int item_count = 0; - int item_count2 = 0; bool is_first_item = true; Color unsupported_color = get_color("error_color", "Editor"); @@ -319,111 +310,92 @@ void VisualShaderEditor::_update_options_menu() { static bool low_driver = ProjectSettings::get_singleton()->get("rendering/quality/driver/driver_name") == "GLES2"; + Map<String, TreeItem *> folders; + int current_func = -1; if (!visual_shader.is_null()) { current_func = visual_shader->get_mode(); } - for (int i = 0; i < add_options.size() + 1; i++) { + Vector<AddOption> custom_options; + Vector<AddOption> embedded_options; - if (i == add_options.size()) { - if (sub_category != NULL && item_count2 == 0) { - memdelete(sub_category); - --item_count; + for (int i = 0; i < add_options.size(); i++) { + if (!use_filter || add_options[i].name.findn(filter) != -1) { + if ((add_options[i].func != current_func && add_options[i].func != -1) || !_is_available(add_options[i].mode)) { + continue; } - if (category != NULL && item_count == 0) { - memdelete(category); + const_cast<AddOption &>(add_options[i]).temp_idx = i; // save valid id + if (add_options[i].is_custom) { + custom_options.push_back(add_options[i]); + } else { + embedded_options.push_back(add_options[i]); } - break; } + } + Vector<AddOption> options; + SortArray<AddOption, _OptionComparator> sorter; + sorter.sort(custom_options.ptrw(), custom_options.size()); - if (!use_filter || add_options[i].name.findn(filter) != -1) { - - if ((add_options[i].func != current_func && add_options[i].func != -1) || !_is_available(add_options[i].mode)) - continue; + options.append_array(custom_options); + options.append_array(embedded_options); - if (prev_category != add_options[i].category) { - if (category != NULL && item_count == 0) { - memdelete(category); - } + for (int i = 0; i < options.size(); i++) { + String path = options[i].category; + Vector<String> subfolders = path.split("/"); + TreeItem *category = NULL; - item_count = 0; - prev_sub_category = ""; - category = members->create_item(root); - category->set_text(0, add_options[i].category); - category->set_selectable(0, false); - if (!use_filter) - category->set_collapsed(true); - } - - if (add_options[i].sub_category != "") { - if (prev_sub_category != add_options[i].sub_category) { - if (category != NULL) { - if (sub_category != NULL && item_count2 == 0) { - memdelete(sub_category); - --item_count; - } - ++item_count; - item_count2 = 0; - sub_category = members->create_item(category); - sub_category->set_text(0, add_options[i].sub_category); - sub_category->set_selectable(0, false); - if (!use_filter) - sub_category->set_collapsed(true); - } - } - } else { - sub_category = NULL; - } - - TreeItem *p_category = NULL; - - if (sub_category != NULL) { - p_category = sub_category; - ++item_count2; - } else if (category != NULL) { - p_category = category; - ++item_count; - } - - if (p_category != NULL) { - TreeItem *item = members->create_item(p_category); - if (add_options[i].highend && low_driver) - item->set_custom_color(0, unsupported_color); - else if (add_options[i].highend) - item->set_custom_color(0, supported_color); - item->set_text(0, add_options[i].name); - if (is_first_item && use_filter) { - item->select(0); - node_desc->set_text(_get_description(i)); - is_first_item = false; - } - switch (add_options[i].return_type) { - case VisualShaderNode::PORT_TYPE_SCALAR: - item->set_icon(0, EditorNode::get_singleton()->get_gui_base()->get_icon("float", "EditorIcons")); - break; - case VisualShaderNode::PORT_TYPE_VECTOR: - item->set_icon(0, EditorNode::get_singleton()->get_gui_base()->get_icon("Vector3", "EditorIcons")); - break; - case VisualShaderNode::PORT_TYPE_BOOLEAN: - item->set_icon(0, EditorNode::get_singleton()->get_gui_base()->get_icon("bool", "EditorIcons")); - break; - case VisualShaderNode::PORT_TYPE_TRANSFORM: - item->set_icon(0, EditorNode::get_singleton()->get_gui_base()->get_icon("Transform", "EditorIcons")); - break; - case VisualShaderNode::PORT_TYPE_SAMPLER: - item->set_icon(0, EditorNode::get_singleton()->get_gui_base()->get_icon("ImageTexture", "EditorIcons")); - break; - default: - break; + if (!folders.has(path)) { + category = root; + String path_temp = ""; + for (int j = 0; j < subfolders.size(); j++) { + path_temp += subfolders[j]; + if (!folders.has(path_temp)) { + category = members->create_item(category); + category->set_selectable(0, false); + category->set_collapsed(!use_filter); + category->set_text(0, subfolders[j]); + folders.insert(path_temp, category); + } else { + category = folders[path_temp]; } - item->set_meta("id", i); } - - prev_sub_category = add_options[i].sub_category; - prev_category = add_options[i].category; + } else { + category = folders[path]; + } + + TreeItem *item = members->create_item(category); + if (options[i].highend && low_driver) + item->set_custom_color(0, unsupported_color); + else if (options[i].highend) + item->set_custom_color(0, supported_color); + item->set_text(0, options[i].name); + if (is_first_item && use_filter) { + item->select(0); + node_desc->set_text(options[i].description); + is_first_item = false; + } + switch (options[i].return_type) { + case VisualShaderNode::PORT_TYPE_SCALAR: + item->set_icon(0, EditorNode::get_singleton()->get_gui_base()->get_icon("float", "EditorIcons")); + break; + case VisualShaderNode::PORT_TYPE_VECTOR: + item->set_icon(0, EditorNode::get_singleton()->get_gui_base()->get_icon("Vector3", "EditorIcons")); + break; + case VisualShaderNode::PORT_TYPE_BOOLEAN: + item->set_icon(0, EditorNode::get_singleton()->get_gui_base()->get_icon("bool", "EditorIcons")); + break; + case VisualShaderNode::PORT_TYPE_TRANSFORM: + item->set_icon(0, EditorNode::get_singleton()->get_gui_base()->get_icon("Transform", "EditorIcons")); + break; + case VisualShaderNode::PORT_TYPE_SAMPLER: + item->set_icon(0, EditorNode::get_singleton()->get_gui_base()->get_icon("ImageTexture", "EditorIcons")); + break; + default: + break; } + item->set_meta("id", options[i].temp_idx); } } @@ -526,7 +498,7 @@ void VisualShaderEditor::_update_graph() { size = group_node->get_size(); node->set_resizable(true); - node->connect("resize_request", this, "_node_resized", varray((int)type, nodes[n_i])); + node->connect_compat("resize_request", this, "_node_resized", varray((int)type, nodes[n_i])); } if (is_expression) { expression = expression_node->get_expression(); @@ -543,10 +515,10 @@ void VisualShaderEditor::_update_graph() { if (nodes[n_i] >= 2) { node->set_show_close_button(true); - node->connect("close_request", this, "_delete_request", varray(nodes[n_i]), CONNECT_DEFERRED); + node->connect_compat("close_request", this, "_delete_request", varray(nodes[n_i]), CONNECT_DEFERRED); } - node->connect("dragged", this, "_node_dragged", varray(nodes[n_i])); + node->connect_compat("dragged", this, "_node_dragged", varray(nodes[n_i])); Control *custom_editor = NULL; int port_offset = 0; @@ -564,8 +536,8 @@ void VisualShaderEditor::_update_graph() { LineEdit *uniform_name = memnew(LineEdit); uniform_name->set_text(uniform->get_uniform_name()); node->add_child(uniform_name); - uniform_name->connect("text_entered", this, "_line_edit_changed", varray(uniform_name, nodes[n_i])); - uniform_name->connect("focus_exited", this, "_line_edit_focus_out", varray(uniform_name, nodes[n_i])); + uniform_name->connect_compat("text_entered", this, "_line_edit_changed", varray(uniform_name, nodes[n_i])); + uniform_name->connect_compat("focus_exited", this, "_line_edit_focus_out", varray(uniform_name, nodes[n_i])); if (vsnode->get_input_port_count() == 0 && vsnode->get_output_port_count() == 1 && vsnode->get_output_port_name(0) == "") { //shortcut @@ -609,14 +581,14 @@ void VisualShaderEditor::_update_graph() { Button *add_input_btn = memnew(Button); add_input_btn->set_text(TTR("Add Input")); - add_input_btn->connect("pressed", this, "_add_input_port", varray(nodes[n_i], group_node->get_free_input_port_id(), VisualShaderNode::PORT_TYPE_VECTOR, "input" + itos(group_node->get_free_input_port_id())), CONNECT_DEFERRED); + add_input_btn->connect_compat("pressed", this, "_add_input_port", varray(nodes[n_i], group_node->get_free_input_port_id(), VisualShaderNode::PORT_TYPE_VECTOR, "input" + itos(group_node->get_free_input_port_id())), CONNECT_DEFERRED); hb2->add_child(add_input_btn); hb2->add_spacer(); Button *add_output_btn = memnew(Button); add_output_btn->set_text(TTR("Add Output")); - add_output_btn->connect("pressed", this, "_add_output_port", varray(nodes[n_i], group_node->get_free_output_port_id(), VisualShaderNode::PORT_TYPE_VECTOR, "output" + itos(group_node->get_free_output_port_id())), CONNECT_DEFERRED); + add_output_btn->connect_compat("pressed", this, "_add_output_port", varray(nodes[n_i], group_node->get_free_output_port_id(), VisualShaderNode::PORT_TYPE_VECTOR, "output" + itos(group_node->get_free_output_port_id())), CONNECT_DEFERRED); hb2->add_child(add_output_btn); node->add_child(hb2); @@ -664,13 +636,13 @@ void VisualShaderEditor::_update_graph() { if (default_value.get_type() != Variant::NIL) { // only a label Button *button = memnew(Button); hb->add_child(button); - button->connect("pressed", this, "_edit_port_default_input", varray(button, nodes[n_i], i)); + button->connect_compat("pressed", this, "_edit_port_default_input", varray(button, nodes[n_i], i)); switch (default_value.get_type()) { case Variant::COLOR: { button->set_custom_minimum_size(Size2(30, 0) * EDSCALE); - button->connect("draw", this, "_draw_color_over_button", varray(button, default_value)); + button->connect_compat("draw", this, "_draw_color_over_button", varray(button, default_value)); } break; case Variant::BOOL: { button->set_text(((bool)default_value) ? "true" : "false"); @@ -705,20 +677,20 @@ void VisualShaderEditor::_update_graph() { type_box->add_item(TTR("Sampler")); type_box->select(group_node->get_input_port_type(i)); type_box->set_custom_minimum_size(Size2(100 * EDSCALE, 0)); - type_box->connect("item_selected", this, "_change_input_port_type", varray(nodes[n_i], i), CONNECT_DEFERRED); + type_box->connect_compat("item_selected", this, "_change_input_port_type", varray(nodes[n_i], i), CONNECT_DEFERRED); LineEdit *name_box = memnew(LineEdit); hb->add_child(name_box); name_box->set_custom_minimum_size(Size2(65 * EDSCALE, 0)); name_box->set_h_size_flags(SIZE_EXPAND_FILL); name_box->set_text(name_left); - name_box->connect("text_entered", this, "_change_input_port_name", varray(name_box, nodes[n_i], i)); - name_box->connect("focus_exited", this, "_port_name_focus_out", varray(name_box, nodes[n_i], i, false)); + name_box->connect_compat("text_entered", this, "_change_input_port_name", varray(name_box, nodes[n_i], i)); + name_box->connect_compat("focus_exited", this, "_port_name_focus_out", varray(name_box, nodes[n_i], i, false)); Button *remove_btn = memnew(Button); remove_btn->set_icon(EditorNode::get_singleton()->get_gui_base()->get_icon("Remove", "EditorIcons")); remove_btn->set_tooltip(TTR("Remove") + " " + name_left); - remove_btn->connect("pressed", this, "_remove_input_port", varray(nodes[n_i], i), CONNECT_DEFERRED); + remove_btn->connect_compat("pressed", this, "_remove_input_port", varray(nodes[n_i], i), CONNECT_DEFERRED); hb->add_child(remove_btn); } else { @@ -747,7 +719,7 @@ void VisualShaderEditor::_update_graph() { Button *remove_btn = memnew(Button); remove_btn->set_icon(EditorNode::get_singleton()->get_gui_base()->get_icon("Remove", "EditorIcons")); remove_btn->set_tooltip(TTR("Remove") + " " + name_left); - remove_btn->connect("pressed", this, "_remove_output_port", varray(nodes[n_i], i), CONNECT_DEFERRED); + remove_btn->connect_compat("pressed", this, "_remove_output_port", varray(nodes[n_i], i), CONNECT_DEFERRED); hb->add_child(remove_btn); LineEdit *name_box = memnew(LineEdit); @@ -755,8 +727,8 @@ void VisualShaderEditor::_update_graph() { name_box->set_custom_minimum_size(Size2(65 * EDSCALE, 0)); name_box->set_h_size_flags(SIZE_EXPAND_FILL); name_box->set_text(name_right); - name_box->connect("text_entered", this, "_change_output_port_name", varray(name_box, nodes[n_i], i)); - name_box->connect("focus_exited", this, "_port_name_focus_out", varray(name_box, nodes[n_i], i, true)); + name_box->connect_compat("text_entered", this, "_change_output_port_name", varray(name_box, nodes[n_i], i)); + name_box->connect_compat("focus_exited", this, "_port_name_focus_out", varray(name_box, nodes[n_i], i, true)); OptionButton *type_box = memnew(OptionButton); hb->add_child(type_box); @@ -766,7 +738,7 @@ void VisualShaderEditor::_update_graph() { type_box->add_item(TTR("Transform")); type_box->select(group_node->get_output_port_type(i)); type_box->set_custom_minimum_size(Size2(100 * EDSCALE, 0)); - type_box->connect("item_selected", this, "_change_output_port_type", varray(nodes[n_i], i), CONNECT_DEFERRED); + type_box->connect_compat("item_selected", this, "_change_output_port_type", varray(nodes[n_i], i), CONNECT_DEFERRED); } else { Label *label = memnew(Label); label->set_text(name_right); @@ -787,7 +759,7 @@ void VisualShaderEditor::_update_graph() { preview->set_pressed(true); } - preview->connect("pressed", this, "_preview_select_port", varray(nodes[n_i], i), CONNECT_DEFERRED); + preview->connect_compat("pressed", this, "_preview_select_port", varray(nodes[n_i], i), CONNECT_DEFERRED); hb->add_child(preview); } @@ -860,7 +832,7 @@ void VisualShaderEditor::_update_graph() { expression_box->set_context_menu_enabled(false); expression_box->set_show_line_numbers(true); - expression_box->connect("focus_exited", this, "_expression_focus_out", varray(expression_box, nodes[n_i])); + expression_box->connect_compat("focus_exited", this, "_expression_focus_out", varray(expression_box, nodes[n_i])); } if (!uniform.is_valid()) { @@ -1412,7 +1384,7 @@ VisualShaderNode *VisualShaderEditor::_add_node(int p_idx, int p_op_idx) { VisualShaderNode *vsn = Object::cast_to<VisualShaderNode>(ClassDB::instance(base_type)); ERR_FAIL_COND_V(!vsn, NULL); vsnode = Ref<VisualShaderNode>(vsn); - vsnode->set_script(add_options[p_idx].script.get_ref_ptr()); + vsnode->set_script(add_options[p_idx].script); } Point2 position = graph->get_scroll_ofs(); @@ -1680,6 +1652,8 @@ void VisualShaderEditor::_notification(int p_what) { if (p_what == NOTIFICATION_ENTER_TREE || p_what == NOTIFICATION_THEME_CHANGED) { + highend_label->set_modulate(get_color("vulkan_color", "Editor")); + error_panel->add_style_override("panel", get_stylebox("bg", "Tree")); error_label->add_color_override("font_color", get_color("error_color", "Editor")); @@ -2037,8 +2011,10 @@ void VisualShaderEditor::_member_selected() { if (item != NULL && item->has_meta("id")) { members_dialog->get_ok()->set_disabled(false); + highend_label->set_visible(add_options[item->get_meta("id")].highend); node_desc->set_text(_get_description(item->get_meta("id"))); } else { + highend_label->set_visible(false); members_dialog->get_ok()->set_disabled(true); node_desc->set_text(""); } @@ -2157,10 +2133,10 @@ void VisualShaderEditor::drop_data_fw(const Point2 &p_point, const Variant &p_da saved_node_pos_dirty = true; _add_node(idx, add_options[idx].sub_func); } else if (d.has("files")) { - if (d["files"].get_type() == Variant::POOL_STRING_ARRAY) { + if (d["files"].get_type() == Variant::PACKED_STRING_ARRAY) { int j = 0; - PoolStringArray arr = d["files"]; + PackedStringArray arr = d["files"]; for (int i = 0; i < arr.size(); i++) { String type = ResourceLoader::get_resource_type(arr[i]); @@ -2172,7 +2148,7 @@ void VisualShaderEditor::drop_data_fw(const Point2 &p_point, const Variant &p_da _add_custom_node(arr[i]); j++; } - } else if (ClassDB::get_parent_class(type) == "Texture") { + } else if (ClassDB::get_parent_class(type) == "Texture2D") { saved_node_pos = p_point + Vector2(0, j * 210 * EDSCALE); saved_node_pos_dirty = true; _add_texture_node(arr[i]); @@ -2320,17 +2296,17 @@ VisualShaderEditor::VisualShaderEditor() { graph->add_valid_right_disconnect_type(VisualShaderNode::PORT_TYPE_SAMPLER); //graph->add_valid_left_disconnect_type(0); graph->set_v_size_flags(SIZE_EXPAND_FILL); - graph->connect("connection_request", this, "_connection_request", varray(), CONNECT_DEFERRED); - graph->connect("disconnection_request", this, "_disconnection_request", varray(), CONNECT_DEFERRED); - graph->connect("node_selected", this, "_node_selected"); - graph->connect("scroll_offset_changed", this, "_scroll_changed"); - graph->connect("duplicate_nodes_request", this, "_duplicate_nodes"); - graph->connect("copy_nodes_request", this, "_copy_nodes"); - graph->connect("paste_nodes_request", this, "_paste_nodes"); - graph->connect("delete_nodes_request", this, "_on_nodes_delete"); - graph->connect("gui_input", this, "_graph_gui_input"); - graph->connect("connection_to_empty", this, "_connection_to_empty"); - graph->connect("connection_from_empty", this, "_connection_from_empty"); + graph->connect_compat("connection_request", this, "_connection_request", varray(), CONNECT_DEFERRED); + graph->connect_compat("disconnection_request", this, "_disconnection_request", varray(), CONNECT_DEFERRED); + graph->connect_compat("node_selected", this, "_node_selected"); + graph->connect_compat("scroll_offset_changed", this, "_scroll_changed"); + graph->connect_compat("duplicate_nodes_request", this, "_duplicate_nodes"); + graph->connect_compat("copy_nodes_request", this, "_copy_nodes"); + graph->connect_compat("paste_nodes_request", this, "_paste_nodes"); + graph->connect_compat("delete_nodes_request", this, "_on_nodes_delete"); + graph->connect_compat("gui_input", this, "_graph_gui_input"); + graph->connect_compat("connection_to_empty", this, "_connection_to_empty"); + graph->connect_compat("connection_from_empty", this, "_connection_from_empty"); graph->add_valid_connection_type(VisualShaderNode::PORT_TYPE_SCALAR, VisualShaderNode::PORT_TYPE_SCALAR); graph->add_valid_connection_type(VisualShaderNode::PORT_TYPE_SCALAR, VisualShaderNode::PORT_TYPE_VECTOR); graph->add_valid_connection_type(VisualShaderNode::PORT_TYPE_SCALAR, VisualShaderNode::PORT_TYPE_BOOLEAN); @@ -2352,7 +2328,7 @@ VisualShaderEditor::VisualShaderEditor() { edit_type->add_item(TTR("Fragment")); edit_type->add_item(TTR("Light")); edit_type->select(1); - edit_type->connect("item_selected", this, "_mode_selected"); + edit_type->connect_compat("item_selected", this, "_mode_selected"); graph->get_zoom_hbox()->add_child(edit_type); graph->get_zoom_hbox()->move_child(edit_type, 0); @@ -2360,13 +2336,13 @@ VisualShaderEditor::VisualShaderEditor() { graph->get_zoom_hbox()->add_child(add_node); add_node->set_text(TTR("Add Node...")); graph->get_zoom_hbox()->move_child(add_node, 0); - add_node->connect("pressed", this, "_show_members_dialog", varray(false)); + add_node->connect_compat("pressed", this, "_show_members_dialog", varray(false)); preview_shader = memnew(ToolButton); preview_shader->set_toggle_mode(true); preview_shader->set_tooltip(TTR("Show resulted shader code.")); graph->get_zoom_hbox()->add_child(preview_shader); - preview_shader->connect("pressed", this, "_show_preview_text"); + preview_shader->connect_compat("pressed", this, "_show_preview_text"); /////////////////////////////////////// // PREVIEW PANEL @@ -2400,15 +2376,15 @@ VisualShaderEditor::VisualShaderEditor() { node_filter = memnew(LineEdit); filter_hb->add_child(node_filter); - node_filter->connect("text_changed", this, "_member_filter_changed"); - node_filter->connect("gui_input", this, "_sbox_input"); + node_filter->connect_compat("text_changed", this, "_member_filter_changed"); + node_filter->connect_compat("gui_input", this, "_sbox_input"); node_filter->set_h_size_flags(SIZE_EXPAND_FILL); node_filter->set_placeholder(TTR("Search")); tools = memnew(MenuButton); filter_hb->add_child(tools); tools->set_tooltip(TTR("Options")); - tools->get_popup()->connect("id_pressed", this, "_tools_menu_option"); + tools->get_popup()->connect_compat("id_pressed", this, "_tools_menu_option"); tools->get_popup()->add_item(TTR("Expand All"), EXPAND_ALL); tools->get_popup()->add_item(TTR("Collapse All"), COLLAPSE_ALL); @@ -2421,14 +2397,26 @@ VisualShaderEditor::VisualShaderEditor() { members->set_allow_reselect(true); members->set_hide_folding(false); members->set_custom_minimum_size(Size2(180 * EDSCALE, 200 * EDSCALE)); - members->connect("item_activated", this, "_member_create"); - members->connect("item_selected", this, "_member_selected"); - members->connect("nothing_selected", this, "_member_unselected"); + members->connect_compat("item_activated", this, "_member_create"); + members->connect_compat("item_selected", this, "_member_selected"); + members->connect_compat("nothing_selected", this, "_member_unselected"); + + HBoxContainer *desc_hbox = memnew(HBoxContainer); + members_vb->add_child(desc_hbox); Label *desc_label = memnew(Label); - members_vb->add_child(desc_label); + desc_hbox->add_child(desc_label); desc_label->set_text(TTR("Description:")); + desc_hbox->add_spacer(); + + highend_label = memnew(Label); + desc_hbox->add_child(highend_label); + highend_label->set_visible(false); + highend_label->set_text("Vulkan"); + highend_label->set_mouse_filter(Control::MOUSE_FILTER_STOP); + highend_label->set_tooltip(TTR("High-end node")); + node_desc = memnew(RichTextLabel); members_vb->add_child(node_desc); node_desc->set_h_size_flags(SIZE_EXPAND_FILL); @@ -2439,11 +2427,11 @@ VisualShaderEditor::VisualShaderEditor() { members_dialog->set_title(TTR("Create Shader Node")); members_dialog->add_child(members_vb); members_dialog->get_ok()->set_text(TTR("Create")); - members_dialog->get_ok()->connect("pressed", this, "_member_create"); + members_dialog->get_ok()->connect_compat("pressed", this, "_member_create"); members_dialog->get_ok()->set_disabled(true); members_dialog->set_resizable(true); members_dialog->set_as_minsize(); - members_dialog->connect("hide", this, "_member_cancel"); + members_dialog->connect_compat("hide", this, "_member_cancel"); add_child(members_dialog); alert = memnew(AcceptDialog); @@ -2691,11 +2679,10 @@ VisualShaderEditor::VisualShaderEditor() { // TEXTURES - add_options.push_back(AddOption("CubeMap", "Textures", "Functions", "VisualShaderNodeCubeMap", TTR("Perform the cubic texture lookup."), -1, -1)); + add_options.push_back(AddOption("CubeMap", "Textures", "Functions", "VisualShaderNodeCubemap", TTR("Perform the cubic texture lookup."), -1, -1)); texture_node_option_idx = add_options.size(); - add_options.push_back(AddOption("Texture", "Textures", "Functions", "VisualShaderNodeTexture", TTR("Perform the texture lookup."), -1, -1)); - - add_options.push_back(AddOption("CubeMapUniform", "Textures", "Variables", "VisualShaderNodeCubeMapUniform", TTR("Cubic texture uniform lookup."), -1, -1)); + add_options.push_back(AddOption("Texture2D", "Textures", "Functions", "VisualShaderNodeTexture", TTR("Perform the texture lookup."), -1, -1)); + add_options.push_back(AddOption("CubeMapUniform", "Textures", "Variables", "VisualShaderNodeCubemapUniform", TTR("Cubic texture uniform lookup."), -1, -1)); add_options.push_back(AddOption("TextureUniform", "Textures", "Variables", "VisualShaderNodeTextureUniform", TTR("2D texture uniform lookup."), -1, -1)); add_options.push_back(AddOption("TextureUniformTriplanar", "Textures", "Variables", "VisualShaderNodeTextureUniformTriplanar", TTR("2D texture uniform lookup with triplanar."), -1, -1, VisualShader::TYPE_FRAGMENT | VisualShader::TYPE_LIGHT, Shader::MODE_SPATIAL)); @@ -2823,7 +2810,7 @@ VisualShaderEditor::VisualShaderEditor() { property_editor = memnew(CustomPropertyEditor); add_child(property_editor); - property_editor->connect("variant_changed", this, "_port_edited"); + property_editor->connect_compat("variant_changed", this, "_port_edited"); } void VisualShaderEditorPlugin::edit(Object *p_object) { @@ -2884,7 +2871,7 @@ protected: public: void _notification(int p_what) { if (p_what == NOTIFICATION_READY) { - connect("item_selected", this, "_item_selected"); + connect_compat("item_selected", this, "_item_selected"); } } @@ -2894,7 +2881,7 @@ public: void setup(const Ref<VisualShaderNodeInput> &p_input) { input = p_input; - Ref<Texture> type_icon[5] = { + Ref<Texture2D> type_icon[5] = { EditorNode::get_singleton()->get_gui_base()->get_icon("float", "EditorIcons"), EditorNode::get_singleton()->get_gui_base()->get_icon("Vector3", "EditorIcons"), EditorNode::get_singleton()->get_gui_base()->get_icon("bool", "EditorIcons"), @@ -3013,16 +3000,16 @@ public: bool res_prop = Object::cast_to<EditorPropertyResource>(p_properties[i]); if (res_prop) { - p_properties[i]->connect("resource_selected", this, "_resource_selected"); + p_properties[i]->connect_compat("resource_selected", this, "_resource_selected"); } - properties[i]->connect("property_changed", this, "_property_changed"); + properties[i]->connect_compat("property_changed", this, "_property_changed"); properties[i]->set_object_and_property(node.ptr(), p_names[i]); properties[i]->update_property(); properties[i]->set_name_split_ratio(0); } - node->connect("changed", this, "_node_changed"); - node->connect("editor_refresh_request", this, "_refresh_request", varray(), CONNECT_DEFERRED); + node->connect_compat("changed", this, "_node_changed"); + node->connect_compat("editor_refresh_request", this, "_refresh_request", varray(), CONNECT_DEFERRED); } static void _bind_methods() { @@ -3188,7 +3175,7 @@ EditorPropertyShaderMode::EditorPropertyShaderMode() { options->set_clip_text(true); add_child(options); add_focusable(options); - options->connect("item_selected", this, "_option_selected"); + options->connect_compat("item_selected", this, "_option_selected"); } bool EditorInspectorShaderModePlugin::can_handle(Object *p_object) { @@ -3261,7 +3248,7 @@ void VisualShaderNodePortPreview::_shader_changed() { void VisualShaderNodePortPreview::setup(const Ref<VisualShader> &p_shader, VisualShader::Type p_type, int p_node, int p_port) { shader = p_shader; - shader->connect("changed", this, "_shader_changed"); + shader->connect_compat("changed", this, "_shader_changed"); type = p_type; port = p_port; node = p_node; diff --git a/editor/plugins/visual_shader_editor_plugin.h b/editor/plugins/visual_shader_editor_plugin.h index 8c5dd8e82f..8919690ada 100644 --- a/editor/plugins/visual_shader_editor_plugin.h +++ b/editor/plugins/visual_shader_editor_plugin.h @@ -94,6 +94,7 @@ class VisualShaderEditor : public VBoxContainer { AcceptDialog *alert; LineEdit *node_filter; RichTextLabel *node_desc; + Label *highend_label; void _tools_menu_option(int p_idx); void _show_members_dialog(bool at_mouse_pos); @@ -103,7 +104,6 @@ class VisualShaderEditor : public VBoxContainer { struct AddOption { String name; String category; - String sub_category; String type; String description; int sub_func; @@ -115,12 +115,12 @@ class VisualShaderEditor : public VBoxContainer { float value; bool highend; bool is_custom; + int temp_idx; AddOption(const String &p_name = String(), const String &p_category = String(), const String &p_sub_category = String(), const String &p_type = String(), const String &p_description = String(), int p_sub_func = -1, int p_return_type = -1, int p_mode = -1, int p_func = -1, float p_value = -1, bool p_highend = false) { name = p_name; type = p_type; - category = p_category; - sub_category = p_sub_category; + category = p_category + "/" + p_sub_category; description = p_description; sub_func = p_sub_func; return_type = p_return_type; @@ -134,8 +134,7 @@ class VisualShaderEditor : public VBoxContainer { AddOption(const String &p_name, const String &p_category, const String &p_sub_category, const String &p_type, const String &p_description, const String &p_sub_func, int p_return_type = -1, int p_mode = -1, int p_func = -1, float p_value = -1, bool p_highend = false) { name = p_name; type = p_type; - category = p_category; - sub_category = p_sub_category; + category = p_category + "/" + p_sub_category; description = p_description; sub_func = 0; sub_func_str = p_sub_func; @@ -147,6 +146,12 @@ class VisualShaderEditor : public VBoxContainer { is_custom = false; } }; + struct _OptionComparator { + + _FORCE_INLINE_ bool operator()(const AddOption &a, const AddOption &b) const { + return a.category.count("/") > b.category.count("/") || (a.category + "/" + a.name).naturalnocasecmp_to(b.category + "/" + b.name) < 0; + } + }; Vector<AddOption> add_options; int texture_node_option_idx; @@ -264,7 +269,7 @@ public: static VisualShaderEditor *get_singleton() { return singleton; } void clear_custom_types(); - void add_custom_type(const String &p_name, const Ref<Script> &p_script, const String &p_description, int p_return_icon_type, const String &p_category, const String &p_subcategory); + void add_custom_type(const String &p_name, const Ref<Script> &p_script, const String &p_description, int p_return_icon_type, const String &p_category, bool p_highend); virtual Size2 get_minimum_size() const; void edit(VisualShader *p_visual_shader); diff --git a/editor/progress_dialog.cpp b/editor/progress_dialog.cpp index 0665b1d013..59db531581 100644 --- a/editor/progress_dialog.cpp +++ b/editor/progress_dialog.cpp @@ -264,5 +264,5 @@ ProgressDialog::ProgressDialog() { cancel_hb->add_child(cancel); cancel->set_text(TTR("Cancel")); cancel_hb->add_spacer(); - cancel->connect("pressed", this, "_cancel_pressed"); + cancel->connect_compat("pressed", this, "_cancel_pressed"); } diff --git a/editor/project_export.cpp b/editor/project_export.cpp index 3c8fef6233..753125eb03 100644 --- a/editor/project_export.cpp +++ b/editor/project_export.cpp @@ -53,7 +53,7 @@ void ProjectExportDialog::_notification(int p_what) { case NOTIFICATION_READY: { duplicate_preset->set_icon(get_icon("Duplicate", "EditorIcons")); delete_preset->set_icon(get_icon("Remove", "EditorIcons")); - connect("confirmed", this, "_export_pck_zip"); + connect_compat("confirmed", this, "_export_pck_zip"); custom_feature_display->get_parent_control()->add_style_override("panel", get_stylebox("bg", "Tree")); } break; case NOTIFICATION_POPUP_HIDE: { @@ -913,10 +913,10 @@ void ProjectExportDialog::_validate_export_path(const String &p_path) { if (invalid_path) { export_project->get_ok()->set_disabled(true); - export_project->get_line_edit()->disconnect("text_entered", export_project, "_file_entered"); + export_project->get_line_edit()->disconnect_compat("text_entered", export_project, "_file_entered"); } else { export_project->get_ok()->set_disabled(false); - export_project->get_line_edit()->connect("text_entered", export_project, "_file_entered"); + export_project->get_line_edit()->connect_compat("text_entered", export_project, "_file_entered"); } } @@ -946,9 +946,9 @@ void ProjectExportDialog::_export_project() { } // Ensure that signal is connected if previous attempt left it disconnected with _validate_export_path - if (!export_project->get_line_edit()->is_connected("text_entered", export_project, "_file_entered")) { + if (!export_project->get_line_edit()->is_connected_compat("text_entered", export_project, "_file_entered")) { export_project->get_ok()->set_disabled(false); - export_project->get_line_edit()->connect("text_entered", export_project, "_file_entered"); + export_project->get_line_edit()->connect_compat("text_entered", export_project, "_file_entered"); } export_project->set_mode(EditorFileDialog::MODE_SAVE_FILE); @@ -1085,7 +1085,7 @@ ProjectExportDialog::ProjectExportDialog() { add_preset = memnew(MenuButton); add_preset->set_text(TTR("Add...")); - add_preset->get_popup()->connect("index_pressed", this, "_add_preset"); + add_preset->get_popup()->connect_compat("index_pressed", this, "_add_preset"); preset_hb->add_child(add_preset); MarginContainer *mc = memnew(MarginContainer); preset_vb->add_child(mc); @@ -1093,13 +1093,13 @@ ProjectExportDialog::ProjectExportDialog() { presets = memnew(ItemList); presets->set_drag_forwarding(this); mc->add_child(presets); - presets->connect("item_selected", this, "_edit_preset"); + presets->connect_compat("item_selected", this, "_edit_preset"); duplicate_preset = memnew(ToolButton); preset_hb->add_child(duplicate_preset); - duplicate_preset->connect("pressed", this, "_duplicate_preset"); + duplicate_preset->connect_compat("pressed", this, "_duplicate_preset"); delete_preset = memnew(ToolButton); preset_hb->add_child(delete_preset); - delete_preset->connect("pressed", this, "_delete_preset"); + delete_preset->connect_compat("pressed", this, "_delete_preset"); // Preset settings. @@ -1109,11 +1109,11 @@ ProjectExportDialog::ProjectExportDialog() { name = memnew(LineEdit); settings_vb->add_margin_child(TTR("Name:"), name); - name->connect("text_changed", this, "_name_changed"); + name->connect_compat("text_changed", this, "_name_changed"); runnable = memnew(CheckButton); runnable->set_text(TTR("Runnable")); runnable->set_tooltip(TTR("If checked, the preset will be available for use in one-click deploy.\nOnly one preset per platform may be marked as runnable.")); - runnable->connect("pressed", this, "_runnable_pressed"); + runnable->connect_compat("pressed", this, "_runnable_pressed"); settings_vb->add_child(runnable); export_path = memnew(EditorPropertyPath); @@ -1121,7 +1121,7 @@ ProjectExportDialog::ProjectExportDialog() { export_path->set_label(TTR("Export Path")); export_path->set_object_and_property(this, "export_path"); export_path->set_save_mode(); - export_path->connect("property_changed", this, "_export_path_changed"); + export_path->connect_compat("property_changed", this, "_export_path_changed"); // Subsections. @@ -1137,7 +1137,7 @@ ProjectExportDialog::ProjectExportDialog() { sections->add_child(parameters); parameters->set_name(TTR("Options")); parameters->set_v_size_flags(SIZE_EXPAND_FILL); - parameters->connect("property_edited", this, "_update_parameters"); + parameters->connect_compat("property_edited", this, "_update_parameters"); // Resources export parameters. @@ -1150,7 +1150,7 @@ ProjectExportDialog::ProjectExportDialog() { export_filter->add_item(TTR("Export selected scenes (and dependencies)")); export_filter->add_item(TTR("Export selected resources (and dependencies)")); resources_vb->add_margin_child(TTR("Export Mode:"), export_filter); - export_filter->connect("item_selected", this, "_export_type_changed"); + export_filter->connect_compat("item_selected", this, "_export_type_changed"); include_label = memnew(Label); include_label->set_text(TTR("Resources to export:")); @@ -1161,19 +1161,19 @@ ProjectExportDialog::ProjectExportDialog() { include_files = memnew(Tree); include_margin->add_child(include_files); - include_files->connect("item_edited", this, "_tree_changed"); + include_files->connect_compat("item_edited", this, "_tree_changed"); include_filters = memnew(LineEdit); resources_vb->add_margin_child( TTR("Filters to export non-resource files/folders\n(comma-separated, e.g: *.json, *.txt, docs/*)"), include_filters); - include_filters->connect("text_changed", this, "_filter_changed"); + include_filters->connect_compat("text_changed", this, "_filter_changed"); exclude_filters = memnew(LineEdit); resources_vb->add_margin_child( TTR("Filters to exclude files/folders from project\n(comma-separated, e.g: *.json, *.txt, docs/*)"), exclude_filters); - exclude_filters->connect("text_changed", this, "_filter_changed"); + exclude_filters->connect_compat("text_changed", this, "_filter_changed"); // Patch packages. @@ -1190,8 +1190,8 @@ ProjectExportDialog::ProjectExportDialog() { patch_vb->add_child(patches); patches->set_v_size_flags(SIZE_EXPAND_FILL); patches->set_hide_root(true); - patches->connect("button_pressed", this, "_patch_button_pressed"); - patches->connect("item_edited", this, "_patch_edited"); + patches->connect_compat("button_pressed", this, "_patch_button_pressed"); + patches->connect_compat("item_edited", this, "_patch_edited"); patches->set_drag_forwarding(this); patches->set_edit_checkbox_cell_only_when_checkbox_is_pressed(true); @@ -1206,12 +1206,12 @@ ProjectExportDialog::ProjectExportDialog() { patch_dialog = memnew(EditorFileDialog); patch_dialog->add_filter("*.pck ; " + TTR("Pack File")); patch_dialog->set_mode(EditorFileDialog::MODE_OPEN_FILE); - patch_dialog->connect("file_selected", this, "_patch_selected"); + patch_dialog->connect_compat("file_selected", this, "_patch_selected"); add_child(patch_dialog); patch_erase = memnew(ConfirmationDialog); patch_erase->get_ok()->set_text(TTR("Delete")); - patch_erase->connect("confirmed", this, "_patch_deleted"); + patch_erase->connect_compat("confirmed", this, "_patch_deleted"); add_child(patch_erase); // Feature tags. @@ -1219,7 +1219,7 @@ ProjectExportDialog::ProjectExportDialog() { VBoxContainer *feature_vb = memnew(VBoxContainer); feature_vb->set_name(TTR("Features")); custom_features = memnew(LineEdit); - custom_features->connect("text_changed", this, "_custom_features_changed"); + custom_features->connect_compat("text_changed", this, "_custom_features_changed"); feature_vb->add_margin_child(TTR("Custom (comma-separated):"), custom_features); Panel *features_panel = memnew(Panel); custom_feature_display = memnew(RichTextLabel); @@ -1240,9 +1240,9 @@ ProjectExportDialog::ProjectExportDialog() { script_mode->add_item(TTR("Text"), (int)EditorExportPreset::MODE_SCRIPT_TEXT); script_mode->add_item(TTR("Compiled"), (int)EditorExportPreset::MODE_SCRIPT_COMPILED); script_mode->add_item(TTR("Encrypted (Provide Key Below)"), (int)EditorExportPreset::MODE_SCRIPT_ENCRYPTED); - script_mode->connect("item_selected", this, "_script_export_mode_changed"); + script_mode->connect_compat("item_selected", this, "_script_export_mode_changed"); script_key = memnew(LineEdit); - script_key->connect("text_changed", this, "_script_encryption_key_changed"); + script_key->connect_compat("text_changed", this, "_script_encryption_key_changed"); script_key_error = memnew(Label); script_key_error->set_text("- " + TTR("Invalid Encryption Key (must be 64 characters long)")); script_key_error->add_color_override("font_color", EditorNode::get_singleton()->get_gui_base()->get_color("error_color", "Editor")); @@ -1250,7 +1250,7 @@ ProjectExportDialog::ProjectExportDialog() { script_vb->add_child(script_key_error); sections->add_child(script_vb); - sections->connect("tab_changed", this, "_tab_changed"); + sections->connect_compat("tab_changed", this, "_tab_changed"); // Disable by default. name->set_editable(false); @@ -1267,7 +1267,7 @@ ProjectExportDialog::ProjectExportDialog() { delete_confirm = memnew(ConfirmationDialog); add_child(delete_confirm); delete_confirm->get_ok()->set_text(TTR("Delete")); - delete_confirm->connect("confirmed", this, "_delete_preset_confirm"); + delete_confirm->connect_compat("confirmed", this, "_delete_preset_confirm"); // Export buttons, dialogs and errors. @@ -1276,7 +1276,7 @@ ProjectExportDialog::ProjectExportDialog() { get_cancel()->set_text(TTR("Close")); get_ok()->set_text(TTR("Export PCK/Zip")); export_button = add_button(TTR("Export Project"), !OS::get_singleton()->get_swap_ok_cancel(), "export"); - export_button->connect("pressed", this, "_export_project"); + export_button->connect_compat("pressed", this, "_export_project"); // Disable initially before we select a valid preset export_button->set_disabled(true); get_ok()->set_disabled(true); @@ -1288,10 +1288,10 @@ ProjectExportDialog::ProjectExportDialog() { export_all_dialog->get_ok()->hide(); export_all_dialog->add_button(TTR("Debug"), true, "debug"); export_all_dialog->add_button(TTR("Release"), true, "release"); - export_all_dialog->connect("custom_action", this, "_export_all_dialog_action"); + export_all_dialog->connect_compat("custom_action", this, "_export_all_dialog_action"); export_all_button = add_button(TTR("Export All"), !OS::get_singleton()->get_swap_ok_cancel(), "export"); - export_all_button->connect("pressed", this, "_export_all_dialog"); + export_all_button->connect_compat("pressed", this, "_export_all_dialog"); export_all_button->set_disabled(true); export_pck_zip = memnew(EditorFileDialog); @@ -1300,7 +1300,7 @@ ProjectExportDialog::ProjectExportDialog() { export_pck_zip->set_access(EditorFileDialog::ACCESS_FILESYSTEM); export_pck_zip->set_mode(EditorFileDialog::MODE_SAVE_FILE); add_child(export_pck_zip); - export_pck_zip->connect("file_selected", this, "_export_pck_zip_selected"); + export_pck_zip->connect_compat("file_selected", this, "_export_pck_zip_selected"); export_error = memnew(Label); main_vb->add_child(export_error); @@ -1326,13 +1326,13 @@ ProjectExportDialog::ProjectExportDialog() { download_templates->set_text(TTR("Manage Export Templates")); download_templates->set_v_size_flags(SIZE_SHRINK_CENTER); export_templates_error->add_child(download_templates); - download_templates->connect("pressed", this, "_open_export_template_manager"); + download_templates->connect_compat("pressed", this, "_open_export_template_manager"); export_project = memnew(EditorFileDialog); export_project->set_access(EditorFileDialog::ACCESS_FILESYSTEM); add_child(export_project); - export_project->connect("file_selected", this, "_export_project_to_path"); - export_project->get_line_edit()->connect("text_changed", this, "_validate_export_path"); + export_project->connect_compat("file_selected", this, "_export_project_to_path"); + export_project->get_line_edit()->connect_compat("text_changed", this, "_validate_export_path"); export_debug = memnew(CheckBox); export_debug->set_text(TTR("Export With Debug")); diff --git a/editor/project_manager.cpp b/editor/project_manager.cpp index 9cc2a79399..23a7628eeb 100644 --- a/editor/project_manager.cpp +++ b/editor/project_manager.cpp @@ -107,9 +107,9 @@ private: void set_message(const String &p_msg, MessageType p_type = MESSAGE_SUCCESS, InputType input_type = PROJECT_PATH) { msg->set_text(p_msg); - Ref<Texture> current_path_icon = status_rect->get_texture(); - Ref<Texture> current_install_icon = install_status_rect->get_texture(); - Ref<Texture> new_icon; + Ref<Texture2D> current_path_icon = status_rect->get_texture(); + Ref<Texture2D> current_install_icon = install_status_rect->get_texture(); + Ref<Texture2D> new_icon; switch (p_type) { @@ -484,8 +484,8 @@ private: if (mode == MODE_NEW) { ProjectSettings::CustomMap initial_settings; - if (rasterizer_button_group->get_pressed_button()->get_meta("driver_name") == "GLES3") { - initial_settings["rendering/quality/driver/driver_name"] = "GLES3"; + if (rasterizer_button_group->get_pressed_button()->get_meta("driver_name") == "Vulkan") { + initial_settings["rendering/quality/driver/driver_name"] = "Vulkan"; } else { initial_settings["rendering/quality/driver/driver_name"] = "GLES2"; initial_settings["rendering/vram_compression/import_etc2"] = false; @@ -811,7 +811,7 @@ public: create_dir = memnew(Button); pnhb->add_child(create_dir); create_dir->set_text(TTR("Create Folder")); - create_dir->connect("pressed", this, "_create_folder"); + create_dir->connect_compat("pressed", this, "_create_folder"); path_container = memnew(VBoxContainer); vb->add_child(path_container); @@ -848,7 +848,7 @@ public: browse = memnew(Button); browse->set_text(TTR("Browse")); - browse->connect("pressed", this, "_browse_path"); + browse->connect_compat("pressed", this, "_browse_path"); pphb->add_child(browse); // install status icon @@ -858,7 +858,7 @@ public: install_browse = memnew(Button); install_browse->set_text(TTR("Browse")); - install_browse->connect("pressed", this, "_browse_install_path"); + install_browse->connect_compat("pressed", this, "_browse_install_path"); iphb->add_child(install_browse); msg = memnew(Label); @@ -880,28 +880,37 @@ public: rshb->add_child(rvb); Button *rs_button = memnew(CheckBox); rs_button->set_button_group(rasterizer_button_group); - rs_button->set_text(TTR("OpenGL ES 3.0")); - rs_button->set_meta("driver_name", "GLES3"); + rs_button->set_text(TTR("Vulkan")); + rs_button->set_meta("driver_name", "Vulkan"); rs_button->set_pressed(true); rvb->add_child(rs_button); l = memnew(Label); - l->set_text(TTR("- Higher visual quality\n- All features available\n- Incompatible with older hardware\n- Not recommended for web games")); + l->set_text(TTR("- Higher visual quality\n- More accurate API, which produces very fast code\n- Some features not implemented yet - work in progress\n- Incompatible with older hardware\n- Not recommended for web and mobile games")); l->set_modulate(Color(1, 1, 1, 0.7)); rvb->add_child(l); rshb->add_child(memnew(VSeparator)); + const String gles2_unsupported_tooltip = + TTR("The GLES2 renderer is currently unavailable, as it needs to be reworked for Godot 4.0.\nUse Godot 3.2 if you need GLES2 support."); + rvb = memnew(VBoxContainer); rvb->set_h_size_flags(SIZE_EXPAND_FILL); rshb->add_child(rvb); rs_button = memnew(CheckBox); rs_button->set_button_group(rasterizer_button_group); - rs_button->set_text(TTR("OpenGL ES 2.0")); + rs_button->set_text(TTR("OpenGL ES 2.0 (currently unavailable)")); rs_button->set_meta("driver_name", "GLES2"); + rs_button->set_disabled(true); + rs_button->set_tooltip(gles2_unsupported_tooltip); rvb->add_child(rs_button); l = memnew(Label); - l->set_text(TTR("- Lower visual quality\n- Some features not available\n- Works on most hardware\n- Recommended for web games")); + l->set_text(TTR("- Lower visual quality\n- Some features not available\n- Works on most hardware\n- Recommended for web and mobile games")); l->set_modulate(Color(1, 1, 1, 0.7)); + // Also set the tooltip on the label so it appears when hovering either the checkbox or label. + l->set_tooltip(gles2_unsupported_tooltip); + // Required for the tooltip to show. + l->set_mouse_filter(MOUSE_FILTER_STOP); rvb->add_child(l); l = memnew(Label); @@ -919,13 +928,13 @@ public: fdialog_install->set_access(FileDialog::ACCESS_FILESYSTEM); add_child(fdialog); add_child(fdialog_install); - project_name->connect("text_changed", this, "_text_changed"); - project_path->connect("text_changed", this, "_path_text_changed"); - install_path->connect("text_changed", this, "_path_text_changed"); - fdialog->connect("dir_selected", this, "_path_selected"); - fdialog->connect("file_selected", this, "_file_selected"); - fdialog_install->connect("dir_selected", this, "_install_path_selected"); - fdialog_install->connect("file_selected", this, "_install_path_selected"); + project_name->connect_compat("text_changed", this, "_text_changed"); + project_path->connect_compat("text_changed", this, "_path_text_changed"); + install_path->connect_compat("text_changed", this, "_path_text_changed"); + fdialog->connect_compat("dir_selected", this, "_path_selected"); + fdialog->connect_compat("file_selected", this, "_file_selected"); + fdialog_install->connect_compat("dir_selected", this, "_install_path_selected"); + fdialog_install->connect_compat("file_selected", this, "_install_path_selected"); set_hide_on_ok(false); mode = MODE_NEW; @@ -992,7 +1001,7 @@ public: String path; String icon; String main_scene; - uint64_t last_modified; + uint64_t last_edited; bool favorite; bool grayed; bool missing; @@ -1008,7 +1017,7 @@ public: const String &p_path, const String &p_icon, const String &p_main_scene, - uint64_t p_last_modified, + uint64_t p_last_edited, bool p_favorite, bool p_grayed, bool p_missing, @@ -1020,7 +1029,7 @@ public: path = p_path; icon = p_icon; main_scene = p_main_scene; - last_modified = p_last_modified; + last_edited = p_last_edited; favorite = p_favorite; grayed = p_grayed; missing = p_missing; @@ -1095,8 +1104,8 @@ struct ProjectListComparator { switch (order_option) { case ProjectListFilter::FILTER_PATH: return a.project_key < b.project_key; - case ProjectListFilter::FILTER_MODIFIED: - return a.last_modified > b.last_modified; + case ProjectListFilter::FILTER_EDIT_DATE: + return a.last_edited > b.last_edited; default: return a.project_name < b.project_name; } @@ -1104,7 +1113,7 @@ struct ProjectListComparator { }; ProjectList::ProjectList() { - _order_option = ProjectListFilter::FILTER_MODIFIED; + _order_option = ProjectListFilter::FILTER_EDIT_DATE; _scroll_children = memnew(VBoxContainer); _scroll_children->set_h_size_flags(SIZE_EXPAND_FILL); @@ -1141,8 +1150,8 @@ void ProjectList::_notification(int p_what) { void ProjectList::load_project_icon(int p_index) { Item &item = _projects.write[p_index]; - Ref<Texture> default_icon = get_icon("DefaultProjectIcon", "EditorIcons"); - Ref<Texture> icon; + Ref<Texture2D> default_icon = get_icon("DefaultProjectIcon", "EditorIcons"); + Ref<Texture2D> icon; if (item.icon != "") { Ref<Image> img; img.instance(); @@ -1191,15 +1200,18 @@ void ProjectList::load_project_data(const String &p_property_key, Item &p_item, String icon = cf->get_value("application", "config/icon", ""); String main_scene = cf->get_value("application", "run/main_scene", ""); - uint64_t last_modified = 0; + uint64_t last_edited = 0; if (FileAccess::exists(conf)) { - last_modified = FileAccess::get_modified_time(conf); + // The modification date marks the date the project was last edited. + // This is because the `project.godot` file will always be modified + // when editing a project (but not when running it). + last_edited = FileAccess::get_modified_time(conf); String fscache = path.plus_file(".fscache"); if (FileAccess::exists(fscache)) { uint64_t cache_modified = FileAccess::get_modified_time(fscache); - if (cache_modified > last_modified) - last_modified = cache_modified; + if (cache_modified > last_edited) + last_edited = cache_modified; } } else { grayed = true; @@ -1209,7 +1221,7 @@ void ProjectList::load_project_data(const String &p_property_key, Item &p_item, String project_key = p_property_key.get_slice("/", 1); - p_item = Item(project_key, project_name, description, path, icon, main_scene, last_modified, p_favorite, grayed, missing, config_version); + p_item = Item(project_key, project_name, description, path, icon, main_scene, last_edited, p_favorite, grayed, missing, config_version); } void ProjectList::load_projects() { @@ -1304,12 +1316,12 @@ void ProjectList::create_project_item_control(int p_index) { Item &item = _projects.write[p_index]; ERR_FAIL_COND(item.control != NULL); // Already created - Ref<Texture> favorite_icon = get_icon("Favorites", "EditorIcons"); + Ref<Texture2D> favorite_icon = get_icon("Favorites", "EditorIcons"); Color font_color = get_color("font_color", "Tree"); ProjectListItemControl *hb = memnew(ProjectListItemControl); - hb->connect("draw", this, "_panel_draw", varray(hb)); - hb->connect("gui_input", this, "_panel_input", varray(hb)); + hb->connect_compat("draw", this, "_panel_draw", varray(hb)); + hb->connect_compat("gui_input", this, "_panel_input", varray(hb)); hb->add_constant_override("separation", 10 * EDSCALE); hb->set_tooltip(item.description); @@ -1320,7 +1332,7 @@ void ProjectList::create_project_item_control(int p_index) { favorite->set_normal_texture(favorite_icon); // This makes the project's "hover" style display correctly when hovering the favorite icon favorite->set_mouse_filter(MOUSE_FILTER_PASS); - favorite->connect("pressed", this, "_favorite_pressed", varray(hb)); + favorite->connect_compat("pressed", this, "_favorite_pressed", varray(hb)); favorite_box->add_child(favorite); favorite_box->set_alignment(BoxContainer::ALIGN_CENTER); hb->add_child(favorite_box); @@ -1368,7 +1380,7 @@ void ProjectList::create_project_item_control(int p_index) { path_hb->add_child(show); if (!item.missing) { - show->connect("pressed", this, "_show_project", varray(item.path)); + show->connect_compat("pressed", this, "_show_project", varray(item.path)); show->set_tooltip(TTR("Show in File Manager")); } else { show->set_tooltip(TTR("Error: Project is missing on the filesystem.")); @@ -2315,7 +2327,7 @@ void ProjectManager::_install_project(const String &p_zip_path, const String &p_ npdialog->show_dialog(); } -void ProjectManager::_files_dropped(PoolStringArray p_files, int p_screen) { +void ProjectManager::_files_dropped(PackedStringArray p_files, int p_screen) { Set<String> folders_set; DirAccess *da = DirAccess::create(DirAccess::ACCESS_FILESYSTEM); for (int i = 0; i < p_files.size(); i++) { @@ -2324,9 +2336,9 @@ void ProjectManager::_files_dropped(PoolStringArray p_files, int p_screen) { } memdelete(da); if (folders_set.size() > 0) { - PoolStringArray folders; + PackedStringArray folders; for (Set<String>::Element *E = folders_set.front(); E; E = E->next()) { - folders.append(E->get()); + folders.push_back(E->get()); } bool confirm = true; @@ -2346,8 +2358,8 @@ void ProjectManager::_files_dropped(PoolStringArray p_files, int p_screen) { memdelete(dir); } if (confirm) { - multi_scan_ask->get_ok()->disconnect("pressed", this, "_scan_multiple_folders"); - multi_scan_ask->get_ok()->connect("pressed", this, "_scan_multiple_folders", varray(folders)); + multi_scan_ask->get_ok()->disconnect_compat("pressed", this, "_scan_multiple_folders"); + multi_scan_ask->get_ok()->connect_compat("pressed", this, "_scan_multiple_folders", varray(folders)); multi_scan_ask->set_text( vformat(TTR("Are you sure to scan %s folders for existing Godot projects?\nThis could take a while."), folders.size())); multi_scan_ask->popup_centered_minsize(); @@ -2357,7 +2369,7 @@ void ProjectManager::_files_dropped(PoolStringArray p_files, int p_screen) { } } -void ProjectManager::_scan_multiple_folders(PoolStringArray p_files) { +void ProjectManager::_scan_multiple_folders(PackedStringArray p_files) { for (int i = 0; i < p_files.size(); i++) { _scan_begin(p_files.get(i)); } @@ -2506,13 +2518,13 @@ ProjectManager::ProjectManager() { Vector<String> sort_filter_titles; sort_filter_titles.push_back(TTR("Name")); sort_filter_titles.push_back(TTR("Path")); - sort_filter_titles.push_back(TTR("Last Modified")); + sort_filter_titles.push_back(TTR("Last Edited")); project_order_filter = memnew(ProjectListFilter); project_order_filter->add_filter_option(); project_order_filter->_setup_filters(sort_filter_titles); project_order_filter->set_filter_size(150); sort_filters->add_child(project_order_filter); - project_order_filter->connect("filter_changed", this, "_on_order_option_changed"); + project_order_filter->connect_compat("filter_changed", this, "_on_order_option_changed"); project_order_filter->set_custom_minimum_size(Size2(180, 10) * EDSCALE); int projects_sorting_order = (int)EditorSettings::get_singleton()->get("project_manager/sorting_order"); @@ -2522,7 +2534,7 @@ ProjectManager::ProjectManager() { project_filter = memnew(ProjectListFilter); project_filter->add_search_box(); - project_filter->connect("filter_changed", this, "_on_filter_option_changed"); + project_filter->connect_compat("filter_changed", this, "_on_filter_option_changed"); project_filter->set_custom_minimum_size(Size2(280, 10) * EDSCALE); sort_filters->add_child(project_filter); @@ -2534,8 +2546,8 @@ ProjectManager::ProjectManager() { pc->set_v_size_flags(SIZE_EXPAND_FILL); _project_list = memnew(ProjectList); - _project_list->connect(ProjectList::SIGNAL_SELECTION_CHANGED, this, "_update_project_buttons"); - _project_list->connect(ProjectList::SIGNAL_PROJECT_ASK_OPEN, this, "_open_selected_projects_ask"); + _project_list->connect_compat(ProjectList::SIGNAL_SELECTION_CHANGED, this, "_update_project_buttons"); + _project_list->connect_compat(ProjectList::SIGNAL_PROJECT_ASK_OPEN, this, "_open_selected_projects_ask"); pc->add_child(_project_list); _project_list->set_enable_h_scroll(false); @@ -2545,13 +2557,13 @@ ProjectManager::ProjectManager() { Button *open = memnew(Button); open->set_text(TTR("Edit")); tree_vb->add_child(open); - open->connect("pressed", this, "_open_selected_projects_ask"); + open->connect_compat("pressed", this, "_open_selected_projects_ask"); open_btn = open; Button *run = memnew(Button); run->set_text(TTR("Run")); tree_vb->add_child(run); - run->connect("pressed", this, "_run_project"); + run->connect_compat("pressed", this, "_run_project"); run_btn = run; tree_vb->add_child(memnew(HSeparator)); @@ -2559,7 +2571,7 @@ ProjectManager::ProjectManager() { Button *scan = memnew(Button); scan->set_text(TTR("Scan")); tree_vb->add_child(scan); - scan->connect("pressed", this, "_scan_projects"); + scan->connect_compat("pressed", this, "_scan_projects"); tree_vb->add_child(memnew(HSeparator)); @@ -2569,34 +2581,34 @@ ProjectManager::ProjectManager() { scan_dir->set_title(TTR("Select a Folder to Scan")); // must be after mode or it's overridden scan_dir->set_current_dir(EditorSettings::get_singleton()->get("filesystem/directories/default_project_path")); gui_base->add_child(scan_dir); - scan_dir->connect("dir_selected", this, "_scan_begin"); + scan_dir->connect_compat("dir_selected", this, "_scan_begin"); Button *create = memnew(Button); create->set_text(TTR("New Project")); tree_vb->add_child(create); - create->connect("pressed", this, "_new_project"); + create->connect_compat("pressed", this, "_new_project"); Button *import = memnew(Button); import->set_text(TTR("Import")); tree_vb->add_child(import); - import->connect("pressed", this, "_import_project"); + import->connect_compat("pressed", this, "_import_project"); Button *rename = memnew(Button); rename->set_text(TTR("Rename")); tree_vb->add_child(rename); - rename->connect("pressed", this, "_rename_project"); + rename->connect_compat("pressed", this, "_rename_project"); rename_btn = rename; Button *erase = memnew(Button); erase->set_text(TTR("Remove")); tree_vb->add_child(erase); - erase->connect("pressed", this, "_erase_project"); + erase->connect_compat("pressed", this, "_erase_project"); erase_btn = erase; Button *erase_missing = memnew(Button); erase_missing->set_text(TTR("Remove Missing")); tree_vb->add_child(erase_missing); - erase_missing->connect("pressed", this, "_erase_missing_projects"); + erase_missing->connect_compat("pressed", this, "_erase_missing_projects"); erase_missing_btn = erase_missing; tree_vb->add_spacer(); @@ -2605,7 +2617,7 @@ ProjectManager::ProjectManager() { asset_library = memnew(EditorAssetLibrary(true)); asset_library->set_name(TTR("Templates")); tabs->add_child(asset_library); - asset_library->connect("install_asset", this, "_install_project"); + asset_library->connect_compat("install_asset", this, "_install_project"); } else { WARN_PRINT("Asset Library not available, as it requires SSL to work."); } @@ -2652,7 +2664,7 @@ ProjectManager::ProjectManager() { language_btn->set_icon(get_icon("Environment", "EditorIcons")); settings_hb->add_child(language_btn); - language_btn->connect("item_selected", this, "_language_selected"); + language_btn->connect_compat("item_selected", this, "_language_selected"); center_box->add_child(settings_hb); settings_hb->set_anchors_and_margins_preset(Control::PRESET_TOP_RIGHT); @@ -2661,28 +2673,28 @@ ProjectManager::ProjectManager() { language_restart_ask = memnew(ConfirmationDialog); language_restart_ask->get_ok()->set_text(TTR("Restart Now")); - language_restart_ask->get_ok()->connect("pressed", this, "_restart_confirm"); + language_restart_ask->get_ok()->connect_compat("pressed", this, "_restart_confirm"); language_restart_ask->get_cancel()->set_text(TTR("Continue")); gui_base->add_child(language_restart_ask); erase_missing_ask = memnew(ConfirmationDialog); erase_missing_ask->get_ok()->set_text(TTR("Remove All")); - erase_missing_ask->get_ok()->connect("pressed", this, "_erase_missing_projects_confirm"); + erase_missing_ask->get_ok()->connect_compat("pressed", this, "_erase_missing_projects_confirm"); gui_base->add_child(erase_missing_ask); erase_ask = memnew(ConfirmationDialog); erase_ask->get_ok()->set_text(TTR("Remove")); - erase_ask->get_ok()->connect("pressed", this, "_erase_project_confirm"); + erase_ask->get_ok()->connect_compat("pressed", this, "_erase_project_confirm"); gui_base->add_child(erase_ask); multi_open_ask = memnew(ConfirmationDialog); multi_open_ask->get_ok()->set_text(TTR("Edit")); - multi_open_ask->get_ok()->connect("pressed", this, "_open_selected_projects"); + multi_open_ask->get_ok()->connect_compat("pressed", this, "_open_selected_projects"); gui_base->add_child(multi_open_ask); multi_run_ask = memnew(ConfirmationDialog); multi_run_ask->get_ok()->set_text(TTR("Run")); - multi_run_ask->get_ok()->connect("pressed", this, "_run_project_confirm"); + multi_run_ask->get_ok()->connect_compat("pressed", this, "_run_project_confirm"); gui_base->add_child(multi_run_ask); multi_scan_ask = memnew(ConfirmationDialog); @@ -2690,7 +2702,7 @@ ProjectManager::ProjectManager() { gui_base->add_child(multi_scan_ask); ask_update_settings = memnew(ConfirmationDialog); - ask_update_settings->get_ok()->connect("pressed", this, "_confirm_update_settings"); + ask_update_settings->get_ok()->connect_compat("pressed", this, "_confirm_update_settings"); gui_base->add_child(ask_update_settings); OS::get_singleton()->set_low_processor_usage_mode(true); @@ -2698,8 +2710,8 @@ ProjectManager::ProjectManager() { npdialog = memnew(ProjectDialog); gui_base->add_child(npdialog); - npdialog->connect("projects_updated", this, "_on_projects_updated"); - npdialog->connect("project_created", this, "_on_project_created"); + npdialog->connect_compat("projects_updated", this, "_on_projects_updated"); + npdialog->connect_compat("project_created", this, "_on_project_created"); _load_recent_projects(); @@ -2707,8 +2719,8 @@ ProjectManager::ProjectManager() { _scan_begin(EditorSettings::get_singleton()->get("filesystem/directories/autoscan_project_path")); } - SceneTree::get_singleton()->connect("files_dropped", this, "_files_dropped"); - SceneTree::get_singleton()->connect("global_menu_action", this, "_global_menu_action"); + SceneTree::get_singleton()->connect_compat("files_dropped", this, "_files_dropped"); + SceneTree::get_singleton()->connect_compat("global_menu_action", this, "_global_menu_action"); run_error_diag = memnew(AcceptDialog); gui_base->add_child(run_error_diag); @@ -2720,7 +2732,7 @@ ProjectManager::ProjectManager() { open_templates = memnew(ConfirmationDialog); open_templates->set_text(TTR("You currently don't have any projects.\nWould you like to explore official example projects in the Asset Library?")); open_templates->get_ok()->set_text(TTR("Open Asset Library")); - open_templates->connect("confirmed", this, "_open_asset_library"); + open_templates->connect_compat("confirmed", this, "_open_asset_library"); add_child(open_templates); } @@ -2781,14 +2793,14 @@ void ProjectListFilter::_bind_methods() { void ProjectListFilter::add_filter_option() { filter_option = memnew(OptionButton); filter_option->set_clip_text(true); - filter_option->connect("item_selected", this, "_filter_option_selected"); + filter_option->connect_compat("item_selected", this, "_filter_option_selected"); add_child(filter_option); } void ProjectListFilter::add_search_box() { search_box = memnew(LineEdit); search_box->set_placeholder(TTR("Search")); - search_box->connect("text_changed", this, "_search_text_changed"); + search_box->connect_compat("text_changed", this, "_search_text_changed"); search_box->set_h_size_flags(SIZE_EXPAND_FILL); add_child(search_box); diff --git a/editor/project_manager.h b/editor/project_manager.h index b8f7403e27..8b9c769c59 100644 --- a/editor/project_manager.h +++ b/editor/project_manager.h @@ -111,8 +111,8 @@ class ProjectManager : public Control { void _dim_window(); void _unhandled_input(const Ref<InputEvent> &p_ev); - void _files_dropped(PoolStringArray p_files, int p_screen); - void _scan_multiple_folders(PoolStringArray p_files); + void _files_dropped(PackedStringArray p_files, int p_screen); + void _scan_multiple_folders(PackedStringArray p_files); void _on_order_option_changed(); void _on_filter_option_changed(); @@ -134,7 +134,7 @@ public: enum FilterOption { FILTER_NAME, FILTER_PATH, - FILTER_MODIFIED, + FILTER_EDIT_DATE, }; private: diff --git a/editor/project_settings_editor.cpp b/editor/project_settings_editor.cpp index 6635f5cb47..9bee84b482 100644 --- a/editor/project_settings_editor.cpp +++ b/editor/project_settings_editor.cpp @@ -108,7 +108,7 @@ void ProjectSettingsEditor::_notification(int p_what) { action_add_error->add_color_override("font_color", get_color("error_color", "Editor")); - translation_list->connect("button_pressed", this, "_translation_delete"); + translation_list->connect_compat("button_pressed", this, "_translation_delete"); _update_actions(); popup_add->add_icon_item(get_icon("Keyboard", "EditorIcons"), TTR("Key "), INPUT_KEY); //"Key " - because the word 'key' has already been used as a key animation popup_add->add_icon_item(get_icon("JoyButton", "EditorIcons"), TTR("Joy Button"), INPUT_JOY_BUTTON); @@ -847,7 +847,7 @@ void ProjectSettingsEditor::_item_add() { // Initialize the property with the default value for the given type. // The type list starts at 1 (as we exclude Nil), so add 1 to the selected value. - Variant::CallError ce; + Callable::CallError ce; const Variant value = Variant::construct(Variant::Type(type->get_selected() + 1), NULL, 0, ce); String catname = category->get_text().strip_edges(); @@ -1188,7 +1188,7 @@ void ProjectSettingsEditor::add_translation(const String &p_translation) { void ProjectSettingsEditor::_translation_add(const String &p_path) { - PoolStringArray translations = ProjectSettings::get_singleton()->get("locale/translations"); + PackedStringArray translations = ProjectSettings::get_singleton()->get("locale/translations"); for (int i = 0; i < translations.size(); i++) { @@ -1219,7 +1219,7 @@ void ProjectSettingsEditor::_translation_delete(Object *p_item, int p_column, in int idx = ti->get_metadata(0); - PoolStringArray translations = ProjectSettings::get_singleton()->get("locale/translations"); + PackedStringArray translations = ProjectSettings::get_singleton()->get("locale/translations"); ERR_FAIL_INDEX(idx, translations.size()); @@ -1253,7 +1253,7 @@ void ProjectSettingsEditor::_translation_res_add(const String &p_path) { if (remaps.has(p_path)) return; //pointless already has it - remaps[p_path] = PoolStringArray(); + remaps[p_path] = PackedStringArray(); undo_redo->create_action(TTR("Add Remapped Path")); undo_redo->add_do_property(ProjectSettings::get_singleton(), "locale/translation_remaps", remaps); @@ -1281,7 +1281,7 @@ void ProjectSettingsEditor::_translation_res_option_add(const String &p_path) { String key = k->get_metadata(0); ERR_FAIL_COND(!remaps.has(key)); - PoolStringArray r = remaps[key]; + PackedStringArray r = remaps[key]; r.push_back(p_path + ":" + "en"); remaps[key] = r; @@ -1328,7 +1328,7 @@ void ProjectSettingsEditor::_translation_res_option_changed() { ERR_FAIL_INDEX(which, langs.size()); ERR_FAIL_COND(!remaps.has(key)); - PoolStringArray r = remaps[key]; + PackedStringArray r = remaps[key]; ERR_FAIL_INDEX(idx, r.size()); if (translation_locales_idxs_remap.size() > which) { r.set(idx, path + ":" + langs[translation_locales_idxs_remap[which]]); @@ -1395,7 +1395,7 @@ void ProjectSettingsEditor::_translation_res_option_delete(Object *p_item, int p int idx = ed->get_metadata(0); ERR_FAIL_COND(!remaps.has(key)); - PoolStringArray r = remaps[key]; + PackedStringArray r = remaps[key]; ERR_FAIL_INDEX(idx, r.size()); r.remove(idx); remaps[key] = r; @@ -1506,7 +1506,7 @@ void ProjectSettingsEditor::_update_translations() { translation_list->set_hide_root(true); if (ProjectSettings::get_singleton()->has_setting("locale/translations")) { - PoolStringArray translations = ProjectSettings::get_singleton()->get("locale/translations"); + PackedStringArray translations = ProjectSettings::get_singleton()->get("locale/translations"); for (int i = 0; i < translations.size(); i++) { TreeItem *t = translation_list->create_item(root); @@ -1642,7 +1642,7 @@ void ProjectSettingsEditor::_update_translations() { t->select(0); translation_res_option_add_button->set_disabled(false); - PoolStringArray selected = remaps[keys[i]]; + PackedStringArray selected = remaps[keys[i]]; for (int j = 0; j < selected.size(); j++) { String s2 = selected[j]; @@ -1805,7 +1805,7 @@ ProjectSettingsEditor::ProjectSettingsEditor(EditorData *p_data) { search_button->set_pressed(false); search_button->set_text(TTR("Search")); hbc->add_child(search_button); - search_button->connect("toggled", this, "_toggle_search_bar"); + search_button->connect_compat("toggled", this, "_toggle_search_bar"); hbc->add_child(memnew(VSeparator)); @@ -1820,7 +1820,7 @@ ProjectSettingsEditor::ProjectSettingsEditor(EditorData *p_data) { category = memnew(LineEdit); category->set_h_size_flags(Control::SIZE_EXPAND_FILL); add_prop_bar->add_child(category); - category->connect("text_entered", this, "_item_adds"); + category->connect_compat("text_entered", this, "_item_adds"); l = memnew(Label); add_prop_bar->add_child(l); @@ -1829,7 +1829,7 @@ ProjectSettingsEditor::ProjectSettingsEditor(EditorData *p_data) { property = memnew(LineEdit); property->set_h_size_flags(Control::SIZE_EXPAND_FILL); add_prop_bar->add_child(property); - property->connect("text_entered", this, "_item_adds"); + property->connect_compat("text_entered", this, "_item_adds"); l = memnew(Label); add_prop_bar->add_child(l); @@ -1847,7 +1847,7 @@ ProjectSettingsEditor::ProjectSettingsEditor(EditorData *p_data) { Button *add = memnew(Button); add_prop_bar->add_child(add); add->set_text(TTR("Add")); - add->connect("pressed", this, "_item_add"); + add->connect_compat("pressed", this, "_item_add"); search_bar = memnew(HBoxContainer); search_bar->set_h_size_flags(Control::SIZE_EXPAND_FILL); @@ -1863,14 +1863,14 @@ ProjectSettingsEditor::ProjectSettingsEditor(EditorData *p_data) { globals_editor->get_inspector()->set_undo_redo(EditorNode::get_singleton()->get_undo_redo()); globals_editor->set_v_size_flags(Control::SIZE_EXPAND_FILL); globals_editor->register_search_box(search_box); - globals_editor->get_inspector()->connect("property_selected", this, "_item_selected"); - globals_editor->get_inspector()->connect("property_edited", this, "_settings_prop_edited"); - globals_editor->get_inspector()->connect("restart_requested", this, "_editor_restart_request"); + globals_editor->get_inspector()->connect_compat("property_selected", this, "_item_selected"); + globals_editor->get_inspector()->connect_compat("property_edited", this, "_settings_prop_edited"); + globals_editor->get_inspector()->connect_compat("restart_requested", this, "_editor_restart_request"); Button *del = memnew(Button); hbc->add_child(del); del->set_text(TTR("Delete")); - del->connect("pressed", this, "_item_del"); + del->connect_compat("pressed", this, "_item_del"); add_prop_bar->add_child(memnew(VSeparator)); @@ -1879,8 +1879,8 @@ ProjectSettingsEditor::ProjectSettingsEditor(EditorData *p_data) { popup_copy_to_feature->set_disabled(true); add_prop_bar->add_child(popup_copy_to_feature); - popup_copy_to_feature->get_popup()->connect("id_pressed", this, "_copy_to_platform"); - popup_copy_to_feature->get_popup()->connect("about_to_show", this, "_copy_to_platform_about_to_show"); + popup_copy_to_feature->get_popup()->connect_compat("id_pressed", this, "_copy_to_platform"); + popup_copy_to_feature->get_popup()->connect_compat("about_to_show", this, "_copy_to_platform_about_to_show"); get_ok()->set_text(TTR("Close")); set_hide_on_ok(true); @@ -1897,11 +1897,11 @@ ProjectSettingsEditor::ProjectSettingsEditor(EditorData *p_data) { restart_hb->add_child(restart_label); restart_hb->add_spacer(); Button *restart_button = memnew(Button); - restart_button->connect("pressed", this, "_editor_restart"); + restart_button->connect_compat("pressed", this, "_editor_restart"); restart_hb->add_child(restart_button); restart_button->set_text(TTR("Save & Restart")); restart_close_button = memnew(ToolButton); - restart_close_button->connect("pressed", this, "_editor_restart_close"); + restart_close_button->connect_compat("pressed", this, "_editor_restart_close"); restart_hb->add_child(restart_close_button); restart_container->hide(); @@ -1929,8 +1929,8 @@ ProjectSettingsEditor::ProjectSettingsEditor(EditorData *p_data) { action_name = memnew(LineEdit); action_name->set_h_size_flags(SIZE_EXPAND_FILL); hbc->add_child(action_name); - action_name->connect("text_entered", this, "_action_adds"); - action_name->connect("text_changed", this, "_action_check"); + action_name->connect_compat("text_entered", this, "_action_adds"); + action_name->connect_compat("text_changed", this, "_action_check"); action_add_error = memnew(Label); hbc->add_child(action_add_error); @@ -1940,7 +1940,7 @@ ProjectSettingsEditor::ProjectSettingsEditor(EditorData *p_data) { hbc->add_child(add); add->set_text(TTR("Add")); add->set_disabled(true); - add->connect("pressed", this, "_action_add"); + add->connect_compat("pressed", this, "_action_add"); action_add = add; input_editor = memnew(Tree); @@ -1954,15 +1954,15 @@ ProjectSettingsEditor::ProjectSettingsEditor(EditorData *p_data) { input_editor->set_column_min_width(1, 80 * EDSCALE); input_editor->set_column_expand(2, false); input_editor->set_column_min_width(2, 50 * EDSCALE); - input_editor->connect("item_edited", this, "_action_edited"); - input_editor->connect("item_activated", this, "_action_activated"); - input_editor->connect("cell_selected", this, "_action_selected"); - input_editor->connect("button_pressed", this, "_action_button_pressed"); + input_editor->connect_compat("item_edited", this, "_action_edited"); + input_editor->connect_compat("item_activated", this, "_action_activated"); + input_editor->connect_compat("cell_selected", this, "_action_selected"); + input_editor->connect_compat("button_pressed", this, "_action_button_pressed"); input_editor->set_drag_forwarding(this); popup_add = memnew(PopupMenu); add_child(popup_add); - popup_add->connect("id_pressed", this, "_add_item"); + popup_add->connect_compat("id_pressed", this, "_add_item"); press_a_key = memnew(ConfirmationDialog); press_a_key->set_focus_mode(FOCUS_ALL); @@ -1977,13 +1977,13 @@ ProjectSettingsEditor::ProjectSettingsEditor(EditorData *p_data) { press_a_key->get_ok()->set_disabled(true); press_a_key_label = l; press_a_key->add_child(l); - press_a_key->connect("gui_input", this, "_wait_for_key"); - press_a_key->connect("confirmed", this, "_press_a_key_confirm"); + press_a_key->connect_compat("gui_input", this, "_wait_for_key"); + press_a_key->connect_compat("confirmed", this, "_press_a_key_confirm"); device_input = memnew(ConfirmationDialog); add_child(device_input); device_input->get_ok()->set_text(TTR("Add")); - device_input->connect("confirmed", this, "_device_input_add"); + device_input->connect_compat("confirmed", this, "_device_input_add"); hbc = memnew(HBoxContainer); device_input->add_child(hbc); @@ -2034,7 +2034,7 @@ ProjectSettingsEditor::ProjectSettingsEditor(EditorData *p_data) { thb->add_child(memnew(Label(TTR("Translations:")))); thb->add_spacer(); Button *addtr = memnew(Button(TTR("Add..."))); - addtr->connect("pressed", this, "_translation_file_open"); + addtr->connect_compat("pressed", this, "_translation_file_open"); thb->add_child(addtr); VBoxContainer *tmc = memnew(VBoxContainer); tvb->add_child(tmc); @@ -2046,7 +2046,7 @@ ProjectSettingsEditor::ProjectSettingsEditor(EditorData *p_data) { translation_file_open = memnew(EditorFileDialog); add_child(translation_file_open); translation_file_open->set_mode(EditorFileDialog::MODE_OPEN_FILE); - translation_file_open->connect("file_selected", this, "_translation_add"); + translation_file_open->connect_compat("file_selected", this, "_translation_add"); } { @@ -2058,28 +2058,28 @@ ProjectSettingsEditor::ProjectSettingsEditor(EditorData *p_data) { thb->add_child(memnew(Label(TTR("Resources:")))); thb->add_spacer(); Button *addtr = memnew(Button(TTR("Add..."))); - addtr->connect("pressed", this, "_translation_res_file_open"); + addtr->connect_compat("pressed", this, "_translation_res_file_open"); thb->add_child(addtr); VBoxContainer *tmc = memnew(VBoxContainer); tvb->add_child(tmc); tmc->set_v_size_flags(SIZE_EXPAND_FILL); translation_remap = memnew(Tree); translation_remap->set_v_size_flags(SIZE_EXPAND_FILL); - translation_remap->connect("cell_selected", this, "_translation_res_select"); + translation_remap->connect_compat("cell_selected", this, "_translation_res_select"); tmc->add_child(translation_remap); - translation_remap->connect("button_pressed", this, "_translation_res_delete"); + translation_remap->connect_compat("button_pressed", this, "_translation_res_delete"); translation_res_file_open = memnew(EditorFileDialog); add_child(translation_res_file_open); translation_res_file_open->set_mode(EditorFileDialog::MODE_OPEN_FILE); - translation_res_file_open->connect("file_selected", this, "_translation_res_add"); + translation_res_file_open->connect_compat("file_selected", this, "_translation_res_add"); thb = memnew(HBoxContainer); tvb->add_child(thb); thb->add_child(memnew(Label(TTR("Remaps by Locale:")))); thb->add_spacer(); addtr = memnew(Button(TTR("Add..."))); - addtr->connect("pressed", this, "_translation_res_option_file_open"); + addtr->connect_compat("pressed", this, "_translation_res_option_file_open"); translation_res_option_add_button = addtr; thb->add_child(addtr); tmc = memnew(VBoxContainer); @@ -2096,13 +2096,13 @@ ProjectSettingsEditor::ProjectSettingsEditor(EditorData *p_data) { translation_remap_options->set_column_expand(0, true); translation_remap_options->set_column_expand(1, false); translation_remap_options->set_column_min_width(1, 200); - translation_remap_options->connect("item_edited", this, "_translation_res_option_changed"); - translation_remap_options->connect("button_pressed", this, "_translation_res_option_delete"); + translation_remap_options->connect_compat("item_edited", this, "_translation_res_option_changed"); + translation_remap_options->connect_compat("button_pressed", this, "_translation_res_option_delete"); translation_res_option_file_open = memnew(EditorFileDialog); add_child(translation_res_option_file_open); translation_res_option_file_open->set_mode(EditorFileDialog::MODE_OPEN_FILE); - translation_res_option_file_open->connect("file_selected", this, "_translation_res_option_add"); + translation_res_option_file_open->connect_compat("file_selected", this, "_translation_res_option_add"); } { @@ -2118,20 +2118,20 @@ ProjectSettingsEditor::ProjectSettingsEditor(EditorData *p_data) { translation_locale_filter_mode->add_item(TTR("Show Selected Locales Only"), SHOW_ONLY_SELECTED_LOCALES); translation_locale_filter_mode->select(0); tmc->add_margin_child(TTR("Filter mode:"), translation_locale_filter_mode); - translation_locale_filter_mode->connect("item_selected", this, "_translation_filter_mode_changed"); + translation_locale_filter_mode->connect_compat("item_selected", this, "_translation_filter_mode_changed"); translation_filter = memnew(Tree); translation_filter->set_v_size_flags(SIZE_EXPAND_FILL); translation_filter->set_columns(1); tmc->add_child(memnew(Label(TTR("Locales:")))); tmc->add_child(translation_filter); - translation_filter->connect("item_edited", this, "_translation_filter_option_changed"); + translation_filter->connect_compat("item_edited", this, "_translation_filter_option_changed"); } autoload_settings = memnew(EditorAutoloadSettings); autoload_settings->set_name(TTR("AutoLoad")); tab_container->add_child(autoload_settings); - autoload_settings->connect("autoload_changed", this, "_settings_changed"); + autoload_settings->connect_compat("autoload_changed", this, "_settings_changed"); plugin_settings = memnew(EditorPluginSettings); plugin_settings->set_name(TTR("Plugins")); @@ -2139,7 +2139,7 @@ ProjectSettingsEditor::ProjectSettingsEditor(EditorData *p_data) { timer = memnew(Timer); timer->set_wait_time(1.5); - timer->connect("timeout", ProjectSettings::get_singleton(), "save"); + timer->connect_compat("timeout", ProjectSettings::get_singleton(), "save"); timer->set_one_shot(true); add_child(timer); diff --git a/editor/property_editor.cpp b/editor/property_editor.cpp index 2dcbc4c14c..72b2eb2885 100644 --- a/editor/property_editor.cpp +++ b/editor/property_editor.cpp @@ -176,9 +176,9 @@ void CustomPropertyEditor::_menu_option(int p_which) { case OBJ_MENU_EDIT: { - RefPtr RefPtr = v; + REF r = v; - if (!RefPtr.is_null()) { + if (!r.is_null()) { emit_signal("resource_edit_request"); hide(); @@ -193,8 +193,7 @@ void CustomPropertyEditor::_menu_option(int p_which) { case OBJ_MENU_MAKE_UNIQUE: { - RefPtr RefPtr = v; - Ref<Resource> res_orig = RefPtr; + Ref<Resource> res_orig = v; if (res_orig.is_null()) return; @@ -229,7 +228,7 @@ void CustomPropertyEditor::_menu_option(int p_which) { res->set(p.first, p.second); } - v = res.get_ref_ptr(); + v = res; emit_signal("variant_changed"); hide(); } break; @@ -311,7 +310,7 @@ void CustomPropertyEditor::_menu_option(int p_which) { res->call("set_instance_base_type", owner->get_class()); } - v = Ref<Resource>(res).get_ref_ptr(); + v = res; emit_signal("variant_changed"); } break; @@ -590,7 +589,7 @@ bool CustomPropertyEditor::edit(Object *p_owner, const String &p_name, Variant:: if (!create_dialog) { create_dialog = memnew(CreateDialog); - create_dialog->connect("create", this, "_create_dialog_callback"); + create_dialog->connect_compat("create", this, "_create_dialog_callback"); add_child(create_dialog); } @@ -606,12 +605,12 @@ bool CustomPropertyEditor::edit(Object *p_owner, const String &p_name, Variant:: return false; } else if (hint == PROPERTY_HINT_METHOD_OF_VARIANT_TYPE) { -#define MAKE_PROPSELECT \ - if (!property_select) { \ - property_select = memnew(PropertySelector); \ - property_select->connect("selected", this, "_create_selected_property"); \ - add_child(property_select); \ - } \ +#define MAKE_PROPSELECT \ + if (!property_select) { \ + property_select = memnew(PropertySelector); \ + property_select->connect_compat("selected", this, "_create_selected_property"); \ + add_child(property_select); \ + } \ hide(); MAKE_PROPSELECT; @@ -639,7 +638,7 @@ bool CustomPropertyEditor::edit(Object *p_owner, const String &p_name, Variant:: MAKE_PROPSELECT - Object *instance = ObjectDB::get_instance(hint_text.to_int64()); + Object *instance = ObjectDB::get_instance(ObjectID(hint_text.to_int64())); if (instance) property_select->select_method_from_instance(instance, v); updating = false; @@ -648,7 +647,7 @@ bool CustomPropertyEditor::edit(Object *p_owner, const String &p_name, Variant:: } else if (hint == PROPERTY_HINT_METHOD_OF_SCRIPT) { MAKE_PROPSELECT - Object *obj = ObjectDB::get_instance(hint_text.to_int64()); + Object *obj = ObjectDB::get_instance(ObjectID(hint_text.to_int64())); if (Object::cast_to<Script>(obj)) { property_select->select_method_from_script(Object::cast_to<Script>(obj), v); } @@ -688,7 +687,7 @@ bool CustomPropertyEditor::edit(Object *p_owner, const String &p_name, Variant:: MAKE_PROPSELECT - Object *instance = ObjectDB::get_instance(hint_text.to_int64()); + Object *instance = ObjectDB::get_instance(ObjectID(hint_text.to_int64())); if (instance) property_select->select_property_from_instance(instance, v); @@ -698,7 +697,7 @@ bool CustomPropertyEditor::edit(Object *p_owner, const String &p_name, Variant:: } else if (hint == PROPERTY_HINT_PROPERTY_OF_SCRIPT) { MAKE_PROPSELECT - Object *obj = ObjectDB::get_instance(hint_text.to_int64()); + Object *obj = ObjectDB::get_instance(ObjectID(hint_text.to_int64())); if (Object::cast_to<Script>(obj)) { property_select->select_property_from_script(Object::cast_to<Script>(obj), v); } @@ -866,7 +865,7 @@ bool CustomPropertyEditor::edit(Object *p_owner, const String &p_name, Variant:: color_picker->set_deferred_mode(true); add_child(color_picker); color_picker->hide(); - color_picker->connect("color_changed", this, "_color_changed"); + color_picker->connect_compat("color_changed", this, "_color_changed"); // get default color picker mode from editor settings int default_color_mode = EDITOR_GET("interface/inspector/default_color_picker_mode"); @@ -935,7 +934,7 @@ bool CustomPropertyEditor::edit(Object *p_owner, const String &p_name, Variant:: const String &t = j->get(); bool is_custom_resource = false; - Ref<Texture> icon; + Ref<Texture2D> icon; if (!custom_resources.empty()) { for (int k = 0; k < custom_resources.size(); k++) { if (custom_resources[k].name == t) { @@ -1023,7 +1022,7 @@ bool CustomPropertyEditor::edit(Object *p_owner, const String &p_name, Variant:: } for (int i = 0; i < conversions.size(); i++) { String what = conversions[i]->converts_to(); - Ref<Texture> icon; + Ref<Texture2D> icon; if (has_icon(what, "EditorIcons")) { icon = get_icon(what, "EditorIcons"); @@ -1046,22 +1045,22 @@ bool CustomPropertyEditor::edit(Object *p_owner, const String &p_name, Variant:: case Variant::DICTIONARY: { } break; - case Variant::POOL_BYTE_ARRAY: { + case Variant::PACKED_BYTE_ARRAY: { } break; - case Variant::POOL_INT_ARRAY: { + case Variant::PACKED_INT_ARRAY: { } break; - case Variant::POOL_REAL_ARRAY: { + case Variant::PACKED_REAL_ARRAY: { } break; - case Variant::POOL_STRING_ARRAY: { + case Variant::PACKED_STRING_ARRAY: { } break; - case Variant::POOL_VECTOR3_ARRAY: { + case Variant::PACKED_VECTOR3_ARRAY: { } break; - case Variant::POOL_COLOR_ARRAY: { + case Variant::PACKED_COLOR_ARRAY: { } break; default: { @@ -1103,7 +1102,7 @@ void CustomPropertyEditor::_file_selected(String p_file) { error->popup_centered_minsize(); break; } - v = res.get_ref_ptr(); + v = res; emit_signal("variant_changed"); hide(); } break; @@ -1168,7 +1167,7 @@ void CustomPropertyEditor::_type_create_selected(int p_idx) { Resource *res = Object::cast_to<Resource>(obj); ERR_FAIL_COND(!res); - v = Ref<Resource>(res).get_ref_ptr(); + v = res; emit_signal("variant_changed"); hide(); } @@ -1373,7 +1372,7 @@ void CustomPropertyEditor::_action_pressed(int p_which) { Resource *res = Object::cast_to<Resource>(obj); ERR_BREAK(!res); - v = Ref<Resource>(res).get_ref_ptr(); + v = res; emit_signal("variant_changed"); hide(); } @@ -1395,9 +1394,9 @@ void CustomPropertyEditor::_action_pressed(int p_which) { } else if (p_which == 2) { - RefPtr RefPtr = v; + RES r = v; - if (!RefPtr.is_null()) { + if (!r.is_null()) { emit_signal("resource_edit_request"); hide(); @@ -1410,8 +1409,7 @@ void CustomPropertyEditor::_action_pressed(int p_which) { hide(); } else if (p_which == 4) { - RefPtr RefPtr = v; - Ref<Resource> res_orig = RefPtr; + Ref<Resource> res_orig = v; if (res_orig.is_null()) return; @@ -1442,7 +1440,7 @@ void CustomPropertyEditor::_action_pressed(int p_which) { res->set(p.first, p.second); } - v = res.get_ref_ptr(); + v = res; emit_signal("variant_changed"); hide(); } @@ -1699,22 +1697,22 @@ void CustomPropertyEditor::_modified(String p_string) { case Variant::DICTIONARY: { } break; - case Variant::POOL_BYTE_ARRAY: { + case Variant::PACKED_BYTE_ARRAY: { } break; - case Variant::POOL_INT_ARRAY: { + case Variant::PACKED_INT_ARRAY: { } break; - case Variant::POOL_REAL_ARRAY: { + case Variant::PACKED_REAL_ARRAY: { } break; - case Variant::POOL_STRING_ARRAY: { + case Variant::PACKED_STRING_ARRAY: { } break; - case Variant::POOL_VECTOR3_ARRAY: { + case Variant::PACKED_VECTOR3_ARRAY: { } break; - case Variant::POOL_COLOR_ARRAY: { + case Variant::PACKED_COLOR_ARRAY: { } break; default: { @@ -1904,9 +1902,9 @@ CustomPropertyEditor::CustomPropertyEditor() { add_child(value_label[i]); value_editor[i]->hide(); value_label[i]->hide(); - value_editor[i]->connect("text_entered", this, "_modified"); - value_editor[i]->connect("focus_entered", this, "_focus_enter"); - value_editor[i]->connect("focus_exited", this, "_focus_exit"); + value_editor[i]->connect_compat("text_entered", this, "_modified"); + value_editor[i]->connect_compat("focus_entered", this, "_focus_enter"); + value_editor[i]->connect_compat("focus_exited", this, "_focus_exit"); } focused_value_editor = -1; @@ -1936,7 +1934,7 @@ CustomPropertyEditor::CustomPropertyEditor() { checks20[i]->set_focus_mode(FOCUS_NONE); checks20gc->add_child(checks20[i]); checks20[i]->hide(); - checks20[i]->connect("pressed", this, "_action_pressed", make_binds(i)); + checks20[i]->connect_compat("pressed", this, "_action_pressed", make_binds(i)); checks20[i]->set_tooltip(vformat(TTR("Bit %d, val %d."), i, 1 << i)); } @@ -1946,7 +1944,7 @@ CustomPropertyEditor::CustomPropertyEditor() { text_edit->set_margin(MARGIN_BOTTOM, -30); text_edit->hide(); - text_edit->connect("text_changed", this, "_text_edit_changed"); + text_edit->connect_compat("text_changed", this, "_text_edit_changed"); for (int i = 0; i < MAX_ACTION_BUTTONS; i++) { @@ -1955,7 +1953,7 @@ CustomPropertyEditor::CustomPropertyEditor() { add_child(action_buttons[i]); Vector<Variant> binds; binds.push_back(i); - action_buttons[i]->connect("pressed", this, "_action_pressed", binds); + action_buttons[i]->connect_compat("pressed", this, "_action_pressed", binds); action_buttons[i]->set_flat(true); } @@ -1966,8 +1964,8 @@ CustomPropertyEditor::CustomPropertyEditor() { add_child(file); file->hide(); - file->connect("file_selected", this, "_file_selected"); - file->connect("dir_selected", this, "_file_selected"); + file->connect_compat("file_selected", this, "_file_selected"); + file->connect_compat("dir_selected", this, "_file_selected"); error = memnew(ConfirmationDialog); error->set_title(TTR("Error!")); @@ -1975,7 +1973,7 @@ CustomPropertyEditor::CustomPropertyEditor() { scene_tree = memnew(SceneTreeDialog); add_child(scene_tree); - scene_tree->connect("selected", this, "_node_path_selected"); + scene_tree->connect_compat("selected", this, "_node_path_selected"); scene_tree->get_scene_tree()->set_show_enabled_subscene(true); texture_preview = memnew(TextureRect); @@ -1985,31 +1983,31 @@ CustomPropertyEditor::CustomPropertyEditor() { easing_draw = memnew(Control); add_child(easing_draw); easing_draw->hide(); - easing_draw->connect("draw", this, "_draw_easing"); - easing_draw->connect("gui_input", this, "_drag_easing"); + easing_draw->connect_compat("draw", this, "_draw_easing"); + easing_draw->connect_compat("gui_input", this, "_drag_easing"); easing_draw->set_default_cursor_shape(Control::CURSOR_MOVE); type_button = memnew(MenuButton); add_child(type_button); type_button->hide(); - type_button->get_popup()->connect("id_pressed", this, "_type_create_selected"); + type_button->get_popup()->connect_compat("id_pressed", this, "_type_create_selected"); menu = memnew(PopupMenu); menu->set_pass_on_modal_close_click(false); add_child(menu); - menu->connect("id_pressed", this, "_menu_option"); + menu->connect_compat("id_pressed", this, "_menu_option"); evaluator = NULL; spinbox = memnew(SpinBox); add_child(spinbox); spinbox->set_anchors_and_margins_preset(Control::PRESET_WIDE, Control::PRESET_MODE_MINSIZE, 5); - spinbox->connect("value_changed", this, "_range_modified"); + spinbox->connect_compat("value_changed", this, "_range_modified"); slider = memnew(HSlider); add_child(slider); slider->set_anchors_and_margins_preset(Control::PRESET_WIDE, Control::PRESET_MODE_MINSIZE, 5); - slider->connect("value_changed", this, "_range_modified"); + slider->connect_compat("value_changed", this, "_range_modified"); create_dialog = NULL; property_select = NULL; diff --git a/editor/property_selector.cpp b/editor/property_selector.cpp index 426ec51e4c..3c61e40b58 100644 --- a/editor/property_selector.cpp +++ b/editor/property_selector.cpp @@ -95,7 +95,7 @@ void PropertySelector::_update_search() { instance->get_property_list(&props, true); } else if (type != Variant::NIL) { Variant v; - Variant::CallError ce; + Callable::CallError ce; v = Variant::construct(type, NULL, 0, ce); v.get_property_list(&props); @@ -120,7 +120,7 @@ void PropertySelector::_update_search() { bool found = false; - Ref<Texture> type_icons[Variant::VARIANT_MAX] = { + Ref<Texture2D> type_icons[Variant::VARIANT_MAX] = { Control::get_icon("Variant", "EditorIcons"), Control::get_icon("bool", "EditorIcons"), Control::get_icon("int", "EditorIcons"), @@ -141,13 +141,13 @@ void PropertySelector::_update_search() { Control::get_icon("Object", "EditorIcons"), Control::get_icon("Dictionary", "EditorIcons"), Control::get_icon("Array", "EditorIcons"), - Control::get_icon("PoolByteArray", "EditorIcons"), - Control::get_icon("PoolIntArray", "EditorIcons"), - Control::get_icon("PoolRealArray", "EditorIcons"), - Control::get_icon("PoolStringArray", "EditorIcons"), - Control::get_icon("PoolVector2Array", "EditorIcons"), - Control::get_icon("PoolVector3Array", "EditorIcons"), - Control::get_icon("PoolColorArray", "EditorIcons") + Control::get_icon("PackedByteArray", "EditorIcons"), + Control::get_icon("PackedIntArray", "EditorIcons"), + Control::get_icon("PackedRealArray", "EditorIcons"), + Control::get_icon("PackedStringArray", "EditorIcons"), + Control::get_icon("PackedVector2Array", "EditorIcons"), + Control::get_icon("PackedVector3Array", "EditorIcons"), + Control::get_icon("PackedColorArray", "EditorIcons") }; for (List<PropertyInfo>::Element *E = props.front(); E; E = E->next()) { @@ -159,7 +159,7 @@ void PropertySelector::_update_search() { category->set_text(0, E->get().name); category->set_selectable(0, false); - Ref<Texture> icon; + Ref<Texture2D> icon; if (E->get().name == "Script Variables") { icon = get_icon("Script", "EditorIcons"); } else { @@ -200,7 +200,7 @@ void PropertySelector::_update_search() { if (type != Variant::NIL) { Variant v; - Variant::CallError ce; + Callable::CallError ce; v = Variant::construct(type, NULL, 0, ce); v.get_method_list(&methods); } else { @@ -234,7 +234,7 @@ void PropertySelector::_update_search() { category->set_text(0, E->get().name.replace_first("*", "")); category->set_selectable(0, false); - Ref<Texture> icon; + Ref<Texture2D> icon; script_methods = false; String rep = E->get().name.replace("*", ""); if (E->get().name == "*Script Methods") { @@ -393,9 +393,9 @@ void PropertySelector::_notification(int p_what) { if (p_what == NOTIFICATION_ENTER_TREE) { - connect("confirmed", this, "_confirmed"); + connect_compat("confirmed", this, "_confirmed"); } else if (p_what == NOTIFICATION_EXIT_TREE) { - disconnect("confirmed", this, "_confirmed"); + disconnect_compat("confirmed", this, "_confirmed"); } } @@ -404,7 +404,7 @@ void PropertySelector::select_method_from_base_type(const String &p_base, const base_type = p_base; selected = p_current; type = Variant::NIL; - script = 0; + script = ObjectID(); properties = false; instance = NULL; virtuals_only = p_virtuals_only; @@ -437,7 +437,7 @@ void PropertySelector::select_method_from_basic_type(Variant::Type p_type, const base_type = ""; selected = p_current; type = p_type; - script = 0; + script = ObjectID(); properties = false; instance = NULL; virtuals_only = false; @@ -453,7 +453,7 @@ void PropertySelector::select_method_from_instance(Object *p_instance, const Str base_type = p_instance->get_class(); selected = p_current; type = Variant::NIL; - script = 0; + script = ObjectID(); { Ref<Script> scr = p_instance->get_script(); if (scr.is_valid()) @@ -474,7 +474,7 @@ void PropertySelector::select_property_from_base_type(const String &p_base, cons base_type = p_base; selected = p_current; type = Variant::NIL; - script = 0; + script = ObjectID(); properties = true; instance = NULL; virtuals_only = false; @@ -509,7 +509,7 @@ void PropertySelector::select_property_from_basic_type(Variant::Type p_type, con base_type = ""; selected = p_current; type = p_type; - script = 0; + script = ObjectID(); properties = true; instance = NULL; virtuals_only = false; @@ -525,7 +525,7 @@ void PropertySelector::select_property_from_instance(Object *p_instance, const S base_type = ""; selected = p_current; type = Variant::NIL; - script = 0; + script = ObjectID(); properties = true; instance = p_instance; virtuals_only = false; @@ -557,21 +557,21 @@ PropertySelector::PropertySelector() { //set_child_rect(vbc); search_box = memnew(LineEdit); vbc->add_margin_child(TTR("Search:"), search_box); - search_box->connect("text_changed", this, "_text_changed"); - search_box->connect("gui_input", this, "_sbox_input"); + search_box->connect_compat("text_changed", this, "_text_changed"); + search_box->connect_compat("gui_input", this, "_sbox_input"); search_options = memnew(Tree); vbc->add_margin_child(TTR("Matches:"), search_options, true); get_ok()->set_text(TTR("Open")); get_ok()->set_disabled(true); register_text_enter(search_box); set_hide_on_ok(false); - search_options->connect("item_activated", this, "_confirmed"); - search_options->connect("cell_selected", this, "_item_selected"); + search_options->connect_compat("item_activated", this, "_confirmed"); + search_options->connect_compat("cell_selected", this, "_item_selected"); search_options->set_hide_root(true); search_options->set_hide_folding(true); virtuals_only = false; help_bit = memnew(EditorHelpBit); vbc->add_margin_child(TTR("Description:"), help_bit); - help_bit->connect("request_hide", this, "_closed"); + help_bit->connect_compat("request_hide", this, "_closed"); } diff --git a/editor/pvrtc_compress.cpp b/editor/pvrtc_compress.cpp index 43963d3aae..f9efe6a50d 100644 --- a/editor/pvrtc_compress.cpp +++ b/editor/pvrtc_compress.cpp @@ -98,7 +98,7 @@ static void _compress_image(Image::CompressMode p_mode, Image *p_image) { // Save source PNG. Ref<ImageTexture> t = memnew(ImageTexture); - t->create_from_image(Ref<Image>(p_image), 0); + t->create_from_image(Ref<Image>(p_image)); ResourceSaver::save(src_img, t); Error err = OS::get_singleton()->execute(ttpath, args, true); @@ -109,7 +109,7 @@ static void _compress_image(Image::CompressMode p_mode, Image *p_image) { ERR_FAIL_MSG("Could not execute PVRTC tool: " + ttpath); } - t = ResourceLoader::load(dst_img, "Texture"); + t = ResourceLoader::load(dst_img, "Texture2D"); if (t.is_null()) { // Clean up generated files. DirAccess::remove_file_or_error(src_img); diff --git a/editor/quick_open.cpp b/editor/quick_open.cpp index 4cd70b0f8e..57e3c1da70 100644 --- a/editor/quick_open.cpp +++ b/editor/quick_open.cpp @@ -122,7 +122,7 @@ float EditorQuickOpen::_path_cmp(String search, String path) const { return path.to_lower().similarity(search.to_lower()); } -void EditorQuickOpen::_parse_fs(EditorFileSystemDirectory *efsd, Vector<Pair<String, Ref<Texture> > > &list) { +void EditorQuickOpen::_parse_fs(EditorFileSystemDirectory *efsd, Vector<Pair<String, Ref<Texture2D> > > &list) { if (!add_directories) { for (int i = 0; i < efsd->get_subdir_count(); i++) { @@ -140,7 +140,7 @@ void EditorQuickOpen::_parse_fs(EditorFileSystemDirectory *efsd, Vector<Pair<Str if (path != "res://") { path = path.substr(6, path.length()); if (search_text.is_subsequence_ofi(path)) { - Pair<String, Ref<Texture> > pair; + Pair<String, Ref<Texture2D> > pair; pair.first = path; pair.second = get_icon("folder", "FileDialog"); @@ -169,7 +169,7 @@ void EditorQuickOpen::_parse_fs(EditorFileSystemDirectory *efsd, Vector<Pair<Str file = file.substr(6, file.length()); if (ClassDB::is_parent_class(efsd->get_file_type(i), base_type) && (search_text.is_subsequence_ofi(file))) { - Pair<String, Ref<Texture> > pair; + Pair<String, Ref<Texture2D> > pair; pair.first = file; pair.second = get_icon((has_icon(efsd->get_file_type(i), ei) ? efsd->get_file_type(i) : ot), ei); list.push_back(pair); @@ -184,10 +184,10 @@ void EditorQuickOpen::_parse_fs(EditorFileSystemDirectory *efsd, Vector<Pair<Str } } -Vector<Pair<String, Ref<Texture> > > EditorQuickOpen::_sort_fs(Vector<Pair<String, Ref<Texture> > > &list) { +Vector<Pair<String, Ref<Texture2D> > > EditorQuickOpen::_sort_fs(Vector<Pair<String, Ref<Texture2D> > > &list) { String search_text = search_box->get_text(); - Vector<Pair<String, Ref<Texture> > > sorted_list; + Vector<Pair<String, Ref<Texture2D> > > sorted_list; if (search_text == String() || list.size() == 0) return list; @@ -223,7 +223,7 @@ void EditorQuickOpen::_update_search() { search_options->clear(); TreeItem *root = search_options->create_item(); EditorFileSystemDirectory *efsd = EditorFileSystem::get_singleton()->get_filesystem(); - Vector<Pair<String, Ref<Texture> > > list; + Vector<Pair<String, Ref<Texture2D> > > list; _parse_fs(efsd, list); list = _sort_fs(list); @@ -257,16 +257,16 @@ void EditorQuickOpen::_notification(int p_what) { switch (p_what) { case NOTIFICATION_ENTER_TREE: { - connect("confirmed", this, "_confirmed"); + connect_compat("confirmed", this, "_confirmed"); search_box->set_clear_button_enabled(true); - FALLTHROUGH; + [[fallthrough]]; } case NOTIFICATION_THEME_CHANGED: { search_box->set_right_icon(get_icon("Search", "EditorIcons")); } break; case NOTIFICATION_EXIT_TREE: { - disconnect("confirmed", this, "_confirmed"); + disconnect_compat("confirmed", this, "_confirmed"); } break; } } @@ -291,15 +291,15 @@ EditorQuickOpen::EditorQuickOpen() { add_child(vbc); search_box = memnew(LineEdit); vbc->add_margin_child(TTR("Search:"), search_box); - search_box->connect("text_changed", this, "_text_changed"); - search_box->connect("gui_input", this, "_sbox_input"); + search_box->connect_compat("text_changed", this, "_text_changed"); + search_box->connect_compat("gui_input", this, "_sbox_input"); search_options = memnew(Tree); vbc->add_margin_child(TTR("Matches:"), search_options, true); get_ok()->set_text(TTR("Open")); get_ok()->set_disabled(true); register_text_enter(search_box); set_hide_on_ok(false); - search_options->connect("item_activated", this, "_confirmed"); + search_options->connect_compat("item_activated", this, "_confirmed"); search_options->set_hide_root(true); search_options->set_hide_folding(true); search_options->add_constant_override("draw_guides", 1); diff --git a/editor/quick_open.h b/editor/quick_open.h index a4eb44c805..4814e5f310 100644 --- a/editor/quick_open.h +++ b/editor/quick_open.h @@ -49,8 +49,8 @@ class EditorQuickOpen : public ConfirmationDialog { void _update_search(); void _sbox_input(const Ref<InputEvent> &p_ie); - void _parse_fs(EditorFileSystemDirectory *efsd, Vector<Pair<String, Ref<Texture> > > &list); - Vector<Pair<String, Ref<Texture> > > _sort_fs(Vector<Pair<String, Ref<Texture> > > &list); + void _parse_fs(EditorFileSystemDirectory *efsd, Vector<Pair<String, Ref<Texture2D> > > &list); + Vector<Pair<String, Ref<Texture2D> > > _sort_fs(Vector<Pair<String, Ref<Texture2D> > > &list); float _path_cmp(String search, String path) const; void _confirmed(); diff --git a/editor/rename_dialog.cpp b/editor/rename_dialog.cpp index 317be309a3..aa8352aa25 100644 --- a/editor/rename_dialog.cpp +++ b/editor/rename_dialog.cpp @@ -144,7 +144,7 @@ RenameDialog::RenameDialog(SceneTreeEditor *p_scene_tree_editor, UndoRedo *p_und but_insert_name->set_text("NAME"); but_insert_name->set_tooltip(String("${NAME}\n") + TTR("Node name")); but_insert_name->set_focus_mode(FOCUS_NONE); - but_insert_name->connect("pressed", this, "_insert_text", make_binds("${NAME}")); + but_insert_name->connect_compat("pressed", this, "_insert_text", make_binds("${NAME}")); but_insert_name->set_h_size_flags(SIZE_EXPAND_FILL); grd_substitute->add_child(but_insert_name); @@ -154,7 +154,7 @@ RenameDialog::RenameDialog(SceneTreeEditor *p_scene_tree_editor, UndoRedo *p_und but_insert_parent->set_text("PARENT"); but_insert_parent->set_tooltip(String("${PARENT}\n") + TTR("Node's parent name, if available")); but_insert_parent->set_focus_mode(FOCUS_NONE); - but_insert_parent->connect("pressed", this, "_insert_text", make_binds("${PARENT}")); + but_insert_parent->connect_compat("pressed", this, "_insert_text", make_binds("${PARENT}")); but_insert_parent->set_h_size_flags(SIZE_EXPAND_FILL); grd_substitute->add_child(but_insert_parent); @@ -164,7 +164,7 @@ RenameDialog::RenameDialog(SceneTreeEditor *p_scene_tree_editor, UndoRedo *p_und but_insert_type->set_text("TYPE"); but_insert_type->set_tooltip(String("${TYPE}\n") + TTR("Node type")); but_insert_type->set_focus_mode(FOCUS_NONE); - but_insert_type->connect("pressed", this, "_insert_text", make_binds("${TYPE}")); + but_insert_type->connect_compat("pressed", this, "_insert_text", make_binds("${TYPE}")); but_insert_type->set_h_size_flags(SIZE_EXPAND_FILL); grd_substitute->add_child(but_insert_type); @@ -174,7 +174,7 @@ RenameDialog::RenameDialog(SceneTreeEditor *p_scene_tree_editor, UndoRedo *p_und but_insert_scene->set_text("SCENE"); but_insert_scene->set_tooltip(String("${SCENE}\n") + TTR("Current scene name")); but_insert_scene->set_focus_mode(FOCUS_NONE); - but_insert_scene->connect("pressed", this, "_insert_text", make_binds("${SCENE}")); + but_insert_scene->connect_compat("pressed", this, "_insert_text", make_binds("${SCENE}")); but_insert_scene->set_h_size_flags(SIZE_EXPAND_FILL); grd_substitute->add_child(but_insert_scene); @@ -184,7 +184,7 @@ RenameDialog::RenameDialog(SceneTreeEditor *p_scene_tree_editor, UndoRedo *p_und but_insert_root->set_text("ROOT"); but_insert_root->set_tooltip(String("${ROOT}\n") + TTR("Root node name")); but_insert_root->set_focus_mode(FOCUS_NONE); - but_insert_root->connect("pressed", this, "_insert_text", make_binds("${ROOT}")); + but_insert_root->connect_compat("pressed", this, "_insert_text", make_binds("${ROOT}")); but_insert_root->set_h_size_flags(SIZE_EXPAND_FILL); grd_substitute->add_child(but_insert_root); @@ -194,7 +194,7 @@ RenameDialog::RenameDialog(SceneTreeEditor *p_scene_tree_editor, UndoRedo *p_und but_insert_count->set_text("COUNTER"); but_insert_count->set_tooltip(String("${COUNTER}\n") + TTR("Sequential integer counter.\nCompare counter options.")); but_insert_count->set_focus_mode(FOCUS_NONE); - but_insert_count->connect("pressed", this, "_insert_text", make_binds("${COUNTER}")); + but_insert_count->connect_compat("pressed", this, "_insert_text", make_binds("${COUNTER}")); but_insert_count->set_h_size_flags(SIZE_EXPAND_FILL); grd_substitute->add_child(but_insert_count); @@ -306,35 +306,35 @@ RenameDialog::RenameDialog(SceneTreeEditor *p_scene_tree_editor, UndoRedo *p_und // ---- Connections - cbut_collapse_features->connect("toggled", this, "_features_toggled"); + cbut_collapse_features->connect_compat("toggled", this, "_features_toggled"); // Substitite Buttons - lne_search->connect("focus_entered", this, "_update_substitute"); - lne_search->connect("focus_exited", this, "_update_substitute"); - lne_replace->connect("focus_entered", this, "_update_substitute"); - lne_replace->connect("focus_exited", this, "_update_substitute"); - lne_prefix->connect("focus_entered", this, "_update_substitute"); - lne_prefix->connect("focus_exited", this, "_update_substitute"); - lne_suffix->connect("focus_entered", this, "_update_substitute"); - lne_suffix->connect("focus_exited", this, "_update_substitute"); + lne_search->connect_compat("focus_entered", this, "_update_substitute"); + lne_search->connect_compat("focus_exited", this, "_update_substitute"); + lne_replace->connect_compat("focus_entered", this, "_update_substitute"); + lne_replace->connect_compat("focus_exited", this, "_update_substitute"); + lne_prefix->connect_compat("focus_entered", this, "_update_substitute"); + lne_prefix->connect_compat("focus_exited", this, "_update_substitute"); + lne_suffix->connect_compat("focus_entered", this, "_update_substitute"); + lne_suffix->connect_compat("focus_exited", this, "_update_substitute"); // Preview - lne_prefix->connect("text_changed", this, "_update_preview"); - lne_suffix->connect("text_changed", this, "_update_preview"); - lne_search->connect("text_changed", this, "_update_preview"); - lne_replace->connect("text_changed", this, "_update_preview"); - spn_count_start->connect("value_changed", this, "_update_preview_int"); - spn_count_step->connect("value_changed", this, "_update_preview_int"); - spn_count_padding->connect("value_changed", this, "_update_preview_int"); - opt_style->connect("item_selected", this, "_update_preview_int"); - opt_case->connect("item_selected", this, "_update_preview_int"); - cbut_substitute->connect("pressed", this, "_update_preview", varray("")); - cbut_regex->connect("pressed", this, "_update_preview", varray("")); - cbut_process->connect("pressed", this, "_update_preview", varray("")); - - but_reset->connect("pressed", this, "reset"); + lne_prefix->connect_compat("text_changed", this, "_update_preview"); + lne_suffix->connect_compat("text_changed", this, "_update_preview"); + lne_search->connect_compat("text_changed", this, "_update_preview"); + lne_replace->connect_compat("text_changed", this, "_update_preview"); + spn_count_start->connect_compat("value_changed", this, "_update_preview_int"); + spn_count_step->connect_compat("value_changed", this, "_update_preview_int"); + spn_count_padding->connect_compat("value_changed", this, "_update_preview_int"); + opt_style->connect_compat("item_selected", this, "_update_preview_int"); + opt_case->connect_compat("item_selected", this, "_update_preview_int"); + cbut_substitute->connect_compat("pressed", this, "_update_preview", varray("")); + cbut_regex->connect_compat("pressed", this, "_update_preview", varray("")); + cbut_process->connect_compat("pressed", this, "_update_preview", varray("")); + + but_reset->connect_compat("pressed", this, "reset"); reset(); _features_toggled(false); diff --git a/editor/reparent_dialog.cpp b/editor/reparent_dialog.cpp index dd35f41b7a..7c99f5d520 100644 --- a/editor/reparent_dialog.cpp +++ b/editor/reparent_dialog.cpp @@ -38,12 +38,12 @@ void ReparentDialog::_notification(int p_what) { if (p_what == NOTIFICATION_ENTER_TREE) { - connect("confirmed", this, "_reparent"); + connect_compat("confirmed", this, "_reparent"); } if (p_what == NOTIFICATION_EXIT_TREE) { - disconnect("confirmed", this, "_reparent"); + disconnect_compat("confirmed", this, "_reparent"); } if (p_what == NOTIFICATION_DRAW) { @@ -93,7 +93,7 @@ ReparentDialog::ReparentDialog() { vbc->add_margin_child(TTR("Reparent Location (Select new Parent):"), tree, true); - tree->get_scene_tree()->connect("item_activated", this, "_reparent"); + tree->get_scene_tree()->connect_compat("item_activated", this, "_reparent"); //Label *label = memnew( Label ); //label->set_position( Point2( 15,8) ); diff --git a/editor/run_settings_dialog.cpp b/editor/run_settings_dialog.cpp index 3a8d17b54e..0c7ee8d807 100644 --- a/editor/run_settings_dialog.cpp +++ b/editor/run_settings_dialog.cpp @@ -81,7 +81,7 @@ RunSettingsDialog::RunSettingsDialog() { vbc->add_margin_child(TTR("Run Mode:"), run_mode); run_mode->add_item(TTR("Current Scene")); run_mode->add_item(TTR("Main Scene")); - run_mode->connect("item_selected", this, "_run_mode_changed"); + run_mode->connect_compat("item_selected", this, "_run_mode_changed"); arguments = memnew(LineEdit); vbc->add_margin_child(TTR("Main Scene Arguments:"), arguments); arguments->set_editable(false); diff --git a/editor/scene_tree_dock.cpp b/editor/scene_tree_dock.cpp index 7410a998ad..ebc7d56b24 100644 --- a/editor/scene_tree_dock.cpp +++ b/editor/scene_tree_dock.cpp @@ -35,6 +35,7 @@ #include "core/os/keyboard.h" #include "core/project_settings.h" +#include "editor/debugger/editor_debugger_node.h" #include "editor/editor_feature_profile.h" #include "editor/editor_node.h" #include "editor/editor_scale.h" @@ -44,7 +45,6 @@ #include "editor/plugins/canvas_item_editor_plugin.h" #include "editor/plugins/script_editor_plugin.h" #include "editor/plugins/spatial_editor_plugin.h" -#include "editor/script_editor_debugger.h" #include "scene/main/viewport.h" #include "scene/resources/packed_scene.h" @@ -229,9 +229,9 @@ void SceneTreeDock::_perform_instance_scenes(const Vector<String> &p_files, Node editor_data->get_undo_redo().add_undo_method(parent, "remove_child", instanced_scene); String new_name = parent->validate_child_name(instanced_scene); - ScriptEditorDebugger *sed = ScriptEditor::get_singleton()->get_debugger(); - editor_data->get_undo_redo().add_do_method(sed, "live_debug_instance_node", edited_scene->get_path_to(parent), p_files[i], new_name); - editor_data->get_undo_redo().add_undo_method(sed, "live_debug_remove_node", NodePath(String(edited_scene->get_path_to(parent)).plus_file(new_name))); + EditorDebuggerNode *ed = EditorDebuggerNode::get_singleton(); + editor_data->get_undo_redo().add_do_method(ed, "live_debug_instance_node", edited_scene->get_path_to(parent), p_files[i], new_name); + editor_data->get_undo_redo().add_undo_method(ed, "live_debug_remove_node", NodePath(String(edited_scene->get_path_to(parent)).plus_file(new_name))); } editor_data->get_undo_redo().commit_action(); @@ -591,10 +591,10 @@ void SceneTreeDock::_tool_selected(int p_tool, bool p_confirm_override) { editor_data->get_undo_redo().add_undo_method(parent, "remove_child", dup); editor_data->get_undo_redo().add_do_reference(dup); - ScriptEditorDebugger *sed = ScriptEditor::get_singleton()->get_debugger(); + EditorDebuggerNode *ed = EditorDebuggerNode::get_singleton(); - editor_data->get_undo_redo().add_do_method(sed, "live_debug_duplicate_node", edited_scene->get_path_to(node), dup->get_name()); - editor_data->get_undo_redo().add_undo_method(sed, "live_debug_remove_node", NodePath(String(edited_scene->get_path_to(parent)).plus_file(dup->get_name()))); + editor_data->get_undo_redo().add_do_method(ed, "live_debug_duplicate_node", edited_scene->get_path_to(node), dup->get_name()); + editor_data->get_undo_redo().add_undo_method(ed, "live_debug_remove_node", NodePath(String(edited_scene->get_path_to(parent)).plus_file(dup->get_name()))); } editor_data->get_undo_redo().commit_action(); @@ -972,7 +972,7 @@ void SceneTreeDock::_tool_selected(int p_tool, bool p_confirm_override) { new_node = Object::cast_to<Node>(ClassDB::instance(ScriptServer::get_global_class_native_base(name))); Ref<Script> script = ResourceLoader::load(ScriptServer::get_global_class_path(name), "Script"); if (new_node && script.is_valid()) { - new_node->set_script(script.get_ref_ptr()); + new_node->set_script(script); new_node->set_name(name); } } else { @@ -1046,18 +1046,18 @@ void SceneTreeDock::_notification(int p_what) { break; first_enter = false; - EditorFeatureProfileManager::get_singleton()->connect("current_feature_profile_changed", this, "_feature_profile_changed"); + EditorFeatureProfileManager::get_singleton()->connect_compat("current_feature_profile_changed", this, "_feature_profile_changed"); CanvasItemEditorPlugin *canvas_item_plugin = Object::cast_to<CanvasItemEditorPlugin>(editor_data->get_editor("2D")); if (canvas_item_plugin) { - canvas_item_plugin->get_canvas_item_editor()->connect("item_lock_status_changed", scene_tree, "_update_tree"); - canvas_item_plugin->get_canvas_item_editor()->connect("item_group_status_changed", scene_tree, "_update_tree"); - scene_tree->connect("node_changed", canvas_item_plugin->get_canvas_item_editor()->get_viewport_control(), "update"); + canvas_item_plugin->get_canvas_item_editor()->connect_compat("item_lock_status_changed", scene_tree, "_update_tree"); + canvas_item_plugin->get_canvas_item_editor()->connect_compat("item_group_status_changed", scene_tree, "_update_tree"); + scene_tree->connect_compat("node_changed", canvas_item_plugin->get_canvas_item_editor()->get_viewport_control(), "update"); } SpatialEditorPlugin *spatial_editor_plugin = Object::cast_to<SpatialEditorPlugin>(editor_data->get_editor("3D")); - spatial_editor_plugin->get_spatial_editor()->connect("item_lock_status_changed", scene_tree, "_update_tree"); - spatial_editor_plugin->get_spatial_editor()->connect("item_group_status_changed", scene_tree, "_update_tree"); + spatial_editor_plugin->get_spatial_editor()->connect_compat("item_lock_status_changed", scene_tree, "_update_tree"); + spatial_editor_plugin->get_spatial_editor()->connect_compat("item_group_status_changed", scene_tree, "_update_tree"); button_add->set_icon(get_icon("Add", "EditorIcons")); button_instance->set_icon(get_icon("Instance", "EditorIcons")); @@ -1067,8 +1067,8 @@ void SceneTreeDock::_notification(int p_what) { filter->set_right_icon(get_icon("Search", "EditorIcons")); filter->set_clear_button_enabled(true); - EditorNode::get_singleton()->get_editor_selection()->connect("selection_changed", this, "_selection_changed"); - scene_tree->get_scene_tree()->connect("item_collapsed", this, "_node_collapsed"); + EditorNode::get_singleton()->get_editor_selection()->connect_compat("selection_changed", this, "_selection_changed"); + scene_tree->get_scene_tree()->connect_compat("item_collapsed", this, "_node_collapsed"); // create_root_dialog HBoxContainer *top_row = memnew(HBoxContainer); @@ -1083,7 +1083,7 @@ void SceneTreeDock::_notification(int p_what) { node_shortcuts_toggle->set_toggle_mode(true); node_shortcuts_toggle->set_pressed(EDITOR_GET("_use_favorites_root_selection")); node_shortcuts_toggle->set_anchors_and_margins_preset(Control::PRESET_CENTER_RIGHT); - node_shortcuts_toggle->connect("pressed", this, "_update_create_root_dialog"); + node_shortcuts_toggle->connect_compat("pressed", this, "_update_create_root_dialog"); top_row->add_child(node_shortcuts_toggle); create_root_dialog->add_child(top_row); @@ -1099,18 +1099,18 @@ void SceneTreeDock::_notification(int p_what) { beginner_node_shortcuts->add_child(button_2d); button_2d->set_text(TTR("2D Scene")); button_2d->set_icon(get_icon("Node2D", "EditorIcons")); - button_2d->connect("pressed", this, "_tool_selected", make_binds(TOOL_CREATE_2D_SCENE, false)); + button_2d->connect_compat("pressed", this, "_tool_selected", make_binds(TOOL_CREATE_2D_SCENE, false)); button_3d = memnew(Button); beginner_node_shortcuts->add_child(button_3d); button_3d->set_text(TTR("3D Scene")); button_3d->set_icon(get_icon("Spatial", "EditorIcons")); - button_3d->connect("pressed", this, "_tool_selected", make_binds(TOOL_CREATE_3D_SCENE, false)); + button_3d->connect_compat("pressed", this, "_tool_selected", make_binds(TOOL_CREATE_3D_SCENE, false)); Button *button_ui = memnew(Button); beginner_node_shortcuts->add_child(button_ui); button_ui->set_text(TTR("User Interface")); button_ui->set_icon(get_icon("Control", "EditorIcons")); - button_ui->connect("pressed", this, "_tool_selected", make_binds(TOOL_CREATE_USER_INTERFACE, false)); + button_ui->connect_compat("pressed", this, "_tool_selected", make_binds(TOOL_CREATE_USER_INTERFACE, false)); VBoxContainer *favorite_node_shortcuts = memnew(VBoxContainer); favorite_node_shortcuts->set_name("FavoriteNodeShortcuts"); @@ -1120,7 +1120,7 @@ void SceneTreeDock::_notification(int p_what) { node_shortcuts->add_child(button_custom); button_custom->set_text(TTR("Other Node")); button_custom->set_icon(get_icon("Add", "EditorIcons")); - button_custom->connect("pressed", this, "_tool_selected", make_binds(TOOL_NEW, false)); + button_custom->connect_compat("pressed", this, "_tool_selected", make_binds(TOOL_NEW, false)); node_shortcuts->add_spacer(); create_root_dialog->add_child(node_shortcuts); @@ -1128,11 +1128,11 @@ void SceneTreeDock::_notification(int p_what) { } break; case NOTIFICATION_ENTER_TREE: { - clear_inherit_confirm->connect("confirmed", this, "_tool_selected", varray(TOOL_SCENE_CLEAR_INHERITANCE_CONFIRM)); + clear_inherit_confirm->connect_compat("confirmed", this, "_tool_selected", varray(TOOL_SCENE_CLEAR_INHERITANCE_CONFIRM)); } break; case NOTIFICATION_EXIT_TREE: { - clear_inherit_confirm->disconnect("confirmed", this, "_tool_selected"); + clear_inherit_confirm->disconnect_compat("confirmed", this, "_tool_selected"); } break; case EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED: { button_add->set_icon(get_icon("Add", "EditorIcons")); @@ -1584,7 +1584,7 @@ void SceneTreeDock::_do_reparent(Node *p_new_parent, int p_position_in_parent, V if (p_position_in_parent >= 0) editor_data->get_undo_redo().add_do_method(new_parent, "move_child", node, p_position_in_parent + inc); - ScriptEditorDebugger *sed = ScriptEditor::get_singleton()->get_debugger(); + EditorDebuggerNode *ed = EditorDebuggerNode::get_singleton(); String old_name = former_names[ni]; String new_name = new_parent->validate_child_name(node); @@ -1609,8 +1609,8 @@ void SceneTreeDock::_do_reparent(Node *p_new_parent, int p_position_in_parent, V path_renames[ni].second = fixed_node_path; } - editor_data->get_undo_redo().add_do_method(sed, "live_debug_reparent_node", edited_scene->get_path_to(node), edited_scene->get_path_to(new_parent), new_name, p_position_in_parent + inc); - editor_data->get_undo_redo().add_undo_method(sed, "live_debug_reparent_node", NodePath(String(edited_scene->get_path_to(new_parent)).plus_file(new_name)), edited_scene->get_path_to(node->get_parent()), node->get_name(), node->get_index()); + editor_data->get_undo_redo().add_do_method(ed, "live_debug_reparent_node", edited_scene->get_path_to(node), edited_scene->get_path_to(new_parent), new_name, p_position_in_parent + inc); + editor_data->get_undo_redo().add_undo_method(ed, "live_debug_reparent_node", NodePath(String(edited_scene->get_path_to(new_parent)).plus_file(new_name)), edited_scene->get_path_to(node->get_parent()), node->get_name(), node->get_index()); if (p_keep_global_xform) { if (Object::cast_to<Node2D>(node)) @@ -1725,7 +1725,7 @@ void SceneTreeDock::_script_created(Ref<Script> p_script) { for (List<Node *>::Element *E = selected.front(); E; E = E->next()) { Ref<Script> existing = E->get()->get_script(); - editor_data->get_undo_redo().add_do_method(E->get(), "set_script", p_script.get_ref_ptr()); + editor_data->get_undo_redo().add_do_method(E->get(), "set_script", p_script); editor_data->get_undo_redo().add_undo_method(E->get(), "set_script", existing); editor_data->get_undo_redo().add_do_method(this, "_update_script_button"); editor_data->get_undo_redo().add_undo_method(this, "_update_script_button"); @@ -1738,7 +1738,7 @@ void SceneTreeDock::_script_created(Ref<Script> p_script) { } void SceneTreeDock::_script_creation_closed() { - script_create_dialog->disconnect("script_created", this, "_script_created"); + script_create_dialog->disconnect_compat("script_created", this, "_script_created"); } void SceneTreeDock::_toggle_editable_children_from_selection() { @@ -1849,9 +1849,9 @@ void SceneTreeDock::_delete_confirm() { editor_data->get_undo_redo().add_undo_method(this, "_set_owners", edited_scene, owners); editor_data->get_undo_redo().add_undo_reference(n); - ScriptEditorDebugger *sed = ScriptEditor::get_singleton()->get_debugger(); - editor_data->get_undo_redo().add_do_method(sed, "live_debug_remove_and_keep_node", edited_scene->get_path_to(n), n->get_instance_id()); - editor_data->get_undo_redo().add_undo_method(sed, "live_debug_restore_node", n->get_instance_id(), edited_scene->get_path_to(n->get_parent()), n->get_index()); + EditorDebuggerNode *ed = EditorDebuggerNode::get_singleton(); + editor_data->get_undo_redo().add_do_method(ed, "live_debug_remove_and_keep_node", edited_scene->get_path_to(n), n->get_instance_id()); + editor_data->get_undo_redo().add_undo_method(ed, "live_debug_restore_node", n->get_instance_id(), edited_scene->get_path_to(n->get_parent()), n->get_index()); } } editor_data->get_undo_redo().commit_action(); @@ -1950,9 +1950,9 @@ void SceneTreeDock::_do_create(Node *p_parent) { editor_data->get_undo_redo().add_undo_method(p_parent, "remove_child", child); String new_name = p_parent->validate_child_name(child); - ScriptEditorDebugger *sed = ScriptEditor::get_singleton()->get_debugger(); - editor_data->get_undo_redo().add_do_method(sed, "live_debug_create_node", edited_scene->get_path_to(p_parent), child->get_class(), new_name); - editor_data->get_undo_redo().add_undo_method(sed, "live_debug_remove_node", NodePath(String(edited_scene->get_path_to(p_parent)).plus_file(new_name))); + EditorDebuggerNode *ed = EditorDebuggerNode::get_singleton(); + editor_data->get_undo_redo().add_do_method(ed, "live_debug_create_node", edited_scene->get_path_to(p_parent), child->get_class(), new_name); + editor_data->get_undo_redo().add_undo_method(ed, "live_debug_remove_node", NodePath(String(edited_scene->get_path_to(p_parent)).plus_file(new_name))); } else { @@ -2113,7 +2113,7 @@ void SceneTreeDock::replace_node(Node *p_node, Node *p_by_node, bool p_keep_prop Object::Connection &c = F->get(); if (!(c.flags & Object::CONNECT_PERSIST)) continue; - newnode->connect(c.signal, c.target, c.method, c.binds, Object::CONNECT_PERSIST); + newnode->connect_compat(c.signal.get_name(), c.callable.get_object(), c.callable.get_method(), c.binds, Object::CONNECT_PERSIST); } } @@ -2371,7 +2371,7 @@ void SceneTreeDock::_add_children_to_popup(Object *p_obj, int p_depth) { if (!obj) continue; - Ref<Texture> icon = EditorNode::get_singleton()->get_object_icon(obj); + Ref<Texture2D> icon = EditorNode::get_singleton()->get_object_icon(obj); if (menu->get_item_count() == 0) { menu->add_submenu_item(TTR("Sub-Resources"), "Sub-Resources"); @@ -2410,7 +2410,7 @@ void SceneTreeDock::_tree_rmb(const Vector2 &p_menu_pos) { menu->clear(); Ref<Script> existing_script; - bool exisiting_script_removable = true; + bool existing_script_removable = true; if (selection.size() == 1) { Node *selected = selection[0]; @@ -2432,7 +2432,7 @@ void SceneTreeDock::_tree_rmb(const Vector2 &p_menu_pos) { existing_script = selected->get_script(); if (EditorNode::get_singleton()->get_object_custom_type_base(selected) == existing_script) { - exisiting_script_removable = false; + existing_script_removable = false; } } @@ -2446,7 +2446,7 @@ void SceneTreeDock::_tree_rmb(const Vector2 &p_menu_pos) { menu->add_icon_shortcut(get_icon("ScriptExtend", "EditorIcons"), ED_GET_SHORTCUT("scene_tree/extend_script"), TOOL_EXTEND_SCRIPT); } } - if (existing_script.is_valid() && exisiting_script_removable) { + if (existing_script.is_valid() && existing_script_removable) { add_separator = true; menu->add_icon_shortcut(get_icon("ScriptRemove", "EditorIcons"), ED_GET_SHORTCUT("scene_tree/clear_script"), TOOL_CLEAR_SCRIPT); } else if (full_selection.size() > 1) { @@ -2616,8 +2616,8 @@ void SceneTreeDock::attach_script_to_selected(bool p_extend) { } } - script_create_dialog->connect("script_created", this, "_script_created"); - script_create_dialog->connect("popup_hide", this, "_script_creation_closed", varray(), CONNECT_ONESHOT); + script_create_dialog->connect_compat("script_created", this, "_script_created"); + script_create_dialog->connect_compat("popup_hide", this, "_script_creation_closed", varray(), CONNECT_ONESHOT); script_create_dialog->set_inheritance_base_type("Node"); script_create_dialog->config(inherits, path); script_create_dialog->popup_centered(); @@ -2719,7 +2719,7 @@ void SceneTreeDock::_update_create_root_dialog() { if (ScriptServer::is_global_class(name)) name = ScriptServer::get_global_class_native_base(name); button->set_icon(EditorNode::get_singleton()->get_class_icon(name)); - button->connect("pressed", this, "_favorite_root_selected", make_binds(l)); + button->connect_compat("pressed", this, "_favorite_root_selected", make_binds(l)); } } @@ -2850,13 +2850,13 @@ SceneTreeDock::SceneTreeDock(EditorNode *p_editor, Node *p_scene_root, EditorSel ED_SHORTCUT("scene_tree/delete", TTR("Delete"), KEY_DELETE); button_add = memnew(ToolButton); - button_add->connect("pressed", this, "_tool_selected", make_binds(TOOL_NEW, false)); + button_add->connect_compat("pressed", this, "_tool_selected", make_binds(TOOL_NEW, false)); button_add->set_tooltip(TTR("Add/Create a New Node.")); button_add->set_shortcut(ED_GET_SHORTCUT("scene_tree/add_child_node")); filter_hbc->add_child(button_add); button_instance = memnew(ToolButton); - button_instance->connect("pressed", this, "_tool_selected", make_binds(TOOL_INSTANCE, false)); + button_instance->connect_compat("pressed", this, "_tool_selected", make_binds(TOOL_INSTANCE, false)); button_instance->set_tooltip(TTR("Instance a scene file as a Node. Creates an inherited scene if no root node exists.")); button_instance->set_shortcut(ED_GET_SHORTCUT("scene_tree/instance_scene")); filter_hbc->add_child(button_instance); @@ -2867,17 +2867,17 @@ SceneTreeDock::SceneTreeDock(EditorNode *p_editor, Node *p_scene_root, EditorSel filter->set_placeholder(TTR("Filter nodes")); filter_hbc->add_child(filter); filter->add_constant_override("minimum_spaces", 0); - filter->connect("text_changed", this, "_filter_changed"); + filter->connect_compat("text_changed", this, "_filter_changed"); button_create_script = memnew(ToolButton); - button_create_script->connect("pressed", this, "_tool_selected", make_binds(TOOL_ATTACH_SCRIPT, false)); + button_create_script->connect_compat("pressed", this, "_tool_selected", make_binds(TOOL_ATTACH_SCRIPT, false)); button_create_script->set_tooltip(TTR("Attach a new or existing script for the selected node.")); button_create_script->set_shortcut(ED_GET_SHORTCUT("scene_tree/attach_script")); filter_hbc->add_child(button_create_script); button_create_script->hide(); button_clear_script = memnew(ToolButton); - button_clear_script->connect("pressed", this, "_tool_selected", make_binds(TOOL_CLEAR_SCRIPT, false)); + button_clear_script->connect_compat("pressed", this, "_tool_selected", make_binds(TOOL_CLEAR_SCRIPT, false)); button_clear_script->set_tooltip(TTR("Clear a script for the selected node.")); button_clear_script->set_shortcut(ED_GET_SHORTCUT("scene_tree/clear_script")); filter_hbc->add_child(button_clear_script); @@ -2891,14 +2891,14 @@ SceneTreeDock::SceneTreeDock(EditorNode *p_editor, Node *p_scene_root, EditorSel edit_remote->set_h_size_flags(SIZE_EXPAND_FILL); edit_remote->set_text(TTR("Remote")); edit_remote->set_toggle_mode(true); - edit_remote->connect("pressed", this, "_remote_tree_selected"); + edit_remote->connect_compat("pressed", this, "_remote_tree_selected"); edit_local = memnew(ToolButton); button_hb->add_child(edit_local); edit_local->set_h_size_flags(SIZE_EXPAND_FILL); edit_local->set_text(TTR("Local")); edit_local->set_toggle_mode(true); - edit_local->connect("pressed", this, "_local_tree_selected"); + edit_local->connect_compat("pressed", this, "_local_tree_selected"); remote_tree = NULL; button_hb->hide(); @@ -2911,19 +2911,19 @@ SceneTreeDock::SceneTreeDock(EditorNode *p_editor, Node *p_scene_root, EditorSel vbc->add_child(scene_tree); scene_tree->set_v_size_flags(SIZE_EXPAND | SIZE_FILL); - scene_tree->connect("rmb_pressed", this, "_tree_rmb"); + scene_tree->connect_compat("rmb_pressed", this, "_tree_rmb"); - scene_tree->connect("node_selected", this, "_node_selected", varray(), CONNECT_DEFERRED); - scene_tree->connect("node_renamed", this, "_node_renamed", varray(), CONNECT_DEFERRED); - scene_tree->connect("node_prerename", this, "_node_prerenamed"); - scene_tree->connect("open", this, "_load_request"); - scene_tree->connect("open_script", this, "_script_open_request"); - scene_tree->connect("nodes_rearranged", this, "_nodes_dragged"); - scene_tree->connect("files_dropped", this, "_files_dropped"); - scene_tree->connect("script_dropped", this, "_script_dropped"); - scene_tree->connect("nodes_dragged", this, "_nodes_drag_begin"); + scene_tree->connect_compat("node_selected", this, "_node_selected", varray(), CONNECT_DEFERRED); + scene_tree->connect_compat("node_renamed", this, "_node_renamed", varray(), CONNECT_DEFERRED); + scene_tree->connect_compat("node_prerename", this, "_node_prerenamed"); + scene_tree->connect_compat("open", this, "_load_request"); + scene_tree->connect_compat("open_script", this, "_script_open_request"); + scene_tree->connect_compat("nodes_rearranged", this, "_nodes_dragged"); + scene_tree->connect_compat("files_dropped", this, "_files_dropped"); + scene_tree->connect_compat("script_dropped", this, "_script_dropped"); + scene_tree->connect_compat("nodes_dragged", this, "_nodes_drag_begin"); - scene_tree->get_scene_tree()->connect("item_double_clicked", this, "_focus_node"); + scene_tree->get_scene_tree()->connect_compat("item_double_clicked", this, "_focus_node"); scene_tree->set_undo_redo(&editor_data->get_undo_redo()); scene_tree->set_editor_selection(editor_selection); @@ -2931,8 +2931,8 @@ SceneTreeDock::SceneTreeDock(EditorNode *p_editor, Node *p_scene_root, EditorSel create_dialog = memnew(CreateDialog); create_dialog->set_base_type("Node"); add_child(create_dialog); - create_dialog->connect("create", this, "_create"); - create_dialog->connect("favorites_updated", this, "_update_create_root_dialog"); + create_dialog->connect_compat("create", this, "_create"); + create_dialog->connect_compat("favorites_updated", this, "_update_create_root_dialog"); rename_dialog = memnew(RenameDialog(scene_tree, &editor_data->get_undo_redo())); add_child(rename_dialog); @@ -2943,44 +2943,44 @@ SceneTreeDock::SceneTreeDock(EditorNode *p_editor, Node *p_scene_root, EditorSel reparent_dialog = memnew(ReparentDialog); add_child(reparent_dialog); - reparent_dialog->connect("reparent", this, "_node_reparent"); + reparent_dialog->connect_compat("reparent", this, "_node_reparent"); accept = memnew(AcceptDialog); add_child(accept); quick_open = memnew(EditorQuickOpen); add_child(quick_open); - quick_open->connect("quick_open", this, "_quick_open"); + quick_open->connect_compat("quick_open", this, "_quick_open"); set_process_unhandled_key_input(true); delete_dialog = memnew(ConfirmationDialog); add_child(delete_dialog); - delete_dialog->connect("confirmed", this, "_delete_confirm"); + delete_dialog->connect_compat("confirmed", this, "_delete_confirm"); editable_instance_remove_dialog = memnew(ConfirmationDialog); add_child(editable_instance_remove_dialog); - editable_instance_remove_dialog->connect("confirmed", this, "_toggle_editable_children_from_selection"); + editable_instance_remove_dialog->connect_compat("confirmed", this, "_toggle_editable_children_from_selection"); placeholder_editable_instance_remove_dialog = memnew(ConfirmationDialog); add_child(placeholder_editable_instance_remove_dialog); - placeholder_editable_instance_remove_dialog->connect("confirmed", this, "_toggle_placeholder_from_selection"); + placeholder_editable_instance_remove_dialog->connect_compat("confirmed", this, "_toggle_placeholder_from_selection"); import_subscene_dialog = memnew(EditorSubScene); add_child(import_subscene_dialog); - import_subscene_dialog->connect("subscene_selected", this, "_import_subscene"); + import_subscene_dialog->connect_compat("subscene_selected", this, "_import_subscene"); new_scene_from_dialog = memnew(EditorFileDialog); new_scene_from_dialog->set_mode(EditorFileDialog::MODE_SAVE_FILE); add_child(new_scene_from_dialog); - new_scene_from_dialog->connect("file_selected", this, "_new_scene_from"); + new_scene_from_dialog->connect_compat("file_selected", this, "_new_scene_from"); menu = memnew(PopupMenu); add_child(menu); - menu->connect("id_pressed", this, "_tool_selected"); + menu->connect_compat("id_pressed", this, "_tool_selected"); menu->set_hide_on_window_lose_focus(true); menu_subresources = memnew(PopupMenu); menu_subresources->set_name("Sub-Resources"); - menu_subresources->connect("id_pressed", this, "_tool_selected"); + menu_subresources->connect_compat("id_pressed", this, "_tool_selected"); menu->add_child(menu_subresources); first_enter = true; restore_script_editor_on_drag = false; diff --git a/editor/scene_tree_editor.cpp b/editor/scene_tree_editor.cpp index c49ea72e99..ff8eaa8897 100644 --- a/editor/scene_tree_editor.cpp +++ b/editor/scene_tree_editor.cpp @@ -70,10 +70,9 @@ void SceneTreeEditor::_cell_button_pressed(Object *p_item, int p_column, int p_i emit_signal("open", n->get_filename()); } } else if (p_id == BUTTON_SCRIPT) { - RefPtr script = n->get_script(); - Ref<Script> script_typed = script; + Ref<Script> script_typed = n->get_script(); if (!script_typed.is_null()) - emit_signal("open_script", script); + emit_signal("open_script", script_typed); } else if (p_id == BUTTON_VISIBILITY) { undo_redo->create_action(TTR("Toggle Visible")); @@ -187,25 +186,17 @@ bool SceneTreeEditor::_add_nodes(Node *p_node, TreeItem *p_parent) { TreeItem *item = tree->create_item(p_parent); item->set_text(0, p_node->get_name()); - if (can_rename && !part_of_subscene /*(p_node->get_owner() == get_scene_node() || p_node==get_scene_node())*/) + if (can_rename && !part_of_subscene) item->set_editable(0, true); item->set_selectable(0, true); if (can_rename) { -#ifndef DISABLE_DEPRECATED - if (p_node->has_meta("_editor_collapsed")) { - //remove previous way of storing folding, which did not get along with scene inheritance and instancing - if ((bool)p_node->get_meta("_editor_collapsed")) - p_node->set_display_folded(true); - p_node->set_meta("_editor_collapsed", Variant()); - } -#endif bool collapsed = p_node->is_displayed_folded(); if (collapsed) item->set_collapsed(true); } - Ref<Texture> icon = EditorNode::get_singleton()->get_object_icon(p_node, "Node"); + Ref<Texture2D> icon = EditorNode::get_singleton()->get_object_icon(p_node, "Node"); item->set_icon(0, icon); item->set_metadata(0, p_node->get_path()); @@ -332,8 +323,8 @@ bool SceneTreeEditor::_add_nodes(Node *p_node, TreeItem *p_parent) { if (can_open_instance && undo_redo) { //Show buttons only when necessary(SceneTreeDock) to avoid crashes - if (!p_node->is_connected("script_changed", this, "_node_script_changed")) - p_node->connect("script_changed", this, "_node_script_changed", varray(p_node)); + if (!p_node->is_connected_compat("script_changed", this, "_node_script_changed")) + p_node->connect_compat("script_changed", this, "_node_script_changed", varray(p_node)); Ref<Script> script = p_node->get_script(); if (!script.is_null()) { @@ -359,8 +350,8 @@ bool SceneTreeEditor::_add_nodes(Node *p_node, TreeItem *p_parent) { else item->add_button(0, get_icon("GuiVisibilityHidden", "EditorIcons"), BUTTON_VISIBILITY, false, TTR("Toggle Visibility")); - if (!p_node->is_connected("visibility_changed", this, "_node_visibility_changed")) - p_node->connect("visibility_changed", this, "_node_visibility_changed", varray(p_node)); + if (!p_node->is_connected_compat("visibility_changed", this, "_node_visibility_changed")) + p_node->connect_compat("visibility_changed", this, "_node_visibility_changed", varray(p_node)); _update_visibility_color(p_node, item); } else if (p_node->is_class("Spatial")) { @@ -379,8 +370,8 @@ bool SceneTreeEditor::_add_nodes(Node *p_node, TreeItem *p_parent) { else item->add_button(0, get_icon("GuiVisibilityHidden", "EditorIcons"), BUTTON_VISIBILITY, false, TTR("Toggle Visibility")); - if (!p_node->is_connected("visibility_changed", this, "_node_visibility_changed")) - p_node->connect("visibility_changed", this, "_node_visibility_changed", varray(p_node)); + if (!p_node->is_connected_compat("visibility_changed", this, "_node_visibility_changed")) + p_node->connect_compat("visibility_changed", this, "_node_visibility_changed", varray(p_node)); _update_visibility_color(p_node, item); } else if (p_node->is_class("AnimationPlayer")) { @@ -497,21 +488,6 @@ void SceneTreeEditor::_node_script_changed(Node *p_node) { MessageQueue::get_singleton()->push_call(this, "_update_tree"); tree_dirty = true; - /* - changes the order :| - TreeItem* item=p_node?_find(tree->get_root(),p_node->get_path()):NULL; - if (p_node->get_script().is_null()) { - - int idx=item->get_button_by_id(0,2); - if (idx>=0) - item->erase_button(0,idx); - } else { - - int idx=item->get_button_by_id(0,2); - if (idx<0) - item->add_button(0,get_icon("Script","EditorIcons"),2); - - }*/ } void SceneTreeEditor::_node_removed(Node *p_node) { @@ -519,12 +495,12 @@ void SceneTreeEditor::_node_removed(Node *p_node) { if (EditorNode::get_singleton()->is_exiting()) return; //speed up exit - if (p_node->is_connected("script_changed", this, "_node_script_changed")) - p_node->disconnect("script_changed", this, "_node_script_changed"); + if (p_node->is_connected_compat("script_changed", this, "_node_script_changed")) + p_node->disconnect_compat("script_changed", this, "_node_script_changed"); if (p_node->is_class("Spatial") || p_node->is_class("CanvasItem")) { - if (p_node->is_connected("visibility_changed", this, "_node_visibility_changed")) - p_node->disconnect("visibility_changed", this, "_node_visibility_changed"); + if (p_node->is_connected_compat("visibility_changed", this, "_node_visibility_changed")) + p_node->disconnect_compat("visibility_changed", this, "_node_visibility_changed"); } if (p_node == selected) { @@ -664,22 +640,22 @@ void SceneTreeEditor::_notification(int p_what) { switch (p_what) { case NOTIFICATION_ENTER_TREE: { - get_tree()->connect("tree_changed", this, "_tree_changed"); - get_tree()->connect("node_removed", this, "_node_removed"); - get_tree()->connect("node_renamed", this, "_node_renamed"); - get_tree()->connect("node_configuration_warning_changed", this, "_warning_changed"); + get_tree()->connect_compat("tree_changed", this, "_tree_changed"); + get_tree()->connect_compat("node_removed", this, "_node_removed"); + get_tree()->connect_compat("node_renamed", this, "_node_renamed"); + get_tree()->connect_compat("node_configuration_warning_changed", this, "_warning_changed"); - tree->connect("item_collapsed", this, "_cell_collapsed"); + tree->connect_compat("item_collapsed", this, "_cell_collapsed"); _update_tree(); } break; case NOTIFICATION_EXIT_TREE: { - get_tree()->disconnect("tree_changed", this, "_tree_changed"); - get_tree()->disconnect("node_removed", this, "_node_removed"); - get_tree()->disconnect("node_renamed", this, "_node_renamed"); - tree->disconnect("item_collapsed", this, "_cell_collapsed"); - get_tree()->disconnect("node_configuration_warning_changed", this, "_warning_changed"); + get_tree()->disconnect_compat("tree_changed", this, "_tree_changed"); + get_tree()->disconnect_compat("node_removed", this, "_node_removed"); + get_tree()->disconnect_compat("node_renamed", this, "_node_renamed"); + tree->disconnect_compat("item_collapsed", this, "_cell_collapsed"); + get_tree()->disconnect_compat("node_configuration_warning_changed", this, "_warning_changed"); } break; case NOTIFICATION_THEME_CHANGED: { @@ -860,7 +836,7 @@ void SceneTreeEditor::set_editor_selection(EditorSelection *p_selection) { editor_selection = p_selection; tree->set_select_mode(Tree::SELECT_MULTI); tree->set_cursor_can_exit_tree(false); - editor_selection->connect("selection_changed", this, "_selection_changed"); + editor_selection->connect_compat("selection_changed", this, "_selection_changed"); } void SceneTreeEditor::_update_selection(TreeItem *item) { @@ -929,7 +905,7 @@ Variant SceneTreeEditor::get_drag_data_fw(const Point2 &p_point, Control *p_from return Variant(); //not editable tree Vector<Node *> selected; - Vector<Ref<Texture> > icons; + Vector<Ref<Texture2D> > icons; TreeItem *next = tree->get_next_selected(NULL); while (next) { @@ -1144,7 +1120,7 @@ void SceneTreeEditor::_bind_methods() { ADD_SIGNAL(MethodInfo("node_changed")); ADD_SIGNAL(MethodInfo("nodes_dragged")); ADD_SIGNAL(MethodInfo("nodes_rearranged", PropertyInfo(Variant::ARRAY, "paths"), PropertyInfo(Variant::NODE_PATH, "to_path"), PropertyInfo(Variant::INT, "type"))); - ADD_SIGNAL(MethodInfo("files_dropped", PropertyInfo(Variant::POOL_STRING_ARRAY, "files"), PropertyInfo(Variant::NODE_PATH, "to_path"), PropertyInfo(Variant::INT, "type"))); + ADD_SIGNAL(MethodInfo("files_dropped", PropertyInfo(Variant::PACKED_STRING_ARRAY, "files"), PropertyInfo(Variant::NODE_PATH, "to_path"), PropertyInfo(Variant::INT, "type"))); ADD_SIGNAL(MethodInfo("script_dropped", PropertyInfo(Variant::STRING, "file"), PropertyInfo(Variant::NODE_PATH, "to_path"))); ADD_SIGNAL(MethodInfo("rmb_pressed", PropertyInfo(Variant::VECTOR2, "position"))); @@ -1187,15 +1163,15 @@ SceneTreeEditor::SceneTreeEditor(bool p_label, bool p_can_rename, bool p_can_ope tree->set_drag_forwarding(this); if (p_can_rename) { tree->set_allow_rmb_select(true); - tree->connect("item_rmb_selected", this, "_rmb_select"); - tree->connect("empty_tree_rmb_selected", this, "_rmb_select"); + tree->connect_compat("item_rmb_selected", this, "_rmb_select"); + tree->connect_compat("empty_tree_rmb_selected", this, "_rmb_select"); } - tree->connect("cell_selected", this, "_selected_changed"); - tree->connect("item_edited", this, "_renamed", varray(), CONNECT_DEFERRED); - tree->connect("multi_selected", this, "_cell_multi_selected"); - tree->connect("button_pressed", this, "_cell_button_pressed"); - tree->connect("nothing_selected", this, "_deselect_items"); + tree->connect_compat("cell_selected", this, "_selected_changed"); + tree->connect_compat("item_edited", this, "_renamed", varray(), CONNECT_DEFERRED); + tree->connect_compat("multi_selected", this, "_cell_multi_selected"); + tree->connect_compat("button_pressed", this, "_cell_button_pressed"); + tree->connect_compat("nothing_selected", this, "_deselect_items"); //tree->connect("item_edited", this,"_renamed",Vector<Variant>(),true); error = memnew(AcceptDialog); @@ -1213,7 +1189,7 @@ SceneTreeEditor::SceneTreeEditor(bool p_label, bool p_can_rename, bool p_can_ope blocked = 0; update_timer = memnew(Timer); - update_timer->connect("timeout", this, "_update_tree"); + update_timer->connect_compat("timeout", this, "_update_tree"); update_timer->set_one_shot(true); update_timer->set_wait_time(0.5); add_child(update_timer); @@ -1233,12 +1209,12 @@ void SceneTreeDialog::_notification(int p_what) { switch (p_what) { case NOTIFICATION_ENTER_TREE: { - connect("confirmed", this, "_select"); + connect_compat("confirmed", this, "_select"); filter->set_right_icon(get_icon("Search", "EditorIcons")); filter->set_clear_button_enabled(true); } break; case NOTIFICATION_EXIT_TREE: { - disconnect("confirmed", this, "_select"); + disconnect_compat("confirmed", this, "_select"); } break; case NOTIFICATION_VISIBILITY_CHANGED: { if (is_visible_in_tree()) @@ -1283,12 +1259,12 @@ SceneTreeDialog::SceneTreeDialog() { filter->set_h_size_flags(SIZE_EXPAND_FILL); filter->set_placeholder(TTR("Filter nodes")); filter->add_constant_override("minimum_spaces", 0); - filter->connect("text_changed", this, "_filter_changed"); + filter->connect_compat("text_changed", this, "_filter_changed"); vbc->add_child(filter); tree = memnew(SceneTreeEditor(false, false, true)); tree->set_v_size_flags(SIZE_EXPAND_FILL); - tree->get_scene_tree()->connect("item_activated", this, "_select"); + tree->get_scene_tree()->connect_compat("item_activated", this, "_select"); vbc->add_child(tree); } diff --git a/editor/script_create_dialog.cpp b/editor/script_create_dialog.cpp index c4627e6627..ca4baffe84 100644 --- a/editor/script_create_dialog.cpp +++ b/editor/script_create_dialog.cpp @@ -47,15 +47,14 @@ void ScriptCreateDialog::_notification(int p_what) { case NOTIFICATION_ENTER_TREE: { for (int i = 0; i < ScriptServer::get_language_count(); i++) { String lang = ScriptServer::get_language(i)->get_type(); - Ref<Texture> lang_icon = get_icon(lang, "EditorIcons"); + Ref<Texture2D> lang_icon = get_icon(lang, "EditorIcons"); if (lang_icon.is_valid()) { language_menu->set_item_icon(i, lang_icon); } } + String last_lang = EditorSettings::get_singleton()->get_project_metadata("script_setup", "last_selected_language", ""); - Ref<Texture> last_lang_icon; if (!last_lang.empty()) { - for (int i = 0; i < language_menu->get_item_count(); i++) { if (language_menu->get_item_text(i) == last_lang) { language_menu->select(i); @@ -63,14 +62,10 @@ void ScriptCreateDialog::_notification(int p_what) { break; } } - - last_lang_icon = get_icon(last_lang, "EditorIcons"); } else { - last_lang_icon = language_menu->get_item_icon(default_language); - } - if (last_lang_icon.is_valid()) { - language_menu->set_icon(last_lang_icon); + language_menu->select(default_language); } + path_button->set_icon(get_icon("Folder", "EditorIcons")); parent_browse_button->set_icon(get_icon("Folder", "EditorIcons")); parent_search_button->set_icon(get_icon("ClassList", "EditorIcons")); @@ -337,7 +332,7 @@ void ScriptCreateDialog::_load_exist() { return; } - emit_signal("script_created", p_script.get_ref_ptr()); + emit_signal("script_created", p_script); hide(); } @@ -809,7 +804,7 @@ ScriptCreateDialog::ScriptCreateDialog() { language_menu->select(default_language); current_language = default_language; - language_menu->connect("item_selected", this, "_lang_changed"); + language_menu->connect_compat("item_selected", this, "_lang_changed"); /* Inherits */ @@ -818,16 +813,16 @@ ScriptCreateDialog::ScriptCreateDialog() { hb = memnew(HBoxContainer); hb->set_h_size_flags(SIZE_EXPAND_FILL); parent_name = memnew(LineEdit); - parent_name->connect("text_changed", this, "_parent_name_changed"); + parent_name->connect_compat("text_changed", this, "_parent_name_changed"); parent_name->set_h_size_flags(SIZE_EXPAND_FILL); hb->add_child(parent_name); parent_search_button = memnew(Button); parent_search_button->set_flat(true); - parent_search_button->connect("pressed", this, "_browse_class_in_tree"); + parent_search_button->connect_compat("pressed", this, "_browse_class_in_tree"); hb->add_child(parent_search_button); parent_browse_button = memnew(Button); parent_browse_button->set_flat(true); - parent_browse_button->connect("pressed", this, "_browse_path", varray(true, false)); + parent_browse_button->connect_compat("pressed", this, "_browse_path", varray(true, false)); hb->add_child(parent_browse_button); gc->add_child(memnew(Label(TTR("Inherits:")))); gc->add_child(hb); @@ -836,7 +831,7 @@ ScriptCreateDialog::ScriptCreateDialog() { /* Class Name */ class_name = memnew(LineEdit); - class_name->connect("text_changed", this, "_class_name_changed"); + class_name->connect_compat("text_changed", this, "_class_name_changed"); class_name->set_h_size_flags(SIZE_EXPAND_FILL); gc->add_child(memnew(Label(TTR("Class Name:")))); gc->add_child(class_name); @@ -846,28 +841,28 @@ ScriptCreateDialog::ScriptCreateDialog() { template_menu = memnew(OptionButton); gc->add_child(memnew(Label(TTR("Template:")))); gc->add_child(template_menu); - template_menu->connect("item_selected", this, "_template_changed"); + template_menu->connect_compat("item_selected", this, "_template_changed"); /* Built-in Script */ internal = memnew(CheckBox); internal->set_text(TTR("On")); - internal->connect("pressed", this, "_built_in_pressed"); + internal->connect_compat("pressed", this, "_built_in_pressed"); gc->add_child(memnew(Label(TTR("Built-in Script:")))); gc->add_child(internal); /* Path */ hb = memnew(HBoxContainer); - hb->connect("sort_children", this, "_path_hbox_sorted"); + hb->connect_compat("sort_children", this, "_path_hbox_sorted"); file_path = memnew(LineEdit); - file_path->connect("text_changed", this, "_path_changed"); - file_path->connect("text_entered", this, "_path_entered"); + file_path->connect_compat("text_changed", this, "_path_changed"); + file_path->connect_compat("text_entered", this, "_path_entered"); file_path->set_h_size_flags(SIZE_EXPAND_FILL); hb->add_child(file_path); path_button = memnew(Button); path_button->set_flat(true); - path_button->connect("pressed", this, "_browse_path", varray(false, true)); + path_button->connect_compat("pressed", this, "_browse_path", varray(false, true)); hb->add_child(path_button); gc->add_child(memnew(Label(TTR("Path:")))); gc->add_child(hb); @@ -876,11 +871,11 @@ ScriptCreateDialog::ScriptCreateDialog() { /* Dialog Setup */ select_class = memnew(CreateDialog); - select_class->connect("create", this, "_create"); + select_class->connect_compat("create", this, "_create"); add_child(select_class); file_browse = memnew(EditorFileDialog); - file_browse->connect("file_selected", this, "_file_selected"); + file_browse->connect_compat("file_selected", this, "_file_selected"); file_browse->set_mode(EditorFileDialog::MODE_OPEN_FILE); add_child(file_browse); get_ok()->set_text(TTR("Create")); diff --git a/editor/script_editor_debugger.cpp b/editor/script_editor_debugger.cpp deleted file mode 100644 index 34547717fd..0000000000 --- a/editor/script_editor_debugger.cpp +++ /dev/null @@ -1,2640 +0,0 @@ -/*************************************************************************/ -/* script_editor_debugger.cpp */ -/*************************************************************************/ -/* This file is part of: */ -/* GODOT ENGINE */ -/* https://godotengine.org */ -/*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ -/* */ -/* Permission is hereby granted, free of charge, to any person obtaining */ -/* a copy of this software and associated documentation files (the */ -/* "Software"), to deal in the Software without restriction, including */ -/* without limitation the rights to use, copy, modify, merge, publish, */ -/* distribute, sublicense, and/or sell copies of the Software, and to */ -/* permit persons to whom the Software is furnished to do so, subject to */ -/* the following conditions: */ -/* */ -/* The above copyright notice and this permission notice shall be */ -/* included in all copies or substantial portions of the Software. */ -/* */ -/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ -/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ -/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ -/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ -/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ -/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ -/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -/*************************************************************************/ - -#include "script_editor_debugger.h" - -#include "core/io/marshalls.h" -#include "core/project_settings.h" -#include "core/ustring.h" -#include "editor/plugins/canvas_item_editor_plugin.h" -#include "editor/plugins/spatial_editor_plugin.h" -#include "editor_log.h" -#include "editor_network_profiler.h" -#include "editor_node.h" -#include "editor_profiler.h" -#include "editor_scale.h" -#include "editor_settings.h" -#include "main/performance.h" -#include "property_editor.h" -#include "scene/gui/dialogs.h" -#include "scene/gui/label.h" -#include "scene/gui/line_edit.h" -#include "scene/gui/margin_container.h" -#include "scene/gui/rich_text_label.h" -#include "scene/gui/separator.h" -#include "scene/gui/split_container.h" -#include "scene/gui/tab_container.h" -#include "scene/gui/texture_button.h" -#include "scene/gui/tree.h" -#include "scene/resources/packed_scene.h" - -class ScriptEditorDebuggerVariables : public Object { - - GDCLASS(ScriptEditorDebuggerVariables, Object); - - List<PropertyInfo> props; - Map<StringName, Variant> values; - -protected: - bool _set(const StringName &p_name, const Variant &p_value) { - - return false; - } - - bool _get(const StringName &p_name, Variant &r_ret) const { - - if (!values.has(p_name)) - return false; - r_ret = values[p_name]; - return true; - } - void _get_property_list(List<PropertyInfo> *p_list) const { - - for (const List<PropertyInfo>::Element *E = props.front(); E; E = E->next()) - p_list->push_back(E->get()); - } - -public: - void clear() { - - props.clear(); - values.clear(); - } - - String get_var_value(const String &p_var) const { - - for (Map<StringName, Variant>::Element *E = values.front(); E; E = E->next()) { - String v = E->key().operator String().get_slice("/", 1); - if (v == p_var) - return E->get(); - } - - return ""; - } - - void add_property(const String &p_name, const Variant &p_value, const PropertyHint &p_hint, const String p_hint_string) { - - PropertyInfo pinfo; - pinfo.name = p_name; - pinfo.type = p_value.get_type(); - pinfo.hint = p_hint; - pinfo.hint_string = p_hint_string; - props.push_back(pinfo); - values[p_name] = p_value; - } - - void update() { - _change_notify(); - } - - ScriptEditorDebuggerVariables() { - } -}; - -class ScriptEditorDebuggerInspectedObject : public Object { - - GDCLASS(ScriptEditorDebuggerInspectedObject, Object); - -protected: - bool _set(const StringName &p_name, const Variant &p_value) { - - if (!prop_values.has(p_name) || String(p_name).begins_with("Constants/")) - return false; - - prop_values[p_name] = p_value; - emit_signal("value_edited", p_name, p_value); - return true; - } - - bool _get(const StringName &p_name, Variant &r_ret) const { - - if (!prop_values.has(p_name)) - return false; - - r_ret = prop_values[p_name]; - return true; - } - - void _get_property_list(List<PropertyInfo> *p_list) const { - - p_list->clear(); //sorry, no want category - for (const List<PropertyInfo>::Element *E = prop_list.front(); E; E = E->next()) { - p_list->push_back(E->get()); - } - } - - static void _bind_methods() { - - ClassDB::bind_method(D_METHOD("get_title"), &ScriptEditorDebuggerInspectedObject::get_title); - ClassDB::bind_method(D_METHOD("get_variant"), &ScriptEditorDebuggerInspectedObject::get_variant); - ClassDB::bind_method(D_METHOD("clear"), &ScriptEditorDebuggerInspectedObject::clear); - ClassDB::bind_method(D_METHOD("get_remote_object_id"), &ScriptEditorDebuggerInspectedObject::get_remote_object_id); - - ADD_SIGNAL(MethodInfo("value_edited")); - } - -public: - String type_name; - ObjectID remote_object_id; - List<PropertyInfo> prop_list; - Map<StringName, Variant> prop_values; - - ObjectID get_remote_object_id() { - return remote_object_id; - } - - String get_title() { - if (remote_object_id) - return TTR("Remote ") + String(type_name) + ": " + itos(remote_object_id); - else - return "<null>"; - } - Variant get_variant(const StringName &p_name) { - - Variant var; - _get(p_name, var); - return var; - } - - void clear() { - - prop_list.clear(); - prop_values.clear(); - } - void update() { - _change_notify(); - } - void update_single(const char *p_prop) { - _change_notify(p_prop); - } - - ScriptEditorDebuggerInspectedObject() { - remote_object_id = 0; - } -}; - -void ScriptEditorDebugger::debug_copy() { - String msg = reason->get_text(); - if (msg == "") return; - OS::get_singleton()->set_clipboard(msg); -} - -void ScriptEditorDebugger::debug_skip_breakpoints() { - skip_breakpoints_value = !skip_breakpoints_value; - if (skip_breakpoints_value) - skip_breakpoints->set_icon(get_icon("DebugSkipBreakpointsOn", "EditorIcons")); - else - skip_breakpoints->set_icon(get_icon("DebugSkipBreakpointsOff", "EditorIcons")); - - if (connection.is_valid()) { - Array msg; - msg.push_back("set_skip_breakpoints"); - msg.push_back(skip_breakpoints_value); - ppeer->put_var(msg); - } -} - -void ScriptEditorDebugger::debug_next() { - - ERR_FAIL_COND(!breaked); - ERR_FAIL_COND(connection.is_null()); - ERR_FAIL_COND(!connection->is_connected_to_host()); - Array msg; - msg.push_back("next"); - ppeer->put_var(msg); - _clear_execution(); - stack_dump->clear(); -} -void ScriptEditorDebugger::debug_step() { - - ERR_FAIL_COND(!breaked); - ERR_FAIL_COND(connection.is_null()); - ERR_FAIL_COND(!connection->is_connected_to_host()); - - Array msg; - msg.push_back("step"); - ppeer->put_var(msg); - _clear_execution(); - stack_dump->clear(); -} - -void ScriptEditorDebugger::debug_break() { - - ERR_FAIL_COND(breaked); - ERR_FAIL_COND(connection.is_null()); - ERR_FAIL_COND(!connection->is_connected_to_host()); - - Array msg; - msg.push_back("break"); - ppeer->put_var(msg); -} - -void ScriptEditorDebugger::debug_continue() { - - ERR_FAIL_COND(!breaked); - ERR_FAIL_COND(connection.is_null()); - ERR_FAIL_COND(!connection->is_connected_to_host()); - - OS::get_singleton()->enable_for_stealing_focus(EditorNode::get_singleton()->get_child_process_id()); - - Array msg; - _clear_execution(); - msg.push_back("continue"); - ppeer->put_var(msg); -} - -void ScriptEditorDebugger::_scene_tree_folded(Object *obj) { - - if (updating_scene_tree) { - - return; - } - TreeItem *item = Object::cast_to<TreeItem>(obj); - - if (!item) - return; - - ObjectID id = item->get_metadata(0); - if (unfold_cache.has(id)) { - unfold_cache.erase(id); - } else { - unfold_cache.insert(id); - } -} - -void ScriptEditorDebugger::_scene_tree_selected() { - - if (updating_scene_tree) { - - return; - } - TreeItem *item = inspect_scene_tree->get_selected(); - if (!item) { - - return; - } - - inspected_object_id = item->get_metadata(0); - - Array msg; - msg.push_back("inspect_object"); - msg.push_back(inspected_object_id); - ppeer->put_var(msg); -} - -void ScriptEditorDebugger::_scene_tree_rmb_selected(const Vector2 &p_position) { - - TreeItem *item = inspect_scene_tree->get_item_at_position(p_position); - if (!item) - return; - - item->select(0); - - item_menu->clear(); - item_menu->add_icon_item(get_icon("CreateNewSceneFrom", "EditorIcons"), TTR("Save Branch as Scene"), ITEM_MENU_SAVE_REMOTE_NODE); - item_menu->add_icon_item(get_icon("CopyNodePath", "EditorIcons"), TTR("Copy Node Path"), ITEM_MENU_COPY_NODE_PATH); - item_menu->set_global_position(get_global_mouse_position()); - item_menu->popup(); -} - -void ScriptEditorDebugger::_file_selected(const String &p_file) { - switch (file_dialog_mode) { - case SAVE_NODE: { - Array msg; - msg.push_back("save_node"); - msg.push_back(inspected_object_id); - msg.push_back(p_file); - ppeer->put_var(msg); - } break; - case SAVE_CSV: { - Error err; - FileAccessRef file = FileAccess::open(p_file, FileAccess::WRITE, &err); - - if (err != OK) { - ERR_PRINT("Failed to open " + p_file); - return; - } - Vector<String> line; - line.resize(Performance::MONITOR_MAX); - - // signatures - for (int i = 0; i < Performance::MONITOR_MAX; i++) { - line.write[i] = Performance::get_singleton()->get_monitor_name(Performance::Monitor(i)); - } - file->store_csv_line(line); - - // values - List<Vector<float> >::Element *E = perf_history.back(); - while (E) { - - Vector<float> &perf_data = E->get(); - for (int i = 0; i < perf_data.size(); i++) { - - line.write[i] = String::num_real(perf_data[i]); - } - file->store_csv_line(line); - E = E->prev(); - } - file->store_string("\n"); - - Vector<Vector<String> > profiler_data = profiler->get_data_as_csv(); - for (int i = 0; i < profiler_data.size(); i++) { - file->store_csv_line(profiler_data[i]); - } - - } break; - } -} - -void ScriptEditorDebugger::_scene_tree_property_value_edited(const String &p_prop, const Variant &p_value) { - - Array msg; - msg.push_back("set_object_property"); - msg.push_back(inspected_object_id); - msg.push_back(p_prop); - msg.push_back(p_value); - ppeer->put_var(msg); - inspect_edited_object_timeout = 0.7; //avoid annoyance, don't request soon after editing -} - -void ScriptEditorDebugger::_scene_tree_property_select_object(ObjectID p_object) { - - inspected_object_id = p_object; - Array msg; - msg.push_back("inspect_object"); - msg.push_back(inspected_object_id); - ppeer->put_var(msg); -} - -void ScriptEditorDebugger::_scene_tree_request() { - - ERR_FAIL_COND(connection.is_null()); - ERR_FAIL_COND(!connection->is_connected_to_host()); - - Array msg; - msg.push_back("request_scene_tree"); - ppeer->put_var(msg); -} - -/// Populates inspect_scene_tree recursively given data in nodes. -/// Nodes is an array containing 4 elements for each node, it follows this pattern: -/// nodes[i] == number of direct children of this node -/// nodes[i + 1] == node name -/// nodes[i + 2] == node class -/// nodes[i + 3] == node instance id -/// -/// Returns the number of items parsed in nodes from current_index. -/// -/// Given a nodes array like [R,A,B,C,D,E] the following Tree will be generated, assuming -/// filter is an empty String, R and A child count are 2, B is 1 and C, D and E are 0. -/// -/// R -/// |-A -/// | |-B -/// | | |-C -/// | | -/// | |-D -/// | -/// |-E -/// -int ScriptEditorDebugger::_update_scene_tree(TreeItem *parent, const Array &nodes, int current_index) { - String filter = EditorNode::get_singleton()->get_scene_tree_dock()->get_filter(); - String item_text = nodes[current_index + 1]; - String item_type = nodes[current_index + 2]; - bool keep = filter.is_subsequence_ofi(item_text); - - TreeItem *item = inspect_scene_tree->create_item(parent); - item->set_text(0, item_text); - item->set_tooltip(0, TTR("Type:") + " " + item_type); - ObjectID id = ObjectID(nodes[current_index + 3]); - Ref<Texture> icon = EditorNode::get_singleton()->get_class_icon(nodes[current_index + 2], ""); - if (icon.is_valid()) { - item->set_icon(0, icon); - } - item->set_metadata(0, id); - - if (id == inspected_object_id) { - TreeItem *cti = item->get_parent(); - while (cti) { - cti->set_collapsed(false); - cti = cti->get_parent(); - } - item->select(0); - } - - // Set current item as collapsed if necessary - if (parent) { - if (!unfold_cache.has(id)) { - item->set_collapsed(true); - } - } - - int children_count = nodes[current_index]; - // Tracks the total number of items parsed in nodes, this is used to skips nodes that - // are not direct children of the current node since we can't know in advance the total - // number of children, direct and not, of a node without traversing the nodes array previously. - // Keeping track of this allows us to build our remote scene tree by traversing the node - // array just once. - int items_count = 1; - for (int i = 0; i < children_count; i++) { - // Called for each direct child of item. - // Direct children of current item might not be adjacent so items_count must - // be incremented by the number of items parsed until now, otherwise we would not - // be able to access the next child of the current item. - // items_count is multiplied by 4 since that's the number of elements in the nodes - // array needed to represent a single node. - items_count += _update_scene_tree(item, nodes, current_index + items_count * 4); - } - - // If item has not children and should not be kept delete it - if (!keep && !item->get_children() && parent) { - parent->remove_child(item); - memdelete(item); - } - - return items_count; -} - -void ScriptEditorDebugger::_video_mem_request() { - - if (connection.is_null() || !connection->is_connected_to_host()) { - // Video RAM usage is only available while a project is being debugged. - return; - } - - Array msg; - msg.push_back("request_video_mem"); - ppeer->put_var(msg); -} - -Size2 ScriptEditorDebugger::get_minimum_size() const { - - Size2 ms = MarginContainer::get_minimum_size(); - ms.y = MAX(ms.y, 250 * EDSCALE); - return ms; -} - -void ScriptEditorDebugger::_parse_message(const String &p_msg, const Array &p_data) { - - if (p_msg == "debug_enter") { - Array msg; - msg.push_back("get_stack_dump"); - ppeer->put_var(msg); - ERR_FAIL_COND(p_data.size() != 2); - bool can_continue = p_data[0]; - String error = p_data[1]; - step->set_disabled(!can_continue); - next->set_disabled(!can_continue); - _set_reason_text(error, MESSAGE_ERROR); - copy->set_disabled(false); - breaked = true; - dobreak->set_disabled(true); - docontinue->set_disabled(false); - emit_signal("breaked", true, can_continue); - OS::get_singleton()->move_window_to_foreground(); - if (error != "") { - tabs->set_current_tab(0); - } - profiler->set_enabled(false); - EditorNode::get_singleton()->get_pause_button()->set_pressed(true); - EditorNode::get_singleton()->make_bottom_panel_item_visible(this); - _clear_remote_objects(); - - } else if (p_msg == "debug_exit") { - - breaked = false; - _clear_execution(); - copy->set_disabled(true); - step->set_disabled(true); - next->set_disabled(true); - reason->set_text(""); - reason->set_tooltip(""); - back->set_disabled(true); - forward->set_disabled(true); - dobreak->set_disabled(false); - docontinue->set_disabled(true); - emit_signal("breaked", false, false, Variant()); - profiler->set_enabled(true); - profiler->disable_seeking(); - EditorNode::get_singleton()->get_pause_button()->set_pressed(false); - } else if (p_msg == "message:click_ctrl") { - - clicked_ctrl->set_text(p_data[0]); - clicked_ctrl_type->set_text(p_data[1]); - - } else if (p_msg == "message:scene_tree") { - - inspect_scene_tree->clear(); - Map<int, TreeItem *> lv; - - updating_scene_tree = true; - - _update_scene_tree(NULL, p_data, 0); - - updating_scene_tree = false; - - le_clear->set_disabled(false); - le_set->set_disabled(false); - } else if (p_msg == "message:inspect_object") { - - ScriptEditorDebuggerInspectedObject *debugObj = NULL; - - ObjectID id = p_data[0]; - String type = p_data[1]; - Array properties = p_data[2]; - - if (remote_objects.has(id)) { - debugObj = remote_objects[id]; - } else { - debugObj = memnew(ScriptEditorDebuggerInspectedObject); - debugObj->remote_object_id = id; - debugObj->type_name = type; - remote_objects[id] = debugObj; - debugObj->connect("value_edited", this, "_scene_tree_property_value_edited"); - } - - int old_prop_size = debugObj->prop_list.size(); - - debugObj->prop_list.clear(); - int new_props_added = 0; - Set<String> changed; - for (int i = 0; i < properties.size(); i++) { - - Array prop = properties[i]; - if (prop.size() != 6) - continue; - - PropertyInfo pinfo; - pinfo.name = prop[0]; - pinfo.type = Variant::Type(int(prop[1])); - pinfo.hint = PropertyHint(int(prop[2])); - pinfo.hint_string = prop[3]; - pinfo.usage = PropertyUsageFlags(int(prop[4])); - Variant var = prop[5]; - - if (pinfo.type == Variant::OBJECT) { - if (var.is_zero()) { - var = RES(); - } else if (var.get_type() == Variant::STRING) { - String path = var; - if (path.find("::") != -1) { - // built-in resource - String base_path = path.get_slice("::", 0); - if (ResourceLoader::get_resource_type(base_path) == "PackedScene") { - if (!EditorNode::get_singleton()->is_scene_open(base_path)) { - EditorNode::get_singleton()->load_scene(base_path); - } - } else { - EditorNode::get_singleton()->load_resource(base_path); - } - } - var = ResourceLoader::load(path); - - if (pinfo.hint_string == "Script") { - if (debugObj->get_script() != var) { - debugObj->set_script(RefPtr()); - Ref<Script> script(var); - if (!script.is_null()) { - ScriptInstance *script_instance = script->placeholder_instance_create(debugObj); - debugObj->set_script_and_instance(var, script_instance); - } - } - } - } else if (var.get_type() == Variant::OBJECT) { - if (((Object *)var)->is_class("EncodedObjectAsID")) { - var = Object::cast_to<EncodedObjectAsID>(var)->get_object_id(); - pinfo.type = var.get_type(); - pinfo.hint = PROPERTY_HINT_OBJECT_ID; - pinfo.hint_string = "Object"; - } - } - } - - //always add the property, since props may have been added or removed - debugObj->prop_list.push_back(pinfo); - - if (!debugObj->prop_values.has(pinfo.name)) { - new_props_added++; - debugObj->prop_values[pinfo.name] = var; - } else { - - if (bool(Variant::evaluate(Variant::OP_NOT_EQUAL, debugObj->prop_values[pinfo.name], var))) { - debugObj->prop_values[pinfo.name] = var; - changed.insert(pinfo.name); - } - } - } - - if (editor->get_editor_history()->get_current() != debugObj->get_instance_id()) { - editor->push_item(debugObj, ""); - } else { - - if (old_prop_size == debugObj->prop_list.size() && new_props_added == 0) { - //only some may have changed, if so, then update those, if exist - for (Set<String>::Element *E = changed.front(); E; E = E->next()) { - EditorNode::get_singleton()->get_inspector()->update_property(E->get()); - } - } else { - //full update, because props were added or removed - debugObj->update(); - } - } - } else if (p_msg == "message:video_mem") { - - vmem_tree->clear(); - TreeItem *root = vmem_tree->create_item(); - - int total = 0; - - for (int i = 0; i < p_data.size(); i += 4) { - - TreeItem *it = vmem_tree->create_item(root); - String type = p_data[i + 1]; - int bytes = p_data[i + 3].operator int(); - it->set_text(0, p_data[i + 0]); //path - it->set_text(1, type); //type - it->set_text(2, p_data[i + 2]); //type - it->set_text(3, String::humanize_size(bytes)); //type - total += bytes; - - if (has_icon(type, "EditorIcons")) - it->set_icon(0, get_icon(type, "EditorIcons")); - } - - vmem_total->set_tooltip(TTR("Bytes:") + " " + itos(total)); - vmem_total->set_text(String::humanize_size(total)); - - } else if (p_msg == "stack_dump") { - - stack_dump->clear(); - TreeItem *r = stack_dump->create_item(); - - for (int i = 0; i < p_data.size(); i++) { - - Dictionary d = p_data[i]; - ERR_CONTINUE(!d.has("function")); - ERR_CONTINUE(!d.has("file")); - ERR_CONTINUE(!d.has("line")); - ERR_CONTINUE(!d.has("id")); - TreeItem *s = stack_dump->create_item(r); - d["frame"] = i; - s->set_metadata(0, d); - - String line = itos(i) + " - " + String(d["file"]) + ":" + itos(d["line"]) + " - at function: " + d["function"]; - s->set_text(0, line); - - if (i == 0) - s->select(0); - } - } else if (p_msg == "stack_frame_vars") { - - variables->clear(); - - int ofs = 0; - int mcount = p_data[ofs]; - ofs++; - for (int i = 0; i < mcount; i++) { - - String n = p_data[ofs + i * 2 + 0]; - Variant v = p_data[ofs + i * 2 + 1]; - - PropertyHint h = PROPERTY_HINT_NONE; - String hs = String(); - - if (v.get_type() == Variant::OBJECT) { - v = Object::cast_to<EncodedObjectAsID>(v)->get_object_id(); - h = PROPERTY_HINT_OBJECT_ID; - hs = "Object"; - } - - variables->add_property("Locals/" + n, v, h, hs); - } - - ofs += mcount * 2; - mcount = p_data[ofs]; - ofs++; - for (int i = 0; i < mcount; i++) { - - String n = p_data[ofs + i * 2 + 0]; - Variant v = p_data[ofs + i * 2 + 1]; - PropertyHint h = PROPERTY_HINT_NONE; - String hs = String(); - - if (v.get_type() == Variant::OBJECT) { - v = Object::cast_to<EncodedObjectAsID>(v)->get_object_id(); - h = PROPERTY_HINT_OBJECT_ID; - hs = "Object"; - } - - variables->add_property("Members/" + n, v, h, hs); - - if (n == "self") { - _scene_tree_property_select_object(v); - } - } - - ofs += mcount * 2; - mcount = p_data[ofs]; - ofs++; - for (int i = 0; i < mcount; i++) { - - String n = p_data[ofs + i * 2 + 0]; - Variant v = p_data[ofs + i * 2 + 1]; - PropertyHint h = PROPERTY_HINT_NONE; - String hs = String(); - - if (v.get_type() == Variant::OBJECT) { - v = Object::cast_to<EncodedObjectAsID>(v)->get_object_id(); - h = PROPERTY_HINT_OBJECT_ID; - hs = "Object"; - } - - variables->add_property("Globals/" + n, v, h, hs); - } - - variables->update(); - inspector->edit(variables); - - } else if (p_msg == "output") { - - //OUT - for (int i = 0; i < p_data.size(); i++) { - - String t = p_data[i]; - //LOG - - if (!EditorNode::get_log()->is_visible()) { - if (EditorNode::get_singleton()->are_bottom_panels_hidden()) { - if (EDITOR_GET("run/output/always_open_output_on_play")) { - EditorNode::get_singleton()->make_bottom_panel_item_visible(EditorNode::get_log()); - } - } - } - EditorNode::get_log()->add_message(t); - } - - } else if (p_msg == "performance") { - Array arr = p_data[0]; - Vector<float> p; - p.resize(arr.size()); - for (int i = 0; i < arr.size(); i++) { - p.write[i] = arr[i]; - if (i < perf_items.size()) { - - const float value = p[i]; - String label = rtos(value); - String tooltip = label; - switch (Performance::MonitorType((int)perf_items[i]->get_metadata(1))) { - case Performance::MONITOR_TYPE_MEMORY: { - label = String::humanize_size(value); - tooltip = label; - } break; - case Performance::MONITOR_TYPE_TIME: { - label = rtos(value * 1000).pad_decimals(2) + " ms"; - tooltip = label; - } break; - default: { - tooltip += " " + perf_items[i]->get_text(0); - } break; - } - - perf_items[i]->set_text(1, label); - perf_items[i]->set_tooltip(1, tooltip); - if (p[i] > perf_max[i]) - perf_max.write[i] = p[i]; - } - } - perf_history.push_front(p); - perf_draw->update(); - - } else if (p_msg == "error") { - - // Should have at least two elements, error array and stack items count. - ERR_FAIL_COND_MSG(p_data.size() < 2, "Malformed error message from script debugger."); - - // Error or warning data. - Array err = p_data[0]; - ERR_FAIL_COND_MSG(err.size() < 10, "Malformed error message from script debugger."); - - // Format time. - Array time_vals; - time_vals.push_back(err[0]); - time_vals.push_back(err[1]); - time_vals.push_back(err[2]); - time_vals.push_back(err[3]); - bool e; - String time = String("%d:%02d:%02d.%03d").sprintf(time_vals, &e); - - // Rest of the error data. - String method = err[4]; - String source_file = err[5]; - String source_line = err[6]; - String error_cond = err[7]; - String error_msg = err[8]; - bool is_warning = err[9]; - bool has_method = !method.empty(); - bool has_error_msg = !error_msg.empty(); - bool source_is_project_file = source_file.begins_with("res://"); - - // Metadata to highlight error line in scripts. - Array source_meta; - source_meta.push_back(source_file); - source_meta.push_back(source_line); - - // Create error tree to display above error or warning details. - TreeItem *r = error_tree->get_root(); - if (!r) { - r = error_tree->create_item(); - } - - // Also provide the relevant details as tooltip to quickly check without - // uncollapsing the tree. - String tooltip = is_warning ? TTR("Warning:") : TTR("Error:"); - - TreeItem *error = error_tree->create_item(r); - error->set_collapsed(true); - - error->set_icon(0, get_icon(is_warning ? "Warning" : "Error", "EditorIcons")); - error->set_text(0, time); - error->set_text_align(0, TreeItem::ALIGN_LEFT); - - String error_title; - // Include method name, when given, in error title. - if (has_method) - error_title += method + ": "; - // If we have a (custom) error message, use it as title, and add a C++ Error - // item with the original error condition. - error_title += error_msg.empty() ? error_cond : error_msg; - error->set_text(1, error_title); - tooltip += " " + error_title + "\n"; - - if (has_error_msg) { - // Add item for C++ error condition. - TreeItem *cpp_cond = error_tree->create_item(error); - cpp_cond->set_text(0, "<" + TTR("C++ Error") + ">"); - cpp_cond->set_text(1, error_cond); - cpp_cond->set_text_align(0, TreeItem::ALIGN_LEFT); - tooltip += TTR("C++ Error:") + " " + error_cond + "\n"; - if (source_is_project_file) - cpp_cond->set_metadata(0, source_meta); - } - - // Source of the error. - String source_txt = (source_is_project_file ? source_file.get_file() : source_file) + ":" + source_line; - if (has_method) - source_txt += " @ " + method + "()"; - - TreeItem *cpp_source = error_tree->create_item(error); - cpp_source->set_text(0, "<" + (source_is_project_file ? TTR("Source") : TTR("C++ Source")) + ">"); - cpp_source->set_text(1, source_txt); - cpp_source->set_text_align(0, TreeItem::ALIGN_LEFT); - tooltip += (source_is_project_file ? TTR("Source:") : TTR("C++ Source:")) + " " + source_txt + "\n"; - - // Set metadata to highlight error line in scripts. - if (source_is_project_file) { - error->set_metadata(0, source_meta); - cpp_source->set_metadata(0, source_meta); - } - - error->set_tooltip(0, tooltip); - error->set_tooltip(1, tooltip); - - // Format stack trace. - // stack_items_count is the number of elements to parse, with 3 items per frame - // of the stack trace (script, method, line). - int stack_items_count = p_data[1]; - - for (int i = 0; i < stack_items_count; i += 3) { - String script = p_data[2 + i]; - String method2 = p_data[3 + i]; - int line = p_data[4 + i]; - TreeItem *stack_trace = error_tree->create_item(error); - - Array meta; - meta.push_back(script); - meta.push_back(line); - stack_trace->set_metadata(0, meta); - - if (i == 0) { - stack_trace->set_text(0, "<" + TTR("Stack Trace") + ">"); - stack_trace->set_text_align(0, TreeItem::ALIGN_LEFT); - error->set_metadata(0, meta); - } - stack_trace->set_text(1, script.get_file() + ":" + itos(line) + " @ " + method2 + "()"); - } - - if (is_warning) - warning_count++; - else - error_count++; - - } else if (p_msg == "profile_sig") { - //cache a signature - profiler_signature[p_data[1]] = p_data[0]; - - } else if (p_msg == "profile_frame" || p_msg == "profile_total") { - - EditorProfiler::Metric metric; - metric.valid = true; - metric.frame_number = p_data[0]; - metric.frame_time = p_data[1]; - metric.idle_time = p_data[2]; - metric.physics_time = p_data[3]; - metric.physics_frame_time = p_data[4]; - int frame_data_amount = p_data[6]; - int frame_function_amount = p_data[7]; - - if (frame_data_amount) { - EditorProfiler::Metric::Category frame_time; - frame_time.signature = "category_frame_time"; - frame_time.name = "Frame Time"; - frame_time.total_time = metric.frame_time; - - EditorProfiler::Metric::Category::Item item; - item.calls = 1; - item.line = 0; - - item.name = "Physics Time"; - item.total = metric.physics_time; - item.self = item.total; - item.signature = "physics_time"; - - frame_time.items.push_back(item); - - item.name = "Idle Time"; - item.total = metric.idle_time; - item.self = item.total; - item.signature = "idle_time"; - - frame_time.items.push_back(item); - - item.name = "Physics Frame Time"; - item.total = metric.physics_frame_time; - item.self = item.total; - item.signature = "physics_frame_time"; - - frame_time.items.push_back(item); - - metric.categories.push_back(frame_time); - } - - int idx = 8; - for (int i = 0; i < frame_data_amount; i++) { - - EditorProfiler::Metric::Category c; - String name = p_data[idx++]; - Array values = p_data[idx++]; - c.name = name.capitalize(); - c.items.resize(values.size() / 2); - c.total_time = 0; - c.signature = "categ::" + name; - for (int j = 0; j < values.size(); j += 2) { - - EditorProfiler::Metric::Category::Item item; - item.calls = 1; - item.line = 0; - item.name = values[j]; - item.self = values[j + 1]; - item.total = item.self; - item.signature = "categ::" + name + "::" + item.name; - item.name = item.name.capitalize(); - c.total_time += item.total; - c.items.write[j / 2] = item; - } - metric.categories.push_back(c); - } - - EditorProfiler::Metric::Category funcs; - funcs.total_time = p_data[5]; //script time - funcs.items.resize(frame_function_amount); - funcs.name = "Script Functions"; - funcs.signature = "script_functions"; - for (int i = 0; i < frame_function_amount; i++) { - - int signature = p_data[idx++]; - int calls = p_data[idx++]; - float total = p_data[idx++]; - float self = p_data[idx++]; - - EditorProfiler::Metric::Category::Item item; - if (profiler_signature.has(signature)) { - - item.signature = profiler_signature[signature]; - - String name = profiler_signature[signature]; - Vector<String> strings = name.split("::"); - if (strings.size() == 3) { - item.name = strings[2]; - item.script = strings[0]; - item.line = strings[1].to_int(); - } else if (strings.size() == 4) { //Built-in scripts have an :: in their name - item.name = strings[3]; - item.script = strings[0] + "::" + strings[1]; - item.line = strings[2].to_int(); - } - - } else { - item.name = "SigErr " + itos(signature); - } - - item.calls = calls; - item.self = self; - item.total = total; - funcs.items.write[i] = item; - } - - metric.categories.push_back(funcs); - - if (p_msg == "profile_frame") - profiler->add_frame_metric(metric, false); - else - profiler->add_frame_metric(metric, true); - } else if (p_msg == "network_profile") { - int frame_size = 6; - for (int i = 0; i < p_data.size(); i += frame_size) { - MultiplayerAPI::ProfilingInfo pi; - pi.node = p_data[i + 0]; - pi.node_path = p_data[i + 1]; - pi.incoming_rpc = p_data[i + 2]; - pi.incoming_rset = p_data[i + 3]; - pi.outgoing_rpc = p_data[i + 4]; - pi.outgoing_rset = p_data[i + 5]; - network_profiler->add_node_frame_data(pi); - } - } else if (p_msg == "network_bandwidth") { - network_profiler->set_bandwidth(p_data[0], p_data[1]); - } else if (p_msg == "kill_me") { - - editor->call_deferred("stop_child_process"); - } -} - -void ScriptEditorDebugger::_set_reason_text(const String &p_reason, MessageType p_type) { - switch (p_type) { - case MESSAGE_ERROR: - reason->add_color_override("font_color", get_color("error_color", "Editor")); - break; - case MESSAGE_WARNING: - reason->add_color_override("font_color", get_color("warning_color", "Editor")); - break; - default: - reason->add_color_override("font_color", get_color("success_color", "Editor")); - } - reason->set_text(p_reason); - reason->set_tooltip(p_reason.word_wrap(80)); -} - -void ScriptEditorDebugger::_performance_select() { - - perf_draw->update(); -} - -void ScriptEditorDebugger::_performance_draw() { - - Vector<int> which; - for (int i = 0; i < perf_items.size(); i++) { - - if (perf_items[i]->is_checked(0)) - which.push_back(i); - } - - if (which.empty()) { - info_message->show(); - return; - } - - info_message->hide(); - - Ref<StyleBox> graph_sb = get_stylebox("normal", "TextEdit"); - Ref<Font> graph_font = get_font("font", "TextEdit"); - - int cols = Math::ceil(Math::sqrt((float)which.size())); - int rows = Math::ceil((float)which.size() / cols); - if (which.size() == 1) - rows = 1; - - int margin = 3; - int point_sep = 5; - Size2i s = Size2i(perf_draw->get_size()) / Size2i(cols, rows); - for (int i = 0; i < which.size(); i++) { - - Point2i p(i % cols, i / cols); - Rect2i r(p * s, s); - r.position += Point2(margin, margin); - r.size -= Point2(margin, margin) * 2.0; - perf_draw->draw_style_box(graph_sb, r); - r.position += graph_sb->get_offset(); - r.size -= graph_sb->get_minimum_size(); - int pi = which[i]; - Color c = get_color("accent_color", "Editor"); - float h = (float)which[i] / (float)(perf_items.size()); - // Use a darker color on light backgrounds for better visibility - float value_multiplier = EditorSettings::get_singleton()->is_dark_theme() ? 1.4 : 0.55; - c.set_hsv(Math::fmod(h + 0.4, 0.9), c.get_s() * 0.9, c.get_v() * value_multiplier); - - c.a = 0.6; - perf_draw->draw_string(graph_font, r.position + Point2(0, graph_font->get_ascent()), perf_items[pi]->get_text(0), c, r.size.x); - c.a = 0.9; - perf_draw->draw_string(graph_font, r.position + Point2(0, graph_font->get_ascent() + graph_font->get_height()), perf_items[pi]->get_text(1), c, r.size.y); - - float spacing = point_sep / float(cols); - float from = r.size.width; - - List<Vector<float> >::Element *E = perf_history.front(); - float prev = -1; - while (from >= 0 && E) { - - float m = perf_max[pi]; - if (m == 0) - m = 0.00001; - float h2 = E->get()[pi] / m; - h2 = (1.0 - h2) * r.size.y; - - if (E != perf_history.front()) - perf_draw->draw_line(r.position + Point2(from, h2), r.position + Point2(from + spacing, prev), c, Math::round(EDSCALE), true); - prev = h2; - E = E->next(); - from -= spacing; - } - } -} - -void ScriptEditorDebugger::_notification(int p_what) { - - switch (p_what) { - - case NOTIFICATION_ENTER_TREE: { - - inspector->edit(variables); - skip_breakpoints->set_icon(get_icon("DebugSkipBreakpointsOff", "EditorIcons")); - copy->set_icon(get_icon("ActionCopy", "EditorIcons")); - - step->set_icon(get_icon("DebugStep", "EditorIcons")); - next->set_icon(get_icon("DebugNext", "EditorIcons")); - back->set_icon(get_icon("Back", "EditorIcons")); - forward->set_icon(get_icon("Forward", "EditorIcons")); - dobreak->set_icon(get_icon("Pause", "EditorIcons")); - docontinue->set_icon(get_icon("DebugContinue", "EditorIcons")); - le_set->connect("pressed", this, "_live_edit_set"); - le_clear->connect("pressed", this, "_live_edit_clear"); - error_tree->connect("item_selected", this, "_error_selected"); - error_tree->connect("item_activated", this, "_error_activated"); - vmem_refresh->set_icon(get_icon("Reload", "EditorIcons")); - - reason->add_color_override("font_color", get_color("error_color", "Editor")); - - } break; - case NOTIFICATION_PROCESS: { - - if (connection.is_valid()) { - - inspect_scene_tree_timeout -= get_process_delta_time(); - if (inspect_scene_tree_timeout < 0) { - inspect_scene_tree_timeout = EditorSettings::get_singleton()->get("debugger/remote_scene_tree_refresh_interval"); - if (inspect_scene_tree->is_visible_in_tree()) { - _scene_tree_request(); - } - } - - inspect_edited_object_timeout -= get_process_delta_time(); - if (inspect_edited_object_timeout < 0) { - inspect_edited_object_timeout = EditorSettings::get_singleton()->get("debugger/remote_inspect_refresh_interval"); - if (inspected_object_id) { - if (ScriptEditorDebuggerInspectedObject *obj = Object::cast_to<ScriptEditorDebuggerInspectedObject>(ObjectDB::get_instance(editor->get_editor_history()->get_current()))) { - if (obj->remote_object_id == inspected_object_id) { - //take the chance and re-inspect selected object - Array msg; - msg.push_back("inspect_object"); - msg.push_back(inspected_object_id); - ppeer->put_var(msg); - } - } - } - } - - if (camera_override == OVERRIDE_2D) { - CanvasItemEditor *editor = CanvasItemEditor::get_singleton(); - - Dictionary state = editor->get_state(); - float zoom = state["zoom"]; - Point2 offset = state["ofs"]; - Transform2D transform; - - transform.scale_basis(Size2(zoom, zoom)); - transform.elements[2] = -offset * zoom; - - Array msg; - msg.push_back("override_camera_2D:transform"); - msg.push_back(transform); - ppeer->put_var(msg); - - } else if (camera_override >= OVERRIDE_3D_1) { - int viewport_idx = camera_override - OVERRIDE_3D_1; - SpatialEditorViewport *viewport = SpatialEditor::get_singleton()->get_editor_viewport(viewport_idx); - Camera *const cam = viewport->get_camera(); - - Array msg; - msg.push_back("override_camera_3D:transform"); - msg.push_back(cam->get_camera_transform()); - if (cam->get_projection() == Camera::PROJECTION_ORTHOGONAL) { - msg.push_back(false); - msg.push_back(cam->get_size()); - } else { - msg.push_back(true); - msg.push_back(cam->get_fov()); - } - msg.push_back(cam->get_znear()); - msg.push_back(cam->get_zfar()); - ppeer->put_var(msg); - } - } - - if (error_count != last_error_count || warning_count != last_warning_count) { - - if (error_count == 0 && warning_count == 0) { - errors_tab->set_name(TTR("Errors")); - debugger_button->set_text(TTR("Debugger")); - debugger_button->set_icon(Ref<Texture>()); - tabs->set_tab_icon(errors_tab->get_index(), Ref<Texture>()); - } else { - errors_tab->set_name(TTR("Errors") + " (" + itos(error_count + warning_count) + ")"); - debugger_button->set_text(TTR("Debugger") + " (" + itos(error_count + warning_count) + ")"); - if (error_count == 0) { - debugger_button->set_icon(get_icon("Warning", "EditorIcons")); - tabs->set_tab_icon(errors_tab->get_index(), get_icon("Warning", "EditorIcons")); - } else { - debugger_button->set_icon(get_icon("Error", "EditorIcons")); - tabs->set_tab_icon(errors_tab->get_index(), get_icon("Error", "EditorIcons")); - } - } - last_error_count = error_count; - last_warning_count = warning_count; - } - - if (server->is_connection_available()) { - if (connection.is_valid()) { - // We already have a valid connection. Disconnecting any new connecting client to prevent it from hanging. - // (If we don't keep a reference to the connection it will be destroyed and disconnect_from_host will be called internally) - server->take_connection(); - } else { - // We just got the first connection. - connection = server->take_connection(); - if (connection.is_null()) - break; - - EditorNode::get_log()->add_message("--- Debugging process started ---", EditorLog::MSG_TYPE_EDITOR); - - ppeer->set_stream_peer(connection); - - //EditorNode::get_singleton()->make_bottom_panel_item_visible(this); - //emit_signal("show_debugger",true); - - dobreak->set_disabled(false); - tabs->set_current_tab(0); - - _set_reason_text(TTR("Child process connected."), MESSAGE_SUCCESS); - profiler->clear(); - - inspect_scene_tree->clear(); - le_set->set_disabled(true); - le_clear->set_disabled(false); - vmem_refresh->set_disabled(false); - error_tree->clear(); - error_count = 0; - warning_count = 0; - profiler_signature.clear(); - //live_edit_root->set_text("/root"); - - EditorNode::get_singleton()->get_pause_button()->set_pressed(false); - EditorNode::get_singleton()->get_pause_button()->set_disabled(false); - - update_live_edit_root(); - if (profiler->is_profiling()) { - _profiler_activate(true); - } - - if (network_profiler->is_profiling()) { - _network_profiler_activate(true); - } - } - } - - if (connection.is_null()) - break; - - if (!connection->is_connected_to_host()) { - stop(); - editor->notify_child_process_exited(); //somehow, exited - break; - }; - - if (ppeer->get_available_packet_count() <= 0) { - break; - }; - - const uint64_t until = OS::get_singleton()->get_ticks_msec() + 20; - - while (ppeer->get_available_packet_count() > 0) { - - if (pending_in_queue) { - - int todo = MIN(ppeer->get_available_packet_count(), pending_in_queue); - - for (int i = 0; i < todo; i++) { - - Variant cmd; - Error ret = ppeer->get_var(cmd); - if (ret != OK) { - stop(); - ERR_FAIL_COND(ret != OK); - } - - message.push_back(cmd); - pending_in_queue--; - } - - if (pending_in_queue == 0) { - _parse_message(message_type, message); - message.clear(); - } - - } else { - - if (ppeer->get_available_packet_count() >= 2) { - - Variant cmd; - Error ret = ppeer->get_var(cmd); - if (ret != OK) { - stop(); - ERR_FAIL_COND(ret != OK); - } - if (cmd.get_type() != Variant::STRING) { - stop(); - ERR_FAIL_COND(cmd.get_type() != Variant::STRING); - } - - message_type = cmd; - - ret = ppeer->get_var(cmd); - if (ret != OK) { - stop(); - ERR_FAIL_COND(ret != OK); - } - if (cmd.get_type() != Variant::INT) { - stop(); - ERR_FAIL_COND(cmd.get_type() != Variant::INT); - } - - pending_in_queue = cmd; - - if (pending_in_queue == 0) { - _parse_message(message_type, Array()); - message.clear(); - } - - } else { - - break; - } - } - - if (OS::get_singleton()->get_ticks_msec() > until) - break; - } - } break; - case EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED: { - - add_constant_override("margin_left", -EditorNode::get_singleton()->get_gui_base()->get_stylebox("BottomPanelDebuggerOverride", "EditorStyles")->get_margin(MARGIN_LEFT)); - add_constant_override("margin_right", -EditorNode::get_singleton()->get_gui_base()->get_stylebox("BottomPanelDebuggerOverride", "EditorStyles")->get_margin(MARGIN_RIGHT)); - - tabs->add_style_override("panel", editor->get_gui_base()->get_stylebox("DebuggerPanel", "EditorStyles")); - tabs->add_style_override("tab_fg", editor->get_gui_base()->get_stylebox("DebuggerTabFG", "EditorStyles")); - tabs->add_style_override("tab_bg", editor->get_gui_base()->get_stylebox("DebuggerTabBG", "EditorStyles")); - - copy->set_icon(get_icon("ActionCopy", "EditorIcons")); - step->set_icon(get_icon("DebugStep", "EditorIcons")); - next->set_icon(get_icon("DebugNext", "EditorIcons")); - back->set_icon(get_icon("Back", "EditorIcons")); - forward->set_icon(get_icon("Forward", "EditorIcons")); - dobreak->set_icon(get_icon("Pause", "EditorIcons")); - docontinue->set_icon(get_icon("DebugContinue", "EditorIcons")); - vmem_refresh->set_icon(get_icon("Reload", "EditorIcons")); - } break; - } -} - -void ScriptEditorDebugger::_clear_execution() { - TreeItem *ti = stack_dump->get_selected(); - if (!ti) - return; - - Dictionary d = ti->get_metadata(0); - - stack_script = ResourceLoader::load(d["file"]); - emit_signal("clear_execution", stack_script); - stack_script.unref(); -} - -void ScriptEditorDebugger::start() { - - stop(); - - if (is_visible_in_tree()) { - EditorNode::get_singleton()->make_bottom_panel_item_visible(this); - } - - perf_history.clear(); - for (int i = 0; i < Performance::MONITOR_MAX; i++) { - - perf_max.write[i] = 0; - } - - int remote_port = (int)EditorSettings::get_singleton()->get("network/debug/remote_port"); - if (server->listen(remote_port) != OK) { - EditorNode::get_log()->add_message(String("Error listening on port ") + itos(remote_port), EditorLog::MSG_TYPE_ERROR); - return; - } - - EditorNode::get_singleton()->get_scene_tree_dock()->show_tab_buttons(); - auto_switch_remote_scene_tree = (bool)EditorSettings::get_singleton()->get("debugger/auto_switch_to_remote_scene_tree"); - if (auto_switch_remote_scene_tree) { - EditorNode::get_singleton()->get_scene_tree_dock()->show_remote_tree(); - } - - set_process(true); - breaked = false; - camera_override = OVERRIDE_NONE; -} - -void ScriptEditorDebugger::pause() { -} - -void ScriptEditorDebugger::unpause() { -} - -void ScriptEditorDebugger::stop() { - - set_process(false); - breaked = false; - _clear_execution(); - - server->stop(); - _clear_remote_objects(); - ppeer->set_stream_peer(Ref<StreamPeer>()); - - if (connection.is_valid()) { - EditorNode::get_log()->add_message("--- Debugging process stopped ---", EditorLog::MSG_TYPE_EDITOR); - connection.unref(); - - reason->set_text(""); - reason->set_tooltip(""); - } - - pending_in_queue = 0; - message.clear(); - - node_path_cache.clear(); - res_path_cache.clear(); - profiler_signature.clear(); - le_clear->set_disabled(false); - le_set->set_disabled(true); - profiler->set_enabled(true); - vmem_refresh->set_disabled(true); - - inspect_scene_tree->clear(); - inspector->edit(NULL); - EditorNode::get_singleton()->get_pause_button()->set_pressed(false); - EditorNode::get_singleton()->get_pause_button()->set_disabled(true); - EditorNode::get_singleton()->get_scene_tree_dock()->hide_remote_tree(); - EditorNode::get_singleton()->get_scene_tree_dock()->hide_tab_buttons(); - - if (hide_on_stop) { - if (is_visible_in_tree()) - EditorNode::get_singleton()->hide_bottom_panel(); - emit_signal("show_debugger", false); - } -} - -void ScriptEditorDebugger::_profiler_activate(bool p_enable) { - - if (!connection.is_valid()) - return; - - if (p_enable) { - profiler_signature.clear(); - Array msg; - msg.push_back("start_profiling"); - int max_funcs = EditorSettings::get_singleton()->get("debugger/profiler_frame_max_functions"); - max_funcs = CLAMP(max_funcs, 16, 512); - msg.push_back(max_funcs); - ppeer->put_var(msg); - print_verbose("Starting profiling."); - - } else { - Array msg; - msg.push_back("stop_profiling"); - ppeer->put_var(msg); - print_verbose("Ending profiling."); - } -} - -void ScriptEditorDebugger::_network_profiler_activate(bool p_enable) { - - if (!connection.is_valid()) - return; - - if (p_enable) { - Array msg; - msg.push_back("start_network_profiling"); - ppeer->put_var(msg); - print_verbose("Starting network profiling."); - - } else { - Array msg; - msg.push_back("stop_network_profiling"); - ppeer->put_var(msg); - print_verbose("Ending network profiling."); - } -} - -void ScriptEditorDebugger::_profiler_seeked() { - - if (!connection.is_valid() || !connection->is_connected_to_host()) - return; - - if (breaked) - return; - debug_break(); -} - -void ScriptEditorDebugger::_stack_dump_frame_selected() { - - TreeItem *ti = stack_dump->get_selected(); - if (!ti) - return; - - Dictionary d = ti->get_metadata(0); - - stack_script = ResourceLoader::load(d["file"]); - emit_signal("goto_script_line", stack_script, int(d["line"]) - 1); - emit_signal("set_execution", stack_script, int(d["line"]) - 1); - stack_script.unref(); - - if (connection.is_valid() && connection->is_connected_to_host()) { - Array msg; - msg.push_back("get_stack_frame_vars"); - msg.push_back(d["frame"]); - ppeer->put_var(msg); - } else { - inspector->edit(NULL); - } -} - -void ScriptEditorDebugger::_output_clear() { - - //output->clear(); - //output->push_color(Color(0,0,0)); -} - -void ScriptEditorDebugger::_export_csv() { - - file_dialog->set_mode(EditorFileDialog::MODE_SAVE_FILE); - file_dialog->set_access(EditorFileDialog::ACCESS_FILESYSTEM); - file_dialog_mode = SAVE_CSV; - file_dialog->popup_centered_ratio(); -} - -String ScriptEditorDebugger::get_var_value(const String &p_var) const { - if (!breaked) - return String(); - return variables->get_var_value(p_var); -} - -int ScriptEditorDebugger::_get_node_path_cache(const NodePath &p_path) { - - const int *r = node_path_cache.getptr(p_path); - if (r) - return *r; - - last_path_id++; - - node_path_cache[p_path] = last_path_id; - Array msg; - msg.push_back("live_node_path"); - msg.push_back(p_path); - msg.push_back(last_path_id); - ppeer->put_var(msg); - - return last_path_id; -} - -int ScriptEditorDebugger::_get_res_path_cache(const String &p_path) { - - Map<String, int>::Element *E = res_path_cache.find(p_path); - - if (E) - return E->get(); - - last_path_id++; - - res_path_cache[p_path] = last_path_id; - Array msg; - msg.push_back("live_res_path"); - msg.push_back(p_path); - msg.push_back(last_path_id); - ppeer->put_var(msg); - - return last_path_id; -} - -void ScriptEditorDebugger::_method_changed(Object *p_base, const StringName &p_name, VARIANT_ARG_DECLARE) { - - if (!p_base || !live_debug || !connection.is_valid() || !editor->get_edited_scene()) - return; - - Node *node = Object::cast_to<Node>(p_base); - - VARIANT_ARGPTRS - - for (int i = 0; i < VARIANT_ARG_MAX; i++) { - //no pointers, sorry - if (argptr[i] && (argptr[i]->get_type() == Variant::OBJECT || argptr[i]->get_type() == Variant::_RID)) - return; - } - - if (node) { - - NodePath path = editor->get_edited_scene()->get_path_to(node); - int pathid = _get_node_path_cache(path); - - Array msg; - msg.push_back("live_node_call"); - msg.push_back(pathid); - msg.push_back(p_name); - for (int i = 0; i < VARIANT_ARG_MAX; i++) { - //no pointers, sorry - msg.push_back(*argptr[i]); - } - ppeer->put_var(msg); - - return; - } - - Resource *res = Object::cast_to<Resource>(p_base); - - if (res && res->get_path() != String()) { - - String respath = res->get_path(); - int pathid = _get_res_path_cache(respath); - - Array msg; - msg.push_back("live_res_call"); - msg.push_back(pathid); - msg.push_back(p_name); - for (int i = 0; i < VARIANT_ARG_MAX; i++) { - //no pointers, sorry - msg.push_back(*argptr[i]); - } - ppeer->put_var(msg); - - return; - } -} - -void ScriptEditorDebugger::_property_changed(Object *p_base, const StringName &p_property, const Variant &p_value) { - - if (!p_base || !live_debug || !connection.is_valid() || !editor->get_edited_scene()) - return; - - Node *node = Object::cast_to<Node>(p_base); - - if (node) { - - NodePath path = editor->get_edited_scene()->get_path_to(node); - int pathid = _get_node_path_cache(path); - - if (p_value.is_ref()) { - Ref<Resource> res = p_value; - if (res.is_valid() && res->get_path() != String()) { - - Array msg; - msg.push_back("live_node_prop_res"); - msg.push_back(pathid); - msg.push_back(p_property); - msg.push_back(res->get_path()); - ppeer->put_var(msg); - } - } else { - - Array msg; - msg.push_back("live_node_prop"); - msg.push_back(pathid); - msg.push_back(p_property); - msg.push_back(p_value); - ppeer->put_var(msg); - } - - return; - } - - Resource *res = Object::cast_to<Resource>(p_base); - - if (res && res->get_path() != String()) { - - String respath = res->get_path(); - int pathid = _get_res_path_cache(respath); - - if (p_value.is_ref()) { - Ref<Resource> res2 = p_value; - if (res2.is_valid() && res2->get_path() != String()) { - - Array msg; - msg.push_back("live_res_prop_res"); - msg.push_back(pathid); - msg.push_back(p_property); - msg.push_back(res2->get_path()); - ppeer->put_var(msg); - } - } else { - - Array msg; - msg.push_back("live_res_prop"); - msg.push_back(pathid); - msg.push_back(p_property); - msg.push_back(p_value); - ppeer->put_var(msg); - } - - return; - } -} - -void ScriptEditorDebugger::_method_changeds(void *p_ud, Object *p_base, const StringName &p_name, VARIANT_ARG_DECLARE) { - - ScriptEditorDebugger *sed = (ScriptEditorDebugger *)p_ud; - sed->_method_changed(p_base, p_name, VARIANT_ARG_PASS); -} - -void ScriptEditorDebugger::_property_changeds(void *p_ud, Object *p_base, const StringName &p_property, const Variant &p_value) { - - ScriptEditorDebugger *sed = (ScriptEditorDebugger *)p_ud; - sed->_property_changed(p_base, p_property, p_value); -} - -void ScriptEditorDebugger::set_live_debugging(bool p_enable) { - - live_debug = p_enable; -} - -void ScriptEditorDebugger::_live_edit_set() { - - if (!connection.is_valid()) - return; - - TreeItem *ti = inspect_scene_tree->get_selected(); - if (!ti) - return; - String path; - - while (ti) { - String lp = ti->get_text(0); - path = "/" + lp + path; - ti = ti->get_parent(); - } - - NodePath np = path; - - editor->get_editor_data().set_edited_scene_live_edit_root(np); - - update_live_edit_root(); -} - -void ScriptEditorDebugger::_live_edit_clear() { - - NodePath np = NodePath("/root"); - editor->get_editor_data().set_edited_scene_live_edit_root(np); - - update_live_edit_root(); -} - -void ScriptEditorDebugger::update_live_edit_root() { - - NodePath np = editor->get_editor_data().get_edited_scene_live_edit_root(); - - if (connection.is_valid()) { - Array msg; - msg.push_back("live_set_root"); - msg.push_back(np); - if (editor->get_edited_scene()) - msg.push_back(editor->get_edited_scene()->get_filename()); - else - msg.push_back(""); - ppeer->put_var(msg); - } - live_edit_root->set_text(np); -} - -void ScriptEditorDebugger::live_debug_create_node(const NodePath &p_parent, const String &p_type, const String &p_name) { - - if (live_debug && connection.is_valid()) { - Array msg; - msg.push_back("live_create_node"); - msg.push_back(p_parent); - msg.push_back(p_type); - msg.push_back(p_name); - ppeer->put_var(msg); - } -} - -void ScriptEditorDebugger::live_debug_instance_node(const NodePath &p_parent, const String &p_path, const String &p_name) { - - if (live_debug && connection.is_valid()) { - Array msg; - msg.push_back("live_instance_node"); - msg.push_back(p_parent); - msg.push_back(p_path); - msg.push_back(p_name); - ppeer->put_var(msg); - } -} -void ScriptEditorDebugger::live_debug_remove_node(const NodePath &p_at) { - - if (live_debug && connection.is_valid()) { - Array msg; - msg.push_back("live_remove_node"); - msg.push_back(p_at); - ppeer->put_var(msg); - } -} -void ScriptEditorDebugger::live_debug_remove_and_keep_node(const NodePath &p_at, ObjectID p_keep_id) { - - if (live_debug && connection.is_valid()) { - Array msg; - msg.push_back("live_remove_and_keep_node"); - msg.push_back(p_at); - msg.push_back(p_keep_id); - ppeer->put_var(msg); - } -} -void ScriptEditorDebugger::live_debug_restore_node(ObjectID p_id, const NodePath &p_at, int p_at_pos) { - - if (live_debug && connection.is_valid()) { - Array msg; - msg.push_back("live_restore_node"); - msg.push_back(p_id); - msg.push_back(p_at); - msg.push_back(p_at_pos); - ppeer->put_var(msg); - } -} -void ScriptEditorDebugger::live_debug_duplicate_node(const NodePath &p_at, const String &p_new_name) { - - if (live_debug && connection.is_valid()) { - Array msg; - msg.push_back("live_duplicate_node"); - msg.push_back(p_at); - msg.push_back(p_new_name); - ppeer->put_var(msg); - } -} -void ScriptEditorDebugger::live_debug_reparent_node(const NodePath &p_at, const NodePath &p_new_place, const String &p_new_name, int p_at_pos) { - - if (live_debug && connection.is_valid()) { - Array msg; - msg.push_back("live_reparent_node"); - msg.push_back(p_at); - msg.push_back(p_new_place); - msg.push_back(p_new_name); - msg.push_back(p_at_pos); - ppeer->put_var(msg); - } -} - -ScriptEditorDebugger::CameraOverride ScriptEditorDebugger::get_camera_override() const { - return camera_override; -} - -void ScriptEditorDebugger::set_camera_override(CameraOverride p_override) { - - if (p_override == OVERRIDE_2D && camera_override != OVERRIDE_2D) { - if (connection.is_valid()) { - Array msg; - msg.push_back("override_camera_2D:set"); - msg.push_back(true); - ppeer->put_var(msg); - } - } else if (p_override != OVERRIDE_2D && camera_override == OVERRIDE_2D) { - if (connection.is_valid()) { - Array msg; - msg.push_back("override_camera_2D:set"); - msg.push_back(false); - ppeer->put_var(msg); - } - } else if (p_override >= OVERRIDE_3D_1 && camera_override < OVERRIDE_3D_1) { - if (connection.is_valid()) { - Array msg; - msg.push_back("override_camera_3D:set"); - msg.push_back(true); - ppeer->put_var(msg); - } - } else if (p_override < OVERRIDE_3D_1 && camera_override >= OVERRIDE_3D_1) { - if (connection.is_valid()) { - Array msg; - msg.push_back("override_camera_3D:set"); - msg.push_back(false); - ppeer->put_var(msg); - } - } - - camera_override = p_override; -} - -void ScriptEditorDebugger::set_breakpoint(const String &p_path, int p_line, bool p_enabled) { - - if (connection.is_valid()) { - Array msg; - msg.push_back("breakpoint"); - msg.push_back(p_path); - msg.push_back(p_line); - msg.push_back(p_enabled); - ppeer->put_var(msg); - } -} - -void ScriptEditorDebugger::reload_scripts() { - - if (connection.is_valid()) { - Array msg; - msg.push_back("reload_scripts"); - ppeer->put_var(msg); - } -} - -bool ScriptEditorDebugger::is_skip_breakpoints() { - return skip_breakpoints_value; -} - -void ScriptEditorDebugger::_error_activated() { - TreeItem *selected = error_tree->get_selected(); - - TreeItem *ci = selected->get_children(); - if (ci) { - selected->set_collapsed(!selected->is_collapsed()); - } -} - -void ScriptEditorDebugger::_error_selected() { - TreeItem *selected = error_tree->get_selected(); - - Array meta = selected->get_metadata(0); - - if (meta.size() == 0) { - return; - } - - Ref<Script> s = ResourceLoader::load(meta[0]); - emit_signal("goto_script_line", s, int(meta[1]) - 1); -} - -void ScriptEditorDebugger::_expand_errors_list() { - - TreeItem *root = error_tree->get_root(); - if (!root) - return; - - TreeItem *item = root->get_children(); - while (item) { - item->set_collapsed(false); - item = item->get_next(); - } -} - -void ScriptEditorDebugger::_collapse_errors_list() { - - TreeItem *root = error_tree->get_root(); - if (!root) - return; - - TreeItem *item = root->get_children(); - while (item) { - item->set_collapsed(true); - item = item->get_next(); - } -} - -void ScriptEditorDebugger::set_hide_on_stop(bool p_hide) { - - hide_on_stop = p_hide; -} - -bool ScriptEditorDebugger::get_debug_with_external_editor() const { - - return enable_external_editor; -} - -void ScriptEditorDebugger::set_debug_with_external_editor(bool p_enabled) { - - enable_external_editor = p_enabled; -} - -Ref<Script> ScriptEditorDebugger::get_dump_stack_script() const { - - return stack_script; -} - -void ScriptEditorDebugger::_paused() { - - ERR_FAIL_COND(connection.is_null()); - ERR_FAIL_COND(!connection->is_connected_to_host()); - - if (!breaked && EditorNode::get_singleton()->get_pause_button()->is_pressed()) { - debug_break(); - } - - if (breaked && !EditorNode::get_singleton()->get_pause_button()->is_pressed()) { - debug_continue(); - } -} - -void ScriptEditorDebugger::_set_remote_object(ObjectID p_id, ScriptEditorDebuggerInspectedObject *p_obj) { - - if (remote_objects.has(p_id)) - memdelete(remote_objects[p_id]); - remote_objects[p_id] = p_obj; -} - -void ScriptEditorDebugger::_clear_remote_objects() { - - for (Map<ObjectID, ScriptEditorDebuggerInspectedObject *>::Element *E = remote_objects.front(); E; E = E->next()) { - if (editor->get_editor_history()->get_current() == E->value()->get_instance_id()) { - editor->push_item(NULL); - } - memdelete(E->value()); - } - remote_objects.clear(); -} - -void ScriptEditorDebugger::_clear_errors_list() { - - error_tree->clear(); - error_count = 0; - warning_count = 0; - _notification(NOTIFICATION_PROCESS); -} - -// Right click on specific file(s) or folder(s). -void ScriptEditorDebugger::_error_tree_item_rmb_selected(const Vector2 &p_pos) { - - item_menu->clear(); - item_menu->set_size(Size2(1, 1)); - - if (error_tree->is_anything_selected()) { - item_menu->add_icon_item(get_icon("ActionCopy", "EditorIcons"), TTR("Copy Error"), ITEM_MENU_COPY_ERROR); - } - - if (item_menu->get_item_count() > 0) { - item_menu->set_position(error_tree->get_global_position() + p_pos); - item_menu->popup(); - } -} - -void ScriptEditorDebugger::_item_menu_id_pressed(int p_option) { - - switch (p_option) { - - case ITEM_MENU_COPY_ERROR: { - TreeItem *ti = error_tree->get_selected(); - while (ti->get_parent() != error_tree->get_root()) - ti = ti->get_parent(); - - String type; - - if (ti->get_icon(0) == get_icon("Warning", "EditorIcons")) { - type = "W "; - } else if (ti->get_icon(0) == get_icon("Error", "EditorIcons")) { - type = "E "; - } - - String text = ti->get_text(0) + " "; - int rpad_len = text.length(); - - text = type + text + ti->get_text(1) + "\n"; - TreeItem *ci = ti->get_children(); - while (ci) { - text += " " + ci->get_text(0).rpad(rpad_len) + ci->get_text(1) + "\n"; - ci = ci->get_next(); - } - - OS::get_singleton()->set_clipboard(text); - - } break; - case ITEM_MENU_SAVE_REMOTE_NODE: { - - file_dialog->set_access(EditorFileDialog::ACCESS_RESOURCES); - file_dialog->set_mode(EditorFileDialog::MODE_SAVE_FILE); - file_dialog_mode = SAVE_NODE; - - List<String> extensions; - Ref<PackedScene> sd = memnew(PackedScene); - ResourceSaver::get_recognized_extensions(sd, &extensions); - file_dialog->clear_filters(); - for (int i = 0; i < extensions.size(); i++) { - file_dialog->add_filter("*." + extensions[i] + " ; " + extensions[i].to_upper()); - } - - file_dialog->popup_centered_ratio(); - } break; - case ITEM_MENU_COPY_NODE_PATH: { - - TreeItem *ti = inspect_scene_tree->get_selected(); - String text = ti->get_text(0); - - if (ti->get_parent() == NULL) { - text = "."; - } else if (ti->get_parent()->get_parent() == NULL) { - text = "."; - } else { - while (ti->get_parent()->get_parent() != inspect_scene_tree->get_root()) { - ti = ti->get_parent(); - text = ti->get_text(0) + "/" + text; - } - } - - OS::get_singleton()->set_clipboard(text); - } break; - } -} - -void ScriptEditorDebugger::_tab_changed(int p_tab) { - if (tabs->get_tab_title(p_tab) == TTR("Video RAM")) { - // "Video RAM" tab was clicked, refresh the data it's dislaying when entering the tab. - _video_mem_request(); - } -} - -void ScriptEditorDebugger::_bind_methods() { - - ClassDB::bind_method(D_METHOD("_stack_dump_frame_selected"), &ScriptEditorDebugger::_stack_dump_frame_selected); - - ClassDB::bind_method(D_METHOD("debug_skip_breakpoints"), &ScriptEditorDebugger::debug_skip_breakpoints); - ClassDB::bind_method(D_METHOD("debug_copy"), &ScriptEditorDebugger::debug_copy); - - ClassDB::bind_method(D_METHOD("debug_next"), &ScriptEditorDebugger::debug_next); - ClassDB::bind_method(D_METHOD("debug_step"), &ScriptEditorDebugger::debug_step); - ClassDB::bind_method(D_METHOD("debug_break"), &ScriptEditorDebugger::debug_break); - ClassDB::bind_method(D_METHOD("debug_continue"), &ScriptEditorDebugger::debug_continue); - ClassDB::bind_method(D_METHOD("_output_clear"), &ScriptEditorDebugger::_output_clear); - ClassDB::bind_method(D_METHOD("_export_csv"), &ScriptEditorDebugger::_export_csv); - ClassDB::bind_method(D_METHOD("_performance_draw"), &ScriptEditorDebugger::_performance_draw); - ClassDB::bind_method(D_METHOD("_performance_select"), &ScriptEditorDebugger::_performance_select); - ClassDB::bind_method(D_METHOD("_scene_tree_request"), &ScriptEditorDebugger::_scene_tree_request); - ClassDB::bind_method(D_METHOD("_video_mem_request"), &ScriptEditorDebugger::_video_mem_request); - ClassDB::bind_method(D_METHOD("_live_edit_set"), &ScriptEditorDebugger::_live_edit_set); - ClassDB::bind_method(D_METHOD("_live_edit_clear"), &ScriptEditorDebugger::_live_edit_clear); - - ClassDB::bind_method(D_METHOD("_error_selected"), &ScriptEditorDebugger::_error_selected); - ClassDB::bind_method(D_METHOD("_error_activated"), &ScriptEditorDebugger::_error_activated); - ClassDB::bind_method(D_METHOD("_expand_errors_list"), &ScriptEditorDebugger::_expand_errors_list); - ClassDB::bind_method(D_METHOD("_collapse_errors_list"), &ScriptEditorDebugger::_collapse_errors_list); - ClassDB::bind_method(D_METHOD("_profiler_activate"), &ScriptEditorDebugger::_profiler_activate); - ClassDB::bind_method(D_METHOD("_network_profiler_activate"), &ScriptEditorDebugger::_network_profiler_activate); - ClassDB::bind_method(D_METHOD("_profiler_seeked"), &ScriptEditorDebugger::_profiler_seeked); - ClassDB::bind_method(D_METHOD("_clear_errors_list"), &ScriptEditorDebugger::_clear_errors_list); - - ClassDB::bind_method(D_METHOD("_error_tree_item_rmb_selected"), &ScriptEditorDebugger::_error_tree_item_rmb_selected); - ClassDB::bind_method(D_METHOD("_item_menu_id_pressed"), &ScriptEditorDebugger::_item_menu_id_pressed); - ClassDB::bind_method(D_METHOD("_tab_changed"), &ScriptEditorDebugger::_tab_changed); - - ClassDB::bind_method(D_METHOD("_paused"), &ScriptEditorDebugger::_paused); - - ClassDB::bind_method(D_METHOD("_scene_tree_selected"), &ScriptEditorDebugger::_scene_tree_selected); - ClassDB::bind_method(D_METHOD("_scene_tree_folded"), &ScriptEditorDebugger::_scene_tree_folded); - ClassDB::bind_method(D_METHOD("_scene_tree_rmb_selected"), &ScriptEditorDebugger::_scene_tree_rmb_selected); - ClassDB::bind_method(D_METHOD("_file_selected"), &ScriptEditorDebugger::_file_selected); - - ClassDB::bind_method(D_METHOD("live_debug_create_node"), &ScriptEditorDebugger::live_debug_create_node); - ClassDB::bind_method(D_METHOD("live_debug_instance_node"), &ScriptEditorDebugger::live_debug_instance_node); - ClassDB::bind_method(D_METHOD("live_debug_remove_node"), &ScriptEditorDebugger::live_debug_remove_node); - ClassDB::bind_method(D_METHOD("live_debug_remove_and_keep_node"), &ScriptEditorDebugger::live_debug_remove_and_keep_node); - ClassDB::bind_method(D_METHOD("live_debug_restore_node"), &ScriptEditorDebugger::live_debug_restore_node); - ClassDB::bind_method(D_METHOD("live_debug_duplicate_node"), &ScriptEditorDebugger::live_debug_duplicate_node); - ClassDB::bind_method(D_METHOD("live_debug_reparent_node"), &ScriptEditorDebugger::live_debug_reparent_node); - ClassDB::bind_method(D_METHOD("_scene_tree_property_select_object"), &ScriptEditorDebugger::_scene_tree_property_select_object); - ClassDB::bind_method(D_METHOD("_scene_tree_property_value_edited"), &ScriptEditorDebugger::_scene_tree_property_value_edited); - - ADD_SIGNAL(MethodInfo("goto_script_line")); - ADD_SIGNAL(MethodInfo("set_execution", PropertyInfo("script"), PropertyInfo(Variant::INT, "line"))); - ADD_SIGNAL(MethodInfo("clear_execution", PropertyInfo("script"))); - ADD_SIGNAL(MethodInfo("breaked", PropertyInfo(Variant::BOOL, "reallydid"), PropertyInfo(Variant::BOOL, "can_debug"))); - ADD_SIGNAL(MethodInfo("show_debugger", PropertyInfo(Variant::BOOL, "reallydid"))); -} - -ScriptEditorDebugger::ScriptEditorDebugger(EditorNode *p_editor) { - - add_constant_override("margin_left", -EditorNode::get_singleton()->get_gui_base()->get_stylebox("BottomPanelDebuggerOverride", "EditorStyles")->get_margin(MARGIN_LEFT)); - add_constant_override("margin_right", -EditorNode::get_singleton()->get_gui_base()->get_stylebox("BottomPanelDebuggerOverride", "EditorStyles")->get_margin(MARGIN_RIGHT)); - - ppeer = Ref<PacketPeerStream>(memnew(PacketPeerStream)); - ppeer->set_input_buffer_max_size((1024 * 1024 * 8) - 4); // 8 MiB should be enough, minus 4 bytes for separator. - editor = p_editor; - editor->get_inspector()->connect("object_id_selected", this, "_scene_tree_property_select_object"); - - tabs = memnew(TabContainer); - tabs->set_tab_align(TabContainer::ALIGN_LEFT); - tabs->add_style_override("panel", editor->get_gui_base()->get_stylebox("DebuggerPanel", "EditorStyles")); - tabs->add_style_override("tab_fg", editor->get_gui_base()->get_stylebox("DebuggerTabFG", "EditorStyles")); - tabs->add_style_override("tab_bg", editor->get_gui_base()->get_stylebox("DebuggerTabBG", "EditorStyles")); - tabs->connect("tab_changed", this, "_tab_changed"); - - add_child(tabs); - - { //debugger - VBoxContainer *vbc = memnew(VBoxContainer); - vbc->set_name(TTR("Debugger")); - Control *dbg = vbc; - - HBoxContainer *hbc = memnew(HBoxContainer); - vbc->add_child(hbc); - - reason = memnew(Label); - reason->set_text(""); - hbc->add_child(reason); - reason->set_h_size_flags(SIZE_EXPAND_FILL); - reason->set_autowrap(true); - reason->set_max_lines_visible(3); - reason->set_mouse_filter(Control::MOUSE_FILTER_PASS); - - hbc->add_child(memnew(VSeparator)); - - skip_breakpoints = memnew(ToolButton); - hbc->add_child(skip_breakpoints); - skip_breakpoints->set_tooltip(TTR("Skip Breakpoints")); - skip_breakpoints->connect("pressed", this, "debug_skip_breakpoints"); - - hbc->add_child(memnew(VSeparator)); - - copy = memnew(ToolButton); - hbc->add_child(copy); - copy->set_tooltip(TTR("Copy Error")); - copy->connect("pressed", this, "debug_copy"); - - hbc->add_child(memnew(VSeparator)); - - step = memnew(ToolButton); - hbc->add_child(step); - step->set_tooltip(TTR("Step Into")); - step->set_shortcut(ED_GET_SHORTCUT("debugger/step_into")); - step->connect("pressed", this, "debug_step"); - - next = memnew(ToolButton); - hbc->add_child(next); - next->set_tooltip(TTR("Step Over")); - next->set_shortcut(ED_GET_SHORTCUT("debugger/step_over")); - next->connect("pressed", this, "debug_next"); - - hbc->add_child(memnew(VSeparator)); - - dobreak = memnew(ToolButton); - hbc->add_child(dobreak); - dobreak->set_tooltip(TTR("Break")); - dobreak->set_shortcut(ED_GET_SHORTCUT("debugger/break")); - dobreak->connect("pressed", this, "debug_break"); - - docontinue = memnew(ToolButton); - hbc->add_child(docontinue); - docontinue->set_tooltip(TTR("Continue")); - docontinue->set_shortcut(ED_GET_SHORTCUT("debugger/continue")); - docontinue->connect("pressed", this, "debug_continue"); - - back = memnew(Button); - hbc->add_child(back); - back->set_tooltip(TTR("Inspect Previous Instance")); - back->hide(); - - forward = memnew(Button); - hbc->add_child(forward); - forward->set_tooltip(TTR("Inspect Next Instance")); - forward->hide(); - - HSplitContainer *sc = memnew(HSplitContainer); - vbc->add_child(sc); - sc->set_v_size_flags(SIZE_EXPAND_FILL); - - stack_dump = memnew(Tree); - stack_dump->set_allow_reselect(true); - stack_dump->set_columns(1); - stack_dump->set_column_titles_visible(true); - stack_dump->set_column_title(0, TTR("Stack Frames")); - stack_dump->set_h_size_flags(SIZE_EXPAND_FILL); - stack_dump->set_hide_root(true); - stack_dump->connect("cell_selected", this, "_stack_dump_frame_selected"); - sc->add_child(stack_dump); - - inspector = memnew(EditorInspector); - inspector->set_h_size_flags(SIZE_EXPAND_FILL); - inspector->set_enable_capitalize_paths(false); - inspector->set_read_only(true); - inspector->connect("object_id_selected", this, "_scene_tree_property_select_object"); - sc->add_child(inspector); - - server.instance(); - - pending_in_queue = 0; - - variables = memnew(ScriptEditorDebuggerVariables); - - breaked = false; - - tabs->add_child(dbg); - } - - { //errors - errors_tab = memnew(VBoxContainer); - errors_tab->set_name(TTR("Errors")); - - HBoxContainer *errhb = memnew(HBoxContainer); - errors_tab->add_child(errhb); - - Button *expand_all = memnew(Button); - expand_all->set_text(TTR("Expand All")); - expand_all->connect("pressed", this, "_expand_errors_list"); - errhb->add_child(expand_all); - - Button *collapse_all = memnew(Button); - collapse_all->set_text(TTR("Collapse All")); - collapse_all->connect("pressed", this, "_collapse_errors_list"); - errhb->add_child(collapse_all); - - Control *space = memnew(Control); - space->set_h_size_flags(SIZE_EXPAND_FILL); - errhb->add_child(space); - - clearbutton = memnew(Button); - clearbutton->set_text(TTR("Clear")); - clearbutton->set_h_size_flags(0); - clearbutton->connect("pressed", this, "_clear_errors_list"); - errhb->add_child(clearbutton); - - error_tree = memnew(Tree); - error_tree->set_columns(2); - - error_tree->set_column_expand(0, false); - error_tree->set_column_min_width(0, 140); - - error_tree->set_column_expand(1, true); - - error_tree->set_select_mode(Tree::SELECT_ROW); - error_tree->set_hide_root(true); - error_tree->set_v_size_flags(SIZE_EXPAND_FILL); - error_tree->set_allow_rmb_select(true); - error_tree->connect("item_rmb_selected", this, "_error_tree_item_rmb_selected"); - errors_tab->add_child(error_tree); - - item_menu = memnew(PopupMenu); - item_menu->connect("id_pressed", this, "_item_menu_id_pressed"); - error_tree->add_child(item_menu); - - tabs->add_child(errors_tab); - } - - { // remote scene tree - - inspect_scene_tree = memnew(Tree); - EditorNode::get_singleton()->get_scene_tree_dock()->add_remote_tree_editor(inspect_scene_tree); - EditorNode::get_singleton()->get_scene_tree_dock()->connect("remote_tree_selected", this, "_scene_tree_selected"); - inspect_scene_tree->set_v_size_flags(SIZE_EXPAND_FILL); - inspect_scene_tree->connect("cell_selected", this, "_scene_tree_selected"); - inspect_scene_tree->connect("item_collapsed", this, "_scene_tree_folded"); - inspect_scene_tree->set_allow_rmb_select(true); - inspect_scene_tree->connect("item_rmb_selected", this, "_scene_tree_rmb_selected"); - auto_switch_remote_scene_tree = EDITOR_DEF("debugger/auto_switch_to_remote_scene_tree", false); - inspect_scene_tree_timeout = EDITOR_DEF("debugger/remote_scene_tree_refresh_interval", 1.0); - inspect_edited_object_timeout = EDITOR_DEF("debugger/remote_inspect_refresh_interval", 0.2); - inspected_object_id = 0; - updating_scene_tree = false; - } - - { // File dialog - file_dialog = memnew(EditorFileDialog); - file_dialog->connect("file_selected", this, "_file_selected"); - add_child(file_dialog); - } - - { //profiler - profiler = memnew(EditorProfiler); - profiler->set_name(TTR("Profiler")); - tabs->add_child(profiler); - profiler->connect("enable_profiling", this, "_profiler_activate"); - profiler->connect("break_request", this, "_profiler_seeked"); - } - - { //network profiler - network_profiler = memnew(EditorNetworkProfiler); - network_profiler->set_name(TTR("Network Profiler")); - tabs->add_child(network_profiler); - network_profiler->connect("enable_profiling", this, "_network_profiler_activate"); - } - - { //monitors - - HSplitContainer *hsp = memnew(HSplitContainer); - - perf_monitors = memnew(Tree); - perf_monitors->set_columns(2); - perf_monitors->set_column_title(0, TTR("Monitor")); - perf_monitors->set_column_title(1, TTR("Value")); - perf_monitors->set_column_titles_visible(true); - perf_monitors->connect("item_edited", this, "_performance_select"); - hsp->add_child(perf_monitors); - - perf_draw = memnew(Control); - perf_draw->set_clip_contents(true); - perf_draw->connect("draw", this, "_performance_draw"); - hsp->add_child(perf_draw); - - hsp->set_name(TTR("Monitors")); - hsp->set_split_offset(340 * EDSCALE); - tabs->add_child(hsp); - perf_max.resize(Performance::MONITOR_MAX); - - Map<String, TreeItem *> bases; - TreeItem *root = perf_monitors->create_item(); - perf_monitors->set_hide_root(true); - for (int i = 0; i < Performance::MONITOR_MAX; i++) { - - String n = Performance::get_singleton()->get_monitor_name(Performance::Monitor(i)); - Performance::MonitorType mtype = Performance::get_singleton()->get_monitor_type(Performance::Monitor(i)); - String base = n.get_slice("/", 0); - String name = n.get_slice("/", 1); - if (!bases.has(base)) { - TreeItem *b = perf_monitors->create_item(root); - b->set_text(0, base.capitalize()); - b->set_editable(0, false); - b->set_selectable(0, false); - b->set_expand_right(0, true); - bases[base] = b; - } - - TreeItem *it = perf_monitors->create_item(bases[base]); - it->set_metadata(1, mtype); - it->set_cell_mode(0, TreeItem::CELL_MODE_CHECK); - it->set_editable(0, true); - it->set_selectable(0, false); - it->set_selectable(1, false); - it->set_text(0, name.capitalize()); - perf_items.push_back(it); - perf_max.write[i] = 0; - } - - info_message = memnew(Label); - info_message->set_text(TTR("Pick one or more items from the list to display the graph.")); - info_message->set_valign(Label::VALIGN_CENTER); - info_message->set_align(Label::ALIGN_CENTER); - info_message->set_autowrap(true); - info_message->set_custom_minimum_size(Size2(100 * EDSCALE, 0)); - info_message->set_anchors_and_margins_preset(PRESET_WIDE, PRESET_MODE_KEEP_SIZE, 8 * EDSCALE); - perf_draw->add_child(info_message); - } - - { //vmem inspect - VBoxContainer *vmem_vb = memnew(VBoxContainer); - HBoxContainer *vmem_hb = memnew(HBoxContainer); - Label *vmlb = memnew(Label(TTR("List of Video Memory Usage by Resource:") + " ")); - vmlb->set_h_size_flags(SIZE_EXPAND_FILL); - vmem_hb->add_child(vmlb); - vmem_hb->add_child(memnew(Label(TTR("Total:") + " "))); - vmem_total = memnew(LineEdit); - vmem_total->set_editable(false); - vmem_total->set_custom_minimum_size(Size2(100, 0) * EDSCALE); - vmem_hb->add_child(vmem_total); - vmem_refresh = memnew(ToolButton); - vmem_refresh->set_disabled(true); - vmem_hb->add_child(vmem_refresh); - vmem_vb->add_child(vmem_hb); - vmem_refresh->connect("pressed", this, "_video_mem_request"); - - VBoxContainer *vmmc = memnew(VBoxContainer); - vmem_tree = memnew(Tree); - vmem_tree->set_v_size_flags(SIZE_EXPAND_FILL); - vmem_tree->set_h_size_flags(SIZE_EXPAND_FILL); - vmmc->add_child(vmem_tree); - vmmc->set_v_size_flags(SIZE_EXPAND_FILL); - vmem_vb->add_child(vmmc); - - vmem_vb->set_name(TTR("Video RAM")); - vmem_tree->set_columns(4); - vmem_tree->set_column_titles_visible(true); - vmem_tree->set_column_title(0, TTR("Resource Path")); - vmem_tree->set_column_expand(0, true); - vmem_tree->set_column_expand(1, false); - vmem_tree->set_column_title(1, TTR("Type")); - vmem_tree->set_column_min_width(1, 100 * EDSCALE); - vmem_tree->set_column_expand(2, false); - vmem_tree->set_column_title(2, TTR("Format")); - vmem_tree->set_column_min_width(2, 150 * EDSCALE); - vmem_tree->set_column_expand(3, false); - vmem_tree->set_column_title(3, TTR("Usage")); - vmem_tree->set_column_min_width(3, 80 * EDSCALE); - vmem_tree->set_hide_root(true); - - tabs->add_child(vmem_vb); - } - - { // misc - VBoxContainer *misc = memnew(VBoxContainer); - misc->set_name(TTR("Misc")); - tabs->add_child(misc); - - GridContainer *info_left = memnew(GridContainer); - info_left->set_columns(2); - misc->add_child(info_left); - clicked_ctrl = memnew(LineEdit); - clicked_ctrl->set_h_size_flags(SIZE_EXPAND_FILL); - info_left->add_child(memnew(Label(TTR("Clicked Control:")))); - info_left->add_child(clicked_ctrl); - clicked_ctrl_type = memnew(LineEdit); - info_left->add_child(memnew(Label(TTR("Clicked Control Type:")))); - info_left->add_child(clicked_ctrl_type); - - live_edit_root = memnew(LineEdit); - live_edit_root->set_h_size_flags(SIZE_EXPAND_FILL); - - { - HBoxContainer *lehb = memnew(HBoxContainer); - Label *l = memnew(Label(TTR("Live Edit Root:"))); - info_left->add_child(l); - lehb->add_child(live_edit_root); - le_set = memnew(Button(TTR("Set From Tree"))); - lehb->add_child(le_set); - le_clear = memnew(Button(TTR("Clear"))); - lehb->add_child(le_clear); - info_left->add_child(lehb); - le_set->set_disabled(true); - le_clear->set_disabled(true); - } - - misc->add_child(memnew(VSeparator)); - - HBoxContainer *buttons = memnew(HBoxContainer); - - export_csv = memnew(Button(TTR("Export measures as CSV"))); - export_csv->connect("pressed", this, "_export_csv"); - buttons->add_child(export_csv); - - misc->add_child(buttons); - } - - msgdialog = memnew(AcceptDialog); - add_child(msgdialog); - - p_editor->get_undo_redo()->set_method_notify_callback(_method_changeds, this); - p_editor->get_undo_redo()->set_property_notify_callback(_property_changeds, this); - live_debug = true; - camera_override = OVERRIDE_NONE; - last_path_id = false; - error_count = 0; - warning_count = 0; - hide_on_stop = true; - enable_external_editor = false; - last_error_count = 0; - last_warning_count = 0; - - EditorNode::get_singleton()->get_pause_button()->connect("pressed", this, "_paused"); -} - -ScriptEditorDebugger::~ScriptEditorDebugger() { - - memdelete(variables); - - ppeer->set_stream_peer(Ref<StreamPeer>()); - - server->stop(); - _clear_remote_objects(); -} diff --git a/editor/settings_config_dialog.cpp b/editor/settings_config_dialog.cpp index 44962323e5..9f8a531762 100644 --- a/editor/settings_config_dialog.cpp +++ b/editor/settings_config_dialog.cpp @@ -32,13 +32,13 @@ #include "core/os/keyboard.h" #include "core/project_settings.h" +#include "editor/debugger/editor_debugger_node.h" #include "editor_file_system.h" #include "editor_log.h" #include "editor_node.h" #include "editor_scale.h" #include "editor_settings.h" #include "scene/gui/margin_container.h" -#include "script_editor_debugger.h" void EditorSettingsDialog::ok_pressed() { @@ -119,9 +119,8 @@ void EditorSettingsDialog::_notification(int p_what) { switch (p_what) { case NOTIFICATION_READY: { - ScriptEditorDebugger *sed = ScriptEditor::get_singleton()->get_debugger(); - undo_redo->set_method_notify_callback(sed->_method_changeds, sed); - undo_redo->set_property_notify_callback(sed->_property_changeds, sed); + undo_redo->set_method_notify_callback(EditorDebuggerNode::_method_changeds, NULL); + undo_redo->set_property_notify_callback(EditorDebuggerNode::_property_changeds, NULL); undo_redo->set_commit_notify_callback(_undo_redo_callback, this); } break; case NOTIFICATION_ENTER_TREE: { @@ -412,7 +411,7 @@ EditorSettingsDialog::EditorSettingsDialog() { tabs = memnew(TabContainer); tabs->set_tab_align(TabContainer::ALIGN_LEFT); - tabs->connect("tab_changed", this, "_tabs_tab_changed"); + tabs->connect_compat("tab_changed", this, "_tabs_tab_changed"); add_child(tabs); // General Tab @@ -435,8 +434,8 @@ EditorSettingsDialog::EditorSettingsDialog() { inspector->set_v_size_flags(Control::SIZE_EXPAND_FILL); inspector->get_inspector()->set_undo_redo(undo_redo); tab_general->add_child(inspector); - inspector->get_inspector()->connect("property_edited", this, "_settings_property_edited"); - inspector->get_inspector()->connect("restart_requested", this, "_editor_restart_request"); + inspector->get_inspector()->connect_compat("property_edited", this, "_settings_property_edited"); + inspector->get_inspector()->connect_compat("restart_requested", this, "_editor_restart_request"); restart_container = memnew(PanelContainer); tab_general->add_child(restart_container); @@ -450,11 +449,11 @@ EditorSettingsDialog::EditorSettingsDialog() { restart_hb->add_child(restart_label); restart_hb->add_spacer(); Button *restart_button = memnew(Button); - restart_button->connect("pressed", this, "_editor_restart"); + restart_button->connect_compat("pressed", this, "_editor_restart"); restart_hb->add_child(restart_button); restart_button->set_text(TTR("Save & Restart")); restart_close_button = memnew(ToolButton); - restart_close_button->connect("pressed", this, "_editor_restart_close"); + restart_close_button->connect_compat("pressed", this, "_editor_restart_close"); restart_hb->add_child(restart_close_button); restart_container->hide(); @@ -471,7 +470,7 @@ EditorSettingsDialog::EditorSettingsDialog() { shortcut_search_box = memnew(LineEdit); shortcut_search_box->set_h_size_flags(Control::SIZE_EXPAND_FILL); hbc->add_child(shortcut_search_box); - shortcut_search_box->connect("text_changed", this, "_filter_shortcuts"); + shortcut_search_box->connect_compat("text_changed", this, "_filter_shortcuts"); shortcuts = memnew(Tree); tab_shortcuts->add_child(shortcuts, true); @@ -481,7 +480,7 @@ EditorSettingsDialog::EditorSettingsDialog() { shortcuts->set_column_titles_visible(true); shortcuts->set_column_title(0, TTR("Name")); shortcuts->set_column_title(1, TTR("Binding")); - shortcuts->connect("button_pressed", this, "_shortcut_button_pressed"); + shortcuts->connect_compat("button_pressed", this, "_shortcut_button_pressed"); press_a_key = memnew(ConfirmationDialog); press_a_key->set_focus_mode(FOCUS_ALL); @@ -495,17 +494,17 @@ EditorSettingsDialog::EditorSettingsDialog() { l->set_anchor_and_margin(MARGIN_BOTTOM, ANCHOR_BEGIN, 30); press_a_key_label = l; press_a_key->add_child(l); - press_a_key->connect("gui_input", this, "_wait_for_key"); - press_a_key->connect("confirmed", this, "_press_a_key_confirm"); + press_a_key->connect_compat("gui_input", this, "_wait_for_key"); + press_a_key->connect_compat("confirmed", this, "_press_a_key_confirm"); set_hide_on_ok(true); timer = memnew(Timer); timer->set_wait_time(1.5); - timer->connect("timeout", this, "_settings_save"); + timer->connect_compat("timeout", this, "_settings_save"); timer->set_one_shot(true); add_child(timer); - EditorSettings::get_singleton()->connect("settings_changed", this, "_settings_changed"); + EditorSettings::get_singleton()->connect_compat("settings_changed", this, "_settings_changed"); get_ok()->set_text(TTR("Close")); updating = false; diff --git a/editor/spatial_editor_gizmos.cpp b/editor/spatial_editor_gizmos.cpp index d012b2f821..36dbf8ba24 100644 --- a/editor/spatial_editor_gizmos.cpp +++ b/editor/spatial_editor_gizmos.cpp @@ -170,8 +170,9 @@ void EditorSpatialGizmo::Instance::create_instance(Spatial *p_base, bool p_hidde instance = VS::get_singleton()->instance_create2(mesh->get_rid(), p_base->get_world()->get_scenario()); VS::get_singleton()->instance_attach_object_instance_id(instance, p_base->get_instance_id()); - if (skin_reference.is_valid()) + if (skin_reference.is_valid()) { VS::get_singleton()->instance_attach_skeleton(instance, skin_reference->get_skeleton()); + } if (extra_margin) VS::get_singleton()->instance_set_extra_visibility_margin(instance, 1); VS::get_singleton()->instance_geometry_set_cast_shadows_setting(instance, VS::SHADOW_CASTING_SETTING_OFF); @@ -213,10 +214,10 @@ void EditorSpatialGizmo::add_lines(const Vector<Vector3> &p_lines, const Ref<Mat a[Mesh::ARRAY_VERTEX] = p_lines; - PoolVector<Color> color; + Vector<Color> color; color.resize(p_lines.size()); { - PoolVector<Color>::Write w = color.write(); + Color *w = color.ptrw(); for (int i = 0; i < p_lines.size(); i++) { if (is_selected()) w[i] = Color(1, 1, 1, 0.8) * p_modulate; @@ -280,8 +281,16 @@ void EditorSpatialGizmo::add_unscaled_billboard(const Ref<Material> &p_material, a.resize(Mesh::ARRAY_MAX); a[Mesh::ARRAY_VERTEX] = vs; a[Mesh::ARRAY_TEX_UV] = uv; + Vector<int> indices; + indices.push_back(0); + indices.push_back(1); + indices.push_back(2); + indices.push_back(0); + indices.push_back(2); + indices.push_back(3); + a[Mesh::ARRAY_INDEX] = indices; a[Mesh::ARRAY_COLOR] = colors; - mesh->add_surface_from_arrays(Mesh::PRIMITIVE_TRIANGLE_FAN, a); + mesh->add_surface_from_arrays(Mesh::PRIMITIVE_TRIANGLES, a); mesh->surface_set_material(0, p_material); float md = 0; @@ -339,10 +348,10 @@ void EditorSpatialGizmo::add_handles(const Vector<Vector3> &p_handles, const Ref Array a; a.resize(VS::ARRAY_MAX); a[VS::ARRAY_VERTEX] = p_handles; - PoolVector<Color> colors; + Vector<Color> colors; { colors.resize(p_handles.size()); - PoolVector<Color>::Write w = colors.write(); + Color *w = colors.ptrw(); for (int i = 0; i < p_handles.size(); i++) { Color col(1, 1, 1, 1); @@ -401,8 +410,8 @@ void EditorSpatialGizmo::add_solid_box(Ref<Material> &p_material, Vector3 p_size cubem.set_size(p_size); Array arrays = cubem.surface_get_arrays(0); - PoolVector3Array vertex = arrays[VS::ARRAY_VERTEX]; - PoolVector3Array::Write w = vertex.write(); + PackedVector3Array vertex = arrays[VS::ARRAY_VERTEX]; + Vector3 *w = vertex.ptrw(); for (int i = 0; i < vertex.size(); ++i) { w[i] += p_position; @@ -1229,7 +1238,6 @@ CameraSpatialGizmoPlugin::CameraSpatialGizmoPlugin() { Color gizmo_color = EDITOR_DEF("editors/3d_gizmos/gizmo_colors/camera", Color(0.8, 0.4, 0.8)); create_material("camera_material", gizmo_color); - create_icon_material("camera_icon", SpatialEditor::get_singleton()->get_icon("GizmoCamera", "EditorIcons")); create_handle_material("handles"); } @@ -1341,7 +1349,6 @@ void CameraSpatialGizmoPlugin::redraw(EditorSpatialGizmo *p_gizmo) { Vector<Vector3> handles; Ref<Material> material = get_material("camera_material", p_gizmo); - Ref<Material> icon = get_material("camera_icon", p_gizmo); #define ADD_TRIANGLE(m_a, m_b, m_c) \ { \ @@ -1436,7 +1443,6 @@ void CameraSpatialGizmoPlugin::redraw(EditorSpatialGizmo *p_gizmo) { #undef ADD_QUAD p_gizmo->add_lines(lines, material); - p_gizmo->add_unscaled_billboard(icon, 0.05); p_gizmo->add_handles(handles, get_material("handles")); ClippedCamera *clipcam = Object::cast_to<ClippedCamera>(camera); @@ -1557,7 +1563,7 @@ Position3DSpatialGizmoPlugin::Position3DSpatialGizmoPlugin() { pos3d_mesh = Ref<ArrayMesh>(memnew(ArrayMesh)); cursor_points = Vector<Vector3>(); - PoolVector<Color> cursor_colors; + Vector<Color> cursor_colors; float cs = 0.25; cursor_points.push_back(Vector3(+cs, 0, 0)); cursor_points.push_back(Vector3(-cs, 0, 0)); @@ -1572,12 +1578,12 @@ Position3DSpatialGizmoPlugin::Position3DSpatialGizmoPlugin() { cursor_colors.push_back(EditorNode::get_singleton()->get_gui_base()->get_color("axis_z_color", "Editor")); cursor_colors.push_back(EditorNode::get_singleton()->get_gui_base()->get_color("axis_z_color", "Editor")); - Ref<SpatialMaterial> mat = memnew(SpatialMaterial); - mat->set_flag(SpatialMaterial::FLAG_UNSHADED, true); - mat->set_flag(SpatialMaterial::FLAG_ALBEDO_FROM_VERTEX_COLOR, true); - mat->set_flag(SpatialMaterial::FLAG_SRGB_VERTEX_COLOR, true); - mat->set_feature(SpatialMaterial::FEATURE_TRANSPARENT, true); - mat->set_line_width(3); + Ref<StandardMaterial3D> mat = memnew(StandardMaterial3D); + mat->set_shading_mode(StandardMaterial3D::SHADING_MODE_UNSHADED); + mat->set_flag(StandardMaterial3D::FLAG_ALBEDO_FROM_VERTEX_COLOR, true); + mat->set_flag(StandardMaterial3D::FLAG_SRGB_VERTEX_COLOR, true); + mat->set_transparency(StandardMaterial3D::TRANSPARENCY_ALPHA); + Array d; d.resize(VS::ARRAY_MAX); d[Mesh::ARRAY_VERTEX] = cursor_points; @@ -1983,7 +1989,7 @@ void RayCastSpatialGizmoPlugin::redraw(EditorSpatialGizmo *p_gizmo) { lines.push_back(Vector3()); lines.push_back(raycast->get_cast_to()); - const Ref<SpatialMaterial> material = + const Ref<StandardMaterial3D> material = get_material(raycast->is_enabled() ? "shape_material" : "shape_material_disabled", p_gizmo); p_gizmo->add_lines(lines, material); @@ -2003,7 +2009,7 @@ void SpringArmSpatialGizmoPlugin::redraw(EditorSpatialGizmo *p_gizmo) { lines.push_back(Vector3()); lines.push_back(Vector3(0, 0, 1.0) * spring_arm->get_length()); - Ref<SpatialMaterial> material = get_material("shape_material", p_gizmo); + Ref<StandardMaterial3D> material = get_material("shape_material", p_gizmo); p_gizmo->add_lines(lines, material); p_gizmo->add_collision_segments(lines); @@ -2895,7 +2901,7 @@ void GIProbeGizmoPlugin::redraw(EditorSpatialGizmo *p_gizmo) { } //// - +#if 0 BakedIndirectLightGizmoPlugin::BakedIndirectLightGizmoPlugin() { Color gizmo_color = EDITOR_DEF("editors/3d_gizmos/gizmo_colors/baked_indirect_light", Color(0.5, 0.6, 1)); @@ -3024,7 +3030,7 @@ void BakedIndirectLightGizmoPlugin::redraw(EditorSpatialGizmo *p_gizmo) { p_gizmo->add_unscaled_billboard(icon, 0.05); p_gizmo->add_handles(handles, get_material("handles")); } - +#endif //// CollisionShapeSpatialGizmoPlugin::CollisionShapeSpatialGizmoPlugin() { @@ -3602,7 +3608,7 @@ void CollisionShapeSpatialGizmoPlugin::redraw(EditorSpatialGizmo *p_gizmo) { if (Object::cast_to<ConvexPolygonShape>(*s)) { - PoolVector<Vector3> points = Object::cast_to<ConvexPolygonShape>(*s)->get_points(); + Vector<Vector3> points = Object::cast_to<ConvexPolygonShape>(*s)->get_points(); if (points.size() > 3) { @@ -3739,8 +3745,8 @@ void NavigationMeshSpatialGizmoPlugin::redraw(EditorSpatialGizmo *p_gizmo) { if (navmeshie.is_null()) return; - PoolVector<Vector3> vertices = navmeshie->get_vertices(); - PoolVector<Vector3>::Read vr = vertices.read(); + Vector<Vector3> vertices = navmeshie->get_vertices(); + const Vector3 *vr = vertices.ptr(); List<Face3> faces; for (int i = 0; i < navmeshie->get_polygon_count(); i++) { Vector<int> p = navmeshie->get_polygon(i); @@ -3759,11 +3765,11 @@ void NavigationMeshSpatialGizmoPlugin::redraw(EditorSpatialGizmo *p_gizmo) { return; Map<_EdgeKey, bool> edge_map; - PoolVector<Vector3> tmeshfaces; + Vector<Vector3> tmeshfaces; tmeshfaces.resize(faces.size() * 3); { - PoolVector<Vector3>::Write tw = tmeshfaces.write(); + Vector3 *tw = tmeshfaces.ptrw(); int tidx = 0; for (List<Face3>::Element *E = faces.front(); E; E = E->next()) { diff --git a/editor/spatial_editor_gizmos.h b/editor/spatial_editor_gizmos.h index 81b62981ac..b786aa2b50 100644 --- a/editor/spatial_editor_gizmos.h +++ b/editor/spatial_editor_gizmos.h @@ -303,6 +303,7 @@ public: GIProbeGizmoPlugin(); }; +#if 0 class BakedIndirectLightGizmoPlugin : public EditorSpatialGizmoPlugin { GDCLASS(BakedIndirectLightGizmoPlugin, EditorSpatialGizmoPlugin); @@ -320,7 +321,7 @@ public: BakedIndirectLightGizmoPlugin(); }; - +#endif class CollisionShapeSpatialGizmoPlugin : public EditorSpatialGizmoPlugin { GDCLASS(CollisionShapeSpatialGizmoPlugin, EditorSpatialGizmoPlugin); diff --git a/editor/translations/af.po b/editor/translations/af.po index 23917c09e6..eab0005cb1 100644 --- a/editor/translations/af.po +++ b/editor/translations/af.po @@ -711,8 +711,9 @@ msgid "Line Number:" msgstr "Reël Nommer:" #: editor/code_editor.cpp -msgid "Replaced %d occurrence(s)." -msgstr "Het %d verskynsel(s) vervang." +#, fuzzy +msgid "%d replaced." +msgstr "Vervang" #: editor/code_editor.cpp editor/editor_help.cpp msgid "%d match." @@ -4009,15 +4010,16 @@ msgid "Saving..." msgstr "" #: editor/import_dock.cpp -msgid "Set as Default for '%s'" -msgstr "" +#, fuzzy +msgid "%d Files" +msgstr "Vind" #: editor/import_dock.cpp -msgid "Clear Default for '%s'" +msgid "Set as Default for '%s'" msgstr "" #: editor/import_dock.cpp -msgid " Files" +msgid "Clear Default for '%s'" msgstr "" #: editor/import_dock.cpp @@ -5930,11 +5932,12 @@ msgid "Mesh is empty!" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Trimesh Body" -msgstr "" +#, fuzzy +msgid "Couldn't create a Trimesh collision shape." +msgstr "Kon nie vouer skep nie." #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Convex Body" +msgid "Create Static Trimesh Body" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -5946,12 +5949,30 @@ msgid "Create Trimesh Static Shape" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Failed creating shapes!" +msgid "Can't create a single convex collision shape for the scene root." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Couldn't create a single convex collision shape." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp #, fuzzy -msgid "Create Convex Shape(s)" +msgid "Create Single Convex Shape" +msgstr "Skep Nuwe" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Can't create multiple convex collision shapes for the scene root." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Couldn't create any collision shapes." +msgstr "Kon nie vouer skep nie." + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Create Multiple Convex Shapes" msgstr "Skep Nuwe" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -6003,19 +6024,57 @@ msgid "Create Trimesh Static Body" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a StaticBody and assigns a polygon-based collision shape to it " +"automatically.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Collision Sibling" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a polygon-based collision shape.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp #, fuzzy -msgid "Create Convex Collision Sibling(s)" +msgid "Create Single Convex Collision Siblings" msgstr "Skep Intekening" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a single convex collision shape.\n" +"This is the fastest (but least accurate) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Create Multiple Convex Collision Siblings" +msgstr "Skep Intekening" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a polygon-based collision shape.\n" +"This is a performance middle-ground between the two above options." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Outline Mesh..." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a static outline mesh. The outline mesh will have its normals " +"flipped automatically.\n" +"This can be used instead of the SpatialMaterial Grow property when using " +"that property isn't possible." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "View UV1" msgstr "" @@ -8480,7 +8539,7 @@ msgstr "" msgid "No VCS addons are available." msgstr "" -#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Error" msgstr "" @@ -9594,11 +9653,18 @@ msgid "Export With Debug" msgstr "" #: editor/project_manager.cpp -msgid "The path does not exist." -msgstr "" +#, fuzzy +msgid "The path specified doesn't exist." +msgstr "Lêer bestaan nie." #: editor/project_manager.cpp -msgid "Invalid '.zip' project file, does not contain a 'project.godot' file." +#, fuzzy +msgid "Error opening package file (it's not in ZIP format)." +msgstr "Fout met oopmaak, die pakket-lêer is nie in zip format nie." + +#: editor/project_manager.cpp +msgid "" +"Invalid \".zip\" project file; it doesn't contain a \"project.godot\" file." msgstr "" #: editor/project_manager.cpp @@ -9606,11 +9672,11 @@ msgid "Please choose an empty folder." msgstr "" #: editor/project_manager.cpp -msgid "Please choose a 'project.godot' or '.zip' file." +msgid "Please choose a \"project.godot\" or \".zip\" file." msgstr "" #: editor/project_manager.cpp -msgid "Directory already contains a Godot project." +msgid "This directory already contains a Godot project." msgstr "" #: editor/project_manager.cpp @@ -10268,6 +10334,10 @@ msgid "Suffix" msgstr "" #: editor/rename_dialog.cpp +msgid "Use Regular Expressions" +msgstr "" + +#: editor/rename_dialog.cpp msgid "Advanced Options" msgstr "" @@ -10304,7 +10374,7 @@ msgid "" msgstr "" #: editor/rename_dialog.cpp -msgid "Per Level counter" +msgid "Per-level Counter" msgstr "" #: editor/rename_dialog.cpp @@ -10335,10 +10405,6 @@ msgid "" msgstr "" #: editor/rename_dialog.cpp -msgid "Regular Expressions" -msgstr "" - -#: editor/rename_dialog.cpp msgid "Post-Process" msgstr "" @@ -10347,11 +10413,11 @@ msgid "Keep" msgstr "" #: editor/rename_dialog.cpp -msgid "CamelCase to under_scored" +msgid "PascalCase to snake_case" msgstr "" #: editor/rename_dialog.cpp -msgid "under_scored to CamelCase" +msgid "snake_case to PascalCase" msgstr "" #: editor/rename_dialog.cpp @@ -10371,6 +10437,15 @@ msgstr "" msgid "Reset" msgstr "Herset Zoem" +#: editor/rename_dialog.cpp +msgid "Regular Expression Error" +msgstr "" + +#: editor/rename_dialog.cpp +#, fuzzy +msgid "At character %s" +msgstr "Geldige karakters:" + #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "" @@ -10826,7 +10901,7 @@ msgid "Invalid inherited parent name or path." msgstr "" #: editor/script_create_dialog.cpp -msgid "Script is valid." +msgid "Script path/name is valid." msgstr "" #: editor/script_create_dialog.cpp @@ -10928,6 +11003,10 @@ msgid "Copy Error" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Video RAM" +msgstr "" + +#: editor/script_editor_debugger.cpp #, fuzzy msgid "Skip Breakpoints" msgstr "Skep" @@ -10978,10 +11057,6 @@ msgid "Total:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Video Mem" -msgstr "" - -#: editor/script_editor_debugger.cpp msgid "Resource Path" msgstr "" @@ -12540,6 +12615,9 @@ msgstr "" msgid "Constants cannot be modified." msgstr "" +#~ msgid "Replaced %d occurrence(s)." +#~ msgstr "Het %d verskynsel(s) vervang." + #, fuzzy #~ msgid "" #~ "There are currently no tutorials for this class, you can [color=$color]" diff --git a/editor/translations/ar.po b/editor/translations/ar.po index 6a3dba2b43..c9520d2669 100644 --- a/editor/translations/ar.po +++ b/editor/translations/ar.po @@ -708,8 +708,9 @@ msgid "Line Number:" msgstr "رقم الخط:" #: editor/code_editor.cpp -msgid "Replaced %d occurrence(s)." -msgstr "إستبُدل %d حادثة(حوادث)." +#, fuzzy +msgid "%d replaced." +msgstr "إستبدال" #: editor/code_editor.cpp editor/editor_help.cpp msgid "%d match." @@ -4069,6 +4070,11 @@ msgid "Saving..." msgstr "جاري الحفظ..." #: editor/import_dock.cpp +#, fuzzy +msgid "%d Files" +msgstr " ملفات" + +#: editor/import_dock.cpp msgid "Set as Default for '%s'" msgstr "حدد كإفتراضي من أجل '%s'" @@ -4077,10 +4083,6 @@ msgid "Clear Default for '%s'" msgstr "إخلاء الإفتراضي لـ '%s'" #: editor/import_dock.cpp -msgid " Files" -msgstr " ملفات" - -#: editor/import_dock.cpp msgid "Import As:" msgstr "إستيراد كـ:" @@ -6061,12 +6063,13 @@ msgid "Mesh is empty!" msgstr "الميش فارغ!" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Trimesh Body" -msgstr "أنشئ جسم تراميش ثابت" +#, fuzzy +msgid "Couldn't create a Trimesh collision shape." +msgstr "إنشاء متصادم تراميش قريب" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Convex Body" -msgstr "أنشئ جسم محدب ثابت" +msgid "Create Static Trimesh Body" +msgstr "أنشئ جسم تراميش ثابت" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "This doesn't work on scene root!" @@ -6078,12 +6081,30 @@ msgid "Create Trimesh Static Shape" msgstr "أنشئ شكل تراميش" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Failed creating shapes!" +msgid "Can't create a single convex collision shape for the scene root." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Couldn't create a single convex collision shape." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Create Single Convex Shape" +msgstr "أنشئ شكل محدب" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Can't create multiple convex collision shapes for the scene root." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp #, fuzzy -msgid "Create Convex Shape(s)" +msgid "Couldn't create any collision shapes." +msgstr "لا يمكن إنشاء المجلد." + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Create Multiple Convex Shapes" msgstr "أنشئ شكل محدب" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -6135,19 +6156,57 @@ msgid "Create Trimesh Static Body" msgstr "إنشاء جسم تراميش ثابت" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a StaticBody and assigns a polygon-based collision shape to it " +"automatically.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Collision Sibling" msgstr "إنشاء متصادم تراميش قريب" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a polygon-based collision shape.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp #, fuzzy -msgid "Create Convex Collision Sibling(s)" +msgid "Create Single Convex Collision Siblings" msgstr "إنشاء متصادم محدب قريب" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a single convex collision shape.\n" +"This is the fastest (but least accurate) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Create Multiple Convex Collision Siblings" +msgstr "إنشاء متصادم محدب قريب" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a polygon-based collision shape.\n" +"This is a performance middle-ground between the two above options." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Outline Mesh..." msgstr "إنشاء شبكة الخطوط العريضة ..." #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a static outline mesh. The outline mesh will have its normals " +"flipped automatically.\n" +"This can be used instead of the SpatialMaterial Grow property when using " +"that property isn't possible." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "View UV1" msgstr "أظهر UV1" @@ -8677,7 +8736,7 @@ msgstr "مجموعة البلاط" msgid "No VCS addons are available." msgstr "" -#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Error" msgstr "" @@ -9812,11 +9871,18 @@ msgid "Export With Debug" msgstr "" #: editor/project_manager.cpp -msgid "The path does not exist." +#, fuzzy +msgid "The path specified doesn't exist." msgstr "هذا المسار غير موجود." #: editor/project_manager.cpp -msgid "Invalid '.zip' project file, does not contain a 'project.godot' file." +#, fuzzy +msgid "Error opening package file (it's not in ZIP format)." +msgstr "حدث خطأ عندفتح ملف الحزمة بسبب أن الملف ليس في صيغة \"ZIP\"." + +#: editor/project_manager.cpp +msgid "" +"Invalid \".zip\" project file; it doesn't contain a \"project.godot\" file." msgstr "" #: editor/project_manager.cpp @@ -9824,11 +9890,11 @@ msgid "Please choose an empty folder." msgstr "" #: editor/project_manager.cpp -msgid "Please choose a 'project.godot' or '.zip' file." +msgid "Please choose a \"project.godot\" or \".zip\" file." msgstr "" #: editor/project_manager.cpp -msgid "Directory already contains a Godot project." +msgid "This directory already contains a Godot project." msgstr "" #: editor/project_manager.cpp @@ -10489,6 +10555,11 @@ msgstr "" #: editor/rename_dialog.cpp #, fuzzy +msgid "Use Regular Expressions" +msgstr "النسخة الحالية:" + +#: editor/rename_dialog.cpp +#, fuzzy msgid "Advanced Options" msgstr "إعدادات الكبس" @@ -10527,7 +10598,7 @@ msgid "" msgstr "" #: editor/rename_dialog.cpp -msgid "Per Level counter" +msgid "Per-level Counter" msgstr "" #: editor/rename_dialog.cpp @@ -10558,10 +10629,6 @@ msgid "" msgstr "" #: editor/rename_dialog.cpp -msgid "Regular Expressions" -msgstr "" - -#: editor/rename_dialog.cpp msgid "Post-Process" msgstr "" @@ -10570,11 +10637,11 @@ msgid "Keep" msgstr "" #: editor/rename_dialog.cpp -msgid "CamelCase to under_scored" +msgid "PascalCase to snake_case" msgstr "" #: editor/rename_dialog.cpp -msgid "under_scored to CamelCase" +msgid "snake_case to PascalCase" msgstr "" #: editor/rename_dialog.cpp @@ -10594,6 +10661,15 @@ msgstr "" msgid "Reset" msgstr "إرجاع التكبير" +#: editor/rename_dialog.cpp +msgid "Regular Expression Error" +msgstr "" + +#: editor/rename_dialog.cpp +#, fuzzy +msgid "At character %s" +msgstr "الأحرف الصالحة:" + #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "" @@ -11062,7 +11138,7 @@ msgstr "" #: editor/script_create_dialog.cpp #, fuzzy -msgid "Script is valid." +msgid "Script path/name is valid." msgstr "شجرة الحركة صحيحة." #: editor/script_create_dialog.cpp @@ -11169,6 +11245,10 @@ msgid "Copy Error" msgstr "خطأ في نسخ" #: editor/script_editor_debugger.cpp +msgid "Video RAM" +msgstr "" + +#: editor/script_editor_debugger.cpp #, fuzzy msgid "Skip Breakpoints" msgstr "مسح النقاط" @@ -11219,10 +11299,6 @@ msgid "Total:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Video Mem" -msgstr "" - -#: editor/script_editor_debugger.cpp msgid "Resource Path" msgstr "" @@ -12806,6 +12882,12 @@ msgstr "يمكن تعيين المتغيرات فقط في الذروة ." msgid "Constants cannot be modified." msgstr "لا يمكن تعديل الثوابت." +#~ msgid "Replaced %d occurrence(s)." +#~ msgstr "إستبُدل %d حادثة(حوادث)." + +#~ msgid "Create Static Convex Body" +#~ msgstr "أنشئ جسم محدب ثابت" + #~ msgid "" #~ "There are currently no tutorials for this class, you can [color=$color]" #~ "[url=$url]contribute one[/url][/color] or [color=$color][url=" diff --git a/editor/translations/bg.po b/editor/translations/bg.po index a42e873790..2281de6a8e 100644 --- a/editor/translations/bg.po +++ b/editor/translations/bg.po @@ -4,7 +4,7 @@ # This file is distributed under the same license as the Godot source code. # Bojidar Marinov <bojidar.marinov.bg@gmail.com>, 2016. # Иван Пенев (Адмирал АнимЕ) <aeternus.arcis@gmail.com>, 2016-2017. -# Любомир Василев <lyubomirv@abv.bg>, 2018. +# Любомир Василев <lyubomirv@abv.bg>, 2018, 2020. # MaresPW <marespw206@gmail.com>, 2018. # PakoSt <kokotekilata@gmail.com>, 2018. # Damyan Dichev <mwshock2@gmail.com>, 2019. @@ -12,8 +12,8 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2019-02-13 07:10+0000\n" -"Last-Translator: Damyan Dichev <mwshock2@gmail.com>\n" +"PO-Revision-Date: 2020-02-14 03:19+0000\n" +"Last-Translator: Любомир Василев <lyubomirv@abv.bg>\n" "Language-Team: Bulgarian <https://hosted.weblate.org/projects/godot-engine/" "godot/bg/>\n" "Language: bg\n" @@ -21,24 +21,24 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 3.5-dev\n" +"X-Generator: Weblate 3.11-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Invalid type argument to convert(), use TYPE_* constants." msgstr "" -"Невалиден агрумент тип на convert(), използвайте константите започващи с " +"Неправилен тип аргумент на convert(). Използвайте константите започващи с " "TYPE_*." #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp msgid "Expected a string of length 1 (a character)." -msgstr "" +msgstr "Очаква се низ с дължина 1 (един знак)." #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/mono/glue/gd_glue.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." -msgstr "Недостатъчно байтове за разкодиране или недействителен формат." +msgstr "Недостатъчно байтове за разкодиране или неправилен формат." #: core/math/expression.cpp msgid "Invalid input %i (not passed) in expression" @@ -53,7 +53,6 @@ msgid "Invalid operands to operator %s, %s and %s." msgstr "Невалидни операнди към оператор %s, %s и %s." #: core/math/expression.cpp -#, fuzzy msgid "Invalid index of type %s for base type %s" msgstr "Невалиден индекс от тип %s за базов тип %s" @@ -63,7 +62,7 @@ msgstr "" #: core/math/expression.cpp msgid "Invalid arguments to construct '%s'" -msgstr "Невалидени агрументи за конструкция '%s'" +msgstr "Неправилни аргументи за създаване на „%s“" #: core/math/expression.cpp msgid "On call to '%s':" @@ -98,27 +97,24 @@ msgid "EiB" msgstr "" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Free" -msgstr "Свободен" +msgstr "Свободно" #: editor/animation_bezier_editor.cpp msgid "Balanced" msgstr "" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Mirror" -msgstr "Отрази (огледално)" +msgstr "Огледално" #: editor/animation_bezier_editor.cpp editor/editor_profiler.cpp msgid "Time:" msgstr "" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Value:" -msgstr "Стойност" +msgstr "Стойност:" #: editor/animation_bezier_editor.cpp msgid "Insert Key Here" @@ -137,9 +133,8 @@ msgid "Add Bezier Point" msgstr "" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Move Bezier Points" -msgstr "LMB: Премести Точка." +msgstr "Преместване на точки на Безие" #: editor/animation_bezier_editor.cpp editor/animation_track_editor.cpp msgid "Anim Duplicate Keys" @@ -190,9 +185,8 @@ msgid "Anim Multi Change Call" msgstr "" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Change Animation Length" -msgstr "Промени Името на Анимацията:" +msgstr "Промяна на продължителността на анимацията" #: editor/animation_track_editor.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp @@ -224,24 +218,20 @@ msgid "Animation Playback Track" msgstr "" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation length (frames)" -msgstr "Ново Име на Анимация:" +msgstr "Продължителност на анимацията (в кадри)" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation length (seconds)" -msgstr "Промени Името на Анимацията:" +msgstr "Продължителност на анимацията (в секунди)" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Add Track" -msgstr "Добавяне на нови пътечки." +msgstr "Добавяне на пътечка" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation Looping" -msgstr "Изтриване на анимацията?" +msgstr "Повтаряне на анимацията" #: editor/animation_track_editor.cpp #: modules/visual_script/visual_script_editor.cpp @@ -277,14 +267,12 @@ msgid "Loop Wrap Mode (Interpolate end with beginning on loop)" msgstr "" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Remove this track." msgstr "Премахване на пътечката." #: editor/animation_track_editor.cpp -#, fuzzy msgid "Time (s): " -msgstr "Стъпка (сек.):" +msgstr "Време (сек): " #: editor/animation_track_editor.cpp msgid "Toggle Track Enabled" @@ -333,29 +321,24 @@ msgid "Insert Key" msgstr "" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Duplicate Key(s)" -msgstr "Направи дупликат на Key(s)" +msgstr "Дублиране на ключа/ключовете" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Delete Key(s)" -msgstr "Изтрий Key(s)" +msgstr "Изтриване на ключа/ключовете" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Change Animation Update Mode" -msgstr "Промени Името на Анимацията:" +msgstr "Промяна на режима на обновяване на анимацията" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Change Animation Interpolation Mode" -msgstr "Промени Името на Анимацията:" +msgstr "Промяна на режима на интерполиране на анимацията" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Change Animation Loop Mode" -msgstr "Промени Името на Анимацията:" +msgstr "Промяна на режима на повтаряне на анимацията" #: editor/animation_track_editor.cpp msgid "Remove Anim Track" @@ -363,7 +346,7 @@ msgstr "" #: editor/animation_track_editor.cpp msgid "Create NEW track for %s and insert key?" -msgstr "" +msgstr "Създаване на НОВА пътечка за %s и вмъкване на ключ?" #: editor/animation_track_editor.cpp msgid "Create %d NEW tracks and insert keys?" @@ -402,14 +385,12 @@ msgid "Anim Insert Key" msgstr "" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Change Animation Step" -msgstr "Промени Името на Анимацията:" +msgstr "Промяна на стъпката на анимацията" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Rearrange Tracks" -msgstr "Поставяне на възелите" +msgstr "Пренареждане на пътечките" #: editor/animation_track_editor.cpp msgid "Transform tracks only apply to Spatial-based nodes." @@ -440,9 +421,8 @@ msgid "Invalid track for Bezier (no suitable sub-properties)" msgstr "" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Add Bezier Track" -msgstr "Добавяне на нови пътечки." +msgstr "Добавяне на нова пътечка на Безие" #: editor/animation_track_editor.cpp msgid "Track path is invalid, so can't add a key." @@ -457,18 +437,16 @@ msgid "Add Transform Track Key" msgstr "" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Add Track Key" -msgstr "Добавяне на нови пътечки." +msgstr "Добавяне на ключ за пътечката" #: editor/animation_track_editor.cpp msgid "Track path is invalid, so can't add a method key." msgstr "" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Add Method Track Key" -msgstr "Добавяне на нови пътечки." +msgstr "Добавяне на ключ за пътечка с метод" #: editor/animation_track_editor.cpp msgid "Method not found in object: " @@ -483,9 +461,8 @@ msgid "Clipboard is empty" msgstr "" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Paste Tracks" -msgstr "Поставяне на възелите" +msgstr "Поставяне на пътечки" #: editor/animation_track_editor.cpp msgid "Anim Scale Keys" @@ -526,14 +503,12 @@ msgid "Group tracks by node or display them as plain list." msgstr "" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Snap:" -msgstr "Стъпка (сек.):" +msgstr "Прилепване:" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation step value." -msgstr "Изтриване на анимацията?" +msgstr "Стойност за стъпката на анимацията." #: editor/animation_track_editor.cpp msgid "Seconds" @@ -555,7 +530,7 @@ msgstr "" #: editor/animation_track_editor.cpp msgid "Animation properties." -msgstr "Характеристики на анимацията." +msgstr "Свойства на анимацията." #: editor/animation_track_editor.cpp msgid "Copy Tracks" @@ -579,17 +554,15 @@ msgstr "" #: editor/animation_track_editor.cpp msgid "Delete Selection" -msgstr "Изтрий Селекцията" +msgstr "Изтриване на избраното" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Go to Next Step" -msgstr "Отиди на Следваща Стъпка" +msgstr "Преминаване към следващата стъпка" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Go to Previous Step" -msgstr "Отиди на Предишна Стъпка" +msgstr "Преминаване към предходната стъпка" #: editor/animation_track_editor.cpp msgid "Optimize Animation" @@ -601,7 +574,7 @@ msgstr "Почистване на анимацията" #: editor/animation_track_editor.cpp msgid "Pick the node that will be animated:" -msgstr "Избери възелa, който да бъде анимиран:" +msgstr "Изберете възелa, който да бъде анимиран:" #: editor/animation_track_editor.cpp msgid "Use Bezier Curves" @@ -625,7 +598,7 @@ msgstr "" #: editor/animation_track_editor.cpp msgid "Optimize" -msgstr "Оптимизирай" +msgstr "Оптимизиране" #: editor/animation_track_editor.cpp msgid "Remove invalid keys" @@ -652,9 +625,8 @@ msgid "Scale Ratio:" msgstr "" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Select Tracks to Copy" -msgstr "Изберете свойство" +msgstr "Изберете пътечки за копиране" #: editor/animation_track_editor.cpp editor/editor_log.cpp #: editor/editor_properties.cpp @@ -666,9 +638,8 @@ msgid "Copy" msgstr "Копиране" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Select All/None" -msgstr "Избиране на всичко" +msgstr "Избиране на всичко/нищо" #: editor/animation_track_editor_plugins.cpp #, fuzzy @@ -697,25 +668,24 @@ msgstr "" #: editor/code_editor.cpp msgid "Go to Line" -msgstr "Отиди на Ред" +msgstr "Преминаване към ред" #: editor/code_editor.cpp msgid "Line Number:" -msgstr "Номер на Реда:" +msgstr "Номер на реда:" #: editor/code_editor.cpp #, fuzzy -msgid "Replaced %d occurrence(s)." -msgstr "Готово - %d заместване(ния)." +msgid "%d replaced." +msgstr "Замяна..." #: editor/code_editor.cpp editor/editor_help.cpp msgid "%d match." msgstr "" #: editor/code_editor.cpp editor/editor_help.cpp -#, fuzzy msgid "%d matches." -msgstr "Няма Съвпадения" +msgstr "%d съвпадения." #: editor/code_editor.cpp editor/find_in_files.cpp msgid "Match Case" @@ -723,19 +693,19 @@ msgstr "" #: editor/code_editor.cpp editor/find_in_files.cpp msgid "Whole Words" -msgstr "Цели Думи" +msgstr "Цели думи" #: editor/code_editor.cpp editor/rename_dialog.cpp msgid "Replace" -msgstr "Преименувай" +msgstr "Замяна" #: editor/code_editor.cpp msgid "Replace All" -msgstr "Преименувай Всички" +msgstr "Замяна на всички" #: editor/code_editor.cpp msgid "Selection Only" -msgstr "Само Селекцията" +msgstr "Само избраното" #: editor/code_editor.cpp editor/plugins/script_text_editor.cpp #: editor/plugins/text_editor.cpp @@ -743,21 +713,20 @@ msgid "Standard" msgstr "" #: editor/code_editor.cpp editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Toggle Scripts Panel" -msgstr "Видимост на Панела със Скриптове" +msgstr "Превключване на панела за скриптове" #: editor/code_editor.cpp editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/texture_region_editor_plugin.cpp #: editor/plugins/tile_set_editor_plugin.cpp scene/gui/graph_edit.cpp msgid "Zoom In" -msgstr "Приближи" +msgstr "Приближаване" #: editor/code_editor.cpp editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/texture_region_editor_plugin.cpp #: editor/plugins/tile_set_editor_plugin.cpp scene/gui/graph_edit.cpp msgid "Zoom Out" -msgstr "Отдалечи" +msgstr "Отдалечаване" #: editor/code_editor.cpp msgid "Reset Zoom" @@ -782,30 +751,26 @@ msgid "" msgstr "" #: editor/connections_dialog.cpp -#, fuzzy msgid "Connect to Node:" -msgstr "Изрязване на възелите" +msgstr "Свързване към възел:" #: editor/connections_dialog.cpp -#, fuzzy msgid "Connect to Script:" -msgstr "Свържи Сигнала: " +msgstr "Свързване към скрипт:" #: editor/connections_dialog.cpp -#, fuzzy msgid "From Signal:" -msgstr "Свържи Сигнала: " +msgstr "От сигнал:" #: editor/connections_dialog.cpp -#, fuzzy msgid "Scene does not contain any script." -msgstr "Възелът не съдържа геометрия." +msgstr "Сцената не съдържа скриптове." #: editor/connections_dialog.cpp editor/editor_autoload_settings.cpp #: editor/groups_editor.cpp editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp msgid "Add" -msgstr "Добави" +msgstr "Добавяне" #: editor/connections_dialog.cpp editor/dependency_editor.cpp #: editor/editor_feature_profile.cpp editor/groups_editor.cpp @@ -816,7 +781,7 @@ msgstr "Добави" #: editor/plugins/visual_shader_editor_plugin.cpp editor/project_manager.cpp #: editor/project_settings_editor.cpp msgid "Remove" -msgstr "Премахни" +msgstr "Премахване" #: editor/connections_dialog.cpp msgid "Add Extra Call Argument:" @@ -827,9 +792,8 @@ msgid "Extra Call Arguments:" msgstr "" #: editor/connections_dialog.cpp -#, fuzzy msgid "Receiver Method:" -msgstr "Изберете метод" +msgstr "Метод-получател:" #: editor/connections_dialog.cpp msgid "Advanced" @@ -853,9 +817,8 @@ msgid "Disconnects the signal after its first emission." msgstr "" #: editor/connections_dialog.cpp -#, fuzzy msgid "Cannot connect signal" -msgstr "Свържи Сигнала: " +msgstr "Сигналът не може да бъде свързан" #: editor/connections_dialog.cpp editor/dependency_editor.cpp #: editor/export_template_manager.cpp editor/groups_editor.cpp @@ -874,43 +837,40 @@ msgstr "Затваряне" #: editor/connections_dialog.cpp msgid "Connect" -msgstr "Свържи" +msgstr "Свързване" #: editor/connections_dialog.cpp -#, fuzzy msgid "Signal:" -msgstr "Настройки на редактора" +msgstr "Сигнал:" #: editor/connections_dialog.cpp msgid "Connect '%s' to '%s'" -msgstr "Свържи '%s' с '%s'" +msgstr "Свързване на „%s“ с „%s“" #: editor/connections_dialog.cpp msgid "Disconnect '%s' from '%s'" -msgstr "Разкачи '%s' от '%s'" +msgstr "Разкачване на „%s“ от „%s“" #: editor/connections_dialog.cpp msgid "Disconnect all from signal: '%s'" -msgstr "Разкачи всички сигнали: '%s'" +msgstr "Разкачване на всички от сигнала: „%s“" #: editor/connections_dialog.cpp msgid "Connect..." -msgstr "Свържи..." +msgstr "Свързване…" #: editor/connections_dialog.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Disconnect" -msgstr "Разкачи" +msgstr "Разкачване" #: editor/connections_dialog.cpp -#, fuzzy msgid "Connect a Signal to a Method" -msgstr "Свържи Сигнала: " +msgstr "Свързване на сигнала към метод" #: editor/connections_dialog.cpp -#, fuzzy msgid "Edit Connection:" -msgstr "Промени Връзката: " +msgstr "Редактиране на Връзката:" #: editor/connections_dialog.cpp msgid "Are you sure you want to remove all connections from the \"%s\" signal?" @@ -926,17 +886,15 @@ msgstr "" #: editor/connections_dialog.cpp msgid "Disconnect All" -msgstr "Разкачи Всички" +msgstr "Разкачване на всички" #: editor/connections_dialog.cpp -#, fuzzy msgid "Edit..." -msgstr "Изнасяне..." +msgstr "Редактиране..." #: editor/connections_dialog.cpp -#, fuzzy msgid "Go To Method" -msgstr "Методи" +msgstr "Преминаване към метода" #: editor/create_dialog.cpp msgid "Change %s Type" @@ -948,7 +906,7 @@ msgstr "" #: editor/create_dialog.cpp msgid "Create New %s" -msgstr "Създайте нов/а %s" +msgstr "Създаване на %s" #: editor/create_dialog.cpp editor/editor_file_dialog.cpp #: editor/filesystem_dock.cpp @@ -957,7 +915,7 @@ msgstr "Любими:" #: editor/create_dialog.cpp editor/editor_file_dialog.cpp msgid "Recent:" -msgstr "Скорошни:" +msgstr "Последни:" #: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp #: editor/property_selector.cpp editor/quick_open.cpp @@ -969,7 +927,7 @@ msgstr "Търсене:" #: editor/property_selector.cpp editor/quick_open.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Matches:" -msgstr "Съвпадащи:" +msgstr "Съвпадения:" #: editor/create_dialog.cpp editor/editor_plugin_settings.cpp #: editor/plugin_config_dialog.cpp @@ -1037,16 +995,16 @@ msgstr "" #: modules/visual_script/visual_script_property_selector.cpp #: scene/gui/file_dialog.cpp msgid "Open" -msgstr "Отвори" +msgstr "Отваряне" #: editor/dependency_editor.cpp msgid "Owners Of:" msgstr "" #: editor/dependency_editor.cpp -#, fuzzy msgid "Remove selected files from the project? (Can't be restored)" -msgstr "Премахни селектираните файлове от проекта? (необратимо)" +msgstr "" +"Да се премахнат ли избраните файлове от проекта? (Действието е необратимо)" #: editor/dependency_editor.cpp msgid "" @@ -1064,13 +1022,12 @@ msgid "Error loading:" msgstr "Грешка при зареждане:" #: editor/dependency_editor.cpp -#, fuzzy msgid "Load failed due to missing dependencies:" -msgstr "Сцената не успя да се зареди заради липсващи зависимости:" +msgstr "Зареждането беше неуспешно заради липсващи зависимости:" #: editor/dependency_editor.cpp editor/editor_node.cpp msgid "Open Anyway" -msgstr "Отвори Въпреки това" +msgstr "Отваряне въпреки това" #: editor/dependency_editor.cpp msgid "Which action should be taken?" @@ -1078,7 +1035,7 @@ msgstr "Кое действие да се изпълни?" #: editor/dependency_editor.cpp msgid "Fix Dependencies" -msgstr "Поправи Зависимостите" +msgstr "Поправяне на зависимостите" #: editor/dependency_editor.cpp msgid "Errors loading!" @@ -1089,9 +1046,8 @@ msgid "Permanently delete %d item(s)? (No undo!)" msgstr "" #: editor/dependency_editor.cpp -#, fuzzy msgid "Show Dependencies" -msgstr "Зависимости" +msgstr "Показване на зависимостите" #: editor/dependency_editor.cpp msgid "Orphan Resource Explorer" @@ -1103,7 +1059,7 @@ msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" -msgstr "Изтрий" +msgstr "Изтриване" #: editor/dependency_editor.cpp msgid "Owns" @@ -1123,7 +1079,7 @@ msgstr "" #: editor/editor_about.cpp msgid "Thanks from the Godot community!" -msgstr "Благодаря! От общността на Godot!" +msgstr "Благодарности от общността на Godot!" #: editor/editor_about.cpp msgid "Godot Engine contributors" @@ -1134,9 +1090,8 @@ msgid "Project Founders" msgstr "Основатели на проекта" #: editor/editor_about.cpp -#, fuzzy msgid "Lead Developer" -msgstr "Главен Разработчик" +msgstr "Главен разработчик" #: editor/editor_about.cpp msgid "Project Manager " @@ -1211,22 +1166,20 @@ msgid "Error opening package file, not in ZIP format." msgstr "" #: editor/editor_asset_installer.cpp -#, fuzzy msgid "%s (Already Exists)" -msgstr "Група с това име вече съществува." +msgstr "%s (Вече съществува)" #: editor/editor_asset_installer.cpp msgid "Uncompressing Assets" -msgstr "Разархивиране на активи" +msgstr "Разархивиране на ресурсите" #: editor/editor_asset_installer.cpp editor/project_manager.cpp msgid "The following files failed extraction from package:" msgstr "" #: editor/editor_asset_installer.cpp -#, fuzzy msgid "And %s more files." -msgstr "Неуспешно създаване на папка." +msgstr "И още %s файл(а)." #: editor/editor_asset_installer.cpp editor/project_manager.cpp msgid "Package installed successfully!" @@ -1238,9 +1191,8 @@ msgid "Success!" msgstr "Готово!" #: editor/editor_asset_installer.cpp -#, fuzzy msgid "Package Contents:" -msgstr "Съдържание:" +msgstr "Съдържание на пакета:" #: editor/editor_asset_installer.cpp editor/editor_node.cpp msgid "Install" @@ -1341,7 +1293,7 @@ msgstr "" #: editor/editor_audio_buses.cpp msgid "Delete Audio Bus" -msgstr "Изтриване звуковата шина" +msgstr "Изтриване на звуковата шина" #: editor/editor_audio_buses.cpp msgid "Duplicate Audio Bus" @@ -1380,9 +1332,8 @@ msgid "Invalid file, not an audio bus layout." msgstr "" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Error saving file: %s" -msgstr "Грешка при записването на файла!" +msgstr "Грешка при запазването на файла: %s" #: editor/editor_audio_buses.cpp msgid "Add Bus" @@ -1475,18 +1426,16 @@ msgid "Rearrange Autoloads" msgstr "" #: editor/editor_autoload_settings.cpp editor/script_create_dialog.cpp -#, fuzzy msgid "Invalid path." -msgstr "невалидно име на Група." +msgstr "Неправилен път." #: editor/editor_autoload_settings.cpp editor/script_create_dialog.cpp msgid "File does not exist." msgstr "" #: editor/editor_autoload_settings.cpp -#, fuzzy msgid "Not in resource path." -msgstr "Обектът не е базиран на ресурсен файл" +msgstr "Не е в пътя на ресурсите." #: editor/editor_autoload_settings.cpp msgid "Add AutoLoad" @@ -1534,13 +1483,12 @@ msgid "[unsaved]" msgstr "" #: editor/editor_dir_dialog.cpp -#, fuzzy msgid "Please select a base directory first." -msgstr "Моля, първо изберете основна папка" +msgstr "Моля, първо изберете основна папка." #: editor/editor_dir_dialog.cpp msgid "Choose a Directory" -msgstr "Избери Директория" +msgstr "Изберете папка" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp #: editor/filesystem_dock.cpp editor/project_manager.cpp @@ -1558,11 +1506,11 @@ msgstr "Име:" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp #: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp msgid "Could not create folder." -msgstr "Неуспешно създаване на папка." +msgstr "Папката не може да бъде създадена." #: editor/editor_dir_dialog.cpp msgid "Choose" -msgstr "Избери" +msgstr "Избиране" #: editor/editor_export.cpp msgid "Storing File:" @@ -1617,34 +1565,28 @@ msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB." msgstr "" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "3D Editor" -msgstr "Нова сцена" +msgstr "3-измерен редактор" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Script Editor" -msgstr "Отвори Кодов Редактор" +msgstr "Редактор на скриптове" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Asset Library" -msgstr "Отваряне на библиотеката" +msgstr "Библиотека с ресурси" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Scene Tree Editing" -msgstr "Настройки за пускане на сцена" +msgstr "Редактиране на дървото на сцената" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Import Dock" -msgstr "Внасяне" +msgstr "Панел за внасяне" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Node Dock" -msgstr "Режим на Преместване" +msgstr "Панел за възлите" #: editor/editor_feature_profile.cpp msgid "FileSystem and Import Docks" @@ -1659,46 +1601,40 @@ msgid "Profile must be a valid filename and must not contain '.'" msgstr "" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Profile with this name already exists." -msgstr "Вече съществува файл или папка с това име." +msgstr "Вече съществува профил с това име." #: editor/editor_feature_profile.cpp msgid "(Editor Disabled, Properties Disabled)" msgstr "" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "(Properties Disabled)" -msgstr "Изберете свойство" +msgstr "(Свойствата са заключени)" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "(Editor Disabled)" -msgstr "Изключено" +msgstr "(Редакторът е заключен)" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Class Options:" -msgstr "Описание:" +msgstr "Настройки на класа:" #: editor/editor_feature_profile.cpp msgid "Enable Contextual Editor" msgstr "" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Enabled Properties:" -msgstr "Поставяне на възелите" +msgstr "Включени свойства:" #: editor/editor_feature_profile.cpp msgid "Enabled Features:" msgstr "" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Enabled Classes:" -msgstr "Търси Класове" +msgstr "Включени класове:" #: editor/editor_feature_profile.cpp msgid "File '%s' format is invalid, import aborted." @@ -1711,18 +1647,16 @@ msgid "" msgstr "" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Error saving profile to path: '%s'." -msgstr "Грешка при зареждането на шрифта." +msgstr "Грешка при запазването на профила в: „%s“." #: editor/editor_feature_profile.cpp msgid "Unset" msgstr "" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Current Profile:" -msgstr "Избиране на текущата папка" +msgstr "Текущ профил:" #: editor/editor_feature_profile.cpp msgid "Make Current" @@ -1744,38 +1678,32 @@ msgid "Export" msgstr "Изнасяне" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Available Profiles:" -msgstr "Поставяне на възелите" +msgstr "Налични профили:" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Class Options" -msgstr "Описание" +msgstr "Настройки на класа" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "New profile name:" -msgstr "Ново име:" +msgstr "Ново име на профила:" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Erase Profile" -msgstr "Изтрий точки." +msgstr "Изтриване на профила" #: editor/editor_feature_profile.cpp msgid "Godot Feature Profile" msgstr "" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Import Profile(s)" -msgstr "Внесен проект" +msgstr "Внасяне на профил(и)" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Export Profile" -msgstr "Изнасяне на проекта" +msgstr "Изнасяне на профила" #: editor/editor_feature_profile.cpp msgid "Manage Editor Feature Profiles" @@ -1790,24 +1718,21 @@ msgid "File Exists, Overwrite?" msgstr "Файлът съществува. Искате ли да го презапишете?" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -#, fuzzy msgid "Select This Folder" -msgstr "Изберете метод" +msgstr "Избиране на тази папка" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "Copy Path" msgstr "" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -#, fuzzy msgid "Open in File Manager" -msgstr "Диспечер на проектите" +msgstr "Отваряне във файловия мениджър" #: editor/editor_file_dialog.cpp editor/editor_node.cpp #: editor/filesystem_dock.cpp editor/project_manager.cpp -#, fuzzy msgid "Show in File Manager" -msgstr "Покажи във Файлов Мениджър" +msgstr "Показване във файловия мениджър" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "New Folder..." @@ -1820,27 +1745,27 @@ msgstr "" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "All Recognized" -msgstr "Всички Разпознати" +msgstr "Всички разпознати" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "All Files (*)" -msgstr "Всички Файлове (*)" +msgstr "Всички файлове (*)" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Open a File" -msgstr "Отвори Файл" +msgstr "Отваряне на файл" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Open File(s)" -msgstr "Отвори Файл(ове)" +msgstr "Отваряне на файл(ове)" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Open a Directory" -msgstr "Отвори Директория" +msgstr "Отваряне на папка" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Open a File or Directory" -msgstr "Отвори Файл или Директория" +msgstr "Отваряне на файл или папка" #: editor/editor_file_dialog.cpp editor/editor_node.cpp #: editor/editor_properties.cpp editor/inspector_dock.cpp @@ -1867,11 +1792,11 @@ msgstr "" #: editor/editor_file_dialog.cpp msgid "Toggle Hidden Files" -msgstr "Покажи Скрити Файлове" +msgstr "Превключване на скритите файлове" #: editor/editor_file_dialog.cpp msgid "Toggle Favorite" -msgstr "Покажи Любими" +msgstr "Превключване на любимите" #: editor/editor_file_dialog.cpp msgid "Toggle Mode" @@ -1890,34 +1815,28 @@ msgid "Move Favorite Down" msgstr "" #: editor/editor_file_dialog.cpp -#, fuzzy msgid "Go to previous folder." -msgstr "Към горната папка" +msgstr "Преминаване към горната папка." #: editor/editor_file_dialog.cpp -#, fuzzy msgid "Go to next folder." -msgstr "Към горната папка" +msgstr "Преминаване към горната папка." #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -#, fuzzy msgid "Go to parent folder." -msgstr "Към горната папка" +msgstr "Преминаване към горната папка." #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -#, fuzzy msgid "Refresh files." -msgstr "Търсене" +msgstr "Опресняване на файловете." #: editor/editor_file_dialog.cpp -#, fuzzy msgid "(Un)favorite current folder." -msgstr "Неуспешно създаване на папка." +msgstr "Добавяне/премахване на текущата папка в любимите." #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -#, fuzzy msgid "Toggle the visibility of hidden files." -msgstr "Покажи Скрити Файлове" +msgstr "Превключване на видимостта на скритите файлове." #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "View items as a grid of thumbnails." @@ -1957,7 +1876,7 @@ msgstr "" #: editor/editor_file_system.cpp msgid "(Re)Importing Assets" -msgstr "Извършва се повторно внасяне" +msgstr "(Повторно) внасяне на ресурсите" #: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp msgid "Top" @@ -1977,9 +1896,8 @@ msgid "Inherited by:" msgstr "" #: editor/editor_help.cpp -#, fuzzy msgid "Description" -msgstr "Описание:" +msgstr "Описание" #: editor/editor_help.cpp msgid "Online Tutorials" @@ -2002,9 +1920,8 @@ msgid "Methods" msgstr "Методи" #: editor/editor_help.cpp -#, fuzzy msgid "Theme Properties" -msgstr "Поставяне на възелите" +msgstr "Свойства на темата" #: editor/editor_help.cpp msgid "Enumerations" @@ -2015,14 +1932,12 @@ msgid "Constants" msgstr "Константи" #: editor/editor_help.cpp -#, fuzzy msgid "Property Descriptions" -msgstr "Кратко Описание:" +msgstr "Описания на свойствата" #: editor/editor_help.cpp -#, fuzzy msgid "(value)" -msgstr "Стойност" +msgstr "(стойност)" #: editor/editor_help.cpp msgid "" @@ -2031,9 +1946,8 @@ msgid "" msgstr "" #: editor/editor_help.cpp -#, fuzzy msgid "Method Descriptions" -msgstr "Описание" +msgstr "Описания на методите" #: editor/editor_help.cpp msgid "" @@ -2044,84 +1958,71 @@ msgstr "" #: editor/editor_help_search.cpp editor/editor_node.cpp #: editor/plugins/script_editor_plugin.cpp msgid "Search Help" -msgstr "Търси в Помощ" +msgstr "Търсене в помощната информация" #: editor/editor_help_search.cpp -#, fuzzy msgid "Case Sensitive" -msgstr "Затваряне на сцената" +msgstr "Чувствителност към регистъра" #: editor/editor_help_search.cpp -#, fuzzy msgid "Show Hierarchy" -msgstr "Търсене" +msgstr "Показване на йерархията" #: editor/editor_help_search.cpp -#, fuzzy msgid "Display All" -msgstr "Преименувай Всички" +msgstr "Показване на всичко" #: editor/editor_help_search.cpp msgid "Classes Only" msgstr "" #: editor/editor_help_search.cpp -#, fuzzy msgid "Methods Only" -msgstr "Методи" +msgstr "Само методи" #: editor/editor_help_search.cpp -#, fuzzy msgid "Signals Only" -msgstr "Само Селекцията" +msgstr "Само сигнали" #: editor/editor_help_search.cpp -#, fuzzy msgid "Constants Only" -msgstr "Константи" +msgstr "Само константи" #: editor/editor_help_search.cpp -#, fuzzy msgid "Properties Only" -msgstr "Изберете свойство" +msgstr "Само свойства" #: editor/editor_help_search.cpp -#, fuzzy msgid "Theme Properties Only" -msgstr "Изберете свойство" +msgstr "Само свойства на теми" #: editor/editor_help_search.cpp msgid "Member Type" msgstr "" #: editor/editor_help_search.cpp -#, fuzzy msgid "Class" -msgstr "Клас:" +msgstr "Клас" #: editor/editor_help_search.cpp -#, fuzzy msgid "Method" -msgstr "Методи" +msgstr "Метод" #: editor/editor_help_search.cpp editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Signal" -msgstr "Настройки на редактора" +msgstr "Сигнал" #: editor/editor_help_search.cpp editor/plugins/theme_editor_plugin.cpp msgid "Constant" -msgstr "Постоянно" +msgstr "Константа" #: editor/editor_help_search.cpp -#, fuzzy msgid "Property" -msgstr "Изберете свойство" +msgstr "Свойство" #: editor/editor_help_search.cpp -#, fuzzy msgid "Theme Property" -msgstr "Поставяне на възелите" +msgstr "Свойство на тема" #: editor/editor_inspector.cpp editor/project_settings_editor.cpp msgid "Property:" @@ -2140,9 +2041,8 @@ msgid "Output:" msgstr "" #: editor/editor_log.cpp editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Copy Selection" -msgstr "Нова сцена" +msgstr "Копиране на избраното" #: editor/editor_log.cpp editor/editor_network_profiler.cpp #: editor/editor_profiler.cpp editor/editor_properties.cpp @@ -2155,9 +2055,8 @@ msgid "Clear" msgstr "Изчистване" #: editor/editor_log.cpp -#, fuzzy msgid "Clear Output" -msgstr "Нова сцена" +msgstr "Изчистване на изхода" #: editor/editor_network_profiler.cpp editor/editor_node.cpp #: editor/editor_profiler.cpp @@ -2174,9 +2073,8 @@ msgid "%s/s" msgstr "" #: editor/editor_network_profiler.cpp -#, fuzzy msgid "Down" -msgstr "Премести Надоло" +msgstr "Надолу" #: editor/editor_network_profiler.cpp msgid "Up" @@ -2231,11 +2129,11 @@ msgstr "" #: editor/editor_node.cpp msgid "Can't open file for writing:" -msgstr "Файлът не може да бъде отворен за записване:" +msgstr "Файлът не може да бъде отворен за запис:" #: editor/editor_node.cpp msgid "Requested file format unknown:" -msgstr "Форматът на избрания файл е неразпознат:" +msgstr "Форматът на избрания файл е непознат:" #: editor/editor_node.cpp msgid "Error while saving." @@ -2251,7 +2149,7 @@ msgstr "Грешка при анализа на „%s“." #: editor/editor_node.cpp msgid "Unexpected end of file '%s'." -msgstr "Неочакван край на файла '%s'." +msgstr "Неочакван край на файла „%s“." #: editor/editor_node.cpp msgid "Missing '%s' or its dependencies." @@ -2267,7 +2165,7 @@ msgstr "Запазване на сцената" #: editor/editor_node.cpp msgid "Analyzing" -msgstr "Анализира се" +msgstr "Анализиране" #: editor/editor_node.cpp msgid "Creating Thumbnail" @@ -2366,7 +2264,7 @@ msgstr "" #: editor/editor_node.cpp msgid "Current scene was never saved, please save it prior to running." msgstr "" -"Сегашната сцена никога не е била запазена, моля, запазете я преди изпълнение." +"Текущата сцена никога не е била запазена. Моля, запазете я преди изпълнение." #: editor/editor_node.cpp msgid "Could not start subprocess!" @@ -2381,9 +2279,8 @@ msgid "Open Base Scene" msgstr "" #: editor/editor_node.cpp -#, fuzzy msgid "Quick Open..." -msgstr "Бързо отваряне на сцена..." +msgstr "Бързо отваряне..." #: editor/editor_node.cpp msgid "Quick Open Scene..." @@ -2402,9 +2299,8 @@ msgid "Save changes to '%s' before closing?" msgstr "" #: editor/editor_node.cpp -#, fuzzy msgid "Saved %s modified resource(s)." -msgstr "Неуспешно зареждане на ресурсите." +msgstr "%s променени ресурса бяха запазени." #: editor/editor_node.cpp msgid "A root node is required to save the scene." @@ -2424,7 +2320,7 @@ msgstr "" #: editor/editor_node.cpp msgid "This scene has never been saved. Save before running?" -msgstr "Тази сцена не е била запазвана преди. Запази преди да пуснеш?" +msgstr "Тази сцена не е била запазвана преди. Запазване преди изпълнението?" #: editor/editor_node.cpp editor/scene_tree_dock.cpp msgid "This operation can't be done without a scene." @@ -2448,11 +2344,11 @@ msgstr "" #: editor/editor_node.cpp msgid "Current scene not saved. Open anyway?" -msgstr "Текущата сцена не е запазена. Отвори въпреки това?" +msgstr "Текущата сцена не е запазена. Отваряне въпреки това?" #: editor/editor_node.cpp msgid "Can't reload a scene that was never saved." -msgstr "Сцена, която никога не е била запазвана, не може да се презареди." +msgstr "Сцена, която никога не е била запазвана, не може да бъде презаредена." #: editor/editor_node.cpp msgid "Revert" @@ -2475,9 +2371,8 @@ msgid "Exit the editor?" msgstr "" #: editor/editor_node.cpp -#, fuzzy msgid "Open Project Manager?" -msgstr "Диспечер на проектите" +msgstr "Да се отвори ли мениджърът на проекти?" #: editor/editor_node.cpp msgid "Save & Quit" @@ -2506,9 +2401,8 @@ msgid "Close Scene" msgstr "Затваряне на сцената" #: editor/editor_node.cpp -#, fuzzy msgid "Reopen Closed Scene" -msgstr "Затваряне на сцената" +msgstr "Повторно отваряне на затворена сцена" #: editor/editor_node.cpp msgid "Unable to enable addon plugin at: '%s' parsing of config failed." @@ -2519,9 +2413,8 @@ msgid "Unable to find script field for addon plugin at: 'res://addons/%s'." msgstr "" #: editor/editor_node.cpp -#, fuzzy msgid "Unable to load addon script from path: '%s'." -msgstr "Грешка при зареждането на шрифта." +msgstr "Не може да се зареди скриптът на добавка от: „%s“." #: editor/editor_node.cpp msgid "" @@ -2552,12 +2445,11 @@ msgstr "" #: editor/editor_node.cpp msgid "Scene '%s' has broken dependencies:" -msgstr "Сцената '%s' има нарушени зависимости:" +msgstr "Сцената „%s“ има нарушени зависимости:" #: editor/editor_node.cpp -#, fuzzy msgid "Clear Recent Scenes" -msgstr "Затваряне на сцената" +msgstr "Изчистване на последните сцени" #: editor/editor_node.cpp msgid "" @@ -2595,24 +2487,20 @@ msgstr "" #: editor/editor_node.cpp editor/editor_properties.cpp #: editor/plugins/script_editor_plugin.cpp editor/property_editor.cpp -#, fuzzy msgid "Show in FileSystem" -msgstr "Покажи във Файлова Система" +msgstr "Показване във файловата система" #: editor/editor_node.cpp -#, fuzzy msgid "Play This Scene" -msgstr "Възпроизвеждане на сцената" +msgstr "Пускане на сцената" #: editor/editor_node.cpp -#, fuzzy msgid "Close Tab" -msgstr "Затваряне" +msgstr "Затваряне на раздела" #: editor/editor_node.cpp -#, fuzzy msgid "Undo Close Tab" -msgstr "Затваряне" +msgstr "Отмяна на затварянето на раздела" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp msgid "Close Other Tabs" @@ -2623,9 +2511,8 @@ msgid "Close Tabs to the Right" msgstr "" #: editor/editor_node.cpp -#, fuzzy msgid "Close All Tabs" -msgstr "Затваряне на всичко" +msgstr "Затваряне на всички раздели" #: editor/editor_node.cpp msgid "Switch Scene Tab" @@ -2636,9 +2523,8 @@ msgid "%d more files or folders" msgstr "" #: editor/editor_node.cpp -#, fuzzy msgid "%d more folders" -msgstr "Неуспешно създаване на папка." +msgstr "Още %d папки" #: editor/editor_node.cpp msgid "%d more files" @@ -2657,9 +2543,8 @@ msgid "Toggle distraction-free mode." msgstr "" #: editor/editor_node.cpp -#, fuzzy msgid "Add a new scene." -msgstr "Добавяне на нови пътечки." +msgstr "Добавяне на нови нова сцена." #: editor/editor_node.cpp msgid "Scene" @@ -2670,17 +2555,16 @@ msgid "Go to previously opened scene." msgstr "" #: editor/editor_node.cpp -#, fuzzy msgid "Copy Text" -msgstr "Копиране" +msgstr "Копиране на текста" #: editor/editor_node.cpp msgid "Next tab" -msgstr "Следващ подпрозорец" +msgstr "Следващ раздел" #: editor/editor_node.cpp msgid "Previous tab" -msgstr "Предишен подпрозорец" +msgstr "Предишен раздел" #: editor/editor_node.cpp msgid "Filter Files..." @@ -2711,7 +2595,6 @@ msgid "Save Scene" msgstr "Запазване на сцената" #: editor/editor_node.cpp -#, fuzzy msgid "Save All Scenes" msgstr "Запазване на всички сцени" @@ -2751,14 +2634,12 @@ msgid "Project" msgstr "Проект" #: editor/editor_node.cpp -#, fuzzy msgid "Project Settings..." -msgstr "Настройки на проекта" +msgstr "Настройки на проекта..." #: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp -#, fuzzy msgid "Version Control" -msgstr "Версия:" +msgstr "Контрол на версиите" #: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp msgid "Set Up Version Control" @@ -2769,22 +2650,20 @@ msgid "Shut Down Version Control" msgstr "" #: editor/editor_node.cpp -#, fuzzy msgid "Export..." -msgstr "Изнасяне" +msgstr "Изнасяне..." #: editor/editor_node.cpp msgid "Install Android Build Template..." msgstr "" #: editor/editor_node.cpp -#, fuzzy msgid "Open Project Data Folder" -msgstr "Диспечер на проектите" +msgstr "Отваряне на папката с данни на проекта" #: editor/editor_node.cpp editor/plugins/tile_set_editor_plugin.cpp msgid "Tools" -msgstr "Сечива" +msgstr "Инструменти" #: editor/editor_node.cpp msgid "Orphan Resource Explorer..." @@ -2792,12 +2671,12 @@ msgstr "" #: editor/editor_node.cpp msgid "Quit to Project List" -msgstr "Изход до списъка с проекти" +msgstr "Изход към списъка с проекти" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp #: editor/project_export.cpp msgid "Debug" -msgstr "Отстраняване на грешки" +msgstr "Дебъгване" #: editor/editor_node.cpp msgid "Deploy with Remote Debug" @@ -2872,55 +2751,48 @@ msgid "Editor" msgstr "" #: editor/editor_node.cpp -#, fuzzy msgid "Editor Settings..." -msgstr "Настройки на редактора" +msgstr "Настройки на редактора..." #: editor/editor_node.cpp msgid "Editor Layout" msgstr "" #: editor/editor_node.cpp -#, fuzzy msgid "Take Screenshot" -msgstr "Запазване на сцената" +msgstr "Заснемане на екрана" #: editor/editor_node.cpp -#, fuzzy msgid "Screenshots are stored in the Editor Data/Settings Folder." -msgstr "Настройки на редактора" +msgstr "Снимките на екрана се пазят в папката с данни/настройки на редактора." #: editor/editor_node.cpp msgid "Toggle Fullscreen" msgstr "" #: editor/editor_node.cpp -#, fuzzy msgid "Toggle System Console" -msgstr "Покажи Любими" +msgstr "Превключване на системната конзола" #: editor/editor_node.cpp -#, fuzzy msgid "Open Editor Data/Settings Folder" -msgstr "Настройки на редактора" +msgstr "Отваряне на папката с данни/настройки на редактора" #: editor/editor_node.cpp msgid "Open Editor Data Folder" msgstr "" #: editor/editor_node.cpp -#, fuzzy msgid "Open Editor Settings Folder" -msgstr "Настройки на редактора" +msgstr "Отваряне на папката с настройки на редактора" #: editor/editor_node.cpp msgid "Manage Editor Features..." msgstr "" #: editor/editor_node.cpp -#, fuzzy msgid "Manage Export Templates..." -msgstr "Шаблони" +msgstr "Управление на шаблоните за изнасяне..." #: editor/editor_node.cpp editor/plugins/shader_editor_plugin.cpp msgid "Help" @@ -2958,7 +2830,7 @@ msgstr "Относно" #: editor/editor_node.cpp msgid "Play the project." -msgstr "Възпроизвеждане на проекта." +msgstr "Пускане на проекта." #: editor/editor_node.cpp msgid "Play" @@ -2970,7 +2842,7 @@ msgstr "" #: editor/editor_node.cpp msgid "Pause Scene" -msgstr "Преустановяване на сцената" +msgstr "Спиране на сцената на пауза" #: editor/editor_node.cpp msgid "Stop the scene." @@ -2978,19 +2850,19 @@ msgstr "Спиране на сцената." #: editor/editor_node.cpp msgid "Play the edited scene." -msgstr "Възпроизвеждане на редактирана сцена." +msgstr "Пускане на редактираната сцена." #: editor/editor_node.cpp msgid "Play Scene" -msgstr "Възпроизвеждане на сцената" +msgstr "Пускане на сцената" #: editor/editor_node.cpp msgid "Play custom scene" -msgstr "Възпроизвеждане на сцена по избор" +msgstr "Пускане на персонализирана сцена" #: editor/editor_node.cpp msgid "Play Custom Scene" -msgstr "Възпроизвеждане на сцена по избор" +msgstr "Пускане на персонализирана сцена" #: editor/editor_node.cpp msgid "Changing the video driver requires restarting the editor." @@ -2998,9 +2870,8 @@ msgstr "" #: editor/editor_node.cpp editor/project_settings_editor.cpp #: editor/settings_config_dialog.cpp -#, fuzzy msgid "Save & Restart" -msgstr "Запазване и повторно внасяне" +msgstr "Запазване и рестартиране" #: editor/editor_node.cpp msgid "Spins when the editor window redraws." @@ -3028,7 +2899,7 @@ msgstr "Инспектор" #: editor/editor_node.cpp msgid "Expand Bottom Panel" -msgstr "Разшири Долния Панел" +msgstr "Разширяване на долния панел" #: editor/editor_node.cpp msgid "Output" @@ -3036,16 +2907,15 @@ msgstr "" #: editor/editor_node.cpp msgid "Don't Save" -msgstr "Не Запазвай" +msgstr "Без запазване" #: editor/editor_node.cpp msgid "Android build template is missing, please install relevant templates." msgstr "" #: editor/editor_node.cpp -#, fuzzy msgid "Manage Templates" -msgstr "Шаблони" +msgstr "Управление на шаблоните" #: editor/editor_node.cpp msgid "" @@ -3071,9 +2941,8 @@ msgid "Import Templates From ZIP File" msgstr "Внасяне на шаблони от архив във формат ZIP" #: editor/editor_node.cpp -#, fuzzy msgid "Template Package" -msgstr "Шаблони" +msgstr "Пакет с шаблони" #: editor/editor_node.cpp msgid "Export Library" @@ -3110,11 +2979,11 @@ msgstr "" #: editor/editor_node.cpp msgid "Open Script Editor" -msgstr "Отвори Кодов Редактор" +msgstr "Отваряне на редактора на скриптове" #: editor/editor_node.cpp editor/project_manager.cpp msgid "Open Asset Library" -msgstr "Отваряне на библиотеката" +msgstr "Отваряне на библиотеката с ресурсите" #: editor/editor_node.cpp msgid "Open the next Editor" @@ -3125,9 +2994,8 @@ msgid "Open the previous Editor" msgstr "" #: editor/editor_node.h -#, fuzzy msgid "Warning!" -msgstr "Предупреждения:" +msgstr "Внимание!" #: editor/editor_path.cpp msgid "No sub-resources found." @@ -3142,14 +3010,12 @@ msgid "Thumbnail..." msgstr "" #: editor/editor_plugin_settings.cpp -#, fuzzy msgid "Main Script:" -msgstr "Нова сцена" +msgstr "Основен скрипт:" #: editor/editor_plugin_settings.cpp -#, fuzzy msgid "Edit Plugin" -msgstr "Приставки" +msgstr "Редактиране на приставката" #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" @@ -3217,9 +3083,8 @@ msgid "Calls" msgstr "" #: editor/editor_properties.cpp -#, fuzzy msgid "Edit Text:" -msgstr "Файл:" +msgstr "Редактиране на текста:" #: editor/editor_properties.cpp editor/script_create_dialog.cpp msgid "On" @@ -3274,9 +3139,8 @@ msgid "New Script" msgstr "Нов скрипт" #: editor/editor_properties.cpp editor/scene_tree_dock.cpp -#, fuzzy msgid "Extend Script" -msgstr "Нова сцена" +msgstr "Разширяване на скрипта" #: editor/editor_properties.cpp editor/property_editor.cpp msgid "New %s" @@ -3326,9 +3190,8 @@ msgid "New Key:" msgstr "" #: editor/editor_properties_array_dict.cpp -#, fuzzy msgid "New Value:" -msgstr "Стойност" +msgstr "Нова стойност:" #: editor/editor_properties_array_dict.cpp msgid "Add Key/Value Pair" @@ -3381,18 +3244,16 @@ msgid "Import From Node:" msgstr "" #: editor/export_template_manager.cpp -#, fuzzy msgid "Redownload" -msgstr "Презареди" +msgstr "Повторно сваляне" #: editor/export_template_manager.cpp msgid "Uninstall" msgstr "" #: editor/export_template_manager.cpp -#, fuzzy msgid "(Installed)" -msgstr "Инсталирани приставки:" +msgstr "(Инсталирано)" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp @@ -3432,9 +3293,8 @@ msgid "No version.txt found inside templates." msgstr "" #: editor/export_template_manager.cpp -#, fuzzy msgid "Error creating path for templates:" -msgstr "Имаше грешка при изнасяне на проекта!" +msgstr "Грешка при създаването на път за шаблоните:" #: editor/export_template_manager.cpp msgid "Extracting Export Templates" @@ -3445,9 +3305,8 @@ msgid "Importing:" msgstr "Внасяне:" #: editor/export_template_manager.cpp -#, fuzzy msgid "Error getting the list of mirrors." -msgstr "Имаше грешка при изнасяне на проекта!" +msgstr "Грешка при получаването на списъка от огледални местоположения." #: editor/export_template_manager.cpp msgid "Error parsing JSON of mirror list. Please report this issue!" @@ -3475,9 +3334,8 @@ msgid "No response." msgstr "" #: editor/export_template_manager.cpp -#, fuzzy msgid "Request Failed." -msgstr "Запитване..." +msgstr "Заявката беше неуспешна." #: editor/export_template_manager.cpp msgid "Redirect Loop." @@ -3493,9 +3351,8 @@ msgid "Download Complete." msgstr "" #: editor/export_template_manager.cpp -#, fuzzy msgid "Cannot remove temporary file:" -msgstr "Не може да се премахне:" +msgstr "Временният файл не може да бъде премахнат:" #: editor/export_template_manager.cpp msgid "" @@ -3504,14 +3361,12 @@ msgid "" msgstr "" #: editor/export_template_manager.cpp -#, fuzzy msgid "Error requesting URL:" -msgstr "Имаше грешка при внасянето:" +msgstr "Грешка при заявката за адрес:" #: editor/export_template_manager.cpp -#, fuzzy msgid "Connecting to Mirror..." -msgstr "Свързване..." +msgstr "Свързване с огледалното местоположение..." #: editor/export_template_manager.cpp msgid "Disconnected" @@ -3531,14 +3386,12 @@ msgid "Connecting..." msgstr "Свързване..." #: editor/export_template_manager.cpp -#, fuzzy msgid "Can't Connect" -msgstr "Създаване на нов проект" +msgstr "Не може да се установи връзка" #: editor/export_template_manager.cpp -#, fuzzy msgid "Connected" -msgstr "Изрязване на възелите" +msgstr "Свързан" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp @@ -3550,27 +3403,24 @@ msgid "Downloading" msgstr "Изтегляне" #: editor/export_template_manager.cpp -#, fuzzy msgid "Connection Error" -msgstr "Свързване..." +msgstr "Грешка във връзката" #: editor/export_template_manager.cpp msgid "SSL Handshake Error" msgstr "" #: editor/export_template_manager.cpp -#, fuzzy msgid "Uncompressing Android Build Sources" -msgstr "Разархивиране на активи" +msgstr "Разархивиране на изходния код на компилацията за Андроид" #: editor/export_template_manager.cpp msgid "Current Version:" msgstr "" #: editor/export_template_manager.cpp -#, fuzzy msgid "Installed Versions:" -msgstr "Инсталирани приставки:" +msgstr "Инсталирани версии:" #: editor/export_template_manager.cpp msgid "Install From File" @@ -3581,32 +3431,28 @@ msgid "Remove Template" msgstr "" #: editor/export_template_manager.cpp -#, fuzzy msgid "Select Template File" -msgstr "Избиране на всичко" +msgstr "Избор на шаблонен файл" #: editor/export_template_manager.cpp -#, fuzzy msgid "Godot Export Templates" -msgstr "Шаблони" +msgstr "Шаблони за изнасяне на Godot" #: editor/export_template_manager.cpp msgid "Export Template Manager" msgstr "" #: editor/export_template_manager.cpp -#, fuzzy msgid "Download Templates" -msgstr "Шаблони" +msgstr "Сваляне на шаблони" #: editor/export_template_manager.cpp msgid "Select mirror from list: (Shift+Click: Open in Browser)" msgstr "" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Favorites" -msgstr "Любими:" +msgstr "Любими" #: editor/filesystem_dock.cpp msgid "Status: Import of file failed. Please fix file and reimport manually." @@ -3621,19 +3467,16 @@ msgid "Cannot move a folder into itself." msgstr "" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Error moving:" -msgstr "Имаше грешка при внасянето:" +msgstr "Грешка при преместването:" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Error duplicating:" -msgstr "Имаше грешка при внасянето:" +msgstr "Грешка при дублирането:" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Unable to update dependencies:" -msgstr "Сцената '%s' има нарушени зависимости:" +msgstr "Зависимостите не могат да бъдат обновени:" #: editor/filesystem_dock.cpp editor/scene_tree_editor.cpp msgid "No name provided." @@ -3652,18 +3495,16 @@ msgid "Name contains invalid characters." msgstr "" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Renaming file:" -msgstr "Имаше грешка при внасянето:" +msgstr "Преименуване на файла:" #: editor/filesystem_dock.cpp msgid "Renaming folder:" msgstr "" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Duplicating file:" -msgstr "Имаше грешка при внасянето:" +msgstr "Дублиране на файла:" #: editor/filesystem_dock.cpp msgid "Duplicating folder:" @@ -3675,28 +3516,24 @@ msgid "New Inherited Scene" msgstr "Нов скрипт" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Set As Main Scene" -msgstr "Изберете главна сцена" +msgstr "Задаване като главна сцена" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Open Scenes" -msgstr "Отваряне на сцена" +msgstr "Отваряне на сцените" #: editor/filesystem_dock.cpp msgid "Instance" msgstr "" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Add to Favorites" -msgstr "Любими:" +msgstr "Добавяне в любимите" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Remove from Favorites" -msgstr "Премахни Всички Breakpoint-ове" +msgstr "Премахване от любимите" #: editor/filesystem_dock.cpp msgid "Edit Dependencies..." @@ -3719,19 +3556,16 @@ msgid "Move To..." msgstr "" #: editor/filesystem_dock.cpp -#, fuzzy msgid "New Scene..." -msgstr "Нова сцена" +msgstr "Нова сцена..." #: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "New Script..." -msgstr "Нов скрипт" +msgstr "Нов скрипт..." #: editor/filesystem_dock.cpp -#, fuzzy msgid "New Resource..." -msgstr "Нова папка..." +msgstr "Нов ресурс..." #: editor/filesystem_dock.cpp editor/plugins/visual_shader_editor_plugin.cpp #: editor/script_editor_debugger.cpp @@ -3740,9 +3574,8 @@ msgstr "" #: editor/filesystem_dock.cpp editor/plugins/visual_shader_editor_plugin.cpp #: editor/script_editor_debugger.cpp -#, fuzzy msgid "Collapse All" -msgstr "Затваряне на всичко" +msgstr "Свиване на всичко" #: editor/filesystem_dock.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp @@ -3752,28 +3585,24 @@ msgid "Rename" msgstr "" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Previous Folder/File" -msgstr "Предишен подпрозорец" +msgstr "Предишна папка/файл" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Next Folder/File" -msgstr "Създаване на папка" +msgstr "Следваща папка/файл" #: editor/filesystem_dock.cpp msgid "Re-Scan Filesystem" msgstr "" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Toggle Split Mode" -msgstr "Покажи Любими" +msgstr "Превключване на разделения режим" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Search files" -msgstr "Търсене" +msgstr "Търсене на файлове" #: editor/filesystem_dock.cpp msgid "" @@ -3794,33 +3623,28 @@ msgid "Overwrite" msgstr "" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Create Scene" -msgstr "Запазване на сцената" +msgstr "Създаване на сцена" #: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp msgid "Create Script" msgstr "" #: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Find in Files" -msgstr "Намери във файлове" +msgstr "Търсене във файловете" #: editor/find_in_files.cpp -#, fuzzy msgid "Find:" -msgstr "Намери: " +msgstr "Търсене:" #: editor/find_in_files.cpp -#, fuzzy msgid "Folder:" -msgstr "Папка: " +msgstr "Папка:" #: editor/find_in_files.cpp -#, fuzzy msgid "Filters:" -msgstr "Поставяне на възелите" +msgstr "Филтри:" #: editor/find_in_files.cpp msgid "" @@ -3831,11 +3655,11 @@ msgstr "" #: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp msgid "Find..." -msgstr "Намери..." +msgstr "Търсене..." #: editor/find_in_files.cpp editor/plugins/script_text_editor.cpp msgid "Replace..." -msgstr "Замести..." +msgstr "Замяна..." #: editor/find_in_files.cpp editor/progress_dialog.cpp scene/gui/dialogs.cpp msgid "Cancel" @@ -3843,20 +3667,19 @@ msgstr "Отказ" #: editor/find_in_files.cpp msgid "Find: " -msgstr "Намери: " +msgstr "Търсене: " #: editor/find_in_files.cpp msgid "Replace: " -msgstr "Замести: " +msgstr "Замяна: " #: editor/find_in_files.cpp msgid "Replace all (no undo)" msgstr "" #: editor/find_in_files.cpp -#, fuzzy msgid "Searching..." -msgstr "Търсене" +msgstr "Търсене..." #: editor/find_in_files.cpp msgid "Search complete" @@ -3871,24 +3694,20 @@ msgid "Remove from Group" msgstr "" #: editor/groups_editor.cpp -#, fuzzy msgid "Group name already exists." -msgstr "Група с това име вече съществува." +msgstr "Вече съществува група с това име." #: editor/groups_editor.cpp -#, fuzzy msgid "Invalid group name." -msgstr "невалидно име на Група." +msgstr "Неправилно име на група." #: editor/groups_editor.cpp -#, fuzzy msgid "Rename Group" -msgstr "Нов проект" +msgstr "Преименуване на групата" #: editor/groups_editor.cpp -#, fuzzy msgid "Delete Group" -msgstr "Избиране на всичко" +msgstr "Изтриване на групата" #: editor/groups_editor.cpp editor/node_dock.cpp msgid "Groups" @@ -3900,9 +3719,8 @@ msgstr "" #: editor/groups_editor.cpp editor/scene_tree_dock.cpp #: editor/scene_tree_editor.cpp -#, fuzzy msgid "Filter nodes" -msgstr "Поставяне на възелите" +msgstr "Филтриране на възлите" #: editor/groups_editor.cpp msgid "Nodes in Group" @@ -3913,63 +3731,52 @@ msgid "Empty groups will be automatically removed." msgstr "" #: editor/groups_editor.cpp -#, fuzzy msgid "Group Editor" -msgstr "Отвори Кодов Редактор" +msgstr "Редактор на групи" #: editor/groups_editor.cpp msgid "Manage Groups" msgstr "" #: editor/import/resource_importer_scene.cpp -#, fuzzy msgid "Import as Single Scene" -msgstr "Внасяне на сцената..." +msgstr "Внасяне като самостоятелна сцена" #: editor/import/resource_importer_scene.cpp -#, fuzzy msgid "Import with Separate Animations" -msgstr "Внеси с Анимации поотделно" +msgstr "Внасяне с отделени анимации" #: editor/import/resource_importer_scene.cpp -#, fuzzy msgid "Import with Separate Materials" -msgstr "Внеси с Материалите поотделно" +msgstr "Внасяне с отделени материали" #: editor/import/resource_importer_scene.cpp -#, fuzzy msgid "Import with Separate Objects" -msgstr "Внеси с Обектите поотделно" +msgstr "Внасяне с отделени обекти" #: editor/import/resource_importer_scene.cpp -#, fuzzy msgid "Import with Separate Objects+Materials" -msgstr "Внеси с Обектите и Материалите поотделно" +msgstr "Внасяне с отделени обекти и материали" #: editor/import/resource_importer_scene.cpp -#, fuzzy msgid "Import with Separate Objects+Animations" -msgstr "Внеси с Обектите и Анимациите поотделно" +msgstr "Внасяне с отделени обекти и анимации" #: editor/import/resource_importer_scene.cpp -#, fuzzy msgid "Import with Separate Materials+Animations" -msgstr "Внеси с Материалите и Анимациите поотделно" +msgstr "Внасяне с отделени материали и анимации" #: editor/import/resource_importer_scene.cpp -#, fuzzy msgid "Import with Separate Objects+Materials+Animations" -msgstr "Внеси с Обектите, Материалите и Анимациите поотделно" +msgstr "Внасяне с отделени обекти, материали и анимации" #: editor/import/resource_importer_scene.cpp -#, fuzzy msgid "Import as Multiple Scenes" -msgstr "Внеси като Няколко Сцени" +msgstr "Внасяне като няколко сцени" #: editor/import/resource_importer_scene.cpp -#, fuzzy msgid "Import as Multiple Scenes+Materials" -msgstr "Внеси като Няколко Сцени и Материали" +msgstr "Внасяне като няколко сцени и материали" #: editor/import/resource_importer_scene.cpp #: editor/plugins/mesh_library_editor_plugin.cpp @@ -4009,19 +3816,16 @@ msgid "Saving..." msgstr "Запазване..." #: editor/import_dock.cpp -#, fuzzy -msgid "Set as Default for '%s'" -msgstr "Задай по Подразбиране за '%s'" +msgid "%d Files" +msgstr "%d Файлове" #: editor/import_dock.cpp -#, fuzzy -msgid "Clear Default for '%s'" -msgstr "Изчисти по Подразбиране за '%s'" +msgid "Set as Default for '%s'" +msgstr "Задаване по подразбиране за „%s“" #: editor/import_dock.cpp -#, fuzzy -msgid " Files" -msgstr "Файл:" +msgid "Clear Default for '%s'" +msgstr "Изчистване на подразбирането за „%s“" #: editor/import_dock.cpp msgid "Import As:" @@ -4049,23 +3853,21 @@ msgid "" msgstr "" #: editor/inspector_dock.cpp -#, fuzzy msgid "Failed to load resource." -msgstr "Неуспешно зареждане на ресурсите." +msgstr "Ресурсът не може да бъде зареден." #: editor/inspector_dock.cpp msgid "Expand All Properties" msgstr "" #: editor/inspector_dock.cpp -#, fuzzy msgid "Collapse All Properties" -msgstr "Поставяне на възелите" +msgstr "Свиване на всички свойства" #: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp msgid "Save As..." -msgstr "Запази Като..." +msgstr "Запазване като..." #: editor/inspector_dock.cpp msgid "Copy Params" @@ -4092,9 +3894,8 @@ msgid "Make Sub-Resources Unique" msgstr "" #: editor/inspector_dock.cpp -#, fuzzy msgid "Open in Help" -msgstr "Отвори в Помощника" +msgstr "Отваряне в помощната информация" #: editor/inspector_dock.cpp msgid "Create a new resource in memory and edit it." @@ -4118,17 +3919,15 @@ msgstr "" #: editor/inspector_dock.cpp msgid "History of recently edited objects." -msgstr "" +msgstr "История на последно редактираните обекти." #: editor/inspector_dock.cpp -#, fuzzy msgid "Object properties." -msgstr "Характеристики на обекта." +msgstr "Свойства на обекта." #: editor/inspector_dock.cpp -#, fuzzy msgid "Filter properties" -msgstr "Поставяне на възелите" +msgstr "Филтриране на свойствата" #: editor/inspector_dock.cpp msgid "Changes may be lost!" @@ -4143,71 +3942,62 @@ msgid "Select a single node to edit its signals and groups." msgstr "" #: editor/plugin_config_dialog.cpp -#, fuzzy msgid "Edit a Plugin" -msgstr "Приставки" +msgstr "Редактиране на приставка" #: editor/plugin_config_dialog.cpp -#, fuzzy msgid "Create a Plugin" -msgstr "Създаване" +msgstr "Създаване на приставка" #: editor/plugin_config_dialog.cpp -#, fuzzy msgid "Plugin Name:" -msgstr "Приставки" +msgstr "Име на приставката:" #: editor/plugin_config_dialog.cpp msgid "Subfolder:" msgstr "Подпапка:" #: editor/plugin_config_dialog.cpp editor/script_create_dialog.cpp -#, fuzzy msgid "Language:" -msgstr "Внасяне на езици:" +msgstr "Език:" #: editor/plugin_config_dialog.cpp -#, fuzzy msgid "Script Name:" -msgstr "Име:" +msgstr "Име на скрипта:" #: editor/plugin_config_dialog.cpp msgid "Activate now?" -msgstr "Активирай сега?" +msgstr "Активиране сега?" #: editor/plugins/abstract_polygon_2d_editor.cpp #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Create Polygon" -msgstr "Създаване на папка" +msgstr "Създаване на полигон" #: editor/plugins/abstract_polygon_2d_editor.cpp #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Create points." -msgstr "Създай точки." +msgstr "Създаване на точки." #: editor/plugins/abstract_polygon_2d_editor.cpp -#, fuzzy msgid "" "Edit points.\n" "LMB: Move Point\n" "RMB: Erase Point" msgstr "" -"Промени съществуващ полигон:\n" -"LMB: Премести Точка.\n" -"Ctrl+LMB: Раздели Сегмент.\n" -"RMB: Изтрии Точка." +"Редактиране на точки.\n" +"Ляв бутон на мишката: преместване на точката\n" +"Ctrl+ляв бутон: Изтриване на точката" #: editor/plugins/abstract_polygon_2d_editor.cpp #: editor/plugins/animation_blend_space_1d_editor.cpp msgid "Erase points." -msgstr "Изтрий точки." +msgstr "Изтриване на точки." #: editor/plugins/abstract_polygon_2d_editor.cpp -#, fuzzy msgid "Edit Polygon" -msgstr "Приставки" +msgstr "Редактиране на полигона" #: editor/plugins/abstract_polygon_2d_editor.cpp msgid "Insert Point" @@ -4218,9 +4008,8 @@ msgid "Edit Polygon (Remove Point)" msgstr "" #: editor/plugins/abstract_polygon_2d_editor.cpp -#, fuzzy msgid "Remove Polygon And Point" -msgstr "Преместване на Полигон" +msgstr "Премахване на полигона и точката" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp @@ -4228,21 +4017,19 @@ msgstr "Преместване на Полигон" #: editor/plugins/animation_state_machine_editor.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Add Animation" -msgstr "Добави Анимация" +msgstr "Добавяне не анимация" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Load..." -msgstr "Зареди..." +msgstr "Зареждане..." #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp -#, fuzzy msgid "Move Node Point" -msgstr "LMB: Премести Точка." +msgstr "Преместване на точката на възела" #: editor/plugins/animation_blend_space_1d_editor.cpp msgid "Change BlendSpace1D Limits" @@ -4260,20 +4047,17 @@ msgstr "" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp -#, fuzzy msgid "Add Node Point" -msgstr "Добави Възел..." +msgstr "Добавяне на точка за възел" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp -#, fuzzy msgid "Add Animation Point" -msgstr "Добави Анимация" +msgstr "Добавяне на точки за анимация" #: editor/plugins/animation_blend_space_1d_editor.cpp -#, fuzzy msgid "Remove BlendSpace1D Point" -msgstr "Преместване на Полигон" +msgstr "Премахване на точка на BlendSpace1D" #: editor/plugins/animation_blend_space_1d_editor.cpp msgid "Move BlendSpace1D Node Point" @@ -4295,9 +4079,8 @@ msgstr "" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp -#, fuzzy msgid "Select and move points, create points with RMB." -msgstr "Селектирай и мести точки, създай точки с RMB." +msgstr "Избиране и преместване на точки; създаване на точки с десен бутон." #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp scene/gui/graph_edit.cpp @@ -4312,27 +4095,23 @@ msgstr "" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp -#, fuzzy msgid "Open Editor" -msgstr "Нова сцена" +msgstr "Отваряне на редактора" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Open Animation Node" -msgstr "Отвори Анимационен Възел" +msgstr "Отваряне на възела за анимация" #: editor/plugins/animation_blend_space_2d_editor.cpp -#, fuzzy msgid "Triangle already exists." -msgstr "Група с това име вече съществува." +msgstr "Триъгълникът вече съществува." #: editor/plugins/animation_blend_space_2d_editor.cpp -#, fuzzy msgid "Add Triangle" -msgstr "Добавяне на нови пътечки." +msgstr "Добавяне на триъгълник" #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Change BlendSpace2D Limits" @@ -4343,27 +4122,24 @@ msgid "Change BlendSpace2D Labels" msgstr "" #: editor/plugins/animation_blend_space_2d_editor.cpp -#, fuzzy msgid "Remove BlendSpace2D Point" -msgstr "Преместване на Полигон" +msgstr "Преместване на точка на BlendSpace2D" #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Remove BlendSpace2D Triangle" msgstr "" #: editor/plugins/animation_blend_space_2d_editor.cpp -#, fuzzy msgid "BlendSpace2D does not belong to an AnimationTree node." -msgstr "BlendSpace2D не принадлежи на възел тип AnimationTree." +msgstr "BlendSpace2D не принадлежи на възел от тип AnimationTree." #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "No triangles exist, so no blending can take place." msgstr "" #: editor/plugins/animation_blend_space_2d_editor.cpp -#, fuzzy msgid "Toggle Auto Triangles" -msgstr "Покажи Любими" +msgstr "Превключване на автоматичните триъгълници" #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Create triangles by connecting points." @@ -4388,9 +4164,8 @@ msgstr "" #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp -#, fuzzy msgid "Edit Filters" -msgstr "Промени Филтрите" +msgstr "Редактиране на филтрите" #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "Output node can't be added to the blend tree." @@ -4402,9 +4177,8 @@ msgstr "" #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Node Moved" -msgstr "Режим на Преместване" +msgstr "Възелът е преместен" #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "Unable to connect, port may be in use or connection may be invalid." @@ -4412,26 +4186,22 @@ msgstr "" #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Nodes Connected" -msgstr "Изрязване на възелите" +msgstr "Възлите са свързани" #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Nodes Disconnected" -msgstr "Разкачи" +msgstr "Възлите са разкачени" #: editor/plugins/animation_blend_tree_editor_plugin.cpp -#, fuzzy msgid "Set Animation" -msgstr "Ново Име на Анимация:" +msgstr "Задаване на анимация" #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Delete Node" -msgstr "Избиране на всичко" +msgstr "Изтриване на възела" #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/scene_tree_dock.cpp @@ -4439,9 +4209,8 @@ msgid "Delete Node(s)" msgstr "" #: editor/plugins/animation_blend_tree_editor_plugin.cpp -#, fuzzy msgid "Toggle Filter On/Off" -msgstr "Покажи Любими" +msgstr "Превключване на филтъра ВКЛ/ИЗКЛ" #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "Change Filter" @@ -4472,32 +4241,27 @@ msgid "Audio Clips" msgstr "Добавяне на нови пътечки." #: editor/plugins/animation_blend_tree_editor_plugin.cpp -#, fuzzy msgid "Functions" -msgstr "Отиди на Ред" +msgstr "Функции" #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Node Renamed" -msgstr "Възел" +msgstr "Възелът е преименуван" #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Add Node..." -msgstr "Добави Възел..." +msgstr "Добавяне на възел..." #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/root_motion_editor_plugin.cpp -#, fuzzy msgid "Edit Filtered Tracks:" -msgstr "Файл:" +msgstr "Редактиране на филтрираните пътечки:" #: editor/plugins/animation_blend_tree_editor_plugin.cpp -#, fuzzy msgid "Enable Filtering" -msgstr "Позволи филтриране" +msgstr "Включване на филтрирането" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Toggle Autoplay" @@ -4505,7 +4269,7 @@ msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp msgid "New Animation Name:" -msgstr "Ново Име на Анимация:" +msgstr "Ново име на анимацията:" #: editor/plugins/animation_player_editor_plugin.cpp msgid "New Anim" @@ -4513,7 +4277,7 @@ msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Change Animation Name:" -msgstr "Промени Името на Анимацията:" +msgstr "Промяна на името на анимацията:" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp @@ -4559,9 +4323,8 @@ msgid "No animation to copy!" msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "No animation resource on clipboard!" -msgstr "Обектът не е базиран на ресурсен файл" +msgstr "Няма ресурс–анимация в буфера за обмен!" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Pasted Animation" @@ -4573,7 +4336,7 @@ msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp msgid "No animation to edit!" -msgstr "Няма анимация за променяне!" +msgstr "Няма анимация за редактиране!" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Play selected animation backwards from current pos. (A)" @@ -4605,16 +4368,15 @@ msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Animation Tools" -msgstr "Анимационни Инструменти" +msgstr "Инструменти за анимациите" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Animation" msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Edit Transitions..." -msgstr "Преходи" +msgstr "Редактиране на преходите..." #: editor/plugins/animation_player_editor_plugin.cpp msgid "Open in Inspector" @@ -4711,19 +4473,16 @@ msgid "Cross-Animation Blend Times" msgstr "" #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Move Node" -msgstr "Режим на Преместване" +msgstr "Преместване на възела" #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Transition exists!" -msgstr "Преход" +msgstr "Преходът вече съществува!" #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Add Transition" -msgstr "Добавяне на превод" +msgstr "Добавяне на преход" #: editor/plugins/animation_state_machine_editor.cpp #: modules/visual_script/visual_script_editor.cpp @@ -4760,14 +4519,12 @@ msgid "No playback resource set at path: %s." msgstr "Обектът не е базиран на ресурсен файл" #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Node Removed" -msgstr "Премахни" +msgstr "Възелът е премахнат" #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Transition Removed" -msgstr "Преход" +msgstr "Преходът е премахнат" #: editor/plugins/animation_state_machine_editor.cpp msgid "Set Start Node (Autoplay)" @@ -4781,19 +4538,16 @@ msgid "" msgstr "" #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Create new nodes." -msgstr "Създай нови възли." +msgstr "Създаване на нови възли." #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Connect nodes." -msgstr "Свържи възли." +msgstr "Свързване на възли." #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Remove selected node or transition." -msgstr "Премахни селектирания възел или преход." +msgstr "Премахване на избрания възел или преход." #: editor/plugins/animation_state_machine_editor.cpp msgid "Toggle autoplay this animation on start, restart or seek to zero." @@ -4804,14 +4558,12 @@ msgid "Set the end animation. This is useful for sub-transitions." msgstr "" #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Transition: " -msgstr "Преход" +msgstr "Преход: " #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Play Mode:" -msgstr "Панорамен режим на Отместване (на работния прозорец)" +msgstr "Режим на възпроизвеждане:" #: editor/plugins/animation_tree_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp @@ -4845,9 +4597,8 @@ msgid "Mix" msgstr "" #: editor/plugins/animation_tree_player_editor_plugin.cpp -#, fuzzy msgid "Auto Restart:" -msgstr "Автоматично Рестартиране:" +msgstr "Автоматично рестартиране:" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Restart (s):" @@ -4910,7 +4661,7 @@ msgstr "" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Animation Node" -msgstr "Анимационен Възел" +msgstr "Анимационен възел" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "OneShot Node" @@ -4950,7 +4701,7 @@ msgstr "Внасяне на анимации..." #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Edit Node Filters" -msgstr "Промени Възлови Филтри" +msgstr "Промяна на филтрите за възлите" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Filters..." @@ -4966,7 +4717,7 @@ msgstr "Преглед на файловете" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Connection error, please try again." -msgstr "Грешка във връзката, моля опитай отново." +msgstr "Грешка във връзката. Моля, опитайте отново." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Can't connect to host:" @@ -4982,7 +4733,7 @@ msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Request failed, return code:" -msgstr "Заявката се провали, върнат код:" +msgstr "Заявката се провали. Код:" #: editor/plugins/asset_library_editor_plugin.cpp #, fuzzy @@ -5000,7 +4751,7 @@ msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Request failed, too many redirects" -msgstr "Заявката се провали, твърде много пренасочвания" +msgstr "Заявката се провали. Твърде много пренасочвания" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Redirect loop." @@ -5029,7 +4780,7 @@ msgstr "Получено:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Failed sha256 hash check" -msgstr "Неуспешна проверка на sha256 hash" +msgstr "Неуспешна проверка на хеш от вид „sha256“" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Asset Download Error:" @@ -5037,19 +4788,19 @@ msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Downloading (%s / %s)..." -msgstr "Изтегляне (%s / %s)..." +msgstr "Сваляне (%s / %s)..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Downloading..." -msgstr "Изтегля се..." +msgstr "Сваляне..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Resolving..." -msgstr "Уреждане на връзката..." +msgstr "Инициализиране..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Error making request" -msgstr "Имаше грешка при направата на заявката за изтегляне" +msgstr "Грешка при извършването на заявката" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Idle" @@ -5062,24 +4813,23 @@ msgstr "Инсталиране" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Retry" -msgstr "Опитай пак" +msgstr "Повторен опит" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Download Error" -msgstr "Грешка при изтеглянето" +msgstr "Грешка при свалянето" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Download for this asset is already in progress!" -msgstr "Този актив вече се сваля!" +msgstr "Този ресурс вече се сваля!" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Recently Updated" -msgstr "" +msgstr "Последно обновени" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Least Recently Updated" -msgstr "" +msgstr "Обновени отдавна" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Name (A-Z)" @@ -5101,7 +4851,7 @@ msgstr "Лиценз" #: editor/plugins/asset_library_editor_plugin.cpp msgid "First" -msgstr "Начална" +msgstr "Първа" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Previous" @@ -5135,7 +4885,7 @@ msgstr "Приставки" #: editor/plugins/asset_library_editor_plugin.cpp editor/project_manager.cpp msgid "Sort:" -msgstr "Подреждане:" +msgstr "Сортиране:" #: editor/plugins/asset_library_editor_plugin.cpp #: editor/project_settings_editor.cpp @@ -5144,7 +4894,7 @@ msgstr "Категория:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Site:" -msgstr "Място:" +msgstr "Уеб сайт:" #: editor/plugins/asset_library_editor_plugin.cpp #, fuzzy @@ -5153,11 +4903,11 @@ msgstr "Поддръжка..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Official" -msgstr "Официална" +msgstr "Официално" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Testing" -msgstr "Тестова" +msgstr "Тестово" #: editor/plugins/asset_library_editor_plugin.cpp #, fuzzy @@ -5221,7 +4971,7 @@ msgstr "Изместване при Завъртане:" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Rotation Step:" -msgstr "Съпка при Завъртане:" +msgstr "Стъпка при завъртане:" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy @@ -5453,11 +5203,11 @@ msgstr "Възпроизвеждане на сцена по избор" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Make IK Chain" -msgstr "Направи IK Връзка" +msgstr "Създаване на верига за IK" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Clear IK Chain" -msgstr "Изчисти IK Връзка" +msgstr "Изчистване на веригата за IK" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "" @@ -5475,15 +5225,15 @@ msgstr "Оригинално увеличение" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Select Mode" -msgstr "Режим на Селектиране" +msgstr "Режим на избиране" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Drag: Rotate" -msgstr "Дърпане: Завъртане" +msgstr "Влачене: завъртане" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Alt+Drag: Move" -msgstr "Alt+Дърпане: Преместване" +msgstr "Alt+Влачене: преместване" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Press 'v' to Change Pivot, 'Shift+v' to Drag Pivot (while moving)." @@ -5496,12 +5246,12 @@ msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Move Mode" -msgstr "Режим на Преместване" +msgstr "Режим на преместване" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Rotate Mode" -msgstr "Режим на Завъртане" +msgstr "Режим на завъртане" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -5515,8 +5265,8 @@ msgid "" "Show a list of all objects at the position clicked\n" "(same as Alt+RMB in select mode)." msgstr "" -"Покажи списък с всички обекти на кликнатата позиция\n" -"(същото като Alt+RMB в режим на селектиране)." +"Показване на списък с всички обекти на щракнатата позиция\n" +"(същото като Alt+Десен бутон в режим на избиране)." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Click to change object's rotation pivot." @@ -5524,7 +5274,7 @@ msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Pan Mode" -msgstr "Панорамен режим на Отместване (на работния прозорец)" +msgstr "Панорамен режим" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy @@ -5608,23 +5358,22 @@ msgstr "Избиране на всичко" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Lock the selected object in place (can't be moved)." -msgstr "Заключи селектирания обект на място (за да не може да се премества)." +msgstr "Заключване на избрания обект на място (за да не може да се премества)." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Unlock the selected object (can be moved)." -msgstr "Отключи селектирания обект (за да може да се премества)." +msgstr "Отключване на избрания обект (за да може да се премества)." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Makes sure the object's children are not selectable." -msgstr "Гарантирай че децата на този обект няма да могат да бъдат селектирани." +msgstr "Прави така, че децата на този обект да не могат да бъдат избирани." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Restores the object's children's ability to be selected." -msgstr "Възвръщане на способността да се селектират децата на обекта." +msgstr "Възстановява на способността да се избират децата на обекта." #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy @@ -5646,9 +5395,8 @@ msgstr "Възпроизвеждане на сцена по избор" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "View" -msgstr "Изглед" +msgstr "Преглед" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Always Show Grid" @@ -5680,7 +5428,7 @@ msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" -msgstr "Центрирай върху Селекцията" +msgstr "Центриране върху избраното" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy @@ -5751,7 +5499,7 @@ msgstr "Изглед Отзад." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Add %s" -msgstr "Добави %s" +msgstr "Добавяне на %s" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Adding %s..." @@ -5764,7 +5512,7 @@ msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Create Node" -msgstr "Създай Възел" +msgstr "Създаване на възел" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp @@ -5973,11 +5721,12 @@ msgid "Mesh is empty!" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Trimesh Body" -msgstr "" +#, fuzzy +msgid "Couldn't create a Trimesh collision shape." +msgstr "Неуспешно създаване на папка." #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Convex Body" +msgid "Create Static Trimesh Body" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -5989,12 +5738,30 @@ msgid "Create Trimesh Static Shape" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Failed creating shapes!" +msgid "Can't create a single convex collision shape for the scene root." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Couldn't create a single convex collision shape." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Create Single Convex Shape" +msgstr "Създай нови възли." + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Can't create multiple convex collision shapes for the scene root." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Couldn't create any collision shapes." +msgstr "Неуспешно създаване на папка." + +#: editor/plugins/mesh_instance_editor_plugin.cpp #, fuzzy -msgid "Create Convex Shape(s)" +msgid "Create Multiple Convex Shapes" msgstr "Създай нови възли." #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -6031,11 +5798,11 @@ msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Could not create outline!" -msgstr "Не можа да се създаде очертание!" +msgstr "Контурът не може да бъде създаден!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Outline" -msgstr "Създай Очертание" +msgstr "Създаване на контур" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Mesh" @@ -6046,25 +5813,63 @@ msgid "Create Trimesh Static Body" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a StaticBody and assigns a polygon-based collision shape to it " +"automatically.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Collision Sibling" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a polygon-based collision shape.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp #, fuzzy -msgid "Create Convex Collision Sibling(s)" +msgid "Create Single Convex Collision Siblings" msgstr "Създаване на папка" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a single convex collision shape.\n" +"This is the fastest (but least accurate) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Create Multiple Convex Collision Siblings" +msgstr "Създаване на папка" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a polygon-based collision shape.\n" +"This is a performance middle-ground between the two above options." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Outline Mesh..." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a static outline mesh. The outline mesh will have its normals " +"flipped automatically.\n" +"This can be used instead of the SpatialMaterial Grow property when using " +"that property isn't possible." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "View UV1" -msgstr "Покажи UV1" +msgstr "Показване на UV1" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "View UV2" -msgstr "Покажи UV2" +msgstr "Показване на UV2" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Unwrap UV2 for Lightmap/AO" @@ -6076,7 +5881,7 @@ msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Outline Size:" -msgstr "Размер на Очертанието:" +msgstr "Размер на контура:" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "UV Channel Debug" @@ -6109,11 +5914,11 @@ msgstr "" #: editor/plugins/mesh_library_editor_plugin.cpp msgid "Import from Scene" -msgstr "Внасяне от Cцена" +msgstr "Внасяне от сцена" #: editor/plugins/mesh_library_editor_plugin.cpp msgid "Update from Scene" -msgstr "Обновяване от Cцена" +msgstr "Обновяване от сцена" #: editor/plugins/multimesh_editor_plugin.cpp msgid "No mesh source specified (and no MultiMesh set in node)." @@ -6366,7 +6171,7 @@ msgstr "" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Delete Point" -msgstr "Изтрий Точка" +msgstr "Изтриване на точка" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp @@ -6528,29 +6333,28 @@ msgid "Move Points" msgstr "LMB: Премести Точка." #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Ctrl: Rotate" msgstr "Ctrl: Завъртане" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Shift: Move All" -msgstr "Shift: Преместване на Всичко" +msgstr "Shift: преместване на всичко" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Shift+Ctrl: Scale" -msgstr "Shift+Ctrl: Управление на Мащаб (размер)" +msgstr "Shift+Ctrl: мащабиране" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Move Polygon" -msgstr "Преместване на Полигон" +msgstr "Преместване на полигона" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Rotate Polygon" -msgstr "Завъртане на Полигон" +msgstr "Завъртане на полигона" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Scale Polygon" -msgstr "Мащаб на Полигон" +msgstr "Мащабиране на полигона" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Create a custom polygon. Enables custom polygon rendering." @@ -6576,15 +6380,15 @@ msgstr "Радиус:" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Polygon->UV" -msgstr "Полигон->UV" +msgstr "Полигон -> UV" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "UV->Polygon" -msgstr "UV->Полигон" +msgstr "UV -> Полигон" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Clear UV" -msgstr "Изчисти UV" +msgstr "Изчистване на UV" #: editor/plugins/polygon_2d_editor_plugin.cpp #, fuzzy @@ -6633,7 +6437,7 @@ msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp msgid "ERROR: Couldn't load resource!" -msgstr "ГРЕШКА: Ресурсът не можа да бъде зареден!" +msgstr "ГРЕШКА: Ресурсът не може да бъде зареден!" #: editor/plugins/resource_preloader_editor_plugin.cpp msgid "Add Resource" @@ -6691,15 +6495,15 @@ msgstr "" #: editor/plugins/script_editor_plugin.cpp msgid "Clear Recent Files" -msgstr "" +msgstr "Изчистване на последните файлове" #: editor/plugins/script_editor_plugin.cpp msgid "Close and save changes?" -msgstr "Затвори и запази промените?" +msgstr "Затвяране и запазване на промените?" #: editor/plugins/script_editor_plugin.cpp msgid "Error writing TextFile:" -msgstr "Грешка при записване на TextFile:" +msgstr "Грешка при записването:" #: editor/plugins/script_editor_plugin.cpp #, fuzzy @@ -6737,11 +6541,11 @@ msgstr "Нов TextFile..." #: editor/plugins/script_editor_plugin.cpp msgid "Open File" -msgstr "Отвори Файл" +msgstr "Отваряне на файл" #: editor/plugins/script_editor_plugin.cpp msgid "Save File As..." -msgstr "Запази Файла Като..." +msgstr "Запазване на файла като..." #: editor/plugins/script_editor_plugin.cpp msgid "Can't obtain the script for running." @@ -6770,11 +6574,11 @@ msgstr "" #: editor/plugins/script_editor_plugin.cpp msgid "Error saving" -msgstr "Грешка при запазване" +msgstr "Грешка при запазването" #: editor/plugins/script_editor_plugin.cpp msgid "Save Theme As..." -msgstr "Запази Темата Като..." +msgstr "Запазване на темата като..." #: editor/plugins/script_editor_plugin.cpp msgid "%s Class Reference" @@ -6783,7 +6587,7 @@ msgstr "" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp msgid "Find Next" -msgstr "Намери Напред" +msgstr "Търсене напред" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -6813,13 +6617,13 @@ msgstr "Подреждане:" #: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Move Up" -msgstr "Премести Нагоре" +msgstr "Преместване нагоре" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Move Down" -msgstr "Премести Надоло" +msgstr "Преместване надолу" #: editor/plugins/script_editor_plugin.cpp msgid "Next script" @@ -6845,7 +6649,7 @@ msgstr "Нова сцена" #: editor/plugins/script_editor_plugin.cpp msgid "Save All" -msgstr "Запази Всичко" +msgstr "Запазване на всичко" #: editor/plugins/script_editor_plugin.cpp msgid "Soft Reload Script" @@ -6862,7 +6666,7 @@ msgstr "История Назад" #: editor/plugins/script_editor_plugin.cpp msgid "History Next" -msgstr "История Напред" +msgstr "Напред в историята" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp @@ -6876,11 +6680,11 @@ msgstr "Внасяне на тема" #: editor/plugins/script_editor_plugin.cpp msgid "Reload Theme" -msgstr "Зареди Темата наново" +msgstr "Презареждане на темата" #: editor/plugins/script_editor_plugin.cpp msgid "Save Theme" -msgstr "Запази Темата" +msgstr "Запазване на темата" #: editor/plugins/script_editor_plugin.cpp msgid "Close All" @@ -6888,7 +6692,7 @@ msgstr "Затваряне на всичко" #: editor/plugins/script_editor_plugin.cpp msgid "Close Docs" -msgstr "Затвори Документацията" +msgstr "Затваряне на документацията" #: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp msgid "Run" @@ -6913,7 +6717,7 @@ msgstr "" #: editor/plugins/script_editor_plugin.cpp msgid "Keep Debugger Open" -msgstr "Отстранителя на грешки да седи отворен" +msgstr "Дебъгерът да остане отворен" #: editor/plugins/script_editor_plugin.cpp msgid "Debug with External Editor" @@ -6938,15 +6742,15 @@ msgstr "" #: editor/plugins/script_editor_plugin.cpp msgid "Go to previous edited document." -msgstr "Отиди в предходния променен документ." +msgstr "Към предходния променен документ." #: editor/plugins/script_editor_plugin.cpp msgid "Go to next edited document." -msgstr "Отиди в следващия променен документ." +msgstr "Към следващия променен документ." #: editor/plugins/script_editor_plugin.cpp msgid "Discard" -msgstr "Захвърли (промените)" +msgstr "Отхвърляне" #: editor/plugins/script_editor_plugin.cpp msgid "" @@ -6959,16 +6763,16 @@ msgstr "" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/shader_editor_plugin.cpp msgid "Reload" -msgstr "Презареди" +msgstr "Презареждане" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/shader_editor_plugin.cpp msgid "Resave" -msgstr "Презапиши" +msgstr "Презаписване" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Debugger" -msgstr "Отстранител на грешки" +msgstr "Дебъгер" #: editor/plugins/script_editor_plugin.cpp #, fuzzy @@ -6976,9 +6780,8 @@ msgid "Search Results" msgstr "Търсене" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Clear Recent Scripts" -msgstr "Затваряне на сцената" +msgstr "Изчистване на последните скриптове" #: editor/plugins/script_text_editor.cpp #, fuzzy @@ -7042,7 +6845,7 @@ msgstr "Малки букви" #: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp msgid "Capitalize" -msgstr "Всяка дума с Главна буква" +msgstr "Всяка дума с главна буква" #: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp msgid "Syntax Highlighter" @@ -7075,7 +6878,7 @@ msgstr "Избиране на всичко" #: editor/plugins/script_text_editor.cpp msgid "Delete Line" -msgstr "Изтрий Ред" +msgstr "Изтриване на ред" #: editor/plugins/script_text_editor.cpp msgid "Indent Left" @@ -7087,27 +6890,27 @@ msgstr "" #: editor/plugins/script_text_editor.cpp msgid "Toggle Comment" -msgstr "Вкарай Коментар" +msgstr "Превключване на коментар" #: editor/plugins/script_text_editor.cpp msgid "Fold/Unfold Line" -msgstr "Разтвори/Събери Реда" +msgstr "Разгъване/свиване на реда" #: editor/plugins/script_text_editor.cpp msgid "Fold All Lines" -msgstr "Събери всички Редове" +msgstr "Свиване на всички редове" #: editor/plugins/script_text_editor.cpp msgid "Unfold All Lines" -msgstr "Разтвори Всички Редове" +msgstr "Разгъване на всички редове" #: editor/plugins/script_text_editor.cpp msgid "Clone Down" -msgstr "Копирай на Долен ред" +msgstr "Копиране на долния ред" #: editor/plugins/script_text_editor.cpp msgid "Complete Symbol" -msgstr "Завърши Символа (предложения за довършване)" +msgstr "Знак за авт. довършване" #: editor/plugins/script_text_editor.cpp #, fuzzy @@ -7115,9 +6918,8 @@ msgid "Evaluate Selection" msgstr "Центрирай върху Селекцията" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Trim Trailing Whitespace" -msgstr "Премахни Празните символи в края на реда" +msgstr "Премахване на празните места в края на редовете" #: editor/plugins/script_text_editor.cpp msgid "Convert Indent to Spaces" @@ -7172,11 +6974,11 @@ msgstr "Отиди на Ред" #: editor/plugins/script_text_editor.cpp #: modules/visual_script/visual_script_editor.cpp msgid "Toggle Breakpoint" -msgstr "Добави Breakpoint" +msgstr "Превключване на точка на прекъсване" #: editor/plugins/script_text_editor.cpp msgid "Remove All Breakpoints" -msgstr "Премахни Всички Breakpoint-ове" +msgstr "Премахване на всички точки на прекъсване" #: editor/plugins/script_text_editor.cpp #, fuzzy @@ -7325,11 +7127,11 @@ msgstr "" #: editor/plugins/spatial_editor_plugin.cpp msgid "Top View." -msgstr "Изглед Отгоре." +msgstr "Изглед отгоре." #: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View." -msgstr "Изглед Отдолу." +msgstr "Изглед отдолу." #: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom" @@ -7337,7 +7139,7 @@ msgstr "" #: editor/plugins/spatial_editor_plugin.cpp msgid "Left View." -msgstr "Изглед Отляво." +msgstr "Изглед отляво." #: editor/plugins/spatial_editor_plugin.cpp msgid "Left" @@ -7345,7 +7147,7 @@ msgstr "" #: editor/plugins/spatial_editor_plugin.cpp msgid "Right View." -msgstr "Изглед Отдясно." +msgstr "Изглед отдясно." #: editor/plugins/spatial_editor_plugin.cpp msgid "Right" @@ -7353,7 +7155,7 @@ msgstr "" #: editor/plugins/spatial_editor_plugin.cpp msgid "Front View." -msgstr "Изглед Отпред." +msgstr "Изглед отпред." #: editor/plugins/spatial_editor_plugin.cpp msgid "Front" @@ -7361,7 +7163,7 @@ msgstr "" #: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." -msgstr "Изглед Отзад." +msgstr "Изглед отзад." #: editor/plugins/spatial_editor_plugin.cpp msgid "Rear" @@ -7445,27 +7247,27 @@ msgstr "" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Left" -msgstr "Свободен Изглед Отляво" +msgstr "Свободен изглед отляво" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Right" -msgstr "Свободен Изглед Отдясно" +msgstr "Свободен изглед отдясно" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Forward" -msgstr "Свободен Изглед Отпред" +msgstr "Свободен изглед отпред" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Backwards" -msgstr "Свободен Изглед Отзад" +msgstr "Свободен изглед отзад" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Up" -msgstr "Свободен Изглед Отгоре" +msgstr "Свободен изглед отгоре" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Down" -msgstr "Свободен Изглед Отдолу" +msgstr "Свободен изглед отдолу" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Speed Modifier" @@ -7696,24 +7498,20 @@ msgid "Polygon2D Preview" msgstr "" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Create CollisionPolygon2D" -msgstr "Създаване на папка" +msgstr "Създаване на CollisionPolygon2D" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "CollisionPolygon2D Preview" -msgstr "Създаване на папка" +msgstr "Предварителен преглед на CollisionPolygon2D" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Create LightOccluder2D" -msgstr "Създаване на папка" +msgstr "Създаване на LightOccluder2D" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "LightOccluder2D Preview" -msgstr "Създаване на папка" +msgstr "Предварителен преглед на LightOccluder2D" #: editor/plugins/sprite_editor_plugin.cpp msgid "Sprite is empty!" @@ -7736,9 +7534,8 @@ msgid "Invalid geometry, can't create polygon." msgstr "" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Convert to Polygon2D" -msgstr "Преместване на Полигон" +msgstr "Превръщане в Polygon2D" #: editor/plugins/sprite_editor_plugin.cpp msgid "Invalid geometry, can't create collision polygon." @@ -7774,19 +7571,16 @@ msgid "Grow (Pixels): " msgstr "" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Update Preview" -msgstr "Обновяване от сцена" +msgstr "Обновяване на предварителния преглед" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Settings:" -msgstr "Настройки" +msgstr "Настройки:" #: editor/plugins/sprite_frames_editor_plugin.cpp -#, fuzzy msgid "No Frames Selected" -msgstr "Покажи Селекцията (вмести в целия прозорец)" +msgstr "Няма избрани кадри" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Add %d Frame(s)" @@ -7797,9 +7591,8 @@ msgid "Add Frame" msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp -#, fuzzy msgid "Unable to load images" -msgstr "Неуспешно зареждане на ресурсите." +msgstr "Изображенията не могат да бъдат заредени" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "ERROR: Couldn't load frame resource!" @@ -7826,19 +7619,16 @@ msgid "(empty)" msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp -#, fuzzy msgid "Move Frame" -msgstr "Режим на Преместване" +msgstr "Преместване на кадъра" #: editor/plugins/sprite_frames_editor_plugin.cpp -#, fuzzy msgid "Animations:" -msgstr "Анимационни Инструменти" +msgstr "Анимации:" #: editor/plugins/sprite_frames_editor_plugin.cpp -#, fuzzy msgid "New Animation" -msgstr "Ново Име на Анимация:" +msgstr "Нова анимация" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Speed (FPS):" @@ -7849,14 +7639,12 @@ msgid "Loop" msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp -#, fuzzy msgid "Animation Frames:" -msgstr "Ново Име на Анимация:" +msgstr "Кадри на анимацията:" #: editor/plugins/sprite_frames_editor_plugin.cpp -#, fuzzy msgid "Add a Texture from File" -msgstr "Преместване на пътечката нагоре." +msgstr "Добавяне на текстура от файл" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Add Frames from a Sprite Sheet" @@ -7871,18 +7659,16 @@ msgid "Insert Empty (After)" msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp -#, fuzzy msgid "Move (Before)" -msgstr "Поставяне на възелите" +msgstr "Преместване (преди)" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Move (After)" msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp -#, fuzzy msgid "Select Frames" -msgstr "Режим на Селектиране" +msgstr "Избиране на кадри" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Horizontal:" @@ -7893,9 +7679,8 @@ msgid "Vertical:" msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp -#, fuzzy msgid "Select/Clear All Frames" -msgstr "Избиране на всичко" +msgstr "Избиране/изчистване на всички кадри" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Create Frames from Sprite Sheet" @@ -7964,14 +7749,12 @@ msgid "Remove All Items" msgstr "" #: editor/plugins/theme_editor_plugin.cpp editor/project_manager.cpp -#, fuzzy msgid "Remove All" -msgstr "Затваряне на всичко" +msgstr "Премахване на всичко" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Edit Theme" -msgstr "Файл:" +msgstr "Редактиране на темата" #: editor/plugins/theme_editor_plugin.cpp msgid "Theme editing menu." @@ -8003,18 +7786,16 @@ msgid "Toggle Button" msgstr "Средно копче" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Disabled Button" -msgstr "Средно копче" +msgstr "Заключен бутон" #: editor/plugins/theme_editor_plugin.cpp msgid "Item" msgstr "" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Disabled Item" -msgstr "Изключено" +msgstr "Заключен елемент" #: editor/plugins/theme_editor_plugin.cpp msgid "Check Item" @@ -8057,9 +7838,8 @@ msgid "Many" msgstr "" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Disabled LineEdit" -msgstr "Изключено" +msgstr "Заключено текстово поле" #: editor/plugins/theme_editor_plugin.cpp msgid "Tab 1" @@ -8074,9 +7854,8 @@ msgid "Tab 3" msgstr "" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Editable Item" -msgstr "Промени Филтрите" +msgstr "Редактируем елемент" #: editor/plugins/theme_editor_plugin.cpp msgid "Subtree" @@ -8567,7 +8346,7 @@ msgstr "Файл:" msgid "No VCS addons are available." msgstr "" -#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Error" msgstr "" @@ -8757,7 +8536,7 @@ msgstr "Направи дупликат на Key(s)" #: editor/plugins/visual_shader_editor_plugin.cpp #: modules/visual_script/visual_script_editor.cpp msgid "Paste Nodes" -msgstr "Поставяне на възелите" +msgstr "Поставяне на възлите" #: editor/plugins/visual_shader_editor_plugin.cpp #, fuzzy @@ -9691,11 +9470,16 @@ msgid "Export With Debug" msgstr "" #: editor/project_manager.cpp -msgid "The path does not exist." +msgid "The path specified doesn't exist." +msgstr "" + +#: editor/project_manager.cpp +msgid "Error opening package file (it's not in ZIP format)." msgstr "" #: editor/project_manager.cpp -msgid "Invalid '.zip' project file, does not contain a 'project.godot' file." +msgid "" +"Invalid \".zip\" project file; it doesn't contain a \"project.godot\" file." msgstr "" #: editor/project_manager.cpp @@ -9705,11 +9489,11 @@ msgstr "Моля, изнесете извън папката на проекта #: editor/project_manager.cpp #, fuzzy -msgid "Please choose a 'project.godot' or '.zip' file." +msgid "Please choose a \"project.godot\" or \".zip\" file." msgstr "Моля, изнесете извън папката на проекта!" #: editor/project_manager.cpp -msgid "Directory already contains a Godot project." +msgid "This directory already contains a Godot project." msgstr "" #: editor/project_manager.cpp @@ -9790,11 +9574,11 @@ msgstr "Инсталиране" #: editor/project_manager.cpp msgid "Project Name:" -msgstr "Име:" +msgstr "Име на проекта:" #: editor/project_manager.cpp msgid "Project Path:" -msgstr "Път:" +msgstr "Път до проекта:" #: editor/project_manager.cpp #, fuzzy @@ -9935,7 +9719,7 @@ msgstr "" #: editor/project_manager.cpp msgid "Project Manager" -msgstr "Диспечер на проектите" +msgstr "Управление на проектите" #: editor/project_manager.cpp #, fuzzy @@ -10040,15 +9824,15 @@ msgstr "" #: editor/project_settings_editor.cpp msgid "Left Button" -msgstr "Ляво копче" +msgstr "Ляв бутон" #: editor/project_settings_editor.cpp msgid "Right Button" -msgstr "Дясно копче" +msgstr "Десен бутон" #: editor/project_settings_editor.cpp msgid "Middle Button" -msgstr "Средно копче" +msgstr "Среден бутон" #: editor/project_settings_editor.cpp msgid "Wheel Up Button" @@ -10104,19 +9888,19 @@ msgstr "" #: editor/project_settings_editor.cpp msgid "Button" -msgstr "Копче" +msgstr "Бутон" #: editor/project_settings_editor.cpp msgid "Left Button." -msgstr "Ляво копче." +msgstr "Ляв бутон." #: editor/project_settings_editor.cpp msgid "Right Button." -msgstr "Дясно копче." +msgstr "Десен бутон." #: editor/project_settings_editor.cpp msgid "Middle Button." -msgstr "Средно копче." +msgstr "Среден бутон." #: editor/project_settings_editor.cpp msgid "Wheel Up." @@ -10210,7 +9994,7 @@ msgstr "" #: editor/project_settings_editor.cpp msgid "Project Settings (project.godot)" -msgstr "Настройки на проекта" +msgstr "Настройки на проекта (project.godot)" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp msgid "General" @@ -10356,7 +10140,7 @@ msgstr "" #: editor/property_selector.cpp msgid "Select Property" -msgstr "Изберете свойство" +msgstr "Избиране на свойство" #: editor/property_selector.cpp #, fuzzy @@ -10365,7 +10149,7 @@ msgstr "Изберете метод" #: editor/property_selector.cpp msgid "Select Method" -msgstr "Изберете метод" +msgstr "Избиране на метод" #: editor/rename_dialog.cpp editor/scene_tree_dock.cpp msgid "Batch Rename" @@ -10380,6 +10164,11 @@ msgid "Suffix" msgstr "" #: editor/rename_dialog.cpp +#, fuzzy +msgid "Use Regular Expressions" +msgstr "Двуизмерна текстура" + +#: editor/rename_dialog.cpp msgid "Advanced Options" msgstr "" @@ -10416,7 +10205,7 @@ msgid "" msgstr "" #: editor/rename_dialog.cpp -msgid "Per Level counter" +msgid "Per-level Counter" msgstr "" #: editor/rename_dialog.cpp @@ -10447,10 +10236,6 @@ msgid "" msgstr "" #: editor/rename_dialog.cpp -msgid "Regular Expressions" -msgstr "" - -#: editor/rename_dialog.cpp msgid "Post-Process" msgstr "" @@ -10459,11 +10244,11 @@ msgid "Keep" msgstr "" #: editor/rename_dialog.cpp -msgid "CamelCase to under_scored" +msgid "PascalCase to snake_case" msgstr "" #: editor/rename_dialog.cpp -msgid "under_scored to CamelCase" +msgid "snake_case to PascalCase" msgstr "" #: editor/rename_dialog.cpp @@ -10482,6 +10267,14 @@ msgstr "" msgid "Reset" msgstr "" +#: editor/rename_dialog.cpp +msgid "Regular Expression Error" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "At character %s" +msgstr "" + #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "" @@ -10718,9 +10511,8 @@ msgid "Add Child Node" msgstr "" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Expand/Collapse All" -msgstr "Затваряне на всичко" +msgstr "Разгъване/свиване на всичко" #: editor/scene_tree_dock.cpp msgid "Change Type" @@ -10951,7 +10743,7 @@ msgid "Invalid inherited parent name or path." msgstr "" #: editor/script_create_dialog.cpp -msgid "Script is valid." +msgid "Script path/name is valid." msgstr "" #: editor/script_create_dialog.cpp @@ -11056,6 +10848,10 @@ msgid "Copy Error" msgstr "Грешки" #: editor/script_editor_debugger.cpp +msgid "Video RAM" +msgstr "" + +#: editor/script_editor_debugger.cpp #, fuzzy msgid "Skip Breakpoints" msgstr "Създай точки." @@ -11106,10 +10902,6 @@ msgid "Total:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Video Mem" -msgstr "" - -#: editor/script_editor_debugger.cpp msgid "Resource Path" msgstr "" @@ -11334,13 +11126,13 @@ msgstr "Невалиден формат на инстанцията в речн� #: modules/gdscript/gdscript_functions.cpp msgid "Invalid instance dictionary format (can't load script at @path)" msgstr "" -"Невалиден формат на инстанцията в речника (скриптът в @path не може да бъде " +"Неправилен формат на инстанцията в речника (скриптът в @path не може да бъде " "зареден)" #: modules/gdscript/gdscript_functions.cpp msgid "Invalid instance dictionary format (invalid script at @path)" msgstr "" -"Невалиден формат на инстанцията в речника (скриптът в @path е невалиден)" +"Неправилен формат на инстанцията в речника (скриптът в @path е невалиден)" #: modules/gdscript/gdscript_functions.cpp #, fuzzy @@ -11895,7 +11687,7 @@ msgstr "" #: modules/visual_script/visual_script_editor.cpp msgid "Cut Nodes" -msgstr "Изрязване на възелите" +msgstr "Изрязване на възлите" #: modules/visual_script/visual_script_editor.cpp #, fuzzy @@ -12218,13 +12010,14 @@ msgid "" "CollisionObject2D derived node. Please only use it as a child of Area2D, " "StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape." msgstr "" -"CollisionPolygon2D служи само за да даде форма за колизии на " -"CollisionObject2D. Моля, използвайте го само като наследник на Area2D, " -"StaticBody2D, RigidBody2D, KinematicBody2D, и т.н. за да им дадете форма." +"CollisionPolygon2D служи само, за да даде форма за колизии на " +"CollisionObject2D. Моля, използвайте го като наследник на Area2D, " +"StaticBody2D, RigidBody2D, KinematicBody2D и т.н. само, за да им дадете " +"форма." #: scene/2d/collision_polygon_2d.cpp msgid "An empty CollisionPolygon2D has no effect on collision." -msgstr "Празен CollisionPolygon2D няма никакъв ефект на колизията." +msgstr "Празен CollisionPolygon2D не влияе на колизиите." #: scene/2d/collision_shape_2d.cpp msgid "" @@ -12232,9 +12025,10 @@ msgid "" "CollisionObject2D derived node. Please only use it as a child of Area2D, " "StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape." msgstr "" -"CollisionShape2D служи само за да даде форма за колизии на " -"CollisionObject2D. Моля, използвайте го само като наследник на Area2D, " -"StaticBody2D, RigidBody2D, KinematicBody2D, и т.н. за да им дадете форма." +"CollisionShape2D служи само, за да даде форма за колизии на " +"CollisionObject2D. Моля, използвайте го като наследник на Area2D, " +"StaticBody2D, RigidBody2D, KinematicBody2D, и т.н. само, за да им дадете " +"форма." #: scene/2d/collision_shape_2d.cpp #, fuzzy @@ -12264,8 +12058,8 @@ msgstr "" msgid "" "An occluder polygon must be set (or drawn) for this occluder to take effect." msgstr "" -"Затъмняващият многоъгълник трябва да бъде зададен (или нарисуван) за да може " -"да работи тази сянка." +"Закриващият полигон трябва да бъде зададен (или нарисуван), за да може да " +"работи прикриването." #: scene/2d/light_occluder_2d.cpp #, fuzzy @@ -12277,21 +12071,21 @@ msgid "" "A NavigationPolygon resource must be set or created for this node to work. " "Please set a property or draw a polygon." msgstr "" -"За този възел трябва да бъде зададен или създаден един ресурс " -"NavigationPolygon. Моля, задайте или нарисувайте един многоъгълник." +"За този възел трябва да бъде зададен или създаден ресурс NavigationPolygon. " +"Моля, задайте свойство или нарисувайте полигон." #: scene/2d/navigation_polygon.cpp msgid "" "NavigationPolygonInstance must be a child or grandchild to a Navigation2D " "node. It only provides navigation data." msgstr "" -"NavigationPolygonInstance трябва да бъде наследник или наследник на " -"наследник на Navigation2D. Той само дава навигационна информация." +"NavigationPolygonInstance трябва да бъде наследник или поднаследник на " +"Navigation2D. Той дава само навигационна информация." #: scene/2d/parallax_layer.cpp msgid "" "ParallaxLayer node only works when set as child of a ParallaxBackground node." -msgstr "ParallaxLayer работи само когато е наследник на ParallaxBackground." +msgstr "ParallaxLayer работи само, когато е наследник на ParallaxBackground." #: scene/2d/particles_2d.cpp msgid "" @@ -12314,7 +12108,7 @@ msgstr "" #: scene/2d/path_2d.cpp msgid "PathFollow2D only works when set as a child of a Path2D node." -msgstr "PathFollow2D работи само когато е наследник на Path2D." +msgstr "PathFollow2D работи само, когато е наследник на Path2D." #: scene/2d/physics_body_2d.cpp msgid "" @@ -12326,8 +12120,7 @@ msgstr "" #: scene/2d/remote_transform_2d.cpp msgid "Path property must point to a valid Node2D node to work." msgstr "" -"Параметърът 'Path' трябва да сочи към действителен възел Node2D, за да " -"работи." +"Свойството Path трябва да сочи към действителен възел Node2D, за да работи." #: scene/2d/skeleton_2d.cpp msgid "This Bone2D chain should end at a Skeleton2D node." @@ -12725,6 +12518,9 @@ msgstr "" msgid "Constants cannot be modified." msgstr "" +#~ msgid "Replaced %d occurrence(s)." +#~ msgstr "Заменени съвпадения: %d ." + #, fuzzy #~ msgid "Brief Description" #~ msgstr "Кратко Описание:" diff --git a/editor/translations/bn.po b/editor/translations/bn.po index 3cfcc98809..a7f287be62 100644 --- a/editor/translations/bn.po +++ b/editor/translations/bn.po @@ -733,8 +733,9 @@ msgid "Line Number:" msgstr "লাইন নাম্বার:" #: editor/code_editor.cpp -msgid "Replaced %d occurrence(s)." -msgstr "%d সংখ্যক সংঘটন প্রতিস্থাপিত হয়েছে ।" +#, fuzzy +msgid "%d replaced." +msgstr "প্রতিস্থাপন..." #: editor/code_editor.cpp editor/editor_help.cpp msgid "%d match." @@ -4258,6 +4259,11 @@ msgid "Saving..." msgstr "সংরক্ষিত হচ্ছে..." #: editor/import_dock.cpp +#, fuzzy +msgid "%d Files" +msgstr "ফাইল" + +#: editor/import_dock.cpp msgid "Set as Default for '%s'" msgstr "'%s' এর জন্য ডিফল্ট হিসাবে সেট করুন" @@ -4267,11 +4273,6 @@ msgstr "'%s' এর জন্য ডিফল্ট ক্লিয়ার ক� #: editor/import_dock.cpp #, fuzzy -msgid " Files" -msgstr "ফাইল" - -#: editor/import_dock.cpp -#, fuzzy msgid "Import As:" msgstr "ইম্পোর্ট" @@ -6302,12 +6303,13 @@ msgid "Mesh is empty!" msgstr "মেসটি খালি!" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Trimesh Body" -msgstr "স্থিত-ট্রাইমেস বডি গঠন করুন" +#, fuzzy +msgid "Couldn't create a Trimesh collision shape." +msgstr "ট্রাইমেস কলিশ়ন সহোদর তৈরি করুন" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Convex Body" -msgstr "স্থিত-কনভেক্স বডি গঠন করুন" +msgid "Create Static Trimesh Body" +msgstr "স্থিত-ট্রাইমেস বডি গঠন করুন" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "This doesn't work on scene root!" @@ -6319,12 +6321,30 @@ msgid "Create Trimesh Static Shape" msgstr "ট্রাইমেস আকার তৈরি করুন" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Failed creating shapes!" +msgid "Can't create a single convex collision shape for the scene root." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Couldn't create a single convex collision shape." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp #, fuzzy -msgid "Create Convex Shape(s)" +msgid "Create Single Convex Shape" +msgstr "কনভেক্স আকার তৈরি করুন" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Can't create multiple convex collision shapes for the scene root." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Couldn't create any collision shapes." +msgstr "ফোল্ডার তৈরী করা সম্ভব হয়নি।" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Create Multiple Convex Shapes" msgstr "কনভেক্স আকার তৈরি করুন" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -6376,19 +6396,57 @@ msgid "Create Trimesh Static Body" msgstr "স্থিত-ট্রাইমেস বডি তৈরি করুন" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a StaticBody and assigns a polygon-based collision shape to it " +"automatically.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Collision Sibling" msgstr "ট্রাইমেস কলিশ়ন সহোদর তৈরি করুন" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a polygon-based collision shape.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp #, fuzzy -msgid "Create Convex Collision Sibling(s)" +msgid "Create Single Convex Collision Siblings" msgstr "কনভেক্স কলিশ়ন সহোদর তৈরি করুন" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a single convex collision shape.\n" +"This is the fastest (but least accurate) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Create Multiple Convex Collision Siblings" +msgstr "কনভেক্স কলিশ়ন সহোদর তৈরি করুন" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a polygon-based collision shape.\n" +"This is a performance middle-ground between the two above options." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Outline Mesh..." msgstr "প্রান্তরেখা মেস তৈরি করুন..." #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a static outline mesh. The outline mesh will have its normals " +"flipped automatically.\n" +"This can be used instead of the SpatialMaterial Grow property when using " +"that property isn't possible." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp #, fuzzy msgid "View UV1" msgstr "দৃশ্য/পরিদর্শন" @@ -9005,7 +9063,7 @@ msgstr "TileSet (টাইল-সেট)..." msgid "No VCS addons are available." msgstr "" -#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Error" msgstr "সমস্যা/ভুল" @@ -10180,12 +10238,18 @@ msgstr "Tile Set এক্সপোর্ট করুন" #: editor/project_manager.cpp #, fuzzy -msgid "The path does not exist." +msgid "The path specified doesn't exist." msgstr "ফাইলটি বিদ্যমান নয়।" #: editor/project_manager.cpp #, fuzzy -msgid "Invalid '.zip' project file, does not contain a 'project.godot' file." +msgid "Error opening package file (it's not in ZIP format)." +msgstr "জিপ ফরম্যাট খুঁজে পেতে ব্যার্থ, প্যাকেজ ফাইল ওপেন করা যায়নি।" + +#: editor/project_manager.cpp +#, fuzzy +msgid "" +"Invalid \".zip\" project file; it doesn't contain a \"project.godot\" file." msgstr "এমন একটি ফোল্ডার বাছাই করুন যেখানে 'project.godot' নামে কোন ফাইল নেই।" #: editor/project_manager.cpp @@ -10195,11 +10259,11 @@ msgstr "অনুগ্রহ করে প্রকল্পের ফোল্ #: editor/project_manager.cpp #, fuzzy -msgid "Please choose a 'project.godot' or '.zip' file." +msgid "Please choose a \"project.godot\" or \".zip\" file." msgstr "অনুগ্রহ করে প্রকল্পের ফোল্ডারের বাইরে এক্সপোর্ট করুন!" #: editor/project_manager.cpp -msgid "Directory already contains a Godot project." +msgid "This directory already contains a Godot project." msgstr "" #: editor/project_manager.cpp @@ -10905,6 +10969,11 @@ msgstr "" #: editor/rename_dialog.cpp #, fuzzy +msgid "Use Regular Expressions" +msgstr "অভিব্যক্তি (Expression) পরিবর্তন করুন" + +#: editor/rename_dialog.cpp +#, fuzzy msgid "Advanced Options" msgstr "অ্যানিমেশনের সিদ্ধান্তসমূহ" @@ -10943,7 +11012,7 @@ msgid "" msgstr "" #: editor/rename_dialog.cpp -msgid "Per Level counter" +msgid "Per-level Counter" msgstr "" #: editor/rename_dialog.cpp @@ -10975,11 +11044,6 @@ msgstr "" #: editor/rename_dialog.cpp #, fuzzy -msgid "Regular Expressions" -msgstr "অভিব্যক্তি (Expression) পরিবর্তন করুন" - -#: editor/rename_dialog.cpp -#, fuzzy msgid "Post-Process" msgstr "প্রক্রিয়া-পরবর্তী স্ক্রিপ্ট:" @@ -10988,11 +11052,11 @@ msgid "Keep" msgstr "রাখুন" #: editor/rename_dialog.cpp -msgid "CamelCase to under_scored" +msgid "PascalCase to snake_case" msgstr "" #: editor/rename_dialog.cpp -msgid "under_scored to CamelCase" +msgid "snake_case to PascalCase" msgstr "" #: editor/rename_dialog.cpp @@ -11014,6 +11078,16 @@ msgstr "বড় হাতের অক্ষর" msgid "Reset" msgstr "সম্প্রসারন/সংকোচন অপসারণ করুন (রিসেট জুম্)" +#: editor/rename_dialog.cpp +#, fuzzy +msgid "Regular Expression Error" +msgstr "অভিব্যক্তি (Expression) পরিবর্তন করুন" + +#: editor/rename_dialog.cpp +#, fuzzy +msgid "At character %s" +msgstr "গ্রহনযোগ্য অক্ষরসমূহ:" + #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "নোডের নতুন অভিভাবক দান করুন" @@ -11517,7 +11591,7 @@ msgstr "সূচক/ইনডেক্স মানের অগ্রহনয #: editor/script_create_dialog.cpp #, fuzzy -msgid "Script is valid." +msgid "Script path/name is valid." msgstr "স্ক্রিপ্ট" #: editor/script_create_dialog.cpp @@ -11628,6 +11702,11 @@ msgstr "ভুল/সমস্যা-সমূহ লোড করুন" #: editor/script_editor_debugger.cpp #, fuzzy +msgid "Video RAM" +msgstr "ভিডিও মেমোরি" + +#: editor/script_editor_debugger.cpp +#, fuzzy msgid "Skip Breakpoints" msgstr "বিন্দু অপসারণ করুন" @@ -11677,10 +11756,6 @@ msgid "Total:" msgstr "সর্বমোট:" #: editor/script_editor_debugger.cpp -msgid "Video Mem" -msgstr "ভিডিও মেমোরি" - -#: editor/script_editor_debugger.cpp msgid "Resource Path" msgstr "রিসোর্স-এর পথ" @@ -13384,6 +13459,12 @@ msgstr "" msgid "Constants cannot be modified." msgstr "" +#~ msgid "Replaced %d occurrence(s)." +#~ msgstr "%d সংখ্যক সংঘটন প্রতিস্থাপিত হয়েছে ।" + +#~ msgid "Create Static Convex Body" +#~ msgstr "স্থিত-কনভেক্স বডি গঠন করুন" + #, fuzzy #~ msgid "" #~ "There are currently no tutorials for this class, you can [color=$color]" diff --git a/editor/translations/ca.po b/editor/translations/ca.po index dc618c880f..fb0a3af30c 100644 --- a/editor/translations/ca.po +++ b/editor/translations/ca.po @@ -4,18 +4,19 @@ # This file is distributed under the same license as the Godot source code. # BennyBeat <bennybeat@gmail.com>, 2017. # Javier Ocampos <xavier.ocampos@gmail.com>, 2018. -# Roger Blanco Ribera <roger.blancoribera@gmail.com>, 2016-2018. +# Roger Blanco Ribera <roger.blancoribera@gmail.com>, 2016-2018, 2020. # Rubén Moreno <ruben.moreno.romero@gmail.com>, 2018. -# roger <616steam@gmail.com>, 2019. +# roger <616steam@gmail.com>, 2019, 2020. # Roger BR <drai_kin@hotmail.com>, 2019. # Adolfo Jayme Barrientos <fitojb@ubuntu.com>, 2020. # Xavier Gomez <hiulit@gmail.com>, 2020. +# Aina <ainasoga@gmail.com>, 2020. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2020-01-27 07:09+0000\n" -"Last-Translator: Xavier Gomez <hiulit@gmail.com>\n" +"PO-Revision-Date: 2020-02-07 10:32+0000\n" +"Last-Translator: Roger Blanco Ribera <roger.blancoribera@gmail.com>\n" "Language-Team: Catalan <https://hosted.weblate.org/projects/godot-engine/" "godot/ca/>\n" "Language: ca\n" @@ -31,9 +32,8 @@ msgid "Invalid type argument to convert(), use TYPE_* constants." msgstr "L'argument per a convert() no és vàlid, utilitzeu constants TYPE_*." #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp -#, fuzzy msgid "Expected a string of length 1 (a character)." -msgstr "S'esperava una cadena de longitud 1 (un caràcter)." +msgstr "S'esperava una cadena de caràcters de longitud 1 (un caràcter)." #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/mono/glue/gd_glue.cpp @@ -166,29 +166,24 @@ msgid "Anim Change Call" msgstr "Canviar crida d'animació" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Multi Change Keyframe Time" -msgstr "Modifica el temps de la clau" +msgstr "Modifica el temps de diverses claus d'animació" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Multi Change Transition" -msgstr "Modifica la Transició d'Animació" +msgstr "Modifica diverses transicions d'animació" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Multi Change Transform" -msgstr "Modifica la Transformació de l'Animació" +msgstr "Modifica diverses transformacions de l'animació" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Multi Change Keyframe Value" -msgstr "Modifica el valor de la clau" +msgstr "Modifica el valor de diverses claus d'animació" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Multi Change Call" -msgstr "Canviar crida d'animació" +msgstr "Canviar diverses crides d'animació" #: editor/animation_track_editor.cpp msgid "Change Animation Length" @@ -699,16 +694,15 @@ msgid "Line Number:" msgstr "Línia:" #: editor/code_editor.cpp -msgid "Replaced %d occurrence(s)." -msgstr "%d ocurrència/es reemplaçades." +#, fuzzy +msgid "%d replaced." +msgstr "Substitueix..." #: editor/code_editor.cpp editor/editor_help.cpp -#, fuzzy msgid "%d match." msgstr "%d coincidència." #: editor/code_editor.cpp editor/editor_help.cpp -#, fuzzy msgid "%d matches." msgstr "%d coincidències." @@ -1631,19 +1625,16 @@ msgid "Scene Tree Editing" msgstr "Edició de l'arbre d'escenes" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Import Dock" -msgstr "Importa" +msgstr "Importació" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Node Dock" -msgstr "Node mogut" +msgstr "Nodes" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "FileSystem and Import Docks" -msgstr "Sistema de Fitxers" +msgstr "Importació i sistema de fitxers" #: editor/editor_feature_profile.cpp msgid "Erase profile '%s'? (no undo)" @@ -1714,9 +1705,8 @@ msgid "Current Profile:" msgstr "Perfil Actual:" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Make Current" -msgstr "Fer Actual" +msgstr "Fés l'actual" #: editor/editor_feature_profile.cpp #: editor/plugins/animation_player_editor_plugin.cpp @@ -1750,9 +1740,8 @@ msgid "Erase Profile" msgstr "Esborrar Perfil" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Godot Feature Profile" -msgstr "Administra els Perfils de Característiques de l'Editor" +msgstr "Perfil de les funcionalitats del Godot" #: editor/editor_feature_profile.cpp msgid "Import Profile(s)" @@ -1955,28 +1944,24 @@ msgid "Inherited by:" msgstr "Heretat per:" #: editor/editor_help.cpp -#, fuzzy msgid "Description" -msgstr "Descripció:" +msgstr "Descripció" #: editor/editor_help.cpp -#, fuzzy msgid "Online Tutorials" -msgstr "Tutorials en línia:" +msgstr "Tutorials en línia" #: editor/editor_help.cpp msgid "Properties" msgstr "Propietats" #: editor/editor_help.cpp -#, fuzzy msgid "override:" -msgstr "Sobreescriu" +msgstr "Sobreescriu:" #: editor/editor_help.cpp -#, fuzzy msgid "default:" -msgstr "Predeterminat" +msgstr "predeterminat:" #: editor/editor_help.cpp msgid "Methods" @@ -1999,9 +1984,8 @@ msgid "Property Descriptions" msgstr "Descripcions de la Propietat" #: editor/editor_help.cpp -#, fuzzy msgid "(value)" -msgstr "Valor" +msgstr "(valor)" #: editor/editor_help.cpp msgid "" @@ -2033,9 +2017,8 @@ msgid "Case Sensitive" msgstr "Majúscules i minúscules" #: editor/editor_help_search.cpp -#, fuzzy msgid "Show Hierarchy" -msgstr "Mostrar els Ajudants" +msgstr "Mostra la jerarquia" #: editor/editor_help_search.cpp msgid "Display All" @@ -2074,9 +2057,8 @@ msgid "Class" msgstr "Classe" #: editor/editor_help_search.cpp -#, fuzzy msgid "Method" -msgstr "Mètodes" +msgstr "Mètode" #: editor/editor_help_search.cpp editor/plugins/script_text_editor.cpp msgid "Signal" @@ -2087,9 +2069,8 @@ msgid "Constant" msgstr "Constant" #: editor/editor_help_search.cpp -#, fuzzy msgid "Property" -msgstr "Propietat:" +msgstr "Propietat" #: editor/editor_help_search.cpp #, fuzzy @@ -2145,9 +2126,8 @@ msgid "%s/s" msgstr "%s/s" #: editor/editor_network_profiler.cpp -#, fuzzy msgid "Down" -msgstr "Baixa" +msgstr "Avall" #: editor/editor_network_profiler.cpp msgid "Up" @@ -2158,32 +2138,28 @@ msgid "Node" msgstr "Node" #: editor/editor_network_profiler.cpp -#, fuzzy msgid "Incoming RPC" msgstr "RPC Entrant" #: editor/editor_network_profiler.cpp -#, fuzzy msgid "Incoming RSET" msgstr "RSET Entrant" #: editor/editor_network_profiler.cpp -#, fuzzy msgid "Outgoing RPC" msgstr "RPC Sortint" #: editor/editor_network_profiler.cpp -#, fuzzy msgid "Outgoing RSET" msgstr "RSET Sortint" #: editor/editor_node.cpp editor/project_manager.cpp msgid "New Window" -msgstr "Nova finestra" +msgstr "Finestra nova" #: editor/editor_node.cpp msgid "Imported resources can't be saved." -msgstr "Els recursos importats no es poden guardar." +msgstr "Els recursos importats no es poden desar." #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp #: scene/gui/dialogs.cpp @@ -2192,7 +2168,7 @@ msgstr "D'acord" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Error saving resource!" -msgstr "Error en desar recurs!" +msgstr "Error en desar el recurs!" #: editor/editor_node.cpp msgid "" @@ -2200,11 +2176,11 @@ msgid "" "Make it unique first." msgstr "" "Aquest recurs no es pot desar perquè no pertany a l'escena editada. Feu-lo " -"únic primer." +"únic abans." #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Save Resource As..." -msgstr "Anomena i Desa el Recurs..." +msgstr "Anomena i Desa el recurs..." #: editor/editor_node.cpp msgid "Can't open file for writing:" @@ -2259,6 +2235,9 @@ msgid "" "This scene can't be saved because there is a cyclic instancing inclusion.\n" "Please resolve it and then attempt to save again." msgstr "" +"Aquesta escena no es pot desar per culpa d'una inclusió cíclica de " +"l'instanciació.\n" +"Resol-la i torna a desar altre cop." #: editor/editor_node.cpp msgid "" @@ -2343,7 +2322,6 @@ msgstr "" "més informació." #: editor/editor_node.cpp -#, fuzzy msgid "" "This is a remote object, so changes to it won't be kept.\n" "Please read the documentation relevant to debugging to better understand " @@ -2395,9 +2373,8 @@ msgid "Save changes to '%s' before closing?" msgstr "Desar els canvis a '%s' abans de tancar?" #: editor/editor_node.cpp -#, fuzzy msgid "Saved %s modified resource(s)." -msgstr "Desat(s) el(s) recurs(os) modificat(s) %s." +msgstr "Desat(s) el(s) %s recurs(os) modificat(s)." #: editor/editor_node.cpp msgid "A root node is required to save the scene." @@ -2505,7 +2482,7 @@ msgstr "Tanca l'Escena" #: editor/editor_node.cpp #, fuzzy msgid "Reopen Closed Scene" -msgstr "Tanca l'Escena" +msgstr "Reobrir l'escena tancada" #: editor/editor_node.cpp msgid "Unable to enable addon plugin at: '%s' parsing of config failed." @@ -2528,7 +2505,7 @@ msgid "" "Unable to load addon script from path: '%s' There seems to be an error in " "the code, please check the syntax." msgstr "" -"No es pot carregar el script d'addon des del camí: '%s' Sembla que hi ha un " +"No es pot carregar l'script d'addon des del camí: '%s' Sembla que hi ha un " "error en el codi, si us plau comproveu la sintaxi." #: editor/editor_node.cpp @@ -2628,7 +2605,7 @@ msgstr "Tanca la Pestanya" #: editor/editor_node.cpp #, fuzzy msgid "Undo Close Tab" -msgstr "Tanca la Pestanya" +msgstr "Desfer Tancament de Pestanya" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp msgid "Close Other Tabs" @@ -2762,14 +2739,12 @@ msgid "Project" msgstr "Projecte" #: editor/editor_node.cpp -#, fuzzy msgid "Project Settings..." -msgstr "Configuració del Projecte" +msgstr "Configuració del Projecte..." #: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp -#, fuzzy msgid "Version Control" -msgstr "Versió:" +msgstr "Control de Versions" #: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp #, fuzzy @@ -2782,9 +2757,8 @@ msgid "Shut Down Version Control" msgstr "Desactivar el control de versions" #: editor/editor_node.cpp -#, fuzzy msgid "Export..." -msgstr "Exportar" +msgstr "Exportar..." #: editor/editor_node.cpp #, fuzzy @@ -2906,9 +2880,8 @@ msgid "Editor" msgstr "Editor" #: editor/editor_node.cpp -#, fuzzy msgid "Editor Settings..." -msgstr "Configuració de l'Editor" +msgstr "Configuració de l'Editor..." #: editor/editor_node.cpp msgid "Editor Layout" @@ -3091,6 +3064,12 @@ msgid "" "the \"Use Custom Build\" option should be enabled in the Android export " "preset." msgstr "" +"S'inicialitzarà el projecte per a compilar per Android. La plantilla " +"s'instal·larà a \"res://android/build\".\n" +"Pots aplicar modificacions i generar el teu propi APK en exportar ( afegir " +"mòduls, canviar el manifest AndroidManifest.xml, etc.).\n" +"Habilita l'opció \"Utilitza Compilació Personalitzada\" en la configuració " +"d'exportació per a Android per personalitzar la compilació." #: editor/editor_node.cpp #, fuzzy @@ -3295,6 +3274,8 @@ msgid "" "Can't create a ViewportTexture on resources saved as a file.\n" "Resource needs to belong to a scene." msgstr "" +"No es pot crear una ViewportTexture en recursos desats en fitxers.\n" +"El Recurs ha de pertànyer a un escena." #: editor/editor_properties.cpp msgid "" @@ -3303,6 +3284,10 @@ msgid "" "Please switch on the 'local to scene' property on it (and all resources " "containing it up to a node)." msgstr "" +"No es pot crear una ViewportTexture en aquest recurs ja que no s'ha definit " +"com local per a l'escena.\n" +"Activeu la propietat \"local a l'escena\" del recurs i també en tots els " +"recurs intermitjos que el continguin fins a un node." #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Pick a Viewport" @@ -3314,7 +3299,7 @@ msgstr "Script Nou" #: editor/editor_properties.cpp editor/scene_tree_dock.cpp msgid "Extend Script" -msgstr "Estendre el script" +msgstr "Estendre l'script" #: editor/editor_properties.cpp editor/property_editor.cpp msgid "New %s" @@ -3491,6 +3476,8 @@ msgstr "No s'ha pogut l'objecte signatura." #: editor/export_template_manager.cpp msgid "Error parsing JSON of mirror list. Please report this issue!" msgstr "" +"S'ha produït un error en analitzar la llista JSON de rèpliques. Si us plau, " +"informeu d'aquest problema!" #: editor/export_template_manager.cpp msgid "" @@ -4012,6 +3999,10 @@ msgid "Saving..." msgstr "Desant..." #: editor/import_dock.cpp +msgid "%d Files" +msgstr "%d Fitxers" + +#: editor/import_dock.cpp msgid "Set as Default for '%s'" msgstr "Establir com a valor Predeterminat per a '%s'" @@ -4020,10 +4011,6 @@ msgid "Clear Default for '%s'" msgstr "Neteja el valor Predeterminat de '%s'" #: editor/import_dock.cpp -msgid " Files" -msgstr " Fitxers" - -#: editor/import_dock.cpp msgid "Import As:" msgstr "Importar com a:" @@ -4454,9 +4441,8 @@ msgid "Audio Clips" msgstr "Talls d'Àudio:" #: editor/plugins/animation_blend_tree_editor_plugin.cpp -#, fuzzy msgid "Functions" -msgstr "Funcions:" +msgstr "Funcions" #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp @@ -4766,14 +4752,12 @@ msgid "Remove selected node or transition." msgstr "Eliminar el node o transició seleccionats." #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Toggle autoplay this animation on start, restart or seek to zero." msgstr "" -"Commuta auto reproducció d'aquesta animació en iniciar, reiniciar o buscar a " -"zero." +"Commuta l'auto reproducció d'aquesta animació en iniciar, reiniciar o buscar " +"a zero." #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Set the end animation. This is useful for sub-transitions." msgstr "Definiu l'animació final. Això és útil per a sub-transicions." @@ -5045,20 +5029,23 @@ msgid "Download for this asset is already in progress!" msgstr "Ja s'està baixant aquest actiu!" #: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy msgid "Recently Updated" -msgstr "" +msgstr "Actualitzat Recentment" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Least Recently Updated" -msgstr "" +msgstr "Actualitzacions menys recents" #: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy msgid "Name (A-Z)" -msgstr "" +msgstr "Nom (A-Z)" #: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy msgid "Name (Z-A)" -msgstr "" +msgstr "Nom (Z-A)" #: editor/plugins/asset_library_editor_plugin.cpp #, fuzzy @@ -5269,16 +5256,15 @@ msgstr "" "anul·lats pels seus pares." #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Presets for the anchors and margins values of a Control node." -msgstr "" -"Predefinits per als ancoratges i els valors dels marges d'un node Control." +msgstr "Valors predefinits per als ancoratges i els marges d'un node Control." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "" "When active, moving Control nodes changes their anchors instead of their " "margins." msgstr "" +"En activar-se, els nodes de Control afectaren les àncores enlloc dels marges." #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy @@ -5322,7 +5308,7 @@ msgstr "Part inferior" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center" -msgstr "" +msgstr "Centre" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy @@ -5346,15 +5332,15 @@ msgstr "Vista Inferior" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "VCenter Wide" -msgstr "" +msgstr "CentreV Ample" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "HCenter Wide" -msgstr "" +msgstr "CentreH Ample" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Full Rect" -msgstr "" +msgstr "Rect. Complet" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy @@ -5379,6 +5365,8 @@ msgid "" "Game Camera Override\n" "Overrides game camera with editor viewport camera." msgstr "" +"Substitueix la càmera del joc.\n" +"Substitueix la càmera del joc per la la càmera de l'editor." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -5386,12 +5374,13 @@ msgid "" "Game Camera Override\n" "No game instance running." msgstr "" +"Substitueix la càmera del joc.\n" +"Cap instància del joc en execució." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Lock Selected" -msgstr "Bloca el Seleccionat" +msgstr "Bloca la selecció" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -5548,9 +5537,8 @@ msgid "Snap Relative" msgstr "Ajustament Relatiu" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Use Pixel Snap" -msgstr "Utilitzar Ajustament amb els Píxels" +msgstr "Utilitzar ajustament amb els Píxels" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Smart Snapping" @@ -5571,7 +5559,6 @@ msgid "Snap to Node Anchor" msgstr "Ajustar a l'Àncora del Node" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Snap to Node Sides" msgstr "Ajustar als costats del node" @@ -5824,12 +5811,13 @@ msgstr "Màscara d'Emissió" #: editor/plugins/cpu_particles_2d_editor_plugin.cpp #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Solid Pixels" -msgstr "" +msgstr "Píxels sòlids" #: editor/plugins/cpu_particles_2d_editor_plugin.cpp #: editor/plugins/particles_2d_editor_plugin.cpp +#, fuzzy msgid "Border Pixels" -msgstr "" +msgstr "Píxels de la vora" #: editor/plugins/cpu_particles_2d_editor_plugin.cpp #: editor/plugins/particles_2d_editor_plugin.cpp @@ -5882,7 +5870,7 @@ msgstr "Sortida Lenta" #: editor/plugins/curve_editor_plugin.cpp msgid "Smoothstep" -msgstr "pas de Suavització" +msgstr "Progressió Suau (SmoothStep)" #: editor/plugins/curve_editor_plugin.cpp msgid "Modify Curve Point" @@ -5963,12 +5951,13 @@ msgid "Mesh is empty!" msgstr "La malla és buida!" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Trimesh Body" -msgstr "Crea un Cos Estàtic a partir d'una malla de triangles" +#, fuzzy +msgid "Couldn't create a Trimesh collision shape." +msgstr "Crea una Col·lisió entre malles de triangles germanes" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Convex Body" -msgstr "Crea un Cos Estàtic Convex" +msgid "Create Static Trimesh Body" +msgstr "Crea un Cos Estàtic a partir d'una malla de triangles" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "This doesn't work on scene root!" @@ -5980,13 +5969,30 @@ msgid "Create Trimesh Static Shape" msgstr "Crea un forma amb una malla de triangles" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Can't create a single convex collision shape for the scene root." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Couldn't create a single convex collision shape." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp #, fuzzy -msgid "Failed creating shapes!" -msgstr "Ha fallat la creació de formes!" +msgid "Create Single Convex Shape" +msgstr "Crea una Forma Convexa" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Can't create multiple convex collision shapes for the scene root." +msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp #, fuzzy -msgid "Create Convex Shape(s)" +msgid "Couldn't create any collision shapes." +msgstr "No s'ha pogut crear el directori." + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Create Multiple Convex Shapes" msgstr "Crea una Forma Convexa" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -6038,19 +6044,57 @@ msgid "Create Trimesh Static Body" msgstr "Crea un Cos Estàtic a partir d'una malla de triangles" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a StaticBody and assigns a polygon-based collision shape to it " +"automatically.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Collision Sibling" msgstr "Crea una Col·lisió entre malles de triangles germanes" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a polygon-based collision shape.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Create Single Convex Collision Siblings" +msgstr "Crea col·lisions convexes entre nodes germans" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a single convex collision shape.\n" +"This is the fastest (but least accurate) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp #, fuzzy -msgid "Create Convex Collision Sibling(s)" +msgid "Create Multiple Convex Collision Siblings" msgstr "Crea col·lisions convexes entre nodes germans" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a polygon-based collision shape.\n" +"This is a performance middle-ground between the two above options." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Outline Mesh..." msgstr "Crea una malla de contorn..." #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a static outline mesh. The outline mesh will have its normals " +"flipped automatically.\n" +"This can be used instead of the SpatialMaterial Grow property when using " +"that property isn't possible." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "View UV1" msgstr "Visualitza UV1" @@ -6072,7 +6116,7 @@ msgstr "Mida del Contorn:" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "UV Channel Debug" -msgstr "" +msgstr "Depuració del canal UV" #: editor/plugins/mesh_library_editor_plugin.cpp msgid "Remove item %d?" @@ -6376,12 +6420,12 @@ msgstr "Opcions" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Mirror Handle Angles" -msgstr "" +msgstr "Reflecteix els Angles de la Nansa" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Mirror Handle Lengths" -msgstr "" +msgstr "Reflecteix les mides de la Nansa" #: editor/plugins/path_editor_plugin.cpp msgid "Curve Point #" @@ -6449,6 +6493,8 @@ msgid "" "Polygon 2D has internal vertices, so it can no longer be edited in the " "viewport." msgstr "" +"El polígon 2D no pot ser editat en l'àrea de visualització ja que conté " +"vèrtexs interns." #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Create Polygon & UV" @@ -6675,7 +6721,7 @@ msgstr "ResourcePreloader" #: editor/plugins/root_motion_editor_plugin.cpp msgid "AnimationTree has no path set to an AnimationPlayer" -msgstr "" +msgstr "L'AnimationTree no té ruta assignada cap a un AnimationPlayer" #: editor/plugins/root_motion_editor_plugin.cpp #, fuzzy @@ -6734,20 +6780,22 @@ msgstr "Anomena i Desa..." #: editor/plugins/script_editor_plugin.cpp msgid "Can't obtain the script for running." -msgstr "" +msgstr "No s'ha trobat l'script per executar-lo." #: editor/plugins/script_editor_plugin.cpp msgid "Script failed reloading, check console for errors." -msgstr "" +msgstr "L'script ha fallat al recarregar, comproveu els errors en la consola." #: editor/plugins/script_editor_plugin.cpp msgid "Script is not in tool mode, will not be able to run." -msgstr "" +msgstr "L'script no està en mode d'eina, no es podrà executar." #: editor/plugins/script_editor_plugin.cpp msgid "" "To run this script, it must inherit EditorScript and be set to tool mode." msgstr "" +"Si es vol executar l'script, ha d'heretar de EditorScript i configuar-se en " +"mode Eina (tool)." #: editor/plugins/script_editor_plugin.cpp msgid "Import Theme" @@ -7003,6 +7051,7 @@ msgstr "Només s'hi poden deixar caure Recursos del sistema de fitxers." #: modules/visual_script/visual_script_editor.cpp msgid "Can't drop nodes because script '%s' is not used in this scene." msgstr "" +"No s'hi poden afegir els nodes ja que l'escena no utilitza l'script '%s' ." #: editor/plugins/script_text_editor.cpp #, fuzzy @@ -7250,7 +7299,7 @@ msgstr "Transformació de l'Eix Z." #: editor/plugins/spatial_editor_plugin.cpp msgid "View Plane Transform." -msgstr "Transformació de la Vista." +msgstr "Transformació en el Pla de la Vista." #: editor/plugins/spatial_editor_plugin.cpp msgid "Scaling: " @@ -7258,7 +7307,7 @@ msgstr "Escala: " #: editor/plugins/spatial_editor_plugin.cpp msgid "Translating: " -msgstr "Traslladant: " +msgstr "Translació: " #: editor/plugins/spatial_editor_plugin.cpp msgid "Rotating %s degrees." @@ -7279,7 +7328,7 @@ msgstr "commutador" #: editor/plugins/spatial_editor_plugin.cpp msgid "Yaw" -msgstr "" +msgstr "Guinyada" #: editor/plugins/spatial_editor_plugin.cpp msgid "Objects Drawn" @@ -7421,8 +7470,9 @@ msgid "Cinematic Preview" msgstr "Previsualització Cinemàtica" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy msgid "Not available when using the GLES2 renderer." -msgstr "" +msgstr "No disponible quan s'utilitza el renderitzador GLES2." #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Left" @@ -7685,7 +7735,7 @@ msgstr "Crear Polígon2D" #: editor/plugins/sprite_editor_plugin.cpp msgid "Polygon2D Preview" -msgstr "" +msgstr "Previsualització del Polygon2D" #: editor/plugins/sprite_editor_plugin.cpp #, fuzzy @@ -7762,11 +7812,11 @@ msgstr "Simplificació: " #: editor/plugins/sprite_editor_plugin.cpp msgid "Shrink (Pixels): " -msgstr "" +msgstr "Redueix (Píxels): " #: editor/plugins/sprite_editor_plugin.cpp msgid "Grow (Pixels): " -msgstr "" +msgstr "Engrandeix (Píxels): " #: editor/plugins/sprite_editor_plugin.cpp msgid "Update Preview" @@ -8023,7 +8073,7 @@ msgstr "Element de ràdio validat" #: editor/plugins/theme_editor_plugin.cpp msgid "Named Sep." -msgstr "" +msgstr "Separador amb nom." #: editor/plugins/theme_editor_plugin.cpp msgid "Submenu" @@ -8161,7 +8211,7 @@ msgstr "Filtrat de Fitxers..." #: editor/plugins/tile_map_editor_plugin.cpp msgid "Give a TileSet resource to this TileMap to use its tiles." -msgstr "" +msgstr "Assigna un recurs TileSet a aquest TileMap per a usar-ne les peces." #: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint Tile" @@ -8220,7 +8270,7 @@ msgstr "Combina-ho a partir de l'Escena" #: editor/plugins/tile_set_editor_plugin.cpp msgid "New Single Tile" -msgstr "" +msgstr "Nova peça individual" #: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy @@ -8362,6 +8412,8 @@ msgstr "Mostrar noms de les rajoles (manteniu pressionada la tecla Alt)" msgid "" "Add or select a texture on the left panel to edit the tiles bound to it." msgstr "" +"Afegeix o selecciona una textura en el plafó esquerra per a editar-ne les " +"peces assignades." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Remove selected texture? This will remove all tiles which use it." @@ -8394,6 +8446,8 @@ msgid "" "Drag handles to edit Rect.\n" "Click on another Tile to edit it." msgstr "" +"Arrossega les nanses per editar el Rect.\n" +"Clica en una altra Peça per a editar-lo." #: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy @@ -8557,7 +8611,7 @@ msgstr "Conjunt de rajoles" msgid "No VCS addons are available." msgstr "Nom del pare del node, si està disponible" -#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Error" msgstr "Error" @@ -8568,7 +8622,7 @@ msgstr "Manca Nom" #: editor/plugins/version_control_editor_plugin.cpp msgid "No files added to stage" -msgstr "" +msgstr "No hi ha fitxers afegits a l'escenari" #: editor/plugins/version_control_editor_plugin.cpp #, fuzzy @@ -8576,12 +8630,13 @@ msgid "Commit" msgstr "Comunitat" #: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy msgid "VCS Addon is not initialized" -msgstr "" +msgstr "L'Addon VCS no està inicialitzat" #: editor/plugins/version_control_editor_plugin.cpp msgid "Version Control System" -msgstr "" +msgstr "Sistema de control de versions" #: editor/plugins/version_control_editor_plugin.cpp #, fuzzy @@ -8590,7 +8645,7 @@ msgstr "Converteix a Majúscules" #: editor/plugins/version_control_editor_plugin.cpp msgid "Staging area" -msgstr "" +msgstr "Zona de posada en escena" #: editor/plugins/version_control_editor_plugin.cpp #, fuzzy @@ -8604,7 +8659,7 @@ msgstr "Modifica" #: editor/plugins/version_control_editor_plugin.cpp msgid "Modified" -msgstr "" +msgstr "Modificat" #: editor/plugins/version_control_editor_plugin.cpp #, fuzzy @@ -8632,8 +8687,9 @@ msgid "Stage All" msgstr "Desa-ho Tot" #: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy msgid "Add a commit message" -msgstr "" +msgstr "Afegir un missatge de commit" #: editor/plugins/version_control_editor_plugin.cpp #, fuzzy @@ -8648,6 +8704,8 @@ msgstr "Estat" #: editor/plugins/version_control_editor_plugin.cpp msgid "View file diffs before committing them to the latest version" msgstr "" +"Verifica les diferències entre fitxers abans de publicar-les a la darrera " +"versió" #: editor/plugins/version_control_editor_plugin.cpp #, fuzzy @@ -8656,7 +8714,7 @@ msgstr "Cap fitxer seleccionat!" #: editor/plugins/version_control_editor_plugin.cpp msgid "Detect changes in file diff" -msgstr "" +msgstr "Detecta els canvis en el fitxer" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "(GLES3 only)" @@ -8816,7 +8874,7 @@ msgstr "Reanomena Funció" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Burn operator." -msgstr "" +msgstr "Operador de gravació." #: editor/plugins/visual_shader_editor_plugin.cpp #, fuzzy @@ -8829,7 +8887,7 @@ msgstr "Operador diferencial." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Dodge operator." -msgstr "" +msgstr "Operador Dodge (sobreexposició)." #: editor/plugins/visual_shader_editor_plugin.cpp #, fuzzy @@ -8843,15 +8901,15 @@ msgstr "Operador Aclarir." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Overlay operator." -msgstr "" +msgstr "Operador de superposició." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Screen operator." -msgstr "" +msgstr "Operador Screen (trama)." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "SoftLight operator." -msgstr "" +msgstr "Operador de llum suau." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Color constant." @@ -8951,7 +9009,7 @@ msgstr "Modificar una constant vectorial" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Boolean uniform." -msgstr "" +msgstr "Booleà uniforme." #: editor/plugins/visual_shader_editor_plugin.cpp #, fuzzy @@ -9165,7 +9223,7 @@ msgstr "(Només GLES3) Troba l'enter parell més proper al paràmetre." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Clamps the value between 0.0 and 1.0." -msgstr "" +msgstr "Restringeix el valor entre 0.0 i 1.0." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Extracts the sign of the parameter." @@ -9192,6 +9250,11 @@ msgid "" "'edge1'. Otherwise the return value is interpolated between 0.0 and 1.0 " "using Hermite polynomials." msgstr "" +"SmoothStep function( scalar(edge0), scalar(edge1), scalar(x) ).\n" +"\n" +"Retorna 0,0 si \"x\" és menor que \"edge0\" i 1,0 si x és més gran que " +"\"edge1\". En cas contrari, el valor retornat s’interpola entre 0,0 i 1,0 " +"amb polinomis Hermite." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" @@ -9199,6 +9262,9 @@ msgid "" "\n" "Returns 0.0 if 'x' is smaller than 'edge' and otherwise 1.0." msgstr "" +"Step function( scalar(edge), scalar(x) ).\n" +"\n" +"Retorna 0.0 si 'x' és menor que 'edge' o 1.0 en cas contrari." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the tangent of the parameter." @@ -9284,6 +9350,11 @@ msgid "" "whose number of rows is the number of components in 'c' and whose number of " "columns is the number of components in 'r'." msgstr "" +"Calcula el producte exterior d'un parell de vector. \n" +"\n" +"OuterProduct tracta el primer paràmetre 'c' com un vector de columna (m x 1) " +"i el segon paràmetre 'r' com a vector de fila (1 x n) i en fa una " +"multiplicació de matrius 'c * r', produint una matriu de mida ( m x n )." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Composes transform from four vectors." @@ -9416,6 +9487,11 @@ msgid "" "'edge1'. Otherwise the return value is interpolated between 0.0 and 1.0 " "using Hermite polynomials." msgstr "" +"SmoothStep function( vector(edge0), vector(edge1), vector(x) ).\n" +"\n" +"Retorna 0,0 si 'x' és menor que'edge0 'i 1,0 si 'x' és més gran que'edge1 '. " +"Altrament s'interpola el valor entre 0,0 i 1,0 utilitzant polinomis " +"d'Hermite." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" @@ -9425,6 +9501,11 @@ msgid "" "'edge1'. Otherwise the return value is interpolated between 0.0 and 1.0 " "using Hermite polynomials." msgstr "" +"SmoothStep function( scalar(edge0), scalar(edge1), vector(x) ).\n" +"\n" +"Retorna 0,0 si 'x' és menor que'edge0 'i 1,0 si 'x' és més gran que'edge1 '. " +"Altrament s'interpola el valor entre 0,0 i 1,0 utilitzant polinomis " +"d'Hermite." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" @@ -9432,6 +9513,9 @@ msgid "" "\n" "Returns 0.0 if 'x' is smaller than 'edge' and otherwise 1.0." msgstr "" +"SmoothStep function(vector(edge), vector(x)).\n" +"\n" +"Retorna 0,0 si 'x' és menor que'edge0 ' o 1.0 en cas contrari." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" @@ -9759,11 +9843,20 @@ msgid "Export With Debug" msgstr "Exporta en mode Depuració" #: editor/project_manager.cpp -msgid "The path does not exist." +#, fuzzy +msgid "The path specified doesn't exist." msgstr "El camí no existeix." #: editor/project_manager.cpp -msgid "Invalid '.zip' project file, does not contain a 'project.godot' file." +#, fuzzy +msgid "Error opening package file (it's not in ZIP format)." +msgstr "" +"S'ha produit un error en obrir el fitxer comprimit, no té el format ZIP." + +#: editor/project_manager.cpp +#, fuzzy +msgid "" +"Invalid \".zip\" project file; it doesn't contain a \"project.godot\" file." msgstr "Fitxer de projecte '.zip' invalid, no conte un fitxer 'project.godot'." #: editor/project_manager.cpp @@ -9771,11 +9864,13 @@ msgid "Please choose an empty folder." msgstr "Selecciona un directori buit." #: editor/project_manager.cpp -msgid "Please choose a 'project.godot' or '.zip' file." +#, fuzzy +msgid "Please choose a \"project.godot\" or \".zip\" file." msgstr "Si us plau seleccioneu un fitxer 'project.godot' o '.zip'." #: editor/project_manager.cpp -msgid "Directory already contains a Godot project." +#, fuzzy +msgid "This directory already contains a Godot project." msgstr "El directori ja conté un projecte de Godot." #: editor/project_manager.cpp @@ -10488,6 +10583,11 @@ msgid "Suffix" msgstr "Sufix" #: editor/rename_dialog.cpp +#, fuzzy +msgid "Use Regular Expressions" +msgstr "Expressions Regulars" + +#: editor/rename_dialog.cpp msgid "Advanced Options" msgstr "Opcions Avançades" @@ -10524,7 +10624,8 @@ msgstr "" "Comparar opcions de comptador." #: editor/rename_dialog.cpp -msgid "Per Level counter" +#, fuzzy +msgid "Per-level Counter" msgstr "Comptador per nivell" #: editor/rename_dialog.cpp @@ -10555,10 +10656,6 @@ msgid "" msgstr "" #: editor/rename_dialog.cpp -msgid "Regular Expressions" -msgstr "Expressions Regulars" - -#: editor/rename_dialog.cpp msgid "Post-Process" msgstr "Post-Processat" @@ -10568,11 +10665,11 @@ msgid "Keep" msgstr "Mantenir" #: editor/rename_dialog.cpp -msgid "CamelCase to under_scored" +msgid "PascalCase to snake_case" msgstr "" #: editor/rename_dialog.cpp -msgid "under_scored to CamelCase" +msgid "snake_case to PascalCase" msgstr "" #: editor/rename_dialog.cpp @@ -10592,6 +10689,16 @@ msgstr "A Majúscules" msgid "Reset" msgstr "Resetejar" +#: editor/rename_dialog.cpp +#, fuzzy +msgid "Regular Expression Error" +msgstr "Expressions Regulars" + +#: editor/rename_dialog.cpp +#, fuzzy +msgid "At character %s" +msgstr "Caràcters vàlids:" + #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "Torna a Parentar el Node" @@ -11076,8 +11183,9 @@ msgid "Invalid inherited parent name or path." msgstr "El nom o camí del pare heretat no és vàlid." #: editor/script_create_dialog.cpp -msgid "Script is valid." -msgstr "El script és vàlid." +#, fuzzy +msgid "Script path/name is valid." +msgstr "L' script és vàlid." #: editor/script_create_dialog.cpp #, fuzzy @@ -11182,6 +11290,11 @@ msgstr "Error de Còpia" #: editor/script_editor_debugger.cpp #, fuzzy +msgid "Video RAM" +msgstr "Memòria de Vídeo" + +#: editor/script_editor_debugger.cpp +#, fuzzy msgid "Skip Breakpoints" msgstr "Crea punts." @@ -11204,7 +11317,7 @@ msgstr "Perfilador" #: editor/script_editor_debugger.cpp #, fuzzy msgid "Network Profiler" -msgstr "Exportar Perfil" +msgstr "Profiler de xarxa" #: editor/script_editor_debugger.cpp msgid "Monitor" @@ -11231,10 +11344,6 @@ msgid "Total:" msgstr "Total:" #: editor/script_editor_debugger.cpp -msgid "Video Mem" -msgstr "Memòria de Vídeo" - -#: editor/script_editor_debugger.cpp msgid "Resource Path" msgstr "Camí de Recursos" @@ -12846,11 +12955,15 @@ msgid "This node has been deprecated. Use AnimationTree instead." msgstr "" #: scene/gui/color_picker.cpp +#, fuzzy msgid "" "Color: #%s\n" "LMB: Set color\n" "RMB: Remove preset" msgstr "" +"Color: #%s\n" +"LMB: Defineix el color\n" +"RMB: Elimina la configuració preestablerta" #: scene/gui/color_picker.cpp #, fuzzy @@ -12976,6 +13089,16 @@ msgstr "" msgid "Constants cannot be modified." msgstr "Les constants no es poden modificar." +#~ msgid "Replaced %d occurrence(s)." +#~ msgstr "%d ocurrència/es reemplaçades." + +#~ msgid "Create Static Convex Body" +#~ msgstr "Crea un Cos Estàtic Convex" + +#, fuzzy +#~ msgid "Failed creating shapes!" +#~ msgstr "Ha fallat la creació de formes!" + #~ msgid "" #~ "There are currently no tutorials for this class, you can [color=$color]" #~ "[url=$url]contribute one[/url][/color] or [color=$color][url=" diff --git a/editor/translations/cs.po b/editor/translations/cs.po index b060c0c234..39bcef5430 100644 --- a/editor/translations/cs.po +++ b/editor/translations/cs.po @@ -9,7 +9,7 @@ # Luděk Novotný <gladosicek@gmail.com>, 2016, 2018. # Martin Novák <maidx@seznam.cz>, 2017, 2019. # zxey <r.hozak@seznam.cz>, 2018. -# Vojtěch Šamla <auzkok@seznam.cz>, 2018, 2019. +# Vojtěch Šamla <auzkok@seznam.cz>, 2018, 2019, 2020. # Peeter Angelo <contact@peeterangelo.com>, 2019. # VojtechBrezina <vojta.brezina@gmail.com>, 2019. # Garrom Orc Shaman <garromorcshaman@gmail.com>, 2019. @@ -17,12 +17,13 @@ # Luboš Nečas <lubosnecas506@seznam.cz>, 2019. # David Kubeš <kubesdavid@email.cz>, 2019. # Emil Jiří Tywoniak <emil.tywoniak@gmail.com>, 2020. +# Filip Vincůrek <vincurek.f@gmail.com>, 2020. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2020-01-03 21:21+0000\n" -"Last-Translator: Emil Jiří Tywoniak <emil.tywoniak@gmail.com>\n" +"PO-Revision-Date: 2020-02-19 08:56+0000\n" +"Last-Translator: Vojtěch Šamla <auzkok@seznam.cz>\n" "Language-Team: Czech <https://hosted.weblate.org/projects/godot-engine/godot/" "cs/>\n" "Language: cs\n" @@ -30,7 +31,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" -"X-Generator: Weblate 3.10\n" +"X-Generator: Weblate 3.11\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -50,7 +51,7 @@ msgstr "Nedostatek bajtů pro dekódování bajtů, nebo neplatný formát." #: core/math/expression.cpp msgid "Invalid input %i (not passed) in expression" -msgstr "Neplatný vstup %i (neprošel) ve výrazu" +msgstr "Neplatný vstup %i (nepředán) ve výrazu" #: core/math/expression.cpp msgid "self can't be used because instance is null (not passed)" @@ -131,11 +132,11 @@ msgstr "Vložit klíč zde" #: editor/animation_bezier_editor.cpp msgid "Duplicate Selected Key(s)" -msgstr "Duplikovat klíč(e)" +msgstr "Duplikovat vybrané klíč(e)" #: editor/animation_bezier_editor.cpp msgid "Delete Selected Key(s)" -msgstr "Smazat klíč(e)" +msgstr "Smazat vybrané klíč(e)" #: editor/animation_bezier_editor.cpp msgid "Add Bezier Point" @@ -290,7 +291,7 @@ msgstr "Přepínací Stopa Povolena" #: editor/animation_track_editor.cpp msgid "Continuous" -msgstr "Spojité" +msgstr "Nepřetržité" #: editor/animation_track_editor.cpp msgid "Discrete" @@ -701,8 +702,9 @@ msgid "Line Number:" msgstr "Číslo řádku:" #: editor/code_editor.cpp -msgid "Replaced %d occurrence(s)." -msgstr "Nahrazeno %d výskytů." +#, fuzzy +msgid "%d replaced." +msgstr "Nahradit..." #: editor/code_editor.cpp editor/editor_help.cpp msgid "%d match." @@ -1055,9 +1057,8 @@ msgid "Error loading:" msgstr "Chyba při načítání:" #: editor/dependency_editor.cpp -#, fuzzy msgid "Load failed due to missing dependencies:" -msgstr "Scénu se nepodařilo načíst kvůli chybějícím závislostem:" +msgstr "Načtení selhalo kvůli chybějícím závislostem:" #: editor/dependency_editor.cpp editor/editor_node.cpp msgid "Open Anyway" @@ -1204,9 +1205,8 @@ msgid "Error opening package file, not in ZIP format." msgstr "Nepodařilo se otevřít balíček, není ve formátu ZIP." #: editor/editor_asset_installer.cpp -#, fuzzy msgid "%s (Already Exists)" -msgstr "Již existující" +msgstr "%s (již existuje)" #: editor/editor_asset_installer.cpp msgid "Uncompressing Assets" @@ -1214,12 +1214,11 @@ msgstr "Dekomprese uživatelského obsahu" #: editor/editor_asset_installer.cpp editor/project_manager.cpp msgid "The following files failed extraction from package:" -msgstr "" +msgstr "Selhala extrakce následujících souborů z balíčku:" #: editor/editor_asset_installer.cpp -#, fuzzy msgid "And %s more files." -msgstr "%d více souborů" +msgstr "A %s dalších souborů." #: editor/editor_asset_installer.cpp editor/project_manager.cpp msgid "Package installed successfully!" @@ -1231,9 +1230,8 @@ msgid "Success!" msgstr "Úspěch!" #: editor/editor_asset_installer.cpp -#, fuzzy msgid "Package Contents:" -msgstr "Obsah:" +msgstr "Obsah balíčku:" #: editor/editor_asset_installer.cpp editor/editor_node.cpp msgid "Install" @@ -1373,9 +1371,8 @@ msgid "Invalid file, not an audio bus layout." msgstr "Neplatný soubor, neni to rozložení Audio Busu." #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Error saving file: %s" -msgstr "Chyba při ukládání souboru!" +msgstr "Chyba při ukládání souboru: %s" #: editor/editor_audio_buses.cpp msgid "Add Bus" @@ -1583,7 +1580,6 @@ msgstr "" "Etc 2' v nastaveních projektu." #: editor/editor_export.cpp -#, fuzzy msgid "" "Target platform requires 'ETC' texture compression for the driver fallback " "to GLES2.\n" @@ -1591,8 +1587,9 @@ msgid "" "Enabled'." msgstr "" "Cílová platforma vyžaduje kompresi textur 'ETC' pro použití GLES2 jako " -"zálohy. Povolte 'Import Etc' v nastaveních projektu, nebo vypněte 'Driver " -"Fallback Enabled'." +"zálohy.\n" +"Povolte 'Import Etc' v nastaveních projektu, nebo vypněte 'Driver Fallback " +"Enabled'." #: editor/editor_export.cpp platform/android/export/export.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp @@ -1661,14 +1658,12 @@ msgid "(Editor Disabled, Properties Disabled)" msgstr "(Editor zakázán, Vlastnosti zakázány)" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "(Properties Disabled)" -msgstr "Pouze vlastnosti" +msgstr "(Vlastnosti deaktivovány)" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "(Editor Disabled)" -msgstr "Vypnuto" +msgstr "(Editor deaktivován)" #: editor/editor_feature_profile.cpp msgid "Class Options:" @@ -1859,7 +1854,7 @@ msgstr "Přepnout režim" #: editor/editor_file_dialog.cpp msgid "Focus Path" -msgstr "" +msgstr "Zvýraznit cestu" #: editor/editor_file_dialog.cpp msgid "Move Favorite Up" @@ -1887,7 +1882,7 @@ msgstr "Obnovit soubory." #: editor/editor_file_dialog.cpp msgid "(Un)favorite current folder." -msgstr "Přidat/odebrat složku z oblíbených" +msgstr "Přidat/odebrat složku z oblíbených." #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp #, fuzzy @@ -1954,9 +1949,8 @@ msgid "Inherited by:" msgstr "Děděná z:" #: editor/editor_help.cpp -#, fuzzy msgid "Description" -msgstr "Popis:" +msgstr "Popis" #: editor/editor_help.cpp msgid "Online Tutorials" @@ -1972,9 +1966,8 @@ msgid "override:" msgstr "Přepsat" #: editor/editor_help.cpp -#, fuzzy msgid "default:" -msgstr "Výchozí" +msgstr "výchozí:" #: editor/editor_help.cpp msgid "Methods" @@ -1997,9 +1990,8 @@ msgid "Property Descriptions" msgstr "Popis vlastnosti" #: editor/editor_help.cpp -#, fuzzy msgid "(value)" -msgstr "Hodnota" +msgstr "(hodnota)" #: editor/editor_help.cpp msgid "" @@ -2031,9 +2023,8 @@ msgid "Case Sensitive" msgstr "Rozlišovat velká a malá písmena" #: editor/editor_help_search.cpp -#, fuzzy msgid "Show Hierarchy" -msgstr "Zobrazit pomocníky" +msgstr "Zobrazit hierarchii" #: editor/editor_help_search.cpp msgid "Display All" @@ -2073,28 +2064,24 @@ msgid "Class" msgstr "Třída" #: editor/editor_help_search.cpp -#, fuzzy msgid "Method" -msgstr "Metody" +msgstr "Metoda" #: editor/editor_help_search.cpp editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Signal" -msgstr "Signály" +msgstr "Signál" #: editor/editor_help_search.cpp editor/plugins/theme_editor_plugin.cpp msgid "Constant" msgstr "Konstantní" #: editor/editor_help_search.cpp -#, fuzzy msgid "Property" -msgstr "Vlastnost:" +msgstr "Vlastnost" #: editor/editor_help_search.cpp -#, fuzzy msgid "Theme Property" -msgstr "Vlastnosti motivu" +msgstr "Vlastnost motivu" #: editor/editor_inspector.cpp editor/project_settings_editor.cpp msgid "Property:" @@ -2142,12 +2129,11 @@ msgstr "Start" #: editor/editor_network_profiler.cpp msgid "%s/s" -msgstr "" +msgstr "%s/s" #: editor/editor_network_profiler.cpp -#, fuzzy msgid "Down" -msgstr "Stáhnout" +msgstr "Dolů" #: editor/editor_network_profiler.cpp msgid "Up" @@ -2159,15 +2145,15 @@ msgstr "Uzel" #: editor/editor_network_profiler.cpp msgid "Incoming RPC" -msgstr "" +msgstr "Příchozí RPC" #: editor/editor_network_profiler.cpp msgid "Incoming RSET" -msgstr "" +msgstr "Příchozí RSET" #: editor/editor_network_profiler.cpp msgid "Outgoing RPC" -msgstr "" +msgstr "Odchozí RPC" #: editor/editor_network_profiler.cpp msgid "Outgoing RSET" @@ -2270,7 +2256,7 @@ msgstr "Nelze přepsat scénu, která je stále otevřená!" #: editor/editor_node.cpp msgid "Can't load MeshLibrary for merging!" -msgstr "" +msgstr "Nelze načíst MeshLibrary ke sloučení!" #: editor/editor_node.cpp msgid "Error saving MeshLibrary!" @@ -2278,7 +2264,7 @@ msgstr "Chyba při ukládání MeshLibrary!" #: editor/editor_node.cpp msgid "Can't load TileSet for merging!" -msgstr "" +msgstr "Nelze načíst TileSet ke sloučení!" #: editor/editor_node.cpp msgid "Error saving TileSet!" @@ -2392,9 +2378,8 @@ msgid "Save changes to '%s' before closing?" msgstr "Uložit změny '%s' před zavřením?" #: editor/editor_node.cpp -#, fuzzy msgid "Saved %s modified resource(s)." -msgstr "Selhalo nahrání zdroje." +msgstr "Uloženo %s upravených zdrojů." #: editor/editor_node.cpp msgid "A root node is required to save the scene." @@ -2497,9 +2482,8 @@ msgid "Close Scene" msgstr "Zavřít scénu" #: editor/editor_node.cpp -#, fuzzy msgid "Reopen Closed Scene" -msgstr "Zavřít scénu" +msgstr "Znovuotevřít uzavřenou scénu" #: editor/editor_node.cpp msgid "Unable to enable addon plugin at: '%s' parsing of config failed." @@ -2610,9 +2594,8 @@ msgid "Close Tab" msgstr "Zavřít záložku" #: editor/editor_node.cpp -#, fuzzy msgid "Undo Close Tab" -msgstr "Zavřít záložku" +msgstr "Obnovit zavřenou záložku" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp msgid "Close Other Tabs" @@ -2620,12 +2603,11 @@ msgstr "Zavřít ostatní záložky" #: editor/editor_node.cpp msgid "Close Tabs to the Right" -msgstr "" +msgstr "Zavřít záložky napravo" #: editor/editor_node.cpp -#, fuzzy msgid "Close All Tabs" -msgstr "Zavřít vše" +msgstr "Zavřít všechny záložky" #: editor/editor_node.cpp msgid "Switch Scene Tab" @@ -2668,9 +2650,8 @@ msgid "Go to previously opened scene." msgstr "Přejít na předchozí scénu." #: editor/editor_node.cpp -#, fuzzy msgid "Copy Text" -msgstr "Kopírovat cestu" +msgstr "Kopírovat text" #: editor/editor_node.cpp msgid "Next tab" @@ -2748,9 +2729,8 @@ msgid "Project" msgstr "Projekt" #: editor/editor_node.cpp -#, fuzzy msgid "Project Settings..." -msgstr "Nastavení projektu" +msgstr "Nastavení projektu..." #: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp #, fuzzy @@ -2766,9 +2746,8 @@ msgid "Shut Down Version Control" msgstr "" #: editor/editor_node.cpp -#, fuzzy msgid "Export..." -msgstr "Exportovat" +msgstr "Exportovat..." #: editor/editor_node.cpp msgid "Install Android Build Template..." @@ -2783,9 +2762,8 @@ msgid "Tools" msgstr "Nástroje" #: editor/editor_node.cpp -#, fuzzy msgid "Orphan Resource Explorer..." -msgstr "Průzkumník osiřelých zdrojů" +msgstr "Průzkumník osiřelých zdrojů..." #: editor/editor_node.cpp msgid "Quit to Project List" @@ -2887,9 +2865,8 @@ msgid "Editor" msgstr "Editor" #: editor/editor_node.cpp -#, fuzzy msgid "Editor Settings..." -msgstr "Nastavení editoru" +msgstr "Nastavení editoru..." #: editor/editor_node.cpp msgid "Editor Layout" @@ -2932,9 +2909,8 @@ msgid "Manage Editor Features..." msgstr "Spravovat exportní šablony" #: editor/editor_node.cpp -#, fuzzy msgid "Manage Export Templates..." -msgstr "Spravovat exportní šablony" +msgstr "Spravovat exportní šablony..." #: editor/editor_node.cpp editor/plugins/shader_editor_plugin.cpp msgid "Help" @@ -3059,9 +3035,8 @@ msgid "Android build template is missing, please install relevant templates." msgstr "" #: editor/editor_node.cpp -#, fuzzy msgid "Manage Templates" -msgstr "Spravovat exportní šablony" +msgstr "Spravovat šablony" #: editor/editor_node.cpp msgid "" @@ -3087,9 +3062,8 @@ msgid "Import Templates From ZIP File" msgstr "Importovat šablony ze ZIP souboru" #: editor/editor_node.cpp -#, fuzzy msgid "Template Package" -msgstr "Správce exportních šablon" +msgstr "Balíček šablon" #: editor/editor_node.cpp msgid "Export Library" @@ -3140,9 +3114,8 @@ msgid "Open the previous Editor" msgstr "Otevřít předchozí editor" #: editor/editor_node.h -#, fuzzy msgid "Warning!" -msgstr "Varování" +msgstr "Varování!" #: editor/editor_path.cpp #, fuzzy @@ -3158,9 +3131,8 @@ msgid "Thumbnail..." msgstr "Náhled..." #: editor/editor_plugin_settings.cpp -#, fuzzy msgid "Main Script:" -msgstr "Otevřít skript" +msgstr "Hlavní skript:" #: editor/editor_plugin_settings.cpp msgid "Edit Plugin" @@ -3232,9 +3204,8 @@ msgid "Calls" msgstr "Volání" #: editor/editor_properties.cpp -#, fuzzy msgid "Edit Text:" -msgstr "Editovat téma..." +msgstr "Editovat text:" #: editor/editor_properties.cpp editor/script_create_dialog.cpp msgid "On" @@ -4002,6 +3973,11 @@ msgid "Saving..." msgstr "Ukládání..." #: editor/import_dock.cpp +#, fuzzy +msgid "%d Files" +msgstr " Soubory" + +#: editor/import_dock.cpp msgid "Set as Default for '%s'" msgstr "Nastavit jako výchozí pro '%s'" @@ -4010,10 +3986,6 @@ msgid "Clear Default for '%s'" msgstr "Vyčistit výchozí pro '%s'" #: editor/import_dock.cpp -msgid " Files" -msgstr " Soubory" - -#: editor/import_dock.cpp msgid "Import As:" msgstr "Importovat jako:" @@ -4300,9 +4272,8 @@ msgid "Open Animation Node" msgstr "Otevřít uzel animace" #: editor/plugins/animation_blend_space_2d_editor.cpp -#, fuzzy msgid "Triangle already exists." -msgstr "Trojúhelník již existuje" +msgstr "Trojúhelník již existuje." #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Add Triangle" @@ -4431,9 +4402,8 @@ msgid "" msgstr "" #: editor/plugins/animation_blend_tree_editor_plugin.cpp -#, fuzzy msgid "Anim Clips" -msgstr "Animační klipy:" +msgstr "Animační klipy" #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "Audio Clips" @@ -4675,9 +4645,8 @@ msgid "Move Node" msgstr "Přesunout uzel" #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Transition exists!" -msgstr "Přechod: " +msgstr "Přechod existuje!" #: editor/plugins/animation_state_machine_editor.cpp msgid "Add Transition" @@ -5169,7 +5138,6 @@ msgid "Scale Step:" msgstr "Zvětšení:" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move Vertical Guide" msgstr "Přesunout svislé vodítko" @@ -5254,9 +5222,8 @@ msgid "Bottom Left" msgstr "Vlevo dole" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Center Left" -msgstr "Odsadit zleva" +msgstr "Vlevo uprostřed" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Top" @@ -5307,9 +5274,8 @@ msgid "Full Rect" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Keep Ratio" -msgstr "Poměr zvětšení:" +msgstr "Ponechat poměr" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Anchors only" @@ -5339,15 +5305,13 @@ msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Lock Selected" -msgstr "Nástroj Výběr" +msgstr "Uzamčít vybraný" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Unlock Selected" -msgstr "Smazat vybraný" +msgstr "Odemčít vybraný" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -5366,9 +5330,8 @@ msgid "Paste Pose" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Clear Guides" -msgstr "Vymazat pózu" +msgstr "Vymazat vodítka" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy @@ -5376,9 +5339,8 @@ msgid "Create Custom Bone(s) from Node(s)" msgstr "Vytvořit ze scény" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Clear Bones" -msgstr "Vymazat pózu" +msgstr "Vymazat kosti" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Make IK Chain" @@ -5453,9 +5415,8 @@ msgid "Pan Mode" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Ruler Mode" -msgstr "Režim škálování" +msgstr "Režim pravítka" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy @@ -5463,9 +5424,8 @@ msgid "Toggle smart snapping." msgstr "Přepnout přichycování." #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Use Smart Snap" -msgstr "Použít přichycování" +msgstr "Použít chytré přichycování" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy @@ -5839,12 +5799,10 @@ msgid "Load Curve Preset" msgstr "" #: editor/plugins/curve_editor_plugin.cpp -#, fuzzy msgid "Add Point" msgstr "Přidat bod" #: editor/plugins/curve_editor_plugin.cpp -#, fuzzy msgid "Remove Point" msgstr "Odstranit bod" @@ -5909,11 +5867,12 @@ msgid "Mesh is empty!" msgstr "Mesh je prázdný!" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Trimesh Body" -msgstr "" +#, fuzzy +msgid "Couldn't create a Trimesh collision shape." +msgstr "Nelze vytvořit složku." #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Convex Body" +msgid "Create Static Trimesh Body" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -5926,12 +5885,30 @@ msgid "Create Trimesh Static Shape" msgstr "Vytvořit Trimesh Shape" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Failed creating shapes!" +msgid "Can't create a single convex collision shape for the scene root." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Couldn't create a single convex collision shape." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Create Single Convex Shape" +msgstr "Vytvořit Convex Shape" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Can't create multiple convex collision shapes for the scene root." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp #, fuzzy -msgid "Create Convex Shape(s)" +msgid "Couldn't create any collision shapes." +msgstr "Nelze vytvořit složku." + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Create Multiple Convex Shapes" msgstr "Vytvořit Convex Shape" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -5983,19 +5960,57 @@ msgid "Create Trimesh Static Body" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a StaticBody and assigns a polygon-based collision shape to it " +"automatically.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Collision Sibling" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a polygon-based collision shape.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp #, fuzzy -msgid "Create Convex Collision Sibling(s)" +msgid "Create Single Convex Collision Siblings" msgstr "Vytvořit navigační polygon" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a single convex collision shape.\n" +"This is the fastest (but least accurate) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Create Multiple Convex Collision Siblings" +msgstr "Vytvořit navigační polygon" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a polygon-based collision shape.\n" +"This is a performance middle-ground between the two above options." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Outline Mesh..." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a static outline mesh. The outline mesh will have its normals " +"flipped automatically.\n" +"This can be used instead of the SpatialMaterial Grow property when using " +"that property isn't possible." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "View UV1" msgstr "Zobrazit UV1" @@ -6637,9 +6652,8 @@ msgid "Error writing TextFile:" msgstr "Chyba při zápisu textového souboru:" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Could not load file at:" -msgstr "Chyba: nelze načíst soubor." +msgstr "Nelze načíst soubor:" #: editor/plugins/script_editor_plugin.cpp msgid "Error saving file!" @@ -6662,7 +6676,6 @@ msgid "Error Importing" msgstr "Chyba importu" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "New Text File..." msgstr "Nový textový soubor..." @@ -6708,9 +6721,8 @@ msgid "Save Theme As..." msgstr "Uložit motiv jako..." #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "%s Class Reference" -msgstr " Reference třídy" +msgstr "Reference třídy %s" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -6723,18 +6735,16 @@ msgid "Find Previous" msgstr "Najít předchozí" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Filter scripts" -msgstr "Filtrovat vlastnosti" +msgstr "Filtrovat skripty" #: editor/plugins/script_editor_plugin.cpp msgid "Toggle alphabetical sorting of the method list." msgstr "Přepnout abecední řazení seznamu metod." #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Filter methods" -msgstr "Režim filtru:" +msgstr "Filtrovat metody" #: editor/plugins/script_editor_plugin.cpp msgid "Sort" @@ -6769,9 +6779,8 @@ msgid "Open..." msgstr "Otevřít..." #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Reopen Closed Script" -msgstr "Otevřít skript" +msgstr "Znovu otevřít zavřený skript" #: editor/plugins/script_editor_plugin.cpp msgid "Save All" @@ -6786,7 +6795,6 @@ msgid "Copy Script Path" msgstr "Zkopírovat cestu ke skriptu" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "History Previous" msgstr "Historie předchozí" @@ -6824,9 +6832,8 @@ msgid "Run" msgstr "Spustit" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp -#, fuzzy msgid "Step Into" -msgstr "Vstoupit" +msgstr "Vstoupit do" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Step Over" @@ -6850,9 +6857,8 @@ msgid "Debug with External Editor" msgstr "Debugovat v externím editoru" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Open Godot online documentation." -msgstr "Otevřít Godot online dokumentaci" +msgstr "Otevřít online dokumentaci Godotu." #: editor/plugins/script_editor_plugin.cpp msgid "Request Docs" @@ -6905,9 +6911,8 @@ msgid "Search Results" msgstr "Výsledky hledání" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Clear Recent Scripts" -msgstr "Vymazat nedávné scény" +msgstr "Vymazat nedávné skripty" #: editor/plugins/script_text_editor.cpp #, fuzzy @@ -6915,9 +6920,8 @@ msgid "Connections to method:" msgstr "Připojit k uzlu:" #: editor/plugins/script_text_editor.cpp editor/script_editor_debugger.cpp -#, fuzzy msgid "Source" -msgstr "Zdroj:" +msgstr "Zdroj" #: editor/plugins/script_text_editor.cpp msgid "Target" @@ -7759,9 +7763,8 @@ msgid "(empty)" msgstr "(prázdný)" #: editor/plugins/sprite_frames_editor_plugin.cpp -#, fuzzy msgid "Move Frame" -msgstr "Vložit snímek" +msgstr "Posunout snímek" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Animations:" @@ -7780,9 +7783,8 @@ msgid "Loop" msgstr "Smyčka" #: editor/plugins/sprite_frames_editor_plugin.cpp -#, fuzzy msgid "Animation Frames:" -msgstr "Snímky animace" +msgstr "Snímky animace:" #: editor/plugins/sprite_frames_editor_plugin.cpp #, fuzzy @@ -7810,9 +7812,8 @@ msgid "Move (After)" msgstr "Přemístit (za)" #: editor/plugins/sprite_frames_editor_plugin.cpp -#, fuzzy msgid "Select Frames" -msgstr "Vybrat uzel" +msgstr "Vybrat snímky" #: editor/plugins/sprite_frames_editor_plugin.cpp #, fuzzy @@ -7901,9 +7902,8 @@ msgid "Remove All" msgstr "Odebrat vše" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Edit Theme" -msgstr "Editovat téma..." +msgstr "Editovat téma" #: editor/plugins/theme_editor_plugin.cpp msgid "Theme editing menu." @@ -8043,9 +8043,8 @@ msgid "Color" msgstr "Barva" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Theme File" -msgstr "Téma" +msgstr "Soubor tématu" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Erase Selection" @@ -8122,22 +8121,18 @@ msgid "Pick Tile" msgstr "Vybrat dlaždici" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Rotate Left" msgstr "Otočit doleva" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Rotate Right" msgstr "Otočit doprava" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Flip Horizontally" msgstr "Převrátit horizontálně" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Flip Vertically" msgstr "Převrátit vertikálně" @@ -8152,9 +8147,8 @@ msgid "Add Texture(s) to TileSet." msgstr "Přidat uzel(y) ze stromu" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Remove selected Texture from TileSet." -msgstr "Odstranit aktuální texturu z TileSetu" +msgstr "Odstranit vybranou texturu z TileSetu." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Create from Scene" @@ -8496,7 +8490,7 @@ msgstr "TileSet" msgid "No VCS addons are available." msgstr "Jméno rodiče uzlu, pokud dostupné" -#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Error" msgstr "Chyba" @@ -8598,17 +8592,15 @@ msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "(GLES3 only)" -msgstr "" +msgstr "(Pouze GLES3)" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Add Output" -msgstr "Přidat vstup" +msgstr "Přidat výstup" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Scalar" -msgstr "Zvětšení:" +msgstr "Skalár" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Vector" @@ -8616,7 +8608,7 @@ msgstr "Vektor" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Boolean" -msgstr "" +msgstr "Boolean" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Sampler" @@ -8910,14 +8902,12 @@ msgid "'%s' input parameter for vertex and fragment shader mode." msgstr "'%s' vstupní parametr pro mód vertexového a fragmentového shaderu." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Scalar function." -msgstr "Změnit skalární funkci" +msgstr "Skalární funkce." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Scalar operator." -msgstr "Změnit skalární operátor" +msgstr "Skalární operátor." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "E constant (2.718282). Represents the base of the natural logarithm." @@ -8960,18 +8950,16 @@ msgid "Returns the arc-cosine of the parameter." msgstr "Vrátí arkus kosinus parametru." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Returns the inverse hyperbolic cosine of the parameter." -msgstr "(Pouze GLES3) Vrátí inverzní hyperbolický kosinus parametru." +msgstr "Vrátí inverzní hyperbolický kosinus parametru." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the arc-sine of the parameter." msgstr "Vrátí arkus sinus parametru." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Returns the inverse hyperbolic sine of the parameter." -msgstr "(Pouze GLES3) Vrátí inverzní hyperbolický sinus parametru." +msgstr "Vrátí inverzní hyperbolický sinus parametru." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the arc-tangent of the parameter." @@ -8982,9 +8970,8 @@ msgid "Returns the arc-tangent of the parameters." msgstr "Vrátí arkus tangent parametrů." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Returns the inverse hyperbolic tangent of the parameter." -msgstr "(Pouze GLES3) Vrátí inverzní hyperbolický tangent parametru." +msgstr "Vrátí inverzní hyperbolický tangent parametru." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" @@ -9001,9 +8988,8 @@ msgid "Returns the cosine of the parameter." msgstr "Vrátí kosinus parametru." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Returns the hyperbolic cosine of the parameter." -msgstr "(Pouze GLES3) Vrátí hyperbolický kosinus parametru." +msgstr "Vrátí hyperbolický kosinus parametru." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Converts a quantity in radians to degrees." @@ -9023,7 +9009,7 @@ msgstr "Nalezne nejbližší celé číslo menší nebo stejné jako parametr." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Computes the fractional part of the argument." -msgstr "" +msgstr "Vypočítá desetinnou část argumentu." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the inverse of the square root of the parameter." @@ -9071,14 +9057,12 @@ msgid "1.0 / scalar" msgstr "1.0 / skalár" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Finds the nearest integer to the parameter." -msgstr "(Pouze GLES3) Nalezne nejbližší celé číslo k parametru." +msgstr "Nalezne nejbližší celé číslo k parametru." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Finds the nearest even integer to the parameter." -msgstr "(Pouze GLES3) Nalezne nejbližší sudé celé číslo k parametru." +msgstr "Nalezne nejbližší sudé celé číslo k parametru." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Clamps the value between 0.0 and 1.0." @@ -9093,9 +9077,8 @@ msgid "Returns the sine of the parameter." msgstr "Vrátí sinus parametru." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Returns the hyperbolic sine of the parameter." -msgstr "(Pouze GLES3) Vrátí hyperbolický sinus parametru." +msgstr "Vrátí hyperbolický sinus parametru." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the square root of the parameter." @@ -9122,9 +9105,8 @@ msgid "Returns the tangent of the parameter." msgstr "Vrátí tangens parametru." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Returns the hyperbolic tangent of the parameter." -msgstr "(Pouze GLES3) Vrátí hyperbolický tangens parametru." +msgstr "Vrátí hyperbolický tangens parametru." #: editor/plugins/visual_shader_editor_plugin.cpp #, fuzzy @@ -9596,7 +9578,7 @@ msgstr "Zkompilovaný" #: editor/project_export.cpp msgid "Encrypted (Provide Key Below)" -msgstr "" +msgstr "Šifrovaný (Poskytněte klíč níže)" #: editor/project_export.cpp msgid "Invalid Encryption Key (must be 64 characters long)" @@ -9604,7 +9586,7 @@ msgstr "Neplatný šifrovací klíč (musí být dlouhý 64 znaků)" #: editor/project_export.cpp msgid "Script Encryption Key (256-bits as hex):" -msgstr "" +msgstr "Šifrovací klíč skriptu (256 bitový hexadecimální):" #: editor/project_export.cpp msgid "Export PCK/Zip" @@ -9623,9 +9605,8 @@ msgid "Export All" msgstr "Exportovat vše" #: editor/project_export.cpp editor/project_manager.cpp -#, fuzzy msgid "ZIP File" -msgstr " Soubory" +msgstr "Soubor ZIP" #: editor/project_export.cpp msgid "Godot Game Pack" @@ -9644,11 +9625,19 @@ msgid "Export With Debug" msgstr "" #: editor/project_manager.cpp -msgid "The path does not exist." +#, fuzzy +msgid "The path specified doesn't exist." msgstr "Cesta neexistuje." #: editor/project_manager.cpp -msgid "Invalid '.zip' project file, does not contain a 'project.godot' file." +#, fuzzy +msgid "Error opening package file (it's not in ZIP format)." +msgstr "Nepodařilo se otevřít balíček, není ve formátu ZIP." + +#: editor/project_manager.cpp +#, fuzzy +msgid "" +"Invalid \".zip\" project file; it doesn't contain a \"project.godot\" file." msgstr "Neplatný projektový '.zip' soubor; neobsahuje soubor 'project.godot'." #: editor/project_manager.cpp @@ -9656,20 +9645,22 @@ msgid "Please choose an empty folder." msgstr "Zvolte prosím prázdnou složku." #: editor/project_manager.cpp -msgid "Please choose a 'project.godot' or '.zip' file." +#, fuzzy +msgid "Please choose a \"project.godot\" or \".zip\" file." msgstr "Zvolte prosím soubor 'project.godot' nebo '.zip'." #: editor/project_manager.cpp -msgid "Directory already contains a Godot project." -msgstr "" +#, fuzzy +msgid "This directory already contains a Godot project." +msgstr "Složka již obsahuje projekt Godotu." #: editor/project_manager.cpp msgid "New Game Project" -msgstr "" +msgstr "Nový projekt hry" #: editor/project_manager.cpp msgid "Imported Project" -msgstr "" +msgstr "Importovaný projekt" #: editor/project_manager.cpp msgid "Invalid Project Name." @@ -9681,29 +9672,31 @@ msgstr "Nelze vytvořit složku." #: editor/project_manager.cpp msgid "There is already a folder in this path with the specified name." -msgstr "" +msgstr "V tomto umístění již existuje složka s daným názvem." #: editor/project_manager.cpp msgid "It would be a good idea to name your project." -msgstr "" +msgstr "Bylo by dobré pojmenovat váš projekt." #: editor/project_manager.cpp msgid "Invalid project path (changed anything?)." -msgstr "" +msgstr "Neplatná cesta k projektu (něco se změnilo?)." #: editor/project_manager.cpp msgid "" "Couldn't load project.godot in project path (error %d). It may be missing or " "corrupted." msgstr "" +"Nelze načíst project.godot v umístění projektu (chyba %d). Může chybět nebo " +"být poškozený." #: editor/project_manager.cpp msgid "Couldn't edit project.godot in project path." -msgstr "" +msgstr "Nelze upravit project.godot v umístění projektu." #: editor/project_manager.cpp msgid "Couldn't create project.godot in project path." -msgstr "" +msgstr "Nelze vytvořit project.godot v umístění projektu." #: editor/project_manager.cpp msgid "Rename Project" @@ -9711,7 +9704,7 @@ msgstr "Přejmenovat projekt" #: editor/project_manager.cpp msgid "Import Existing Project" -msgstr "" +msgstr "Importovat existující projekt" #: editor/project_manager.cpp msgid "Import & Edit" @@ -9742,17 +9735,16 @@ msgid "Project Path:" msgstr "Cesta k projektu:" #: editor/project_manager.cpp -#, fuzzy msgid "Project Installation Path:" -msgstr "Cesta k projektu:" +msgstr "Instalační cesta k projektu:" #: editor/project_manager.cpp msgid "Renderer:" -msgstr "" +msgstr "Renderer:" #: editor/project_manager.cpp msgid "OpenGL ES 3.0" -msgstr "" +msgstr "OpenGL ES 3.0" #: editor/project_manager.cpp msgid "" @@ -9761,10 +9753,14 @@ msgid "" "Incompatible with older hardware\n" "Not recommended for web games" msgstr "" +"Vyšší vizuální kvalita\n" +"Všechny funkce dostupné\n" +"Nekompatibilní se starším hardwarem\n" +"Nedoporučené pro webové hry" #: editor/project_manager.cpp msgid "OpenGL ES 2.0" -msgstr "" +msgstr "OpenGL ES 2.0" #: editor/project_manager.cpp msgid "" @@ -9773,23 +9769,26 @@ msgid "" "Works on most hardware\n" "Recommended for web games" msgstr "" +"Nižší vizuální kvalita\n" +"Některé funkce nejsou dostupné\n" +"Funguje na většině hardwaru\n" +"Doporučené pro webové hry" #: editor/project_manager.cpp msgid "Renderer can be changed later, but scenes may need to be adjusted." -msgstr "" +msgstr "Renderer je možné změnit později, ale scény mohou vyžadovat úpravy." #: editor/project_manager.cpp msgid "Unnamed Project" msgstr "Nepojmenovaný projekt" #: editor/project_manager.cpp -#, fuzzy msgid "Missing Project" -msgstr "Sestavit projekt" +msgstr "Chybějící projekt" #: editor/project_manager.cpp msgid "Error: Project is missing on the filesystem." -msgstr "" +msgstr "Chyba: Projek se nevyskytuje v souborovém systému." #: editor/project_manager.cpp msgid "Can't open project at '%s'." @@ -9811,6 +9810,14 @@ msgid "" "Warning: You won't be able to open the project with previous versions of the " "engine anymore." msgstr "" +"Konfigurační soubor projektu nespecifikuje verzi Godotu ve které byl " +"vytvořen.\n" +"\n" +"%s\n" +"\n" +"Pokud se rozhodnete ho otevřít, tak bude převeden do aktuálního formátu " +"konfiguračního souboru Godotu.\n" +"Varování: Nebude možné otevřít projekt v dřívějších verzích enginu." #: editor/project_manager.cpp msgid "" @@ -9823,12 +9830,21 @@ msgid "" "Warning: You won't be able to open the project with previous versions of the " "engine anymore." msgstr "" +"Následující konfigurační soubor projektu byl vytvořen starší verzí enginu a " +"potřebuje být konvertován pro aktuální verzi:\n" +"\n" +"%s\n" +"\n" +"Přejete si ho konvertovat?\n" +"Varování: Nebude možné otevřít projekt v dřívějších verzích enginu." #: editor/project_manager.cpp msgid "" "The project settings were created by a newer engine version, whose settings " "are not compatible with this version." msgstr "" +"Konfigurační soubor projektu byl vytvořen novější verzí enginu, jehož " +"konfigurace není kompatibilní s touto verzí." #: editor/project_manager.cpp msgid "" @@ -9836,6 +9852,9 @@ msgid "" "Please edit the project and set the main scene in the Project Settings under " "the \"Application\" category." msgstr "" +"Nelze spustit projekt: není definovaná hlavní scéna,\n" +"Upravte prosím projekt a nastavte hlavní scénu v nastaveních projektu v " +"kategorii \"Application\"." #: editor/project_manager.cpp msgid "" @@ -10333,6 +10352,11 @@ msgstr "Sufix" #: editor/rename_dialog.cpp #, fuzzy +msgid "Use Regular Expressions" +msgstr "Regulární výrazy" + +#: editor/rename_dialog.cpp +#, fuzzy msgid "Advanced Options" msgstr "Pokročilé možnosti" @@ -10367,7 +10391,7 @@ msgid "" msgstr "" #: editor/rename_dialog.cpp -msgid "Per Level counter" +msgid "Per-level Counter" msgstr "" #: editor/rename_dialog.cpp @@ -10399,10 +10423,6 @@ msgstr "" "Chybějící číslice budou nahrazeny nulami." #: editor/rename_dialog.cpp -msgid "Regular Expressions" -msgstr "Regulární výrazy" - -#: editor/rename_dialog.cpp msgid "Post-Process" msgstr "" @@ -10411,12 +10431,14 @@ msgid "Keep" msgstr "" #: editor/rename_dialog.cpp -msgid "CamelCase to under_scored" -msgstr "" +#, fuzzy +msgid "PascalCase to snake_case" +msgstr "CamelCase na under_scored" #: editor/rename_dialog.cpp -msgid "under_scored to CamelCase" -msgstr "" +#, fuzzy +msgid "snake_case to PascalCase" +msgstr "under_scored na CamelCase" #: editor/rename_dialog.cpp msgid "Case" @@ -10434,6 +10456,16 @@ msgstr "Na velká písmena" msgid "Reset" msgstr "Resetovat" +#: editor/rename_dialog.cpp +#, fuzzy +msgid "Regular Expression Error" +msgstr "Regulární výrazy" + +#: editor/rename_dialog.cpp +#, fuzzy +msgid "At character %s" +msgstr "Platné znaky:" + #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "" @@ -10658,7 +10690,6 @@ msgid "Load As Placeholder" msgstr "" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Open Documentation" msgstr "Otevřít dokumentaci" @@ -10702,9 +10733,8 @@ msgid "Delete (No Confirm)" msgstr "Odstranit (bez potvrzení)" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Add/Create a New Node." -msgstr "Přidat/Vytvořit nový uzel" +msgstr "Přidat/Vytvořit nový uzel." #: editor/scene_tree_dock.cpp msgid "" @@ -10738,9 +10768,8 @@ msgid "Toggle Visible" msgstr "Přepnout viditelnost" #: editor/scene_tree_editor.cpp -#, fuzzy msgid "Unlock Node" -msgstr "Vybrat uzel" +msgstr "Odemknout uzel" #: editor/scene_tree_editor.cpp #, fuzzy @@ -10775,9 +10804,8 @@ msgid "" msgstr "" #: editor/scene_tree_editor.cpp -#, fuzzy msgid "Open Script:" -msgstr "Otevřít skript" +msgstr "Otevřít skript:" #: editor/scene_tree_editor.cpp msgid "" @@ -10803,7 +10831,7 @@ msgstr "" #: editor/scene_tree_editor.cpp msgid "Invalid node name, the following characters are not allowed:" -msgstr "" +msgstr "Neplatný název uzlu, následující znaky nejsou povoleny:" #: editor/scene_tree_editor.cpp msgid "Rename Node" @@ -10822,39 +10850,32 @@ msgid "Select a Node" msgstr "Vybrat uzel" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Path is empty." -msgstr "Cesta je prázdná" +msgstr "Cesta je prázdná." #: editor/script_create_dialog.cpp -#, fuzzy msgid "Filename is empty." -msgstr "Název souboru je prázdný" +msgstr "Název souboru je prázdný." #: editor/script_create_dialog.cpp -#, fuzzy msgid "Path is not local." -msgstr "Cesta není místní" +msgstr "Cesta není místní." #: editor/script_create_dialog.cpp -#, fuzzy msgid "Invalid base path." -msgstr "Neplatná základní cesta" +msgstr "Neplatná základní cesta." #: editor/script_create_dialog.cpp -#, fuzzy msgid "A directory with the same name exists." -msgstr "Složka se stejným jménem již existuje" +msgstr "Složka se stejným jménem již existuje." #: editor/script_create_dialog.cpp -#, fuzzy msgid "Invalid extension." -msgstr "Neplatná přípona" +msgstr "Neplatná přípona." #: editor/script_create_dialog.cpp -#, fuzzy msgid "Wrong extension chosen." -msgstr "Vybrána špatná přípona" +msgstr "Vybrána špatná přípona." #: editor/script_create_dialog.cpp msgid "Error loading template '%s'" @@ -10878,23 +10899,20 @@ msgid "N/A" msgstr "N/A" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Open Script / Choose Location" -msgstr "Otevřít editor skriptů" +msgstr "Otevřít skript / Vybrat umístění" #: editor/script_create_dialog.cpp msgid "Open Script" msgstr "Otevřít skript" #: editor/script_create_dialog.cpp -#, fuzzy msgid "File exists, it will be reused." -msgstr "Soubor již existuje, bude znovu použit" +msgstr "Soubor již existuje, bude znovu použit." #: editor/script_create_dialog.cpp -#, fuzzy msgid "Invalid class name." -msgstr "Neplatné jméno třídy" +msgstr "Neplatné jméno třídy." #: editor/script_create_dialog.cpp #, fuzzy @@ -10903,13 +10921,12 @@ msgstr "Neplatné jméno vlastnosti." #: editor/script_create_dialog.cpp #, fuzzy -msgid "Script is valid." -msgstr "Skript je validní" +msgid "Script path/name is valid." +msgstr "Skript je validní." #: editor/script_create_dialog.cpp -#, fuzzy msgid "Allowed: a-z, A-Z, 0-9, _ and ." -msgstr "Povoleno: a-z, A-Z, 0-9 a _" +msgstr "Povoleno: a-z, A-Z, 0-9, _ a ." #: editor/script_create_dialog.cpp #, fuzzy @@ -10917,34 +10934,28 @@ msgid "Built-in script (into scene file)." msgstr "Možností scén." #: editor/script_create_dialog.cpp -#, fuzzy msgid "Will create a new script file." -msgstr "Vytvořit nový soubor skriptu" +msgstr "Vytvoří nový soubor skriptu." #: editor/script_create_dialog.cpp -#, fuzzy msgid "Will load an existing script file." -msgstr "Načíst existující soubor skriptu" +msgstr "Načte existující soubor skriptu." #: editor/script_create_dialog.cpp -#, fuzzy msgid "Script file already exists." -msgstr "Akce '%s' již existuje!" +msgstr "Soubor skriptu již existuje." #: editor/script_create_dialog.cpp -#, fuzzy msgid "Class Name:" -msgstr "Jméno třídy" +msgstr "Jméno třídy:" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Template:" -msgstr "Šablona" +msgstr "Šablona:" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Built-in Script:" -msgstr "Vestavěný skript" +msgstr "Vestavěný skript:" #: editor/script_create_dialog.cpp msgid "Attach Node Script" @@ -10959,7 +10970,6 @@ msgid "Bytes:" msgstr "Bajtů:" #: editor/script_editor_debugger.cpp -#, fuzzy msgid "Warning:" msgstr "Varování:" @@ -10968,29 +10978,24 @@ msgid "Error:" msgstr "Chyba:" #: editor/script_editor_debugger.cpp -#, fuzzy msgid "C++ Error" -msgstr "Kopírovat chybu" +msgstr "Chyba C++" #: editor/script_editor_debugger.cpp -#, fuzzy msgid "C++ Error:" -msgstr "Chyba:" +msgstr "Chyba C++:" #: editor/script_editor_debugger.cpp -#, fuzzy msgid "C++ Source" -msgstr "Zdroj:" +msgstr "Zdroj C++" #: editor/script_editor_debugger.cpp -#, fuzzy msgid "Source:" msgstr "Zdroj:" #: editor/script_editor_debugger.cpp -#, fuzzy msgid "C++ Source:" -msgstr "Zdroj:" +msgstr "Zdroj C++:" #: editor/script_editor_debugger.cpp msgid "Stack Trace" @@ -11011,6 +11016,11 @@ msgstr "Kopírovat chybu" #: editor/script_editor_debugger.cpp #, fuzzy +msgid "Video RAM" +msgstr "Video pamět" + +#: editor/script_editor_debugger.cpp +#, fuzzy msgid "Skip Breakpoints" msgstr "Vytvořit body." @@ -11059,10 +11069,6 @@ msgid "Total:" msgstr "Celkem:" #: editor/script_editor_debugger.cpp -msgid "Video Mem" -msgstr "Video pamět" - -#: editor/script_editor_debugger.cpp msgid "Resource Path" msgstr "Cesta ke zdroji" @@ -11299,7 +11305,7 @@ msgstr "Neplatná instance slovníku (neplatné podtřídy)" #: modules/gdscript/gdscript_functions.cpp msgid "Object can't provide a length." -msgstr "" +msgstr "Objekt nemůže poskytnout délku." #: modules/gridmap/grid_map_editor_plugin.cpp #, fuzzy @@ -11332,19 +11338,16 @@ msgid "GridMap Delete Selection" msgstr "GridMap Smazat výběr" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "GridMap Fill Selection" -msgstr "GridMap Smazat výběr" +msgstr "GridMap Vyplnit výběr" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "GridMap Paste Selection" -msgstr "GridMap Smazat výběr" +msgstr "GridMap Vložit výběr" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "GridMap Paint" -msgstr "Nastavení GridMap" +msgstr "Vykreslit GridMap" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Grid Map" @@ -11417,9 +11420,8 @@ msgid "Clear Selection" msgstr "Vymazat výběr" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Fill Selection" -msgstr "Všechny vybrané" +msgstr "Vyplnit výběr" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "GridMap Settings" @@ -11427,12 +11429,11 @@ msgstr "Nastavení GridMap" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Pick Distance:" -msgstr "" +msgstr "Vybrat vzdálenost:" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Filter meshes" -msgstr "Režim filtru:" +msgstr "Filtrovat meshe" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Give a MeshLibrary resource to this GridMap to use its meshes." @@ -11557,21 +11558,19 @@ msgstr "Změnit název argumentu" #: modules/visual_script/visual_script_editor.cpp msgid "Set Variable Default Value" -msgstr "" +msgstr "Nastavit výchozí hodnotu proměnné" #: modules/visual_script/visual_script_editor.cpp msgid "Set Variable Type" msgstr "Nastavit typ proměnné" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Add Input Port" -msgstr "Přidat vstup" +msgstr "Přidat vstupní port" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Add Output Port" -msgstr "Přidat vstup" +msgstr "Přidat výstupní port" #: modules/visual_script/visual_script_editor.cpp #, fuzzy @@ -11580,27 +11579,24 @@ msgstr "" "Neplatný název. Nesmí kolidovat s existujícím jménem zabudovaného typu." #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Create a new function." -msgstr "Vytvořit nové uzly." +msgstr "Vytvořit novou funkci." #: modules/visual_script/visual_script_editor.cpp msgid "Variables:" msgstr "Proměnné:" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Create a new variable." -msgstr "Vytvořit nové uzly." +msgstr "Vytvořit novou proměnnou." #: modules/visual_script/visual_script_editor.cpp msgid "Signals:" msgstr "Signály:" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Create a new signal." -msgstr "Vytvořit nový polygon." +msgstr "Vytvořit nový signál." #: modules/visual_script/visual_script_editor.cpp msgid "Name is not a valid identifier:" @@ -11627,9 +11623,8 @@ msgid "Add Function" msgstr "Přidat funkci" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Delete input port" -msgstr "Odstranit bod" +msgstr "Smazat vstupní port" #: modules/visual_script/visual_script_editor.cpp msgid "Add Variable" @@ -11640,14 +11635,12 @@ msgid "Add Signal" msgstr "Přidat signál" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Remove Input Port" -msgstr "Odstranit bod" +msgstr "Odstranit vstupní port" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Remove Output Port" -msgstr "Odstranit bod" +msgstr "Odstranit výstupní port" #: modules/visual_script/visual_script_editor.cpp msgid "Change Expression" @@ -11659,7 +11652,7 @@ msgstr "Odstranit uzly VisualScriptu" #: modules/visual_script/visual_script_editor.cpp msgid "Duplicate VisualScript Nodes" -msgstr "" +msgstr "Duplikovat uzly VisualScriptu" #: modules/visual_script/visual_script_editor.cpp msgid "Hold %s to drop a Getter. Hold Shift to drop a generic signature." @@ -11730,9 +11723,8 @@ msgid "Connect Nodes" msgstr "Připojit uzly" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Disconnect Nodes" -msgstr "Odpojit uzly grafu" +msgstr "Odpojit uzly" #: modules/visual_script/visual_script_editor.cpp #, fuzzy @@ -11753,9 +11745,8 @@ msgid "Change Input Value" msgstr "Změnit vstupní hodnotu" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Resize Comment" -msgstr "Změnit velikost CanvasItem" +msgstr "Změnit velikost komentáře" #: modules/visual_script/visual_script_editor.cpp msgid "Can't copy the function node." @@ -12731,6 +12722,9 @@ msgstr "" msgid "Constants cannot be modified." msgstr "Konstanty není možné upravovat." +#~ msgid "Replaced %d occurrence(s)." +#~ msgstr "Nahrazeno %d výskytů." + #~ msgid "" #~ "There are currently no tutorials for this class, you can [color=$color]" #~ "[url=$url]contribute one[/url][/color] or [color=$color][url=" diff --git a/editor/translations/da.po b/editor/translations/da.po index aed35d2dc6..e575e1a015 100644 --- a/editor/translations/da.po +++ b/editor/translations/da.po @@ -15,12 +15,13 @@ # Mads K. Bredager <mbredager@gmail.com>, 2019. # Kristoffer Andersen <kjaa@google.com>, 2019. # Joe Osborne <reachjoe.o@gmail.com>, 2020. +# Autowinto <happymansi@hotmail.com>, 2020. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2020-01-16 22:23+0000\n" -"Last-Translator: Joe Osborne <reachjoe.o@gmail.com>\n" +"PO-Revision-Date: 2020-02-02 08:51+0000\n" +"Last-Translator: Autowinto <happymansi@hotmail.com>\n" "Language-Team: Danish <https://hosted.weblate.org/projects/godot-engine/" "godot/da/>\n" "Language: da\n" @@ -28,7 +29,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 3.10.2-dev\n" +"X-Generator: Weblate 3.11-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -37,7 +38,7 @@ msgstr "Ugyldigt type argument til convert(), brug TYPE_* konstanter." #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp msgid "Expected a string of length 1 (a character)." -msgstr "" +msgstr "Forventede en streng med længden 1 (en karakter)." #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/mono/glue/gd_glue.cpp @@ -134,9 +135,8 @@ msgid "Delete Selected Key(s)" msgstr "Slet valgte nøgle(r)" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Add Bezier Point" -msgstr "Tilføj punkt" +msgstr "Tilføj Bezier-punkt" #: editor/animation_bezier_editor.cpp msgid "Move Bezier Points" @@ -721,8 +721,9 @@ msgid "Line Number:" msgstr "Linjenummer:" #: editor/code_editor.cpp -msgid "Replaced %d occurrence(s)." -msgstr "Erstattede %d forekomst(er)." +#, fuzzy +msgid "%d replaced." +msgstr "Erstat" #: editor/code_editor.cpp editor/editor_help.cpp msgid "%d match." @@ -4102,6 +4103,10 @@ msgid "Saving..." msgstr "Gemmer..." #: editor/import_dock.cpp +msgid "%d Files" +msgstr "%d Filer" + +#: editor/import_dock.cpp msgid "Set as Default for '%s'" msgstr "Sæt som Standard for '%s'" @@ -4110,10 +4115,6 @@ msgid "Clear Default for '%s'" msgstr "Fjern Standard for '%s'" #: editor/import_dock.cpp -msgid " Files" -msgstr " Filer" - -#: editor/import_dock.cpp msgid "Import As:" msgstr "Importer Som:" @@ -6062,11 +6063,12 @@ msgid "Mesh is empty!" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Trimesh Body" -msgstr "" +#, fuzzy +msgid "Couldn't create a Trimesh collision shape." +msgstr "Kunne ikke oprette mappe." #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Convex Body" +msgid "Create Static Trimesh Body" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -6078,12 +6080,30 @@ msgid "Create Trimesh Static Shape" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Failed creating shapes!" +msgid "Can't create a single convex collision shape for the scene root." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Couldn't create a single convex collision shape." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp #, fuzzy -msgid "Create Convex Shape(s)" +msgid "Create Single Convex Shape" +msgstr "Opret Ny %s" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Can't create multiple convex collision shapes for the scene root." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Couldn't create any collision shapes." +msgstr "Kunne ikke oprette mappe." + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Create Multiple Convex Shapes" msgstr "Opret Ny %s" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -6135,19 +6155,57 @@ msgid "Create Trimesh Static Body" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a StaticBody and assigns a polygon-based collision shape to it " +"automatically.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Collision Sibling" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a polygon-based collision shape.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp #, fuzzy -msgid "Create Convex Collision Sibling(s)" +msgid "Create Single Convex Collision Siblings" msgstr "Opret Poly" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a single convex collision shape.\n" +"This is the fastest (but least accurate) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Create Multiple Convex Collision Siblings" +msgstr "Opret Poly" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a polygon-based collision shape.\n" +"This is a performance middle-ground between the two above options." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Outline Mesh..." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a static outline mesh. The outline mesh will have its normals " +"flipped automatically.\n" +"This can be used instead of the SpatialMaterial Grow property when using " +"that property isn't possible." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp #, fuzzy msgid "View UV1" msgstr "Vis FPS" @@ -8660,7 +8718,7 @@ msgstr "TileSet..." msgid "No VCS addons are available." msgstr "" -#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Error" msgstr "" @@ -9793,11 +9851,18 @@ msgid "Export With Debug" msgstr "" #: editor/project_manager.cpp -msgid "The path does not exist." -msgstr "" +#, fuzzy +msgid "The path specified doesn't exist." +msgstr "Fil eksisterer ikke." + +#: editor/project_manager.cpp +#, fuzzy +msgid "Error opening package file (it's not in ZIP format)." +msgstr "Fejl ved åbning af pakke fil, ikke i zip format." #: editor/project_manager.cpp -msgid "Invalid '.zip' project file, does not contain a 'project.godot' file." +msgid "" +"Invalid \".zip\" project file; it doesn't contain a \"project.godot\" file." msgstr "" #: editor/project_manager.cpp @@ -9805,11 +9870,11 @@ msgid "Please choose an empty folder." msgstr "" #: editor/project_manager.cpp -msgid "Please choose a 'project.godot' or '.zip' file." +msgid "Please choose a \"project.godot\" or \".zip\" file." msgstr "" #: editor/project_manager.cpp -msgid "Directory already contains a Godot project." +msgid "This directory already contains a Godot project." msgstr "" #: editor/project_manager.cpp @@ -10480,6 +10545,11 @@ msgid "Suffix" msgstr "" #: editor/rename_dialog.cpp +#, fuzzy +msgid "Use Regular Expressions" +msgstr "Skift udtryk" + +#: editor/rename_dialog.cpp msgid "Advanced Options" msgstr "" @@ -10518,7 +10588,7 @@ msgid "" msgstr "" #: editor/rename_dialog.cpp -msgid "Per Level counter" +msgid "Per-level Counter" msgstr "" #: editor/rename_dialog.cpp @@ -10549,11 +10619,6 @@ msgid "" msgstr "" #: editor/rename_dialog.cpp -#, fuzzy -msgid "Regular Expressions" -msgstr "Skift udtryk" - -#: editor/rename_dialog.cpp msgid "Post-Process" msgstr "" @@ -10562,11 +10627,11 @@ msgid "Keep" msgstr "" #: editor/rename_dialog.cpp -msgid "CamelCase to under_scored" +msgid "PascalCase to snake_case" msgstr "" #: editor/rename_dialog.cpp -msgid "under_scored to CamelCase" +msgid "snake_case to PascalCase" msgstr "" #: editor/rename_dialog.cpp @@ -10587,6 +10652,16 @@ msgstr "" msgid "Reset" msgstr "Nulstil Zoom" +#: editor/rename_dialog.cpp +#, fuzzy +msgid "Regular Expression Error" +msgstr "Skift udtryk" + +#: editor/rename_dialog.cpp +#, fuzzy +msgid "At character %s" +msgstr "Gyldige karakterer:" + #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "" @@ -11058,7 +11133,7 @@ msgid "Invalid inherited parent name or path." msgstr "Ugyldigt inherited parent navn eller sti" #: editor/script_create_dialog.cpp -msgid "Script is valid." +msgid "Script path/name is valid." msgstr "" #: editor/script_create_dialog.cpp @@ -11167,6 +11242,10 @@ msgid "Copy Error" msgstr "Indlæs Fejl" #: editor/script_editor_debugger.cpp +msgid "Video RAM" +msgstr "" + +#: editor/script_editor_debugger.cpp #, fuzzy msgid "Skip Breakpoints" msgstr "Slet points" @@ -11217,10 +11296,6 @@ msgid "Total:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Video Mem" -msgstr "" - -#: editor/script_editor_debugger.cpp msgid "Resource Path" msgstr "" @@ -12868,6 +12943,9 @@ msgstr "" msgid "Constants cannot be modified." msgstr "Konstanter kan ikke ændres." +#~ msgid "Replaced %d occurrence(s)." +#~ msgstr "Erstattede %d forekomst(er)." + #~ msgid "" #~ "There are currently no tutorials for this class, you can [color=$color]" #~ "[url=$url]contribute one[/url][/color] or [color=$color][url=" diff --git a/editor/translations/de.po b/editor/translations/de.po index 1b1ada4825..3e8c61025a 100644 --- a/editor/translations/de.po +++ b/editor/translations/de.po @@ -52,7 +52,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2020-01-20 11:39+0000\n" +"PO-Revision-Date: 2020-02-16 15:20+0000\n" "Last-Translator: So Wieso <sowieso@dukun.de>\n" "Language-Team: German <https://hosted.weblate.org/projects/godot-engine/" "godot/de/>\n" @@ -734,8 +734,8 @@ msgid "Line Number:" msgstr "Zeilennummer:" #: editor/code_editor.cpp -msgid "Replaced %d occurrence(s)." -msgstr "Suchbegriff wurde %d mal ersetzt." +msgid "%d replaced." +msgstr "%d ersetzt." #: editor/code_editor.cpp editor/editor_help.cpp msgid "%d match." @@ -4022,6 +4022,10 @@ msgid "Saving..." msgstr "Speichere..." #: editor/import_dock.cpp +msgid "%d Files" +msgstr "%d Dateien" + +#: editor/import_dock.cpp msgid "Set as Default for '%s'" msgstr "Als Standard für ‚%s‘ setzen" @@ -4030,10 +4034,6 @@ msgid "Clear Default for '%s'" msgstr "Standard für ‚%s‘ löschen" #: editor/import_dock.cpp -msgid " Files" -msgstr " Dateien" - -#: editor/import_dock.cpp msgid "Import As:" msgstr "Importiere als:" @@ -5667,9 +5667,8 @@ msgid "Auto Insert Key" msgstr "Schlüsselbild automatisch einfügen" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Animation Key and Pose Options" -msgstr "Animationsschlüsselbild eingefügt." +msgstr "Schlüsselbild- und Posen-Optionen für Animationen" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Insert Key (Existing Tracks)" @@ -5914,12 +5913,12 @@ msgid "Mesh is empty!" msgstr "Mesh ist leer!" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Trimesh Body" -msgstr "Statischen Trimesh-Körper erzeugen" +msgid "Couldn't create a Trimesh collision shape." +msgstr "Konnte Trimesh-Kollisionselement nicht erzeugen." #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Convex Body" -msgstr "Statischen Konvex-Körper erzeugen" +msgid "Create Static Trimesh Body" +msgstr "Statischen Trimesh-Körper erzeugen" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "This doesn't work on scene root!" @@ -5930,12 +5929,32 @@ msgid "Create Trimesh Static Shape" msgstr "Trimesh-Statische-Form erzeugen" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Failed creating shapes!" -msgstr "Form-Erstellung fehlgeschlagen!" +msgid "Can't create a single convex collision shape for the scene root." +msgstr "" +"Aus der Szenenwurzel kann ein einzelnes konvexes Kollisionselement nicht " +"erzeugt werden." + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Couldn't create a single convex collision shape." +msgstr "Ein einzelnes konvexes Kollisionselement konnte nicht erzeugt werden." + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Single Convex Shape" +msgstr "Einzelne konvexe Form erstellen" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Can't create multiple convex collision shapes for the scene root." +msgstr "" +"Aus der Szenenwurzel konnten mehrere konvexe Kollisionselemente nicht " +"erzeugt werden." + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Couldn't create any collision shapes." +msgstr "Konnte kein einziges Kollisionselement erzeugen." #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Convex Shape(s)" -msgstr "Konvexe Form(en) erstellen" +msgid "Create Multiple Convex Shapes" +msgstr "Mehrere konvexe Formen erstellen" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Navigation Mesh" @@ -5987,18 +6006,68 @@ msgid "Create Trimesh Static Body" msgstr "Statischen Trimesh-Körper erzeugen" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a StaticBody and assigns a polygon-based collision shape to it " +"automatically.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" +"Erstellt einen StaticBody und weist ein polygon-basiertes Kollisionselement " +"automatisch zu.\n" +"Dies ist die präziseste (aber langsamste) Methode für Kollisionsberechnungen." + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Collision Sibling" msgstr "Trimesh-Kollisionselement erzeugen" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Convex Collision Sibling(s)" -msgstr "Konvexe(s) Kollisionselement(e) erzeugen" +msgid "" +"Creates a polygon-based collision shape.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" +"Erstellt ein polygon-basiertes Kollisionselement.\n" +"Dies ist die präziseste (aber langsamste) Methode für Kollisionsberechnungen." + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Single Convex Collision Siblings" +msgstr "Ein einzelnes konvexes Kollisionsunterelement erzeugen" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a single convex collision shape.\n" +"This is the fastest (but least accurate) option for collision detection." +msgstr "" +"Erstellt ein einzelnes konvexes Kollisionselement.\n" +"Dies ist die schnellste (aber ungenauste) Methode für Kollisionsberechnungen." + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Multiple Convex Collision Siblings" +msgstr "Mehrere konvexe Kollisionsunterelemente erzeugen" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a polygon-based collision shape.\n" +"This is a performance middle-ground between the two above options." +msgstr "" +"Erstellt ein polygon-basiertes Kollisionselement.\n" +"Dies liegt von der Geschwindigkeit in der Mitte der beiden anderen Methoden." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Outline Mesh..." msgstr "Umriss-Mesh erzeugen..." #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a static outline mesh. The outline mesh will have its normals " +"flipped automatically.\n" +"This can be used instead of the SpatialMaterial Grow property when using " +"that property isn't possible." +msgstr "" +"Erstellt ein statisches Outline-Mesh. Outline-Meshes haben ihre " +"Normalenvektoren automatisch invertiert.\n" +"Dies kann als Ersatz für die SpatialMaterial-Grow-Eigenschaft genutzt werden " +"wenn sie nicht verfügbar ist." + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "View UV1" msgstr "UV1 zeigen" @@ -8422,7 +8491,7 @@ msgstr "TileSet" msgid "No VCS addons are available." msgstr "Keine Versionsverwaltungserweiterungen verfügbar." -#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Error" msgstr "Fehler" @@ -9592,24 +9661,29 @@ msgid "Export With Debug" msgstr "Exportiere mit Debuginformationen" #: editor/project_manager.cpp -msgid "The path does not exist." -msgstr "Dieser Pfad existiert nicht." +msgid "The path specified doesn't exist." +msgstr "Der angegebene Pfad existiert nicht." + +#: editor/project_manager.cpp +msgid "Error opening package file (it's not in ZIP format)." +msgstr "Fehler beim Öffnen der Paketdatei (kein ZIP-Format)." #: editor/project_manager.cpp -msgid "Invalid '.zip' project file, does not contain a 'project.godot' file." -msgstr "Ungültige Projekt-Zipdatei, enthält keine ‚project.godot‘-Datei." +msgid "" +"Invalid \".zip\" project file; it doesn't contain a \"project.godot\" file." +msgstr "Ungültige „.zip“-Projektdatei, enthält keine „project.godot“-Datei." #: editor/project_manager.cpp msgid "Please choose an empty folder." msgstr "Bitte einen leeren Ordner auswählen." #: editor/project_manager.cpp -msgid "Please choose a 'project.godot' or '.zip' file." -msgstr "Eine ‚project.godot‘-Datei oder Zipdatei auswählen." +msgid "Please choose a \"project.godot\" or \".zip\" file." +msgstr "Eine „project.godot” oder „.zip“-Datei auswählen." #: editor/project_manager.cpp -msgid "Directory already contains a Godot project." -msgstr "Das Verzeichnis beinhaltet bereits ein Godot-Projekt." +msgid "This directory already contains a Godot project." +msgstr "Dieses Verzeichnis beinhaltet bereits ein Godot-Projekt." #: editor/project_manager.cpp msgid "New Game Project" @@ -10312,6 +10386,10 @@ msgid "Suffix" msgstr "Suffix" #: editor/rename_dialog.cpp +msgid "Use Regular Expressions" +msgstr "Reguläre Ausdrücke verwenden" + +#: editor/rename_dialog.cpp msgid "Advanced Options" msgstr "Erweiterte Einstellungen" @@ -10348,7 +10426,7 @@ msgstr "" "Zahleroptionen vergleichen." #: editor/rename_dialog.cpp -msgid "Per Level counter" +msgid "Per-level Counter" msgstr "Pro-Ebene-Zähler" #: editor/rename_dialog.cpp @@ -10381,10 +10459,6 @@ msgstr "" "Fehlende Ziffern werden mit führenden Nullen ergänzt." #: editor/rename_dialog.cpp -msgid "Regular Expressions" -msgstr "Reguläre Ausdrücke" - -#: editor/rename_dialog.cpp msgid "Post-Process" msgstr "Nachbearbeitung" @@ -10393,11 +10467,11 @@ msgid "Keep" msgstr "Behalten" #: editor/rename_dialog.cpp -msgid "CamelCase to under_scored" +msgid "PascalCase to snake_case" msgstr "CamelCase zu unter_strich" #: editor/rename_dialog.cpp -msgid "under_scored to CamelCase" +msgid "snake_case to PascalCase" msgstr "unter_strich zu CamelCase" #: editor/rename_dialog.cpp @@ -10416,6 +10490,14 @@ msgstr "Zu Großbuchstaben" msgid "Reset" msgstr "Zurücksetzen" +#: editor/rename_dialog.cpp +msgid "Regular Expression Error" +msgstr "Fehler in regulärem Ausdruck" + +#: editor/rename_dialog.cpp +msgid "At character %s" +msgstr "Bei Zeichen %s" + #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "Node umhängen" @@ -10882,8 +10964,8 @@ msgid "Invalid inherited parent name or path." msgstr "Ungültiger geerbter Name oder Pfad." #: editor/script_create_dialog.cpp -msgid "Script is valid." -msgstr "Skript ist gültig." +msgid "Script path/name is valid." +msgstr "Skript-Pfad oder -Name ist gültig." #: editor/script_create_dialog.cpp msgid "Allowed: a-z, A-Z, 0-9, _ and ." @@ -10974,6 +11056,10 @@ msgid "Copy Error" msgstr "Fehlermeldung kopieren" #: editor/script_editor_debugger.cpp +msgid "Video RAM" +msgstr "Video RAM" + +#: editor/script_editor_debugger.cpp msgid "Skip Breakpoints" msgstr "Haltepunkte auslassen" @@ -11022,10 +11108,6 @@ msgid "Total:" msgstr "Insgesamt:" #: editor/script_editor_debugger.cpp -msgid "Video Mem" -msgstr "Grafikspeicher" - -#: editor/script_editor_debugger.cpp msgid "Resource Path" msgstr "Ressourcenpfad" @@ -12737,6 +12819,15 @@ msgstr "Varyings können nur in Vertex-Funktion zugewiesen werden." msgid "Constants cannot be modified." msgstr "Konstanten können nicht verändert werden." +#~ msgid "Replaced %d occurrence(s)." +#~ msgstr "Suchbegriff wurde %d mal ersetzt." + +#~ msgid "Create Static Convex Body" +#~ msgstr "Statischen Konvex-Körper erzeugen" + +#~ msgid "Failed creating shapes!" +#~ msgstr "Form-Erstellung fehlgeschlagen!" + #~ msgid "" #~ "There are currently no tutorials for this class, you can [color=$color]" #~ "[url=$url]contribute one[/url][/color] or [color=$color][url=" diff --git a/editor/translations/de_CH.po b/editor/translations/de_CH.po index fc524de9ad..f4db15a122 100644 --- a/editor/translations/de_CH.po +++ b/editor/translations/de_CH.po @@ -691,7 +691,7 @@ msgid "Line Number:" msgstr "" #: editor/code_editor.cpp -msgid "Replaced %d occurrence(s)." +msgid "%d replaced." msgstr "" #: editor/code_editor.cpp editor/editor_help.cpp @@ -3961,6 +3961,10 @@ msgid "Saving..." msgstr "" #: editor/import_dock.cpp +msgid "%d Files" +msgstr "%d Dateien" + +#: editor/import_dock.cpp msgid "Set as Default for '%s'" msgstr "" @@ -3969,11 +3973,6 @@ msgid "Clear Default for '%s'" msgstr "" #: editor/import_dock.cpp -#, fuzzy -msgid " Files" -msgstr "Datei(en) öffnen" - -#: editor/import_dock.cpp msgid "Import As:" msgstr "" @@ -5906,11 +5905,12 @@ msgid "Mesh is empty!" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Trimesh Body" -msgstr "" +#, fuzzy +msgid "Couldn't create a Trimesh collision shape." +msgstr "Node erstellen" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Convex Body" +msgid "Create Static Trimesh Body" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -5922,12 +5922,30 @@ msgid "Create Trimesh Static Shape" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Failed creating shapes!" +msgid "Can't create a single convex collision shape for the scene root." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Couldn't create a single convex collision shape." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Create Single Convex Shape" +msgstr "Node erstellen" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Can't create multiple convex collision shapes for the scene root." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp #, fuzzy -msgid "Create Convex Shape(s)" +msgid "Couldn't create any collision shapes." +msgstr "Node erstellen" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Create Multiple Convex Shapes" msgstr "Node erstellen" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -5979,19 +5997,57 @@ msgid "Create Trimesh Static Body" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a StaticBody and assigns a polygon-based collision shape to it " +"automatically.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Collision Sibling" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a polygon-based collision shape.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp #, fuzzy -msgid "Create Convex Collision Sibling(s)" +msgid "Create Single Convex Collision Siblings" msgstr "Node erstellen" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a single convex collision shape.\n" +"This is the fastest (but least accurate) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Create Multiple Convex Collision Siblings" +msgstr "Node erstellen" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a polygon-based collision shape.\n" +"This is a performance middle-ground between the two above options." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Outline Mesh..." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a static outline mesh. The outline mesh will have its normals " +"flipped automatically.\n" +"This can be used instead of the SpatialMaterial Grow property when using " +"that property isn't possible." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp #, fuzzy msgid "View UV1" msgstr "Datei(en) öffnen" @@ -8490,7 +8546,7 @@ msgstr "Datei(en) öffnen" msgid "No VCS addons are available." msgstr "" -#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Error" msgstr "" @@ -9612,11 +9668,16 @@ msgid "Export With Debug" msgstr "" #: editor/project_manager.cpp -msgid "The path does not exist." +msgid "The path specified doesn't exist." msgstr "" #: editor/project_manager.cpp -msgid "Invalid '.zip' project file, does not contain a 'project.godot' file." +msgid "Error opening package file (it's not in ZIP format)." +msgstr "" + +#: editor/project_manager.cpp +msgid "" +"Invalid \".zip\" project file; it doesn't contain a \"project.godot\" file." msgstr "" #: editor/project_manager.cpp @@ -9626,11 +9687,11 @@ msgstr "Bitte ausserhalb des Projekt Verzeichnis exportieren!" #: editor/project_manager.cpp #, fuzzy -msgid "Please choose a 'project.godot' or '.zip' file." +msgid "Please choose a \"project.godot\" or \".zip\" file." msgstr "Bitte ausserhalb des Projekt Verzeichnis exportieren!" #: editor/project_manager.cpp -msgid "Directory already contains a Godot project." +msgid "This directory already contains a Godot project." msgstr "" #: editor/project_manager.cpp @@ -10298,6 +10359,11 @@ msgid "Suffix" msgstr "" #: editor/rename_dialog.cpp +#, fuzzy +msgid "Use Regular Expressions" +msgstr "Typ ändern" + +#: editor/rename_dialog.cpp msgid "Advanced Options" msgstr "" @@ -10334,7 +10400,7 @@ msgid "" msgstr "" #: editor/rename_dialog.cpp -msgid "Per Level counter" +msgid "Per-level Counter" msgstr "" #: editor/rename_dialog.cpp @@ -10364,11 +10430,6 @@ msgid "" msgstr "" #: editor/rename_dialog.cpp -#, fuzzy -msgid "Regular Expressions" -msgstr "Typ ändern" - -#: editor/rename_dialog.cpp msgid "Post-Process" msgstr "" @@ -10377,11 +10438,11 @@ msgid "Keep" msgstr "" #: editor/rename_dialog.cpp -msgid "CamelCase to under_scored" +msgid "PascalCase to snake_case" msgstr "" #: editor/rename_dialog.cpp -msgid "under_scored to CamelCase" +msgid "snake_case to PascalCase" msgstr "" #: editor/rename_dialog.cpp @@ -10401,6 +10462,15 @@ msgstr "" msgid "Reset" msgstr "" +#: editor/rename_dialog.cpp +#, fuzzy +msgid "Regular Expression Error" +msgstr "Typ ändern" + +#: editor/rename_dialog.cpp +msgid "At character %s" +msgstr "" + #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "" @@ -10864,7 +10934,7 @@ msgid "Invalid inherited parent name or path." msgstr "" #: editor/script_create_dialog.cpp -msgid "Script is valid." +msgid "Script path/name is valid." msgstr "" #: editor/script_create_dialog.cpp @@ -10966,6 +11036,10 @@ msgid "Copy Error" msgstr "Connections editieren" #: editor/script_editor_debugger.cpp +msgid "Video RAM" +msgstr "" + +#: editor/script_editor_debugger.cpp #, fuzzy msgid "Skip Breakpoints" msgstr "Bild einfügen" @@ -11016,10 +11090,6 @@ msgid "Total:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Video Mem" -msgstr "" - -#: editor/script_editor_debugger.cpp msgid "Resource Path" msgstr "" diff --git a/editor/translations/editor.pot b/editor/translations/editor.pot index c1b2932a6f..1db40e52cb 100644 --- a/editor/translations/editor.pot +++ b/editor/translations/editor.pot @@ -661,7 +661,7 @@ msgid "Line Number:" msgstr "" #: editor/code_editor.cpp -msgid "Replaced %d occurrence(s)." +msgid "%d replaced." msgstr "" #: editor/code_editor.cpp editor/editor_help.cpp @@ -3797,15 +3797,15 @@ msgid "Saving..." msgstr "" #: editor/import_dock.cpp -msgid "Set as Default for '%s'" +msgid "%d Files" msgstr "" #: editor/import_dock.cpp -msgid "Clear Default for '%s'" +msgid "Set as Default for '%s'" msgstr "" #: editor/import_dock.cpp -msgid " Files" +msgid "Clear Default for '%s'" msgstr "" #: editor/import_dock.cpp @@ -5634,11 +5634,11 @@ msgid "Mesh is empty!" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Trimesh Body" +msgid "Couldn't create a Trimesh collision shape." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Convex Body" +msgid "Create Static Trimesh Body" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -5650,11 +5650,27 @@ msgid "Create Trimesh Static Shape" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Failed creating shapes!" +msgid "Can't create a single convex collision shape for the scene root." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Couldn't create a single convex collision shape." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Single Convex Shape" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Can't create multiple convex collision shapes for the scene root." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Couldn't create any collision shapes." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Convex Shape(s)" +msgid "Create Multiple Convex Shapes" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -5706,11 +5722,40 @@ msgid "Create Trimesh Static Body" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a StaticBody and assigns a polygon-based collision shape to it " +"automatically.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Collision Sibling" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Convex Collision Sibling(s)" +msgid "" +"Creates a polygon-based collision shape.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Single Convex Collision Siblings" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a single convex collision shape.\n" +"This is the fastest (but least accurate) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Multiple Convex Collision Siblings" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a polygon-based collision shape.\n" +"This is a performance middle-ground between the two above options." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -5718,6 +5763,14 @@ msgid "Create Outline Mesh..." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a static outline mesh. The outline mesh will have its normals " +"flipped automatically.\n" +"This can be used instead of the SpatialMaterial Grow property when using " +"that property isn't possible." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "View UV1" msgstr "" @@ -8082,7 +8135,7 @@ msgstr "" msgid "No VCS addons are available." msgstr "" -#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Error" msgstr "" @@ -9166,11 +9219,16 @@ msgid "Export With Debug" msgstr "" #: editor/project_manager.cpp -msgid "The path does not exist." +msgid "The path specified doesn't exist." +msgstr "" + +#: editor/project_manager.cpp +msgid "Error opening package file (it's not in ZIP format)." msgstr "" #: editor/project_manager.cpp -msgid "Invalid '.zip' project file, does not contain a 'project.godot' file." +msgid "" +"Invalid \".zip\" project file; it doesn't contain a \"project.godot\" file." msgstr "" #: editor/project_manager.cpp @@ -9178,11 +9236,11 @@ msgid "Please choose an empty folder." msgstr "" #: editor/project_manager.cpp -msgid "Please choose a 'project.godot' or '.zip' file." +msgid "Please choose a \"project.godot\" or \".zip\" file." msgstr "" #: editor/project_manager.cpp -msgid "Directory already contains a Godot project." +msgid "This directory already contains a Godot project." msgstr "" #: editor/project_manager.cpp @@ -9828,6 +9886,10 @@ msgid "Suffix" msgstr "" #: editor/rename_dialog.cpp +msgid "Use Regular Expressions" +msgstr "" + +#: editor/rename_dialog.cpp msgid "Advanced Options" msgstr "" @@ -9862,7 +9924,7 @@ msgid "" msgstr "" #: editor/rename_dialog.cpp -msgid "Per Level counter" +msgid "Per-level Counter" msgstr "" #: editor/rename_dialog.cpp @@ -9892,10 +9954,6 @@ msgid "" msgstr "" #: editor/rename_dialog.cpp -msgid "Regular Expressions" -msgstr "" - -#: editor/rename_dialog.cpp msgid "Post-Process" msgstr "" @@ -9904,11 +9962,11 @@ msgid "Keep" msgstr "" #: editor/rename_dialog.cpp -msgid "CamelCase to under_scored" +msgid "PascalCase to snake_case" msgstr "" #: editor/rename_dialog.cpp -msgid "under_scored to CamelCase" +msgid "snake_case to PascalCase" msgstr "" #: editor/rename_dialog.cpp @@ -9927,6 +9985,14 @@ msgstr "" msgid "Reset" msgstr "" +#: editor/rename_dialog.cpp +msgid "Regular Expression Error" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "At character %s" +msgstr "" + #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "" @@ -10366,7 +10432,7 @@ msgid "Invalid inherited parent name or path." msgstr "" #: editor/script_create_dialog.cpp -msgid "Script is valid." +msgid "Script path/name is valid." msgstr "" #: editor/script_create_dialog.cpp @@ -10458,6 +10524,10 @@ msgid "Copy Error" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Video RAM" +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Skip Breakpoints" msgstr "" @@ -10506,10 +10576,6 @@ msgid "Total:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Video Mem" -msgstr "" - -#: editor/script_editor_debugger.cpp msgid "Resource Path" msgstr "" diff --git a/editor/translations/el.po b/editor/translations/el.po index 99e7a49f85..6aa7a07f5d 100644 --- a/editor/translations/el.po +++ b/editor/translations/el.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2020-01-27 07:09+0000\n" +"PO-Revision-Date: 2020-02-02 08:51+0000\n" "Last-Translator: George Tsiamasiotis <gtsiam@windowslive.com>\n" "Language-Team: Greek <https://hosted.weblate.org/projects/godot-engine/godot/" "el/>\n" @@ -693,8 +693,9 @@ msgid "Line Number:" msgstr "Αρ. γραμμής:" #: editor/code_editor.cpp -msgid "Replaced %d occurrence(s)." -msgstr "Αντικαταστάθηκαν %d εμφανίσεις." +#, fuzzy +msgid "%d replaced." +msgstr "Αντικατάσταση..." #: editor/code_editor.cpp editor/editor_help.cpp msgid "%d match." @@ -3985,6 +3986,10 @@ msgid "Saving..." msgstr "Αποθήκευση..." #: editor/import_dock.cpp +msgid "%d Files" +msgstr "%d αρχεία" + +#: editor/import_dock.cpp msgid "Set as Default for '%s'" msgstr "Ορισμός ως προεπιλογής για '%s'" @@ -3993,10 +3998,6 @@ msgid "Clear Default for '%s'" msgstr "Εκκαθάριση προεπιλογής για '%s'" #: editor/import_dock.cpp -msgid " Files" -msgstr " Αρχεία" - -#: editor/import_dock.cpp msgid "Import As:" msgstr "Εισαγωγή ώς:" @@ -5378,8 +5379,8 @@ msgid "" "Warning: Children of a container get their position and size determined only " "by their parent." msgstr "" -"Προειδοποίηση: Τα παιδιά ενός δοχείου, παίρνουν τη θέση και το μέγεθος " -"καθορισμένα μόνο από τον γονέα τους." +"Προσοχή: Τα παιδιά ενός δοχείου λαμβάνουν θέση και μέγεθος μόνο από τον " +"γονέα τους." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/texture_region_editor_plugin.cpp @@ -5878,12 +5879,13 @@ msgid "Mesh is empty!" msgstr "Το πλέγμα είναι άδειο!" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Trimesh Body" -msgstr "Δημιουργία στατικού σώματος πλέγματος τριγώνων" +#, fuzzy +msgid "Couldn't create a Trimesh collision shape." +msgstr "Δημιουργία αδελφού σύγκρουσης πλέγατος τριγώνων" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Convex Body" -msgstr "Δημιουργία στατικού κυρτού σώματος" +msgid "Create Static Trimesh Body" +msgstr "Δημιουργία στατικού σώματος πλέγματος τριγώνων" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "This doesn't work on scene root!" @@ -5894,11 +5896,30 @@ msgid "Create Trimesh Static Shape" msgstr "Δημιουργία Στατικού Σχήματος Πλέγματος Τριγώνων" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Failed creating shapes!" -msgstr "Αποτυχία δημιουργίας σχημάτων!" +msgid "Can't create a single convex collision shape for the scene root." +msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Convex Shape(s)" +msgid "Couldn't create a single convex collision shape." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Create Single Convex Shape" +msgstr "Δημιουργία Κυρτών Σχημάτων" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Can't create multiple convex collision shapes for the scene root." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Couldn't create any collision shapes." +msgstr "Αδύνατη η δημιουργία φακέλου." + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Create Multiple Convex Shapes" msgstr "Δημιουργία Κυρτών Σχημάτων" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -5950,18 +5971,57 @@ msgid "Create Trimesh Static Body" msgstr "Δημιουργία στατικού σώματος πλέγματος τριγώνων" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a StaticBody and assigns a polygon-based collision shape to it " +"automatically.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Collision Sibling" msgstr "Δημιουργία αδελφού σύγκρουσης πλέγατος τριγώνων" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Convex Collision Sibling(s)" +msgid "" +"Creates a polygon-based collision shape.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Create Single Convex Collision Siblings" msgstr "Δημιουργία Κυρτού Αδελφού Σύγκρουσης" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a single convex collision shape.\n" +"This is the fastest (but least accurate) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Create Multiple Convex Collision Siblings" +msgstr "Δημιουργία Κυρτού Αδελφού Σύγκρουσης" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a polygon-based collision shape.\n" +"This is a performance middle-ground between the two above options." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Outline Mesh..." msgstr "Δημιουργία πλέγματος περιγράμματος..." #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a static outline mesh. The outline mesh will have its normals " +"flipped automatically.\n" +"This can be used instead of the SpatialMaterial Grow property when using " +"that property isn't possible." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "View UV1" msgstr "Εμφάνιση UV1" @@ -6971,11 +7031,11 @@ msgstr "Διαγραφή γραμμής" #: editor/plugins/script_text_editor.cpp msgid "Indent Left" -msgstr "στοιχειοθέτηση αριστερά" +msgstr "Στοιχειοθέτηση Αριστερά" #: editor/plugins/script_text_editor.cpp msgid "Indent Right" -msgstr "στοιχειοθέτηση δεξιά" +msgstr "Στοιχειοθέτηση Δεξιά" #: editor/plugins/script_text_editor.cpp msgid "Toggle Comment" @@ -7019,7 +7079,7 @@ msgstr "Μετατροπή Εσοχών σε Στηλοθέτες" #: editor/plugins/script_text_editor.cpp msgid "Auto Indent" -msgstr "Αυτόματη στοιχειοθέτηση" +msgstr "Αυτόματη Στοιχειοθέτηση" #: editor/plugins/script_text_editor.cpp msgid "Find in Files..." @@ -8387,7 +8447,7 @@ msgstr "TileSet" msgid "No VCS addons are available." msgstr "Κανένα πρόσθετο VCS δεν είναι διαθέσιμο." -#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Error" msgstr "Σφάλμα" @@ -9553,11 +9613,19 @@ msgid "Export With Debug" msgstr "Εξαγωγή με αποσφαλμάτωση" #: editor/project_manager.cpp -msgid "The path does not exist." +#, fuzzy +msgid "The path specified doesn't exist." msgstr "Η διαδρομή δεν υπάρχει." #: editor/project_manager.cpp -msgid "Invalid '.zip' project file, does not contain a 'project.godot' file." +#, fuzzy +msgid "Error opening package file (it's not in ZIP format)." +msgstr "Σφάλμα ανοίγματος αρχείου πακέτου, δεν είναι σε μορφή ZIP." + +#: editor/project_manager.cpp +#, fuzzy +msgid "" +"Invalid \".zip\" project file; it doesn't contain a \"project.godot\" file." msgstr "Άκυρο αρχείο έργου «.zip», δεν περιέχει αρχείο «project.godot»." #: editor/project_manager.cpp @@ -9565,11 +9633,13 @@ msgid "Please choose an empty folder." msgstr "Παρακαλούμε επιλέξτε έναν άδειο φάκελο." #: editor/project_manager.cpp -msgid "Please choose a 'project.godot' or '.zip' file." +#, fuzzy +msgid "Please choose a \"project.godot\" or \".zip\" file." msgstr "Παρακαλούμε επιλέξτε ένα αρχείο «project.godot» ή «.zip»." #: editor/project_manager.cpp -msgid "Directory already contains a Godot project." +#, fuzzy +msgid "This directory already contains a Godot project." msgstr "Ο κατάλογος περιέχει ήδη ένα έργο της Godot." #: editor/project_manager.cpp @@ -10269,6 +10339,11 @@ msgid "Suffix" msgstr "Επίθεμα" #: editor/rename_dialog.cpp +#, fuzzy +msgid "Use Regular Expressions" +msgstr "Κανονικές Εκφράσεις" + +#: editor/rename_dialog.cpp msgid "Advanced Options" msgstr "Προχωρημένες Επιλογές" @@ -10305,7 +10380,8 @@ msgstr "" "Σύγκριση επιλογών μετρητή." #: editor/rename_dialog.cpp -msgid "Per Level counter" +#, fuzzy +msgid "Per-level Counter" msgstr "Μετρητής Ανά Επίπεδο" #: editor/rename_dialog.cpp @@ -10337,10 +10413,6 @@ msgstr "" "Τα εναπομείναντα ψηφία συμπληρώνονται με μπροστινά μηδενικά." #: editor/rename_dialog.cpp -msgid "Regular Expressions" -msgstr "Κανονικές Εκφράσεις" - -#: editor/rename_dialog.cpp msgid "Post-Process" msgstr "Μετεπεξεργασία" @@ -10349,11 +10421,13 @@ msgid "Keep" msgstr "Διατήρηση" #: editor/rename_dialog.cpp -msgid "CamelCase to under_scored" +#, fuzzy +msgid "PascalCase to snake_case" msgstr "CamelCase σε under_scored" #: editor/rename_dialog.cpp -msgid "under_scored to CamelCase" +#, fuzzy +msgid "snake_case to PascalCase" msgstr "under_scored σε CamelCase" #: editor/rename_dialog.cpp @@ -10372,9 +10446,19 @@ msgstr "Κάνε Κεφαλαία" msgid "Reset" msgstr "Επαναφορά" +#: editor/rename_dialog.cpp +#, fuzzy +msgid "Regular Expression Error" +msgstr "Κανονικές Εκφράσεις" + +#: editor/rename_dialog.cpp +#, fuzzy +msgid "At character %s" +msgstr "Έγκυροι χαρακτήρες:" + #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" -msgstr "Επαναπροσδιορισμός γονέα κόμβου" +msgstr "Επαναπροσδιορισμός Γονέα Κόμβου" #: editor/reparent_dialog.cpp msgid "Reparent Location (Select new Parent):" @@ -10386,7 +10470,7 @@ msgstr "Διατήρηση παγκόσμιου μετασχηματισμού" #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent" -msgstr "Επαναπροσδιορισμός γονέα" +msgstr "Επαναπροσδιορισμός Γονέα" #: editor/run_settings_dialog.cpp msgid "Run Mode:" @@ -10489,7 +10573,7 @@ msgstr "Διαγραφή κόμβου \"%s\" και των παιδιών του #: editor/scene_tree_dock.cpp msgid "Delete node \"%s\"?" -msgstr "Διαγραφή κόμβων \"%s\";" +msgstr "Διαγραφή κόμβου «%s»;" #: editor/scene_tree_dock.cpp msgid "Can not perform with the root node." @@ -10622,7 +10706,7 @@ msgstr "Αλλαγή τύπου" #: editor/scene_tree_dock.cpp msgid "Reparent to New Node" -msgstr "Επαναπροσδιορισμός Γονέα" +msgstr "Επαναπροσδιορισμός Γονέα σε Νέο Κόμβο" #: editor/scene_tree_dock.cpp msgid "Make Scene Root" @@ -10634,7 +10718,7 @@ msgstr "Συγχώνευση από σκηνή" #: editor/scene_tree_dock.cpp editor/script_editor_debugger.cpp msgid "Save Branch as Scene" -msgstr "Αποθήκευσι κλαδιού ως σκηνή" +msgstr "Αποθήκευση Κλάδου ως Σκηνή" #: editor/scene_tree_dock.cpp editor/script_editor_debugger.cpp msgid "Copy Node Path" @@ -10841,7 +10925,8 @@ msgid "Invalid inherited parent name or path." msgstr "Άκυρο όνομα κληρονομημένου γονέα ή διαδρομή." #: editor/script_create_dialog.cpp -msgid "Script is valid." +#, fuzzy +msgid "Script path/name is valid." msgstr "Έγκυρη δέσμη ενεργειών." #: editor/script_create_dialog.cpp @@ -10933,6 +11018,11 @@ msgid "Copy Error" msgstr "Αντιγραφή σφάλματος" #: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Video RAM" +msgstr "Βίντεο μνήμη" + +#: editor/script_editor_debugger.cpp msgid "Skip Breakpoints" msgstr "Παράλειψη Σημείων Διακοπής" @@ -10983,10 +11073,6 @@ msgid "Total:" msgstr "Συνολικά:" #: editor/script_editor_debugger.cpp -msgid "Video Mem" -msgstr "Βίντεο μνήμη" - -#: editor/script_editor_debugger.cpp msgid "Resource Path" msgstr "Διαδρομή πόρου" @@ -12056,13 +12142,12 @@ msgid "Invalid splash screen image dimensions (should be 620x300)." msgstr "Άκυρες διαστάσεις εικόνας οθόνης εκκίνησης (πρέπει να είναι 620x300)." #: scene/2d/animated_sprite.cpp -#, fuzzy msgid "" "A SpriteFrames resource must be created or set in the \"Frames\" property in " "order for AnimatedSprite to display frames." msgstr "" -"Ένας πόρος SpriteFrames πρέπει να έχει δημιουργηθεί ή ορισθεί στην ιδιότητα " -"'Frames' για να μπορεί το AnimatedSprite να παρουσιάσει frames." +"Απαιτείται ο ορισμός ενός πόρου SpriteFrames στην ιδιότητα «Frames» για την " +"εμφάνιση καρέ από το AnimatedSprite." #: scene/2d/canvas_modulate.cpp msgid "" @@ -12074,16 +12159,15 @@ msgstr "" "θα αγνοηθούν." #: scene/2d/collision_object_2d.cpp -#, fuzzy msgid "" "This node has no shape, so it can't collide or interact with other objects.\n" "Consider adding a CollisionShape2D or CollisionPolygon2D as a child to " "define its shape." msgstr "" -"Αυτός ο κόμβος δεν έχει παιδιά κόμβους σχήματος, οπότε δεν μπορεί να " -"αντιδράσει με το περιβάλλον.\n" -"Σκεφτείτε να προσθέσετε CollisionShape2D ή CollisionPolygon2D για να ορίσετε " -"το σχήμα του." +"Αυτός ο κόμβος δεν έχει σχήμα, οπότε δεν μπορεί συγκρουσθεί ή να " +"αλληλεπιδράσει με άλλα αντικείμενα.\n" +"Εξετάστε την προσθήκη ενός παιδιού CollisionShape2D ή CollisionPolygon2D για " +"να ορίσετε το σχήμα του." #: scene/2d/collision_polygon_2d.cpp msgid "" @@ -12128,11 +12212,10 @@ msgstr "" "«Particles Animation» ενεργό." #: scene/2d/light_2d.cpp -#, fuzzy msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " "property." -msgstr "Μία υφή με το σχήμα του φωτός πρέπει να δοθεί στην ιδιότητα 'texture'." +msgstr "Μία υφή με το σχήμα του φωτός πρέπει να τεθεί στην ιδιότητα «Texture»." #: scene/2d/light_occluder_2d.cpp msgid "" @@ -12142,11 +12225,10 @@ msgstr "" "αυτό το εμπόδιο." #: scene/2d/light_occluder_2d.cpp -#, fuzzy msgid "The occluder polygon for this occluder is empty. Please draw a polygon." msgstr "" -"Το πολύγωνο εμποδίου για αυτό το εμπόδιο είναι άδειο. Ζωγραφίστε ένα " -"πολύγονο!" +"Το πολύγωνο εμποδίου για αυτό το εμπόδιο είναι άδειο. Παρακαλούμε ζωγραφίστε " +"ένα πολύγωνο." #: scene/2d/navigation_polygon.cpp msgid "" @@ -12235,63 +12317,55 @@ msgstr "" "ορίστε την." #: scene/2d/tile_map.cpp -#, fuzzy msgid "" "TileMap with Use Parent on needs a parent CollisionObject2D to give shapes " "to. Please use it as a child of Area2D, StaticBody2D, RigidBody2D, " "KinematicBody2D, etc. to give them a shape." msgstr "" -"To CollisionShape2D υπάρχει μόνο για να δώσει ένα σχήμα σύγκρουσης σε έναν " -"κόμβο που προέρχεται από το CollisionObject2D. Χρησιμοποιήστε το μόνο εάν " -"κληρονομεί τα Area2D, StaticBody2D, RigidBody2D, KinematicBody2D, κλπ, για " -"να τους δώσετε ένα σχήμα." +"Το TileMap με το «Use Parent» ενεργό χρειάζεται ένα γονικό CollisionObject2D " +"στο οποίο θα δίνει σχήματα. Χρησιμοποιήστε το σαν παιδί των Area2D, " +"StaticBody2D, RigidBody2D, KinematicBody2D, κλπ, για να τους δώσετε ένα " +"σχήμα." #: scene/2d/visibility_notifier_2d.cpp -#, fuzzy msgid "" "VisibilityEnabler2D works best when used with the edited scene root directly " "as parent." msgstr "" -"Το VisibilityEnable2D δουλεύει καλύτερα όταν χρησιμοποιείται μα την ρίζα της " -"επεξεργασμένης σκηνές κατευθείαν ως γονέας." +"Το VisibilityEnabler2D δουλεύει καλύτερα όταν η ρίζα της τρέχουσας σκηνής " +"είναι ο άμεσος γονέας του." #: scene/3d/arvr_nodes.cpp -#, fuzzy msgid "ARVRCamera must have an ARVROrigin node as its parent." -msgstr "Η ARVRCamera πρέπει να έχει έναν κόμβο ARVROrigin ως γονέα" +msgstr "Η ARVRCamera απαιτεί γονικό κόμβο ARVROrigin." #: scene/3d/arvr_nodes.cpp -#, fuzzy msgid "ARVRController must have an ARVROrigin node as its parent." -msgstr "Ο ARVRController πρέπει να έχει έναν κόμβο ARVROrigin ως γονέα" +msgstr "Ο ARVRController απαιτεί γονικό κόμβο ARVROrigin." #: scene/3d/arvr_nodes.cpp -#, fuzzy msgid "" "The controller ID must not be 0 or this controller won't be bound to an " "actual controller." msgstr "" -"Ο δείκτης χειριστή δεν πρέπει να είναι 0 για να είναι συνδεδεμένος αυτός ο " -"χειριστής με έναν υπαρκτό χειριστή" +"Ο δείκτης χειριστηρίου πρέπει να είναι διάφορος του 0 για να αντιπροσωπεύει " +"πραγματικό χειριστήριο." #: scene/3d/arvr_nodes.cpp -#, fuzzy msgid "ARVRAnchor must have an ARVROrigin node as its parent." -msgstr "Ο ARVRAnchor πρέπει να έχει έναν κόμβο ARVROrigin ως γονέα" +msgstr "Η ARVRAnchor απαιτεί γονικό κόμβο ARVROrigin." #: scene/3d/arvr_nodes.cpp -#, fuzzy msgid "" "The anchor ID must not be 0 or this anchor won't be bound to an actual " "anchor." msgstr "" -"Ο δείκτης άγκυρας δεν πρέπει να είναι 0 για να είναι συνδεδεμένη αυτή η " -"άγκυρα με μία υπαρκτή άγκυρα" +"Ο δείκτης άγκυρας πρέπει να είναι διάφορος του 0 για να αντιπροσωπεύει " +"πραγματική άγκυρα." #: scene/3d/arvr_nodes.cpp -#, fuzzy msgid "ARVROrigin requires an ARVRCamera child node." -msgstr "Το ARVROrigin απαιτεί έναν κόμβο ARVRCamera ως παιδί" +msgstr "Το ARVROrigin απαιτεί γονικό κόμβο ARVRCamera." #: scene/3d/baked_lightmap.cpp msgid "%d%%" @@ -12318,16 +12392,15 @@ msgid "Lighting Meshes: " msgstr "Φώτηση πλεγμάτων: " #: scene/3d/collision_object.cpp -#, fuzzy msgid "" "This node has no shape, so it can't collide or interact with other objects.\n" "Consider adding a CollisionShape or CollisionPolygon as a child to define " "its shape." msgstr "" -"Αυτός ο κόμβος δεν έχει παιδιά κόμβους σχήματος, οπότε δεν μπορεί να " -"αντιδράσει με το περιβάλλον.\n" -"Σκεφτείτε να προσθέσετε CollisionShape ή CollisionPolygon για να ορίσετε το " -"σχήμα του." +"Αυτός ο κόμβος δεν έχει σχήμα, οπότε δεν μπορεί συγκρουσθεί ή να " +"αλληλεπιδράσει με άλλα αντικείμενα.\n" +"Εξετάστε την προσθήκη ενός παιδιού CollisionShape ή CollisionPolygon για να " +"ορίσετε το σχήμα του." #: scene/3d/collision_polygon.cpp msgid "" @@ -12356,13 +12429,12 @@ msgstr "" "δώσετε ένα σχήμα." #: scene/3d/collision_shape.cpp -#, fuzzy msgid "" "A shape must be provided for CollisionShape to function. Please create a " "shape resource for it." msgstr "" -"Ένα σχήμα πρέπει να δοθεί στο CollisionShape για να λειτουργήσει. " -"Δημιουργήστε ένα πόρο σχήματος για αυτό!" +"Απαιτείται ένα σχήμα για την λειτουργία του CollisionShape. Παρακαλούμε " +"δημιουργήστε ένα πόρο σχήματος για αυτό." #: scene/3d/collision_shape.cpp msgid "" @@ -12373,10 +12445,8 @@ msgstr "" "εκδόσεις. Παρακαλώ μην τα χρησιμοποιήσετε." #: scene/3d/cpu_particles.cpp -#, fuzzy msgid "Nothing is visible because no mesh has been assigned." -msgstr "" -"Τίποτα δεν είναι ορατό, επειδή δεν έχουν οριστεί περάσματα για τα πλέγματα." +msgstr "Τίποτα δεν είναι ορατό, επειδή δεν έχει οριστεί κανένα πλέγματα." #: scene/3d/cpu_particles.cpp msgid "" @@ -12391,20 +12461,18 @@ msgid "Plotting Meshes" msgstr "Τοποθέτηση πλεγμάτων" #: scene/3d/gi_probe.cpp -#, fuzzy msgid "" "GIProbes are not supported by the GLES2 video driver.\n" "Use a BakedLightmap instead." msgstr "" -"Ται GIProbes δεν υποστηρίζονται από το πρόγραμμα οδήγησης οθόνης GLES2.\n" -"Χρησιμοποιήστε ένα BakedLightmap αντ 'αυτού." +"Τα GIProbes δεν υποστηρίζονται από το πρόγραμμα οδήγησης οθόνης GLES2.\n" +"Εναλλακτικά, χρησιμοποιήστε ένα BakedLightmap." #: scene/3d/light.cpp -#, fuzzy msgid "A SpotLight with an angle wider than 90 degrees cannot cast shadows." msgstr "" -"Ένα SpotLight (προβολέας) με γωνία ευρύτερη από 90 μοίρες δεν μπορεί να " -"δημιουργεί σκιές." +"Οι προβολείς (SpotLight) με γωνία ευρύτερη των 90 μοιρών δεν μπορούν να " +"δημιουργήσουν σκιές." #: scene/3d/navigation_mesh.cpp msgid "A NavigationMesh resource must be set or created for this node to work." @@ -12445,9 +12513,8 @@ msgstr "" "Mode ίσο με «Particle Billboard»." #: scene/3d/path.cpp -#, fuzzy msgid "PathFollow only works when set as a child of a Path node." -msgstr "Το PathFollow2D δουλεύει μόνο όταν κληρονομεί έναν κόμβο Path2D." +msgstr "Το PathFollow δουλεύει μόνο ως παιδί ενός κόμβου Path." #: scene/3d/path.cpp msgid "" @@ -12468,37 +12535,34 @@ msgstr "" "Αλλάξτε μέγεθος στα σχήματα σύγκρουσης των παιδιών." #: scene/3d/remote_transform.cpp -#, fuzzy msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" "derived node to work." msgstr "" -"Η ιδιότητα Path πρέπει να δείχνει σε έναν έγκυρο κόμβο Spatial για να " -"δουλέψει αυτός ο κόμβος." +"Η ιδιότητα «Remote Path» πρέπει να δείχνει σε έγκυρο κόμβο Spatial, ή κόμβο " +"που προκύπτει από Spatial." #: scene/3d/soft_body.cpp msgid "This body will be ignored until you set a mesh." msgstr "Το σώμα αυτό δε θα ληφθεί υπόψιν μέχρι να ορίσετε ένα πλέγμα (mesh)." #: scene/3d/soft_body.cpp -#, fuzzy msgid "" "Size changes to SoftBody will be overridden by the physics engine when " "running.\n" "Change the size in children collision shapes instead." msgstr "" -"Αλλαγές στο μέγεθος του RigidBody (στις λειτουργίες character ή rigid) θα " -"αντικατασταθούνε από την μηχανή φυσικής κατά την εκτέλεση.\n" +"Οι αλλαγές μεγέθους σε SoftBody θα παρακαμφθούν από την μηχανή φυσικής κατά " +"την εκτέλεση.\n" "Αλλάξτε μέγεθος στα σχήματα σύγκρουσης των παιδιών." #: scene/3d/sprite_3d.cpp -#, fuzzy msgid "" "A SpriteFrames resource must be created or set in the \"Frames\" property in " "order for AnimatedSprite3D to display frames." msgstr "" -"Ένας πόρος SpriteFrames πρέπει να δημιουργηθεί ή ορισθεί στην ιδιότητα " -"'Frames' για να δείξει frames το AnimatedSprite3D." +"Απαιτείται ο ορισμός ενός πόρου SpriteFrames στην ιδιότητα «Frames» για την " +"εμφάνιση καρέ από το AnimatedSprite3D." #: scene/3d/vehicle_body.cpp msgid "" @@ -12536,35 +12600,28 @@ msgid "On BlendTree node '%s', animation not found: '%s'" msgstr "Στον κόμβο BlendTree «%s», δεν βρέθηκε η κίνηση: «%s»" #: scene/animation/animation_blend_tree.cpp -#, fuzzy msgid "Animation not found: '%s'" -msgstr "Εργαλεία κινήσεων" +msgstr "Δεν βρέθηκε η κίνηση: «%s»" #: scene/animation/animation_tree.cpp -#, fuzzy msgid "In node '%s', invalid animation: '%s'." -msgstr "Στον κόμβο '%s', μη έγκυρο animation: '%s'." +msgstr "Στον κόμβο «%s», άκυρη κίνηση: «%s»." #: scene/animation/animation_tree.cpp -#, fuzzy msgid "Invalid animation: '%s'." -msgstr "ΣΦΑΛΜΑ: Μη έγκυρο όνομα κίνησης!" +msgstr "Άκυρη κίνηση: «%s»." #: scene/animation/animation_tree.cpp -#, fuzzy msgid "Nothing connected to input '%s' of node '%s'." -msgstr "Αποσύνδεση του '%s' απο το '%s'" +msgstr "Τίποτα δεν είναι συνδεδεμένο στην είσοδο «%s» του κόμβου «%s»." #: scene/animation/animation_tree.cpp msgid "No root AnimationNode for the graph is set." msgstr "Δεν έχει οριστεί ριζικό AnimationNode για το γράφημα." #: scene/animation/animation_tree.cpp -#, fuzzy msgid "Path to an AnimationPlayer node containing animations is not set." -msgstr "" -"Επιλέξτε ένα AnimationPlayer από την ιεραρχία της σκηνής για να " -"επεξεργαστείτε animations." +msgstr "Δεν έχει οριστεί διαδρομή σε AnimationPlayer με κινήσεις." #: scene/animation/animation_tree.cpp msgid "Path set for AnimationPlayer does not lead to an AnimationPlayer node." @@ -12572,9 +12629,8 @@ msgstr "" "Το όρισμα διαδρομής AnimationPlayer δεν οδηγεί σε κόμβο AnimationPlayer." #: scene/animation/animation_tree.cpp -#, fuzzy msgid "The AnimationPlayer root node is not a valid node." -msgstr "Το δέντρο κίνησης δεν είναι έγκυρο." +msgstr "Ο ριζικός κόμβος AnimationPlayer δεν είναι έγκυρος." #: scene/animation/animation_tree_player.cpp msgid "This node has been deprecated. Use AnimationTree instead." @@ -12592,18 +12648,16 @@ msgstr "" "RMB: Κατάργηση διαμόρφωσης" #: scene/gui/color_picker.cpp -#, fuzzy msgid "Pick a color from the editor window." -msgstr "Διαλέξτε ένα χρώμα από την οθόνη." +msgstr "Επιλέξτε ένα χρώμα από το παράθυρο επεξεργασίας." #: scene/gui/color_picker.cpp msgid "HSV" msgstr "HSV" #: scene/gui/color_picker.cpp -#, fuzzy msgid "Raw" -msgstr "Παρέκκλιση" +msgstr "Ωμό" #: scene/gui/color_picker.cpp msgid "Switch between hexadecimal and code values." @@ -12614,16 +12668,15 @@ msgid "Add current color as a preset." msgstr "Προσθήκη τρέχοντος χρώματος στα προκαθορισμένα." #: scene/gui/container.cpp -#, fuzzy msgid "" "Container by itself serves no purpose unless a script configures its " "children placement behavior.\n" "If you don't intend to add a script, use a plain Control node instead." msgstr "" -"Το Container από μόνο του δεν έχει κάποιο σκοπό αν κάποια δέσμη ενεργειών " +"Ένα Container μόνο του δεν έχει κάποια λειτουργία αν κάποια δέσμη ενεργειών " "δεν ορίσει την τοποθέτηση των παιδιών του.\n" -"Εάν δεν σκοπεύετε να προσθέσετε κάποια δέσμη ενεργειών, χρησιμοποιήστε ένα " -"απλό «Control»." +"Εάν δεν σκοπεύετε να προσθέσετε κάποια δέσμη ενεργειών, χρησιμοποιήστε ένα " +"απλό Control." #: scene/gui/control.cpp msgid "" @@ -12643,15 +12696,14 @@ msgid "Please Confirm..." msgstr "Παρακαλώ επιβεβαιώστε..." #: scene/gui/popup.cpp -#, fuzzy msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " "functions. Making them visible for editing is fine, but they will hide upon " "running." msgstr "" -"Οι κόμβοι τύπου Popup θα είναι κρυμμένοι από προεπιλογή, εκτός κι αν " -"καλέσετε την popup() ή καμία από τις συναρτήσεις popup*(). Το να τους κάνετε " -"ορατούς κατά την επεξεργασία, όμως, δεν είναι πρόβλημα." +"Τα αναδυόμενα στοιχεία (Popup) θα είναι κρυμμένα μέχρι την κλήση μιας από " +"τις συναρτήσεις popup*(). Η εμφάνιση τους για επεξεργασία είναι αποδεκτή, " +"αλλά θα εξαφανιστούν κατά την εκτέλεση." #: scene/gui/range.cpp msgid "If \"Exp Edit\" is enabled, \"Min Value\" must be greater than 0." @@ -12660,16 +12712,15 @@ msgstr "" "του 0." #: scene/gui/scroll_container.cpp -#, fuzzy msgid "" "ScrollContainer is intended to work with a single child control.\n" "Use a container as child (VBox, HBox, etc.), or a Control and set the custom " "minimum size manually." msgstr "" -"Το ScrollContainer είναι φτιαγμένο για να δουλεύει με ένα μόνο υπο-στοιχείο " -"control.\n" -"Χρησιμοποιήστε ένα Container ως παιδί (VBox, HBox, κτλ), ή ένα Control και " -"ορίστε το προσαρμοσμένο ελάχιστο μέγεθος χειροκίνητα." +"Το ScrollContainer είναι σχεδιασμένο να λειτουργεί με μοναδικό παιδί τύπου " +"Control.\n" +"Χρησιμοποιήστε ένα Container ως παιδί (VBox, HBox, κτλ), ή ένα Control με " +"προσαρμοσμένο ελάχιστο μέγεθος." #: scene/gui/tree.cpp msgid "(Other)" @@ -12696,19 +12747,16 @@ msgstr "" "έναν κόμβο για απεικόνιση." #: scene/resources/visual_shader_nodes.cpp -#, fuzzy msgid "Invalid source for preview." -msgstr "Μη έγκυρη πηγή!" +msgstr "Άκυρη πηγή για προεπισκόπηση." #: scene/resources/visual_shader_nodes.cpp -#, fuzzy msgid "Invalid source for shader." -msgstr "Μη έγκυρη πηγή!" +msgstr "Άκυρη πηγή προγράμματος σκίασης." #: scene/resources/visual_shader_nodes.cpp -#, fuzzy msgid "Invalid comparison function for that type." -msgstr "Μη έγκυρη πηγή!" +msgstr "Άκυρη συνάρτηση σύγκρισης για αυτόν τον τύπο." #: servers/visual/shader_language.cpp msgid "Assignment to function." @@ -12726,6 +12774,15 @@ msgstr "Τα «varying» μπορούν να ανατεθούν μόνο στη� msgid "Constants cannot be modified." msgstr "Οι σταθερές δεν μπορούν να τροποποιηθούν." +#~ msgid "Replaced %d occurrence(s)." +#~ msgstr "Αντικαταστάθηκαν %d εμφανίσεις." + +#~ msgid "Create Static Convex Body" +#~ msgstr "Δημιουργία στατικού κυρτού σώματος" + +#~ msgid "Failed creating shapes!" +#~ msgstr "Αποτυχία δημιουργίας σχημάτων!" + #~ msgid "" #~ "There are currently no tutorials for this class, you can [color=$color]" #~ "[url=$url]contribute one[/url][/color] or [color=$color][url=" diff --git a/editor/translations/eo.po b/editor/translations/eo.po index f8818961c6..37f49a4908 100644 --- a/editor/translations/eo.po +++ b/editor/translations/eo.po @@ -690,8 +690,9 @@ msgid "Line Number:" msgstr "Lineo-Numeron:" #: editor/code_editor.cpp -msgid "Replaced %d occurrence(s)." -msgstr "Anstataŭigis %d apero(j)n." +#, fuzzy +msgid "%d replaced." +msgstr "Anstataŭigi..." #: editor/code_editor.cpp editor/editor_help.cpp #, fuzzy @@ -3899,15 +3900,16 @@ msgid "Saving..." msgstr "" #: editor/import_dock.cpp -msgid "Set as Default for '%s'" -msgstr "" +#, fuzzy +msgid "%d Files" +msgstr "Trovi en dosierojn" #: editor/import_dock.cpp -msgid "Clear Default for '%s'" +msgid "Set as Default for '%s'" msgstr "" #: editor/import_dock.cpp -msgid " Files" +msgid "Clear Default for '%s'" msgstr "" #: editor/import_dock.cpp @@ -5747,11 +5749,12 @@ msgid "Mesh is empty!" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Trimesh Body" -msgstr "" +#, fuzzy +msgid "Couldn't create a Trimesh collision shape." +msgstr "Ne povis krei dosierujon." #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Convex Body" +msgid "Create Static Trimesh Body" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -5763,11 +5766,28 @@ msgid "Create Trimesh Static Shape" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Failed creating shapes!" +msgid "Can't create a single convex collision shape for the scene root." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Convex Shape(s)" +msgid "Couldn't create a single convex collision shape." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Single Convex Shape" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Can't create multiple convex collision shapes for the scene root." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Couldn't create any collision shapes." +msgstr "Ne povis krei dosierujon." + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Multiple Convex Shapes" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -5819,11 +5839,40 @@ msgid "Create Trimesh Static Body" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a StaticBody and assigns a polygon-based collision shape to it " +"automatically.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Collision Sibling" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Convex Collision Sibling(s)" +msgid "" +"Creates a polygon-based collision shape.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Single Convex Collision Siblings" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a single convex collision shape.\n" +"This is the fastest (but least accurate) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Multiple Convex Collision Siblings" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a polygon-based collision shape.\n" +"This is a performance middle-ground between the two above options." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -5831,6 +5880,14 @@ msgid "Create Outline Mesh..." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a static outline mesh. The outline mesh will have its normals " +"flipped automatically.\n" +"This can be used instead of the SpatialMaterial Grow property when using " +"that property isn't possible." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "View UV1" msgstr "" @@ -8203,7 +8260,7 @@ msgstr "" msgid "No VCS addons are available." msgstr "" -#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Error" msgstr "" @@ -9294,11 +9351,16 @@ msgid "Export With Debug" msgstr "" #: editor/project_manager.cpp -msgid "The path does not exist." +msgid "The path specified doesn't exist." msgstr "" #: editor/project_manager.cpp -msgid "Invalid '.zip' project file, does not contain a 'project.godot' file." +msgid "Error opening package file (it's not in ZIP format)." +msgstr "" + +#: editor/project_manager.cpp +msgid "" +"Invalid \".zip\" project file; it doesn't contain a \"project.godot\" file." msgstr "" #: editor/project_manager.cpp @@ -9306,11 +9368,11 @@ msgid "Please choose an empty folder." msgstr "Bonvolu, elektu malplenan dosierujon." #: editor/project_manager.cpp -msgid "Please choose a 'project.godot' or '.zip' file." +msgid "Please choose a \"project.godot\" or \".zip\" file." msgstr "" #: editor/project_manager.cpp -msgid "Directory already contains a Godot project." +msgid "This directory already contains a Godot project." msgstr "" #: editor/project_manager.cpp @@ -9971,6 +10033,10 @@ msgid "Suffix" msgstr "" #: editor/rename_dialog.cpp +msgid "Use Regular Expressions" +msgstr "" + +#: editor/rename_dialog.cpp msgid "Advanced Options" msgstr "" @@ -10005,7 +10071,7 @@ msgid "" msgstr "" #: editor/rename_dialog.cpp -msgid "Per Level counter" +msgid "Per-level Counter" msgstr "" #: editor/rename_dialog.cpp @@ -10035,10 +10101,6 @@ msgid "" msgstr "" #: editor/rename_dialog.cpp -msgid "Regular Expressions" -msgstr "" - -#: editor/rename_dialog.cpp msgid "Post-Process" msgstr "" @@ -10047,11 +10109,11 @@ msgid "Keep" msgstr "" #: editor/rename_dialog.cpp -msgid "CamelCase to under_scored" +msgid "PascalCase to snake_case" msgstr "" #: editor/rename_dialog.cpp -msgid "under_scored to CamelCase" +msgid "snake_case to PascalCase" msgstr "" #: editor/rename_dialog.cpp @@ -10070,6 +10132,14 @@ msgstr "" msgid "Reset" msgstr "" +#: editor/rename_dialog.cpp +msgid "Regular Expression Error" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "At character %s" +msgstr "" + #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "" @@ -10511,7 +10581,7 @@ msgid "Invalid inherited parent name or path." msgstr "" #: editor/script_create_dialog.cpp -msgid "Script is valid." +msgid "Script path/name is valid." msgstr "" #: editor/script_create_dialog.cpp @@ -10610,6 +10680,10 @@ msgid "Copy Error" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Video RAM" +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Skip Breakpoints" msgstr "" @@ -10658,10 +10732,6 @@ msgid "Total:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Video Mem" -msgstr "" - -#: editor/script_editor_debugger.cpp msgid "Resource Path" msgstr "" @@ -12192,6 +12262,9 @@ msgstr "" msgid "Constants cannot be modified." msgstr "" +#~ msgid "Replaced %d occurrence(s)." +#~ msgstr "Anstataŭigis %d apero(j)n." + #, fuzzy #~ msgid "Brief Description" #~ msgstr "Priskribo:" diff --git a/editor/translations/es.po b/editor/translations/es.po index 7ae1e60572..80e0f9240c 100644 --- a/editor/translations/es.po +++ b/editor/translations/es.po @@ -42,11 +42,12 @@ # roger <616steam@gmail.com>, 2019. # Dario <darlex259@gmail.com>, 2019. # Adolfo Jayme Barrientos <fitojb@ubuntu.com>, 2019. +# Julián Luini <jluini@gmail.com>, 2020. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2020-01-27 07:09+0000\n" +"PO-Revision-Date: 2020-02-04 21:53+0000\n" "Last-Translator: Javier Ocampos <xavier.ocampos@gmail.com>\n" "Language-Team: Spanish <https://hosted.weblate.org/projects/godot-engine/" "godot/es/>\n" @@ -729,8 +730,9 @@ msgid "Line Number:" msgstr "Número de Línea:" #: editor/code_editor.cpp -msgid "Replaced %d occurrence(s)." -msgstr "%d ocurrencia(s) reemplazada(s)." +#, fuzzy +msgid "%d replaced." +msgstr "Reemplazar..." #: editor/code_editor.cpp editor/editor_help.cpp msgid "%d match." @@ -4022,6 +4024,10 @@ msgid "Saving..." msgstr "Guardando..." #: editor/import_dock.cpp +msgid "%d Files" +msgstr "%d archivos" + +#: editor/import_dock.cpp msgid "Set as Default for '%s'" msgstr "Establecer como predeterminado para '%s'" @@ -4030,10 +4036,6 @@ msgid "Clear Default for '%s'" msgstr "Restablecer Predeterminado para '%s'" #: editor/import_dock.cpp -msgid " Files" -msgstr " Archivos" - -#: editor/import_dock.cpp msgid "Import As:" msgstr "Importar como:" @@ -5912,12 +5914,13 @@ msgid "Mesh is empty!" msgstr "¡El Mesh está vacío!" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Trimesh Body" -msgstr "Crear StaticBody Triangular" +#, fuzzy +msgid "Couldn't create a Trimesh collision shape." +msgstr "Crear Collider Triangular Hermano" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Convex Body" -msgstr "Crear Static Convex Body" +msgid "Create Static Trimesh Body" +msgstr "Crear StaticBody Triangular" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "This doesn't work on scene root!" @@ -5928,11 +5931,30 @@ msgid "Create Trimesh Static Shape" msgstr "Crear Shape Estático Triangular" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Failed creating shapes!" -msgstr "¡Falló en la creación de los shapes!" +msgid "Can't create a single convex collision shape for the scene root." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Couldn't create a single convex collision shape." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Create Single Convex Shape" +msgstr "Crear Shape(s) Convexo(s)" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Can't create multiple convex collision shapes for the scene root." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Couldn't create any collision shapes." +msgstr "No se pudo crear la carpeta." #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Convex Shape(s)" +#, fuzzy +msgid "Create Multiple Convex Shapes" msgstr "Crear Shape(s) Convexo(s)" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -5984,18 +6006,57 @@ msgid "Create Trimesh Static Body" msgstr "Crear StaticBody Triangular" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a StaticBody and assigns a polygon-based collision shape to it " +"automatically.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Collision Sibling" msgstr "Crear Collider Triangular Hermano" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Convex Collision Sibling(s)" +msgid "" +"Creates a polygon-based collision shape.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Create Single Convex Collision Siblings" msgstr "Crear Collider Convexo Hermano(s)" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a single convex collision shape.\n" +"This is the fastest (but least accurate) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Create Multiple Convex Collision Siblings" +msgstr "Crear Collider Convexo Hermano(s)" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a polygon-based collision shape.\n" +"This is a performance middle-ground between the two above options." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Outline Mesh..." msgstr "Crear Outline Mesh..." #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a static outline mesh. The outline mesh will have its normals " +"flipped automatically.\n" +"This can be used instead of the SpatialMaterial Grow property when using " +"that property isn't possible." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "View UV1" msgstr "Ver UV1" @@ -8407,7 +8468,7 @@ msgstr "TileSet" msgid "No VCS addons are available." msgstr "No hay addons de VCS disponibles." -#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Error" msgstr "Error" @@ -9578,11 +9639,19 @@ msgid "Export With Debug" msgstr "Exportar Con Depuración" #: editor/project_manager.cpp -msgid "The path does not exist." +#, fuzzy +msgid "The path specified doesn't exist." msgstr "La ruta no existe." #: editor/project_manager.cpp -msgid "Invalid '.zip' project file, does not contain a 'project.godot' file." +#, fuzzy +msgid "Error opening package file (it's not in ZIP format)." +msgstr "Error al abrir el archivo comprimido, no está en formato ZIP." + +#: editor/project_manager.cpp +#, fuzzy +msgid "" +"Invalid \".zip\" project file; it doesn't contain a \"project.godot\" file." msgstr "" "Archivo de projecto '.zip' inválido, no contiene un archivo 'project.godot'." @@ -9591,11 +9660,13 @@ msgid "Please choose an empty folder." msgstr "Por favor elija una carpeta vacía." #: editor/project_manager.cpp -msgid "Please choose a 'project.godot' or '.zip' file." +#, fuzzy +msgid "Please choose a \"project.godot\" or \".zip\" file." msgstr "Por favor selecciona un archivo 'project.godot' o '.zip'." #: editor/project_manager.cpp -msgid "Directory already contains a Godot project." +#, fuzzy +msgid "This directory already contains a Godot project." msgstr "El directorio ya contiene un proyecto de Godot." #: editor/project_manager.cpp @@ -10295,6 +10366,11 @@ msgid "Suffix" msgstr "Sufijo" #: editor/rename_dialog.cpp +#, fuzzy +msgid "Use Regular Expressions" +msgstr "Expresiones regulares" + +#: editor/rename_dialog.cpp msgid "Advanced Options" msgstr "Opciones Avanzadas" @@ -10331,7 +10407,8 @@ msgstr "" "Comparar opciones de contador." #: editor/rename_dialog.cpp -msgid "Per Level counter" +#, fuzzy +msgid "Per-level Counter" msgstr "Contador por Nivel" #: editor/rename_dialog.cpp @@ -10363,10 +10440,6 @@ msgstr "" "Los dígitos faltantes serán rellenados con ceros al principio." #: editor/rename_dialog.cpp -msgid "Regular Expressions" -msgstr "Expresiones regulares" - -#: editor/rename_dialog.cpp msgid "Post-Process" msgstr "Post-Procesado" @@ -10375,11 +10448,13 @@ msgid "Keep" msgstr "Conservar" #: editor/rename_dialog.cpp -msgid "CamelCase to under_scored" +#, fuzzy +msgid "PascalCase to snake_case" msgstr "CamelCase a under_scored" #: editor/rename_dialog.cpp -msgid "under_scored to CamelCase" +#, fuzzy +msgid "snake_case to PascalCase" msgstr "under_scored a CamelCase" #: editor/rename_dialog.cpp @@ -10398,6 +10473,16 @@ msgstr "A mayúsculas" msgid "Reset" msgstr "Resetear" +#: editor/rename_dialog.cpp +#, fuzzy +msgid "Regular Expression Error" +msgstr "Expresiones regulares" + +#: editor/rename_dialog.cpp +#, fuzzy +msgid "At character %s" +msgstr "Caracteres válidos:" + #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "Reemparentar nodo" @@ -10863,7 +10948,8 @@ msgid "Invalid inherited parent name or path." msgstr "Nombre o ruta del padre heredado inválido." #: editor/script_create_dialog.cpp -msgid "Script is valid." +#, fuzzy +msgid "Script path/name is valid." msgstr "El script es válido." #: editor/script_create_dialog.cpp @@ -10955,6 +11041,11 @@ msgid "Copy Error" msgstr "Copiar Error" #: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Video RAM" +msgstr "Memoria de Vídeo" + +#: editor/script_editor_debugger.cpp msgid "Skip Breakpoints" msgstr "Saltar Breakpoints" @@ -11003,10 +11094,6 @@ msgid "Total:" msgstr "Total:" #: editor/script_editor_debugger.cpp -msgid "Video Mem" -msgstr "Memoria de Vídeo" - -#: editor/script_editor_debugger.cpp msgid "Resource Path" msgstr "Ruta de Recursos" @@ -12716,6 +12803,15 @@ msgstr "Solo se pueden asignar variaciones en funciones de vértice." msgid "Constants cannot be modified." msgstr "Las constantes no pueden modificarse." +#~ msgid "Replaced %d occurrence(s)." +#~ msgstr "%d ocurrencia(s) reemplazada(s)." + +#~ msgid "Create Static Convex Body" +#~ msgstr "Crear Static Convex Body" + +#~ msgid "Failed creating shapes!" +#~ msgstr "¡Falló en la creación de los shapes!" + #~ msgid "" #~ "There are currently no tutorials for this class, you can [color=$color]" #~ "[url=$url]contribute one[/url][/color] or [color=$color][url=" diff --git a/editor/translations/es_AR.po b/editor/translations/es_AR.po index c367f694c1..e7aa5cb780 100644 --- a/editor/translations/es_AR.po +++ b/editor/translations/es_AR.po @@ -11,15 +11,15 @@ # Javier Ocampos <xavier.ocampos@gmail.com>, 2018, 2019, 2020. # Andrés S <andres.segovia.dev@gmail.com>, 2019. # Florencia Menéndez <mariaflormz2@gmail.com>, 2019. -# roger <616steam@gmail.com>, 2019. +# roger <616steam@gmail.com>, 2019, 2020. # Francisco José Carllinni <panchopepe@protonmail.com>, 2019. # Nicolas Zirulnik <nicolaszirulnik@gmail.com>, 2020. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2020-01-27 07:09+0000\n" -"Last-Translator: Javier Ocampos <xavier.ocampos@gmail.com>\n" +"PO-Revision-Date: 2020-02-18 15:09+0000\n" +"Last-Translator: Lisandro Lorea <lisandrolorea@gmail.com>\n" "Language-Team: Spanish (Argentina) <https://hosted.weblate.org/projects/" "godot-engine/godot/es_AR/>\n" "Language: es_AR\n" @@ -27,7 +27,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 3.11-dev\n" +"X-Generator: Weblate 3.11\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -681,7 +681,7 @@ msgstr "Cambiar Offset Final de Clip de Pista de Audio" #: editor/array_property_edit.cpp msgid "Resize Array" -msgstr "Redimencionar Array" +msgstr "Redimensionar Array" #: editor/array_property_edit.cpp msgid "Change Array Value Type" @@ -700,8 +700,8 @@ msgid "Line Number:" msgstr "Numero de Línea:" #: editor/code_editor.cpp -msgid "Replaced %d occurrence(s)." -msgstr "%d ocurrencia(s) Reemplazadas." +msgid "%d replaced." +msgstr "%d reemplazadas." #: editor/code_editor.cpp editor/editor_help.cpp msgid "%d match." @@ -3987,6 +3987,10 @@ msgid "Saving..." msgstr "Guardando..." #: editor/import_dock.cpp +msgid "%d Files" +msgstr "%d Archivos" + +#: editor/import_dock.cpp msgid "Set as Default for '%s'" msgstr "Asignar como Predeterminado para '%s'" @@ -3995,10 +3999,6 @@ msgid "Clear Default for '%s'" msgstr "Restablecer Predeterminados para '%s'" #: editor/import_dock.cpp -msgid " Files" -msgstr " Archivos" - -#: editor/import_dock.cpp msgid "Import As:" msgstr "Importar Como:" @@ -5878,12 +5878,12 @@ msgid "Mesh is empty!" msgstr "¡El Mesh está vacío!" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Trimesh Body" -msgstr "Crear Static Trimesh Body" +msgid "Couldn't create a Trimesh collision shape." +msgstr "No se pudo crear una forma de colisión Trimersh." #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Convex Body" -msgstr "Crear Static Convex Body" +msgid "Create Static Trimesh Body" +msgstr "Crear Static Trimesh Body" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "This doesn't work on scene root!" @@ -5894,12 +5894,31 @@ msgid "Create Trimesh Static Shape" msgstr "Crear Trimesh Static Shape" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Failed creating shapes!" -msgstr "¡Fallo al crear shapes!" +msgid "Can't create a single convex collision shape for the scene root." +msgstr "" +"No se pudo crear una única forma de colisión convexa para la raíz de escena." + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Couldn't create a single convex collision shape." +msgstr "No se pudo crear una forma de colisión única." + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Single Convex Shape" +msgstr "Crear Forma Convexa Unica" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Can't create multiple convex collision shapes for the scene root." +msgstr "" +"No se pudo crear múltiples formas de colisión convexas para la raíz de " +"escena." #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Convex Shape(s)" -msgstr "Crear Shape(s) Convexo(s)" +msgid "Couldn't create any collision shapes." +msgstr "No se pudo crear ninguna forma de colisión." + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Multiple Convex Shapes" +msgstr "Crear Múltiples Formas Convexas" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Navigation Mesh" @@ -5950,18 +5969,68 @@ msgid "Create Trimesh Static Body" msgstr "Crear StaticBody Triangular" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a StaticBody and assigns a polygon-based collision shape to it " +"automatically.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" +"Crea un StaticBody y le asigna automáticamente una forma de colisión basada " +"en polígonos .\n" +"Esta es la opción mas exacta (pero más lenta) de detección de colisiones." + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Collision Sibling" msgstr "Crear Collider Triangular Hermano" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Convex Collision Sibling(s)" -msgstr "Crear Collider Convexo Hermano(s)" +msgid "" +"Creates a polygon-based collision shape.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" +"Crea una forma de colisión basada en polígonos.\n" +"Esta es la opción mas exacta (pero más lenta) de detección de colisiones." + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Single Convex Collision Siblings" +msgstr "Crear Colisión Convexa Unica como Nodo Hermano" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a single convex collision shape.\n" +"This is the fastest (but least accurate) option for collision detection." +msgstr "" +"Crear forma de colisión convexa única.\n" +"Esta es la opción mas rápida (pero menos exacta) para detectar colisiones." + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Multiple Convex Collision Siblings" +msgstr "Crear Múltiples Colisiones Convexas como Nodos Hermanos" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a polygon-based collision shape.\n" +"This is a performance middle-ground between the two above options." +msgstr "" +"Crea una forma de colisión basada en polígonos.\n" +"Esto está en un punto medio de rendimiento entre las dos opciones de arriba." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Outline Mesh..." msgstr "Crear Outline Mesh..." #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a static outline mesh. The outline mesh will have its normals " +"flipped automatically.\n" +"This can be used instead of the SpatialMaterial Grow property when using " +"that property isn't possible." +msgstr "" +"Crea un mesh de contorno estático. Este mesh de contorno tendrá sus normales " +"invertidas automáticamente.\n" +"Esto puede ser usado en vez de la propiedad Grow del SpatialMaterial cuando " +"no sea posible usar dicha propiedad." + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "View UV1" msgstr "Ver UV1" @@ -6646,7 +6715,7 @@ msgstr "El script falló al recargar, revisá errores en la consola." #: editor/plugins/script_editor_plugin.cpp msgid "Script is not in tool mode, will not be able to run." -msgstr "Es script no esta en modo tool, no sera posible ejecutarlo." +msgstr "El script no esta en modo tool, no sera posible ejecutarlo." #: editor/plugins/script_editor_plugin.cpp msgid "" @@ -8372,7 +8441,7 @@ msgstr "TileSet" msgid "No VCS addons are available." msgstr "No hay addons de VCS disponibles." -#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Error" msgstr "Error" @@ -9543,24 +9612,30 @@ msgid "Export With Debug" msgstr "Exportar Con Depuración" #: editor/project_manager.cpp -msgid "The path does not exist." -msgstr "La ruta no existe." +msgid "The path specified doesn't exist." +msgstr "La ruta especificada no existe." + +#: editor/project_manager.cpp +msgid "Error opening package file (it's not in ZIP format)." +msgstr "Error al abrir el archivo de paquete (no esta en formato ZIP)." #: editor/project_manager.cpp -msgid "Invalid '.zip' project file, does not contain a 'project.godot' file." +msgid "" +"Invalid \".zip\" project file; it doesn't contain a \"project.godot\" file." msgstr "" -"Archivo de projecto '.zip' inválido, no contiene un archivo 'project.godot'." +"Archivo de projecto \".zip\" inválido; no contiene un archivo \"project.godot" +"\"." #: editor/project_manager.cpp msgid "Please choose an empty folder." msgstr "Por favor elegí una carpeta vacía." #: editor/project_manager.cpp -msgid "Please choose a 'project.godot' or '.zip' file." -msgstr "Por favor elegí un archivo 'project.godot' o '.zip'." +msgid "Please choose a \"project.godot\" or \".zip\" file." +msgstr "Por favor elegí un archivo \"project.godot\" o \".zip\"." #: editor/project_manager.cpp -msgid "Directory already contains a Godot project." +msgid "This directory already contains a Godot project." msgstr "El directorio ya contiene un proyecto de Godot." #: editor/project_manager.cpp @@ -10261,6 +10336,10 @@ msgid "Suffix" msgstr "Sufijo" #: editor/rename_dialog.cpp +msgid "Use Regular Expressions" +msgstr "Usar Expresiones Regulares" + +#: editor/rename_dialog.cpp msgid "Advanced Options" msgstr "Opciones Avanzadas" @@ -10297,8 +10376,8 @@ msgstr "" "Comparar opciones de contador." #: editor/rename_dialog.cpp -msgid "Per Level counter" -msgstr "Contador por nivel" +msgid "Per-level Counter" +msgstr "Contador Por Nivel" #: editor/rename_dialog.cpp msgid "If set the counter restarts for each group of child nodes" @@ -10329,10 +10408,6 @@ msgstr "" "Los dígitos faltantes serán rellenados con ceros al principio." #: editor/rename_dialog.cpp -msgid "Regular Expressions" -msgstr "Expresiones Regulares" - -#: editor/rename_dialog.cpp msgid "Post-Process" msgstr "Post-Procesado" @@ -10341,12 +10416,12 @@ msgid "Keep" msgstr "Conservar" #: editor/rename_dialog.cpp -msgid "CamelCase to under_scored" -msgstr "CamelCase a under_scored" +msgid "PascalCase to snake_case" +msgstr "PascalCase a snake_case" #: editor/rename_dialog.cpp -msgid "under_scored to CamelCase" -msgstr "under_scored a CamelCase" +msgid "snake_case to PascalCase" +msgstr "snake_case a PascalCase" #: editor/rename_dialog.cpp msgid "Case" @@ -10364,6 +10439,14 @@ msgstr "A Mayúsculas" msgid "Reset" msgstr "Resetear" +#: editor/rename_dialog.cpp +msgid "Regular Expression Error" +msgstr "Error de Expresión Regular" + +#: editor/rename_dialog.cpp +msgid "At character %s" +msgstr "En el caracter %s" + #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "Reemparentar Nodo" @@ -10830,8 +10913,8 @@ msgid "Invalid inherited parent name or path." msgstr "Ruta o nombre del padre heredado inválido." #: editor/script_create_dialog.cpp -msgid "Script is valid." -msgstr "El script es válido." +msgid "Script path/name is valid." +msgstr "La ruta/nombre del script es inválida." #: editor/script_create_dialog.cpp msgid "Allowed: a-z, A-Z, 0-9, _ and ." @@ -10922,6 +11005,10 @@ msgid "Copy Error" msgstr "Copiar Error" #: editor/script_editor_debugger.cpp +msgid "Video RAM" +msgstr "Mem. de Video" + +#: editor/script_editor_debugger.cpp msgid "Skip Breakpoints" msgstr "Saltear Breakpoints" @@ -10970,10 +11057,6 @@ msgid "Total:" msgstr "Total:" #: editor/script_editor_debugger.cpp -msgid "Video Mem" -msgstr "Mem. de Video" - -#: editor/script_editor_debugger.cpp msgid "Resource Path" msgstr "Ruta de Recursos" @@ -12675,6 +12758,15 @@ msgstr "Solo se pueden asignar variaciones en funciones de vértice." msgid "Constants cannot be modified." msgstr "Las constantes no pueden modificarse." +#~ msgid "Replaced %d occurrence(s)." +#~ msgstr "%d ocurrencia(s) Reemplazadas." + +#~ msgid "Create Static Convex Body" +#~ msgstr "Crear Static Convex Body" + +#~ msgid "Failed creating shapes!" +#~ msgstr "¡Fallo al crear shapes!" + #~ msgid "" #~ "There are currently no tutorials for this class, you can [color=$color]" #~ "[url=$url]contribute one[/url][/color] or [color=$color][url=" diff --git a/editor/translations/et.po b/editor/translations/et.po index 1db95acc83..059a200138 100644 --- a/editor/translations/et.po +++ b/editor/translations/et.po @@ -669,7 +669,7 @@ msgid "Line Number:" msgstr "" #: editor/code_editor.cpp -msgid "Replaced %d occurrence(s)." +msgid "%d replaced." msgstr "" #: editor/code_editor.cpp editor/editor_help.cpp @@ -3810,15 +3810,15 @@ msgid "Saving..." msgstr "" #: editor/import_dock.cpp -msgid "Set as Default for '%s'" +msgid "%d Files" msgstr "" #: editor/import_dock.cpp -msgid "Clear Default for '%s'" +msgid "Set as Default for '%s'" msgstr "" #: editor/import_dock.cpp -msgid " Files" +msgid "Clear Default for '%s'" msgstr "" #: editor/import_dock.cpp @@ -5653,11 +5653,11 @@ msgid "Mesh is empty!" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Trimesh Body" +msgid "Couldn't create a Trimesh collision shape." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Convex Body" +msgid "Create Static Trimesh Body" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -5669,11 +5669,27 @@ msgid "Create Trimesh Static Shape" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Failed creating shapes!" +msgid "Can't create a single convex collision shape for the scene root." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Couldn't create a single convex collision shape." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Single Convex Shape" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Can't create multiple convex collision shapes for the scene root." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Couldn't create any collision shapes." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Convex Shape(s)" +msgid "Create Multiple Convex Shapes" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -5725,11 +5741,40 @@ msgid "Create Trimesh Static Body" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a StaticBody and assigns a polygon-based collision shape to it " +"automatically.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Collision Sibling" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Convex Collision Sibling(s)" +msgid "" +"Creates a polygon-based collision shape.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Single Convex Collision Siblings" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a single convex collision shape.\n" +"This is the fastest (but least accurate) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Multiple Convex Collision Siblings" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a polygon-based collision shape.\n" +"This is a performance middle-ground between the two above options." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -5737,6 +5782,14 @@ msgid "Create Outline Mesh..." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a static outline mesh. The outline mesh will have its normals " +"flipped automatically.\n" +"This can be used instead of the SpatialMaterial Grow property when using " +"that property isn't possible." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "View UV1" msgstr "" @@ -8102,7 +8155,7 @@ msgstr "" msgid "No VCS addons are available." msgstr "" -#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Error" msgstr "" @@ -9189,11 +9242,16 @@ msgid "Export With Debug" msgstr "" #: editor/project_manager.cpp -msgid "The path does not exist." +msgid "The path specified doesn't exist." +msgstr "" + +#: editor/project_manager.cpp +msgid "Error opening package file (it's not in ZIP format)." msgstr "" #: editor/project_manager.cpp -msgid "Invalid '.zip' project file, does not contain a 'project.godot' file." +msgid "" +"Invalid \".zip\" project file; it doesn't contain a \"project.godot\" file." msgstr "" #: editor/project_manager.cpp @@ -9201,11 +9259,11 @@ msgid "Please choose an empty folder." msgstr "" #: editor/project_manager.cpp -msgid "Please choose a 'project.godot' or '.zip' file." +msgid "Please choose a \"project.godot\" or \".zip\" file." msgstr "" #: editor/project_manager.cpp -msgid "Directory already contains a Godot project." +msgid "This directory already contains a Godot project." msgstr "" #: editor/project_manager.cpp @@ -9851,6 +9909,10 @@ msgid "Suffix" msgstr "" #: editor/rename_dialog.cpp +msgid "Use Regular Expressions" +msgstr "" + +#: editor/rename_dialog.cpp msgid "Advanced Options" msgstr "" @@ -9885,7 +9947,7 @@ msgid "" msgstr "" #: editor/rename_dialog.cpp -msgid "Per Level counter" +msgid "Per-level Counter" msgstr "" #: editor/rename_dialog.cpp @@ -9915,10 +9977,6 @@ msgid "" msgstr "" #: editor/rename_dialog.cpp -msgid "Regular Expressions" -msgstr "" - -#: editor/rename_dialog.cpp msgid "Post-Process" msgstr "" @@ -9927,11 +9985,11 @@ msgid "Keep" msgstr "" #: editor/rename_dialog.cpp -msgid "CamelCase to under_scored" +msgid "PascalCase to snake_case" msgstr "" #: editor/rename_dialog.cpp -msgid "under_scored to CamelCase" +msgid "snake_case to PascalCase" msgstr "" #: editor/rename_dialog.cpp @@ -9950,6 +10008,14 @@ msgstr "" msgid "Reset" msgstr "" +#: editor/rename_dialog.cpp +msgid "Regular Expression Error" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "At character %s" +msgstr "" + #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "" @@ -10391,7 +10457,7 @@ msgid "Invalid inherited parent name or path." msgstr "" #: editor/script_create_dialog.cpp -msgid "Script is valid." +msgid "Script path/name is valid." msgstr "" #: editor/script_create_dialog.cpp @@ -10484,6 +10550,10 @@ msgid "Copy Error" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Video RAM" +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Skip Breakpoints" msgstr "" @@ -10532,10 +10602,6 @@ msgid "Total:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Video Mem" -msgstr "" - -#: editor/script_editor_debugger.cpp msgid "Resource Path" msgstr "" diff --git a/editor/translations/eu.po b/editor/translations/eu.po index b9a682553e..2829912826 100644 --- a/editor/translations/eu.po +++ b/editor/translations/eu.po @@ -666,7 +666,7 @@ msgid "Line Number:" msgstr "" #: editor/code_editor.cpp -msgid "Replaced %d occurrence(s)." +msgid "%d replaced." msgstr "" #: editor/code_editor.cpp editor/editor_help.cpp @@ -3802,15 +3802,15 @@ msgid "Saving..." msgstr "" #: editor/import_dock.cpp -msgid "Set as Default for '%s'" +msgid "%d Files" msgstr "" #: editor/import_dock.cpp -msgid "Clear Default for '%s'" +msgid "Set as Default for '%s'" msgstr "" #: editor/import_dock.cpp -msgid " Files" +msgid "Clear Default for '%s'" msgstr "" #: editor/import_dock.cpp @@ -5639,11 +5639,11 @@ msgid "Mesh is empty!" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Trimesh Body" +msgid "Couldn't create a Trimesh collision shape." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Convex Body" +msgid "Create Static Trimesh Body" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -5655,11 +5655,27 @@ msgid "Create Trimesh Static Shape" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Failed creating shapes!" +msgid "Can't create a single convex collision shape for the scene root." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Couldn't create a single convex collision shape." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Single Convex Shape" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Can't create multiple convex collision shapes for the scene root." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Couldn't create any collision shapes." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Convex Shape(s)" +msgid "Create Multiple Convex Shapes" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -5711,11 +5727,40 @@ msgid "Create Trimesh Static Body" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a StaticBody and assigns a polygon-based collision shape to it " +"automatically.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Collision Sibling" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Convex Collision Sibling(s)" +msgid "" +"Creates a polygon-based collision shape.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Single Convex Collision Siblings" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a single convex collision shape.\n" +"This is the fastest (but least accurate) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Multiple Convex Collision Siblings" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a polygon-based collision shape.\n" +"This is a performance middle-ground between the two above options." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -5723,6 +5768,14 @@ msgid "Create Outline Mesh..." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a static outline mesh. The outline mesh will have its normals " +"flipped automatically.\n" +"This can be used instead of the SpatialMaterial Grow property when using " +"that property isn't possible." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "View UV1" msgstr "" @@ -8087,7 +8140,7 @@ msgstr "" msgid "No VCS addons are available." msgstr "" -#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Error" msgstr "" @@ -9171,11 +9224,16 @@ msgid "Export With Debug" msgstr "" #: editor/project_manager.cpp -msgid "The path does not exist." +msgid "The path specified doesn't exist." +msgstr "" + +#: editor/project_manager.cpp +msgid "Error opening package file (it's not in ZIP format)." msgstr "" #: editor/project_manager.cpp -msgid "Invalid '.zip' project file, does not contain a 'project.godot' file." +msgid "" +"Invalid \".zip\" project file; it doesn't contain a \"project.godot\" file." msgstr "" #: editor/project_manager.cpp @@ -9183,11 +9241,11 @@ msgid "Please choose an empty folder." msgstr "" #: editor/project_manager.cpp -msgid "Please choose a 'project.godot' or '.zip' file." +msgid "Please choose a \"project.godot\" or \".zip\" file." msgstr "" #: editor/project_manager.cpp -msgid "Directory already contains a Godot project." +msgid "This directory already contains a Godot project." msgstr "" #: editor/project_manager.cpp @@ -9833,6 +9891,10 @@ msgid "Suffix" msgstr "" #: editor/rename_dialog.cpp +msgid "Use Regular Expressions" +msgstr "" + +#: editor/rename_dialog.cpp msgid "Advanced Options" msgstr "" @@ -9867,7 +9929,7 @@ msgid "" msgstr "" #: editor/rename_dialog.cpp -msgid "Per Level counter" +msgid "Per-level Counter" msgstr "" #: editor/rename_dialog.cpp @@ -9897,10 +9959,6 @@ msgid "" msgstr "" #: editor/rename_dialog.cpp -msgid "Regular Expressions" -msgstr "" - -#: editor/rename_dialog.cpp msgid "Post-Process" msgstr "" @@ -9909,11 +9967,11 @@ msgid "Keep" msgstr "" #: editor/rename_dialog.cpp -msgid "CamelCase to under_scored" +msgid "PascalCase to snake_case" msgstr "" #: editor/rename_dialog.cpp -msgid "under_scored to CamelCase" +msgid "snake_case to PascalCase" msgstr "" #: editor/rename_dialog.cpp @@ -9932,6 +9990,14 @@ msgstr "" msgid "Reset" msgstr "" +#: editor/rename_dialog.cpp +msgid "Regular Expression Error" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "At character %s" +msgstr "" + #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "" @@ -10371,7 +10437,7 @@ msgid "Invalid inherited parent name or path." msgstr "" #: editor/script_create_dialog.cpp -msgid "Script is valid." +msgid "Script path/name is valid." msgstr "" #: editor/script_create_dialog.cpp @@ -10463,6 +10529,10 @@ msgid "Copy Error" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Video RAM" +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Skip Breakpoints" msgstr "" @@ -10511,10 +10581,6 @@ msgid "Total:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Video Mem" -msgstr "" - -#: editor/script_editor_debugger.cpp msgid "Resource Path" msgstr "" diff --git a/editor/translations/fa.po b/editor/translations/fa.po index 5d071126c6..377bbfbb67 100644 --- a/editor/translations/fa.po +++ b/editor/translations/fa.po @@ -712,8 +712,9 @@ msgid "Line Number:" msgstr "شماره خط:" #: editor/code_editor.cpp -msgid "Replaced %d occurrence(s)." -msgstr "تعداد d% رخداد جایگزین شد." +#, fuzzy +msgid "%d replaced." +msgstr "جایگزینی" #: editor/code_editor.cpp editor/editor_help.cpp msgid "%d match." @@ -4039,6 +4040,11 @@ msgid "Saving..." msgstr "" #: editor/import_dock.cpp +#, fuzzy +msgid "%d Files" +msgstr " پوشه ها" + +#: editor/import_dock.cpp msgid "Set as Default for '%s'" msgstr "" @@ -4047,10 +4053,6 @@ msgid "Clear Default for '%s'" msgstr "" #: editor/import_dock.cpp -msgid " Files" -msgstr " پوشه ها" - -#: editor/import_dock.cpp msgid "Import As:" msgstr "" @@ -5992,11 +5994,12 @@ msgid "Mesh is empty!" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Trimesh Body" -msgstr "" +#, fuzzy +msgid "Couldn't create a Trimesh collision shape." +msgstr "ناتوان در ساختن پوشه." #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Convex Body" +msgid "Create Static Trimesh Body" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -6008,12 +6011,30 @@ msgid "Create Trimesh Static Shape" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Failed creating shapes!" +msgid "Can't create a single convex collision shape for the scene root." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Couldn't create a single convex collision shape." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp #, fuzzy -msgid "Create Convex Shape(s)" +msgid "Create Single Convex Shape" +msgstr "ساختن %s جدید" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Can't create multiple convex collision shapes for the scene root." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Couldn't create any collision shapes." +msgstr "ناتوان در ساختن پوشه." + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Create Multiple Convex Shapes" msgstr "ساختن %s جدید" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -6065,19 +6086,57 @@ msgid "Create Trimesh Static Body" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a StaticBody and assigns a polygon-based collision shape to it " +"automatically.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Collision Sibling" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a polygon-based collision shape.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp #, fuzzy -msgid "Create Convex Collision Sibling(s)" +msgid "Create Single Convex Collision Siblings" msgstr "انتخاب شده را تغییر مقیاس بده" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a single convex collision shape.\n" +"This is the fastest (but least accurate) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Create Multiple Convex Collision Siblings" +msgstr "انتخاب شده را تغییر مقیاس بده" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a polygon-based collision shape.\n" +"This is a performance middle-ground between the two above options." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Outline Mesh..." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a static outline mesh. The outline mesh will have its normals " +"flipped automatically.\n" +"This can be used instead of the SpatialMaterial Grow property when using " +"that property isn't possible." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp #, fuzzy msgid "View UV1" msgstr "پرونده:" @@ -8608,7 +8667,7 @@ msgstr "صدور مجموعه کاشی" msgid "No VCS addons are available." msgstr "" -#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Error" msgstr "" @@ -9747,11 +9806,16 @@ msgstr "صدور با اشکال زدا" #: editor/project_manager.cpp #, fuzzy -msgid "The path does not exist." +msgid "The path specified doesn't exist." msgstr "پرونده موجود نیست." #: editor/project_manager.cpp -msgid "Invalid '.zip' project file, does not contain a 'project.godot' file." +msgid "Error opening package file (it's not in ZIP format)." +msgstr "" + +#: editor/project_manager.cpp +msgid "" +"Invalid \".zip\" project file; it doesn't contain a \"project.godot\" file." msgstr "" #: editor/project_manager.cpp @@ -9759,11 +9823,11 @@ msgid "Please choose an empty folder." msgstr "" #: editor/project_manager.cpp -msgid "Please choose a 'project.godot' or '.zip' file." +msgid "Please choose a \"project.godot\" or \".zip\" file." msgstr "" #: editor/project_manager.cpp -msgid "Directory already contains a Godot project." +msgid "This directory already contains a Godot project." msgstr "" #: editor/project_manager.cpp @@ -10438,6 +10502,11 @@ msgid "Suffix" msgstr "" #: editor/rename_dialog.cpp +#, fuzzy +msgid "Use Regular Expressions" +msgstr "انتقال را در انیمیشن تغییر بده" + +#: editor/rename_dialog.cpp msgid "Advanced Options" msgstr "" @@ -10475,7 +10544,7 @@ msgid "" msgstr "" #: editor/rename_dialog.cpp -msgid "Per Level counter" +msgid "Per-level Counter" msgstr "" #: editor/rename_dialog.cpp @@ -10506,11 +10575,6 @@ msgid "" msgstr "" #: editor/rename_dialog.cpp -#, fuzzy -msgid "Regular Expressions" -msgstr "انتقال را در انیمیشن تغییر بده" - -#: editor/rename_dialog.cpp msgid "Post-Process" msgstr "" @@ -10519,11 +10583,11 @@ msgid "Keep" msgstr "" #: editor/rename_dialog.cpp -msgid "CamelCase to under_scored" +msgid "PascalCase to snake_case" msgstr "" #: editor/rename_dialog.cpp -msgid "under_scored to CamelCase" +msgid "snake_case to PascalCase" msgstr "" #: editor/rename_dialog.cpp @@ -10544,6 +10608,16 @@ msgstr "" msgid "Reset" msgstr "بازنشانی بزرگنمایی" +#: editor/rename_dialog.cpp +#, fuzzy +msgid "Regular Expression Error" +msgstr "انتقال را در انیمیشن تغییر بده" + +#: editor/rename_dialog.cpp +#, fuzzy +msgid "At character %s" +msgstr "کاراکترهای معتبر:" + #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "گره تغییر والد" @@ -11018,7 +11092,7 @@ msgid "Invalid inherited parent name or path." msgstr "نام دارایی ایندکس نامعتبر." #: editor/script_create_dialog.cpp -msgid "Script is valid." +msgid "Script path/name is valid." msgstr "" #: editor/script_create_dialog.cpp @@ -11125,6 +11199,10 @@ msgid "Copy Error" msgstr "خطاهای بارگذاری" #: editor/script_editor_debugger.cpp +msgid "Video RAM" +msgstr "" + +#: editor/script_editor_debugger.cpp #, fuzzy msgid "Skip Breakpoints" msgstr "حذف کن" @@ -11175,10 +11253,6 @@ msgid "Total:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Video Mem" -msgstr "" - -#: editor/script_editor_debugger.cpp msgid "Resource Path" msgstr "" @@ -12850,6 +12924,9 @@ msgstr "" msgid "Constants cannot be modified." msgstr "" +#~ msgid "Replaced %d occurrence(s)." +#~ msgstr "تعداد d% رخداد جایگزین شد." + #, fuzzy #~ msgid "Brief Description" #~ msgstr "خلاصه توضیحات:" diff --git a/editor/translations/fi.po b/editor/translations/fi.po index bac46bbf8b..d8fa02de0f 100644 --- a/editor/translations/fi.po +++ b/editor/translations/fi.po @@ -14,7 +14,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2020-01-27 07:10+0000\n" +"PO-Revision-Date: 2020-02-16 15:21+0000\n" "Last-Translator: Tapani Niemi <tapani.niemi@kapsi.fi>\n" "Language-Team: Finnish <https://hosted.weblate.org/projects/godot-engine/" "godot/fi/>\n" @@ -687,8 +687,8 @@ msgid "Line Number:" msgstr "Rivinumero:" #: editor/code_editor.cpp -msgid "Replaced %d occurrence(s)." -msgstr "Korvattu %d osuvuutta." +msgid "%d replaced." +msgstr "%d korvattu." #: editor/code_editor.cpp editor/editor_help.cpp msgid "%d match." @@ -806,7 +806,7 @@ msgstr "Ylimääräiset argumentit:" #: editor/connections_dialog.cpp msgid "Receiver Method:" -msgstr "Valitse metodi:" +msgstr "Vastaanottava metodi:" #: editor/connections_dialog.cpp msgid "Advanced" @@ -1734,7 +1734,7 @@ msgstr "Tyhjennä profiili" #: editor/editor_feature_profile.cpp msgid "Godot Feature Profile" -msgstr "Hallinnoi editorin ominaisuusprofiilit" +msgstr "Godotin ominaisuusprofiili" #: editor/editor_feature_profile.cpp msgid "Import Profile(s)" @@ -2252,11 +2252,11 @@ msgstr "Virhe tallennettaessa MeshLibrary resurssia!" #: editor/editor_node.cpp msgid "Can't load TileSet for merging!" -msgstr "Ei voida ladata ruutuvalikoimaa yhdistämistä varten!" +msgstr "Ei voida ladata laattavalikoimaa yhdistämistä varten!" #: editor/editor_node.cpp msgid "Error saving TileSet!" -msgstr "Virhe tallennettaessa ruutuvalikoimaa!" +msgstr "Virhe tallennettaessa laattavalikoimaa!" #: editor/editor_node.cpp msgid "Error trying to save layout!" @@ -2401,7 +2401,7 @@ msgstr "Tätä toimintoa ei voida suorittaa ilman juurisolmua." #: editor/editor_node.cpp msgid "Export Tile Set" -msgstr "Vie ruutuvalikoima" +msgstr "Vie laattavalikoima" #: editor/editor_node.cpp msgid "This operation can't be done without a selected node." @@ -2690,7 +2690,7 @@ msgstr "Mesh-kirjastoksi..." #: editor/editor_node.cpp msgid "TileSet..." -msgstr "Ruutuvalikoimaksi..." +msgstr "Laattavalikoimaksi..." #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp @@ -3948,6 +3948,11 @@ msgid "Saving..." msgstr "Tallennetaan..." #: editor/import_dock.cpp +#, fuzzy +msgid "%d Files" +msgstr " Tiedostot" + +#: editor/import_dock.cpp msgid "Set as Default for '%s'" msgstr "Aseta oletus valinnalle '%s'" @@ -3956,10 +3961,6 @@ msgid "Clear Default for '%s'" msgstr "Poista oletus valinnalta '%s'" #: editor/import_dock.cpp -msgid " Files" -msgstr " Tiedostot" - -#: editor/import_dock.cpp msgid "Import As:" msgstr "Tuo nimellä:" @@ -5192,11 +5193,11 @@ msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Top Left" -msgstr "Vasemmassa yläkulmassa" +msgstr "Ylävasen" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Top Right" -msgstr "Oikeassa yläkulmassa" +msgstr "Yläoikea" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Bottom Right" @@ -5228,27 +5229,27 @@ msgstr "Keskitä" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Left Wide" -msgstr "Vasen näkymä" +msgstr "Laaja vasemmalla" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Top Wide" -msgstr "Ylänäkymä" +msgstr "Laaja ylhäällä" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Right Wide" -msgstr "Oikea näkymä" +msgstr "Laaja oikealla" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Bottom Wide" -msgstr "Alanäkymä" +msgstr "Laaja alhaalla" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "VCenter Wide" -msgstr "Pystykeskitetty laaja" +msgstr "Vaakakeskitetty laaja" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "HCenter Wide" -msgstr "Vaakakeskitetty laaja" +msgstr "Pystykeskitetty laaja" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Full Rect" @@ -5256,7 +5257,7 @@ msgstr "Täysi ruutu" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Keep Ratio" -msgstr "Skaalaussuhde" +msgstr "Säilytä suhde" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Anchors only" @@ -5835,12 +5836,12 @@ msgid "Mesh is empty!" msgstr "Mesh on tyhjä!" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Trimesh Body" -msgstr "Luo konkaavi staattinen kappale" +msgid "Couldn't create a Trimesh collision shape." +msgstr "Ei voitu luoda konkaavia törmäysmuotoa." #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Convex Body" -msgstr "Luo konveksi staattinen kappale" +msgid "Create Static Trimesh Body" +msgstr "Luo konkaavi staattinen kappale" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "This doesn't work on scene root!" @@ -5851,12 +5852,28 @@ msgid "Create Trimesh Static Shape" msgstr "Luo staattinen konkaavi muoto" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Failed creating shapes!" -msgstr "Muotojen luonti epäonnistui!" +msgid "Can't create a single convex collision shape for the scene root." +msgstr "Ei voida luoda yksittäistä konveksia törmäysmuotoa skenen juurelle." #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Convex Shape(s)" -msgstr "Luo konvekseja muotoja" +msgid "Couldn't create a single convex collision shape." +msgstr "Ei voitu luoda yksittäistä konveksia törmäysmuotoa." + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Single Convex Shape" +msgstr "Luo yksittäinen konveksi muoto" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Can't create multiple convex collision shapes for the scene root." +msgstr "Ei voi luoda useata konveksia törmäysmuotoa skenen juurelle." + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Couldn't create any collision shapes." +msgstr "Yhtään törmäysmuotoa ei voitu luoda." + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Multiple Convex Shapes" +msgstr "Luo useita konvekseja muotoja" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Navigation Mesh" @@ -5907,18 +5924,68 @@ msgid "Create Trimesh Static Body" msgstr "Luo konkaavi staattinen kappale" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a StaticBody and assigns a polygon-based collision shape to it " +"automatically.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" +"Luo StaticBody solmun ja asettaa sille automaattisesti polygonipohjaisen " +"törmäysmuodon.\n" +"Tämä on tarkin (mutta hitain) vaihtoehto törmäystunnistukselle." + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Collision Sibling" msgstr "Luo konkaavi törmäysmuoto sisareksi" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Convex Collision Sibling(s)" -msgstr "Luo konvekseja törmäysmuotoja sisariksi" +msgid "" +"Creates a polygon-based collision shape.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" +"Luo polygonipohjaisen törmäysmuodon.\n" +"Tämä on tarkin (mutta hitain) vaihtoehto törmäystunnistukselle." + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Single Convex Collision Siblings" +msgstr "Luo yksittäisen konveksin törmäysmuodon sisaret" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a single convex collision shape.\n" +"This is the fastest (but least accurate) option for collision detection." +msgstr "" +"Luo yksittäisen konveksin törmäysmuodon.\n" +"Tämä on nopein (mutta epätarkin) vaihtoehto törmäystunnistukselle." + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Multiple Convex Collision Siblings" +msgstr "Luo useita konvekseja törmäysmuotojen sisaria" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a polygon-based collision shape.\n" +"This is a performance middle-ground between the two above options." +msgstr "" +"Luo polygonipohjaisen törmäysmuodon.\n" +"Tämä on suorituskyvyltään välimaastoa kahdelle yllä olevalle vaihtoehdolle." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Outline Mesh..." msgstr "Luo ääriviivoista Mesh..." #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a static outline mesh. The outline mesh will have its normals " +"flipped automatically.\n" +"This can be used instead of the SpatialMaterial Grow property when using " +"that property isn't possible." +msgstr "" +"Luo staattisen ääriviiva-meshin. Ääriviiva-meshin normaalit on käännetty " +"automaattisesti.\n" +"Tätä voidaan käyttää SpatialMaterial Grow ominaisuuden sijaan silloin, kun " +"tuon ominaisuuden käyttäminen ei ole mahdollista." + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "View UV1" msgstr "Näytä UV1" @@ -6599,7 +6666,8 @@ msgstr "Skriptiä ei voi saada suorittamista varten." #: editor/plugins/script_editor_plugin.cpp msgid "Script failed reloading, check console for errors." -msgstr "Skriptin lataus epäonnistui. Tarkista konsolissa virheiden varalta." +msgstr "" +"Skriptin uudelleenlataus epäonnistui, tarkista konsoli virheiden varalta." #: editor/plugins/script_editor_plugin.cpp msgid "Script is not in tool mode, will not be able to run." @@ -6609,8 +6677,8 @@ msgstr "Skripti ei ole työkalutilassa, sitä ei voi suorittaa." msgid "" "To run this script, it must inherit EditorScript and be set to tool mode." msgstr "" -"Tämän skriptin suorittamiseksi sen on perittävä EditorScript ja asetettava " -"se työkalutilaan." +"Tämän skriptin suorittamiseksi sen on perittävä EditorScript ja olla " +"asetettu työkalutilaan." #: editor/plugins/script_editor_plugin.cpp msgid "Import Theme" @@ -7915,7 +7983,7 @@ msgstr "Tyhjennä valittu alue" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Fix Invalid Tiles" -msgstr "Korjaa virheelliset ruudut" +msgstr "Korjaa virheelliset laatat" #: editor/plugins/tile_map_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp @@ -7924,7 +7992,7 @@ msgstr "Leikkaa valinta" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint TileMap" -msgstr "Täytä ruudukko" +msgstr "Täytä laattakartta" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Line Draw" @@ -7940,11 +8008,11 @@ msgstr "Täyttö" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Erase TileMap" -msgstr "Tyhjennä ruudukko" +msgstr "Tyhjennä laattakartta" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Find Tile" -msgstr "Etsi ruutu" +msgstr "Etsi laatta" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Transpose" @@ -7952,7 +8020,7 @@ msgstr "Transponoi" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Disable Autotile" -msgstr "Poista automaattiruudutus käytöstä" +msgstr "Poista automaattilaatoitus käytöstä" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Enable Priority" @@ -7960,17 +8028,17 @@ msgstr "Ota prioriteetti käyttöön" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Filter tiles" -msgstr "Suodata ruutuja" +msgstr "Suodata laattoja" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Give a TileSet resource to this TileMap to use its tiles." msgstr "" -"Anna tälle ruutukartalle (TileMap) ruutuvalikoimaresurssi (TileSet) " -"käyttääksesi sen ruutuja." +"Anna tälle laattakartalle (TileMap) laattavalikoimaresurssi (TileSet) " +"käyttääksesi sen laattoja." #: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint Tile" -msgstr "Maalaa ruutu" +msgstr "Maalaa laatta" #: editor/plugins/tile_map_editor_plugin.cpp msgid "" @@ -7982,7 +8050,7 @@ msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Pick Tile" -msgstr "Poimi ruutu" +msgstr "Poimi laatta" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Rotate Left" @@ -8006,11 +8074,11 @@ msgstr "Tyhjennä muunnos" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Add Texture(s) to TileSet." -msgstr "Lisää tekstuurit ruutuvalikoimaan." +msgstr "Lisää tekstuurit laattavalikoimaan." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Remove selected Texture from TileSet." -msgstr "Poista valittu tekstuuri ruutuvalikoimasta." +msgstr "Poista valittu tekstuuri laattavalikoimasta." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Create from Scene" @@ -8038,7 +8106,7 @@ msgstr "Seuraava koordinaatti" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Select the next shape, subtile, or Tile." -msgstr "Valitse seuraava muoto, aliruutu tai ruutu." +msgstr "Valitse seuraava muoto, alilaatta tai laatta." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Previous Coordinate" @@ -8046,7 +8114,7 @@ msgstr "Edellinen koordinaatti" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Select the previous shape, subtile, or Tile." -msgstr "Valitse edellinen muoto, aliruutu tai ruutu." +msgstr "Valitse edellinen muoto, alilaatta tai laatta." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Region" @@ -8058,11 +8126,11 @@ msgstr "Törmäys" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Occlusion" -msgstr "Peittotila" +msgstr "Peitto" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Navigation" -msgstr "Siirtymistila" +msgstr "Siirtyminen" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Bitmask" @@ -8138,19 +8206,19 @@ msgstr "Aseta tarttuminen ja näytä ruudukko (muokattavissa Tarkastelussa)." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Display Tile Names (Hold Alt Key)" -msgstr "Näytä ruutujen nimet (pidä Alt-näppäin pohjassa)" +msgstr "Näytä laattojen nimet (pidä Alt-näppäin pohjassa)" #: editor/plugins/tile_set_editor_plugin.cpp msgid "" "Add or select a texture on the left panel to edit the tiles bound to it." msgstr "" "Lisää tai valitse tekstuuri vasemmasta paneelista muokataksesi siihen " -"sidottuja ruutuja." +"sidottuja laattoja." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Remove selected texture? This will remove all tiles which use it." msgstr "" -"Poista valittu tekstuuri? Tämä poistaa kaikki ruudut, jotka käyttävät sitä." +"Poista valittu tekstuuri? Tämä poistaa kaikki laatat, jotka käyttävät sitä." #: editor/plugins/tile_set_editor_plugin.cpp msgid "You haven't selected a texture to remove." @@ -8158,7 +8226,7 @@ msgstr "Et ole valinnut poistettavaa tekstuuria." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Create from scene? This will overwrite all current tiles." -msgstr "Luo skenestä? Tämä ylikirjoittaa kaikki nykyiset ruudut." +msgstr "Luo skenestä? Tämä ylikirjoittaa kaikki nykyiset laatat." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Merge from scene?" @@ -8178,7 +8246,7 @@ msgid "" "Click on another Tile to edit it." msgstr "" "Vedä kahvoja muokataksesi suorakulmiota.\n" -"Napsauta toista ruutua muokataksesi sitä." +"Napsauta toista laattaa muokataksesi sitä." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Delete selected Rect." @@ -8189,8 +8257,8 @@ msgid "" "Select current edited sub-tile.\n" "Click on another Tile to edit it." msgstr "" -"Valitse muokattavana oleva aliruutu.\n" -"Napsauta toista ruutua muokataksesi sitä." +"Valitse muokattavana oleva alilaatta.\n" +"Napsauta toista laattaa muokataksesi sitä." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Delete polygon." @@ -8206,7 +8274,7 @@ msgstr "" "Hiiren vasen: aseta bitti päälle.\n" "Hiiren oikea: aseta bitti pois päältä.\n" "Shift+Hiiren vasen: aseta jokeribitti.\n" -"Napsauta toista ruutua muokataksesi sitä." +"Napsauta toista laattaa muokataksesi sitä." #: editor/plugins/tile_set_editor_plugin.cpp msgid "" @@ -8214,41 +8282,41 @@ msgid "" "bindings.\n" "Click on another Tile to edit it." msgstr "" -"Valitse aliruutu, jota käytetään ikonina ja myös virheellisten " -"automaattiruudutusten ilmaisemiseen.\n" -"Napsauta toista ruutua muokataksesi sitä." +"Valitse alilaatta, jota käytetään ikonina ja myös virheellisten " +"automaattilaatoitusten ilmaisemiseen.\n" +"Napsauta toista laattaa muokataksesi sitä." #: editor/plugins/tile_set_editor_plugin.cpp msgid "" "Select sub-tile to change its priority.\n" "Click on another Tile to edit it." msgstr "" -"Valitse aliruutu muuttaaksesi sen tärkeyttä.\n" -"Napsauta toista ruutua muokataksesi sitä." +"Valitse alilaatta muuttaaksesi sen tärkeyttä.\n" +"Napsauta toista laattaa muokataksesi sitä." #: editor/plugins/tile_set_editor_plugin.cpp msgid "" "Select sub-tile to change its z index.\n" "Click on another Tile to edit it." msgstr "" -"Valitse aliruutu muuttaaksesi sen z-järjestystä.\n" -"Napsauta toista ruutua muokataksesi sitä." +"Valitse alilaatta muuttaaksesi sen z-järjestystä.\n" +"Napsauta toista laattaa muokataksesi sitä." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Set Tile Region" -msgstr "Aseta ruudun alue" +msgstr "Aseta laatan alue" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Create Tile" -msgstr "Luo ruutu" +msgstr "Luo laatta" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Set Tile Icon" -msgstr "Aseta ruudun ikoni" +msgstr "Aseta laatan ikoni" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Edit Tile Bitmask" -msgstr "Muokkaa ruudun bittimaskia" +msgstr "Muokkaa laatan bittimaskia" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Edit Collision Polygon" @@ -8264,11 +8332,11 @@ msgstr "Muokkaa navigointipolygonia" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Paste Tile Bitmask" -msgstr "Liitä ruudun bittimaski" +msgstr "Liitä laatan bittimaski" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Clear Tile Bitmask" -msgstr "Tyhjennä ruudun bittimaski" +msgstr "Tyhjennä laatan bittimaski" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Make Polygon Concave" @@ -8280,7 +8348,7 @@ msgstr "Tee polygonista konveksi" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Remove Tile" -msgstr "Poista ruutu" +msgstr "Poista laatta" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Remove Collision Polygon" @@ -8296,11 +8364,11 @@ msgstr "Poista navigointipolygoni" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Edit Tile Priority" -msgstr "Muokkaa ruudun prioriteettia" +msgstr "Muokkaa laatan prioriteettia" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Edit Tile Z Index" -msgstr "Muokkaa ruudun Z-indeksiä" +msgstr "Muokkaa laatan Z-indeksiä" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Make Convex" @@ -8324,13 +8392,13 @@ msgstr "Tätä ominaisuutta ei voi muuttaa." #: editor/plugins/tile_set_editor_plugin.cpp msgid "TileSet" -msgstr "Ruutuvalikoima" +msgstr "Laattavalikoima" #: editor/plugins/version_control_editor_plugin.cpp msgid "No VCS addons are available." msgstr "VCS-lisäosia ei ole saatavilla." -#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Error" msgstr "Virhe" @@ -9480,7 +9548,7 @@ msgstr "ZIP-tiedosto" #: editor/project_export.cpp msgid "Godot Game Pack" -msgstr "Godot-peli paketti" +msgstr "Godot-pelipaketti" #: editor/project_export.cpp msgid "Export templates for this platform are missing:" @@ -9495,13 +9563,18 @@ msgid "Export With Debug" msgstr "Vie debugaten" #: editor/project_manager.cpp -msgid "The path does not exist." -msgstr "Polkua ei ole olemassa." +msgid "The path specified doesn't exist." +msgstr "Määritelty polku ei ole olemassa." + +#: editor/project_manager.cpp +msgid "Error opening package file (it's not in ZIP format)." +msgstr "Virhe avattaessa pakettitiedostoa (se ei ole ZIP-muodossa)." #: editor/project_manager.cpp -msgid "Invalid '.zip' project file, does not contain a 'project.godot' file." +msgid "" +"Invalid \".zip\" project file; it doesn't contain a \"project.godot\" file." msgstr "" -"Virheellinen '.zip' projektitiedosto; se ei sisällä 'project.godot' " +"Virheellinen \".zip\" projektitiedosto; se ei sisällä \"project.godot\" " "tiedostoa." #: editor/project_manager.cpp @@ -9509,12 +9582,12 @@ msgid "Please choose an empty folder." msgstr "Ole hyvä ja valitse tyhjä kansio." #: editor/project_manager.cpp -msgid "Please choose a 'project.godot' or '.zip' file." -msgstr "Ole hyvä ja valitse 'project.godot' tai '.zip' tiedosto." +msgid "Please choose a \"project.godot\" or \".zip\" file." +msgstr "Ole hyvä ja valitse \"project.godot\"- tai \".zip\"-tiedosto." #: editor/project_manager.cpp -msgid "Directory already contains a Godot project." -msgstr "Hakemisto sisältää jo Godot-projektin." +msgid "This directory already contains a Godot project." +msgstr "Tämä hakemisto sisältää jo Godot-projektin." #: editor/project_manager.cpp msgid "New Game Project" @@ -10209,6 +10282,10 @@ msgid "Suffix" msgstr "Pääte" #: editor/rename_dialog.cpp +msgid "Use Regular Expressions" +msgstr "Käytä säännöllisiä lausekkeita" + +#: editor/rename_dialog.cpp msgid "Advanced Options" msgstr "Edistyneet asetukset" @@ -10245,7 +10322,7 @@ msgstr "" "Vertaa laskurin valintoja." #: editor/rename_dialog.cpp -msgid "Per Level counter" +msgid "Per-level Counter" msgstr "Per taso -laskuri" #: editor/rename_dialog.cpp @@ -10277,10 +10354,6 @@ msgstr "" "Puuttuvat numeromerkit täytetään edeltävillä nollilla." #: editor/rename_dialog.cpp -msgid "Regular Expressions" -msgstr "Säännölliset lausekkeet" - -#: editor/rename_dialog.cpp msgid "Post-Process" msgstr "Jälkikäsittely" @@ -10289,12 +10362,12 @@ msgid "Keep" msgstr "Pidä" #: editor/rename_dialog.cpp -msgid "CamelCase to under_scored" -msgstr "CamelCase ala_viivoiksi" +msgid "PascalCase to snake_case" +msgstr "PascalCase ala_viivoiksi" #: editor/rename_dialog.cpp -msgid "under_scored to CamelCase" -msgstr "ala_viivat CamelCaseksi" +msgid "snake_case to PascalCase" +msgstr "ala_viivat PascalCaseksi" #: editor/rename_dialog.cpp msgid "Case" @@ -10312,6 +10385,14 @@ msgstr "Isoiksi kirjaimiksi" msgid "Reset" msgstr "Palauta" +#: editor/rename_dialog.cpp +msgid "Regular Expression Error" +msgstr "Säännöllisen lausekkeen virhe" + +#: editor/rename_dialog.cpp +msgid "At character %s" +msgstr "Merkissä %s" + #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "Vaihda solmun isäntää" @@ -10778,8 +10859,8 @@ msgid "Invalid inherited parent name or path." msgstr "Virheellinen peritty isännän nimi tai polku." #: editor/script_create_dialog.cpp -msgid "Script is valid." -msgstr "Skripti kelpaa." +msgid "Script path/name is valid." +msgstr "Skriptin polku/nimi kelpaa." #: editor/script_create_dialog.cpp msgid "Allowed: a-z, A-Z, 0-9, _ and ." @@ -10870,6 +10951,10 @@ msgid "Copy Error" msgstr "Kopioi virhe" #: editor/script_editor_debugger.cpp +msgid "Video RAM" +msgstr "Näyttömuisti" + +#: editor/script_editor_debugger.cpp msgid "Skip Breakpoints" msgstr "Sivuuta keskeytyskohdat" @@ -10918,10 +11003,6 @@ msgid "Total:" msgstr "Yhteensä:" #: editor/script_editor_debugger.cpp -msgid "Video Mem" -msgstr "Näyttömuisti" - -#: editor/script_editor_debugger.cpp msgid "Resource Path" msgstr "Resurssipolku" @@ -12157,7 +12238,7 @@ msgid "" "to. Please use it as a child of Area2D, StaticBody2D, RigidBody2D, " "KinematicBody2D, etc. to give them a shape." msgstr "" -"TileMap, jolla on \"Use Parent on\", tarvitsee CollisionObject2D " +"Laattakartta, jolla on \"Use Parent\" käytössä, tarvitsee CollisionObject2D " "isäntäsolmun, jolle voi antaa muotoja. Käytä sitä ainoastaan Area2D, " "StaticBody2D, RigidBody2D, KinematicBody2D, jne. alla antaaksesi niille " "muodon." @@ -12603,6 +12684,15 @@ msgstr "Varying tyypin voi sijoittaa vain vertex-funktiossa." msgid "Constants cannot be modified." msgstr "Vakioita ei voi muokata." +#~ msgid "Replaced %d occurrence(s)." +#~ msgstr "Korvattu %d osuvuutta." + +#~ msgid "Create Static Convex Body" +#~ msgstr "Luo konveksi staattinen kappale" + +#~ msgid "Failed creating shapes!" +#~ msgstr "Muotojen luonti epäonnistui!" + #~ msgid "" #~ "There are currently no tutorials for this class, you can [color=$color]" #~ "[url=$url]contribute one[/url][/color] or [color=$color][url=" diff --git a/editor/translations/fil.po b/editor/translations/fil.po index c8a2a20684..9616bfc1be 100644 --- a/editor/translations/fil.po +++ b/editor/translations/fil.po @@ -673,8 +673,9 @@ msgid "Line Number:" msgstr "" #: editor/code_editor.cpp -msgid "Replaced %d occurrence(s)." -msgstr "" +#, fuzzy +msgid "%d replaced." +msgstr "Palitan" #: editor/code_editor.cpp editor/editor_help.cpp msgid "%d match." @@ -3812,15 +3813,15 @@ msgid "Saving..." msgstr "" #: editor/import_dock.cpp -msgid "Set as Default for '%s'" +msgid "%d Files" msgstr "" #: editor/import_dock.cpp -msgid "Clear Default for '%s'" +msgid "Set as Default for '%s'" msgstr "" #: editor/import_dock.cpp -msgid " Files" +msgid "Clear Default for '%s'" msgstr "" #: editor/import_dock.cpp @@ -5653,11 +5654,11 @@ msgid "Mesh is empty!" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Trimesh Body" +msgid "Couldn't create a Trimesh collision shape." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Convex Body" +msgid "Create Static Trimesh Body" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -5669,11 +5670,27 @@ msgid "Create Trimesh Static Shape" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Failed creating shapes!" +msgid "Can't create a single convex collision shape for the scene root." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Couldn't create a single convex collision shape." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Single Convex Shape" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Can't create multiple convex collision shapes for the scene root." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Convex Shape(s)" +msgid "Couldn't create any collision shapes." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Multiple Convex Shapes" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -5725,11 +5742,40 @@ msgid "Create Trimesh Static Body" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a StaticBody and assigns a polygon-based collision shape to it " +"automatically.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Collision Sibling" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Convex Collision Sibling(s)" +msgid "" +"Creates a polygon-based collision shape.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Single Convex Collision Siblings" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a single convex collision shape.\n" +"This is the fastest (but least accurate) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Multiple Convex Collision Siblings" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a polygon-based collision shape.\n" +"This is a performance middle-ground between the two above options." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -5737,6 +5783,14 @@ msgid "Create Outline Mesh..." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a static outline mesh. The outline mesh will have its normals " +"flipped automatically.\n" +"This can be used instead of the SpatialMaterial Grow property when using " +"that property isn't possible." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "View UV1" msgstr "" @@ -8103,7 +8157,7 @@ msgstr "" msgid "No VCS addons are available." msgstr "" -#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Error" msgstr "" @@ -9189,11 +9243,16 @@ msgid "Export With Debug" msgstr "" #: editor/project_manager.cpp -msgid "The path does not exist." +msgid "The path specified doesn't exist." +msgstr "" + +#: editor/project_manager.cpp +msgid "Error opening package file (it's not in ZIP format)." msgstr "" #: editor/project_manager.cpp -msgid "Invalid '.zip' project file, does not contain a 'project.godot' file." +msgid "" +"Invalid \".zip\" project file; it doesn't contain a \"project.godot\" file." msgstr "" #: editor/project_manager.cpp @@ -9201,11 +9260,11 @@ msgid "Please choose an empty folder." msgstr "" #: editor/project_manager.cpp -msgid "Please choose a 'project.godot' or '.zip' file." +msgid "Please choose a \"project.godot\" or \".zip\" file." msgstr "" #: editor/project_manager.cpp -msgid "Directory already contains a Godot project." +msgid "This directory already contains a Godot project." msgstr "" #: editor/project_manager.cpp @@ -9851,6 +9910,10 @@ msgid "Suffix" msgstr "" #: editor/rename_dialog.cpp +msgid "Use Regular Expressions" +msgstr "" + +#: editor/rename_dialog.cpp msgid "Advanced Options" msgstr "" @@ -9885,7 +9948,7 @@ msgid "" msgstr "" #: editor/rename_dialog.cpp -msgid "Per Level counter" +msgid "Per-level Counter" msgstr "" #: editor/rename_dialog.cpp @@ -9915,10 +9978,6 @@ msgid "" msgstr "" #: editor/rename_dialog.cpp -msgid "Regular Expressions" -msgstr "" - -#: editor/rename_dialog.cpp msgid "Post-Process" msgstr "" @@ -9927,11 +9986,11 @@ msgid "Keep" msgstr "" #: editor/rename_dialog.cpp -msgid "CamelCase to under_scored" +msgid "PascalCase to snake_case" msgstr "" #: editor/rename_dialog.cpp -msgid "under_scored to CamelCase" +msgid "snake_case to PascalCase" msgstr "" #: editor/rename_dialog.cpp @@ -9950,6 +10009,14 @@ msgstr "" msgid "Reset" msgstr "" +#: editor/rename_dialog.cpp +msgid "Regular Expression Error" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "At character %s" +msgstr "" + #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "" @@ -10389,7 +10456,7 @@ msgid "Invalid inherited parent name or path." msgstr "" #: editor/script_create_dialog.cpp -msgid "Script is valid." +msgid "Script path/name is valid." msgstr "" #: editor/script_create_dialog.cpp @@ -10482,6 +10549,10 @@ msgid "Copy Error" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Video RAM" +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Skip Breakpoints" msgstr "" @@ -10530,10 +10601,6 @@ msgid "Total:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Video Mem" -msgstr "" - -#: editor/script_editor_debugger.cpp msgid "Resource Path" msgstr "" diff --git a/editor/translations/fr.po b/editor/translations/fr.po index c92a8d3bb0..8cbba6643c 100644 --- a/editor/translations/fr.po +++ b/editor/translations/fr.po @@ -69,12 +69,13 @@ # Sofiane <Sofiane-77@caramail.fr>, 2019. # Camille Mohr-Daurat <pouleyketchoup@gmail.com>, 2019. # Pierre Stempin <pierre.stempin@gmail.com>, 2019. +# Pierre Caye <pierrecaye@laposte.net>, 2020. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2020-01-16 22:32+0000\n" -"Last-Translator: Rémi Verschelde <akien@godotengine.org>\n" +"PO-Revision-Date: 2020-02-18 15:09+0000\n" +"Last-Translator: Pierre Caye <pierrecaye@laposte.net>\n" "Language-Team: French <https://hosted.weblate.org/projects/godot-engine/" "godot/fr/>\n" "Language: fr\n" @@ -82,7 +83,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 3.10.2-dev\n" +"X-Generator: Weblate 3.11\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -92,7 +93,7 @@ msgstr "" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp msgid "Expected a string of length 1 (a character)." -msgstr "Attendu une chaîne de longueur 1 (un caractère)." +msgstr "Attendu chaîne de longueur 1 (un caractère)." #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/mono/glue/gd_glue.cpp @@ -759,8 +760,8 @@ msgid "Line Number:" msgstr "Numéro de ligne :" #: editor/code_editor.cpp -msgid "Replaced %d occurrence(s)." -msgstr "%d occurrence(s) remplacée(s)." +msgid "%d replaced." +msgstr "%d remplacé." #: editor/code_editor.cpp editor/editor_help.cpp msgid "%d match." @@ -4056,6 +4057,10 @@ msgid "Saving..." msgstr "Enregistrement…" #: editor/import_dock.cpp +msgid "%d Files" +msgstr "%d fichiers" + +#: editor/import_dock.cpp msgid "Set as Default for '%s'" msgstr "Définir comme défaut pour « %s »" @@ -4064,10 +4069,6 @@ msgid "Clear Default for '%s'" msgstr "Effacer le préréglage par défaut pour « %s »" #: editor/import_dock.cpp -msgid " Files" -msgstr " Fichiers" - -#: editor/import_dock.cpp msgid "Import As:" msgstr "Importer comme :" @@ -5951,12 +5952,12 @@ msgid "Mesh is empty!" msgstr "Le maillage est vide !" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Trimesh Body" -msgstr "Créer un corps statique de type Trimesh" +msgid "Couldn't create a Trimesh collision shape." +msgstr "Impossible de créer une forme de collision Trimesh." #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Convex Body" -msgstr "Créer corps convexe statique" +msgid "Create Static Trimesh Body" +msgstr "Créer un corps statique de type Trimesh" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "This doesn't work on scene root!" @@ -5967,12 +5968,32 @@ msgid "Create Trimesh Static Shape" msgstr "Créer une forme Trimesh statique" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Failed creating shapes!" -msgstr "Échec de la création de formes !" +msgid "Can't create a single convex collision shape for the scene root." +msgstr "" +"Impossible de créer une forme de collision convexe unique pour la racine de " +"la scène." + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Couldn't create a single convex collision shape." +msgstr "Impossible de créer une forme de collision convexe unique." + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Single Convex Shape" +msgstr "Créer une forme convexe unique" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Can't create multiple convex collision shapes for the scene root." +msgstr "" +"Impossible de créer des formes de collision convexes multiples pour la " +"racine de la scène." + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Couldn't create any collision shapes." +msgstr "Impossible de créer des formes de collision." #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Convex Shape(s)" -msgstr "Créer une(des) forme(s) convexe(s)" +msgid "Create Multiple Convex Shapes" +msgstr "Créer des formes convexes multiples" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Navigation Mesh" @@ -6026,18 +6047,71 @@ msgid "Create Trimesh Static Body" msgstr "Créer un corps statique Trimesh" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a StaticBody and assigns a polygon-based collision shape to it " +"automatically.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" +"Crée un StaticBody et lui attribue automatiquement une forme de collision " +"basée sur les polygones.\n" +"C'est l'option la plus précise (mais la plus lente) pour la détection des " +"collisions." + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Collision Sibling" msgstr "Créer une collision Trimesh" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Convex Collision Sibling(s)" -msgstr "Créer une(des) collision(s) convexe(s) sœur(s)" +msgid "" +"Creates a polygon-based collision shape.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" +"Crée une forme de collision basée sur les polygones.\n" +"C'est l'option la plus précise (mais la plus lente) pour la détection des " +"collisions." + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Single Convex Collision Siblings" +msgstr "Créer une(des) collision(s) convexe(s) unique(s) sœur(s)" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a single convex collision shape.\n" +"This is the fastest (but least accurate) option for collision detection." +msgstr "" +"Crée une forme de collision convexe unique.\n" +"C'est l'option la plus rapide (mais la moins précise) pour la détection des " +"collisions." + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Multiple Convex Collision Siblings" +msgstr "Créer une(des) collision(s) convexe(s) multiple(s) sœur(s)" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a polygon-based collision shape.\n" +"This is a performance middle-ground between the two above options." +msgstr "" +"Crée une forme de collision basée sur les polygones.\n" +"Il s'agit d'une performance à mi-chemin entre les deux options ci-dessus." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Outline Mesh..." msgstr "Créer un maillage de contour…" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a static outline mesh. The outline mesh will have its normals " +"flipped automatically.\n" +"This can be used instead of the SpatialMaterial Grow property when using " +"that property isn't possible." +msgstr "" +"Crée un maillage de contour statique. Le maillage de contour verra ses " +"normales inversées automatiquement.\n" +"Cela peut être utilisé à la place de la propriété SpatialMaterial Grow " +"lorsque l'utilisation de cette propriété n'est pas possible." + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "View UV1" msgstr "Afficher l'UV1" @@ -8460,7 +8534,7 @@ msgstr "TileSet" msgid "No VCS addons are available." msgstr "Aucun addon VCS n'est disponible." -#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Error" msgstr "Erreur" @@ -9635,26 +9709,32 @@ msgid "Export With Debug" msgstr "Exporter avec debug" #: editor/project_manager.cpp -msgid "The path does not exist." -msgstr "Le chemin vers ce fichier n'existe pas." +msgid "The path specified doesn't exist." +msgstr "Le chemin spécifié n'existe pas." #: editor/project_manager.cpp -msgid "Invalid '.zip' project file, does not contain a 'project.godot' file." +msgid "Error opening package file (it's not in ZIP format)." +msgstr "" +"Erreur lors de l'ouverture du fichier package (il n'est pas au format ZIP)." + +#: editor/project_manager.cpp +msgid "" +"Invalid \".zip\" project file; it doesn't contain a \"project.godot\" file." msgstr "" -"Fichier de projet « .zip » invalide, il ne contient pas de fichier « project." -"godot »." +"Fichier de projet \".zip\" invalide ; il ne contient pas de fichier \"projet." +"godot\"." #: editor/project_manager.cpp msgid "Please choose an empty folder." msgstr "Veuillez choisir un dossier vide." #: editor/project_manager.cpp -msgid "Please choose a 'project.godot' or '.zip' file." -msgstr "Veuillez choisir un fichier « project.godot » ou « .zip »." +msgid "Please choose a \"project.godot\" or \".zip\" file." +msgstr "Veuillez choisir un fichier \"project.godot\" ou \".zip\"." #: editor/project_manager.cpp -msgid "Directory already contains a Godot project." -msgstr "Le répertoire contient déjà un projet Godot." +msgid "This directory already contains a Godot project." +msgstr "Ce répertoire contient déjà un projet Godot." #: editor/project_manager.cpp msgid "New Game Project" @@ -10355,6 +10435,10 @@ msgid "Suffix" msgstr "Suffixe" #: editor/rename_dialog.cpp +msgid "Use Regular Expressions" +msgstr "Utiliser des expressions régulières" + +#: editor/rename_dialog.cpp msgid "Advanced Options" msgstr "Options avancées" @@ -10391,7 +10475,7 @@ msgstr "" "Comparez les options du compteur." #: editor/rename_dialog.cpp -msgid "Per Level counter" +msgid "Per-level Counter" msgstr "Compteur par niveau" #: editor/rename_dialog.cpp @@ -10423,10 +10507,6 @@ msgstr "" "Les chiffres manquants sont complétés par des zéros en tête." #: editor/rename_dialog.cpp -msgid "Regular Expressions" -msgstr "Expressions régulières" - -#: editor/rename_dialog.cpp msgid "Post-Process" msgstr "Post-traitement" @@ -10435,12 +10515,12 @@ msgid "Keep" msgstr "Conserver" #: editor/rename_dialog.cpp -msgid "CamelCase to under_scored" -msgstr "CamelCase vers sous_ligné" +msgid "PascalCase to snake_case" +msgstr "PascalCase vers snake_case" #: editor/rename_dialog.cpp -msgid "under_scored to CamelCase" -msgstr "sous_ligné vers CamelCase" +msgid "snake_case to PascalCase" +msgstr "snake_case vers PascalCase" #: editor/rename_dialog.cpp msgid "Case" @@ -10458,6 +10538,14 @@ msgstr "Convertir en majuscule" msgid "Reset" msgstr "Réinitialiser" +#: editor/rename_dialog.cpp +msgid "Regular Expression Error" +msgstr "Erreur d'expression régulière" + +#: editor/rename_dialog.cpp +msgid "At character %s" +msgstr "À caractère %s" + #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "Re-parenter le nœud" @@ -10922,8 +11010,8 @@ msgid "Invalid inherited parent name or path." msgstr "Nom ou chemin parent hérité invalide." #: editor/script_create_dialog.cpp -msgid "Script is valid." -msgstr "Script valide." +msgid "Script path/name is valid." +msgstr "Le chemin/nom du script est valide." #: editor/script_create_dialog.cpp msgid "Allowed: a-z, A-Z, 0-9, _ and ." @@ -11014,6 +11102,10 @@ msgid "Copy Error" msgstr "Copier l'erreur" #: editor/script_editor_debugger.cpp +msgid "Video RAM" +msgstr "Vidéo RAM" + +#: editor/script_editor_debugger.cpp msgid "Skip Breakpoints" msgstr "Passer les points d'arrêt" @@ -11063,10 +11155,6 @@ msgid "Total:" msgstr "Total :" #: editor/script_editor_debugger.cpp -msgid "Video Mem" -msgstr "Mémoire vidéo" - -#: editor/script_editor_debugger.cpp msgid "Resource Path" msgstr "Chemin de la ressource" @@ -12786,6 +12874,15 @@ msgstr "Les variations ne peuvent être affectées que dans la fonction vertex." msgid "Constants cannot be modified." msgstr "Les constantes ne peuvent être modifiées." +#~ msgid "Replaced %d occurrence(s)." +#~ msgstr "%d occurrence(s) remplacée(s)." + +#~ msgid "Create Static Convex Body" +#~ msgstr "Créer corps convexe statique" + +#~ msgid "Failed creating shapes!" +#~ msgstr "Échec de la création de formes !" + #~ msgid "" #~ "There are currently no tutorials for this class, you can [color=$color]" #~ "[url=$url]contribute one[/url][/color] or [color=$color][url=" diff --git a/editor/translations/ga.po b/editor/translations/ga.po index f1db3d5a78..018d095c92 100644 --- a/editor/translations/ga.po +++ b/editor/translations/ga.po @@ -667,7 +667,7 @@ msgid "Line Number:" msgstr "" #: editor/code_editor.cpp -msgid "Replaced %d occurrence(s)." +msgid "%d replaced." msgstr "" #: editor/code_editor.cpp editor/editor_help.cpp @@ -3807,15 +3807,16 @@ msgid "Saving..." msgstr "" #: editor/import_dock.cpp -msgid "Set as Default for '%s'" -msgstr "" +#, fuzzy +msgid "%d Files" +msgstr "Amharc ar Chomhaid" #: editor/import_dock.cpp -msgid "Clear Default for '%s'" +msgid "Set as Default for '%s'" msgstr "" #: editor/import_dock.cpp -msgid " Files" +msgid "Clear Default for '%s'" msgstr "" #: editor/import_dock.cpp @@ -5647,11 +5648,11 @@ msgid "Mesh is empty!" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Trimesh Body" +msgid "Couldn't create a Trimesh collision shape." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Convex Body" +msgid "Create Static Trimesh Body" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -5663,11 +5664,27 @@ msgid "Create Trimesh Static Shape" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Failed creating shapes!" +msgid "Can't create a single convex collision shape for the scene root." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Couldn't create a single convex collision shape." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Single Convex Shape" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Can't create multiple convex collision shapes for the scene root." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Convex Shape(s)" +msgid "Couldn't create any collision shapes." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Multiple Convex Shapes" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -5719,11 +5736,40 @@ msgid "Create Trimesh Static Body" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a StaticBody and assigns a polygon-based collision shape to it " +"automatically.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Collision Sibling" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Convex Collision Sibling(s)" +msgid "" +"Creates a polygon-based collision shape.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Single Convex Collision Siblings" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a single convex collision shape.\n" +"This is the fastest (but least accurate) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Multiple Convex Collision Siblings" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a polygon-based collision shape.\n" +"This is a performance middle-ground between the two above options." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -5731,6 +5777,14 @@ msgid "Create Outline Mesh..." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a static outline mesh. The outline mesh will have its normals " +"flipped automatically.\n" +"This can be used instead of the SpatialMaterial Grow property when using " +"that property isn't possible." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "View UV1" msgstr "" @@ -8097,7 +8151,7 @@ msgstr "" msgid "No VCS addons are available." msgstr "" -#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Error" msgstr "" @@ -9184,11 +9238,16 @@ msgid "Export With Debug" msgstr "" #: editor/project_manager.cpp -msgid "The path does not exist." +msgid "The path specified doesn't exist." msgstr "" #: editor/project_manager.cpp -msgid "Invalid '.zip' project file, does not contain a 'project.godot' file." +msgid "Error opening package file (it's not in ZIP format)." +msgstr "" + +#: editor/project_manager.cpp +msgid "" +"Invalid \".zip\" project file; it doesn't contain a \"project.godot\" file." msgstr "" #: editor/project_manager.cpp @@ -9196,11 +9255,11 @@ msgid "Please choose an empty folder." msgstr "" #: editor/project_manager.cpp -msgid "Please choose a 'project.godot' or '.zip' file." +msgid "Please choose a \"project.godot\" or \".zip\" file." msgstr "" #: editor/project_manager.cpp -msgid "Directory already contains a Godot project." +msgid "This directory already contains a Godot project." msgstr "" #: editor/project_manager.cpp @@ -9846,6 +9905,10 @@ msgid "Suffix" msgstr "" #: editor/rename_dialog.cpp +msgid "Use Regular Expressions" +msgstr "" + +#: editor/rename_dialog.cpp msgid "Advanced Options" msgstr "" @@ -9880,7 +9943,7 @@ msgid "" msgstr "" #: editor/rename_dialog.cpp -msgid "Per Level counter" +msgid "Per-level Counter" msgstr "" #: editor/rename_dialog.cpp @@ -9910,10 +9973,6 @@ msgid "" msgstr "" #: editor/rename_dialog.cpp -msgid "Regular Expressions" -msgstr "" - -#: editor/rename_dialog.cpp msgid "Post-Process" msgstr "" @@ -9922,11 +9981,11 @@ msgid "Keep" msgstr "" #: editor/rename_dialog.cpp -msgid "CamelCase to under_scored" +msgid "PascalCase to snake_case" msgstr "" #: editor/rename_dialog.cpp -msgid "under_scored to CamelCase" +msgid "snake_case to PascalCase" msgstr "" #: editor/rename_dialog.cpp @@ -9945,6 +10004,14 @@ msgstr "" msgid "Reset" msgstr "" +#: editor/rename_dialog.cpp +msgid "Regular Expression Error" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "At character %s" +msgstr "" + #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "" @@ -10384,8 +10451,9 @@ msgid "Invalid inherited parent name or path." msgstr "" #: editor/script_create_dialog.cpp -msgid "Script is valid." -msgstr "" +#, fuzzy +msgid "Script path/name is valid." +msgstr "Tá crann beochana bailí." #: editor/script_create_dialog.cpp msgid "Allowed: a-z, A-Z, 0-9, _ and ." @@ -10477,6 +10545,10 @@ msgid "Copy Error" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Video RAM" +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Skip Breakpoints" msgstr "" @@ -10525,10 +10597,6 @@ msgid "Total:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Video Mem" -msgstr "" - -#: editor/script_editor_debugger.cpp msgid "Resource Path" msgstr "" diff --git a/editor/translations/he.po b/editor/translations/he.po index 6a153b6f11..1aa8c9d306 100644 --- a/editor/translations/he.po +++ b/editor/translations/he.po @@ -721,8 +721,9 @@ msgid "Line Number:" msgstr "מספר השורה:" #: editor/code_editor.cpp -msgid "Replaced %d occurrence(s)." -msgstr "" +#, fuzzy +msgid "%d replaced." +msgstr "החלפה…" #: editor/code_editor.cpp editor/editor_help.cpp msgid "%d match." @@ -4033,6 +4034,11 @@ msgid "Saving..." msgstr "שמירה…" #: editor/import_dock.cpp +#, fuzzy +msgid "%d Files" +msgstr " קבצים" + +#: editor/import_dock.cpp msgid "Set as Default for '%s'" msgstr "הגדרה כבררת מחדל עבור ‚%s’" @@ -4041,10 +4047,6 @@ msgid "Clear Default for '%s'" msgstr "מחיקת בררת מחדל עבור ‚%s’" #: editor/import_dock.cpp -msgid " Files" -msgstr " קבצים" - -#: editor/import_dock.cpp msgid "Import As:" msgstr "ייבוא בתור:" @@ -5994,11 +5996,11 @@ msgid "Mesh is empty!" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Trimesh Body" +msgid "Couldn't create a Trimesh collision shape." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Convex Body" +msgid "Create Static Trimesh Body" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -6010,12 +6012,30 @@ msgid "Create Trimesh Static Shape" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Failed creating shapes!" +msgid "Can't create a single convex collision shape for the scene root." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Couldn't create a single convex collision shape." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Create Single Convex Shape" +msgstr "יצירת %s חדש" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Can't create multiple convex collision shapes for the scene root." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp #, fuzzy -msgid "Create Convex Shape(s)" +msgid "Couldn't create any collision shapes." +msgstr "לא ניתן ליצור תיקייה." + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Create Multiple Convex Shapes" msgstr "יצירת %s חדש" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -6067,19 +6087,57 @@ msgid "Create Trimesh Static Body" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a StaticBody and assigns a polygon-based collision shape to it " +"automatically.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Collision Sibling" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a polygon-based collision shape.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp #, fuzzy -msgid "Create Convex Collision Sibling(s)" +msgid "Create Single Convex Collision Siblings" msgstr "יצירת מצולע" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a single convex collision shape.\n" +"This is the fastest (but least accurate) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Create Multiple Convex Collision Siblings" +msgstr "יצירת מצולע" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a polygon-based collision shape.\n" +"This is a performance middle-ground between the two above options." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Outline Mesh..." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a static outline mesh. The outline mesh will have its normals " +"flipped automatically.\n" +"This can be used instead of the SpatialMaterial Grow property when using " +"that property isn't possible." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "View UV1" msgstr "" @@ -8593,7 +8651,7 @@ msgstr "" msgid "No VCS addons are available." msgstr "" -#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Error" msgstr "" @@ -9725,11 +9783,18 @@ msgid "Export With Debug" msgstr "" #: editor/project_manager.cpp -msgid "The path does not exist." -msgstr "" +#, fuzzy +msgid "The path specified doesn't exist." +msgstr "הקובץ לא קיים." + +#: editor/project_manager.cpp +#, fuzzy +msgid "Error opening package file (it's not in ZIP format)." +msgstr "פתיחת קובץ החבילה נכשלה, המבנה אינו zip." #: editor/project_manager.cpp -msgid "Invalid '.zip' project file, does not contain a 'project.godot' file." +msgid "" +"Invalid \".zip\" project file; it doesn't contain a \"project.godot\" file." msgstr "" #: editor/project_manager.cpp @@ -9737,11 +9802,11 @@ msgid "Please choose an empty folder." msgstr "" #: editor/project_manager.cpp -msgid "Please choose a 'project.godot' or '.zip' file." +msgid "Please choose a \"project.godot\" or \".zip\" file." msgstr "" #: editor/project_manager.cpp -msgid "Directory already contains a Godot project." +msgid "This directory already contains a Godot project." msgstr "" #: editor/project_manager.cpp @@ -10407,6 +10472,11 @@ msgstr "" #: editor/rename_dialog.cpp #, fuzzy +msgid "Use Regular Expressions" +msgstr "גרסה נוכחית:" + +#: editor/rename_dialog.cpp +#, fuzzy msgid "Advanced Options" msgstr "הגדרות הצמדה" @@ -10445,7 +10515,7 @@ msgid "" msgstr "" #: editor/rename_dialog.cpp -msgid "Per Level counter" +msgid "Per-level Counter" msgstr "" #: editor/rename_dialog.cpp @@ -10476,10 +10546,6 @@ msgid "" msgstr "" #: editor/rename_dialog.cpp -msgid "Regular Expressions" -msgstr "" - -#: editor/rename_dialog.cpp msgid "Post-Process" msgstr "" @@ -10488,11 +10554,11 @@ msgid "Keep" msgstr "" #: editor/rename_dialog.cpp -msgid "CamelCase to under_scored" +msgid "PascalCase to snake_case" msgstr "" #: editor/rename_dialog.cpp -msgid "under_scored to CamelCase" +msgid "snake_case to PascalCase" msgstr "" #: editor/rename_dialog.cpp @@ -10514,6 +10580,15 @@ msgstr "אותיות גדולות" msgid "Reset" msgstr "איפוס התקריב" +#: editor/rename_dialog.cpp +msgid "Regular Expression Error" +msgstr "" + +#: editor/rename_dialog.cpp +#, fuzzy +msgid "At character %s" +msgstr "תווים תקפים:" + #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "" @@ -10982,7 +11057,7 @@ msgid "Invalid inherited parent name or path." msgstr "שם מאפיין האינדקס שגוי." #: editor/script_create_dialog.cpp -msgid "Script is valid." +msgid "Script path/name is valid." msgstr "" #: editor/script_create_dialog.cpp @@ -11088,6 +11163,10 @@ msgid "Copy Error" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Video RAM" +msgstr "" + +#: editor/script_editor_debugger.cpp #, fuzzy msgid "Skip Breakpoints" msgstr "מחיקת נקודות" @@ -11138,10 +11217,6 @@ msgid "Total:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Video Mem" -msgstr "" - -#: editor/script_editor_debugger.cpp msgid "Resource Path" msgstr "" diff --git a/editor/translations/hi.po b/editor/translations/hi.po index 424a9a6bc1..9278e63fc9 100644 --- a/editor/translations/hi.po +++ b/editor/translations/hi.po @@ -3,7 +3,7 @@ # Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). # This file is distributed under the same license as the Godot source code. # Abhas Kumar Sinha <abhaskumarsinha@gmail.com>, 2017. -# Suryansh5545 <suryanshpathak5545@gmail.com>, 2018. +# Suryansh5545 <suryanshpathak5545@gmail.com>, 2018, 2020. # Vikram1323 <vikram1323@gmail.com>, 2018. # vkubre <v@kubre.in>, 2019. # Abhay Patel <abhay111patel@gmail.com>, 2019. @@ -13,8 +13,8 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2019-11-01 19:50+0000\n" -"Last-Translator: Devashishsingh98 <devashishsingh98@gmail.com>\n" +"PO-Revision-Date: 2020-01-30 03:56+0000\n" +"Last-Translator: Suryansh5545 <suryanshpathak5545@gmail.com>\n" "Language-Team: Hindi <https://hosted.weblate.org/projects/godot-engine/godot/" "hi/>\n" "Language: hi\n" @@ -22,7 +22,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 3.10-dev\n" +"X-Generator: Weblate 3.11-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -31,17 +31,17 @@ msgstr "कन्वर्ट करने के लिए अमान्य � #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp msgid "Expected a string of length 1 (a character)." -msgstr "" +msgstr "लंबाई 1 (एक चरित्र) की एक स्ट्रिंग की उम्मीद है।" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/mono/glue/gd_glue.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." -msgstr "डीकोडिंग बाइट्स, या अमान्य प्रारूप के लिए पर्याप्त बाइट्स नहीं है।" +msgstr "डिकोडिंग बाइट, या अमान्य प्रारूप के लिए पर्याप्त बाइट नहीं।" #: core/math/expression.cpp msgid "Invalid input %i (not passed) in expression" -msgstr "अभिव्यक्ति में अमान्य इनपुट %i (पारित नहीं)" +msgstr "अभिव्यक्ति में अमान्य इनपुट%i (पारित नहीं)" #: core/math/expression.cpp msgid "self can't be used because instance is null (not passed)" @@ -105,7 +105,7 @@ msgstr "संतुलित" #: editor/animation_bezier_editor.cpp msgid "Mirror" -msgstr "प्रतिमा" +msgstr "दर्पण" #: editor/animation_bezier_editor.cpp editor/editor_profiler.cpp msgid "Time:" @@ -164,39 +164,33 @@ msgid "Anim Change Call" msgstr "एनीमेशन परिवर्तन बुलावा" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Multi Change Keyframe Time" -msgstr "एनीमेशन परिवर्तन निधि" +msgstr "अनीम मल्टी चेंज कीफ्रेम टाइम" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Multi Change Transition" -msgstr "एनीमेशन परिवर्तन बुलावा" +msgstr "अनीम मल्टी चेंज ट्रांजिशन" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Multi Change Transform" -msgstr "एनीमेशन परिवर्तन परिणत" +msgstr "अनीम मल्टी चेंज ट्रांसफॉर्म" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Multi Change Keyframe Value" -msgstr "एनीमेशन मुख्य-फ़्रेम मूल्य(Value) बदलें" +msgstr "अनीम मल्टी चेंज कीफ्रेम वैल्यू" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Multi Change Call" -msgstr "एनीमेशन परिवर्तन बुलावा" +msgstr "अनीम मल्टी चेंज कॉल" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Change Animation Length" -msgstr "शब्द बदलें मूल्य" +msgstr "एनिमेशन लंबाई बदलें" #: editor/animation_track_editor.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Change Animation Loop" -msgstr "" +msgstr "एनिमेशन लूप बदलें" #: editor/animation_track_editor.cpp msgid "Property Track" @@ -223,17 +217,14 @@ msgid "Animation Playback Track" msgstr "एनिमेशन प्लेबैक ट्रैक" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation length (frames)" -msgstr "ऐनिमेशन लंबाई समय (सेकंड्स)" +msgstr "एनीमेशन लंबाई (फ्रेम)" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation length (seconds)" -msgstr "ऐनिमेशन लंबाई समय (सेकंड्स)" +msgstr "एनिमेशन लंबाई (सेकंड)" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Add Track" msgstr "ट्रैक जोड़ें" @@ -248,122 +239,117 @@ msgstr "कार्यों:" #: editor/animation_track_editor.cpp msgid "Audio Clips:" -msgstr "" +msgstr "ऑडियो क्लिप्स:" #: editor/animation_track_editor.cpp msgid "Anim Clips:" -msgstr "" +msgstr "अनीम क्लिप्स:" #: editor/animation_track_editor.cpp msgid "Change Track Path" -msgstr "" +msgstr "ट्रैक पथ बदलें" #: editor/animation_track_editor.cpp msgid "Toggle this track on/off." -msgstr "" +msgstr "इस ट्रैक को ऑन/ऑफ पर टॉगल करें ।" #: editor/animation_track_editor.cpp msgid "Update Mode (How this property is set)" -msgstr "" +msgstr "अपडेट मोड (यह संपत्ति कैसे सेट की जाती है)" #: editor/animation_track_editor.cpp msgid "Interpolation Mode" -msgstr "" +msgstr "इंटरपोलेशन मोड" #: editor/animation_track_editor.cpp msgid "Loop Wrap Mode (Interpolate end with beginning on loop)" -msgstr "" +msgstr "लूप रैप मोड (लूप पर शुरुआत के साथ इंटरपोलेट अंत)" #: editor/animation_track_editor.cpp msgid "Remove this track." -msgstr "" +msgstr "इस ट्रैक को हटा दें।" #: editor/animation_track_editor.cpp msgid "Time (s): " -msgstr "" +msgstr "समय (एस): " #: editor/animation_track_editor.cpp msgid "Toggle Track Enabled" -msgstr "" +msgstr "टॉगल ट्रैक सक्षम" #: editor/animation_track_editor.cpp msgid "Continuous" -msgstr "" +msgstr "सतत" #: editor/animation_track_editor.cpp msgid "Discrete" -msgstr "" +msgstr "असतत" #: editor/animation_track_editor.cpp msgid "Trigger" -msgstr "" +msgstr "ट्रिगर" #: editor/animation_track_editor.cpp msgid "Capture" -msgstr "" +msgstr "पकड़ना" #: editor/animation_track_editor.cpp msgid "Nearest" -msgstr "" +msgstr "निकटतम" #: editor/animation_track_editor.cpp editor/plugins/curve_editor_plugin.cpp #: editor/property_editor.cpp msgid "Linear" -msgstr "" +msgstr "रैखिक" #: editor/animation_track_editor.cpp msgid "Cubic" -msgstr "" +msgstr "घन" #: editor/animation_track_editor.cpp msgid "Clamp Loop Interp" -msgstr "" +msgstr "क्लैंप लूप इंटरप" #: editor/animation_track_editor.cpp msgid "Wrap Loop Interp" -msgstr "" +msgstr "रैप लूप इंटरप" #: editor/animation_track_editor.cpp #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Insert Key" -msgstr "" +msgstr "कुंजी डालें" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Duplicate Key(s)" -msgstr "प्रतिलिपि" +msgstr "डुप्लीकेट कुंजी (ओं)" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Delete Key(s)" -msgstr "एनीमेशन को हटाने के लिए कुंजी" +msgstr "कुंजी को हटाएं" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Change Animation Update Mode" -msgstr "शब्द बदलें मूल्य" +msgstr "एनिमेशन अपडेट मोड बदलें" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Change Animation Interpolation Mode" -msgstr "शब्द बदलें मूल्य" +msgstr "एनिमेशन इंटरपोलेशन मोड बदलें" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Change Animation Loop Mode" -msgstr "एनिमेशन लूप" +msgstr "एनिमेशन लूप मोड बदलें" #: editor/animation_track_editor.cpp msgid "Remove Anim Track" -msgstr "" +msgstr "अनीम ट्रैक निकालें" #: editor/animation_track_editor.cpp msgid "Create NEW track for %s and insert key?" -msgstr "" +msgstr "% एस के लिए नया ट्रैक बनाएं और कुंजी डालें?" #: editor/animation_track_editor.cpp msgid "Create %d NEW tracks and insert keys?" -msgstr "" +msgstr "% D नए ट्रैक बनाएं और कुंजियाँ डालें?" #: editor/animation_track_editor.cpp editor/create_dialog.cpp #: editor/editor_audio_buses.cpp editor/editor_feature_profile.cpp @@ -375,40 +361,39 @@ msgstr "" #: editor/script_create_dialog.cpp #: modules/visual_script/visual_script_editor.cpp msgid "Create" -msgstr "" +msgstr "बनाना" #: editor/animation_track_editor.cpp msgid "Anim Insert" -msgstr "" +msgstr "अनीम डालें" #: editor/animation_track_editor.cpp msgid "AnimationPlayer can't animate itself, only other players." -msgstr "" +msgstr "एनिमेशनप्लेयर खुद को चेतन नहीं कर सकता, केवल अन्य खिलाड़ी।" #: editor/animation_track_editor.cpp msgid "Anim Create & Insert" -msgstr "" +msgstr "अनीम बनाएं और डालें" #: editor/animation_track_editor.cpp msgid "Anim Insert Track & Key" -msgstr "" +msgstr "अनीम डालें ट्रैक और कुंजी" #: editor/animation_track_editor.cpp msgid "Anim Insert Key" -msgstr "" +msgstr "अनीम डालें कुंजी" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Change Animation Step" -msgstr "शब्दकोश कुंजी बदलें" +msgstr "एनिमेशन स्टेप बदलें" #: editor/animation_track_editor.cpp msgid "Rearrange Tracks" -msgstr "" +msgstr "पटरियों को पुनर्व्यवस्थित करें" #: editor/animation_track_editor.cpp msgid "Transform tracks only apply to Spatial-based nodes." -msgstr "" +msgstr "पटरियों को बदलने केवल स्थानिक आधारित नोड्स पर लागू होते हैं।" #: editor/animation_track_editor.cpp msgid "" @@ -417,79 +402,79 @@ msgid "" "-AudioStreamPlayer2D\n" "-AudioStreamPlayer3D" msgstr "" +"ऑडियो ट्रैक केवल प्रकार के नोड्स को इंगित कर सकते हैं:\n" +"-ऑडियोस्ट्रीमप्लेयर\n" +"-ऑडियोस्ट्रीमप्लेयर2डी\n" +"-ऑडियोस्ट्रीमप्लेयर3डी" #: editor/animation_track_editor.cpp msgid "Animation tracks can only point to AnimationPlayer nodes." -msgstr "" +msgstr "एनिमेशन ट्रैक केवल एनिमेशनप्लेयर नोड्स को इंगित कर सकते हैं।" #: editor/animation_track_editor.cpp msgid "An animation player can't animate itself, only other players." -msgstr "" +msgstr "एक एनीमेशन खिलाड़ी खुद को चेतन नहीं कर सकता, केवल अन्य खिलाड़ी।" #: editor/animation_track_editor.cpp msgid "Not possible to add a new track without a root" -msgstr "" +msgstr "रूट के बिना नया ट्रैक जोड़ना संभव नहीं" #: editor/animation_track_editor.cpp msgid "Invalid track for Bezier (no suitable sub-properties)" -msgstr "" +msgstr "बेजियर के लिए अमान्य ट्रैक (कोई उपयुक्त उप-गुण नहीं)" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Add Bezier Track" -msgstr "ट्रैक जोड़ें" +msgstr "बेज़ियर ट्रैक जोड़ें" #: editor/animation_track_editor.cpp msgid "Track path is invalid, so can't add a key." -msgstr "" +msgstr "ट्रैक पथ अमान्य है, इसलिए एक कुंजी नहीं जोड़ सकते हैं।" #: editor/animation_track_editor.cpp msgid "Track is not of type Spatial, can't insert key" -msgstr "" +msgstr "ट्रैक प्रकार का नहीं है, स्थानिक नहीं डाला जा सकता है" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Add Transform Track Key" -msgstr "3 डी ट्रैक रूपांतरण" +msgstr "ट्रांसफ़ॉर्म ट्रैक कुंजी जोड़ें" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Add Track Key" -msgstr "ट्रैक जोड़ें" +msgstr "ट्रैक कुंजी जोड़ें" #: editor/animation_track_editor.cpp msgid "Track path is invalid, so can't add a method key." -msgstr "" +msgstr "ट्रैक पथ अमान्य है, इसलिए एक विधि कुंजी नहीं जोड़ सकते हैं।" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Add Method Track Key" -msgstr "कॉल मेथड ट्रैक" +msgstr "विधि ट्रैक कुंजी जोड़ें" #: editor/animation_track_editor.cpp msgid "Method not found in object: " -msgstr "" +msgstr "ऑब्जेक्ट में नहीं पाया गया विधि: " #: editor/animation_track_editor.cpp msgid "Anim Move Keys" -msgstr "" +msgstr "ऐनिमेटेड मूव कीज़" #: editor/animation_track_editor.cpp msgid "Clipboard is empty" -msgstr "" +msgstr "क्लिपबोर्ड खाली है" #: editor/animation_track_editor.cpp msgid "Paste Tracks" -msgstr "" +msgstr "पेस्ट ट्रैक" #: editor/animation_track_editor.cpp msgid "Anim Scale Keys" -msgstr "" +msgstr "एनिमेटेड स्केल कुंजी" #: editor/animation_track_editor.cpp msgid "" "This option does not work for Bezier editing, as it's only a single track." -msgstr "" +msgstr "यह विकल्प बेज़ियर संपादन के लिए काम नहीं करता है, क्योंकि यह केवल एक ही ट्रैक है।" #: editor/animation_track_editor.cpp msgid "" @@ -503,38 +488,46 @@ msgid "" "Alternatively, use an import preset that imports animations to separate " "files." msgstr "" +"यह एनीमेशन एक आयातित दृश्य से संबंधित है, इसलिए आयातित पटरियों में परिवर्तन नहीं सहेजे " +"जाएंगे।\n" +"\n" +"कस्टम ट्रैक जोड़ने की क्षमता को सक्षम करने के लिए, दृश्य की आयात सेटिंग्स और सेट पर नेविगेट " +"करें\n" +"\"एनिमेशन > स्टोरेज\" से \"फाइल्स\", \"एनिमेशन > कस्टम ट्रैक रखें\", फिर री-इम्पोर्ट करें।\n" +"वैकल्पिक रूप से, एक आयात पूर्व निर्धारित का उपयोग करें जो फ़ाइलों को अलग करने के लिए " +"एनिमेशन आयात करता है।" #: editor/animation_track_editor.cpp msgid "Warning: Editing imported animation" -msgstr "" +msgstr "चेतावनी: आयातित एनीमेशन संपादन" #: editor/animation_track_editor.cpp msgid "Select an AnimationPlayer node to create and edit animations." -msgstr "" +msgstr "एनिमेशन बनाने और संपादित करने के लिए एनिमेशनप्लेयर नोड का चयन करें।" #: editor/animation_track_editor.cpp msgid "Only show tracks from nodes selected in tree." -msgstr "" +msgstr "केवल पेड़ में चयनित नोड्स से पटरियों को दिखाएं।" #: editor/animation_track_editor.cpp msgid "Group tracks by node or display them as plain list." -msgstr "" +msgstr "समूह द्वारा पटरियों नोड या प्रदर्शन के रूप में उन्हें सादे सूची." #: editor/animation_track_editor.cpp msgid "Snap:" -msgstr "" +msgstr "आकस्मिक:" #: editor/animation_track_editor.cpp msgid "Animation step value." -msgstr "" +msgstr "एनीमेशन स्टेप वैल्यू।" #: editor/animation_track_editor.cpp msgid "Seconds" -msgstr "" +msgstr "सेकंड" #: editor/animation_track_editor.cpp msgid "FPS" -msgstr "" +msgstr "एफपीएस" #: editor/animation_track_editor.cpp editor/editor_properties.cpp #: editor/plugins/polygon_2d_editor_plugin.cpp @@ -544,109 +537,107 @@ msgstr "" #: editor/project_settings_editor.cpp editor/property_editor.cpp #: modules/visual_script/visual_script_editor.cpp msgid "Edit" -msgstr "" +msgstr "संपादित" #: editor/animation_track_editor.cpp msgid "Animation properties." -msgstr "" +msgstr "एनिमेशन गुण।" #: editor/animation_track_editor.cpp msgid "Copy Tracks" -msgstr "" +msgstr "कॉपी ट्रैक" #: editor/animation_track_editor.cpp msgid "Scale Selection" -msgstr "" +msgstr "स्केल चयन" #: editor/animation_track_editor.cpp msgid "Scale From Cursor" -msgstr "" +msgstr "कर्सर से स्केल" #: editor/animation_track_editor.cpp modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Duplicate Selection" -msgstr "डुप्लिकेट चयन" +msgstr "डुप्लीकेट चयन" #: editor/animation_track_editor.cpp msgid "Duplicate Transposed" -msgstr "" +msgstr "डुप्लीकेट ट्रांसपेश" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Delete Selection" -msgstr "डुप्लिकेट चयन" +msgstr "चयन हटाएं" #: editor/animation_track_editor.cpp msgid "Go to Next Step" -msgstr "" +msgstr "अगले चरण में जाएं" #: editor/animation_track_editor.cpp msgid "Go to Previous Step" -msgstr "" +msgstr "पिछले चरण में जाएं" #: editor/animation_track_editor.cpp msgid "Optimize Animation" -msgstr "" +msgstr "एनिमेशन का अनुकूलन" #: editor/animation_track_editor.cpp msgid "Clean-Up Animation" -msgstr "" +msgstr "क्लीन-अप एनीमेशन" #: editor/animation_track_editor.cpp msgid "Pick the node that will be animated:" -msgstr "" +msgstr "एनिमेटेड हो जाएगा कि नोड उठाओ:" #: editor/animation_track_editor.cpp msgid "Use Bezier Curves" -msgstr "" +msgstr "बेज़ियर कर्व्स का प्रयोग करें" #: editor/animation_track_editor.cpp msgid "Anim. Optimizer" -msgstr "" +msgstr "Anim. अनुकूलक" #: editor/animation_track_editor.cpp msgid "Max. Linear Error:" -msgstr "" +msgstr "अधिकतम. रैखिक त्रुटि:" #: editor/animation_track_editor.cpp msgid "Max. Angular Error:" -msgstr "" +msgstr "अधिकतम. कोणीय त्रुटि:" #: editor/animation_track_editor.cpp msgid "Max Optimizable Angle:" -msgstr "" +msgstr "मैक्स ऑप्टिमाइज़ेबल एंगल:" #: editor/animation_track_editor.cpp msgid "Optimize" -msgstr "" +msgstr "ऑप्टिमाइज़" #: editor/animation_track_editor.cpp msgid "Remove invalid keys" -msgstr "" +msgstr "अमान्य चाबियां निकालें" #: editor/animation_track_editor.cpp msgid "Remove unresolved and empty tracks" -msgstr "" +msgstr "अनसुलझे और खाली पटरियों को हटादें" #: editor/animation_track_editor.cpp msgid "Clean-up all animations" -msgstr "" +msgstr "सभी एनिमेशन को साफ-सुथरा करें" #: editor/animation_track_editor.cpp msgid "Clean-Up Animation(s) (NO UNDO!)" -msgstr "" +msgstr "क्लीन-अप एनीमेशन (एस) (कोई पूर्ववत!)" #: editor/animation_track_editor.cpp msgid "Clean-Up" -msgstr "" +msgstr "साफ - सफाई" #: editor/animation_track_editor.cpp msgid "Scale Ratio:" -msgstr "" +msgstr "स्केल अनुपात:" #: editor/animation_track_editor.cpp msgid "Select Tracks to Copy" -msgstr "" +msgstr "कॉपी करने के लिए ट्रैक का चयन करें" #: editor/animation_track_editor.cpp editor/editor_log.cpp #: editor/editor_properties.cpp @@ -655,87 +646,85 @@ msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Copy" -msgstr "" +msgstr "कॉपी" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Select All/None" -msgstr "डुप्लिकेट चयन" +msgstr "सभी का चयन करें/" #: editor/animation_track_editor_plugins.cpp -#, fuzzy msgid "Add Audio Track Clip" -msgstr "ट्रैक जोड़ें" +msgstr "ऑडियो ट्रैक क्लिप जोड़ें" #: editor/animation_track_editor_plugins.cpp msgid "Change Audio Track Clip Start Offset" -msgstr "" +msgstr "ऑडियो ट्रैक क्लिप को बदलें ऑफसेट शुरू करें" #: editor/animation_track_editor_plugins.cpp msgid "Change Audio Track Clip End Offset" -msgstr "" +msgstr "ऑडियो ट्रैक क्लिप एंड ऑफसेट बदलें" #: editor/array_property_edit.cpp msgid "Resize Array" -msgstr "" +msgstr "रीसाइज रीव्यू" #: editor/array_property_edit.cpp msgid "Change Array Value Type" -msgstr "" +msgstr "व्यूह मूल्य प्रकार बदलें" #: editor/array_property_edit.cpp msgid "Change Array Value" -msgstr "" +msgstr "व्यूह मूल्य बदलें" #: editor/code_editor.cpp msgid "Go to Line" -msgstr "" +msgstr "लाइन पर जाएं" #: editor/code_editor.cpp msgid "Line Number:" -msgstr "" +msgstr "लाइन नंबर:" #: editor/code_editor.cpp -msgid "Replaced %d occurrence(s)." -msgstr "" +#, fuzzy +msgid "%d replaced." +msgstr "बदलने के" #: editor/code_editor.cpp editor/editor_help.cpp msgid "%d match." -msgstr "" +msgstr "% d मैच।" #: editor/code_editor.cpp editor/editor_help.cpp -#, fuzzy msgid "%d matches." -msgstr "एक जैसा:" +msgstr "% डी मैच।" #: editor/code_editor.cpp editor/find_in_files.cpp msgid "Match Case" -msgstr "" +msgstr "मैच मामला" #: editor/code_editor.cpp editor/find_in_files.cpp msgid "Whole Words" -msgstr "" +msgstr "पूरे शब्द" #: editor/code_editor.cpp editor/rename_dialog.cpp msgid "Replace" -msgstr "" +msgstr "बदलने के" #: editor/code_editor.cpp msgid "Replace All" -msgstr "" +msgstr "सबको बदली करें" #: editor/code_editor.cpp msgid "Selection Only" -msgstr "" +msgstr "केवल चयन" #: editor/code_editor.cpp editor/plugins/script_text_editor.cpp #: editor/plugins/text_editor.cpp msgid "Standard" -msgstr "" +msgstr "मानक" #: editor/code_editor.cpp editor/plugins/script_editor_plugin.cpp msgid "Toggle Scripts Panel" -msgstr "" +msgstr "टॉगल स्क्रिप्ट पैनल" #: editor/code_editor.cpp editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/texture_region_editor_plugin.cpp @@ -755,44 +744,38 @@ msgstr "रीसेट आकार" #: editor/code_editor.cpp msgid "Warnings" -msgstr "" +msgstr "चेतावनियाँ" #: editor/code_editor.cpp msgid "Line and column numbers." -msgstr "" +msgstr "लाइन और कॉलम नंबर।" #: editor/connections_dialog.cpp -#, fuzzy msgid "Method in target node must be specified." -msgstr "लक्ष्य नोड में विधि निर्दिष्ट किया जाना चाहिए!" +msgstr "लक्ष्य नोड में विधि निर्दिष्ट की जानी चाहिए।" #: editor/connections_dialog.cpp -#, fuzzy msgid "" "Target method not found. Specify a valid method or attach a script to the " "target node." msgstr "" -"लक्ष्य विधि नहीं मिला! एक वैध विधि निर्दिष्ट करें या नोड को लक्षित करने के लिए एक " -"स्क्रिप्ट संलग्न करें।" +"लक्ष्य विधि नहीं मिली। एक मान्य विधि निर्दिष्ट करें या स्क्रिप्ट को लक्ष्य नोड में संलग्न करें।" #: editor/connections_dialog.cpp -#, fuzzy msgid "Connect to Node:" -msgstr "जुडिये" +msgstr "नोड से कनेक्ट करें:" #: editor/connections_dialog.cpp -#, fuzzy msgid "Connect to Script:" -msgstr "कनेक्ट करने के लिए संकेत:" +msgstr "स्क्रिप्ट से कनेक्ट:" #: editor/connections_dialog.cpp -#, fuzzy msgid "From Signal:" -msgstr "कनेक्ट करने के लिए संकेत:" +msgstr "सिग्नल से:" #: editor/connections_dialog.cpp msgid "Scene does not contain any script." -msgstr "" +msgstr "सीन में कोई स्क्रिप्ट नहीं होती।" #: editor/connections_dialog.cpp editor/editor_autoload_settings.cpp #: editor/groups_editor.cpp editor/plugins/item_list_editor_plugin.cpp @@ -813,23 +796,21 @@ msgstr "मिटाना" #: editor/connections_dialog.cpp msgid "Add Extra Call Argument:" -msgstr "" +msgstr "अतिरिक्त कॉल तर्क जोड़ें:" #: editor/connections_dialog.cpp msgid "Extra Call Arguments:" -msgstr "" +msgstr "अतिरिक्त कॉल तर्क:" #: editor/connections_dialog.cpp msgid "Receiver Method:" -msgstr "" +msgstr "रिसीवर विधि:" #: editor/connections_dialog.cpp -#, fuzzy msgid "Advanced" -msgstr "संतुलित" +msgstr "उन्नत" #: editor/connections_dialog.cpp -#, fuzzy msgid "Deferred" msgstr "स्थगित" @@ -837,19 +818,20 @@ msgstr "स्थगित" msgid "" "Defers the signal, storing it in a queue and only firing it at idle time." msgstr "" +"संकेत को स्थगित कर देता है, इसे एक कतार में संग्रहित करता है और केवल निष्क्रिय समय पर इसे " +"फायरिंग करता है।" #: editor/connections_dialog.cpp msgid "Oneshot" -msgstr "" +msgstr "वनशॉट" #: editor/connections_dialog.cpp msgid "Disconnects the signal after its first emission." -msgstr "" +msgstr "अपने पहले उत्सर्जन के बाद संकेत डिस्कनेक्ट करता है।" #: editor/connections_dialog.cpp -#, fuzzy msgid "Cannot connect signal" -msgstr "कनेक्ट करने के लिए संकेत:" +msgstr "सिग्नल कनेक्ट नहीं कर सकते" #: editor/connections_dialog.cpp editor/dependency_editor.cpp #: editor/export_template_manager.cpp editor/groups_editor.cpp @@ -867,34 +849,28 @@ msgid "Close" msgstr "बंद करे" #: editor/connections_dialog.cpp -#, fuzzy msgid "Connect" -msgstr "जुडिये" +msgstr "जोड़ना" #: editor/connections_dialog.cpp -#, fuzzy msgid "Signal:" -msgstr "संकेत" +msgstr "संकेत:" #: editor/connections_dialog.cpp -#, fuzzy msgid "Connect '%s' to '%s'" -msgstr "जुडिये '%s' to '%s'" +msgstr "'%' को '%' से कनेक्ट करें" #: editor/connections_dialog.cpp -#, fuzzy msgid "Disconnect '%s' from '%s'" -msgstr "जुडिये '%s' to '%s'" +msgstr "'%' से डिस्कनेक्ट करें '%'" #: editor/connections_dialog.cpp -#, fuzzy msgid "Disconnect all from signal: '%s'" -msgstr "जुडिये '%s' to '%s'" +msgstr "सभी को सिग्नल से डिस्कनेक्ट करें: '%s'" #: editor/connections_dialog.cpp -#, fuzzy msgid "Connect..." -msgstr "जुडिये..." +msgstr "जोड़ना..." #: editor/connections_dialog.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp @@ -902,18 +878,16 @@ msgid "Disconnect" msgstr "डिस्कनेक्ट" #: editor/connections_dialog.cpp -#, fuzzy msgid "Connect a Signal to a Method" -msgstr "कनेक्ट करने के लिए संकेत:" +msgstr "एक विधि के लिए एक संकेत कनेक्ट" #: editor/connections_dialog.cpp -#, fuzzy msgid "Edit Connection:" -msgstr "परिवर्तन वक्र चयन" +msgstr "संपादित करें कनेक्शन:" #: editor/connections_dialog.cpp msgid "Are you sure you want to remove all connections from the \"%s\" signal?" -msgstr "" +msgstr "क्या आपसुनिश्चित हैं कि आप \"% एस\" सिग्नल से सभी कनेक्शन हटाना चाहते हैं?" #: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp msgid "Signals" @@ -921,16 +895,15 @@ msgstr "संकेत" #: editor/connections_dialog.cpp msgid "Are you sure you want to remove all connections from this signal?" -msgstr "" +msgstr "क्या आप सुनिश्चित हैं कि आप इस सिग्नल से सभी कनेक्शन हटाना चाहते हैं?" #: editor/connections_dialog.cpp -#, fuzzy msgid "Disconnect All" -msgstr "डिस्कनेक्ट" +msgstr "सभी को डिस्कनेक्ट करें" #: editor/connections_dialog.cpp msgid "Edit..." -msgstr "" +msgstr "संपादित..." #: editor/connections_dialog.cpp msgid "Go To Method" @@ -942,12 +915,11 @@ msgstr "" #: editor/create_dialog.cpp editor/project_settings_editor.cpp msgid "Change" -msgstr "" +msgstr "परिवर्तन" #: editor/create_dialog.cpp -#, fuzzy msgid "Create New %s" -msgstr "एक नया बनाएं" +msgstr "नया%s बनाएं" #: editor/create_dialog.cpp editor/editor_file_dialog.cpp #: editor/filesystem_dock.cpp @@ -961,9 +933,8 @@ msgstr "हाल ही में किया:" #: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp #: editor/property_selector.cpp editor/quick_open.cpp #: modules/visual_script/visual_script_property_selector.cpp -#, fuzzy msgid "Search:" -msgstr "खोज कर:" +msgstr "खोज:" #: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp #: editor/property_selector.cpp editor/quick_open.cpp @@ -984,33 +955,29 @@ msgid "Search Replacement For:" msgstr "इसके लिए खोजी प्रतिस्थापन:" #: editor/dependency_editor.cpp -#, fuzzy msgid "Dependencies For:" -msgstr "के लिए निर्भरता:" +msgstr "निर्भरता के लिए:" #: editor/dependency_editor.cpp -#, fuzzy msgid "" "Scene '%s' is currently being edited.\n" "Changes will only take effect when reloaded." msgstr "" -"दृश्य '%s' वर्तमान में संपादित किया जा रहा है।\n" -"परिवर्तन तब तक प्रभावी नहीं होंगे जब तक कि पुनः लोड नहीं किए जाएंगे।" +"दृश्य '%' वर्तमान में संपादित किया जा रहा है।\n" +"परिवर्तन केवल तभी प्रभावी होंगे जब रीलोड किया जाएगा।" #: editor/dependency_editor.cpp -#, fuzzy msgid "" "Resource '%s' is in use.\n" "Changes will only take effect when reloaded." msgstr "" -"संसाधन '%s' उपयोग में है\n" -"पुनः लोड होने पर परिवर्तन प्रभावी होंगे।" +"संसाधन '%' उपयोग में है।\n" +"परिवर्तन केवल तभी प्रभावी होंगे जब रीलोड किया जाएगा।" #: editor/dependency_editor.cpp #: modules/gdnative/gdnative_library_editor_plugin.cpp -#, fuzzy msgid "Dependencies" -msgstr "निर्भरता" +msgstr "निर्भरताएँ" #: editor/dependency_editor.cpp msgid "Resource" @@ -1026,9 +993,8 @@ msgid "Dependencies:" msgstr "निर्भरता:" #: editor/dependency_editor.cpp -#, fuzzy msgid "Fix Broken" -msgstr "टूटी सही कर देंगे?" +msgstr "टूटा ठीक करें" #: editor/dependency_editor.cpp msgid "Dependency Editor" @@ -1053,9 +1019,8 @@ msgid "Owners Of:" msgstr "के स्वामी:" #: editor/dependency_editor.cpp -#, fuzzy msgid "Remove selected files from the project? (Can't be restored)" -msgstr "परियोजना से चयनित फ़ाइलें निकालें? (कोई पूर्ववत नहीं)" +msgstr "परियोजना से चयनित फ़ाइलों को हटा दें? (बहाल नहीं किया जा सकता है)" #: editor/dependency_editor.cpp msgid "" @@ -1067,18 +1032,16 @@ msgstr "" "वैसे भी उन्हें निकालें? (कोई पूर्ववत नहीं)" #: editor/dependency_editor.cpp -#, fuzzy msgid "Cannot remove:" -msgstr "निकाला नहीं जा सकता:\n" +msgstr "नहीं हटा सकते:" #: editor/dependency_editor.cpp msgid "Error loading:" msgstr "लोड होने मे त्रुटि:" #: editor/dependency_editor.cpp -#, fuzzy msgid "Load failed due to missing dependencies:" -msgstr "लापता निर्भरताओं के कारण दृश्य लोड करने में विफल रहे:" +msgstr "गायब निर्भरता के कारण लोड विफल रहा:" #: editor/dependency_editor.cpp editor/editor_node.cpp msgid "Open Anyway" @@ -1101,14 +1064,12 @@ msgid "Permanently delete %d item(s)? (No undo!)" msgstr "%d आइटम को स्थायी रूप से हटाएं? (नहीं पूर्ववत करें!)" #: editor/dependency_editor.cpp -#, fuzzy msgid "Show Dependencies" -msgstr "निर्भरता" +msgstr "निर्भरता दिखाएं" #: editor/dependency_editor.cpp -#, fuzzy msgid "Orphan Resource Explorer" -msgstr "Orphan Resource Explorer" +msgstr "अनाथ संसाधन एक्सप्लोरर" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp @@ -1151,9 +1112,8 @@ msgid "Lead Developer" msgstr "प्रमुख डेवलपर" #: editor/editor_about.cpp -#, fuzzy msgid "Project Manager " -msgstr "प्रोजेक्ट मैनेजर" +msgstr "परियोजना प्रबंधक " #: editor/editor_about.cpp msgid "Developers" @@ -1196,21 +1156,19 @@ msgid "License" msgstr "लाइसेंस" #: editor/editor_about.cpp -#, fuzzy msgid "Third-party Licenses" -msgstr "Thirdparty License" +msgstr "थर्ड पार्टी लाइसेंस" #: editor/editor_about.cpp -#, fuzzy msgid "" "Godot Engine relies on a number of third-party free and open source " "libraries, all compatible with the terms of its MIT license. The following " "is an exhaustive list of all such third-party components with their " "respective copyright statements and license terms." msgstr "" -"गोडोट इंजन तीसरे पक्ष के स्वतंत्र और खुले स्रोत पुस्तकालयों पर निर्भर करता है, जो कि इसके " -"एमआईटी लाइसेंस की शर्तों के साथ संगत है। निम्नलिखित ऐसे सभी तृतीय पक्ष घटकों की एक विस्तृत " -"सूची है जो उनके संबंधित कॉपीराइट कथन और लाइसेंस शर्तों के साथ हैं।" +"गोडोट इंजन अपने MIT लाइसेंस की शर्तों के साथ सभी तृतीय-पक्ष मुक्त और मुक्त स्रोत पुस्तकालयों " +"पर निर्भर करता है। निम्नलिखित ऐसे सभी तृतीय-पक्ष घटकों की एक विस्तृत सूची है, जिनके " +"संबंधित कॉपीराइट स्टेटमेंट और लाइसेंस शर्तें हैं।" #: editor/editor_about.cpp msgid "All Components" @@ -1221,18 +1179,16 @@ msgid "Components" msgstr "अवयव" #: editor/editor_about.cpp -#, fuzzy msgid "Licenses" -msgstr "Licenses" +msgstr "लाइसेंस" #: editor/editor_asset_installer.cpp editor/project_manager.cpp -#, fuzzy msgid "Error opening package file, not in ZIP format." -msgstr "पैकेज फ़ाइल खोलने में त्रुटि, zip प्रारूप में नहीं |" +msgstr "ज़िप फ़ाइल खोलने में त्रुटि, प्रारूप में नहीं।" #: editor/editor_asset_installer.cpp msgid "%s (Already Exists)" -msgstr "" +msgstr "%s (पहले से मौजूद है)" #: editor/editor_asset_installer.cpp msgid "Uncompressing Assets" @@ -1247,9 +1203,8 @@ msgid "And %s more files." msgstr "" #: editor/editor_asset_installer.cpp editor/project_manager.cpp -#, fuzzy msgid "Package installed successfully!" -msgstr "पैकेज सफलतापूर्वक स्थापित किया गया!" +msgstr "पैकेज सफलतापूर्वक स्थापित!" #: editor/editor_asset_installer.cpp #: editor/plugins/asset_library_editor_plugin.cpp @@ -1257,18 +1212,16 @@ msgid "Success!" msgstr "सफलता!" #: editor/editor_asset_installer.cpp -#, fuzzy msgid "Package Contents:" -msgstr "Package Installer" +msgstr "पैकेज सामग्री:" #: editor/editor_asset_installer.cpp editor/editor_node.cpp msgid "Install" msgstr "इंस्टॉल" #: editor/editor_asset_installer.cpp -#, fuzzy msgid "Package Installer" -msgstr "Package Installer" +msgstr "पैकेज इंस्टॉलर" #: editor/editor_audio_buses.cpp msgid "Speakers" @@ -1283,9 +1236,8 @@ msgid "Rename Audio Bus" msgstr "ऑडियो बस का नाम बदलें" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Change Audio Bus Volume" -msgstr "ऑडियो बस सोलो टॉगल करें" +msgstr "ऑडियो बस वॉल्यूम बदलें" #: editor/editor_audio_buses.cpp msgid "Toggle Audio Bus Solo" @@ -1300,7 +1252,6 @@ msgid "Toggle Audio Bus Bypass Effects" msgstr "ऑडियो बस बायपास प्रभाव टॉगल करें" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Select Audio Bus Send" msgstr "ऑडियो बस भेजें का चयन करें" @@ -1313,21 +1264,18 @@ msgid "Move Bus Effect" msgstr "बस प्रभाव हटो" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Delete Bus Effect" -msgstr "बस प्रभाव हटाना" +msgstr "बस प्रभाव हटाएं" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Drag & drop to rearrange." -msgstr "पुन: व्यवस्थित करने के लिए ऑडियो बस, खींचें और ड्रॉप |" +msgstr "पुनर्व्यवस्थित करने के लिए खींचें और छोड़ दें।" #: editor/editor_audio_buses.cpp msgid "Solo" -msgstr "" +msgstr "एकल" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Mute" msgstr "मूक" @@ -1350,11 +1298,11 @@ msgstr "वॉल्यूम रीसेट करें" #: editor/editor_audio_buses.cpp msgid "Delete Effect" -msgstr "" +msgstr "डिलीट इफेक्ट" #: editor/editor_audio_buses.cpp msgid "Audio" -msgstr "" +msgstr "ऑडियो" #: editor/editor_audio_buses.cpp msgid "Add Audio Bus" @@ -1386,7 +1334,7 @@ msgstr "" #: editor/editor_audio_buses.cpp msgid "Location for New Layout..." -msgstr "" +msgstr "नए लेआउट के लिए स्थान..." #: editor/editor_audio_buses.cpp msgid "Open Audio Bus Layout" @@ -1405,9 +1353,8 @@ msgid "Invalid file, not an audio bus layout." msgstr "" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Error saving file: %s" -msgstr "लोड हो रहा है त्रुटियाँ!" +msgstr "त्रुटि बचत फ़ाइल: %s" #: editor/editor_audio_buses.cpp msgid "Add Bus" @@ -1500,9 +1447,8 @@ msgid "Rearrange Autoloads" msgstr "" #: editor/editor_autoload_settings.cpp editor/script_create_dialog.cpp -#, fuzzy msgid "Invalid path." -msgstr "गलत फॉण्ट का आकार |" +msgstr "अमान्य रास्ता।" #: editor/editor_autoload_settings.cpp editor/script_create_dialog.cpp msgid "File does not exist." @@ -1640,9 +1586,8 @@ msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB." msgstr "" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "3D Editor" -msgstr "निर्भरता संपादक" +msgstr "3D संपादक" #: editor/editor_feature_profile.cpp #, fuzzy @@ -1979,9 +1924,8 @@ msgid "Inherited by:" msgstr "" #: editor/editor_help.cpp -#, fuzzy msgid "Description" -msgstr "विवरण:" +msgstr "विवरण" #: editor/editor_help.cpp msgid "Online Tutorials" @@ -3455,7 +3399,7 @@ msgstr "" #: editor/export_template_manager.cpp #, fuzzy msgid "Cannot remove temporary file:" -msgstr "निकाला नहीं जा सकता:\n" +msgstr "निकाला नहीं जा सकता:" #: editor/export_template_manager.cpp msgid "" @@ -3464,7 +3408,6 @@ msgid "" msgstr "" #: editor/export_template_manager.cpp -#, fuzzy msgid "Error requesting URL:" msgstr "लोड होने मे त्रुटि:" @@ -3490,9 +3433,8 @@ msgid "Connecting..." msgstr "" #: editor/export_template_manager.cpp -#, fuzzy msgid "Can't Connect" -msgstr "जुडिये" +msgstr "कनेक्ट नहीं कर सकते" #: editor/export_template_manager.cpp msgid "Connected" @@ -3516,9 +3458,8 @@ msgid "SSL Handshake Error" msgstr "" #: editor/export_template_manager.cpp -#, fuzzy msgid "Uncompressing Android Build Sources" -msgstr "असंपीड़ित संपत्तियां" +msgstr "अनकॉमिंग एंड्रॉइड बिल्ड स्रोत" #: editor/export_template_manager.cpp msgid "Current Version:" @@ -3537,9 +3478,8 @@ msgid "Remove Template" msgstr "" #: editor/export_template_manager.cpp -#, fuzzy msgid "Select Template File" -msgstr "चयनित फ़ाइलें हटाएं?" +msgstr "टेम्पलेट फ़ाइल का चयन करें" #: editor/export_template_manager.cpp msgid "Godot Export Templates" @@ -3558,9 +3498,8 @@ msgid "Select mirror from list: (Shift+Click: Open in Browser)" msgstr "" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Favorites" -msgstr "पसंदीदा:" +msgstr "पसंद" #: editor/filesystem_dock.cpp msgid "Status: Import of file failed. Please fix file and reimport manually." @@ -3575,19 +3514,16 @@ msgid "Cannot move a folder into itself." msgstr "" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Error moving:" -msgstr "लोड होने मे त्रुटि:" +msgstr "त्रुटि चलती:" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Error duplicating:" -msgstr "लोड होने मे त्रुटि:" +msgstr "त्रुटि दोहराना:" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Unable to update dependencies:" -msgstr "लापता निर्भरताओं के कारण दृश्य लोड करने में विफल रहे:" +msgstr "निर्भरता को अपडेट करने में असमर्थ:" #: editor/filesystem_dock.cpp editor/scene_tree_editor.cpp msgid "No name provided." @@ -3614,14 +3550,12 @@ msgid "Renaming folder:" msgstr "" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Duplicating file:" -msgstr "प्रतिलिपि" +msgstr "डुप्लिकेट फाइल:" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Duplicating folder:" -msgstr "प्रतिलिपि" +msgstr "डुप्लिकेटिंग फ़ोल्डर:" #: editor/filesystem_dock.cpp msgid "New Inherited Scene" @@ -3632,23 +3566,20 @@ msgid "Set As Main Scene" msgstr "" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Open Scenes" -msgstr "खोलो इसे" +msgstr "खुले दृश्य" #: editor/filesystem_dock.cpp msgid "Instance" msgstr "" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Add to Favorites" -msgstr "पसंदीदा:" +msgstr "पसंदीदा में जोड़ें" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Remove from Favorites" -msgstr "पसंदीदा:" +msgstr "पसंदीदा से निकालें" #: editor/filesystem_dock.cpp msgid "Edit Dependencies..." @@ -3663,27 +3594,24 @@ msgid "Rename..." msgstr "" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Duplicate..." -msgstr "प्रतिलिपि" +msgstr "डुप्लिकेट..." #: editor/filesystem_dock.cpp msgid "Move To..." msgstr "" #: editor/filesystem_dock.cpp -#, fuzzy msgid "New Scene..." -msgstr "संसाधन" +msgstr "नया दृश्य..." #: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp msgid "New Script..." msgstr "" #: editor/filesystem_dock.cpp -#, fuzzy msgid "New Resource..." -msgstr "संसाधन" +msgstr "नया संसाधन..." #: editor/filesystem_dock.cpp editor/plugins/visual_shader_editor_plugin.cpp #: editor/script_editor_debugger.cpp @@ -3719,9 +3647,8 @@ msgid "Toggle Split Mode" msgstr "" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Search files" -msgstr "खोज कर:" +msgstr "फाइलें खोजें" #: editor/filesystem_dock.cpp msgid "" @@ -3742,9 +3669,8 @@ msgid "Overwrite" msgstr "" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Create Scene" -msgstr "एक नया बनाएं" +msgstr "दृश्य बनाएं" #: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp msgid "Create Script" @@ -3798,9 +3724,8 @@ msgid "Replace all (no undo)" msgstr "" #: editor/find_in_files.cpp -#, fuzzy msgid "Searching..." -msgstr "खोज कर:" +msgstr "खोज..." #: editor/find_in_files.cpp msgid "Search complete" @@ -3819,19 +3744,16 @@ msgid "Group name already exists." msgstr "" #: editor/groups_editor.cpp -#, fuzzy msgid "Invalid group name." -msgstr "गलत फॉण्ट का आकार |" +msgstr "अमान्य समूह नाम।" #: editor/groups_editor.cpp -#, fuzzy msgid "Rename Group" -msgstr "ऑडियो बस का नाम बदलें" +msgstr "नाम बदलना समूह" #: editor/groups_editor.cpp -#, fuzzy msgid "Delete Group" -msgstr "को हटा दें" +msgstr "ग्रुप डिलीट करें" #: editor/groups_editor.cpp editor/node_dock.cpp msgid "Groups" @@ -3855,9 +3777,8 @@ msgid "Empty groups will be automatically removed." msgstr "" #: editor/groups_editor.cpp -#, fuzzy msgid "Group Editor" -msgstr "निर्भरता संपादक" +msgstr "समूह संपादक" #: editor/groups_editor.cpp msgid "Manage Groups" @@ -3941,15 +3862,15 @@ msgid "Saving..." msgstr "" #: editor/import_dock.cpp -msgid "Set as Default for '%s'" +msgid "%d Files" msgstr "" #: editor/import_dock.cpp -msgid "Clear Default for '%s'" +msgid "Set as Default for '%s'" msgstr "" #: editor/import_dock.cpp -msgid " Files" +msgid "Clear Default for '%s'" msgstr "" #: editor/import_dock.cpp @@ -3957,9 +3878,8 @@ msgid "Import As:" msgstr "" #: editor/import_dock.cpp -#, fuzzy msgid "Preset" -msgstr "रीसेट आकार" +msgstr "प्रीसेट" #: editor/import_dock.cpp msgid "Reimport" @@ -4004,9 +3924,8 @@ msgid "Paste Params" msgstr "" #: editor/inspector_dock.cpp -#, fuzzy msgid "Edit Resource Clipboard" -msgstr "संसाधन" +msgstr "एडिट रिसोर्स क्लिपबोर्ड" #: editor/inspector_dock.cpp msgid "Copy Resource" @@ -4073,9 +3992,8 @@ msgid "Edit a Plugin" msgstr "" #: editor/plugin_config_dialog.cpp -#, fuzzy msgid "Create a Plugin" -msgstr "सदस्यता बनाएं" +msgstr "प्लगइन बनाएं" #: editor/plugin_config_dialog.cpp msgid "Plugin Name:" @@ -4099,16 +4017,14 @@ msgstr "" #: editor/plugins/abstract_polygon_2d_editor.cpp #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Create Polygon" -msgstr "सदस्यता बनाएं" +msgstr "बहुभुज बनाएँ" #: editor/plugins/abstract_polygon_2d_editor.cpp #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp -#, fuzzy msgid "Create points." -msgstr "एक नया बनाएं" +msgstr "अंक बनाएं।" #: editor/plugins/abstract_polygon_2d_editor.cpp msgid "" @@ -4123,9 +4039,8 @@ msgid "Erase points." msgstr "" #: editor/plugins/abstract_polygon_2d_editor.cpp -#, fuzzy msgid "Edit Polygon" -msgstr "सदस्यता बनाएं" +msgstr "बहुभुज संपादित करें" #: editor/plugins/abstract_polygon_2d_editor.cpp msgid "Insert Point" @@ -4175,15 +4090,13 @@ msgstr "" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp -#, fuzzy msgid "Add Node Point" -msgstr "पसंदीदा:" +msgstr "नोड प्वाइंट जोड़ें" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp -#, fuzzy msgid "Add Animation Point" -msgstr "एनिमेशन लूप" +msgstr "एनिमेशन प्वाइंट जोड़ें" #: editor/plugins/animation_blend_space_1d_editor.cpp msgid "Remove BlendSpace1D Point" @@ -4225,9 +4138,8 @@ msgstr "" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp -#, fuzzy msgid "Open Editor" -msgstr "निर्भरता संपादक" +msgstr "ओपन एडिटर" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp @@ -4241,9 +4153,8 @@ msgid "Triangle already exists." msgstr "" #: editor/plugins/animation_blend_space_2d_editor.cpp -#, fuzzy msgid "Add Triangle" -msgstr "ट्रैक जोड़ें" +msgstr "त्रिकोण जोड़ें" #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Change BlendSpace2D Limits" @@ -4318,26 +4229,22 @@ msgstr "" #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Nodes Connected" -msgstr "जुडिये" +msgstr "नोड्स कनेक्टेड" #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Nodes Disconnected" -msgstr "डिस्कनेक्ट" +msgstr "नोड्स डिस्कनेक्ट किए गए" #: editor/plugins/animation_blend_tree_editor_plugin.cpp -#, fuzzy msgid "Set Animation" -msgstr "एनिमेशन लूप" +msgstr "सेट एनिमेशन" #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Delete Node" -msgstr "को हटा दें" +msgstr "नोड हटाएं" #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/scene_tree_dock.cpp @@ -4372,14 +4279,12 @@ msgid "Anim Clips" msgstr "" #: editor/plugins/animation_blend_tree_editor_plugin.cpp -#, fuzzy msgid "Audio Clips" -msgstr "ट्रैक जोड़ें" +msgstr "ऑडियो क्लिप्स" #: editor/plugins/animation_blend_tree_editor_plugin.cpp -#, fuzzy msgid "Functions" -msgstr "कार्यों:" +msgstr "कार्यों" #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp @@ -4512,9 +4417,8 @@ msgid "Animation" msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Edit Transitions..." -msgstr "अनुवाद में बदलाव करें:" +msgstr "एडिट ट्रांजिशन..." #: editor/plugins/animation_player_editor_plugin.cpp msgid "Open in Inspector" @@ -4537,9 +4441,8 @@ msgid "Onion Skinning Options" msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Directions" -msgstr "विवरण:" +msgstr "निर्देशों" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Past" @@ -4613,14 +4516,12 @@ msgid "Move Node" msgstr "" #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Transition exists!" -msgstr "अनुवाद में बदलाव करें:" +msgstr "संक्रमण मौजूद है!" #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Add Transition" -msgstr "अनुवाद में बदलाव करें:" +msgstr "ट्रांजिशन जोड़ें" #: editor/plugins/animation_state_machine_editor.cpp #: modules/visual_script/visual_script_editor.cpp @@ -4656,14 +4557,12 @@ msgid "No playback resource set at path: %s." msgstr "" #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Node Removed" -msgstr "मिटाना" +msgstr "नोड हटाया गया" #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Transition Removed" -msgstr "अनुवाद में बदलाव करें:" +msgstr "संक्रमण हटाया गया" #: editor/plugins/animation_state_machine_editor.cpp msgid "Set Start Node (Autoplay)" @@ -4677,19 +4576,16 @@ msgid "" msgstr "" #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Create new nodes." -msgstr "एक नया बनाएं" +msgstr "नए नोड्स बनाएं।" #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Connect nodes." -msgstr "जुडिये" +msgstr "नोड्स कनेक्ट करें।" #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Remove selected node or transition." -msgstr "परियोजना से चयनित फ़ाइलें निकालें? (कोई पूर्ववत नहीं)" +msgstr "चयनित नोड या संक्रमण निकालें।" #: editor/plugins/animation_state_machine_editor.cpp msgid "Toggle autoplay this animation on start, restart or seek to zero." @@ -4700,9 +4596,8 @@ msgid "Set the end animation. This is useful for sub-transitions." msgstr "" #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Transition: " -msgstr "अनुवाद में बदलाव करें:" +msgstr "संक्रमण: " #: editor/plugins/animation_state_machine_editor.cpp msgid "Play Mode:" @@ -4711,7 +4606,7 @@ msgstr "" #: editor/plugins/animation_tree_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "AnimationTree" -msgstr "" +msgstr "एनिमेशनट्री" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "New name:" @@ -4882,9 +4777,8 @@ msgid "Request failed." msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Cannot save response to:" -msgstr "निकाला नहीं जा सकता:\n" +msgstr "जवाब नहीं बचा सकते:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Write error." @@ -4947,9 +4841,8 @@ msgid "Idle" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Install..." -msgstr "इंस्टॉल" +msgstr "स्थापित..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Retry" @@ -4980,14 +4873,12 @@ msgid "Name (Z-A)" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "License (A-Z)" -msgstr "लाइसेंस" +msgstr "लाइसेंस (ए-जेड)" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "License (Z-A)" -msgstr "लाइसेंस" +msgstr "लाइसेंस (जेड-ए)" #: editor/plugins/asset_library_editor_plugin.cpp msgid "First" @@ -5047,9 +4938,8 @@ msgid "Testing" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Loading..." -msgstr "खोज कर:" +msgstr "लोड..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Assets ZIP File" @@ -5118,28 +5008,24 @@ msgid "Move Vertical Guide" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Create Vertical Guide" -msgstr "एक नया बनाएं" +msgstr "वर्टिकल गाइड बनाएं" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Remove Vertical Guide" -msgstr "मिटाना" +msgstr "वर्टिकल गाइड निकालें" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move Horizontal Guide" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Create Horizontal Guide" -msgstr "एक नया बनाएं" +msgstr "क्षैतिज गाइड बनाएं" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Remove Horizontal Guide" -msgstr "मिटाना" +msgstr "क्षैतिज गाइड निकालें" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Create Horizontal and Vertical Guides" @@ -5291,33 +5177,29 @@ msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Group Selected" -msgstr "सभी खंड" +msgstr "समूह चयनित" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Ungroup Selected" -msgstr "सभी खंड" +msgstr "असमूह चयनित" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Paste Pose" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Clear Guides" -msgstr "एनीमेशन परिवर्तन परिणत" +msgstr "स्पष्ट गाइड" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Create Custom Bone(s) from Node(s)" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Clear Bones" -msgstr "एनीमेशन परिवर्तन परिणत" +msgstr "साफ हड्डियां" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Make IK Chain" @@ -5336,9 +5218,8 @@ msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/texture_region_editor_plugin.cpp #: editor/plugins/tile_set_editor_plugin.cpp scene/gui/graph_edit.cpp -#, fuzzy msgid "Zoom Reset" -msgstr "छोटा करो" +msgstr "ज़ूम रीसेट" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -5570,14 +5451,12 @@ msgid "" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Auto Insert Key" -msgstr "चाबी यहां डालें" +msgstr "ऑटो डालें कुंजी" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Animation Key and Pose Options" -msgstr "ऐनिमेशन लंबाई समय (सेकंड्स)" +msgstr "एनिमेशन कुंजी और मुद्रा विकल्प" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Insert Key (Existing Tracks)" @@ -5636,9 +5515,8 @@ msgid "" msgstr "" #: editor/plugins/collision_polygon_editor_plugin.cpp -#, fuzzy msgid "Create Polygon3D" -msgstr "सदस्यता बनाएं" +msgstr "बहुभुज 3डी बनाएं" #: editor/plugins/collision_polygon_editor_plugin.cpp msgid "Edit Poly" @@ -5757,9 +5635,8 @@ msgid "Load Curve Preset" msgstr "" #: editor/plugins/curve_editor_plugin.cpp -#, fuzzy msgid "Add Point" -msgstr "पसंदीदा:" +msgstr "प्वाइंट जोड़ें" #: editor/plugins/curve_editor_plugin.cpp #, fuzzy @@ -5823,11 +5700,11 @@ msgid "Mesh is empty!" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Trimesh Body" +msgid "Couldn't create a Trimesh collision shape." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Convex Body" +msgid "Create Static Trimesh Body" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -5839,12 +5716,29 @@ msgid "Create Trimesh Static Shape" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Failed creating shapes!" +msgid "Can't create a single convex collision shape for the scene root." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Couldn't create a single convex collision shape." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp #, fuzzy -msgid "Create Convex Shape(s)" +msgid "Create Single Convex Shape" +msgstr "एक नया बनाएं" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Can't create multiple convex collision shapes for the scene root." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Couldn't create any collision shapes." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Create Multiple Convex Shapes" msgstr "एक नया बनाएं" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -5896,19 +5790,57 @@ msgid "Create Trimesh Static Body" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a StaticBody and assigns a polygon-based collision shape to it " +"automatically.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Collision Sibling" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a polygon-based collision shape.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp #, fuzzy -msgid "Create Convex Collision Sibling(s)" +msgid "Create Single Convex Collision Siblings" msgstr "सदस्यता बनाएं" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a single convex collision shape.\n" +"This is the fastest (but least accurate) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Create Multiple Convex Collision Siblings" +msgstr "सदस्यता बनाएं" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a polygon-based collision shape.\n" +"This is a performance middle-ground between the two above options." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Outline Mesh..." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a static outline mesh. The outline mesh will have its normals " +"flipped automatically.\n" +"This can be used instead of the SpatialMaterial Grow property when using " +"that property isn't possible." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "View UV1" msgstr "" @@ -8336,7 +8268,7 @@ msgstr "" msgid "No VCS addons are available." msgstr "" -#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Error" msgstr "" @@ -9443,11 +9375,17 @@ msgid "Export With Debug" msgstr "" #: editor/project_manager.cpp -msgid "The path does not exist." +msgid "The path specified doesn't exist." msgstr "" #: editor/project_manager.cpp -msgid "Invalid '.zip' project file, does not contain a 'project.godot' file." +#, fuzzy +msgid "Error opening package file (it's not in ZIP format)." +msgstr "ज़िप फ़ाइल खोलने में त्रुटि, प्रारूप में नहीं।" + +#: editor/project_manager.cpp +msgid "" +"Invalid \".zip\" project file; it doesn't contain a \"project.godot\" file." msgstr "" #: editor/project_manager.cpp @@ -9455,11 +9393,11 @@ msgid "Please choose an empty folder." msgstr "" #: editor/project_manager.cpp -msgid "Please choose a 'project.godot' or '.zip' file." +msgid "Please choose a \"project.godot\" or \".zip\" file." msgstr "" #: editor/project_manager.cpp -msgid "Directory already contains a Godot project." +msgid "This directory already contains a Godot project." msgstr "" #: editor/project_manager.cpp @@ -9971,9 +9909,8 @@ msgid "Action:" msgstr "" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Action" -msgstr "सभी खंड" +msgstr "कार्य" #: editor/project_settings_editor.cpp msgid "Deadzone" @@ -10041,7 +9978,7 @@ msgstr "" #: editor/project_settings_editor.cpp msgid "Plugins" -msgstr "" +msgstr "प्लगइन्स" #: editor/property_editor.cpp msgid "Preset..." @@ -10112,6 +10049,10 @@ msgid "Suffix" msgstr "" #: editor/rename_dialog.cpp +msgid "Use Regular Expressions" +msgstr "" + +#: editor/rename_dialog.cpp msgid "Advanced Options" msgstr "" @@ -10146,7 +10087,7 @@ msgid "" msgstr "" #: editor/rename_dialog.cpp -msgid "Per Level counter" +msgid "Per-level Counter" msgstr "" #: editor/rename_dialog.cpp @@ -10176,10 +10117,6 @@ msgid "" msgstr "" #: editor/rename_dialog.cpp -msgid "Regular Expressions" -msgstr "" - -#: editor/rename_dialog.cpp msgid "Post-Process" msgstr "" @@ -10188,11 +10125,11 @@ msgid "Keep" msgstr "" #: editor/rename_dialog.cpp -msgid "CamelCase to under_scored" +msgid "PascalCase to snake_case" msgstr "" #: editor/rename_dialog.cpp -msgid "under_scored to CamelCase" +msgid "snake_case to PascalCase" msgstr "" #: editor/rename_dialog.cpp @@ -10212,6 +10149,14 @@ msgstr "" msgid "Reset" msgstr "रीसेट आकार" +#: editor/rename_dialog.cpp +msgid "Regular Expression Error" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "At character %s" +msgstr "" + #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "" @@ -10663,7 +10608,7 @@ msgid "Invalid inherited parent name or path." msgstr "" #: editor/script_create_dialog.cpp -msgid "Script is valid." +msgid "Script path/name is valid." msgstr "" #: editor/script_create_dialog.cpp @@ -10762,6 +10707,10 @@ msgid "Copy Error" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Video RAM" +msgstr "" + +#: editor/script_editor_debugger.cpp #, fuzzy msgid "Skip Breakpoints" msgstr "एक नया बनाएं" @@ -10811,10 +10760,6 @@ msgid "Total:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Video Mem" -msgstr "" - -#: editor/script_editor_debugger.cpp msgid "Resource Path" msgstr "" @@ -12361,6 +12306,9 @@ msgstr "" msgid "Constants cannot be modified." msgstr "" +#~ msgid "Replaced %d occurrence(s)." +#~ msgstr "बदल दिया % डी घटना (एस) ।" + #, fuzzy #~ msgid "Brief Description" #~ msgstr "विवरण:" diff --git a/editor/translations/hr.po b/editor/translations/hr.po index bc5abb76fc..5922d2effb 100644 --- a/editor/translations/hr.po +++ b/editor/translations/hr.po @@ -671,8 +671,9 @@ msgid "Line Number:" msgstr "Broj linije:" #: editor/code_editor.cpp -msgid "Replaced %d occurrence(s)." -msgstr "Zamijenjeno %d pojavljivanja." +#, fuzzy +msgid "%d replaced." +msgstr "Zamijeni" #: editor/code_editor.cpp editor/editor_help.cpp msgid "%d match." @@ -3825,15 +3826,16 @@ msgid "Saving..." msgstr "" #: editor/import_dock.cpp -msgid "Set as Default for '%s'" -msgstr "" +#, fuzzy +msgid "%d Files" +msgstr "Datoteka:" #: editor/import_dock.cpp -msgid "Clear Default for '%s'" +msgid "Set as Default for '%s'" msgstr "" #: editor/import_dock.cpp -msgid " Files" +msgid "Clear Default for '%s'" msgstr "" #: editor/import_dock.cpp @@ -5678,11 +5680,11 @@ msgid "Mesh is empty!" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Trimesh Body" +msgid "Couldn't create a Trimesh collision shape." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Convex Body" +msgid "Create Static Trimesh Body" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -5694,11 +5696,27 @@ msgid "Create Trimesh Static Shape" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Failed creating shapes!" +msgid "Can't create a single convex collision shape for the scene root." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Couldn't create a single convex collision shape." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Single Convex Shape" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Can't create multiple convex collision shapes for the scene root." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Couldn't create any collision shapes." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Convex Shape(s)" +msgid "Create Multiple Convex Shapes" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -5750,11 +5768,40 @@ msgid "Create Trimesh Static Body" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a StaticBody and assigns a polygon-based collision shape to it " +"automatically.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Collision Sibling" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Convex Collision Sibling(s)" +msgid "" +"Creates a polygon-based collision shape.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Single Convex Collision Siblings" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a single convex collision shape.\n" +"This is the fastest (but least accurate) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Multiple Convex Collision Siblings" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a polygon-based collision shape.\n" +"This is a performance middle-ground between the two above options." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -5762,6 +5809,14 @@ msgid "Create Outline Mesh..." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a static outline mesh. The outline mesh will have its normals " +"flipped automatically.\n" +"This can be used instead of the SpatialMaterial Grow property when using " +"that property isn't possible." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "View UV1" msgstr "" @@ -8135,7 +8190,7 @@ msgstr "" msgid "No VCS addons are available." msgstr "" -#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Error" msgstr "" @@ -9229,11 +9284,17 @@ msgid "Export With Debug" msgstr "" #: editor/project_manager.cpp -msgid "The path does not exist." +msgid "The path specified doesn't exist." msgstr "" #: editor/project_manager.cpp -msgid "Invalid '.zip' project file, does not contain a 'project.godot' file." +#, fuzzy +msgid "Error opening package file (it's not in ZIP format)." +msgstr "Pogreška prilikom otvaranja datoteke paketa, nije u ZIP formatu." + +#: editor/project_manager.cpp +msgid "" +"Invalid \".zip\" project file; it doesn't contain a \"project.godot\" file." msgstr "" #: editor/project_manager.cpp @@ -9241,11 +9302,11 @@ msgid "Please choose an empty folder." msgstr "" #: editor/project_manager.cpp -msgid "Please choose a 'project.godot' or '.zip' file." +msgid "Please choose a \"project.godot\" or \".zip\" file." msgstr "" #: editor/project_manager.cpp -msgid "Directory already contains a Godot project." +msgid "This directory already contains a Godot project." msgstr "" #: editor/project_manager.cpp @@ -9891,6 +9952,10 @@ msgid "Suffix" msgstr "" #: editor/rename_dialog.cpp +msgid "Use Regular Expressions" +msgstr "" + +#: editor/rename_dialog.cpp msgid "Advanced Options" msgstr "" @@ -9925,7 +9990,7 @@ msgid "" msgstr "" #: editor/rename_dialog.cpp -msgid "Per Level counter" +msgid "Per-level Counter" msgstr "" #: editor/rename_dialog.cpp @@ -9955,10 +10020,6 @@ msgid "" msgstr "" #: editor/rename_dialog.cpp -msgid "Regular Expressions" -msgstr "" - -#: editor/rename_dialog.cpp msgid "Post-Process" msgstr "" @@ -9967,11 +10028,11 @@ msgid "Keep" msgstr "" #: editor/rename_dialog.cpp -msgid "CamelCase to under_scored" +msgid "PascalCase to snake_case" msgstr "" #: editor/rename_dialog.cpp -msgid "under_scored to CamelCase" +msgid "snake_case to PascalCase" msgstr "" #: editor/rename_dialog.cpp @@ -9990,6 +10051,14 @@ msgstr "" msgid "Reset" msgstr "" +#: editor/rename_dialog.cpp +msgid "Regular Expression Error" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "At character %s" +msgstr "" + #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "" @@ -10433,7 +10502,7 @@ msgid "Invalid inherited parent name or path." msgstr "" #: editor/script_create_dialog.cpp -msgid "Script is valid." +msgid "Script path/name is valid." msgstr "" #: editor/script_create_dialog.cpp @@ -10529,6 +10598,10 @@ msgid "Copy Error" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Video RAM" +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Skip Breakpoints" msgstr "" @@ -10577,10 +10650,6 @@ msgid "Total:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Video Mem" -msgstr "" - -#: editor/script_editor_debugger.cpp msgid "Resource Path" msgstr "" @@ -12108,6 +12177,9 @@ msgstr "" msgid "Constants cannot be modified." msgstr "" +#~ msgid "Replaced %d occurrence(s)." +#~ msgstr "Zamijenjeno %d pojavljivanja." + #, fuzzy #~ msgid "Brief Description" #~ msgstr "Opis:" diff --git a/editor/translations/hu.po b/editor/translations/hu.po index af13990fdc..4a2e0eb506 100644 --- a/editor/translations/hu.po +++ b/editor/translations/hu.po @@ -10,12 +10,13 @@ # Tusa Gamer <tusagamer@mailinator.com>, 2018. # Máté Lugosi <mate.lugosi@gmail.com>, 2019. # sztrovacsek <magadeve@gmail.com>, 2019. +# Deleted User <noreply+18797@weblate.org>, 2020. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2019-12-26 00:02+0000\n" -"Last-Translator: sztrovacsek <magadeve@gmail.com>\n" +"PO-Revision-Date: 2020-01-30 03:56+0000\n" +"Last-Translator: Deleted User <noreply+18797@weblate.org>\n" "Language-Team: Hungarian <https://hosted.weblate.org/projects/godot-engine/" "godot/hu/>\n" "Language: hu\n" @@ -23,7 +24,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 3.10\n" +"X-Generator: Weblate 3.11-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -32,8 +33,9 @@ msgstr "" "Érvénytelen típus argumentum a convert()-hez használjon TYPE_* konstansokat." #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp +#, fuzzy msgid "Expected a string of length 1 (a character)." -msgstr "" +msgstr "Egy karakter hosszúságú string-et várt." #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/mono/glue/gd_glue.cpp @@ -120,7 +122,6 @@ msgid "Value:" msgstr "Érték:" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Insert Key Here" msgstr "Kulcs Beszúrása" @@ -717,8 +718,9 @@ msgid "Line Number:" msgstr "Sor Száma:" #: editor/code_editor.cpp -msgid "Replaced %d occurrence(s)." -msgstr "Lecserélve %d előfordulás." +#, fuzzy +msgid "%d replaced." +msgstr "Csere..." #: editor/code_editor.cpp editor/editor_help.cpp msgid "%d match." @@ -4135,6 +4137,11 @@ msgid "Saving..." msgstr "Mentés..." #: editor/import_dock.cpp +#, fuzzy +msgid "%d Files" +msgstr " Fájlok" + +#: editor/import_dock.cpp msgid "Set as Default for '%s'" msgstr "Beállítás Alapértelmezettként '%s'-hez" @@ -4143,10 +4150,6 @@ msgid "Clear Default for '%s'" msgstr "Alapértelmezett Törlése '%s'-nél" #: editor/import_dock.cpp -msgid " Files" -msgstr " Fájlok" - -#: editor/import_dock.cpp msgid "Import As:" msgstr "Importálás Mint:" @@ -6143,12 +6146,13 @@ msgid "Mesh is empty!" msgstr "A háló üres!" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Trimesh Body" -msgstr "Statikus Trimesh Test Létrehozása" +#, fuzzy +msgid "Couldn't create a Trimesh collision shape." +msgstr "Trimesh Ütközési Testvér Létrehozása" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Convex Body" -msgstr "Statikus Konvex Test Létrehozása" +msgid "Create Static Trimesh Body" +msgstr "Statikus Trimesh Test Létrehozása" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "This doesn't work on scene root!" @@ -6160,12 +6164,30 @@ msgid "Create Trimesh Static Shape" msgstr "Trimesh Alakzat Létrehozása" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Failed creating shapes!" +msgid "Can't create a single convex collision shape for the scene root." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Couldn't create a single convex collision shape." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Create Single Convex Shape" +msgstr "Konvex Alakzat Létrehozása" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Can't create multiple convex collision shapes for the scene root." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp #, fuzzy -msgid "Create Convex Shape(s)" +msgid "Couldn't create any collision shapes." +msgstr "Körvonalkészítés sikertelen!" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Create Multiple Convex Shapes" msgstr "Konvex Alakzat Létrehozása" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -6218,19 +6240,57 @@ msgid "Create Trimesh Static Body" msgstr "Trimesh Statikus Test Létrehozása" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a StaticBody and assigns a polygon-based collision shape to it " +"automatically.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Collision Sibling" msgstr "Trimesh Ütközési Testvér Létrehozása" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a polygon-based collision shape.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp #, fuzzy -msgid "Create Convex Collision Sibling(s)" +msgid "Create Single Convex Collision Siblings" msgstr "Konvex Ütközési Testvér Létrehozása" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a single convex collision shape.\n" +"This is the fastest (but least accurate) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Create Multiple Convex Collision Siblings" +msgstr "Konvex Ütközési Testvér Létrehozása" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a polygon-based collision shape.\n" +"This is a performance middle-ground between the two above options." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Outline Mesh..." msgstr "Körvonalháló Létrehozása..." #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a static outline mesh. The outline mesh will have its normals " +"flipped automatically.\n" +"This can be used instead of the SpatialMaterial Grow property when using " +"that property isn't possible." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "View UV1" msgstr "UV1 Megtekintése" @@ -8768,7 +8828,7 @@ msgstr "TileSet-re..." msgid "No VCS addons are available." msgstr "" -#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Error" msgstr "" @@ -9912,11 +9972,18 @@ msgid "Export With Debug" msgstr "" #: editor/project_manager.cpp -msgid "The path does not exist." -msgstr "" +#, fuzzy +msgid "The path specified doesn't exist." +msgstr "A fájl nem létezik." #: editor/project_manager.cpp -msgid "Invalid '.zip' project file, does not contain a 'project.godot' file." +#, fuzzy +msgid "Error opening package file (it's not in ZIP format)." +msgstr "Hiba a csomagfájl megnyitása során, nem zip formátumú." + +#: editor/project_manager.cpp +msgid "" +"Invalid \".zip\" project file; it doesn't contain a \"project.godot\" file." msgstr "" #: editor/project_manager.cpp @@ -9924,11 +9991,11 @@ msgid "Please choose an empty folder." msgstr "" #: editor/project_manager.cpp -msgid "Please choose a 'project.godot' or '.zip' file." +msgid "Please choose a \"project.godot\" or \".zip\" file." msgstr "" #: editor/project_manager.cpp -msgid "Directory already contains a Godot project." +msgid "This directory already contains a Godot project." msgstr "" #: editor/project_manager.cpp @@ -10590,6 +10657,11 @@ msgstr "" #: editor/rename_dialog.cpp #, fuzzy +msgid "Use Regular Expressions" +msgstr "Jelenlegi Verzió:" + +#: editor/rename_dialog.cpp +#, fuzzy msgid "Advanced Options" msgstr "Illesztési beállítások" @@ -10628,7 +10700,7 @@ msgid "" msgstr "" #: editor/rename_dialog.cpp -msgid "Per Level counter" +msgid "Per-level Counter" msgstr "" #: editor/rename_dialog.cpp @@ -10659,10 +10731,6 @@ msgid "" msgstr "" #: editor/rename_dialog.cpp -msgid "Regular Expressions" -msgstr "" - -#: editor/rename_dialog.cpp msgid "Post-Process" msgstr "" @@ -10671,11 +10739,11 @@ msgid "Keep" msgstr "" #: editor/rename_dialog.cpp -msgid "CamelCase to under_scored" +msgid "PascalCase to snake_case" msgstr "" #: editor/rename_dialog.cpp -msgid "under_scored to CamelCase" +msgid "snake_case to PascalCase" msgstr "" #: editor/rename_dialog.cpp @@ -10697,6 +10765,15 @@ msgstr "Mind Nagybetű" msgid "Reset" msgstr "Nagyítás Visszaállítása" +#: editor/rename_dialog.cpp +msgid "Regular Expression Error" +msgstr "" + +#: editor/rename_dialog.cpp +#, fuzzy +msgid "At character %s" +msgstr "Érvényes karakterek:" + #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "" @@ -11165,7 +11242,7 @@ msgstr "" #: editor/script_create_dialog.cpp #, fuzzy -msgid "Script is valid." +msgid "Script path/name is valid." msgstr "Az animációs fa érvényes." #: editor/script_create_dialog.cpp @@ -11271,6 +11348,10 @@ msgid "Copy Error" msgstr "Hiba Másolása" #: editor/script_editor_debugger.cpp +msgid "Video RAM" +msgstr "" + +#: editor/script_editor_debugger.cpp #, fuzzy msgid "Skip Breakpoints" msgstr "Pontok Törlése" @@ -11321,10 +11402,6 @@ msgid "Total:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Video Mem" -msgstr "" - -#: editor/script_editor_debugger.cpp msgid "Resource Path" msgstr "" @@ -12903,6 +12980,12 @@ msgstr "" msgid "Constants cannot be modified." msgstr "" +#~ msgid "Replaced %d occurrence(s)." +#~ msgstr "Lecserélve %d előfordulás." + +#~ msgid "Create Static Convex Body" +#~ msgstr "Statikus Konvex Test Létrehozása" + #~ msgid "" #~ "There are currently no tutorials for this class, you can [color=$color]" #~ "[url=$url]contribute one[/url][/color] or [color=$color][url=" diff --git a/editor/translations/id.po b/editor/translations/id.po index 4208edb582..6a76af5db6 100644 --- a/editor/translations/id.po +++ b/editor/translations/id.po @@ -11,7 +11,7 @@ # Khairul Hidayat <khairulcyber4rt@gmail.com>, 2016. # Reza Hidayat Bayu Prabowo <rh.bayu.prabowo@gmail.com>, 2018, 2019. # Romi Kusuma Bakti <romikusumab@gmail.com>, 2017, 2018. -# Sofyan Sugianto <sofyanartem@gmail.com>, 2017-2018, 2019. +# Sofyan Sugianto <sofyanartem@gmail.com>, 2017-2018, 2019, 2020. # Tito <ijavadroid@gmail.com>, 2018. # Tom My <tom.asadinawan@gmail.com>, 2017. # yursan9 <rizal.sagi@gmail.com>, 2016. @@ -22,12 +22,15 @@ # herri siagian <herry.it.2007@gmail.com>, 2019. # MonsterGila <fikrirazor@outlook.co.id>, 2019. # Modeus Darksono <garuga17@gmail.com>, 2019. +# Akhmad Zulfikar <azuldegratz@gmail.com>, 2020. +# Ade Fikri Malihuddin <ade.fm97@gmail.com>, 2020. +# zephyroths <ridho.hikaru@gmail.com>, 2020. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2019-12-13 09:38+0000\n" -"Last-Translator: Modeus Darksono <garuga17@gmail.com>\n" +"PO-Revision-Date: 2020-02-16 15:21+0000\n" +"Last-Translator: Sofyan Sugianto <sofyanartem@gmail.com>\n" "Language-Team: Indonesian <https://hosted.weblate.org/projects/godot-engine/" "godot/id/>\n" "Language: id\n" @@ -35,7 +38,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 3.10-dev\n" +"X-Generator: Weblate 3.11-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -45,13 +48,13 @@ msgstr "" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp msgid "Expected a string of length 1 (a character)." -msgstr "" +msgstr "String dengan panjang 1 (karakter) yang diharapkan." #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/mono/glue/gd_glue.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." -msgstr "Tidak cukup bytes untuk menerjemahkan, atau format tidak sah." +msgstr "Tidak cukup bytes untuk mendekode bytes, atau format tidak valid." #: core/math/expression.cpp msgid "Invalid input %i (not passed) in expression" @@ -438,7 +441,7 @@ msgstr "Tidak memungkinkan untuk menambah track baru tanpa akar" #: editor/animation_track_editor.cpp msgid "Invalid track for Bezier (no suitable sub-properties)" -msgstr "" +msgstr "Track tidak valid untuk Bezier (tidak ada sub-properti yang cocok)" #: editor/animation_track_editor.cpp msgid "Add Bezier Track" @@ -535,7 +538,7 @@ msgstr "Susun Track-track dengan node atau tampilkan sebagai daftar biasa." #: editor/animation_track_editor.cpp msgid "Snap:" -msgstr "Snap:" +msgstr "Pengancingan:" #: editor/animation_track_editor.cpp msgid "Animation step value." @@ -657,7 +660,7 @@ msgstr "Rasio Skala:" #: editor/animation_track_editor.cpp msgid "Select Tracks to Copy" -msgstr "Pilih track untuk disalin:" +msgstr "Pilih Trek untuk Disalin" #: editor/animation_track_editor.cpp editor/editor_log.cpp #: editor/editor_properties.cpp @@ -705,8 +708,9 @@ msgid "Line Number:" msgstr "Nomor Baris:" #: editor/code_editor.cpp -msgid "Replaced %d occurrence(s)." -msgstr "kejadian %d diganti." +#, fuzzy +msgid "%d replaced." +msgstr "Gantikan..." #: editor/code_editor.cpp editor/editor_help.cpp msgid "%d match." @@ -823,9 +827,8 @@ msgid "Extra Call Arguments:" msgstr "Argumen-argumen Panggilan Ekstra:" #: editor/connections_dialog.cpp -#, fuzzy msgid "Receiver Method:" -msgstr "Pilih Method/Fungsi" +msgstr "Fungsi Penerima:" #: editor/connections_dialog.cpp msgid "Advanced" @@ -1048,7 +1051,7 @@ msgid "" "work.\n" "Remove them anyway? (no undo)" msgstr "" -"File-file yang telah dihapus diperlukan oleh sumber lain agar mereka dapat " +"File-file yang telah dihapus diperlukan oleh resource lain agar mereka dapat " "bekerja.\n" "Hapus saja? (tidak bisa dibatalkan/undo)" @@ -1106,7 +1109,7 @@ msgstr "Memiliki" #: editor/dependency_editor.cpp msgid "Resources Without Explicit Ownership:" -msgstr "Resource-resource tanpa kepemilikan yang jelas:" +msgstr "Resource Tanpa Kepemilikan yang Jelas:" #: editor/dictionary_property_edit.cpp msgid "Change Dictionary Key" @@ -1209,9 +1212,8 @@ msgid "Error opening package file, not in ZIP format." msgstr "Gagal saat membuka paket, tidak dalam bentuk zip." #: editor/editor_asset_installer.cpp -#, fuzzy msgid "%s (Already Exists)" -msgstr "Autoload '%s' telah ada!" +msgstr "%s (Sudah Ada)" #: editor/editor_asset_installer.cpp msgid "Uncompressing Assets" @@ -1222,9 +1224,8 @@ msgid "The following files failed extraction from package:" msgstr "Berkas berikut gagal diekstrak dari paket:" #: editor/editor_asset_installer.cpp -#, fuzzy msgid "And %s more files." -msgstr "%d file lagi" +msgstr "Dan %s berkas lebih banyak." #: editor/editor_asset_installer.cpp editor/project_manager.cpp msgid "Package installed successfully!" @@ -1236,9 +1237,8 @@ msgid "Success!" msgstr "Sukses!" #: editor/editor_asset_installer.cpp -#, fuzzy msgid "Package Contents:" -msgstr "Konten:" +msgstr "Isi Paket:" #: editor/editor_asset_installer.cpp editor/editor_node.cpp msgid "Install" @@ -1378,9 +1378,8 @@ msgid "Invalid file, not an audio bus layout." msgstr "Berkas salah, tidak layout suara bus." #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Error saving file: %s" -msgstr "Galat saat menyimpan berkas!" +msgstr "Galat menyimpan berkas: %s" #: editor/editor_audio_buses.cpp msgid "Add Bus" @@ -1482,7 +1481,7 @@ msgstr "File tidak ada." #: editor/editor_autoload_settings.cpp msgid "Not in resource path." -msgstr "Tidak didalam path resource." +msgstr "Tidak dalam lokasi resource." #: editor/editor_autoload_settings.cpp msgid "Add AutoLoad" @@ -1603,7 +1602,7 @@ msgstr "" #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom debug template not found." -msgstr "Debug template kustom tidak ditemukan." +msgstr "Templat awakutu kustom tidak ditemukan." #: editor/editor_export.cpp platform/android/export/export.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp @@ -1751,9 +1750,8 @@ msgid "Erase Profile" msgstr "Hapus Profil" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Godot Feature Profile" -msgstr "Kelola Editor Fitur Profil" +msgstr "Profil Fitur Godot" #: editor/editor_feature_profile.cpp msgid "Import Profile(s)" @@ -1765,7 +1763,7 @@ msgstr "Ekspor Profil" #: editor/editor_feature_profile.cpp msgid "Manage Editor Feature Profiles" -msgstr "Kelola Editor Fitur Profil" +msgstr "Kelola Editor Profil Fitur" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Select Current Folder" @@ -1956,9 +1954,8 @@ msgid "Inherited by:" msgstr "Diturunkan oleh:" #: editor/editor_help.cpp -#, fuzzy msgid "Description" -msgstr "Deskripsi:" +msgstr "Deskripsi" #: editor/editor_help.cpp msgid "Online Tutorials" @@ -1969,14 +1966,12 @@ msgid "Properties" msgstr "Properti Objek" #: editor/editor_help.cpp -#, fuzzy msgid "override:" -msgstr "Menimpa" +msgstr "menimpa:" #: editor/editor_help.cpp -#, fuzzy msgid "default:" -msgstr "Bawaan" +msgstr "baku:" #: editor/editor_help.cpp msgid "Methods" @@ -1999,9 +1994,8 @@ msgid "Property Descriptions" msgstr "Deskripsi Properti" #: editor/editor_help.cpp -#, fuzzy msgid "(value)" -msgstr "Nilai:" +msgstr "(nilai)" #: editor/editor_help.cpp msgid "" @@ -2030,12 +2024,11 @@ msgstr "Mencari Bantuan" #: editor/editor_help_search.cpp msgid "Case Sensitive" -msgstr "Case Sensitive" +msgstr "Peka terhadap Huruf Besar/Kecil" #: editor/editor_help_search.cpp -#, fuzzy msgid "Show Hierarchy" -msgstr "Tampilkan Bantuan-bantuan" +msgstr "Tampilkan Hirarki" #: editor/editor_help_search.cpp msgid "Display All" @@ -2074,7 +2067,6 @@ msgid "Class" msgstr "Kelas" #: editor/editor_help_search.cpp -#, fuzzy msgid "Method" msgstr "Fungsi" @@ -2087,14 +2079,12 @@ msgid "Constant" msgstr "Konstan" #: editor/editor_help_search.cpp -#, fuzzy msgid "Property" -msgstr "Properti:" +msgstr "Properti" #: editor/editor_help_search.cpp -#, fuzzy msgid "Theme Property" -msgstr "Properti-properti Tema" +msgstr "Properti Tema" #: editor/editor_inspector.cpp editor/project_settings_editor.cpp msgid "Property:" @@ -2178,7 +2168,7 @@ msgstr "Jendela Baru" #: editor/editor_node.cpp msgid "Imported resources can't be saved." -msgstr "Sumber daya yang diimpor tidak dapat disimpan." +msgstr "Resource yang diimpor tidak dapat disimpan." #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp #: scene/gui/dialogs.cpp @@ -2187,15 +2177,15 @@ msgstr "Oke" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Error saving resource!" -msgstr "Error menyimpan resource!" +msgstr "Galat saat menyimpan resource!" #: editor/editor_node.cpp msgid "" "This resource can't be saved because it does not belong to the edited scene. " "Make it unique first." msgstr "" -"Sumber daya ini tidak dapat disimpan karena bukan milik skena yang " -"disunting. Buatlah unik terlebih dahulu." +"Resource ini tidak dapat disimpan karena bukan milik skena yang disunting. " +"Buatlah unik terlebih dahulu." #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Save Resource As..." @@ -2292,7 +2282,7 @@ msgstr "Error mencoba untuk menyimpan layout!" #: editor/editor_node.cpp msgid "Default editor layout overridden." -msgstr "Layout editor default ditimpa." +msgstr "Tata letak baku editor ditimpa." #: editor/editor_node.cpp msgid "Layout name not found!" @@ -2308,7 +2298,7 @@ msgid "" "Please read the documentation relevant to importing scenes to better " "understand this workflow." msgstr "" -"Sumber daya ini milik skena yang telah diimpor, jadi tidak dapat disunting.\n" +"Resource ini milik skena yang telah diimpor, jadi tidak dapat disunting.\n" "Harap baca dokumentasi yang relevan dalam mengimpor skena untuk lebih " "memahami alur kerjanya." @@ -2317,7 +2307,7 @@ msgid "" "This resource belongs to a scene that was instanced or inherited.\n" "Changes to it won't be kept when saving the current scene." msgstr "" -"Sumber daya ini milik skena yang di-instance atau diwariskan.\n" +"Resource ini milik skena yang di-instance atau diwariskan.\n" "Perubahan tidak akan disimpan ketika menyimpan skena saat ini." #: editor/editor_node.cpp @@ -2325,8 +2315,8 @@ msgid "" "This resource was imported, so it's not editable. Change its settings in the " "import panel and then re-import." msgstr "" -"Sumber daya ini telah diimpor, jadi tidak dapat disunting. Ubah " -"pengaturannya pada panel impor kemudian impor kembali." +"Resource ini telah diimpor, jadi tidak dapat disunting. Ubah pengaturannya " +"pada panel impor kemudian impor kembali." #: editor/editor_node.cpp msgid "" @@ -2347,7 +2337,7 @@ msgid "" "Please read the documentation relevant to debugging to better understand " "this workflow." msgstr "" -"Ini merupakan objek jarak jauh, jadi perubahan tidak akan tersimpan.\n" +"Ini merupakan objek remote, jadi perubahan tidak akan tersimpan.\n" "Harap baca dokumentasi yang relevan dalam mengawakutu untuk lebih memahami " "alur kerjanya." @@ -2395,7 +2385,7 @@ msgstr "Simpan perubahan '%s' sebelum menutupnya?" #: editor/editor_node.cpp msgid "Saved %s modified resource(s)." -msgstr "Menyimpan sumber daya %s yang diubah." +msgstr "Menyimpan resource %s yang diubah." #: editor/editor_node.cpp msgid "A root node is required to save the scene." @@ -2528,7 +2518,7 @@ msgstr "" msgid "" "Unable to load addon script from path: '%s' Base type is not EditorPlugin." msgstr "" -"Tidak dapat memuat addon script dari jalur: '%s' tipe basis tidak " +"Tidak dapat memuat skrip addon dari jalur: '%s' karena jenis Basisnya bukan " "EditorPlugin." #: editor/editor_node.cpp @@ -2666,7 +2656,7 @@ msgstr "Tambah skena baru." #: editor/editor_node.cpp msgid "Scene" -msgstr "Suasana" +msgstr "Skena" #: editor/editor_node.cpp msgid "Go to previously opened scene." @@ -2686,7 +2676,7 @@ msgstr "Tab sebelumnya" #: editor/editor_node.cpp msgid "Filter Files..." -msgstr "Saring berkas..." +msgstr "Filter Berkas..." #: editor/editor_node.cpp msgid "Operations with scene files." @@ -2785,7 +2775,7 @@ msgstr "Alat-alat" #: editor/editor_node.cpp msgid "Orphan Resource Explorer..." -msgstr "Penjelajah Resource Orphan…" +msgstr "Penjelajah Resource Orphan..." #: editor/editor_node.cpp msgid "Quit to Project List" @@ -2794,19 +2784,19 @@ msgstr "Keluar ke daftar proyek" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp #: editor/project_export.cpp msgid "Debug" -msgstr "\"Debug\"" +msgstr "Awakutu" #: editor/editor_node.cpp msgid "Deploy with Remote Debug" -msgstr "Deploy dengan Remote Debug" +msgstr "Deploy dengan Awakutu Jarak Jauh" #: editor/editor_node.cpp msgid "" "When exporting or deploying, the resulting executable will attempt to " "connect to the IP of this computer in order to be debugged." msgstr "" -"Ketika ekspor atau deploying, hasil executable akan mencoba terhubung ke IP " -"komputer dengan untuk debug." +"Saat mengekspor atau mendeploy, hasil executable akan mencoba terhubung ke " +"IP komputer untuk diawakutu." #: editor/editor_node.cpp msgid "Small Deploy with Network FS" @@ -2823,7 +2813,7 @@ msgid "" msgstr "" "Ketika opsi ini aktif, ekspor atau deploy akan menghasilkan minimal " "executable.\n" -"Filesystem akan tersedia dari proyek dari editor melalui jaringan.\n" +"Berkas sistem akan tersedia dari proyek dari editor melalui jaringan.\n" "Pada Android, deploy akan menggunakan kabel USB untuk performa yang lebih " "cepat. Opsi ini mempercepat pengujian dengan jejak kaki yang besar." @@ -2862,10 +2852,10 @@ msgid "" "When used remotely on a device, this is more efficient with network " "filesystem." msgstr "" -"Ketika opsi ini aktif, perubahan yang dibuat pada scene lewat editor akan di " -"replika pada permainan yang sedang berjalan.\n" +"Ketika opsi ini aktif, perubahan yang dibuat pada skena melalui editor akan " +"direplika pada gim yang sedang berjalan.\n" "Ketika penggunaan remote pada sebuah perangkat, akan lebih efisien dengan " -"jaringan filesystem." +"berkas sistem jaringan." #: editor/editor_node.cpp msgid "Sync Script Changes" @@ -2889,7 +2879,7 @@ msgstr "Editor" #: editor/editor_node.cpp msgid "Editor Settings..." -msgstr "Pengaturan Editor…" +msgstr "Pengaturan Editor..." #: editor/editor_node.cpp msgid "Editor Layout" @@ -2901,7 +2891,7 @@ msgstr "Ambil Tangkapan Layar" #: editor/editor_node.cpp msgid "Screenshots are stored in the Editor Data/Settings Folder." -msgstr "Tangkapan Layar disimpan di folder Data/Pengaturan Editor." +msgstr "Tangkapan layar disimpan dalam folder Data/Pengaturan Editor." #: editor/editor_node.cpp msgid "Toggle Fullscreen" @@ -2913,7 +2903,7 @@ msgstr "Jungkitkan Konsol Sistem" #: editor/editor_node.cpp msgid "Open Editor Data/Settings Folder" -msgstr "Buka Direktori Editor Data/Pengaturan" +msgstr "Buka Direktori Data/Pengaturan Editor" #: editor/editor_node.cpp msgid "Open Editor Data Folder" @@ -2921,11 +2911,11 @@ msgstr "Buka Folder Data Editor" #: editor/editor_node.cpp msgid "Open Editor Settings Folder" -msgstr "Buka Direktori Editor Pengaturan" +msgstr "Buka Direktori Pengaturan Editor" #: editor/editor_node.cpp msgid "Manage Editor Features..." -msgstr "Kelola Editor Fitur…" +msgstr "Kelola Fitur Editor..." #: editor/editor_node.cpp msgid "Manage Export Templates..." @@ -2975,7 +2965,7 @@ msgstr "Mainkan" #: editor/editor_node.cpp msgid "Pause the scene execution for debugging." -msgstr "" +msgstr "Hentikan sementara skena untuk mengawakutu." #: editor/editor_node.cpp msgid "Pause Scene" @@ -3089,9 +3079,8 @@ msgid "Import Templates From ZIP File" msgstr "Impor Templat dari Berkas ZIP" #: editor/editor_node.cpp -#, fuzzy msgid "Template Package" -msgstr "Manajer Templat Ekspor" +msgstr "Paket Templat" #: editor/editor_node.cpp msgid "Export Library" @@ -3142,13 +3131,12 @@ msgid "Open the previous Editor" msgstr "Buka Editor Sebelumnya" #: editor/editor_node.h -#, fuzzy msgid "Warning!" -msgstr "Peringatan" +msgstr "Peringatan!" #: editor/editor_path.cpp msgid "No sub-resources found." -msgstr "Tidak ada sub-sumber yang ditemukan." +msgstr "Tidak ada sub-resourc yang ditemukan." #: editor/editor_plugin.cpp msgid "Creating Mesh Previews" @@ -3272,9 +3260,9 @@ msgid "" "Can't create a ViewportTexture on resources saved as a file.\n" "Resource needs to belong to a scene." msgstr "" -"Tidak dapat membuat ViewportTexture pada sumber daya yang disimpan sebagai " +"Tidak dapat membuat ViewportTexture pada resource yang disimpan sebagai " "berkas.\n" -"Sumber daya harus dimiliki oleh sebuah skena." +"Resource harus dimiliki oleh sebuah skena." #: editor/editor_properties.cpp msgid "" @@ -3285,7 +3273,7 @@ msgid "" msgstr "" "Tidak dapat membuat ViewportTexture pada resource ini karena tidak dibuat " "lokal ke skena.\n" -"Silakan aktifkan properti 'lokal ke skena' di atasnya (dan semua sumber daya " +"Silakan aktifkan properti 'lokal ke skena' di atasnya (dan semua resource " "yang memuatnya sampai node)." #: editor/editor_properties.cpp editor/property_editor.cpp @@ -3466,11 +3454,11 @@ msgstr "Mengimpor:" #: editor/export_template_manager.cpp msgid "Error getting the list of mirrors." -msgstr "" +msgstr "Galat dalam mendapatkan daftar mirror." #: editor/export_template_manager.cpp msgid "Error parsing JSON of mirror list. Please report this issue!" -msgstr "" +msgstr "Galat mengurai JSON dari daftar mirror. Silakan laporkan masalah ini!" #: editor/export_template_manager.cpp msgid "" @@ -3599,9 +3587,8 @@ msgid "Select Template File" msgstr "Pilih berkas templat" #: editor/export_template_manager.cpp -#, fuzzy msgid "Godot Export Templates" -msgstr "Memuat Ekspor Template-template." +msgstr "Templat Ekspor Godot" #: editor/export_template_manager.cpp msgid "Export Template Manager" @@ -3627,7 +3614,7 @@ msgstr "" #: editor/filesystem_dock.cpp msgid "Cannot move/rename resources root." -msgstr "Tidak bisa memindah/mengubah nama aset root." +msgstr "Tidak bisa memindah/mengubah nama resource root." #: editor/filesystem_dock.cpp msgid "Cannot move a folder into itself." @@ -3682,9 +3669,8 @@ msgid "New Inherited Scene" msgstr "Skena Warisan Baru" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Set As Main Scene" -msgstr "Skena Utama" +msgstr "Jadikan sebagai Skena Utama" #: editor/filesystem_dock.cpp msgid "Open Scenes" @@ -3732,7 +3718,7 @@ msgstr "Skrip Baru..." #: editor/filesystem_dock.cpp msgid "New Resource..." -msgstr "Sumber Daya Baru..." +msgstr "Resource Baru..." #: editor/filesystem_dock.cpp editor/plugins/visual_shader_editor_plugin.cpp #: editor/script_editor_debugger.cpp @@ -3891,7 +3877,7 @@ msgstr "Node tidak dalam Grup" #: editor/groups_editor.cpp editor/scene_tree_dock.cpp #: editor/scene_tree_editor.cpp msgid "Filter nodes" -msgstr "Saring node" +msgstr "Filter node" #: editor/groups_editor.cpp msgid "Nodes in Group" @@ -3987,6 +3973,11 @@ msgid "Saving..." msgstr "Menyimpan..." #: editor/import_dock.cpp +#, fuzzy +msgid "%d Files" +msgstr " Berkas" + +#: editor/import_dock.cpp msgid "Set as Default for '%s'" msgstr "Jadikan Baku untuk '%s'" @@ -3995,10 +3986,6 @@ msgid "Clear Default for '%s'" msgstr "Bersihkan Baku untuk '%s'" #: editor/import_dock.cpp -msgid " Files" -msgstr " Berkas" - -#: editor/import_dock.cpp msgid "Import As:" msgstr "Impor sebagai:" @@ -4052,7 +4039,7 @@ msgstr "Tempel Parameter" #: editor/inspector_dock.cpp msgid "Edit Resource Clipboard" -msgstr "Sunting PapanKlip SumberDaya" +msgstr "Sunting Papan Klip Resource" #: editor/inspector_dock.cpp msgid "Copy Resource" @@ -4064,7 +4051,7 @@ msgstr "Buat Menjadi Bawaan" #: editor/inspector_dock.cpp msgid "Make Sub-Resources Unique" -msgstr "Membuat sub-Resource Unik" +msgstr "Membuat Unik Sub-Resource" #: editor/inspector_dock.cpp msgid "Open in Help" @@ -4072,15 +4059,15 @@ msgstr "Buka di Bantuan" #: editor/inspector_dock.cpp msgid "Create a new resource in memory and edit it." -msgstr "Buat sumber baru pada memori dan ubah." +msgstr "Buat resource baru pada memori dan mengubahnya." #: editor/inspector_dock.cpp msgid "Load an existing resource from disk and edit it." -msgstr "Muat sumber tersedia dari disk dan ubah." +msgstr "Muat resource yang ada dari diska dan mengubahnya." #: editor/inspector_dock.cpp msgid "Save the currently edited resource." -msgstr "Simpan sumber yang sedang diatur." +msgstr "Simpan resource yang sedang disunting saat ini." #: editor/inspector_dock.cpp msgid "Go to the previous edited object in history." @@ -4100,7 +4087,7 @@ msgstr "Properti Objek." #: editor/inspector_dock.cpp msgid "Filter properties" -msgstr "Saring properti" +msgstr "Filter properti" #: editor/inspector_dock.cpp msgid "Changes may be lost!" @@ -4341,7 +4328,7 @@ msgstr "Parameter Berubah" #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Edit Filters" -msgstr "Sunting Penyaring" +msgstr "Sunting Filter" #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "Output node can't be added to the blend tree." @@ -4387,11 +4374,11 @@ msgstr "Hapus Node" #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "Toggle Filter On/Off" -msgstr "Jungkitkan Penyaring Nyala/Mati" +msgstr "Jungkitkan Filter Nyala/Mati" #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "Change Filter" -msgstr "Ganti Penyaring" +msgstr "Ganti Filter" #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "No animation player set, so unable to retrieve track names." @@ -4413,19 +4400,16 @@ msgstr "" "nama track." #: editor/plugins/animation_blend_tree_editor_plugin.cpp -#, fuzzy msgid "Anim Clips" -msgstr "Klip-klip Animasi:" +msgstr "Klip Anim" #: editor/plugins/animation_blend_tree_editor_plugin.cpp -#, fuzzy msgid "Audio Clips" -msgstr "Klip-klip Suara:" +msgstr "Klip Audio" #: editor/plugins/animation_blend_tree_editor_plugin.cpp -#, fuzzy msgid "Functions" -msgstr "Fungsi-fungsi:" +msgstr "Fungsi" #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp @@ -4440,11 +4424,11 @@ msgstr "Tambah Node..." #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/root_motion_editor_plugin.cpp msgid "Edit Filtered Tracks:" -msgstr "Sunting Trek yang Disaring:" +msgstr "Sunting Trek yang Difilter:" #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "Enable Filtering" -msgstr "Aktifkan penyaringan" +msgstr "Aktifkan Penyaringan" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Toggle Autoplay" @@ -4507,7 +4491,7 @@ msgstr "Tidak ada animasi untuk disalin!" #: editor/plugins/animation_player_editor_plugin.cpp msgid "No animation resource on clipboard!" -msgstr "Tidak ada aset animasi di papan klip!" +msgstr "Tidak ada resource animasi di papan klip!" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Pasted Animation" @@ -4657,9 +4641,8 @@ msgid "Move Node" msgstr "Pindahkan Node" #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Transition exists!" -msgstr "Transisi: " +msgstr "Transisi sudah ada!" #: editor/plugins/animation_state_machine_editor.cpp msgid "Add Transition" @@ -4696,7 +4679,7 @@ msgstr "Node awal dan akhir dibutuhkan untuk sub-transisi." #: editor/plugins/animation_state_machine_editor.cpp msgid "No playback resource set at path: %s." -msgstr "Tidak ada aset playback yang diatur di lokasi: %s." +msgstr "Tidak ada resource playback yang diatur di lokasi: %s." #: editor/plugins/animation_state_machine_editor.cpp msgid "Node Removed" @@ -4745,14 +4728,13 @@ msgid "Transition: " msgstr "Transisi: " #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Play Mode:" -msgstr "Mode Geser Pandangan" +msgstr "Mode Putar:" #: editor/plugins/animation_tree_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "AnimationTree" -msgstr "AnimationTree" +msgstr "AnimationTree(Daftar animasi)" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "New name:" @@ -4884,11 +4866,11 @@ msgstr "Impor Animasi..." #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Edit Node Filters" -msgstr "Sunting Penyaring Node" +msgstr "Sunting Filter Node" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Filters..." -msgstr "Penyaring..." +msgstr "Filter..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Contents:" @@ -4935,7 +4917,6 @@ msgid "Request failed, too many redirects" msgstr "Permintaan gagal, terlalu banyak pengalihan" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Redirect loop." msgstr "Mengalihkan berulang-ulang." @@ -5005,29 +4986,27 @@ msgstr "Unduhan untuk aset ini sedang diproses!" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Recently Updated" -msgstr "" +msgstr "Baru-baru Ini Diperbarui" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Least Recently Updated" -msgstr "" +msgstr "Paling Baru Diperbarui" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Name (A-Z)" -msgstr "" +msgstr "Nama (A-Z)" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Name (Z-A)" -msgstr "" +msgstr "Nama (Z-A)" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "License (A-Z)" -msgstr "Lisensi" +msgstr "Lisensi (A-Z)" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "License (Z-A)" -msgstr "Lisensi" +msgstr "Lisensi (Z-A)" #: editor/plugins/asset_library_editor_plugin.cpp msgid "First" @@ -5051,7 +5030,7 @@ msgstr "Semua" #: editor/plugins/asset_library_editor_plugin.cpp msgid "No results for \"%s\"." -msgstr "" +msgstr "Tidak ada hasil untuk \"%s\"." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Import..." @@ -5139,12 +5118,11 @@ msgstr "Jangkah Kotak-kotak:" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Primary Line Every:" -msgstr "" +msgstr "Garis Primer Setiap:" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "steps" -msgstr "2 langkah" +msgstr "langkah" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Rotation Offset:" @@ -5155,9 +5133,8 @@ msgid "Rotation Step:" msgstr "Jangkah Perputaran:" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Scale Step:" -msgstr "Skala:" +msgstr "Langkah Skala:" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move Vertical Guide" @@ -5232,85 +5209,72 @@ msgstr "" "batasnya." #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Top Left" -msgstr "Kiri" +msgstr "Kiri Atas" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Top Right" -msgstr "Kanan" +msgstr "Kanan Atas" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Bottom Right" -msgstr "Putar ke kanan" +msgstr "Kanan Bawah" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Bottom Left" -msgstr "Tampilan Bawah" +msgstr "Kiri Bawah" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Center Left" -msgstr "Indentasi Kiri" +msgstr "Kiri Tengah" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Center Top" -msgstr "Seleksi Tengah" +msgstr "Atas Tengah" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Center Right" -msgstr "Indentasi Kanan" +msgstr "Kanan Tengah" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Center Bottom" -msgstr "Bawah" +msgstr "Bawah Tengah" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center" -msgstr "" +msgstr "Tengah" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Left Wide" -msgstr "Tampilan Kiri" +msgstr "Kiri Lebar" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Top Wide" -msgstr "Tampilan Atas" +msgstr "Atas Lebar" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Right Wide" -msgstr "Tampilan Kanan" +msgstr "Kanan Lebar" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Bottom Wide" -msgstr "Tampilan Bawah" +msgstr "Bawah Lebar" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "VCenter Wide" -msgstr "" +msgstr "VTengah Lebar" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "HCenter Wide" -msgstr "" +msgstr "HTengah Lebar" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Full Rect" -msgstr "" +msgstr "Kotak Penuh" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Keep Ratio" -msgstr "Rasio Skala:" +msgstr "Jaga Rasio" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Anchors only" @@ -5330,6 +5294,8 @@ msgid "" "Game Camera Override\n" "Overrides game camera with editor viewport camera." msgstr "" +"Timpa Kamera Gim\n" +"Menimpa kamera gim dengan kamera viewport editor." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -5337,6 +5303,8 @@ msgid "" "Game Camera Override\n" "No game instance running." msgstr "" +"Timpa Kamera Gim\n" +"Tidak ada instance gim yang berjalan." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -5455,24 +5423,20 @@ msgid "Ruler Mode" msgstr "Mode Penggaris" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Toggle smart snapping." -msgstr "Jungkitkan Pengancingan." +msgstr "Jungkitkan pengancingan cerdas." #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Use Smart Snap" -msgstr "Gunakan Snap" +msgstr "Gunakan Pengancingan Cerdas" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Toggle grid snapping." -msgstr "Jungkitkan Pengancingan." +msgstr "Jungkitkan pengancingan kisi." #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Use Grid Snap" -msgstr "Pengancingan Kisi" +msgstr "Gunakan Pengancingan Kisi" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snapping Options" @@ -5483,9 +5447,8 @@ msgid "Use Rotation Snap" msgstr "Gunakan Snap Rotasi" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Use Scale Snap" -msgstr "Gunakan Snap" +msgstr "Gunakan Pengancingan Skala" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap Relative" @@ -5570,9 +5533,8 @@ msgid "View" msgstr "Pandangan" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Always Show Grid" -msgstr "Tampilkan Kotak-kotak" +msgstr "Selalu Tampilkan Kisi" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Helpers" @@ -5627,7 +5589,6 @@ msgid "Insert keys (based on mask)." msgstr "Sisipkan Kunci (berdasarkan mask)." #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "" "Auto insert keys when objects are translated, rotated or scaled (based on " "mask).\n" @@ -5645,9 +5606,8 @@ msgid "Auto Insert Key" msgstr "Otomatis Sisipkan Kunci" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Animation Key and Pose Options" -msgstr "Kunci Animasi Dimasukkan." +msgstr "Opsi Kunci Animasi dan Pose" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Insert Key (Existing Tracks)" @@ -5758,20 +5718,18 @@ msgstr "Masker Emisi" #: editor/plugins/cpu_particles_2d_editor_plugin.cpp #: editor/plugins/particles_2d_editor_plugin.cpp -#, fuzzy msgid "Solid Pixels" -msgstr "Pertumbuhan (Piksel): " +msgstr "Piksel Solid" #: editor/plugins/cpu_particles_2d_editor_plugin.cpp #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Border Pixels" -msgstr "" +msgstr "Piksel Pembatas" #: editor/plugins/cpu_particles_2d_editor_plugin.cpp #: editor/plugins/particles_2d_editor_plugin.cpp -#, fuzzy msgid "Directed Border Pixels" -msgstr "Direktori-direktori & File-file:" +msgstr "Piksel Pembatas yang Diarahkan" #: editor/plugins/cpu_particles_2d_editor_plugin.cpp #: editor/plugins/particles_2d_editor_plugin.cpp @@ -5862,9 +5820,8 @@ msgid "Hold Shift to edit tangents individually" msgstr "Tahan Shift untuk menyunting tangen kurva satu-persatu" #: editor/plugins/curve_editor_plugin.cpp -#, fuzzy msgid "Right click to add point" -msgstr "Klik Kanan: Hapus Titik" +msgstr "Klik kanan untuk menambah titik" #: editor/plugins/gi_probe_editor_plugin.cpp msgid "Bake GI Probe" @@ -5895,12 +5852,13 @@ msgid "Mesh is empty!" msgstr "Mesh kosong!" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Trimesh Body" -msgstr "Buat Badan Trimesh Statis" +#, fuzzy +msgid "Couldn't create a Trimesh collision shape." +msgstr "Buat Trimesh Collision Sibling" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Convex Body" -msgstr "Buat Bodi Cembung Statis" +msgid "Create Static Trimesh Body" +msgstr "Buat Badan Trimesh Statis" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "This doesn't work on scene root!" @@ -5911,11 +5869,30 @@ msgid "Create Trimesh Static Shape" msgstr "Buat Bentuk Trimesh Statis" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Failed creating shapes!" -msgstr "Gagal membuat bentuk!" +msgid "Can't create a single convex collision shape for the scene root." +msgstr "Tidak dapat membuat convex collision shape tunggal untuk skena root." + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Couldn't create a single convex collision shape." +msgstr "Tidak dapat membuat convex collision shape tunggal." #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Convex Shape(s)" +#, fuzzy +msgid "Create Single Convex Shape" +msgstr "Buat Bentuk Cembung" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Can't create multiple convex collision shapes for the scene root." +msgstr "Tidak dapat membuat beberapa convex collision shape untuk skena root." + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Couldn't create any collision shapes." +msgstr "Tidak dapat membuat folder." + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Create Multiple Convex Shapes" msgstr "Buat Bentuk Cembung" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -5967,18 +5944,69 @@ msgid "Create Trimesh Static Body" msgstr "Buat Tubuh Statis Trimesh" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a StaticBody and assigns a polygon-based collision shape to it " +"automatically.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" +"Buat StaticBody dan tetapkan collision shape berbasis poligon untuknya " +"secara otomatis.\n" +"Opsi ini merupakan yang paling akurat (tapi paling lambat) untuk deteksi " +"collision." + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Collision Sibling" msgstr "Buat Trimesh Collision Sibling" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Convex Collision Sibling(s)" +msgid "" +"Creates a polygon-based collision shape.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" +"Buat collision shape berbasis poligon.\n" +"Opsi ini merupakan yang paling akurat (tapi paling lambat) untuk deteksi " +"collision." + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Create Single Convex Collision Siblings" msgstr "Buat Convex Collision Sibling" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a single convex collision shape.\n" +"This is the fastest (but least accurate) option for collision detection." +msgstr "" +"Buat convex collision shape tunggal.\n" +"Opsi ini merupakan yang paling cepat (tapi paling tidak akurat) untuk " +"deteksi collision." + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Create Multiple Convex Collision Siblings" +msgstr "Buat Convex Collision Sibling" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a polygon-based collision shape.\n" +"This is a performance middle-ground between the two above options." +msgstr "" +"Buat collision shape berbasis poligon.\n" +"Opsi ini kinerjanya berada di antara dua opsi di atas." + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Outline Mesh..." msgstr "Buat Garis Mesh..." #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a static outline mesh. The outline mesh will have its normals " +"flipped automatically.\n" +"This can be used instead of the SpatialMaterial Grow property when using " +"that property isn't possible." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "View UV1" msgstr "Tampilkan UV1" @@ -6000,23 +6028,23 @@ msgstr "Ukuran Garis Tepi:" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "UV Channel Debug" -msgstr "" +msgstr "Awakutu Kanal UV" #: editor/plugins/mesh_library_editor_plugin.cpp msgid "Remove item %d?" msgstr "Hapus item %d?" #: editor/plugins/mesh_library_editor_plugin.cpp -#, fuzzy msgid "" "Update from existing scene?:\n" "%s" -msgstr "Perbarui dari Skena" +msgstr "" +"Perbarui dari skena yang ada?:\n" +"%s" #: editor/plugins/mesh_library_editor_plugin.cpp -#, fuzzy msgid "Mesh Library" -msgstr "PerpustakaanMesh..." +msgstr "Pustaka Mesh" #: editor/plugins/mesh_library_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp @@ -6311,7 +6339,7 @@ msgstr "Cermin Pengatur Panjang" #: editor/plugins/path_editor_plugin.cpp msgid "Curve Point #" -msgstr "Titik #" +msgstr "Titik # Curve" #: editor/plugins/path_editor_plugin.cpp msgid "Set Curve Point Position" @@ -6548,24 +6576,24 @@ msgstr "Sinkronkan Tulang ke Poligon" #: editor/plugins/resource_preloader_editor_plugin.cpp msgid "ERROR: Couldn't load resource!" -msgstr "KESALAHAN: Tidak dapat memuat sumber daya!" +msgstr "KESALAHAN: Tidak dapat memuat resource!" #: editor/plugins/resource_preloader_editor_plugin.cpp msgid "Add Resource" -msgstr "Tambah Sumber Daya" +msgstr "Tambah Resource" #: editor/plugins/resource_preloader_editor_plugin.cpp msgid "Rename Resource" -msgstr "Ubah Nama Sumber Daya" +msgstr "Ubah Nama Resource" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Delete Resource" -msgstr "Hapus Sumber Daya" +msgstr "Hapus Resource" #: editor/plugins/resource_preloader_editor_plugin.cpp msgid "Resource clipboard is empty!" -msgstr "Papan klip sumber daya kosong!" +msgstr "Papan klip resource kosong!" #: editor/plugins/resource_preloader_editor_plugin.cpp msgid "Paste Resource" @@ -6590,11 +6618,11 @@ msgstr "Buka dalam Editor" #: editor/plugins/resource_preloader_editor_plugin.cpp msgid "Load Resource" -msgstr "Muat Sumber Daya" +msgstr "Muat Resource" #: editor/plugins/resource_preloader_editor_plugin.cpp msgid "ResourcePreloader" -msgstr "PreloaderSumberDaya" +msgstr "ResourcePreloader" #: editor/plugins/root_motion_editor_plugin.cpp msgid "AnimationTree has no path set to an AnimationPlayer" @@ -6654,20 +6682,22 @@ msgstr "Simpan Berkas Sebagai..." #: editor/plugins/script_editor_plugin.cpp msgid "Can't obtain the script for running." -msgstr "" +msgstr "Tidak dapat mendapatkan skrip untuk menjalankannya." #: editor/plugins/script_editor_plugin.cpp msgid "Script failed reloading, check console for errors." -msgstr "" +msgstr "Gagal memuat ulang skrip, cek konsol untuk informasi galatnya." #: editor/plugins/script_editor_plugin.cpp msgid "Script is not in tool mode, will not be able to run." -msgstr "" +msgstr "Skrip tidak dalam mode tool, tidak akan bisa dijalankan." #: editor/plugins/script_editor_plugin.cpp msgid "" "To run this script, it must inherit EditorScript and be set to tool mode." msgstr "" +"Untuk menjalankan skrip ini, skrip haris mewarisi EditorScript dan diatur ke " +"mode tool." #: editor/plugins/script_editor_plugin.cpp msgid "Import Theme" @@ -6701,7 +6731,7 @@ msgstr "Cari Sebelumnya" #: editor/plugins/script_editor_plugin.cpp msgid "Filter scripts" -msgstr "Penyaring Skrip" +msgstr "Filter skrip" #: editor/plugins/script_editor_plugin.cpp msgid "Toggle alphabetical sorting of the method list." @@ -6709,7 +6739,7 @@ msgstr "Beralih penyortiran alfabetis dari daftar fungsi." #: editor/plugins/script_editor_plugin.cpp msgid "Filter methods" -msgstr "Penyaring fungsi" +msgstr "Filter method" #: editor/plugins/script_editor_plugin.cpp msgid "Sort" @@ -6912,12 +6942,14 @@ msgstr "Pergi ke Fungsi" #: editor/plugins/script_text_editor.cpp msgid "Only resources from filesystem can be dropped." -msgstr "Hanya sumber daya dari berkas sistem yang dapat dihapus." +msgstr "Hanya resource dari berkas sistem yang dapat dihapus." #: editor/plugins/script_text_editor.cpp #: modules/visual_script/visual_script_editor.cpp msgid "Can't drop nodes because script '%s' is not used in this scene." msgstr "" +"Tidak bisa menghapus node karena skrip '%s' tidak sedang digunakan dalam " +"skena ini." #: editor/plugins/script_text_editor.cpp msgid "Lookup Symbol" @@ -7323,7 +7355,7 @@ msgstr "Pratinjau Sinematik" #: editor/plugins/spatial_editor_plugin.cpp msgid "Not available when using the GLES2 renderer." -msgstr "" +msgstr "Tidak tersedia ketika menggunakan perender GLES2." #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Left" @@ -7354,9 +7386,8 @@ msgid "Freelook Speed Modifier" msgstr "Pengubah Kecepatan TampilanBebas" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Freelook Slow Modifier" -msgstr "Pengubah Kecepatan TampilanBebas" +msgstr "Pengubah Lambat Tampilan Bebas" #: editor/plugins/spatial_editor_plugin.cpp msgid "" @@ -7364,7 +7395,7 @@ msgid "" "It cannot be used as a reliable indication of in-game performance." msgstr "" "Catatan: Nilai FPS yang ditampilkan adalah framerate-nya editor.\n" -"Tidak bisa digunakan sebagai indikasi kinerja game yang dapat dihandalkan." +"Tidak bisa digunakan sebagai indikasi kinerja gim yang dapat dihandalkan." #: editor/plugins/spatial_editor_plugin.cpp msgid "View Rotation Locked" @@ -7568,9 +7599,8 @@ msgid "Create Mesh2D" msgstr "Buat Mesh2D" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Mesh2D Preview" -msgstr "Buat Pratinjau Mesh" +msgstr "Pratinjau Mesh2D" #: editor/plugins/sprite_editor_plugin.cpp msgid "Create Polygon2D" @@ -7578,25 +7608,23 @@ msgstr "Buat Polygon2D" #: editor/plugins/sprite_editor_plugin.cpp msgid "Polygon2D Preview" -msgstr "" +msgstr "Pratinjau Polygon2D" #: editor/plugins/sprite_editor_plugin.cpp msgid "Create CollisionPolygon2D" msgstr "Buat CollisionPolygon2D" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "CollisionPolygon2D Preview" -msgstr "Buat CollisionPolygon2D" +msgstr "Pratinjau CollisionPolygon2D" #: editor/plugins/sprite_editor_plugin.cpp msgid "Create LightOccluder2D" msgstr "Buat LightOccluder2D" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "LightOccluder2D Preview" -msgstr "Buat LightOccluder2D" +msgstr "Pratinjau LightOccluder2D" #: editor/plugins/sprite_editor_plugin.cpp msgid "Sprite is empty!" @@ -7647,9 +7675,8 @@ msgid "Simplification: " msgstr "Penyederhanaan: " #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Shrink (Pixels): " -msgstr "Pertumbuhan (Piksel): " +msgstr "Penciutan (Piksel): " #: editor/plugins/sprite_editor_plugin.cpp msgid "Grow (Pixels): " @@ -7676,17 +7703,16 @@ msgid "Add Frame" msgstr "Tambah Frame" #: editor/plugins/sprite_frames_editor_plugin.cpp -#, fuzzy msgid "Unable to load images" -msgstr "Gagal memuat resource." +msgstr "Tidak dapat memuat gambar" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "ERROR: Couldn't load frame resource!" -msgstr "GALAT: Tidak dapat memuat aset frame!" +msgstr "GALAT: Tidak dapat memuat resource frame!" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Resource clipboard is empty or not a texture!" -msgstr "Papan klip sumber daya kosong atau bukan tekstur!" +msgstr "Papan klip resource kosong atau memang bukan tekstur!" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Paste Frame" @@ -7863,7 +7889,7 @@ msgstr "Buat Templat Editor Kosong" #: editor/plugins/theme_editor_plugin.cpp msgid "Create From Current Editor Theme" -msgstr "Buat dari Tema Editor Saat Ini" +msgstr "Buat dari Editor Tema Saat Ini" #: editor/plugins/theme_editor_plugin.cpp msgid "Toggle Button" @@ -7971,9 +7997,8 @@ msgid "Color" msgstr "Warna" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Theme File" -msgstr "Tema" +msgstr "Berkas Tema" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Erase Selection" @@ -8026,11 +8051,11 @@ msgstr "Aktifkan Prioritas" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Filter tiles" -msgstr "Saring tile" +msgstr "Filter tile" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Give a TileSet resource to this TileMap to use its tiles." -msgstr "Berikan sumber TileSet untuk TileMap ini untuk menggunakan Tile-nya." +msgstr "Berikan resource TileSet ke TileMap ini untuk menggunakan tile-nya." #: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint Tile" @@ -8086,17 +8111,15 @@ msgstr "Gabung dari Skena" #: editor/plugins/tile_set_editor_plugin.cpp msgid "New Single Tile" -msgstr "" +msgstr "Tile Tunggal Baru" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "New Autotile" -msgstr "Nonaktifkan Autotile" +msgstr "Autotile Baru" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "New Atlas" -msgstr "%s baru" +msgstr "Atlas Baru" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Next Coordinate" @@ -8115,39 +8138,32 @@ msgid "Select the previous shape, subtile, or Tile." msgstr "Pilih bentuk sebelumnya, subtile, atau Tile." #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Region" -msgstr "Mode Wilayah" +msgstr "Wilayah" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Collision" -msgstr "Mode Tabrakan" +msgstr "Area Tabrakan" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Occlusion" -msgstr "Mode Oklusi" +msgstr "Oklusi" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Navigation" -msgstr "Mode Navigasi" +msgstr "Navigasi" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Bitmask" -msgstr "Mode Bitmask" +msgstr "Masker Bit" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Priority" -msgstr "Mode Prioritas" +msgstr "Prioritas" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Z Index" -msgstr "Indeks:" +msgstr "Indeks Z" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Region Mode" @@ -8219,6 +8235,8 @@ msgstr "Tampilkan Nama Tile (Tahan Tombol Alt)" msgid "" "Add or select a texture on the left panel to edit the tiles bound to it." msgstr "" +"Tambah atau pilih tekstur di panel kiri untuk menyunting tile yang terikat " +"padanya." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Remove selected texture? This will remove all tiles which use it." @@ -8377,12 +8395,10 @@ msgid "Edit Tile Z Index" msgstr "Sunting Index Z Tile" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Make Convex" msgstr "Buat Poligon Cembung" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Make Concave" msgstr "Buat Poligon Cekung" @@ -8406,7 +8422,7 @@ msgstr "TileSet" msgid "No VCS addons are available." msgstr "Tidak ada ekstensi VCS yang tersedia." -#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Error" msgstr "Galat" @@ -8416,7 +8432,7 @@ msgstr "Tidak ada pesan komit yang diberikan" #: editor/plugins/version_control_editor_plugin.cpp msgid "No files added to stage" -msgstr "" +msgstr "Tidak ada berkas yang ditambahkan ke staging" #: editor/plugins/version_control_editor_plugin.cpp msgid "Commit" @@ -8424,11 +8440,11 @@ msgstr "Komit" #: editor/plugins/version_control_editor_plugin.cpp msgid "VCS Addon is not initialized" -msgstr "" +msgstr "Pengaya VCS tidak diinisialisasi" #: editor/plugins/version_control_editor_plugin.cpp msgid "Version Control System" -msgstr "" +msgstr "Sistem Kontrol Versi" #: editor/plugins/version_control_editor_plugin.cpp msgid "Initialize" @@ -8436,7 +8452,7 @@ msgstr "Inisialisasi" #: editor/plugins/version_control_editor_plugin.cpp msgid "Staging area" -msgstr "" +msgstr "Area staging" #: editor/plugins/version_control_editor_plugin.cpp msgid "Detect new changes" @@ -8448,7 +8464,7 @@ msgstr "Perubahan" #: editor/plugins/version_control_editor_plugin.cpp msgid "Modified" -msgstr "" +msgstr "Dimodifikasi" #: editor/plugins/version_control_editor_plugin.cpp msgid "Renamed" @@ -8472,7 +8488,7 @@ msgstr "Stage Semua" #: editor/plugins/version_control_editor_plugin.cpp msgid "Add a commit message" -msgstr "" +msgstr "Tambahkan pesan komit" #: editor/plugins/version_control_editor_plugin.cpp msgid "Commit Changes" @@ -8481,28 +8497,27 @@ msgstr "Komit Perubahan" #: editor/plugins/version_control_editor_plugin.cpp #: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Status" -msgstr "" +msgstr "Status" #: editor/plugins/version_control_editor_plugin.cpp msgid "View file diffs before committing them to the latest version" -msgstr "" +msgstr "Tampilkan perbedaan berkas sebelum mengkomitnya ke versi terbaru" #: editor/plugins/version_control_editor_plugin.cpp msgid "No file diff is active" -msgstr "" +msgstr "Tidak ada berkas diff yang sedang aktif" #: editor/plugins/version_control_editor_plugin.cpp msgid "Detect changes in file diff" -msgstr "" +msgstr "Deteksi perubahan dalam berkas diff" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "(GLES3 only)" msgstr "(Hanya GLES3)" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Add Output" -msgstr "Tambah keluaran +" +msgstr "Tambah Keluaran" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Scalar" @@ -8518,7 +8533,7 @@ msgstr "Boolean" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Sampler" -msgstr "" +msgstr "Sampler" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Add input port" @@ -8650,9 +8665,8 @@ msgid "Dodge operator." msgstr "Operator dodge." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "HardLight operator." -msgstr "Operator HardLight" +msgstr "Operator HardLight." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Lighten operator." @@ -9297,16 +9311,15 @@ msgstr "" "permukaan dan arah pandangan kamera (berikan masukan yang terkait dengannya)." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "" "Custom Godot Shader Language expression, which is placed on top of the " "resulted shader. You can place various function definitions inside and call " "it later in the Expressions. You can also declare varyings, uniforms and " "constants." msgstr "" -"Ekspresi Bahasa Kustom Godot Shader, yang ditempatkan di atas shader yang " +"Ekspresi Kustom Godot Shader Language, yang ditempatkan di atas shader yang " "dihasilkan. Anda dapat menempatkan berbagai definisi fungsi di dalamnya dan " -"memanggilnya nanti melalui Ekspresi. Anda juga dapat mendeklarasikan " +"memanggilnya nanti melalui Daftar Ekspresi. Anda juga dapat mendeklarasikan " "variasi, seragam, dan konstanta." #: editor/plugins/visual_shader_editor_plugin.cpp @@ -9382,13 +9395,12 @@ msgid "Runnable" msgstr "Dapat dijalankan" #: editor/project_export.cpp -#, fuzzy msgid "Add initial export..." -msgstr "Tambah port masukan" +msgstr "Tambah ekspor awal..." #: editor/project_export.cpp msgid "Add previous patches..." -msgstr "" +msgstr "Tambahkan patch sebelumnya..." #: editor/project_export.cpp msgid "Delete patch '%s' from list?" @@ -9445,6 +9457,9 @@ msgid "" "If checked, the preset will be available for use in one-click deploy.\n" "Only one preset per platform may be marked as runnable." msgstr "" +"Jika dicentang, preset akan tersedia untuk digunakan dalam deploy sekali " +"klik.\n" +"Hanya satu preset per platform yang dapat ditandai sebagai runnable." #: editor/project_export.cpp msgid "Export Path" @@ -9452,11 +9467,11 @@ msgstr "Lokasi Ekspor" #: editor/project_export.cpp msgid "Resources" -msgstr "Sumber Daya" +msgstr "Resource" #: editor/project_export.cpp msgid "Export all resources in the project" -msgstr "Ekspor semua sumber daya dalam proyek" +msgstr "Ekspor semua resource dalam proyek" #: editor/project_export.cpp msgid "Export selected scenes (and dependencies)" @@ -9464,7 +9479,7 @@ msgstr "Ekspor skena terpilih (dan dependensinya)" #: editor/project_export.cpp msgid "Export selected resources (and dependencies)" -msgstr "Expor sumber daya terpilih (dan dependensinya)" +msgstr "Ekspor resource terpilih (dan dependensinya)" #: editor/project_export.cpp msgid "Export Mode:" @@ -9472,25 +9487,23 @@ msgstr "Mode Ekspor:" #: editor/project_export.cpp msgid "Resources to export:" -msgstr "Sumber daya yang akan diexpor:" +msgstr "Resource yang akan diekspor:" #: editor/project_export.cpp -#, fuzzy msgid "" "Filters to export non-resource files/folders\n" "(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" -"Penyaringan untuk mengekspor berkas non-sumber (dipisahkan koma, contoh: *." -"json, *.txt)" +"Filter untuk mengekspor berkas/folder non-resource\n" +"(pisahkan dengan koma, contoh: *.json, *.txt, docs/*)" #: editor/project_export.cpp -#, fuzzy msgid "" "Filters to exclude files/folders from project\n" "(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" -"Penyaringan untuk mengecualikan berkas dalam proyek (dipisahkan koma, " -"contoh: *.json, *.txt)" +"Filter untuk mengecualikan berkas/folder dari proyek\n" +"(pisahkan dengan koma, contoh: *.json, *.txt, docs/*)" #: editor/project_export.cpp msgid "Patches" @@ -9501,9 +9514,8 @@ msgid "Make Patch" msgstr "Buat Tambalan" #: editor/project_export.cpp -#, fuzzy msgid "Pack File" -msgstr " Berkas" +msgstr "Berkas Pack" #: editor/project_export.cpp msgid "Features" @@ -9562,13 +9574,12 @@ msgid "Export All" msgstr "Ekspor Semua" #: editor/project_export.cpp editor/project_manager.cpp -#, fuzzy msgid "ZIP File" -msgstr " Berkas" +msgstr "Berkas ZIP" #: editor/project_export.cpp msgid "Godot Game Pack" -msgstr "" +msgstr "Paket Gim Godot" #: editor/project_export.cpp msgid "Export templates for this platform are missing:" @@ -9583,11 +9594,19 @@ msgid "Export With Debug" msgstr "Ekspor dengan Awakutu" #: editor/project_manager.cpp -msgid "The path does not exist." +#, fuzzy +msgid "The path specified doesn't exist." msgstr "Lokasi ini tidak ada." #: editor/project_manager.cpp -msgid "Invalid '.zip' project file, does not contain a 'project.godot' file." +#, fuzzy +msgid "Error opening package file (it's not in ZIP format)." +msgstr "Gagal saat membuka paket, tidak dalam bentuk zip." + +#: editor/project_manager.cpp +#, fuzzy +msgid "" +"Invalid \".zip\" project file; it doesn't contain a \"project.godot\" file." msgstr "Berkas proyek '.zip' tidak valid, tidak berisi berkas 'project.godot'." #: editor/project_manager.cpp @@ -9595,11 +9614,13 @@ msgid "Please choose an empty folder." msgstr "Silakan pilih direktori kosong." #: editor/project_manager.cpp -msgid "Please choose a 'project.godot' or '.zip' file." +#, fuzzy +msgid "Please choose a \"project.godot\" or \".zip\" file." msgstr "Silakan pilih berkas 'project.godot' atau '.zip'." #: editor/project_manager.cpp -msgid "Directory already contains a Godot project." +#, fuzzy +msgid "This directory already contains a Godot project." msgstr "Direktori ini sudah berisi proyek Godot." #: editor/project_manager.cpp @@ -9869,7 +9890,7 @@ msgstr "Proyek" #: editor/project_manager.cpp msgid "Last Modified" -msgstr "" +msgstr "Terakhir Diubah" #: editor/project_manager.cpp msgid "Scan" @@ -10109,27 +10130,27 @@ msgstr "Tambah Lokasi yang Dipetakan Ulang" #: editor/project_settings_editor.cpp msgid "Resource Remap Add Remap" -msgstr "Sumber Daya Remap Tambah Remap" +msgstr "Resource Remap Tambah Remap" #: editor/project_settings_editor.cpp msgid "Change Resource Remap Language" -msgstr "Ubah Sumber Daya Pemetaan Ulang Bahasa" +msgstr "Ubah Bahasa Resource Remap" #: editor/project_settings_editor.cpp msgid "Remove Resource Remap" -msgstr "Hapus Remap Sumber Daya" +msgstr "Hapus Resource Remap" #: editor/project_settings_editor.cpp msgid "Remove Resource Remap Option" -msgstr "Hapus Opsi Remap Sumber Daya" +msgstr "Hapus Opsi Resource Remap" #: editor/project_settings_editor.cpp msgid "Changed Locale Filter" -msgstr "Penyaringan Lokalisasi Diubah" +msgstr "Filter Locale Diubah" #: editor/project_settings_editor.cpp msgid "Changed Locale Filter Mode" -msgstr "Mode Penyaringan Lokalisasi Diubah" +msgstr "Mode Filter Locale Diubah" #: editor/project_settings_editor.cpp msgid "Project Settings (project.godot)" @@ -10161,7 +10182,7 @@ msgstr "Aksi" #: editor/project_settings_editor.cpp msgid "Deadzone" -msgstr "" +msgstr "Deadzone" #: editor/project_settings_editor.cpp msgid "Device:" @@ -10189,7 +10210,7 @@ msgstr "Pemetaan Ulang" #: editor/project_settings_editor.cpp msgid "Resources:" -msgstr "Sumber daya:" +msgstr "Resource:" #: editor/project_settings_editor.cpp msgid "Remaps by Locale:" @@ -10201,7 +10222,7 @@ msgstr "Pelokalan" #: editor/project_settings_editor.cpp msgid "Locales Filter" -msgstr "Penyaring Pelokalan" +msgstr "Filter Locale" #: editor/project_settings_editor.cpp msgid "Show All Locales" @@ -10213,7 +10234,7 @@ msgstr "Tampilkan Hanya Pelokalan yang Dipilih" #: editor/project_settings_editor.cpp msgid "Filter mode:" -msgstr "Mode penyaringan:" +msgstr "Mode filter:" #: editor/project_settings_editor.cpp msgid "Locales:" @@ -10261,7 +10282,7 @@ msgstr "Pilih Node" #: editor/property_editor.cpp msgid "Error loading file: Not a resource!" -msgstr "Galat saat memuat berkas: Bukan sumber daya!" +msgstr "Galat saat memuat berkas: Bukan resource!" #: editor/property_editor.cpp msgid "Pick a Node" @@ -10296,6 +10317,11 @@ msgid "Suffix" msgstr "Akhiran" #: editor/rename_dialog.cpp +#, fuzzy +msgid "Use Regular Expressions" +msgstr "Ekspresi Reguler" + +#: editor/rename_dialog.cpp msgid "Advanced Options" msgstr "Opsi Lanjutan" @@ -10332,7 +10358,8 @@ msgstr "" "Bandingkan opsi penghitung." #: editor/rename_dialog.cpp -msgid "Per Level counter" +#, fuzzy +msgid "Per-level Counter" msgstr "Penghitung per Level" #: editor/rename_dialog.cpp @@ -10364,10 +10391,6 @@ msgstr "" "Digit yang hilang diisi dengan angka nol di depan." #: editor/rename_dialog.cpp -msgid "Regular Expressions" -msgstr "Ekspresi Reguler" - -#: editor/rename_dialog.cpp msgid "Post-Process" msgstr "Pasca Proses" @@ -10376,11 +10399,13 @@ msgid "Keep" msgstr "Pertahankan" #: editor/rename_dialog.cpp -msgid "CamelCase to under_scored" +#, fuzzy +msgid "PascalCase to snake_case" msgstr "CamelCase ke under_score" #: editor/rename_dialog.cpp -msgid "under_scored to CamelCase" +#, fuzzy +msgid "snake_case to PascalCase" msgstr "under_score ke CamelCase" #: editor/rename_dialog.cpp @@ -10399,6 +10424,16 @@ msgstr "Jadikan Huruf Kapital" msgid "Reset" msgstr "Reset" +#: editor/rename_dialog.cpp +#, fuzzy +msgid "Regular Expression Error" +msgstr "Ekspresi Reguler" + +#: editor/rename_dialog.cpp +#, fuzzy +msgid "At character %s" +msgstr "Karakter sah:" + #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "Pengindukan Ulang Node" @@ -10457,7 +10492,7 @@ msgstr "Instansi Skena" #: editor/scene_tree_dock.cpp msgid "Replace with Branch Scene" -msgstr "" +msgstr "Ganti dengan Skena Cabang" #: editor/scene_tree_dock.cpp msgid "Instance Child Scene" @@ -10507,11 +10542,11 @@ msgstr "Hapus %d node?" #: editor/scene_tree_dock.cpp msgid "Delete the root node \"%s\"?" -msgstr "" +msgstr "Hapus node root \"%s\" ?" #: editor/scene_tree_dock.cpp msgid "Delete node \"%s\" and its children?" -msgstr "" +msgstr "Hapus node \"%s\" dan anak-anaknya?" #: editor/scene_tree_dock.cpp msgid "Delete node \"%s\"?" @@ -10534,16 +10569,21 @@ msgid "" "Disabling \"editable_instance\" will cause all properties of the node to be " "reverted to their default." msgstr "" +"Menonaktifkan \"editable_instance\" mengakibatkan semua properti node akan " +"dikembalikan ke properti bakunya." #: editor/scene_tree_dock.cpp msgid "" "Enabling \"Load As Placeholder\" will disable \"Editable Children\" and " "cause all properties of the node to be reverted to their default." msgstr "" +"Mengaktifkan \"Muas sebagai Placeholder\" akan menonaktifkan \"Anakan yang " +"Dapat Disunting\" dan mengakibatkan semua properti node dikembalikan ke " +"properti bakunya." #: editor/scene_tree_dock.cpp msgid "Make Local" -msgstr "" +msgstr "Jadikan Local" #: editor/scene_tree_dock.cpp msgid "New Scene Root" @@ -10563,7 +10603,7 @@ msgstr "Skena 3D" #: editor/scene_tree_dock.cpp msgid "User Interface" -msgstr "" +msgstr "Antarmuka Pengguna" #: editor/scene_tree_dock.cpp msgid "Other Node" @@ -10571,7 +10611,7 @@ msgstr "Node Lainnya" #: editor/scene_tree_dock.cpp msgid "Can't operate on nodes from a foreign scene!" -msgstr "" +msgstr "Tidak dapat bekerja pada node dari skena luar!" #: editor/scene_tree_dock.cpp msgid "Can't operate on nodes the current scene inherits from!" @@ -10583,7 +10623,7 @@ msgstr "Lampirkan Skrip" #: editor/scene_tree_dock.cpp msgid "Remove Node(s)" -msgstr "" +msgstr "Hapus Node" #: editor/scene_tree_dock.cpp msgid "Change type of node(s)" @@ -10594,31 +10634,32 @@ msgid "" "Couldn't save new scene. Likely dependencies (instances) couldn't be " "satisfied." msgstr "" +"Tidak dapat menyimpan skena. Kemungkinan dependensinya (instance-nya) tidak " +"terpenuhi." #: editor/scene_tree_dock.cpp msgid "Error saving scene." -msgstr "" +msgstr "Galat menyimpan skena." #: editor/scene_tree_dock.cpp msgid "Error duplicating scene to save it." -msgstr "" +msgstr "Galat menduplikasi skena untuk menyimpannya." #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Sub-Resources" -msgstr "Sub-Sumber Daya" +msgstr "Sub-Resource" #: editor/scene_tree_dock.cpp msgid "Clear Inheritance" -msgstr "" +msgstr "Bersihkan Pewarisan" #: editor/scene_tree_dock.cpp msgid "Editable Children" -msgstr "" +msgstr "Anakan yang Dapat Disunting" #: editor/scene_tree_dock.cpp msgid "Load As Placeholder" -msgstr "" +msgstr "Muat sebagai Placeholder" #: editor/scene_tree_dock.cpp msgid "Open Documentation" @@ -10626,7 +10667,7 @@ msgstr "Buka Dokumentasi" #: editor/scene_tree_dock.cpp msgid "Add Child Node" -msgstr "" +msgstr "Tambah Node Anak" #: editor/scene_tree_dock.cpp msgid "Expand/Collapse All" @@ -10634,7 +10675,7 @@ msgstr "Bentangkan/Ciutkan Semua" #: editor/scene_tree_dock.cpp msgid "Change Type" -msgstr "" +msgstr "Ubah Tipe" #: editor/scene_tree_dock.cpp msgid "Reparent to New Node" @@ -10646,11 +10687,11 @@ msgstr "Jadikan Skena Dasar" #: editor/scene_tree_dock.cpp msgid "Merge From Scene" -msgstr "" +msgstr "Gabung dari Skena" #: editor/scene_tree_dock.cpp editor/script_editor_debugger.cpp msgid "Save Branch as Scene" -msgstr "" +msgstr "Simpan Cabang sebagai Skena" #: editor/scene_tree_dock.cpp editor/script_editor_debugger.cpp msgid "Copy Node Path" @@ -10658,7 +10699,7 @@ msgstr "Salin Lokasi Node" #: editor/scene_tree_dock.cpp msgid "Delete (No Confirm)" -msgstr "" +msgstr "Hapus (Tanpa Konfirmasi)" #: editor/scene_tree_dock.cpp msgid "Add/Create a New Node." @@ -10669,14 +10710,16 @@ msgid "" "Instance a scene file as a Node. Creates an inherited scene if no root node " "exists." msgstr "" +"Instance berkas skena sebagai Node. Buat skena warisan jika tidak ada node " +"akar." #: editor/scene_tree_dock.cpp msgid "Attach a new or existing script for the selected node." -msgstr "" +msgstr "Lampirkan skrip baru atau yang sudah ada untuk node yang dipilih." #: editor/scene_tree_dock.cpp msgid "Clear a script for the selected node." -msgstr "" +msgstr "Bersihkan skrip untuk node yang dipilih." #: editor/scene_tree_dock.cpp msgid "Remote" @@ -10684,16 +10727,15 @@ msgstr "Remot" #: editor/scene_tree_dock.cpp msgid "Local" -msgstr "" +msgstr "Lokal" #: editor/scene_tree_dock.cpp msgid "Clear Inheritance? (No Undo!)" -msgstr "" +msgstr "Bersihkan Pewarisan? (Tidak Bisa Dibatalkan!)" #: editor/scene_tree_editor.cpp -#, fuzzy msgid "Toggle Visible" -msgstr "Beralih File Tersembunyi" +msgstr "Jungkitkan Keterlihatan" #: editor/scene_tree_editor.cpp msgid "Unlock Node" @@ -10709,25 +10751,31 @@ msgstr "(Menghubungkan dari)" #: editor/scene_tree_editor.cpp msgid "Node configuration warning:" -msgstr "" +msgstr "Peringatan pengaturan node:" #: editor/scene_tree_editor.cpp msgid "" "Node has %s connection(s) and %s group(s).\n" "Click to show signals dock." msgstr "" +"Node memiliki %s koneksi dan %s grup.\n" +"Klik untuk menampilkan dock sinyal." #: editor/scene_tree_editor.cpp msgid "" "Node has %s connection(s).\n" "Click to show signals dock." msgstr "" +"Node memiliki %s koneksi.\n" +"Klik untuk menampilkan dock sinyal." #: editor/scene_tree_editor.cpp msgid "" "Node is in %s group(s).\n" "Click to show groups dock." msgstr "" +"Node berada dalam %s grup.\n" +"Klik untuk menampilkan dock grup." #: editor/scene_tree_editor.cpp msgid "Open Script:" @@ -10738,42 +10786,48 @@ msgid "" "Node is locked.\n" "Click to unlock it." msgstr "" +"Node terkunci.\n" +"Klik untuk membukanya." #: editor/scene_tree_editor.cpp msgid "" "Children are not selectable.\n" "Click to make selectable." msgstr "" +"Anakan tidak dapat dipilih.\n" +"Klik untuk membuatnya dapat dipilih." #: editor/scene_tree_editor.cpp msgid "Toggle Visibility" -msgstr "" +msgstr "Jungkitkan Visibilitas" #: editor/scene_tree_editor.cpp msgid "" "AnimationPlayer is pinned.\n" "Click to unpin." msgstr "" +"AnimationPlayer disematkan.\n" +"Klik untuk menghapus sematan." #: editor/scene_tree_editor.cpp msgid "Invalid node name, the following characters are not allowed:" -msgstr "" +msgstr "Nama node tidak valid, karakter berikut tidak diperbolehkan:" #: editor/scene_tree_editor.cpp msgid "Rename Node" -msgstr "" +msgstr "Ubah Nama Node" #: editor/scene_tree_editor.cpp msgid "Scene Tree (Nodes):" -msgstr "" +msgstr "Pohon Skena (Node):" #: editor/scene_tree_editor.cpp msgid "Node Configuration Warning!" -msgstr "" +msgstr "Peringatan Konfigurasi Node!" #: editor/scene_tree_editor.cpp msgid "Select a Node" -msgstr "" +msgstr "Pilih Node" #: editor/script_create_dialog.cpp msgid "Path is empty." @@ -10801,7 +10855,7 @@ msgstr "Ekstensi tidak valid." #: editor/script_create_dialog.cpp msgid "Wrong extension chosen." -msgstr "" +msgstr "Ekstensi salah dipilih." #: editor/script_create_dialog.cpp msgid "Error loading template '%s'" @@ -10821,7 +10875,7 @@ msgstr "Menimpa" #: editor/script_create_dialog.cpp msgid "N/A" -msgstr "" +msgstr "N/A" #: editor/script_create_dialog.cpp msgid "Open Script / Choose Location" @@ -10844,12 +10898,13 @@ msgid "Invalid inherited parent name or path." msgstr "Nama atau lokasi parent yang diwariskan tidak valid." #: editor/script_create_dialog.cpp -msgid "Script is valid." +#, fuzzy +msgid "Script path/name is valid." msgstr "Skrip valid." #: editor/script_create_dialog.cpp msgid "Allowed: a-z, A-Z, 0-9, _ and ." -msgstr "" +msgstr "Diizinkan: a-z, A-Z, 0-9, _ dan ." #: editor/script_create_dialog.cpp msgid "Built-in script (into scene file)." @@ -10864,24 +10919,20 @@ msgid "Will load an existing script file." msgstr "Akan memuat berkas skrip yang ada." #: editor/script_create_dialog.cpp -#, fuzzy msgid "Script file already exists." -msgstr "Autoload '%s' telah ada!" +msgstr "Berkas skrip sudah ada." #: editor/script_create_dialog.cpp -#, fuzzy msgid "Class Name:" -msgstr "Nama Kelas" +msgstr "Nama Kelas:" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Template:" -msgstr "Templat" +msgstr "Templat:" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Built-in Script:" -msgstr "Skrip Utama:" +msgstr "Skrip Internal:" #: editor/script_create_dialog.cpp msgid "Attach Node Script" @@ -10893,7 +10944,7 @@ msgstr "Remot " #: editor/script_editor_debugger.cpp msgid "Bytes:" -msgstr "" +msgstr "Bytes:" #: editor/script_editor_debugger.cpp msgid "Warning:" @@ -10925,11 +10976,11 @@ msgstr "Sumber C++ :" #: editor/script_editor_debugger.cpp msgid "Stack Trace" -msgstr "" +msgstr "Stack Trace" #: editor/script_editor_debugger.cpp msgid "Errors" -msgstr "" +msgstr "Galat" #: editor/script_editor_debugger.cpp msgid "Child process connected." @@ -10940,97 +10991,97 @@ msgid "Copy Error" msgstr "Salin Galat" #: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Video RAM" +msgstr "Memori Video" + +#: editor/script_editor_debugger.cpp msgid "Skip Breakpoints" msgstr "Lewati Breakpoint" #: editor/script_editor_debugger.cpp msgid "Inspect Previous Instance" -msgstr "" +msgstr "Inspeksi Instance Sebelumnya" #: editor/script_editor_debugger.cpp msgid "Inspect Next Instance" -msgstr "" +msgstr "Inspeksi Instance Berikutnya" #: editor/script_editor_debugger.cpp msgid "Stack Frames" -msgstr "" +msgstr "Stack Frame" #: editor/script_editor_debugger.cpp msgid "Profiler" -msgstr "" +msgstr "Profiler(debugger/pemantauan)" #: editor/script_editor_debugger.cpp msgid "Network Profiler" -msgstr "Profiler Jaringan" +msgstr "Network Profiler(Debug jaringan)" #: editor/script_editor_debugger.cpp msgid "Monitor" -msgstr "" +msgstr "Pemantau" #: editor/script_editor_debugger.cpp msgid "Value" -msgstr "" +msgstr "Nilai" #: editor/script_editor_debugger.cpp msgid "Monitors" -msgstr "" +msgstr "Pemantau" #: editor/script_editor_debugger.cpp msgid "Pick one or more items from the list to display the graph." -msgstr "" +msgstr "Pilih satu atau lebih item dari daftar untuk menampilkan grafiknya." #: editor/script_editor_debugger.cpp msgid "List of Video Memory Usage by Resource:" -msgstr "" +msgstr "Daftar Penggunaan Memori Video oleh Resource:" #: editor/script_editor_debugger.cpp msgid "Total:" -msgstr "" - -#: editor/script_editor_debugger.cpp -msgid "Video Mem" -msgstr "" +msgstr "Total:" #: editor/script_editor_debugger.cpp msgid "Resource Path" -msgstr "" +msgstr "Lokasi Resource" #: editor/script_editor_debugger.cpp msgid "Type" -msgstr "" +msgstr "Tipe" #: editor/script_editor_debugger.cpp msgid "Format" -msgstr "" +msgstr "Format" #: editor/script_editor_debugger.cpp msgid "Usage" -msgstr "" +msgstr "Pemakaian" #: editor/script_editor_debugger.cpp msgid "Misc" -msgstr "" +msgstr "Lain-lain" #: editor/script_editor_debugger.cpp msgid "Clicked Control:" -msgstr "" +msgstr "Kontrol yang Diklik:" #: editor/script_editor_debugger.cpp msgid "Clicked Control Type:" -msgstr "" +msgstr "Tipe Kontrol yang Diklik:" #: editor/script_editor_debugger.cpp msgid "Live Edit Root:" -msgstr "" +msgstr "Sunting Root Langsung:" #: editor/script_editor_debugger.cpp -#, fuzzy msgid "Set From Tree" -msgstr "Menyetel Dari Keturunan" +msgstr "Setel dari Pohon" #: editor/script_editor_debugger.cpp msgid "Export measures as CSV" -msgstr "" +msgstr "Ekspor pengukuran sebagai CSV" #: editor/settings_config_dialog.cpp msgid "Erase Shortcut" @@ -11038,11 +11089,11 @@ msgstr "Hapus Pintasan" #: editor/settings_config_dialog.cpp msgid "Restore Shortcut" -msgstr "" +msgstr "Kembalikan Tombol Pintasan" #: editor/settings_config_dialog.cpp msgid "Change Shortcut" -msgstr "" +msgstr "Ubah Tombol Pintasan" #: editor/settings_config_dialog.cpp msgid "Editor Settings" @@ -11050,11 +11101,11 @@ msgstr "Pengaturan Editor" #: editor/settings_config_dialog.cpp msgid "Shortcuts" -msgstr "" +msgstr "Tombol Pintasan" #: editor/settings_config_dialog.cpp msgid "Binding" -msgstr "" +msgstr "Mengikat" #: editor/spatial_editor_gizmos.cpp msgid "Change Light Radius" @@ -11062,7 +11113,7 @@ msgstr "Ganti Radius Lampu" #: editor/spatial_editor_gizmos.cpp msgid "Change AudioStreamPlayer3D Emission Angle" -msgstr "" +msgstr "Ubah Sudut Emisi AudioStreamPlayer3D" #: editor/spatial_editor_gizmos.cpp msgid "Change Camera FOV" @@ -11074,15 +11125,15 @@ msgstr "Ubah Ukuran Kamera" #: editor/spatial_editor_gizmos.cpp msgid "Change Notifier AABB" -msgstr "" +msgstr "Ubah AABB Notifier" #: editor/spatial_editor_gizmos.cpp msgid "Change Particles AABB" -msgstr "" +msgstr "Ubah Partikel AABB" #: editor/spatial_editor_gizmos.cpp msgid "Change Probe Extents" -msgstr "" +msgstr "Ubah Batas Probe" #: editor/spatial_editor_gizmos.cpp modules/csg/csg_gizmos.cpp msgid "Change Sphere Shape Radius" @@ -11090,15 +11141,15 @@ msgstr "Ganti Radius Bentuk Bola" #: editor/spatial_editor_gizmos.cpp modules/csg/csg_gizmos.cpp msgid "Change Box Shape Extents" -msgstr "" +msgstr "Ubah Batas Box Shape" #: editor/spatial_editor_gizmos.cpp msgid "Change Capsule Shape Radius" -msgstr "" +msgstr "Ubah Radius Shape Kapsul" #: editor/spatial_editor_gizmos.cpp msgid "Change Capsule Shape Height" -msgstr "" +msgstr "Ubah Tinggi Shape Kapsul" #: editor/spatial_editor_gizmos.cpp msgid "Change Cylinder Shape Radius" @@ -11110,7 +11161,7 @@ msgstr "Ubah Tinggi Bentuk Silinder" #: editor/spatial_editor_gizmos.cpp msgid "Change Ray Shape Length" -msgstr "" +msgstr "Ubah Panjang Shape Ray" #: modules/csg/csg_gizmos.cpp msgid "Change Cylinder Radius" @@ -11130,11 +11181,11 @@ msgstr "Ubah Torus Radius Luar" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Select the dynamic library for this entry" -msgstr "" +msgstr "Pilih pustaka dinamis untuk entri ini" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Select dependencies of the library for this entry" -msgstr "" +msgstr "Pilih dependensi pustaka untuk entri ini" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Remove current entry" @@ -11142,15 +11193,15 @@ msgstr "Hapus entri saat ini" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Double click to create a new entry" -msgstr "" +msgstr "Klik ganda untuk membuat entri baru" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Platform:" -msgstr "" +msgstr "Platform:" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Platform" -msgstr "" +msgstr "Platform" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Dynamic Library" @@ -11158,7 +11209,7 @@ msgstr "Pustaka Dinamis" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Add an architecture entry" -msgstr "" +msgstr "Tambah entri arsitektur" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "GDNativeLibrary" @@ -11166,7 +11217,7 @@ msgstr "Pustaka GDNative" #: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Enabled GDNative Singleton" -msgstr "" +msgstr "Aktifkan Singleton GDNative" #: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Disabled GDNative Singleton" @@ -11178,11 +11229,11 @@ msgstr "Pustaka" #: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Libraries: " -msgstr "" +msgstr "Pustaka: " #: modules/gdnative/register_types.cpp msgid "GDNative" -msgstr "" +msgstr "GDNative" #: modules/gdscript/gdscript_functions.cpp msgid "Step argument is zero!" @@ -11218,49 +11269,43 @@ msgstr "Kamus acuan tidak sah (sub kelas tidak sah)" #: modules/gdscript/gdscript_functions.cpp msgid "Object can't provide a length." -msgstr "" +msgstr "Objek tidak dapat memberikan panjang." #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Next Plane" -msgstr "Tab selanjutnya" +msgstr "Plane Selanjutnya" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Previous Plane" -msgstr "Tab sebelumnya" +msgstr "Plane Sebelumnya" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Plane:" -msgstr "" +msgstr "Plane:" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Next Floor" -msgstr "" +msgstr "Floor Selanjutnya" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Previous Floor" -msgstr "Tab sebelumnya" +msgstr "Floor Sebelumnya" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Floor:" -msgstr "" +msgstr "Floor:" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "GridMap Delete Selection" -msgstr "Hapus yang Dipilih" +msgstr "Hapus Seleksi GridMap" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "GridMap Fill Selection" -msgstr "Hapus yang Dipilih" +msgstr "Isi Seleksi GridMap" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "GridMap Paste Selection" -msgstr "Hapus yang Dipilih" +msgstr "Rekat(Paste) Seleksi GridMap" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "GridMap Paint" @@ -11268,141 +11313,136 @@ msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Grid Map" -msgstr "" +msgstr "Grid Map" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Snap View" -msgstr "" +msgstr "Tampilan Pengancingan" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Clip Disabled" -msgstr "Dinonaktifkan" +msgstr "Klip Dinonaktifkan" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Clip Above" -msgstr "" +msgstr "Klip Di Atas" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Clip Below" -msgstr "" +msgstr "Klip Di Bawah" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Edit X Axis" -msgstr "" +msgstr "Sunting Sumbu X" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Edit Y Axis" -msgstr "" +msgstr "Sunting Sumbu Y" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Edit Z Axis" -msgstr "" +msgstr "Sunting Sumbu Z" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Cursor Rotate X" -msgstr "" +msgstr "Kursor Rotasi X" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Cursor Rotate Y" -msgstr "" +msgstr "Kursor Rotasi Y" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Cursor Rotate Z" -msgstr "" +msgstr "Kursor Rotasi Z" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Cursor Back Rotate X" -msgstr "" +msgstr "Kursor Rotasi Balik X" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Cursor Back Rotate Y" -msgstr "" +msgstr "Kursor Rotasi Balik Y" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Cursor Back Rotate Z" -msgstr "" +msgstr "Kursor Rotasi Balik Z" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Cursor Clear Rotation" -msgstr "" +msgstr "Kursor Bersihkan Rotasi" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Paste Selects" -msgstr "Hapus Pilihan" +msgstr "Rekatkan Pilihan" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Clear Selection" -msgstr "Beri Skala Seleksi" +msgstr "Bersihkan Seleksi" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Fill Selection" -msgstr "Semua pilihan" +msgstr "Isi Pilihan" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "GridMap Settings" -msgstr "" +msgstr "Pengaturan GridMap" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Pick Distance:" -msgstr "" +msgstr "Pilih Jarak:" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Filter meshes" -msgstr "Penyaring fungsi" +msgstr "Filter mesh" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Give a MeshLibrary resource to this GridMap to use its meshes." msgstr "" +"Berikan resource MeshLibrary ke GridMap ini untuk menggunakan mesh-nya." #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" -msgstr "" +msgstr "Nama kelas tidak boleh reserved keyword" #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" -msgstr "" +msgstr "Akhir dari inner exception stack trace" #: modules/recast/navigation_mesh_editor_plugin.cpp msgid "Bake NavMesh" -msgstr "" +msgstr "Bake NavMesh" #: modules/recast/navigation_mesh_editor_plugin.cpp msgid "Clear the navigation mesh." -msgstr "" +msgstr "Bersihkan mesh navigasi." #: modules/recast/navigation_mesh_generator.cpp msgid "Setting up Configuration..." -msgstr "" +msgstr "Menyiapkan Konfigurasi..." #: modules/recast/navigation_mesh_generator.cpp msgid "Calculating grid size..." -msgstr "" +msgstr "Menghitung ukuran kisi..." #: modules/recast/navigation_mesh_generator.cpp msgid "Creating heightfield..." -msgstr "" +msgstr "Membuat bidang ketinggian..." #: modules/recast/navigation_mesh_generator.cpp -#, fuzzy msgid "Marking walkable triangles..." -msgstr "Menyimpan perubahan-perubahan lokal..." +msgstr "Segitiga penanda walkable..." #: modules/recast/navigation_mesh_generator.cpp msgid "Constructing compact heightfield..." -msgstr "" +msgstr "Membangun dataran tinggi..." #: modules/recast/navigation_mesh_generator.cpp msgid "Eroding walkable area..." -msgstr "" +msgstr "Mengikis area jalan..." #: modules/recast/navigation_mesh_generator.cpp msgid "Partitioning..." -msgstr "" +msgstr "Mempartisi..." #: modules/recast/navigation_mesh_generator.cpp msgid "Creating contours..." @@ -11487,42 +11527,36 @@ msgid "Set Variable Type" msgstr "Atur Jenis variabel" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Add Input Port" -msgstr "Tambah port masukan" +msgstr "Tambah Port Masukan" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Add Output Port" -msgstr "Tambah port keluaran" +msgstr "Tambah Port Keluaran" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Override an existing built-in function." -msgstr "Tidak boleh sama dengan nama tipe bawaan yang ada." +msgstr "Menimpa fungsi built-in yang ada." #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Create a new function." -msgstr "Buat persegi panjang baru." +msgstr "Buat fungsi baru." #: modules/visual_script/visual_script_editor.cpp msgid "Variables:" msgstr "Variabel-variabel:" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Create a new variable." -msgstr "Buat persegi panjang baru." +msgstr "Buat variabel baru." #: modules/visual_script/visual_script_editor.cpp msgid "Signals:" msgstr "Sinyal-sinyal:" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Create a new signal." -msgstr "Buat poligon baru." +msgstr "Buat sinyal baru." #: modules/visual_script/visual_script_editor.cpp msgid "Name is not a valid identifier:" @@ -11549,7 +11583,6 @@ msgid "Add Function" msgstr "Tambahkan Fungsi" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Delete input port" msgstr "Hapus port masukan" @@ -11562,59 +11595,56 @@ msgid "Add Signal" msgstr "Tambahkan Sinyal" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Remove Input Port" -msgstr "Hapus port masukan" +msgstr "Hapus Port Masukan" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Remove Output Port" -msgstr "Hapus port keluaran" +msgstr "Hapus Port Keluaran" #: modules/visual_script/visual_script_editor.cpp msgid "Change Expression" msgstr "Ubah Pernyataan" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Remove VisualScript Nodes" -msgstr "Hapus Tombol-tombol yang tidak sah" +msgstr "Hapus Node VisualScript" #: modules/visual_script/visual_script_editor.cpp msgid "Duplicate VisualScript Nodes" -msgstr "" +msgstr "Duplikasi Node VisualSkrip" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Hold %s to drop a Getter. Hold Shift to drop a generic signature." msgstr "" -"Tahan Meta untuk meletakkan sebuah Getter. Tahan Shift untuk meletakkan " +"Tahan %s untuk meletakkan sebuah Getter. Tahan Shift untuk meletakkan " "generic signature." #: modules/visual_script/visual_script_editor.cpp msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature." msgstr "" +"Tahan Ctrl untuk meletakkan Getter. Tahan Shift untuk meletakkan generic " +"signature." #: modules/visual_script/visual_script_editor.cpp msgid "Hold %s to drop a simple reference to the node." -msgstr "" +msgstr "Tahan %s untuk meletakkan referensi sederhana ke node." #: modules/visual_script/visual_script_editor.cpp msgid "Hold Ctrl to drop a simple reference to the node." -msgstr "" +msgstr "Tahan Ctrl untuk menjatuhkan referensi sederhana ke node." #: modules/visual_script/visual_script_editor.cpp msgid "Hold %s to drop a Variable Setter." -msgstr "" +msgstr "Tahan %s untuk menjatuhkan Variabel Setter." #: modules/visual_script/visual_script_editor.cpp msgid "Hold Ctrl to drop a Variable Setter." -msgstr "" +msgstr "Tahan Ctrl untuk menjatuhkan Variabel Setter." #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Add Preload Node" -msgstr "Tambahkan Node" +msgstr "Tambah Node Preload" #: modules/visual_script/visual_script_editor.cpp msgid "Add Node(s) From Tree" @@ -11635,70 +11665,60 @@ msgid "Add Setter Property" msgstr "Tambahkan Properti Setter" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Change Base Type" -msgstr "Ubah Tipe Nilai Array" +msgstr "Ubah Tipe Basis" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Move Node(s)" -msgstr "Salin Resource" +msgstr "Pindahkan Node" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Remove VisualScript Node" -msgstr "Hapus Variabel" +msgstr "Hapus Node VisualScript" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Connect Nodes" -msgstr "Sambungkan Ke Node:" +msgstr "Sambungkan Node" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Disconnect Nodes" -msgstr "Sambungkan Ke Node:" +msgstr "Putuskan Node" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Connect Node Data" -msgstr "Sambungkan Ke Node:" +msgstr "Sambungkan Data Node" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Connect Node Sequence" -msgstr "Sambungkan Ke Node:" +msgstr "Sambungkan Sequence Node" #: modules/visual_script/visual_script_editor.cpp msgid "Script already has function '%s'" -msgstr "" +msgstr "Skrip sudah memiliki fungsi '%s'" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Change Input Value" -msgstr "Ubah Nilai Array" +msgstr "Ubah Nilai Input" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Resize Comment" -msgstr "Sunting CanvasItem" +msgstr "Ubah Ukuran Komentar" #: modules/visual_script/visual_script_editor.cpp msgid "Can't copy the function node." -msgstr "" +msgstr "Tidak dapat menyalin node fungsi." #: modules/visual_script/visual_script_editor.cpp msgid "Clipboard is empty!" -msgstr "" +msgstr "Papan klip kosong!" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Paste VisualScript Nodes" -msgstr "Path ke Node:" +msgstr "Rekatkan Node VisualScript" #: modules/visual_script/visual_script_editor.cpp msgid "Can't create function with a function node." -msgstr "" +msgstr "Tidak dapat membuat fungsi dengan node fungsi." #: modules/visual_script/visual_script_editor.cpp msgid "Can't create function of nodes from nodes of multiple functions." @@ -11713,9 +11733,8 @@ msgid "Try to only have one sequence input in selection." msgstr "" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Create Function" -msgstr "Namai kembali Fungsi" +msgstr "Buat Fungsi" #: modules/visual_script/visual_script_editor.cpp msgid "Remove Function" @@ -11746,62 +11765,52 @@ msgid "Members:" msgstr "Member-member:" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Change Base Type:" -msgstr "Ubah Tipe Nilai Array" +msgstr "Ubah Tipe Basis:" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Add Nodes..." msgstr "Tambah Node..." #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Add Function..." -msgstr "Tambahkan Fungsi" +msgstr "Tambah Fungsi..." #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "function_name" -msgstr "Fungsi-fungsi:" +msgstr "function_name" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Select or create a function to edit its graph." -msgstr "Pilih atau ciptakan sebuah fungsi untuk mengedit grafik" +msgstr "Pilih atau buat fungsi untuk menyunting grafiknya." #: modules/visual_script/visual_script_editor.cpp msgid "Delete Selected" msgstr "Hapus yang Dipilih" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Find Node Type" msgstr "Cari Tipe Node" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Copy Nodes" -msgstr "Salin Resource" +msgstr "Salin Node" #: modules/visual_script/visual_script_editor.cpp msgid "Cut Nodes" msgstr "" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Make Function" -msgstr "Namai kembali Fungsi" +msgstr "Buat Fungsi" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Refresh Graph" -msgstr "Segarkan" +msgstr "Segarkan Grafik" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Edit Member" -msgstr "Anggota" +msgstr "Sunting Anggota" #: modules/visual_script/visual_script_flow_control.cpp msgid "Input type not iterable: " @@ -11861,9 +11870,8 @@ msgstr "" "string (error)." #: modules/visual_script/visual_script_property_selector.cpp -#, fuzzy msgid "Search VisualScript" -msgstr "Hapus Variabel" +msgstr "Cari VisualScript" #: modules/visual_script/visual_script_property_selector.cpp msgid "Get %s" @@ -11895,7 +11903,7 @@ msgstr "" #: platform/android/export/export.cpp msgid "The package must have at least one '.' separator." -msgstr "" +msgstr "Package setidaknya harus memiliki sebuah pemisah '.'." #: platform/android/export/export.cpp msgid "Select device from the list" @@ -11903,39 +11911,45 @@ msgstr "Pilih perangkat pada daftar" #: platform/android/export/export.cpp msgid "ADB executable not configured in the Editor Settings." -msgstr "" +msgstr "Lokasi executable ADB belum dikonfigurasi dalam Pengaturan Editor." #: platform/android/export/export.cpp msgid "OpenJDK jarsigner not configured in the Editor Settings." -msgstr "" +msgstr "Lokasi jarsigner OpenJDK belum dikonfigurasi dalam Pengaturan Editor." #: platform/android/export/export.cpp msgid "Debug keystore not configured in the Editor Settings nor in the preset." msgstr "" +"Berkas debug keystore belum dikonfigurasi dalam Pengaturan Editor maupun di " +"prasetel proyek." #: platform/android/export/export.cpp msgid "Custom build requires a valid Android SDK path in Editor Settings." msgstr "" +"Membangun kustom APK memerlukan lokasi Android SDK yang valid dalam " +"Pengaturan Editor." #: platform/android/export/export.cpp msgid "Invalid Android SDK path for custom build in Editor Settings." msgstr "" +"Lokasi Android SDK tidak valid untuk membuat kustom APK dalam Pengaturan " +"Editor." #: platform/android/export/export.cpp -#, fuzzy msgid "" "Android build template not installed in the project. Install it from the " "Project menu." -msgstr "Templat build Android tidak ada, harap pasang templat yang relevan." +msgstr "" +"Templat build Android belum terpasang dalam proyek. Pasanglah dari menu " +"Proyek." #: platform/android/export/export.cpp msgid "Invalid public key for APK expansion." msgstr "" #: platform/android/export/export.cpp -#, fuzzy msgid "Invalid package name:" -msgstr "Nama tidak sah." +msgstr "Nama paket tidak valid:" #: platform/android/export/export.cpp msgid "" @@ -11970,18 +11984,16 @@ msgid "Identifier is missing." msgstr "" #: platform/iphone/export/export.cpp -#, fuzzy msgid "The character '%s' is not allowed in Identifier." -msgstr "Nama bukan sebuah pengidentifikasi yang sah:" +msgstr "Karakter '%s' tidak diizinkan dalam Identifier." #: platform/iphone/export/export.cpp msgid "App Store Team ID not specified - cannot configure the project." msgstr "" #: platform/iphone/export/export.cpp -#, fuzzy msgid "Invalid Identifier:" -msgstr "Nama bukan sebuah pengidentifikasi yang sah:" +msgstr "Identifier tidak valid:" #: platform/iphone/export/export.cpp msgid "Required icon is not specified in the preset." @@ -12000,64 +12012,52 @@ msgid "Run exported HTML in the system's default browser." msgstr "" #: platform/javascript/export/export.cpp -#, fuzzy msgid "Could not write file:" -msgstr "Tidak dapat membuat folder." +msgstr "Tidak dapat menulis berkas:" #: platform/javascript/export/export.cpp -#, fuzzy msgid "Could not open template for export:" -msgstr "Tidak dapat membuat folder." +msgstr "Tidak dapat membuka templat untuk ekspor:" #: platform/javascript/export/export.cpp -#, fuzzy msgid "Invalid export template:" -msgstr "Memuat Ekspor Template-template." +msgstr "Templat ekspor tidak valid:" #: platform/javascript/export/export.cpp -#, fuzzy msgid "Could not read custom HTML shell:" -msgstr "Tidak dapat membuat folder." +msgstr "Tidak dapat membaca shell HTML kustom:" #: platform/javascript/export/export.cpp -#, fuzzy msgid "Could not read boot splash image file:" -msgstr "Tidak dapat membuat folder." +msgstr "Tidak dapat membaca berkas citra boot splash:" #: platform/javascript/export/export.cpp -#, fuzzy msgid "Using default boot splash image." -msgstr "Tidak dapat membuat folder." +msgstr "Menggunakan citra boot splash baku." #: platform/uwp/export/export.cpp -#, fuzzy msgid "Invalid package short name." -msgstr "Nama tidak sah." +msgstr "Nama pendek paket tidak valid." #: platform/uwp/export/export.cpp -#, fuzzy msgid "Invalid package unique name." -msgstr "Nama tidak sah." +msgstr "Nama unik paket tidak valid." #: platform/uwp/export/export.cpp -#, fuzzy msgid "Invalid package publisher display name." -msgstr "Nama tidak sah." +msgstr "Nama penerbit paket tidak valid." #: platform/uwp/export/export.cpp -#, fuzzy msgid "Invalid product GUID." -msgstr "Ukuran font tidak sah." +msgstr "GUID produk tidak valid." #: platform/uwp/export/export.cpp -#, fuzzy msgid "Invalid publisher GUID." -msgstr "Ukuran font tidak sah." +msgstr "GUID penerbit tidak valid." #: platform/uwp/export/export.cpp -#, fuzzy msgid "Invalid background color." -msgstr "Nama tidak sah." +msgstr "Warna latar belakang tidak valid." #: platform/uwp/export/export.cpp msgid "Invalid Store Logo image dimensions (should be 50x50)." @@ -12088,13 +12088,12 @@ msgid "Invalid splash screen image dimensions (should be 620x300)." msgstr "" #: scene/2d/animated_sprite.cpp -#, fuzzy msgid "" "A SpriteFrames resource must be created or set in the \"Frames\" property in " "order for AnimatedSprite to display frames." msgstr "" -"Sebuah resource SpriteFrames seharusnya diciptakan atau diatur dalam " -"properti 'Frames' agar AnimatedSprite menampilkan frame-frame." +"Resource SpriteFrames seharusnya diciptakan atau diatur dalam properti " +"'Frames' agar AnimatedSprite menampilkan frame-frame." #: scene/2d/canvas_modulate.cpp msgid "" @@ -12144,8 +12143,8 @@ msgid "" "A shape must be provided for CollisionShape2D to function. Please create a " "shape resource for it!" msgstr "" -"Sebuah bentuk harus disediakan untuk CollisionShape2D untuk fungsi. Mohon " -"ciptakan resource bentuk untuk itu!" +"Sebuah shape harus disediakan untuk CollisionShape2D supaya berfungsi. Mohon " +"ciptakan resource shape untuknya!" #: scene/2d/cpu_particles_2d.cpp msgid "" @@ -12154,12 +12153,11 @@ msgid "" msgstr "" #: scene/2d/light_2d.cpp -#, fuzzy msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " "property." msgstr "" -"Sebuah tekstur dengan bentuk cahaya harus disuplai ke properti 'texture'." +"Sebuah tekstur dengan bentuk cahaya harus disuplai ke properti 'Texture'." #: scene/2d/light_occluder_2d.cpp msgid "" @@ -12169,18 +12167,17 @@ msgstr "" "berpengaruh." #: scene/2d/light_occluder_2d.cpp -#, fuzzy msgid "The occluder polygon for this occluder is empty. Please draw a polygon." msgstr "" -"Polygon occluder untuk occluder ini kosong. Mohon gambar dulu sebuah polygon!" +"Polygon occluder untuk occluder ini kosong. Mohon gambar dulu sebuah poligon." #: scene/2d/navigation_polygon.cpp msgid "" "A NavigationPolygon resource must be set or created for this node to work. " "Please set a property or draw a polygon." msgstr "" -"Sebuah resource NavigationPolygon harus diatur atau diciptakan untuk node " -"ini bekerja. Mohon atur sebuah properti atau gambar sebuah polygon." +"Sebuah resource NavigationPolygon harus diatur atau diciptakan supaya node " +"ini bekerja. Silakan atur sebuah properti atau gambar sebuah polygon." #: scene/2d/navigation_polygon.cpp msgid "" @@ -12248,19 +12245,16 @@ msgid "" msgstr "" #: scene/2d/tile_map.cpp -#, fuzzy msgid "" "TileMap with Use Parent on needs a parent CollisionObject2D to give shapes " "to. Please use it as a child of Area2D, StaticBody2D, RigidBody2D, " "KinematicBody2D, etc. to give them a shape." msgstr "" -"CollisionShape2D hanya berfungsi untuk menyediakan sebuah bentuk collision " -"pada sebuah CollisionObject2D node asal. Mohon hanya gunakan itu sebagai " -"sebuah child dari Area2D, StaticBody2D, RigidBody2D, KinematicBody2D, dll. " -"untuk memberikan mereka sebuah bentuk." +"TileMap dengan Gunakan Induk memerlukan induk CollisionObject2D diberikan " +"shape. Silakan gunakan itu sebagai anak dari Area2D, StaticBody2D, " +"RigidBody2D, KinematicBody2D, dll. untuk memberikan mereka shape." #: scene/2d/visibility_notifier_2d.cpp -#, fuzzy msgid "" "VisibilityEnabler2D works best when used with the edited scene root directly " "as parent." @@ -12354,13 +12348,12 @@ msgstr "" "bentuk." #: scene/3d/collision_shape.cpp -#, fuzzy msgid "" "A shape must be provided for CollisionShape to function. Please create a " "shape resource for it." msgstr "" -"Sebuah bentuk harus disediakan untuk CollisionShape untuk fungsi. Mohon " -"ciptakan sebuah resource bentuk untuk itu!" +"Sebuah shape harus disediakan untuk CollisionShape supaya berfungsi. Silakan " +"buat shape untuknya." #: scene/3d/collision_shape.cpp msgid "" @@ -12395,7 +12388,7 @@ msgstr "" #: scene/3d/navigation_mesh.cpp msgid "A NavigationMesh resource must be set or created for this node to work." msgstr "" -"Sebuah resource NavigationMesh harus diatur atau diciptakan untuk node ini " +"Sebuah resource NavigationMesh harus diatur atau diciptakan supaya node ini " "bekerja." #: scene/3d/navigation_mesh.cpp @@ -12425,17 +12418,18 @@ msgid "" msgstr "" #: scene/3d/path.cpp -#, fuzzy msgid "PathFollow only works when set as a child of a Path node." msgstr "" -"PathFollow2D hanya bekerja ketika diatur sebagai sebuah child dari sebuah " -"node Path2D." +"PathFollow2D hanya bekerja ketika diatur sebagai sebuah anak dari sebuah " +"node Path." #: scene/3d/path.cpp msgid "" "PathFollow's ROTATION_ORIENTED requires \"Up Vector\" to be enabled in its " "parent Path's Curve resource." msgstr "" +"ROTATION_ORIENTED PathFollow membutuhkan \"Up Vector\" yang diaktifkan dalam " +"resource Curve Path induknya." #: scene/3d/physics_body.cpp msgid "" @@ -12465,12 +12459,11 @@ msgid "" msgstr "" #: scene/3d/sprite_3d.cpp -#, fuzzy msgid "" "A SpriteFrames resource must be created or set in the \"Frames\" property in " "order for AnimatedSprite3D to display frames." msgstr "" -"Sebuah resource SpriteFrames harus diciptakan atau diatur didalam properti " +"Sebuah resource SpriteFrames harus diciptakan atau diatur di dalam properti " "'Frames' agar AnimatedSprite3D menampilkan frame-frame." #: scene/3d/vehicle_body.cpp @@ -12484,6 +12477,8 @@ msgid "" "WorldEnvironment requires its \"Environment\" property to contain an " "Environment to have a visible effect." msgstr "" +"WorldEnvironment memerlukan properti \"Environment\" berisikan sebuah " +"Environment agar hasilnya dapat dilihat." #: scene/3d/world_environment.cpp msgid "" @@ -12503,26 +12498,22 @@ msgid "On BlendTree node '%s', animation not found: '%s'" msgstr "Di Node BlendTree '%s', animasi tidak ditemukan: '%s'" #: scene/animation/animation_blend_tree.cpp -#, fuzzy msgid "Animation not found: '%s'" -msgstr "Perkakas Animasi" +msgstr "Animasi tidak ditemukan: '%s'" #: scene/animation/animation_tree.cpp msgid "In node '%s', invalid animation: '%s'." msgstr "Di node '%s', animasi tidak valid: '%s'." #: scene/animation/animation_tree.cpp -#, fuzzy msgid "Invalid animation: '%s'." -msgstr "KESALAHAN: Nama animasi tidak valid!" +msgstr "Animasi tidak valid: '%s'." #: scene/animation/animation_tree.cpp -#, fuzzy msgid "Nothing connected to input '%s' of node '%s'." -msgstr "Memutuskan '%s' dari '%s'" +msgstr "Tidak ada yang terhubung ke input '%s' dari node '%s'." #: scene/animation/animation_tree.cpp -#, fuzzy msgid "No root AnimationNode for the graph is set." msgstr "Akar AnimationNode untuk grafik belum diatur." @@ -12538,7 +12529,6 @@ msgstr "" "AnimationPlayer." #: scene/animation/animation_tree.cpp -#, fuzzy msgid "The AnimationPlayer root node is not a valid node." msgstr "Akar AnimationPlayer bukanlah node yang valid." @@ -12554,30 +12544,26 @@ msgid "" msgstr "" #: scene/gui/color_picker.cpp -#, fuzzy msgid "Pick a color from the editor window." -msgstr "Ambil warna dari layar." +msgstr "Ambil warna dari layar editor." #: scene/gui/color_picker.cpp msgid "HSV" -msgstr "" +msgstr "HSV" #: scene/gui/color_picker.cpp -#, fuzzy msgid "Raw" -msgstr "Mentah" +msgstr "Raw (%)" #: scene/gui/color_picker.cpp msgid "Switch between hexadecimal and code values." msgstr "Beralih antara nilai heksadesimal dan kode." #: scene/gui/color_picker.cpp -#, fuzzy msgid "Add current color as a preset." -msgstr "Tambahkan warna yang sekarang sebagai preset" +msgstr "Tambahkan warna yang sekarang sebagai preset." #: scene/gui/container.cpp -#, fuzzy msgid "" "Container by itself serves no purpose unless a script configures its " "children placement behavior.\n" @@ -12593,6 +12579,9 @@ msgid "" "The Hint Tooltip won't be displayed as the control's Mouse Filter is set to " "\"Ignore\". To solve this, set the Mouse Filter to \"Stop\" or \"Pass\"." msgstr "" +"Tips Petunjuk tidak akan ditampilkan karena Filter Tetikus kontrolnya diatur " +"ke \"Abaikan/Ignore\". Untuk mengatasinya, setel Filter Tetikus ke \"Stop\" " +"atau \"Pass\"." #: scene/gui/dialogs.cpp msgid "Alert!" @@ -12603,24 +12592,23 @@ msgid "Please Confirm..." msgstr "Mohon konfirmasi..." #: scene/gui/popup.cpp -#, fuzzy msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " "functions. Making them visible for editing is fine, but they will hide upon " "running." msgstr "" -"Popup-popup akan disembunyikan secara default kecuali anda memanggil fungsi " +"Popup akan disembunyikan secara default kecuali anda memanggil fungsi " "popup() atau salah satu dari semua fungsi popup*() yang ada. Membuat mereka " -"terlihat saat mengedit bisa dilakukan, namun mereka akan disembunyikan saat " -"game dijalankan." +"terlihat saat mengedit bisa dilakukan, namun mereka akan disembunyikan saat " +"gim dijalankan." #: scene/gui/range.cpp -#, fuzzy msgid "If \"Exp Edit\" is enabled, \"Min Value\" must be greater than 0." -msgstr "jika exp_edit adalah true min_value seharusnya > 0." +msgstr "" +"Jika \"Exp Edit\" diaktifkan, \"Nilai Minimal\" seharusnya lebih besar dari " +"0." #: scene/gui/scroll_container.cpp -#, fuzzy msgid "" "ScrollContainer is intended to work with a single child control.\n" "Use a container as child (VBox, HBox, etc.), or a Control and set the custom " @@ -12683,6 +12671,15 @@ msgstr "Variasi hanya bisa ditetapkan dalam fungsi vertex." msgid "Constants cannot be modified." msgstr "Konstanta tidak dapat dimodifikasi." +#~ msgid "Replaced %d occurrence(s)." +#~ msgstr "kejadian %d diganti." + +#~ msgid "Create Static Convex Body" +#~ msgstr "Buat Bodi Cembung Statis" + +#~ msgid "Failed creating shapes!" +#~ msgstr "Gagal membuat bentuk!" + #~ msgid "" #~ "There are currently no tutorials for this class, you can [color=$color]" #~ "[url=$url]contribute one[/url][/color] or [color=$color][url=" diff --git a/editor/translations/is.po b/editor/translations/is.po index 7a2250c0b2..7f0ab2f719 100644 --- a/editor/translations/is.po +++ b/editor/translations/is.po @@ -699,7 +699,7 @@ msgid "Line Number:" msgstr "" #: editor/code_editor.cpp -msgid "Replaced %d occurrence(s)." +msgid "%d replaced." msgstr "" #: editor/code_editor.cpp editor/editor_help.cpp @@ -3850,15 +3850,15 @@ msgid "Saving..." msgstr "" #: editor/import_dock.cpp -msgid "Set as Default for '%s'" +msgid "%d Files" msgstr "" #: editor/import_dock.cpp -msgid "Clear Default for '%s'" +msgid "Set as Default for '%s'" msgstr "" #: editor/import_dock.cpp -msgid " Files" +msgid "Clear Default for '%s'" msgstr "" #: editor/import_dock.cpp @@ -5710,11 +5710,11 @@ msgid "Mesh is empty!" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Trimesh Body" +msgid "Couldn't create a Trimesh collision shape." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Convex Body" +msgid "Create Static Trimesh Body" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -5726,11 +5726,27 @@ msgid "Create Trimesh Static Shape" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Failed creating shapes!" +msgid "Can't create a single convex collision shape for the scene root." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Couldn't create a single convex collision shape." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Convex Shape(s)" +msgid "Create Single Convex Shape" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Can't create multiple convex collision shapes for the scene root." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Couldn't create any collision shapes." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Multiple Convex Shapes" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -5782,19 +5798,57 @@ msgid "Create Trimesh Static Body" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a StaticBody and assigns a polygon-based collision shape to it " +"automatically.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Collision Sibling" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a polygon-based collision shape.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp #, fuzzy -msgid "Create Convex Collision Sibling(s)" +msgid "Create Single Convex Collision Siblings" msgstr "Breyta Viðbót" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a single convex collision shape.\n" +"This is the fastest (but least accurate) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Create Multiple Convex Collision Siblings" +msgstr "Breyta Viðbót" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a polygon-based collision shape.\n" +"This is a performance middle-ground between the two above options." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Outline Mesh..." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a static outline mesh. The outline mesh will have its normals " +"flipped automatically.\n" +"This can be used instead of the SpatialMaterial Grow property when using " +"that property isn't possible." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "View UV1" msgstr "" @@ -8191,7 +8245,7 @@ msgstr "" msgid "No VCS addons are available." msgstr "" -#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Error" msgstr "" @@ -9286,11 +9340,16 @@ msgid "Export With Debug" msgstr "" #: editor/project_manager.cpp -msgid "The path does not exist." +msgid "The path specified doesn't exist." +msgstr "" + +#: editor/project_manager.cpp +msgid "Error opening package file (it's not in ZIP format)." msgstr "" #: editor/project_manager.cpp -msgid "Invalid '.zip' project file, does not contain a 'project.godot' file." +msgid "" +"Invalid \".zip\" project file; it doesn't contain a \"project.godot\" file." msgstr "" #: editor/project_manager.cpp @@ -9298,11 +9357,11 @@ msgid "Please choose an empty folder." msgstr "" #: editor/project_manager.cpp -msgid "Please choose a 'project.godot' or '.zip' file." +msgid "Please choose a \"project.godot\" or \".zip\" file." msgstr "" #: editor/project_manager.cpp -msgid "Directory already contains a Godot project." +msgid "This directory already contains a Godot project." msgstr "" #: editor/project_manager.cpp @@ -9955,6 +10014,10 @@ msgid "Suffix" msgstr "" #: editor/rename_dialog.cpp +msgid "Use Regular Expressions" +msgstr "" + +#: editor/rename_dialog.cpp msgid "Advanced Options" msgstr "" @@ -9989,7 +10052,7 @@ msgid "" msgstr "" #: editor/rename_dialog.cpp -msgid "Per Level counter" +msgid "Per-level Counter" msgstr "" #: editor/rename_dialog.cpp @@ -10019,10 +10082,6 @@ msgid "" msgstr "" #: editor/rename_dialog.cpp -msgid "Regular Expressions" -msgstr "" - -#: editor/rename_dialog.cpp msgid "Post-Process" msgstr "" @@ -10031,11 +10090,11 @@ msgid "Keep" msgstr "" #: editor/rename_dialog.cpp -msgid "CamelCase to under_scored" +msgid "PascalCase to snake_case" msgstr "" #: editor/rename_dialog.cpp -msgid "under_scored to CamelCase" +msgid "snake_case to PascalCase" msgstr "" #: editor/rename_dialog.cpp @@ -10054,6 +10113,14 @@ msgstr "" msgid "Reset" msgstr "" +#: editor/rename_dialog.cpp +msgid "Regular Expression Error" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "At character %s" +msgstr "" + #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "" @@ -10497,7 +10564,7 @@ msgid "Invalid inherited parent name or path." msgstr "" #: editor/script_create_dialog.cpp -msgid "Script is valid." +msgid "Script path/name is valid." msgstr "" #: editor/script_create_dialog.cpp @@ -10589,6 +10656,10 @@ msgid "Copy Error" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Video RAM" +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Skip Breakpoints" msgstr "" @@ -10637,10 +10708,6 @@ msgid "Total:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Video Mem" -msgstr "" - -#: editor/script_editor_debugger.cpp msgid "Resource Path" msgstr "" diff --git a/editor/translations/it.po b/editor/translations/it.po index a549df218c..77956e9233 100644 --- a/editor/translations/it.po +++ b/editor/translations/it.po @@ -43,12 +43,13 @@ # Katia Piazza <gydey@ridiculousglitch.com>, 2019. # nickfla1 <lanterniniflavio@gmail.com>, 2019. # Fabio Iotti <fabiogiopla@gmail.com>, 2020. +# Douglas Fiedler <dognew@gmail.com>, 2020. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2020-01-27 07:09+0000\n" -"Last-Translator: Micila Micillotto <micillotto@gmail.com>\n" +"PO-Revision-Date: 2020-02-18 15:09+0000\n" +"Last-Translator: Douglas Fiedler <dognew@gmail.com>\n" "Language-Team: Italian <https://hosted.weblate.org/projects/godot-engine/" "godot/it/>\n" "Language: it\n" @@ -56,7 +57,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 3.11-dev\n" +"X-Generator: Weblate 3.11\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -726,8 +727,8 @@ msgid "Line Number:" msgstr "Numero linea:" #: editor/code_editor.cpp -msgid "Replaced %d occurrence(s)." -msgstr "Rimpiazzate %d occorrenze." +msgid "%d replaced." +msgstr "%d rimpiazzato." #: editor/code_editor.cpp editor/editor_help.cpp msgid "%d match." @@ -4014,6 +4015,10 @@ msgid "Saving..." msgstr "Salvataggio..." #: editor/import_dock.cpp +msgid "%d Files" +msgstr "%d File" + +#: editor/import_dock.cpp msgid "Set as Default for '%s'" msgstr "Imposta come Default per '%s'" @@ -4022,10 +4027,6 @@ msgid "Clear Default for '%s'" msgstr "Elimina Default per '%s'" #: editor/import_dock.cpp -msgid " Files" -msgstr " Files" - -#: editor/import_dock.cpp msgid "Import As:" msgstr "Importa Come:" @@ -5905,12 +5906,12 @@ msgid "Mesh is empty!" msgstr "La mesh è vuota!" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Trimesh Body" -msgstr "Crea Corpo Trimesh Statico" +msgid "Couldn't create a Trimesh collision shape." +msgstr "Non poteva creare una forma di collisione Trimesh." #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Convex Body" -msgstr "Crea Corpo Convesso Statico" +msgid "Create Static Trimesh Body" +msgstr "Crea Corpo Trimesh Statico" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "This doesn't work on scene root!" @@ -5921,11 +5922,30 @@ msgid "Create Trimesh Static Shape" msgstr "Crea Forma Statica Trimesh" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Failed creating shapes!" -msgstr "Errore nella creazione delle forme!" +msgid "Can't create a single convex collision shape for the scene root." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Couldn't create a single convex collision shape." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Create Single Convex Shape" +msgstr "Crea una o più forme Convesse" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Can't create multiple convex collision shapes for the scene root." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Couldn't create any collision shapes." +msgstr "Impossibile creare la cartella." #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Convex Shape(s)" +#, fuzzy +msgid "Create Multiple Convex Shapes" msgstr "Crea una o più forme Convesse" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -5978,18 +5998,57 @@ msgid "Create Trimesh Static Body" msgstr "Crea Corpo Statico Trimesh" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a StaticBody and assigns a polygon-based collision shape to it " +"automatically.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Collision Sibling" msgstr "Crea Fratello di Collisione Trimesh" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Convex Collision Sibling(s)" +msgid "" +"Creates a polygon-based collision shape.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Create Single Convex Collision Siblings" +msgstr "Crea Fratello(i) di Collisione Convessa" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a single convex collision shape.\n" +"This is the fastest (but least accurate) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Create Multiple Convex Collision Siblings" msgstr "Crea Fratello(i) di Collisione Convessa" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a polygon-based collision shape.\n" +"This is a performance middle-ground between the two above options." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Outline Mesh..." msgstr "Crea Mesh di Outline..." #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a static outline mesh. The outline mesh will have its normals " +"flipped automatically.\n" +"This can be used instead of the SpatialMaterial Grow property when using " +"that property isn't possible." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "View UV1" msgstr "Vista UV1" @@ -7178,7 +7237,7 @@ msgstr "Scalatura: " #: editor/plugins/spatial_editor_plugin.cpp msgid "Translating: " -msgstr "Traducendo: " +msgstr "Spostamento: " #: editor/plugins/spatial_editor_plugin.cpp msgid "Rotating %s degrees." @@ -8408,7 +8467,7 @@ msgstr "TileSet" msgid "No VCS addons are available." msgstr "Non sono disponibili addons VCS." -#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Error" msgstr "Errore" @@ -9577,11 +9636,19 @@ msgid "Export With Debug" msgstr "Esporta Con Debug" #: editor/project_manager.cpp -msgid "The path does not exist." +#, fuzzy +msgid "The path specified doesn't exist." msgstr "Percorso non esistente." #: editor/project_manager.cpp -msgid "Invalid '.zip' project file, does not contain a 'project.godot' file." +#, fuzzy +msgid "Error opening package file (it's not in ZIP format)." +msgstr "Errore nell'apertura del file package: non è in formato ZIP." + +#: editor/project_manager.cpp +#, fuzzy +msgid "" +"Invalid \".zip\" project file; it doesn't contain a \"project.godot\" file." msgstr "" "File di progetto '.zip' non valido, non contiene un file 'project.godot'." @@ -9590,11 +9657,13 @@ msgid "Please choose an empty folder." msgstr "Si prega di scegliere una cartella vuota." #: editor/project_manager.cpp -msgid "Please choose a 'project.godot' or '.zip' file." +#, fuzzy +msgid "Please choose a \"project.godot\" or \".zip\" file." msgstr "Si prega di scegliere un file 'project.godot' o '.zip'." #: editor/project_manager.cpp -msgid "Directory already contains a Godot project." +#, fuzzy +msgid "This directory already contains a Godot project." msgstr "La Cartella contiene già un progetto di Godot." #: editor/project_manager.cpp @@ -10294,6 +10363,11 @@ msgid "Suffix" msgstr "Suffisso" #: editor/rename_dialog.cpp +#, fuzzy +msgid "Use Regular Expressions" +msgstr "Espressioni Regolari" + +#: editor/rename_dialog.cpp msgid "Advanced Options" msgstr "Opzioni avanzate" @@ -10330,7 +10404,8 @@ msgstr "" "Confronta le opzioni del contatore." #: editor/rename_dialog.cpp -msgid "Per Level counter" +#, fuzzy +msgid "Per-level Counter" msgstr "Contatore per Livello" #: editor/rename_dialog.cpp @@ -10362,10 +10437,6 @@ msgstr "" "La cifre mancanti vengono riempite con zeri iniziali." #: editor/rename_dialog.cpp -msgid "Regular Expressions" -msgstr "Espressioni Regolari" - -#: editor/rename_dialog.cpp msgid "Post-Process" msgstr "Post-Processo" @@ -10374,11 +10445,13 @@ msgid "Keep" msgstr "Mantieni" #: editor/rename_dialog.cpp -msgid "CamelCase to under_scored" +#, fuzzy +msgid "PascalCase to snake_case" msgstr "CamelCase a under_score" #: editor/rename_dialog.cpp -msgid "under_scored to CamelCase" +#, fuzzy +msgid "snake_case to PascalCase" msgstr "under_score a CamelCase" #: editor/rename_dialog.cpp @@ -10397,6 +10470,16 @@ msgstr "In Maiuscolo" msgid "Reset" msgstr "Reset" +#: editor/rename_dialog.cpp +#, fuzzy +msgid "Regular Expression Error" +msgstr "Espressioni Regolari" + +#: editor/rename_dialog.cpp +#, fuzzy +msgid "At character %s" +msgstr "Caratteri validi:" + #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "Reparent Nodo" @@ -10861,7 +10944,8 @@ msgid "Invalid inherited parent name or path." msgstr "Nome o percorso genitore ereditato non valido." #: editor/script_create_dialog.cpp -msgid "Script is valid." +#, fuzzy +msgid "Script path/name is valid." msgstr "Lo script è valido." #: editor/script_create_dialog.cpp @@ -10953,6 +11037,11 @@ msgid "Copy Error" msgstr "Errore di Copia" #: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Video RAM" +msgstr "Mem Video" + +#: editor/script_editor_debugger.cpp msgid "Skip Breakpoints" msgstr "Salta Punti di rottura" @@ -11001,10 +11090,6 @@ msgid "Total:" msgstr "Totale:" #: editor/script_editor_debugger.cpp -msgid "Video Mem" -msgstr "Mem Video" - -#: editor/script_editor_debugger.cpp msgid "Resource Path" msgstr "Percorso Risorsa" @@ -12707,6 +12792,15 @@ msgstr "Varyings può essere assegnato soltanto nella funzione del vertice." msgid "Constants cannot be modified." msgstr "Le constanti non possono essere modificate." +#~ msgid "Replaced %d occurrence(s)." +#~ msgstr "Rimpiazzate %d occorrenze." + +#~ msgid "Create Static Convex Body" +#~ msgstr "Crea Corpo Convesso Statico" + +#~ msgid "Failed creating shapes!" +#~ msgstr "Errore nella creazione delle forme!" + #~ msgid "" #~ "There are currently no tutorials for this class, you can [color=$color]" #~ "[url=$url]contribute one[/url][/color] or [color=$color][url=" diff --git a/editor/translations/ja.po b/editor/translations/ja.po index af2cca2ca6..c0298bb075 100644 --- a/editor/translations/ja.po +++ b/editor/translations/ja.po @@ -35,8 +35,8 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2020-01-27 07:09+0000\n" -"Last-Translator: Wataru Onuki <bettawat@yahoo.co.jp>\n" +"PO-Revision-Date: 2020-02-16 15:20+0000\n" +"Last-Translator: Akihiro Ogoshi <technical@palsystem-game.com>\n" "Language-Team: Japanese <https://hosted.weblate.org/projects/godot-engine/" "godot/ja/>\n" "Language: ja\n" @@ -59,7 +59,7 @@ msgstr "長さが1の文字列(文字)を予期しました。" #: modules/mono/glue/gd_glue.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." -msgstr "デコードバイトのバイトは足りません、または無効な形式です。" +msgstr "デコードするにはバイトが足りないか、または無効な形式です。" #: core/math/expression.cpp msgid "Invalid input %i (not passed) in expression" @@ -464,7 +464,7 @@ msgstr "トラックが spatial 型ではないため、キーを挿入できま #: editor/animation_track_editor.cpp msgid "Add Transform Track Key" -msgstr "変換トラックキーを追加" +msgstr "トランスフォーム トラック キーを追加" #: editor/animation_track_editor.cpp msgid "Add Track Key" @@ -716,8 +716,8 @@ msgid "Line Number:" msgstr "行番号:" #: editor/code_editor.cpp -msgid "Replaced %d occurrence(s)." -msgstr "%d 箇所を置換しました。" +msgid "%d replaced." +msgstr "%d を置換しました。" #: editor/code_editor.cpp editor/editor_help.cpp msgid "%d match." @@ -1670,11 +1670,11 @@ msgstr "(エディタ無効、プロパティ無効)" #: editor/editor_feature_profile.cpp msgid "(Properties Disabled)" -msgstr "(プロパティ無効)" +msgstr "(プロパティ無効)" #: editor/editor_feature_profile.cpp msgid "(Editor Disabled)" -msgstr "(エディタ無効)" +msgstr "(エディタ無効)" #: editor/editor_feature_profile.cpp msgid "Class Options:" @@ -2203,7 +2203,7 @@ msgstr "書込むファイルを開けません:" #: editor/editor_node.cpp msgid "Requested file format unknown:" -msgstr "ファイル形式が不明:" +msgstr "要求されたファイル形式は不明です:" #: editor/editor_node.cpp msgid "Error while saving." @@ -3975,6 +3975,11 @@ msgid "Saving..." msgstr "保存中..." #: editor/import_dock.cpp +#, fuzzy +msgid "%d Files" +msgstr " ファイル" + +#: editor/import_dock.cpp msgid "Set as Default for '%s'" msgstr "'%s' のデフォルトとして設定" @@ -3983,10 +3988,6 @@ msgid "Clear Default for '%s'" msgstr "'%s' のデフォルトをクリア" #: editor/import_dock.cpp -msgid " Files" -msgstr " ファイル" - -#: editor/import_dock.cpp msgid "Import As:" msgstr "名前を付けてインポート:" @@ -4291,7 +4292,7 @@ msgstr "BlendSpace2Dのポイントを削除する" #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Remove BlendSpace2D Triangle" -msgstr "BlendSpace2D三角形を削除する" +msgstr "BlendSpace2Dの三角形を削除する" #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "BlendSpace2D does not belong to an AnimationTree node." @@ -4578,7 +4579,7 @@ msgstr "未来" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Depth" -msgstr "深度" +msgstr "Depth(深度/奥行)" #: editor/plugins/animation_player_editor_plugin.cpp msgid "1 step" @@ -5065,7 +5066,7 @@ msgstr "公式" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Testing" -msgstr "テスト中" +msgstr "テストする" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Loading..." @@ -5607,9 +5608,8 @@ msgid "Auto Insert Key" msgstr "自動キー挿入" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Animation Key and Pose Options" -msgstr "アニメーションキーが挿入されました。" +msgstr "アニメーションキーとポーズのオプション" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Insert Key (Existing Tracks)" @@ -5827,7 +5827,7 @@ msgstr "右クリックで点を追加" #: editor/plugins/gi_probe_editor_plugin.cpp msgid "Bake GI Probe" -msgstr "グローバルイルミネーションの事前計算" +msgstr "GIプローブの焼き込み" #: editor/plugins/gradient_editor_plugin.cpp msgid "Gradient Edited" @@ -5854,28 +5854,46 @@ msgid "Mesh is empty!" msgstr "メッシュがありません!" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Trimesh Body" -msgstr "三角形メッシュ静的ボディを作成" +msgid "Couldn't create a Trimesh collision shape." +msgstr "トライメッシュコリジョンシェイプを作成できませんでした。" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Convex Body" -msgstr "静的凸状ボディを生成" +msgid "Create Static Trimesh Body" +msgstr "三角形メッシュ静的ボディを作成" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "This doesn't work on scene root!" -msgstr "シーンのルートでは無効です!" +msgstr "これはシーンのルートでは機能しません!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Static Shape" msgstr "三角形メッシュ静的シェイプを生成" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Failed creating shapes!" -msgstr "図形の作成に失敗しました!" +msgid "Can't create a single convex collision shape for the scene root." +msgstr "" +"シーンのルートに単一の凸型のコリジョンシェイプを作成することはできません。" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Couldn't create a single convex collision shape." +msgstr "単一の凸型コリジョンシェイプを作成できませんでした。" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Single Convex Shape" +msgstr "単一の凸型シェイプを作成する" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Can't create multiple convex collision shapes for the scene root." +msgstr "" +"シーンのルートに複数の凸型コリジョンシェイプを作成することはできません。" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Convex Shape(s)" -msgstr "凸状シェイプを作成" +msgid "Couldn't create any collision shapes." +msgstr "コリジョンシェイプを作成できませんでした。" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Multiple Convex Shapes" +msgstr "複数の凸型シェイプを作成する" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Navigation Mesh" @@ -5899,7 +5917,7 @@ msgstr "モデルにはこのレイヤーにUVがありません" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "MeshInstance lacks a Mesh!" -msgstr "メッシュインスタンスにメッシュが不足しています!" +msgstr "MeshInstanceにメッシュがありません!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Mesh has not surface to create outlines from!" @@ -5926,18 +5944,68 @@ msgid "Create Trimesh Static Body" msgstr "三角形メッシュ静的ボディを作成" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a StaticBody and assigns a polygon-based collision shape to it " +"automatically.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" +"StaticBodyを作成し、ポリゴンベースのコリジョンシェイプを自動的に割り当てま" +"す。\n" +"これは、衝突検出の最も正確な(ただし最も遅い)オプションです。" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Collision Sibling" msgstr "三角形メッシュ兄弟コリジョンを生成" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Convex Collision Sibling(s)" -msgstr "凸型兄弟関係コリジョンを生成" +msgid "" +"Creates a polygon-based collision shape.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" +"ポリゴンベースのコリジョンシェイプを作成します。\n" +"これは、衝突検出の最も正確な(ただし最も遅い)オプションです。" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Single Convex Collision Siblings" +msgstr "単一の凸型コリジョンの兄弟を作成" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a single convex collision shape.\n" +"This is the fastest (but least accurate) option for collision detection." +msgstr "" +"単一の凸型コリジョンシェイプを作成します。\n" +"これは、衝突検出の最速の(ただし精度が最も低い)オプションです。" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Multiple Convex Collision Siblings" +msgstr "複数の凸型コリジョンの兄弟を作成する" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a polygon-based collision shape.\n" +"This is a performance middle-ground between the two above options." +msgstr "" +"ポリゴンベースのコリジョンシェイプを作成します。\n" +"これは、上記の2つのオプションの中間的なパフォーマンスです。" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Outline Mesh..." msgstr "アウトラインメッシュを生成..." #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a static outline mesh. The outline mesh will have its normals " +"flipped automatically.\n" +"This can be used instead of the SpatialMaterial Grow property when using " +"that property isn't possible." +msgstr "" +"静的なアウトラインメッシュを作成します。アウトラインメッシュの法線は自動的に" +"反転します。\n" +"このプロパティを使用できない場合は、SpatialMaterialのGrowプロパティを代わりに" +"使用できます。" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "View UV1" msgstr "UV1を表示" @@ -6171,11 +6239,11 @@ msgstr "AABBを生成中" #: editor/plugins/particles_editor_plugin.cpp msgid "Generate Visibility AABB" -msgstr "軸平行境界ボックスの可視性を生成する" +msgstr "可視性のAABBを生成" #: editor/plugins/particles_editor_plugin.cpp msgid "Generate AABB" -msgstr "軸平行境界ボックス(AABB)を生成" +msgstr "AABBを生成" #: editor/plugins/path_2d_editor_plugin.cpp msgid "Remove Point from Curve" @@ -6278,14 +6346,12 @@ msgid "Set Curve Point Position" msgstr "カーブポイントの位置を設定" #: editor/plugins/path_editor_plugin.cpp -#, fuzzy msgid "Set Curve In Position" -msgstr "曲線の位置を設定" +msgstr "曲線のIn-Controlの位置を指定" #: editor/plugins/path_editor_plugin.cpp -#, fuzzy msgid "Set Curve Out Position" -msgstr "曲線のOut-ハンドルの位置を指定" +msgstr "曲線のOut-Controlの位置を指定" #: editor/plugins/path_editor_plugin.cpp msgid "Split Path" @@ -6554,7 +6620,7 @@ msgstr "リソースを読み込む" #: editor/plugins/resource_preloader_editor_plugin.cpp msgid "ResourcePreloader" -msgstr "リソースプリローダー" +msgstr "ResourcePreloader" #: editor/plugins/root_motion_editor_plugin.cpp msgid "AnimationTree has no path set to an AnimationPlayer" @@ -6959,11 +7025,11 @@ msgstr "行を折りたたむ/展開する" #: editor/plugins/script_text_editor.cpp msgid "Fold All Lines" -msgstr "すべての行を折りたたむ" +msgstr "全ての行を折りたたむ" #: editor/plugins/script_text_editor.cpp msgid "Unfold All Lines" -msgstr "すべての行を展開する" +msgstr "全ての行を展開する" #: editor/plugins/script_text_editor.cpp msgid "Clone Down" @@ -7068,7 +7134,7 @@ msgstr "ボーンへレスト・ポーズを設定する" #: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Skeleton2D" -msgstr "スケルトン2D" +msgstr "Skeleton2D" #: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Make Rest Pose (From Bones)" @@ -7104,7 +7170,7 @@ msgstr "透視投影" #: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Aborted." -msgstr "変換は中止されました." +msgstr "トランスフォームは中止されました。" #: editor/plugins/spatial_editor_plugin.cpp msgid "X-Axis Transform." @@ -7220,7 +7286,7 @@ msgstr "後面" #: editor/plugins/spatial_editor_plugin.cpp msgid "Align Transform with View" -msgstr "変換をビューに合わせる" +msgstr "トランスフォームをビューに合わせる" #: editor/plugins/spatial_editor_plugin.cpp msgid "Align Rotation with View" @@ -7228,7 +7294,7 @@ msgstr "回転をビューに合わせる" #: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "No parent to instance a child at." -msgstr "子インスタンスを生成するための親が見つかりません。" +msgstr "子をインスタンス化するための親が見つかりません。" #: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "This operation requires a single selected node." @@ -7248,7 +7314,7 @@ msgstr "ワイヤーフレーム表示" #: editor/plugins/spatial_editor_plugin.cpp msgid "Display Overdraw" -msgstr "オーバードローを表示" +msgstr "オーバードロー表示" #: editor/plugins/spatial_editor_plugin.cpp msgid "Display Unshaded" @@ -7319,9 +7385,8 @@ msgid "Freelook Speed Modifier" msgstr "フリールックの速度を調整" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Freelook Slow Modifier" -msgstr "フリールックの速度を調整" +msgstr "フリールックの減速を調整" #: editor/plugins/spatial_editor_plugin.cpp msgid "" @@ -7341,7 +7406,7 @@ msgstr "Xformダイアログ" #: editor/plugins/spatial_editor_plugin.cpp msgid "Snap Nodes To Floor" -msgstr "ノードを底面にスナップさせる" +msgstr "ノードをフロアにスナップ" #: editor/plugins/spatial_editor_plugin.cpp msgid "Couldn't find a solid floor to snap the selection to." @@ -7358,9 +7423,8 @@ msgstr "" "Alt+右クリック: 奥行きリストの選択" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Use Local Space" -msgstr "ローカル空間モード (%s)" +msgstr "ローカル空間を使用" #: editor/plugins/spatial_editor_plugin.cpp msgid "Use Snap" @@ -7413,15 +7477,15 @@ msgstr "フリールックの切り替え" #: editor/plugins/spatial_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Transform" -msgstr "幾何学変換(変形)" +msgstr "トランスフォーム" #: editor/plugins/spatial_editor_plugin.cpp msgid "Snap Object to Floor" -msgstr "オブジェクトを底面にスナップ" +msgstr "オブジェクトをフロアにスナップ" #: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Dialog..." -msgstr "変換のダイアログ..." +msgstr "トランスフォームのダイアログ..." #: editor/plugins/spatial_editor_plugin.cpp msgid "1 Viewport" @@ -7514,7 +7578,7 @@ msgstr "縮尺(比):" #: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Type" -msgstr "変換タイプ" +msgstr "トランスフォーム タイプ" #: editor/plugins/spatial_editor_plugin.cpp msgid "Pre" @@ -7850,14 +7914,12 @@ msgid "Checked Item" msgstr "チェック済みアイテム" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Radio Item" -msgstr "アイテムを追加" +msgstr "ラジオ アイテム" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Checked Radio Item" -msgstr "チェック済みアイテム" +msgstr "チェック済みラジオ アイテム" #: editor/plugins/theme_editor_plugin.cpp msgid "Named Sep." @@ -7908,9 +7970,8 @@ msgid "Subtree" msgstr "サブツリー" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Has,Many,Options" -msgstr "オプション" +msgstr "ありますよ,たくさん,オプション" #: editor/plugins/theme_editor_plugin.cpp msgid "Data Type:" @@ -8030,7 +8091,7 @@ msgstr "上下反転" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Clear Transform" -msgstr "変換をクリア" +msgstr "トランスフォームをクリア" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Add Texture(s) to TileSet." @@ -8158,7 +8219,7 @@ msgstr "新規ポリゴンを生成。" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." -msgstr "領域Rect内にポリゴンを保持します。" +msgstr "領域Rect内のポリゴンを保持します。" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Enable snap and show grid (configurable via the Inspector)." @@ -8207,8 +8268,8 @@ msgid "" "Drag handles to edit Rect.\n" "Click on another Tile to edit it." msgstr "" -"四角形を編集するためハンドルをドラッグします。編集のため別のタイルをクリック" -"します。" +"ハンドルをドラッグして矩形を編集します。\n" +"別のタイルをクリックしてそれを編集します。" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Delete selected Rect." @@ -8220,7 +8281,7 @@ msgid "" "Click on another Tile to edit it." msgstr "" "現在編集中のサブタイルを選択します。\n" -"別のタイルをクリックして編集します。" +"別のタイルをクリックしてそれを編集します。" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Delete polygon." @@ -8233,10 +8294,10 @@ msgid "" "Shift+LMB: Set wildcard bit.\n" "Click on another Tile to edit it." msgstr "" -"左クリック:ビットをオンに設定します。\n" +"左クリック:ビットをオンにします。\n" "右クリック:ビットをオフにします。\n" "Shift+左クリック:ワイルドカード・ビットを設定します。\n" -"別のタイルをクリックして編集します。" +"別のタイルをクリックしてそれを編集します。" #: editor/plugins/tile_set_editor_plugin.cpp msgid "" @@ -8261,8 +8322,8 @@ msgid "" "Select sub-tile to change its z index.\n" "Click on another Tile to edit it." msgstr "" -"Zインデックスを変更するには、サブタイルを選択します。\n" -"別のタイルをクリックして編集します。" +"サブタイルを選択して、zインデックスを変更します。\n" +"別のタイルをクリックしてそれを編集します。" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Set Tile Region" @@ -8333,14 +8394,12 @@ msgid "Edit Tile Z Index" msgstr "タイルのZインデックスを編集" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Make Convex" -msgstr "ポリゴンを凸面にする" +msgstr "凸面を作る" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Make Concave" -msgstr "ポリゴンを凹面にする" +msgstr "凹面を作る" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Create Collision Polygon" @@ -8362,7 +8421,7 @@ msgstr "タイルセット" msgid "No VCS addons are available." msgstr "VCSアドオンは利用できません。" -#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Error" msgstr "エラー" @@ -8420,20 +8479,19 @@ msgstr "タイプの変更" #: editor/plugins/version_control_editor_plugin.cpp msgid "Stage Selected" -msgstr "選択されたものを公開する" +msgstr "選択物をステージする" #: editor/plugins/version_control_editor_plugin.cpp msgid "Stage All" -msgstr "すべてを公開する" +msgstr "すべてをステージする" #: editor/plugins/version_control_editor_plugin.cpp msgid "Add a commit message" msgstr "コミットメッセージを追加する" #: editor/plugins/version_control_editor_plugin.cpp -#, fuzzy msgid "Commit Changes" -msgstr "スクリプトの変更を同期" +msgstr "変更をコミットする" #: editor/plugins/version_control_editor_plugin.cpp #: modules/gdnative/gdnative_library_singleton_editor.cpp @@ -8462,19 +8520,19 @@ msgstr "出力を追加" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Scalar" -msgstr "スカラー" +msgstr "スカラー(Scaler)" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Vector" -msgstr "ベクター(Vector)" +msgstr "ベクトル(Vector)" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Boolean" -msgstr "ブール" +msgstr "ブール(Boolean)" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Sampler" -msgstr "サンプラー" +msgstr "サンプラー(Sampler)" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Add input port" @@ -8514,7 +8572,7 @@ msgstr "式の設定" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Resize VisualShader node" -msgstr "ビジュアルシェーダーノードのサイズを変更する" +msgstr "VisualShaderノードのサイズを変更" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Set Uniform Name" @@ -8554,9 +8612,8 @@ msgid "Fragment" msgstr "フラグメント" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Light" -msgstr "右側面" +msgstr "ライト" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Show resulted shader code." @@ -8568,7 +8625,7 @@ msgstr "シェーダーノードの作成" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Color function." -msgstr "カラー関数。" +msgstr "Color関数。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Color operator." @@ -8628,12 +8685,11 @@ msgstr "SoftLight演算子。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Color constant." -msgstr "カラー定数。" +msgstr "Color定数。" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Color uniform." -msgstr "トランスフォーム" +msgstr "Colorのuniform。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the boolean result of the %s comparison between two parameters." @@ -8761,7 +8817,7 @@ msgstr "ネイピア数(2.718282)。自然対数のベースを表します。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Epsilon constant (0.00001). Smallest possible scalar number." -msgstr "Υ(イプシロン)定数(0.00001)。可能な最小のスカラー数。" +msgstr "Υ(イプシロン)定数(0.00001)。使用可能な最小のスカラー数。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Phi constant (1.618034). Golden ratio." @@ -8930,7 +8986,6 @@ msgid "Returns the square root of the parameter." msgstr "パラメータの平方根を返します。" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "" "SmoothStep function( scalar(edge0), scalar(edge1), scalar(x) ).\n" "\n" @@ -8938,22 +8993,21 @@ msgid "" "'edge1'. Otherwise the return value is interpolated between 0.0 and 1.0 " "using Hermite polynomials." msgstr "" -"SmoothStep関数(scalar(エッジ0)、scalar(エッジ1)、scalar (x))。\n" +"SmoothStep関数( scalar(edge0), scalar(edge1), scalar(x) )。\n" "\n" -"'x' が 'edge0' より小さい場合は0.0を返し、xが 'edge1' より大きい場合は1.0を返" -"します。それ以外の場合、戻り値はエルミート多項式を使用して0.0と1.0の間で補間" -"されます。" +"'x' が 'edge0' より小さい場合は 0.0 を返し、xが 'edge1' より大きい場合は 1.0 " +"を返します。それ以外の場合、戻り値はエルミート多項式を使用して 0.0 と 1.0 の" +"間で補間されます。" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "" "Step function( scalar(edge), scalar(x) ).\n" "\n" "Returns 0.0 if 'x' is smaller than 'edge' and otherwise 1.0." msgstr "" -"Step関数( scalar(edge)、scalar(x))。\n" +"Step関数( scalar(edge), scalar(x) )。\n" "\n" -"'x' が 'edge' より小さい場合は0.0を返し、それ以外の場合は1.0を返します。" +"'x' が 'edge' より小さい場合は 0.0 を返し、それ以外の場合は 1.0 を返します。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the tangent of the parameter." @@ -8992,9 +9046,8 @@ msgid "Scalar constant." msgstr "スカラー定数。" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Scalar uniform." -msgstr "スカラUniformを変更" +msgstr "Scalarのuniform。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Perform the cubic texture lookup." @@ -9005,27 +9058,22 @@ msgid "Perform the texture lookup." msgstr "テクスチャ・ルックアップを実行します。" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Cubic texture uniform lookup." -msgstr "テクスチャUniformを変更" +msgstr "キュービックテクスチャuniformルックアップ。" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "2D texture uniform lookup." -msgstr "テクスチャUniformを変更" +msgstr "2Dテクスチャuniformルックアップ。" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "2D texture uniform lookup with triplanar." -msgstr "テクスチャUniformを変更" +msgstr "triplanarの2Dテクスチャuniformルックアップ。" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Transform function." -msgstr "トランスフォームのダイアログ..." +msgstr "トランスフォーム関数。" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "" "Calculate the outer product of a pair of vectors.\n" "\n" @@ -9035,7 +9083,7 @@ msgid "" "whose number of rows is the number of components in 'c' and whose number of " "columns is the number of components in 'r'." msgstr "" -"(GLES3のみ)ベクトルのペアの外積を計算します。\n" +"ベクトルのペアの外積を計算します。\n" "\n" "OuterProductは、最初のパラメータ 'c' を列ベクトル(1列の行列)として、2番目のパ" "ラメータ 'r' を行ベクトル(1行の行列)として処理し、線形代数行列乗算 'c * r' を" @@ -9044,41 +9092,39 @@ msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Composes transform from four vectors." -msgstr "4つのベクトルから変換を作成します。" +msgstr "4つのベクトルからトランスフォームを作成します。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Decomposes transform to four vectors." -msgstr "変換を4つのベクトルに分解します。" +msgstr "トランスフォームを4つのベクトルに分解します。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Calculates the determinant of a transform." -msgstr "変換の行列式を計算します。" +msgstr "トランスフォームの行列式を計算します。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Calculates the inverse of a transform." -msgstr "変換の逆行列を計算します。" +msgstr "トランスフォームの逆行列を計算します。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Calculates the transpose of a transform." -msgstr "変換の転置を計算します。" +msgstr "トランスフォームの転置を計算します。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Multiplies transform by transform." -msgstr "変換で変換を乗算します。" +msgstr "トランスフォームでトランスフォームを乗算します。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Multiplies vector by transform." -msgstr "変換でベクトルを乗算します。" +msgstr "トランスフォームでベクトルを乗算します。" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Transform constant." -msgstr "トランスフォームは中止されました." +msgstr "トランスフォーム定数。" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Transform uniform." -msgstr "トランスフォームは中止されました." +msgstr "トランスフォーム用uniform。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Vector function." @@ -9109,7 +9155,6 @@ msgid "Calculates the dot product of two vectors." msgstr "2つのベクトルの内積を計算します。" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "" "Returns the vector that points in the same direction as a reference vector. " "The function has three vector parameters : N, the vector to orient, I, the " @@ -9117,9 +9162,9 @@ msgid "" "Nref is smaller than zero the return value is N. Otherwise -N is returned." msgstr "" "参照ベクトルと同じ方向を指すベクトルを返します。 この関数には3つのベクトルパ" -"ラメータがあります。Nは配向するベクトル、Iは入射ベクトル、Nrefは参照ベクトル" -"です。 IとNrefの内積が0より小さい場合、戻り値はNです。それ以外の場合、-Nが返" -"されます。" +"ラメータがあります。Nは方向ベクトル、Iは入射ベクトル、Nrefは参照ベクトルで" +"す。 IとNrefの内積が0より小さい場合、戻り値はNです。それ以外の場合、-Nが返さ" +"れます。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Calculates the length of a vector." @@ -9229,9 +9274,8 @@ msgid "Vector constant." msgstr "ベクトル定数。" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Vector uniform." -msgstr "uniform への割り当て。" +msgstr "ベクトルuniform。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" @@ -9252,7 +9296,6 @@ msgstr "" "返します。" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "" "Custom Godot Shader Language expression, which is placed on top of the " "resulted shader. You can place various function definitions inside and call " @@ -9319,7 +9362,7 @@ msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "VisualShader" -msgstr "ビジュアルシェーダー" +msgstr "VisualShader" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Edit Visual Property" @@ -9484,7 +9527,7 @@ msgstr "テキスト" #: editor/project_export.cpp msgid "Compiled" -msgstr "コンパイル" +msgstr "コンパイル済み" #: editor/project_export.cpp msgid "Encrypted (Provide Key Below)" @@ -9535,13 +9578,19 @@ msgid "Export With Debug" msgstr "デバッグ付きエクスポート" #: editor/project_manager.cpp -msgid "The path does not exist." -msgstr "存在しないパスです。" +msgid "The path specified doesn't exist." +msgstr "指定されたパスは存在しません。" + +#: editor/project_manager.cpp +msgid "Error opening package file (it's not in ZIP format)." +msgstr "" +"パッケージ ファイルを開くときにエラーが発生しました (ZIP形式ではありません)。" #: editor/project_manager.cpp -msgid "Invalid '.zip' project file, does not contain a 'project.godot' file." +msgid "" +"Invalid \".zip\" project file; it doesn't contain a \"project.godot\" file." msgstr "" -"無効な '.zip' プロジェクトファイルです。'project.godot' ファイルが含まれてい" +"無効な\".zip\"プロジェクトファイルです。\"project.godot\"ファイルが含まれてい" "ません。" #: editor/project_manager.cpp @@ -9549,12 +9598,12 @@ msgid "Please choose an empty folder." msgstr "空のフォルダーを選択してください。" #: editor/project_manager.cpp -msgid "Please choose a 'project.godot' or '.zip' file." -msgstr "'project.godot' もしくは '.zip' ファイルを選択してください." +msgid "Please choose a \"project.godot\" or \".zip\" file." +msgstr "\"project.godot\"または\".zip\"ファイルを選択してください。" #: editor/project_manager.cpp -msgid "Directory already contains a Godot project." -msgstr "ディレクトリにはGodotプロジェクトがすでに含まれています。" +msgid "This directory already contains a Godot project." +msgstr "このディレクトリにはすでにGodotプロジェクトが含まれています。" #: editor/project_manager.cpp msgid "New Game Project" @@ -10040,9 +10089,8 @@ msgid "Settings saved OK." msgstr "設定の保存に成功しました." #: editor/project_settings_editor.cpp -#, fuzzy msgid "Moved Input Action Event" -msgstr "入力アクションイベントを追加" +msgstr "入力アクションイベントを移動" #: editor/project_settings_editor.cpp msgid "Override for Feature" @@ -10249,6 +10297,10 @@ msgid "Suffix" msgstr "サフィックス" #: editor/rename_dialog.cpp +msgid "Use Regular Expressions" +msgstr "正規表現を使用する" + +#: editor/rename_dialog.cpp msgid "Advanced Options" msgstr "高度なオプション" @@ -10285,8 +10337,8 @@ msgstr "" "カウンタオプションを比較します。" #: editor/rename_dialog.cpp -msgid "Per Level counter" -msgstr "レベルごとのカウンタ" +msgid "Per-level Counter" +msgstr "レベルごとのカウンター" #: editor/rename_dialog.cpp msgid "If set the counter restarts for each group of child nodes" @@ -10317,10 +10369,6 @@ msgstr "" "欠落した数字は、先頭にゼロが埋め込まれます。" #: editor/rename_dialog.cpp -msgid "Regular Expressions" -msgstr "正規表現" - -#: editor/rename_dialog.cpp msgid "Post-Process" msgstr "ポストプロセス" @@ -10329,12 +10377,12 @@ msgid "Keep" msgstr "保持" #: editor/rename_dialog.cpp -msgid "CamelCase to under_scored" -msgstr "キャメルケースをアンダースコアに" +msgid "PascalCase to snake_case" +msgstr "PascalCaseからsnake_caseへ" #: editor/rename_dialog.cpp -msgid "under_scored to CamelCase" -msgstr "アンダースコアをキャメルケースに" +msgid "snake_case to PascalCase" +msgstr "snake_caseをPascalCaseへ" #: editor/rename_dialog.cpp msgid "Case" @@ -10352,6 +10400,14 @@ msgstr "大文字に" msgid "Reset" msgstr "リセット" +#: editor/rename_dialog.cpp +msgid "Regular Expression Error" +msgstr "正規表現エラー" + +#: editor/rename_dialog.cpp +msgid "At character %s" +msgstr "文字 %s" + #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "親ノードを変更" @@ -10362,7 +10418,7 @@ msgstr "親を変更(新しい親を選択):" #: editor/reparent_dialog.cpp msgid "Keep Global Transform" -msgstr "グローバル変換を保持" +msgstr "グローバル トランスフォームを保持" #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent" @@ -10490,13 +10546,12 @@ msgstr "" "に戻ります。" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "" "Enabling \"Load As Placeholder\" will disable \"Editable Children\" and " "cause all properties of the node to be reverted to their default." msgstr "" -"\"editable_instance\" を無効にすると、ノードのすべてのプロパティがデフォルト" -"に戻ります。" +"『プレースホルダとしてロード』を有効にすると『編集可能な子』は無効にされ、こ" +"のノードにあるすべてのプロパティはデフォルト値に戻されます。" #: editor/scene_tree_dock.cpp msgid "Make Local" @@ -10576,7 +10631,7 @@ msgstr "編集可能な子" #: editor/scene_tree_dock.cpp msgid "Load As Placeholder" -msgstr "プレースホルダーとしてロード" +msgstr "プレースホルダとしてロード" #: editor/scene_tree_dock.cpp msgid "Open Documentation" @@ -10711,7 +10766,7 @@ msgid "" "Children are not selectable.\n" "Click to make selectable." msgstr "" -"子を選択できません.\n" +"子を選択できません。\n" "クリックして選択可能にしてください。" #: editor/scene_tree_editor.cpp @@ -10804,19 +10859,19 @@ msgstr "スクリプトを開く" #: editor/script_create_dialog.cpp msgid "File exists, it will be reused." -msgstr "ファイルは存在します。再利用されます。" +msgstr "ファイルが既に存在します。そちらを再利用します。" #: editor/script_create_dialog.cpp msgid "Invalid class name." -msgstr "クラス名が無効です。" +msgstr "無効なクラス名。" #: editor/script_create_dialog.cpp msgid "Invalid inherited parent name or path." msgstr "継承された親の名前またはパスが無効です。" #: editor/script_create_dialog.cpp -msgid "Script is valid." -msgstr "スクリプトは有効です。" +msgid "Script path/name is valid." +msgstr "スクリプトのパス/名前は有効です。" #: editor/script_create_dialog.cpp msgid "Allowed: a-z, A-Z, 0-9, _ and ." @@ -10907,6 +10962,10 @@ msgid "Copy Error" msgstr "エラーをコピー" #: editor/script_editor_debugger.cpp +msgid "Video RAM" +msgstr "ビデオRAM" + +#: editor/script_editor_debugger.cpp msgid "Skip Breakpoints" msgstr "ブレークポイントをスキップする" @@ -10955,10 +11014,6 @@ msgid "Total:" msgstr "合計:" #: editor/script_editor_debugger.cpp -msgid "Video Mem" -msgstr "ビデオメモリー" - -#: editor/script_editor_debugger.cpp msgid "Resource Path" msgstr "リソースのパス(ResourcePath)" @@ -11036,12 +11091,11 @@ msgstr "カメラのFOVを変更" #: editor/spatial_editor_gizmos.cpp msgid "Change Camera Size" -msgstr "カメラのサイズを変更" +msgstr "カメラサイズを変更" #: editor/spatial_editor_gizmos.cpp -#, fuzzy msgid "Change Notifier AABB" -msgstr "パーティクルの軸平行境界ボックスを変更" +msgstr "NotifierのAABBを変更" #: editor/spatial_editor_gizmos.cpp msgid "Change Particles AABB" @@ -11057,7 +11111,7 @@ msgstr "球形の半径を変更" #: editor/spatial_editor_gizmos.cpp modules/csg/csg_gizmos.cpp msgid "Change Box Shape Extents" -msgstr "ボックスシェイプ範囲の変更" +msgstr "ボックスシェイプの範囲を変更" #: editor/spatial_editor_gizmos.cpp msgid "Change Capsule Shape Radius" @@ -11065,7 +11119,7 @@ msgstr "カプセルシェイプの半径を変更" #: editor/spatial_editor_gizmos.cpp msgid "Change Capsule Shape Height" -msgstr "カプセル形状の高さを変更する" +msgstr "カプセルシェイプの高さを変更" #: editor/spatial_editor_gizmos.cpp msgid "Change Cylinder Shape Radius" @@ -11232,14 +11286,12 @@ msgid "Grid Map" msgstr "グリッドマップ" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Snap View" -msgstr "上面図" +msgstr "スナップビュー" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Clip Disabled" -msgstr "無効" +msgstr "クリップ無効" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Clip Above" @@ -11290,18 +11342,16 @@ msgid "Cursor Clear Rotation" msgstr "カーソル回転をクリア" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Paste Selects" -msgstr "選択対象を消去" +msgstr "選択項目の貼り付け" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Clear Selection" msgstr "選択をクリア" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Fill Selection" -msgstr "すべて選択" +msgstr "選択部の塗り潰し" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "GridMap Settings" @@ -11312,9 +11362,8 @@ msgid "Pick Distance:" msgstr "距離を取得:" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Filter meshes" -msgstr "フィルタメッシュ" +msgstr "メッシュを絞り込む" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Give a MeshLibrary resource to this GridMap to use its meshes." @@ -11364,7 +11413,7 @@ msgstr "移動可能な領域を作成中..." #: modules/recast/navigation_mesh_generator.cpp msgid "Partitioning..." -msgstr "パーティションを作成しています..." +msgstr "分割中..." #: modules/recast/navigation_mesh_generator.cpp msgid "Creating contours..." @@ -11441,7 +11490,7 @@ msgstr "引数名の変更" #: modules/visual_script/visual_script_editor.cpp msgid "Set Variable Default Value" -msgstr "変数のデフォルト値を設定する" +msgstr "変数のデフォルト値を設定" #: modules/visual_script/visual_script_editor.cpp msgid "Set Variable Type" @@ -11576,15 +11625,13 @@ msgid "Add Node(s) From Tree" msgstr "ツリーからノードを追加" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "" "Can't drop properties because script '%s' is not used in this scene.\n" "Drop holding 'Shift' to just copy the signature." msgstr "" -"スクリプト '%s' はこのシーンで使われていないため、ノードを落とすことができま" +"このシーンではスクリプト '%s'が使用されていないため、プロパティを削除できま" "せん。\n" -"'shift' キーを押しながらドロップすることでシグネチャをコピーすることができま" -"す。" +"「Shift」を押しながらドロップすると、署名がコピーされます。" #: modules/visual_script/visual_script_editor.cpp msgid "Add Getter Property" @@ -11647,18 +11694,16 @@ msgid "Paste VisualScript Nodes" msgstr "VisualScriptノードを貼り付け" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Can't create function with a function node." -msgstr "ファンクションノードをコピーできません。" +msgstr "関数ノードで関数を作成できません。" #: modules/visual_script/visual_script_editor.cpp msgid "Can't create function of nodes from nodes of multiple functions." msgstr "複数の関数を持つノードから、ノードの関数を作ることができません。" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Select at least one node with sequence port." -msgstr "シーケンスポートでは最低でも一つのノードを選択してください。" +msgstr "シーケンス ポートを持つノードを少なくとも 1 つ選択します。" #: modules/visual_script/visual_script_editor.cpp msgid "Try to only have one sequence input in selection." @@ -11709,9 +11754,8 @@ msgid "Add Function..." msgstr "関数を追加…" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "function_name" -msgstr "関数:" +msgstr "関数名" #: modules/visual_script/visual_script_editor.cpp msgid "Select or create a function to edit its graph." @@ -11771,7 +11815,7 @@ msgstr "パスがノードに達しません!" #: modules/visual_script/visual_script_func_nodes.cpp msgid "Invalid index property name '%s' in node %s." -msgstr "ノード%sの不正なインデックスのプロパティ名'%s' ." +msgstr "ノード%sのインデックスのプロパティ名'%s'は無効です。" #: modules/visual_script/visual_script_nodes.cpp msgid ": Invalid argument of type: " @@ -11961,7 +12005,7 @@ msgstr "無効なエクスポート テンプレート:" #: platform/javascript/export/export.cpp msgid "Could not read custom HTML shell:" -msgstr "カスタムHTMLシェルを読み取ることができませんでした:" +msgstr "カスタムHTMLシェルを読み込めませんでした:" #: platform/javascript/export/export.cpp msgid "Could not read boot splash image file:" @@ -12001,37 +12045,39 @@ msgstr "Storeロゴの画像サイズが無効です(縦横50x50でないとい� #: platform/uwp/export/export.cpp msgid "Invalid square 44x44 logo image dimensions (should be 44x44)." -msgstr "無効な44X44四角ロゴイメージ(縦横44x44でないといけません)。" +msgstr "44X44の正方形ロゴの画像サイズが無効です(縦横44x44でないといけません)。" #: platform/uwp/export/export.cpp msgid "Invalid square 71x71 logo image dimensions (should be 71x71)." -msgstr "無効な71x71四角ロゴイメージ(縦横71x71でないといけません)。" +msgstr "71x71の正方形ロゴの画像サイズが無効です(縦横71x71でないといけません)。" #: platform/uwp/export/export.cpp msgid "Invalid square 150x150 logo image dimensions (should be 150x150)." -msgstr "無効な150X150四角ロゴイメージ(縦横150x150でないといけません)。" +msgstr "" +"150X150の正方形ロゴの画像サイズが無効です(縦横150x150でないといけません)。" #: platform/uwp/export/export.cpp msgid "Invalid square 310x310 logo image dimensions (should be 310x310)." -msgstr "無効な310X310四角ロゴイメージ(縦横310x310でないといけません)。" +msgstr "" +"310X310の正方形ロゴの画像サイズが無効です(縦横310x310でないといけません)。" #: platform/uwp/export/export.cpp msgid "Invalid wide 310x150 logo image dimensions (should be 310x150)." -msgstr "無効な310X150ワイドロゴイメージ(縦横310x150でないといけません)。" +msgstr "" +"310X150のワイドロゴの画像サイズが無効です(縦横310x150でないといけません)。" #: platform/uwp/export/export.cpp msgid "Invalid splash screen image dimensions (should be 620x300)." msgstr "" -"無効なスプラッシュスクリーンイメージ(縦横620x300でないといけません)。" +"スプラッシュスクリーンの画像サイズが無効です(縦横620x300でないといけません)。" #: scene/2d/animated_sprite.cpp -#, fuzzy msgid "" "A SpriteFrames resource must be created or set in the \"Frames\" property in " "order for AnimatedSprite to display frames." msgstr "" -"SpriteFrames リソースを作成または AnimatedSprite フレームを表示するためには " -"'Frames' プロパティに設定する必要があります。" +"AnimatedSpriteでフレームを表示するには、\"Frames\"プロパティでSpriteFramesリ" +"ソースを作成または設定する必要があります。" #: scene/2d/canvas_modulate.cpp msgid "" @@ -12059,10 +12105,9 @@ msgid "" "CollisionObject2D derived node. Please only use it as a child of Area2D, " "StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape." msgstr "" -"CollisionPolygon2D は、CollisionObject2D 派生ノードに衝突シェイプを提供するた" -"めにのみ機能します。2Dの形状(シェイプ)を付与するためには Area2D、" -"StaticBody2D、RigidBody2D、KinematicBody2D などの子オブジェクトとして利用して" -"ください。" +"CollisionPolygon2Dは、CollisionObject2D派生ノードにコリジョンシェイプを提供す" +"るためにのみ機能します。シェイプを追加する場合は、Area2D、StaticBody2D、" +"RigidBody2D、KinematicBody2Dなどの子として使用してください。" #: scene/2d/collision_polygon_2d.cpp msgid "An empty CollisionPolygon2D has no effect on collision." @@ -12074,9 +12119,9 @@ msgid "" "CollisionObject2D derived node. Please only use it as a child of Area2D, " "StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape." msgstr "" -"CollisionShape2D は、CollisionObject2D派生ノードに衝突シェイプを提供する場合" -"にのみ機能します。Area2D、staticBody2D、RigidBody2D、KinematicBody2Dなどの子" -"として使用してください。" +"CollisionShape2Dは、CollisionObject2D派生ノードにコリジョンシェイプを提供する" +"場合にのみ機能します。シェイプを追加する場合は、Area2D、staticBody2D、" +"RigidBody2D、KinematicBody2Dなどの子として使用してください。" #: scene/2d/collision_shape_2d.cpp msgid "" @@ -12095,11 +12140,11 @@ msgstr "" "CanvasItemMaterialを使用する必要があります。" #: scene/2d/light_2d.cpp -#, fuzzy msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " "property." -msgstr "光の形状とテクスチャは、'texture'プロパティに指定します。" +msgstr "" +"光の形状を持つテクスチャは\"Texture\"プロパティに指定する必要があります。" #: scene/2d/light_occluder_2d.cpp msgid "" @@ -12234,7 +12279,7 @@ msgstr "" #: scene/3d/arvr_nodes.cpp msgid "ARVRAnchor must have an ARVROrigin node as its parent." -msgstr "ARVRAnchorはARVROriginを親に持つ必要があります。" +msgstr "ARVRAnchorはARVROriginノードを親に持つ必要があります。" #: scene/3d/arvr_nodes.cpp msgid "" @@ -12246,7 +12291,7 @@ msgstr "" #: scene/3d/arvr_nodes.cpp msgid "ARVROrigin requires an ARVRCamera child node." -msgstr "ARVROriginはARVRCamera子ノードが必要です。" +msgstr "ARVROriginは子ノードにARVRCameraが必要です。" #: scene/3d/baked_lightmap.cpp msgid "%d%%" @@ -12289,9 +12334,9 @@ msgid "" "CollisionObject derived node. Please only use it as a child of Area, " "StaticBody, RigidBody, KinematicBody, etc. to give them a shape." msgstr "" -"CollisionPolygonは、CollisionObject派生ノードに衝突シェイプを提供する場合にの" -"み機能します。Area、StaticBody、RigidBody、KinematicBodyなどの子として使用し" -"てください。" +"CollisionPolygonは、CollisionObject派生ノードにコリジョンシェイプを提供する場" +"合にのみ機能します。シェイプを追加する場合は、Area、StaticBody、RigidBody、" +"KinematicBodyなどの子として使用してください。" #: scene/3d/collision_polygon.cpp msgid "An empty CollisionPolygon has no effect on collision." @@ -12303,9 +12348,9 @@ msgid "" "derived node. Please only use it as a child of Area, StaticBody, RigidBody, " "KinematicBody, etc. to give them a shape." msgstr "" -"CollisionShapeは、CollisionObject派生ノードに衝突シェイプを提供する場合にのみ" -"機能します。Area、StaticBody、RigidBody、KinematicBodyなどの子として使用して" -"ください。" +"CollisionShapeは、CollisionObject派生ノードにコリジョンシェイプを提供する場合" +"にのみ機能します。シェイプを追加する場合は、Area、StaticBody、RigidBody、" +"KinematicBodyなどの子として使用してください。" #: scene/3d/collision_shape.cpp msgid "" @@ -12393,13 +12438,12 @@ msgid "PathFollow only works when set as a child of a Path node." msgstr "PathFollow は、Path ノードの子として設定されている場合のみ動作します。" #: scene/3d/path.cpp -#, fuzzy msgid "" "PathFollow's ROTATION_ORIENTED requires \"Up Vector\" to be enabled in its " "parent Path's Curve resource." msgstr "" -"PathFollow ROTATION_ORIENTEDでは、親パスのCurveリソースで \"Up Vector\"を有効" -"にする必要があります。" +"PathFollowのROTATION_ORIENTEDでは、親のPathのCurveリソースで\"Up Vector\"を有" +"効にする必要があります。" #: scene/3d/physics_body.cpp msgid "" @@ -12412,13 +12456,12 @@ msgstr "" "代わりに、子の衝突シェイプのサイズを変更してください。" #: scene/3d/remote_transform.cpp -#, fuzzy msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" "derived node to work." msgstr "" -"Path プロパティは、動作するように有効な Particles2D ノードを示す必要がありま" -"す。" +"\"Remote Path\"プロパティは、有効なSpatialまたはSpatialから派生したノードを指" +"す必要があります。" #: scene/3d/soft_body.cpp msgid "This body will be ignored until you set a mesh." @@ -12526,9 +12569,8 @@ msgstr "" "右マウスボタン: プリセットの除去" #: scene/gui/color_picker.cpp -#, fuzzy msgid "Pick a color from the editor window." -msgstr "スクリーンから色を選択してください。" +msgstr "エディタウィンドウから色を選択。" #: scene/gui/color_picker.cpp msgid "HSV" @@ -12589,15 +12631,14 @@ msgid "If \"Exp Edit\" is enabled, \"Min Value\" must be greater than 0." msgstr "「Exp Edit」がtrueの場合、「Min Value」は0より大きい必要があります。" #: scene/gui/scroll_container.cpp -#, fuzzy msgid "" "ScrollContainer is intended to work with a single child control.\n" "Use a container as child (VBox, HBox, etc.), or a Control and set the custom " "minimum size manually." msgstr "" -"ScrollContainerは単一の子コントロールで動作するように意図されています。コンテ" -"ナ(VBox, HBoxなど)を子として使用するか、コントロールを使用してカスタム最小サ" -"イズを手動で設定してください。" +"ScrollContainer は子コントロールひとつのみで動作するようになっています。\n" +"コンテナ (VBox, HBoxなど) を子とするか、コントロールをカスタム最小サイズを手" +"動設定して使用してください。" #: scene/gui/tree.cpp msgid "(Other)" @@ -12608,21 +12649,20 @@ msgid "" "Default Environment as specified in Project Settings (Rendering -> " "Environment -> Default Environment) could not be loaded." msgstr "" -"プロジェクト設定で指定されている既定の環境 (レンダリング -> 環境 -> 既定の環" -"境) を読み込めませんでした。" +"プロジェクト設定で指定されている既定の環境 (Rendering -> Environment -> " +"Default Environment) を読み込めませんでした。" #: scene/main/viewport.cpp -#, fuzzy msgid "" "This viewport is not set as render target. If you intend for it to display " "its contents directly to the screen, make it a child of a Control so it can " "obtain a size. Otherwise, make it a RenderTarget and assign its internal " "texture to some node for display." msgstr "" -"このビューポートは、レンダー ターゲットとして設定されていません。その内容を画" -"面に直接表示する場合は、サイズを得ることができるように、コントロールの子をつ" -"くります。それ以外の場合、レンダー ターゲットし、その内部のテクスチャ表示のい" -"くつかのノードに割り当てます。" +"このビューポートはレンダー ターゲットとして設定されていません。コンテンツを画" +"面に直接表示する場合は、サイズを取得できるようにコントロールの子にします。そ" +"れ以外の場合は、RenderTarget にして、その内部テクスチャを表示するノードに割り" +"当てます。" #: scene/resources/visual_shader_nodes.cpp msgid "Invalid source for preview." @@ -12645,14 +12685,22 @@ msgid "Assignment to uniform." msgstr "uniform への割り当て。" #: servers/visual/shader_language.cpp -#, fuzzy msgid "Varyings can only be assigned in vertex function." -msgstr "Varyingは頂点関数にのみ割り当てることができます。" +msgstr "Varying変数は頂点関数にのみ割り当てることができます。" #: servers/visual/shader_language.cpp msgid "Constants cannot be modified." msgstr "定数は変更できません。" +#~ msgid "Replaced %d occurrence(s)." +#~ msgstr "%d 箇所を置換しました。" + +#~ msgid "Create Static Convex Body" +#~ msgstr "静的凸状ボディを生成" + +#~ msgid "Failed creating shapes!" +#~ msgstr "図形の作成に失敗しました!" + #~ msgid "" #~ "There are currently no tutorials for this class, you can [color=$color]" #~ "[url=$url]contribute one[/url][/color] or [color=$color][url=" diff --git a/editor/translations/ka.po b/editor/translations/ka.po index 4808e9177b..3c9ab6c79e 100644 --- a/editor/translations/ka.po +++ b/editor/translations/ka.po @@ -717,8 +717,9 @@ msgid "Line Number:" msgstr "ხაზის ნომერი:" #: editor/code_editor.cpp -msgid "Replaced %d occurrence(s)." -msgstr "შეცვლილია %d დამთხვევები." +#, fuzzy +msgid "%d replaced." +msgstr "ჩანაცვლება" #: editor/code_editor.cpp editor/editor_help.cpp msgid "%d match." @@ -3949,15 +3950,15 @@ msgid "Saving..." msgstr "" #: editor/import_dock.cpp -msgid "Set as Default for '%s'" +msgid "%d Files" msgstr "" #: editor/import_dock.cpp -msgid "Clear Default for '%s'" +msgid "Set as Default for '%s'" msgstr "" #: editor/import_dock.cpp -msgid " Files" +msgid "Clear Default for '%s'" msgstr "" #: editor/import_dock.cpp @@ -5846,11 +5847,11 @@ msgid "Mesh is empty!" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Trimesh Body" +msgid "Couldn't create a Trimesh collision shape." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Convex Body" +msgid "Create Static Trimesh Body" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -5862,12 +5863,29 @@ msgid "Create Trimesh Static Shape" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Failed creating shapes!" +msgid "Can't create a single convex collision shape for the scene root." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Couldn't create a single convex collision shape." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp #, fuzzy -msgid "Create Convex Shape(s)" +msgid "Create Single Convex Shape" +msgstr "ახალი %s შექმნა" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Can't create multiple convex collision shapes for the scene root." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Couldn't create any collision shapes." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Create Multiple Convex Shapes" msgstr "ახალი %s შექმნა" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -5919,19 +5937,57 @@ msgid "Create Trimesh Static Body" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a StaticBody and assigns a polygon-based collision shape to it " +"automatically.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Collision Sibling" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a polygon-based collision shape.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Create Single Convex Collision Siblings" +msgstr "შექმნა" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a single convex collision shape.\n" +"This is the fastest (but least accurate) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp #, fuzzy -msgid "Create Convex Collision Sibling(s)" +msgid "Create Multiple Convex Collision Siblings" msgstr "შექმნა" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a polygon-based collision shape.\n" +"This is a performance middle-ground between the two above options." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Outline Mesh..." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a static outline mesh. The outline mesh will have its normals " +"flipped automatically.\n" +"This can be used instead of the SpatialMaterial Grow property when using " +"that property isn't possible." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "View UV1" msgstr "" @@ -8369,7 +8425,7 @@ msgstr "" msgid "No VCS addons are available." msgstr "" -#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Error" msgstr "" @@ -9483,11 +9539,17 @@ msgid "Export With Debug" msgstr "" #: editor/project_manager.cpp -msgid "The path does not exist." +msgid "The path specified doesn't exist." msgstr "" #: editor/project_manager.cpp -msgid "Invalid '.zip' project file, does not contain a 'project.godot' file." +#, fuzzy +msgid "Error opening package file (it's not in ZIP format)." +msgstr "შეცდომა პაკეტის გახსნისას, უნდა იყოს zip ფორმატში." + +#: editor/project_manager.cpp +msgid "" +"Invalid \".zip\" project file; it doesn't contain a \"project.godot\" file." msgstr "" #: editor/project_manager.cpp @@ -9495,11 +9557,11 @@ msgid "Please choose an empty folder." msgstr "" #: editor/project_manager.cpp -msgid "Please choose a 'project.godot' or '.zip' file." +msgid "Please choose a \"project.godot\" or \".zip\" file." msgstr "" #: editor/project_manager.cpp -msgid "Directory already contains a Godot project." +msgid "This directory already contains a Godot project." msgstr "" #: editor/project_manager.cpp @@ -10151,6 +10213,10 @@ msgid "Suffix" msgstr "" #: editor/rename_dialog.cpp +msgid "Use Regular Expressions" +msgstr "" + +#: editor/rename_dialog.cpp msgid "Advanced Options" msgstr "" @@ -10185,7 +10251,7 @@ msgid "" msgstr "" #: editor/rename_dialog.cpp -msgid "Per Level counter" +msgid "Per-level Counter" msgstr "" #: editor/rename_dialog.cpp @@ -10216,10 +10282,6 @@ msgid "" msgstr "" #: editor/rename_dialog.cpp -msgid "Regular Expressions" -msgstr "" - -#: editor/rename_dialog.cpp msgid "Post-Process" msgstr "" @@ -10228,11 +10290,11 @@ msgid "Keep" msgstr "" #: editor/rename_dialog.cpp -msgid "CamelCase to under_scored" +msgid "PascalCase to snake_case" msgstr "" #: editor/rename_dialog.cpp -msgid "under_scored to CamelCase" +msgid "snake_case to PascalCase" msgstr "" #: editor/rename_dialog.cpp @@ -10252,6 +10314,14 @@ msgstr "" msgid "Reset" msgstr "ზუმის საწყისზე დაყენება" +#: editor/rename_dialog.cpp +msgid "Regular Expression Error" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "At character %s" +msgstr "" + #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "" @@ -10705,7 +10775,7 @@ msgid "Invalid inherited parent name or path." msgstr "" #: editor/script_create_dialog.cpp -msgid "Script is valid." +msgid "Script path/name is valid." msgstr "" #: editor/script_create_dialog.cpp @@ -10804,6 +10874,10 @@ msgid "Copy Error" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Video RAM" +msgstr "" + +#: editor/script_editor_debugger.cpp #, fuzzy msgid "Skip Breakpoints" msgstr "შექმნა" @@ -10853,10 +10927,6 @@ msgid "Total:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Video Mem" -msgstr "" - -#: editor/script_editor_debugger.cpp msgid "Resource Path" msgstr "" @@ -12408,6 +12478,9 @@ msgstr "" msgid "Constants cannot be modified." msgstr "" +#~ msgid "Replaced %d occurrence(s)." +#~ msgstr "შეცვლილია %d დამთხვევები." + #, fuzzy #~ msgid "Brief Description" #~ msgstr "აღწერა:" diff --git a/editor/translations/ko.po b/editor/translations/ko.po index ae7e1edf52..fc23015cf8 100644 --- a/editor/translations/ko.po +++ b/editor/translations/ko.po @@ -11,7 +11,7 @@ # 박한얼 (volzhs) <volzhs@gmail.com>, 2016-2018. # 송태섭 <xotjq237@gmail.com>, 2018, 2019, 2020. # JY <yimjisoo@mailfence.com>, 2018. -# Ch. <ccwpc@hanmail.net>, 2018. +# Ch. <ccwpc@hanmail.net>, 2018, 2020. # moolow <copyhyeon@gmail.com>, 2019. # Jiyoon Kim <kimjiy@dickinson.edu>, 2019. # Ervin <zetsmart@gmail.com>, 2019. @@ -19,8 +19,8 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2020-01-27 07:09+0000\n" -"Last-Translator: 송태섭 <xotjq237@gmail.com>\n" +"PO-Revision-Date: 2020-02-02 08:52+0000\n" +"Last-Translator: Ch. <ccwpc@hanmail.net>\n" "Language-Team: Korean <https://hosted.weblate.org/projects/godot-engine/" "godot/ko/>\n" "Language: ko\n" @@ -33,41 +33,42 @@ msgstr "" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Invalid type argument to convert(), use TYPE_* constants." -msgstr "convert() 메서드의 인수 유형이 잘못됐어요. TYPE_* 상수를 사용하세요." +msgstr "" +"convert() 메서드의 인수 유형이 올바르지 않습니다. TYPE_* 상수를 사용하세요." #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp msgid "Expected a string of length 1 (a character)." -msgstr "길이가 1인 문자열 (문자)이 필요해요." +msgstr "길이가 1인 문자열(단일 문자)이 필요합니다." #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/mono/glue/gd_glue.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." -msgstr "디코딩할 바이트가 모자라거나 잘못된 형식이에요." +msgstr "디코딩할 바이트가 모자라거나 잘못된 형식입니다." #: core/math/expression.cpp msgid "Invalid input %i (not passed) in expression" -msgstr "표현식에서 입력 %i이(가) 잘못됐어요 (전달되지 않음)" +msgstr "표현식의 입력 %i (전달되지 않음) 이(가) 올바르지 않습니다" #: core/math/expression.cpp msgid "self can't be used because instance is null (not passed)" -msgstr "인스턴스가 비어있어서 Self를 사용할 수 없어요 (전달되지 않음)" +msgstr "인스턴스가 null (전달되지 않음) 이므로 self 를 사용할 수 없습니다" #: core/math/expression.cpp msgid "Invalid operands to operator %s, %s and %s." -msgstr "연산자 %s와(과) %s, %s의 연산 대상이 잘못됐어요." +msgstr "연산자 %s, %s, %s의 피연산자가 올바르지 않습니다." #: core/math/expression.cpp msgid "Invalid index of type %s for base type %s" -msgstr "기본 유형이 %s인 %s 유형의 인덱스가 잘못됐어요" +msgstr "자료형 %s 의 인덱스가 기본형 %s 기준으로 올바르지 않습니다" #: core/math/expression.cpp msgid "Invalid named index '%s' for base type %s" -msgstr "기본 유형이 %s인 '%s' 인덱스의 이름이 잘못됐어요" +msgstr "인덱스 이름 '%s' 이 기본형 %s 기준으로 올바르지 않습니다" #: core/math/expression.cpp msgid "Invalid arguments to construct '%s'" -msgstr "이 인수로는 '%s'을(를) 구성할 수 없어요" +msgstr "'%s' 를 생성하기 위한 인수가 올바르지 않습니다" #: core/math/expression.cpp msgid "On call to '%s':" @@ -123,31 +124,31 @@ msgstr "값:" #: editor/animation_bezier_editor.cpp msgid "Insert Key Here" -msgstr "여기에 키를 삽입하기" +msgstr "여기에 키 삽입" #: editor/animation_bezier_editor.cpp msgid "Duplicate Selected Key(s)" -msgstr "선택한 키를 복제하기" +msgstr "선택한 키 복제" #: editor/animation_bezier_editor.cpp msgid "Delete Selected Key(s)" -msgstr "선택한 키를 삭제하기" +msgstr "선택한 키 삭제" #: editor/animation_bezier_editor.cpp msgid "Add Bezier Point" -msgstr "베지어 점 추가하기" +msgstr "베지어 점 추가" #: editor/animation_bezier_editor.cpp msgid "Move Bezier Points" -msgstr "베지어 점 이동하기" +msgstr "베지어 점 이동" #: editor/animation_bezier_editor.cpp editor/animation_track_editor.cpp msgid "Anim Duplicate Keys" -msgstr "애니메이션 키 복제하기" +msgstr "애니메이션 키 복제" #: editor/animation_bezier_editor.cpp editor/animation_track_editor.cpp msgid "Anim Delete Keys" -msgstr "애니메이션 키 삭제하기" +msgstr "애니메이션 키 삭제" #: editor/animation_track_editor.cpp msgid "Anim Change Keyframe Time" @@ -196,7 +197,7 @@ msgstr "애니메이션 길이 바꾸기" #: editor/animation_track_editor.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Change Animation Loop" -msgstr "애니메이션 루프 변경하기" +msgstr "애니메이션 루프 변경" #: editor/animation_track_editor.cpp msgid "Property Track" @@ -232,11 +233,11 @@ msgstr "애니메이션 길이 (초)" #: editor/animation_track_editor.cpp msgid "Add Track" -msgstr "트랙 추가하기" +msgstr "트랙 추가" #: editor/animation_track_editor.cpp msgid "Animation Looping" -msgstr "애니메이션 반복하기" +msgstr "애니메이션 반복" #: editor/animation_track_editor.cpp #: modules/visual_script/visual_script_editor.cpp @@ -257,11 +258,11 @@ msgstr "트랙 경로 바꾸기" #: editor/animation_track_editor.cpp msgid "Toggle this track on/off." -msgstr "이 트랙을 켜거나 꺼요." +msgstr "이 트랙을 켬/꺼짐 여부를 전환합니다." #: editor/animation_track_editor.cpp msgid "Update Mode (How this property is set)" -msgstr "업데이트 모드 (이 속성을 설정하는 방법)" +msgstr "업데이트 모드 (이 속성이 설정되는 방법)" #: editor/animation_track_editor.cpp msgid "Interpolation Mode" @@ -269,11 +270,11 @@ msgstr "보간 모드" #: editor/animation_track_editor.cpp msgid "Loop Wrap Mode (Interpolate end with beginning on loop)" -msgstr "루프 마무리 모드 (시작 루프와 끝을 보간)" +msgstr "루프 래핑 모드 (시작 루프와 끝을 보간)" #: editor/animation_track_editor.cpp msgid "Remove this track." -msgstr "이 트랙을 삭제할게요." +msgstr "이 트랙을 삭제합니다." #: editor/animation_track_editor.cpp msgid "Time (s): " @@ -314,24 +315,24 @@ msgstr "입방형" #: editor/animation_track_editor.cpp msgid "Clamp Loop Interp" -msgstr "루프 보간 고정하기" +msgstr "루프 보간 고정" #: editor/animation_track_editor.cpp msgid "Wrap Loop Interp" -msgstr "루프 보간 마무리하기" +msgstr "루프 보간 래핑" #: editor/animation_track_editor.cpp #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Insert Key" -msgstr "키 삽입하기" +msgstr "키 삽입" #: editor/animation_track_editor.cpp msgid "Duplicate Key(s)" -msgstr "키 복제하기" +msgstr "키 복제" #: editor/animation_track_editor.cpp msgid "Delete Key(s)" -msgstr "키 삭제하기" +msgstr "키 삭제" #: editor/animation_track_editor.cpp msgid "Change Animation Update Mode" @@ -347,7 +348,7 @@ msgstr "애니메이션 루프 모드 바꾸기" #: editor/animation_track_editor.cpp msgid "Remove Anim Track" -msgstr "애니메이션 트랙 삭제하기" +msgstr "애니메이션 트랙 삭제" #: editor/animation_track_editor.cpp msgid "Create NEW track for %s and insert key?" @@ -371,25 +372,25 @@ msgstr "만들기" #: editor/animation_track_editor.cpp msgid "Anim Insert" -msgstr "애니메이션 삽입하기" +msgstr "애니메이션 삽입" #: editor/animation_track_editor.cpp msgid "AnimationPlayer can't animate itself, only other players." msgstr "" -"AnimationPlayer는 자신에게 애니메이션을 줄 수 없어요. 다른 AnimationPlayer만 " -"애니메이션을 줄 수 있죠." +"AnimationPlayer는 자신이 아닌 다른 플레이어에만 애니메이션을 부여할 수 있습니" +"다." #: editor/animation_track_editor.cpp msgid "Anim Create & Insert" -msgstr "애니메이션 만들기 & 삽입하기" +msgstr "애니메이션 만들기 & 삽입" #: editor/animation_track_editor.cpp msgid "Anim Insert Track & Key" -msgstr "애니메이션 트랙 & 키 삽입하기" +msgstr "애니메이션 트랙 & 키 삽입" #: editor/animation_track_editor.cpp msgid "Anim Insert Key" -msgstr "애니메이션 키 삽입하기" +msgstr "애니메이션 키 삽입" #: editor/animation_track_editor.cpp msgid "Change Animation Step" @@ -397,11 +398,11 @@ msgstr "애니메이션 단계 바꾸기" #: editor/animation_track_editor.cpp msgid "Rearrange Tracks" -msgstr "트랙 다시 정렬하기" +msgstr "트랙 다시 정렬" #: editor/animation_track_editor.cpp msgid "Transform tracks only apply to Spatial-based nodes." -msgstr "변형 트랙은 오직 Spatial 기반 노드에만 적용돼요." +msgstr "변형 트랙은 오직 Spatial 기반 노드에만 해당됩니다." #: editor/animation_track_editor.cpp msgid "" @@ -410,20 +411,20 @@ msgid "" "-AudioStreamPlayer2D\n" "-AudioStreamPlayer3D" msgstr "" -"오디오 트랙은 오직 다음 유형의 노드만 가리켜요:\n" +"오디오 트랙은 다음 형식의 노드만 가리킬 수 있습니다.\n" "-AudioStreamPlayer\n" "-AudioStreamPlayer2D\n" "-AudioStreamPlayer3D" #: editor/animation_track_editor.cpp msgid "Animation tracks can only point to AnimationPlayer nodes." -msgstr "애니메이션 트랙은 오직 AnimationPlayer 노드만 가리킬 수 있어요." +msgstr "애니메이션 트랙은 오직 AnimationPlayer 노드만 가리킬 수 있습니다." #: editor/animation_track_editor.cpp msgid "An animation player can't animate itself, only other players." msgstr "" -"AnimationPlayer는 자신에게 애니메이션을 줄 수 없어요. 다른 AnimationPlayer만 " -"애니메이션을 줄 수 있죠." +"애니메이션 플레이어는 자신이 아닌 다른 플레이어에만 애니메이션을 부여할 수 있" +"습니다." #: editor/animation_track_editor.cpp msgid "Not possible to add a new track without a root" @@ -431,35 +432,35 @@ msgstr "루트 없이 새 트랙을 추가할 수 없음" #: editor/animation_track_editor.cpp msgid "Invalid track for Bezier (no suitable sub-properties)" -msgstr "베지어에 잘못된 트랙 (적당한 하위 속성이 없음)" +msgstr "베지어에 알맞지 않은 트랙 (적당한 하위 속성이 없음)" #: editor/animation_track_editor.cpp msgid "Add Bezier Track" -msgstr "베지어 트랙 추가하기" +msgstr "베지어 트랙 추가" #: editor/animation_track_editor.cpp msgid "Track path is invalid, so can't add a key." -msgstr "트랙 경로가 잘못됐어요. 키를 추가할 수 없어요." +msgstr "트랙 경로가 올바르지 않아 키를 추가할 수 없습니다." #: editor/animation_track_editor.cpp msgid "Track is not of type Spatial, can't insert key" -msgstr "트랙이 Spatial 유형이 아니에요. 키를 삽입할 수 없어요" +msgstr "트랙이 Spatial 형식이 아니어서 키를 추가할 수 없습니다" #: editor/animation_track_editor.cpp msgid "Add Transform Track Key" -msgstr "변형 트랙 키 추가하기" +msgstr "변형 트랙 키 추가" #: editor/animation_track_editor.cpp msgid "Add Track Key" -msgstr "트랙 키 추가하기" +msgstr "트랙 키 추가" #: editor/animation_track_editor.cpp msgid "Track path is invalid, so can't add a method key." -msgstr "트랙 경로가 잘못됐어요. 메서드 키를 추가할 수 없어요." +msgstr "트랙 경로가 올바르지 않아 메서드 키를 추가할 수 없습니다." #: editor/animation_track_editor.cpp msgid "Add Method Track Key" -msgstr "메서드 트랙 키 추가하기" +msgstr "메서드 트랙 키 추가" #: editor/animation_track_editor.cpp msgid "Method not found in object: " @@ -467,7 +468,7 @@ msgstr "객체에 메서드가 없음: " #: editor/animation_track_editor.cpp msgid "Anim Move Keys" -msgstr "애니메이션 키 이동하기" +msgstr "애니메이션 키 이동" #: editor/animation_track_editor.cpp msgid "Clipboard is empty" @@ -479,12 +480,13 @@ msgstr "트랙 붙여 넣기" #: editor/animation_track_editor.cpp msgid "Anim Scale Keys" -msgstr "애니메이션 키 크기 조절하기" +msgstr "애니메이션 키 크기 조절" #: editor/animation_track_editor.cpp msgid "" "This option does not work for Bezier editing, as it's only a single track." -msgstr "이 설정은 단일 트랙에만 해당되어서, 베지어 편집에 작동하지 않아요." +msgstr "" +"이 설정은 단일 트랙에만 적용 가능하므로 베지어 편집에 사용할 수 없습니다." #: editor/animation_track_editor.cpp msgid "" @@ -498,13 +500,13 @@ msgid "" "Alternatively, use an import preset that imports animations to separate " "files." msgstr "" -"이 애니메이션은 가져온 씬에 속해 있어요. 가져온 트랙의 변경 사항은 저장되지 " -"않아요.\n" +"이 애니메이션은 가져온 씬에 속해 있습니다. 가져온 트랙의 변경 사항은 저장되" +"지 않습니다.\n" "\n" "저장 기능을 켜려면 맞춤 트랙을 추가하고, 씬의 가져오기 설정으로 가서\n" "\"Animation > Storage\" 설정을 \"Files\"로, \"Animation > Keep Custom Tracks" -"\" 설정을 켠 뒤, 다시 가져오세요.\n" -"아니면 가져오기 프리셋으로 애니메이션을 별도의 파일로 가져올 수도 있어요." +"\" 설정을 켠 뒤, 다시 가져오십시오.\n" +"아니면 가져오기 프리셋으로 애니메이션을 별도의 파일로 가져올 수도 있습니다." #: editor/animation_track_editor.cpp msgid "Warning: Editing imported animation" @@ -516,11 +518,11 @@ msgstr "애니메이션을 만들고 편집하려면 AnimationPlayer노드를 � #: editor/animation_track_editor.cpp msgid "Only show tracks from nodes selected in tree." -msgstr "오직 트리에서 선택한 노드만 트랙에 표시돼요." +msgstr "트리에서 선택한 노드만 트랙에 표시됩니다." #: editor/animation_track_editor.cpp msgid "Group tracks by node or display them as plain list." -msgstr "노드 별로 트랙을 묶어서 보거나, 묶지 않고 나열해서 볼 수 있어요." +msgstr "노드 별로 트랙을 묶어서 보거나, 묶지 않고 나열해서 볼 수 있습니다." #: editor/animation_track_editor.cpp msgid "Snap:" @@ -546,7 +548,7 @@ msgstr "초당 프레임" #: editor/project_settings_editor.cpp editor/property_editor.cpp #: modules/visual_script/visual_script_editor.cpp msgid "Edit" -msgstr "편집하기" +msgstr "편집" #: editor/animation_track_editor.cpp msgid "Animation properties." @@ -554,43 +556,43 @@ msgstr "애니메이션 속성." #: editor/animation_track_editor.cpp msgid "Copy Tracks" -msgstr "트랙 복사하기" +msgstr "트랙 복사" #: editor/animation_track_editor.cpp msgid "Scale Selection" -msgstr "선택 항목 규모 조절하기" +msgstr "선택 항목 배율 조절" #: editor/animation_track_editor.cpp msgid "Scale From Cursor" -msgstr "커서 위치에서 규모 조절하기" +msgstr "커서 위치에서 배율 조절" #: editor/animation_track_editor.cpp modules/gridmap/grid_map_editor_plugin.cpp msgid "Duplicate Selection" -msgstr "선택 항목 복제하기" +msgstr "선택 항목 복제" #: editor/animation_track_editor.cpp msgid "Duplicate Transposed" -msgstr "선택된 트랙에 복제하기" +msgstr "선택된 트랙에 복제" #: editor/animation_track_editor.cpp msgid "Delete Selection" -msgstr "선택 항목 삭제하기" +msgstr "선택 항목 삭제" #: editor/animation_track_editor.cpp msgid "Go to Next Step" -msgstr "다음 단계로 이동하기" +msgstr "다음 단계로 이동" #: editor/animation_track_editor.cpp msgid "Go to Previous Step" -msgstr "이전 단계로 이동하기" +msgstr "이전 단계로 이동" #: editor/animation_track_editor.cpp msgid "Optimize Animation" -msgstr "애니메이션 최적화하기" +msgstr "애니메이션 최적화" #: editor/animation_track_editor.cpp msgid "Clean-Up Animation" -msgstr "애니메이션 정리하기" +msgstr "애니메이션 정리" #: editor/animation_track_editor.cpp msgid "Pick the node that will be animated:" @@ -598,19 +600,19 @@ msgstr "애니메이션을 줄 노드를 선택하세요:" #: editor/animation_track_editor.cpp msgid "Use Bezier Curves" -msgstr "베지어 곡선 사용하기" +msgstr "베지어 곡선 사용" #: editor/animation_track_editor.cpp msgid "Anim. Optimizer" -msgstr "애니메이션. 최적화" +msgstr "애니메이션 최적화" #: editor/animation_track_editor.cpp msgid "Max. Linear Error:" -msgstr "최대. 선형 오류:" +msgstr "최대 선형 오류:" #: editor/animation_track_editor.cpp msgid "Max. Angular Error:" -msgstr "최대. 각도 오류:" +msgstr "최대 각도 오류:" #: editor/animation_track_editor.cpp msgid "Max Optimizable Angle:" @@ -618,35 +620,35 @@ msgstr "최적화 가능한 최대 각도:" #: editor/animation_track_editor.cpp msgid "Optimize" -msgstr "최적화하기" +msgstr "최적화" #: editor/animation_track_editor.cpp msgid "Remove invalid keys" -msgstr "잘못된 키 삭제하기" +msgstr "잘못된 키 삭제" #: editor/animation_track_editor.cpp msgid "Remove unresolved and empty tracks" -msgstr "해결되지 않고 빈 트랙 삭제하기" +msgstr "해결되지 않고 빈 트랙 삭제" #: editor/animation_track_editor.cpp msgid "Clean-up all animations" -msgstr "모든 애니메이션 정리하기" +msgstr "모든 애니메이션 정리" #: editor/animation_track_editor.cpp msgid "Clean-Up Animation(s) (NO UNDO!)" -msgstr "애니메이션 정리하기 (되돌릴 수 없어요!)" +msgstr "애니메이션 정리 (되돌릴 수 없습니다!)" #: editor/animation_track_editor.cpp msgid "Clean-Up" -msgstr "정리하기" +msgstr "정리" #: editor/animation_track_editor.cpp msgid "Scale Ratio:" -msgstr "규모 비율:" +msgstr "배율값:" #: editor/animation_track_editor.cpp msgid "Select Tracks to Copy" -msgstr "복사할 트랙을 선택하기" +msgstr "복사할 트랙 선택" #: editor/animation_track_editor.cpp editor/editor_log.cpp #: editor/editor_properties.cpp @@ -655,15 +657,15 @@ msgstr "복사할 트랙을 선택하기" #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Copy" -msgstr "복사하기" +msgstr "복사" #: editor/animation_track_editor.cpp msgid "Select All/None" -msgstr "모두 선택하기/선택하지 않기" +msgstr "모두 선택/해제" #: editor/animation_track_editor_plugins.cpp msgid "Add Audio Track Clip" -msgstr "오디오 트랙 클립 추가하기" +msgstr "오디오 트랙 클립 추가" #: editor/animation_track_editor_plugins.cpp msgid "Change Audio Track Clip Start Offset" @@ -687,23 +689,24 @@ msgstr "배열 값 바꾸기" #: editor/code_editor.cpp msgid "Go to Line" -msgstr "행으로 이동하기" +msgstr "행으로 이동" #: editor/code_editor.cpp msgid "Line Number:" msgstr "행 번호:" #: editor/code_editor.cpp -msgid "Replaced %d occurrence(s)." -msgstr "%d개의 단어를 교체했어요." +#, fuzzy +msgid "%d replaced." +msgstr "바꾸기..." #: editor/code_editor.cpp editor/editor_help.cpp msgid "%d match." -msgstr "%d개가 일치해요." +msgstr "%d개 일치." #: editor/code_editor.cpp editor/editor_help.cpp msgid "%d matches." -msgstr "%d개가 일치해요." +msgstr "%d개 일치." #: editor/code_editor.cpp editor/find_in_files.cpp msgid "Match Case" @@ -711,19 +714,19 @@ msgstr "대소문자 구분" #: editor/code_editor.cpp editor/find_in_files.cpp msgid "Whole Words" -msgstr "전체 단어" +msgstr "단어 단위로" #: editor/code_editor.cpp editor/rename_dialog.cpp msgid "Replace" -msgstr "교체하기" +msgstr "바꾸기" #: editor/code_editor.cpp msgid "Replace All" -msgstr "모두 교체하기" +msgstr "모두 바꾸기" #: editor/code_editor.cpp msgid "Selection Only" -msgstr "선택 항목만" +msgstr "선택 영역만" #: editor/code_editor.cpp editor/plugins/script_text_editor.cpp #: editor/plugins/text_editor.cpp @@ -738,17 +741,17 @@ msgstr "스크립트 패널 토글" #: editor/plugins/texture_region_editor_plugin.cpp #: editor/plugins/tile_set_editor_plugin.cpp scene/gui/graph_edit.cpp msgid "Zoom In" -msgstr "확대하기" +msgstr "확대" #: editor/code_editor.cpp editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/texture_region_editor_plugin.cpp #: editor/plugins/tile_set_editor_plugin.cpp scene/gui/graph_edit.cpp msgid "Zoom Out" -msgstr "축소하기" +msgstr "축소" #: editor/code_editor.cpp msgid "Reset Zoom" -msgstr "확대 비율 원래대로" +msgstr "확대/축소 다시 설정" #: editor/code_editor.cpp msgid "Warnings" @@ -760,23 +763,23 @@ msgstr "행 및 열 번호." #: editor/connections_dialog.cpp msgid "Method in target node must be specified." -msgstr "대상 노드에서 메서드를 지정해야 해요." +msgstr "대상 노드에 있는 메서드는 반드시 지정해야 합니다." #: editor/connections_dialog.cpp msgid "" "Target method not found. Specify a valid method or attach a script to the " "target node." msgstr "" -"대상 메서드를 찾을 수 없어요. 올바른 메서드를 지정하거나 대상 노드에 스크립트" -"를 붙여보세요." +"대상 메서드를 찾을 수 없습니다. 올바른 메서드를 지정하거나 대상 노드에 스크립" +"트를 붙여보세요." #: editor/connections_dialog.cpp msgid "Connect to Node:" -msgstr "이 노드에 연결됨:" +msgstr "이 노드에 연결:" #: editor/connections_dialog.cpp msgid "Connect to Script:" -msgstr "이 스크립트에 연결됨:" +msgstr "이 스크립트에 연결:" #: editor/connections_dialog.cpp msgid "From Signal:" @@ -784,13 +787,13 @@ msgstr "이 시그널에서:" #: editor/connections_dialog.cpp msgid "Scene does not contain any script." -msgstr "씬이 어떤 스크립트도 갖고 있지 않아요." +msgstr "씬에 스크립트가 없습니다." #: editor/connections_dialog.cpp editor/editor_autoload_settings.cpp #: editor/groups_editor.cpp editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp msgid "Add" -msgstr "추가하기" +msgstr "추가" #: editor/connections_dialog.cpp editor/dependency_editor.cpp #: editor/editor_feature_profile.cpp editor/groups_editor.cpp @@ -801,11 +804,11 @@ msgstr "추가하기" #: editor/plugins/visual_shader_editor_plugin.cpp editor/project_manager.cpp #: editor/project_settings_editor.cpp msgid "Remove" -msgstr "삭제하기" +msgstr "삭제" #: editor/connections_dialog.cpp msgid "Add Extra Call Argument:" -msgstr "별도의 호출 인수 추가하기:" +msgstr "별도의 호출 인수 추가:" #: editor/connections_dialog.cpp msgid "Extra Call Arguments:" @@ -827,7 +830,8 @@ msgstr "지연" msgid "" "Defers the signal, storing it in a queue and only firing it at idle time." msgstr "" -"시그널을 지연하면, 시그널은 큐에 저장되기 때문에 대기 시간에만 방출해요." +"시그널을 지연합니다. 지연된 시그널은 큐에 보관되었다가 대기 상태가 되면 발생" +"됩니다." #: editor/connections_dialog.cpp msgid "Oneshot" @@ -835,7 +839,7 @@ msgstr "1회" #: editor/connections_dialog.cpp msgid "Disconnects the signal after its first emission." -msgstr "처음 방출하면 시그널 연결을 풀어버려요." +msgstr "시그널이 처음 발생된 이후 시그널의 연결을 끊습니다." #: editor/connections_dialog.cpp msgid "Cannot connect signal" @@ -866,32 +870,32 @@ msgstr "시그널:" #: editor/connections_dialog.cpp msgid "Connect '%s' to '%s'" -msgstr "'%s'을(를) '%s'에 연결하기" +msgstr "'%s'을(를) '%s'에 연결" #: editor/connections_dialog.cpp msgid "Disconnect '%s' from '%s'" -msgstr "'%s'을(를) '%s'에서 연결 풀기" +msgstr "'%s'을(를) '%s'에서 연결 끊기" #: editor/connections_dialog.cpp msgid "Disconnect all from signal: '%s'" -msgstr "모두 시그널에서 연결 풀기: '%s'" +msgstr "모두 시그널에서 연결 끊기: '%s'" #: editor/connections_dialog.cpp msgid "Connect..." -msgstr "연결하기..." +msgstr "연결..." #: editor/connections_dialog.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Disconnect" -msgstr "연결 풀기" +msgstr "연결 끊기" #: editor/connections_dialog.cpp msgid "Connect a Signal to a Method" -msgstr "시그널을 메서드에 연결하기" +msgstr "시그널을 메서드에 연결" #: editor/connections_dialog.cpp msgid "Edit Connection:" -msgstr "연결 편집하기:" +msgstr "연결 변경:" #: editor/connections_dialog.cpp msgid "Are you sure you want to remove all connections from the \"%s\" signal?" @@ -899,7 +903,7 @@ msgstr "\"%s\" 시그널의 모든 연결을 삭제할까요?" #: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp msgid "Signals" -msgstr "시그널(Signal)" +msgstr "시그널" #: editor/connections_dialog.cpp msgid "Are you sure you want to remove all connections from this signal?" @@ -907,19 +911,19 @@ msgstr "이 시그널의 모든 연결을 삭제할까요?" #: editor/connections_dialog.cpp msgid "Disconnect All" -msgstr "모두 연결 풀기" +msgstr "연결 모두 끊기" #: editor/connections_dialog.cpp msgid "Edit..." -msgstr "편집하기..." +msgstr "편집..." #: editor/connections_dialog.cpp msgid "Go To Method" -msgstr "메서드로 이동하기" +msgstr "메서드로 이동" #: editor/create_dialog.cpp msgid "Change %s Type" -msgstr "%s(으)로 유형 바꾸기" +msgstr "%s 유형 바꾸기" #: editor/create_dialog.cpp editor/project_settings_editor.cpp msgid "Change" @@ -942,7 +946,7 @@ msgstr "최근 기록:" #: editor/property_selector.cpp editor/quick_open.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Search:" -msgstr "검색하기:" +msgstr "검색:" #: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp #: editor/property_selector.cpp editor/quick_open.cpp @@ -960,7 +964,7 @@ msgstr "설명:" #: editor/dependency_editor.cpp msgid "Search Replacement For:" -msgstr "교체할 대상 찾기:" +msgstr "바꿀 대상 찾기:" #: editor/dependency_editor.cpp msgid "Dependencies For:" @@ -971,16 +975,16 @@ msgid "" "Scene '%s' is currently being edited.\n" "Changes will only take effect when reloaded." msgstr "" -"씬 '%s'을(를) 편집하고 있어요.\n" -"다시 불러와야 변경 사항이 적용돼요." +"씬 '%s'이(가) 현재 편집중입니다.\n" +"변경 사항은 다시 로드된 뒤에 반영됩니다." #: editor/dependency_editor.cpp msgid "" "Resource '%s' is in use.\n" "Changes will only take effect when reloaded." msgstr "" -"리소스 '%s'을(를) 사용하고 있어요.\n" -"다시 불러와야 변경 사항이 적용돼요." +"리소스 '%s'이(가) 현재 사용중입니다.\n" +"변경 사항은 다시 로드된 뒤에 반영됩니다." #: editor/dependency_editor.cpp #: modules/gdnative/gdnative_library_editor_plugin.cpp @@ -994,7 +998,7 @@ msgstr "리소스" #: editor/dependency_editor.cpp editor/editor_autoload_settings.cpp #: editor/project_manager.cpp editor/project_settings_editor.cpp msgid "Path" -msgstr "Path(경로)" +msgstr "경로" #: editor/dependency_editor.cpp msgid "Dependencies:" @@ -1010,7 +1014,7 @@ msgstr "종속 관계 편집기" #: editor/dependency_editor.cpp msgid "Search Replacement Resource:" -msgstr "대체 리소스 검색하기:" +msgstr "대체 리소스 검색:" #: editor/dependency_editor.cpp editor/editor_file_dialog.cpp #: editor/editor_help_search.cpp editor/editor_node.cpp @@ -1028,7 +1032,7 @@ msgstr "소유자:" #: editor/dependency_editor.cpp msgid "Remove selected files from the project? (Can't be restored)" -msgstr "프로젝트에서 선택한 파일을 삭제할까요? (되돌릴 수 없어요)" +msgstr "프로젝트에서 선택한 파일을 삭제할까요? (되돌릴 수 없습니다)" #: editor/dependency_editor.cpp msgid "" @@ -1036,8 +1040,8 @@ msgid "" "work.\n" "Remove them anyway? (no undo)" msgstr "" -"삭제하려는 파일은 작업을 위해 다른 리소스에서 필요한 파일이에요.\n" -"무시하고 삭제할 건가요? (되돌릴 수 없어요)" +"삭제하려는 파일은 다른 리소스가 동작하기 위해 필요한 파일입니다.\n" +"무시하고 삭제할까요? (되돌릴 수 없습니다)" #: editor/dependency_editor.cpp msgid "Cannot remove:" @@ -1045,7 +1049,7 @@ msgstr "삭제할 수 없음:" #: editor/dependency_editor.cpp msgid "Error loading:" -msgstr "불러오는 중 오류:" +msgstr "불러오기 오류:" #: editor/dependency_editor.cpp msgid "Load failed due to missing dependencies:" @@ -1057,7 +1061,7 @@ msgstr "무시하고 열기" #: editor/dependency_editor.cpp msgid "Which action should be taken?" -msgstr "어떤 작업을 할 건가요?" +msgstr "어떤 작업을 하시겠습니까?" #: editor/dependency_editor.cpp msgid "Fix Dependencies" @@ -1065,11 +1069,11 @@ msgstr "종속 관계 고치기" #: editor/dependency_editor.cpp msgid "Errors loading!" -msgstr "불러오는 중 오류!" +msgstr "불러오기 오류!" #: editor/dependency_editor.cpp msgid "Permanently delete %d item(s)? (No undo!)" -msgstr "%d개의 항목을 영구적으로 삭제할까요? (되돌릴 수 없어요!)" +msgstr "%d개의 항목을 영구적으로 삭제할까요? (되돌릴 수 없습니다!)" #: editor/dependency_editor.cpp msgid "Show Dependencies" @@ -1085,7 +1089,7 @@ msgstr "미사용 리소스 탐색기" #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" -msgstr "삭제하기" +msgstr "삭제" #: editor/dependency_editor.cpp msgid "Owns" @@ -1097,15 +1101,15 @@ msgstr "명확한 소유 관계가 없는 리소스:" #: editor/dictionary_property_edit.cpp msgid "Change Dictionary Key" -msgstr "디렉토리 키 변경하기" +msgstr "딕셔너리 키 변경" #: editor/dictionary_property_edit.cpp msgid "Change Dictionary Value" -msgstr "디렉토리 값 변경하기" +msgstr "딕셔너리 값 변경" #: editor/editor_about.cpp msgid "Thanks from the Godot community!" -msgstr "Godot 커뮤니티의 감사의 말씀!" +msgstr "Godot 커뮤니티에서 감사드립니다!" #: editor/editor_about.cpp msgid "Godot Engine contributors" @@ -1192,7 +1196,7 @@ msgstr "라이선스" #: editor/editor_asset_installer.cpp editor/project_manager.cpp msgid "Error opening package file, not in ZIP format." -msgstr "패키지 파일을 여는 중 오류. ZIP 형식이 아니에요." +msgstr "패키지 파일을 여는 중 오류. ZIP 형식이 아닙니다." #: editor/editor_asset_installer.cpp msgid "%s (Already Exists)" @@ -1212,7 +1216,7 @@ msgstr "외 %d 개의 파일." #: editor/editor_asset_installer.cpp editor/project_manager.cpp msgid "Package installed successfully!" -msgstr "패키지를 성공적으로 설치했어요!" +msgstr "패키지를 성공적으로 설치했습니다!" #: editor/editor_asset_installer.cpp #: editor/plugins/asset_library_editor_plugin.cpp @@ -1225,7 +1229,7 @@ msgstr "패키지 내용:" #: editor/editor_asset_installer.cpp editor/editor_node.cpp msgid "Install" -msgstr "설치하기" +msgstr "설치" #: editor/editor_asset_installer.cpp msgid "Package Installer" @@ -1237,7 +1241,7 @@ msgstr "스피커" #: editor/editor_audio_buses.cpp msgid "Add Effect" -msgstr "효과 추가하기" +msgstr "효과 추가" #: editor/editor_audio_buses.cpp msgid "Rename Audio Bus" @@ -1261,23 +1265,23 @@ msgstr "오디오 버스 바이패스 효과 토글" #: editor/editor_audio_buses.cpp msgid "Select Audio Bus Send" -msgstr "오디오 버스 전송 선택하기" +msgstr "오디오 버스 전송 선택" #: editor/editor_audio_buses.cpp msgid "Add Audio Bus Effect" -msgstr "오디오 버스 효과 추가하기" +msgstr "오디오 버스 효과 추가" #: editor/editor_audio_buses.cpp msgid "Move Bus Effect" -msgstr "버스 효과 이동하기" +msgstr "버스 효과 이동" #: editor/editor_audio_buses.cpp msgid "Delete Bus Effect" -msgstr "버스 효과 삭제하기" +msgstr "버스 효과 삭제" #: editor/editor_audio_buses.cpp msgid "Drag & drop to rearrange." -msgstr "드래그 & 드롭으로 다시 정렬해요." +msgstr "드래그 & 드롭으로 다시 정렬합니다." #: editor/editor_audio_buses.cpp msgid "Solo" @@ -1298,47 +1302,47 @@ msgstr "버스 설정" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp #: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Duplicate" -msgstr "복제하기" +msgstr "복제" #: editor/editor_audio_buses.cpp msgid "Reset Volume" -msgstr "볼륨 리셋" +msgstr "볼륨 초기화" #: editor/editor_audio_buses.cpp msgid "Delete Effect" -msgstr "효과 삭제하기" +msgstr "효과 삭제" #: editor/editor_audio_buses.cpp msgid "Audio" -msgstr "오디오(Audio)" +msgstr "오디오" #: editor/editor_audio_buses.cpp msgid "Add Audio Bus" -msgstr "오디오 버스 추가하기" +msgstr "오디오 버스 추가" #: editor/editor_audio_buses.cpp msgid "Master bus can't be deleted!" -msgstr "마스터 버스는 삭제할 수 없어요!" +msgstr "마스터 버스는 삭제할 수 없습니다!" #: editor/editor_audio_buses.cpp msgid "Delete Audio Bus" -msgstr "오디오 버스 삭제하기" +msgstr "오디오 버스 삭제" #: editor/editor_audio_buses.cpp msgid "Duplicate Audio Bus" -msgstr "오디오 버스 복제하기" +msgstr "오디오 버스 복제" #: editor/editor_audio_buses.cpp msgid "Reset Bus Volume" -msgstr "버스 볼륨 리셋하기" +msgstr "버스 볼륨 초기화" #: editor/editor_audio_buses.cpp msgid "Move Audio Bus" -msgstr "오디오 버스 이동하기" +msgstr "오디오 버스 이동" #: editor/editor_audio_buses.cpp msgid "Save Audio Bus Layout As..." -msgstr "오디오 버스 레이아웃을 다른 이름으로 저장하기..." +msgstr "오디오 버스 레이아웃을 다른 이름으로 저장..." #: editor/editor_audio_buses.cpp msgid "Location for New Layout..." @@ -1350,7 +1354,7 @@ msgstr "오디오 버스 레이아웃 열기" #: editor/editor_audio_buses.cpp msgid "There is no '%s' file." -msgstr "'%s' 파일이 없어요." +msgstr "'%s' 파일이 없습니다." #: editor/editor_audio_buses.cpp editor/plugins/canvas_item_editor_plugin.cpp msgid "Layout" @@ -1358,7 +1362,7 @@ msgstr "레이아웃" #: editor/editor_audio_buses.cpp msgid "Invalid file, not an audio bus layout." -msgstr "잘못된 파일. 오디오 버스 레이아웃이 아니에요." +msgstr "잘못된 파일. 오디오 버스 레이아웃이 아닙니다." #: editor/editor_audio_buses.cpp msgid "Error saving file: %s" @@ -1366,11 +1370,11 @@ msgstr "파일 저장 중 오류: %s" #: editor/editor_audio_buses.cpp msgid "Add Bus" -msgstr "버스 추가하기" +msgstr "버스 추가" #: editor/editor_audio_buses.cpp msgid "Add a new Audio Bus to this layout." -msgstr "이 레이아웃에 새 오디오 버스를 추가해요." +msgstr "이 레이아웃에 새 오디오 버스를 추가합니다." #: editor/editor_audio_buses.cpp editor/editor_properties.cpp #: editor/plugins/animation_player_editor_plugin.cpp editor/property_editor.cpp @@ -1380,15 +1384,15 @@ msgstr "불러오기" #: editor/editor_audio_buses.cpp msgid "Load an existing Bus Layout." -msgstr "존재하는 버스 레이아웃을 불러와요." +msgstr "기존에 있던 버스 레이아웃을 불러옵니다." #: editor/editor_audio_buses.cpp msgid "Save As" -msgstr "다른 이름으로 저장하기" +msgstr "다른 이름으로 저장" #: editor/editor_audio_buses.cpp msgid "Save this Bus Layout to a file." -msgstr "이 버스 레이아웃을 파일로 저장해요..." +msgstr "이 버스 레이아웃을 파일로 저장합니다." #: editor/editor_audio_buses.cpp editor/import_dock.cpp msgid "Load Default" @@ -1396,15 +1400,15 @@ msgstr "기본값 불러오기" #: editor/editor_audio_buses.cpp msgid "Load the default Bus Layout." -msgstr "기본 버스 레이아웃을 불러와요." +msgstr "기본 버스 레이아웃을 불러옵니다." #: editor/editor_audio_buses.cpp msgid "Create a new Bus Layout." -msgstr "새로운 버스 레이아웃을 만들어요." +msgstr "새로운 버스 레이아웃을 만듭니다." #: editor/editor_autoload_settings.cpp msgid "Invalid name." -msgstr "잘못된 이름이에요." +msgstr "올바르지 않은 이름입니다." #: editor/editor_autoload_settings.cpp msgid "Valid characters:" @@ -1412,23 +1416,23 @@ msgstr "올바른 문자:" #: editor/editor_autoload_settings.cpp msgid "Must not collide with an existing engine class name." -msgstr "엔진에 있는 클래스 이름과 같으면 안돼요." +msgstr "엔진에 이미 있는 클래스 이름과 겹치지 않아야 합니다." #: editor/editor_autoload_settings.cpp msgid "Must not collide with an existing built-in type name." -msgstr "내장으로 있는 유형의 이름과 같으면 안돼요." +msgstr "기본 자료형과 이름과 겹치지 않아야 합니다." #: editor/editor_autoload_settings.cpp msgid "Must not collide with an existing global constant name." -msgstr "전역으로 있는 상수 이름과 같으면 안돼요." +msgstr "전역 상수와 이름이 겹치지 않아야 합니다." #: editor/editor_autoload_settings.cpp msgid "Keyword cannot be used as an autoload name." -msgstr "키워드를 오토로드 이름으로 쓸 수 없어요." +msgstr "키워드를 오토로드 이름으로 사용할 수 없습니다." #: editor/editor_autoload_settings.cpp msgid "Autoload '%s' already exists!" -msgstr "오토로드 '%s'이(가) 이미 있어요!" +msgstr "오토로드 '%s'이(가) 이미 있습니다!" #: editor/editor_autoload_settings.cpp msgid "Rename Autoload" @@ -1436,15 +1440,15 @@ msgstr "오토로드 이름 바꾸기" #: editor/editor_autoload_settings.cpp msgid "Toggle AutoLoad Globals" -msgstr "오토로드 전역 토글" +msgstr "전역 오토로드 토글" #: editor/editor_autoload_settings.cpp msgid "Move Autoload" -msgstr "오토로드 이동하기" +msgstr "오토로드 이동" #: editor/editor_autoload_settings.cpp msgid "Remove Autoload" -msgstr "오토로드 삭제하기" +msgstr "오토로드 삭제" #: editor/editor_autoload_settings.cpp msgid "Enable" @@ -1452,23 +1456,23 @@ msgstr "켜기" #: editor/editor_autoload_settings.cpp msgid "Rearrange Autoloads" -msgstr "오토로드 다시 정렬하기" +msgstr "오토로드 다시 정렬" #: editor/editor_autoload_settings.cpp editor/script_create_dialog.cpp msgid "Invalid path." -msgstr "잘못된 경로이에요." +msgstr "올바르지 않은 경로입니다." #: editor/editor_autoload_settings.cpp editor/script_create_dialog.cpp msgid "File does not exist." -msgstr "파일이 없어요." +msgstr "파일이 존재하지 않습니다." #: editor/editor_autoload_settings.cpp msgid "Not in resource path." -msgstr "리소스 경로가 아니에요." +msgstr "리소스 경로에 없습니다." #: editor/editor_autoload_settings.cpp msgid "Add AutoLoad" -msgstr "오토로드 추가하기" +msgstr "오토로드 추가" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp #: editor/editor_plugin_settings.cpp @@ -1535,30 +1539,30 @@ msgstr "이름:" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp #: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp msgid "Could not create folder." -msgstr "폴더를 만들 수 없어요." +msgstr "폴더를 만들 수 없습니다." #: editor/editor_dir_dialog.cpp msgid "Choose" -msgstr "선택하기" +msgstr "선택" #: editor/editor_export.cpp msgid "Storing File:" -msgstr "파일 저장하기:" +msgstr "저장하려는 파일:" #: editor/editor_export.cpp msgid "No export template found at the expected path:" -msgstr "예상 경로에서 내보낸 템플릿을 찾을 수 없어요:" +msgstr "예상 경로에서 내보내기 템플릿을 찾을 수 없습니다:" #: editor/editor_export.cpp msgid "Packing" -msgstr "포장하기" +msgstr "묶는 중" #: editor/editor_export.cpp msgid "" "Target platform requires 'ETC' texture compression for GLES2. Enable 'Import " "Etc' in Project Settings." msgstr "" -"대상 플랫폼에서는 GLES2 용 'ETC' 텍스처 압축이 필요해요. 프로젝트 설정에서 " +"대상 플랫폼에서 GLES2 용 'ETC' 텍스처 압축이 필요합니다. 프로젝트 설정에서 " "'Import Etc' 설정을 켜세요." #: editor/editor_export.cpp @@ -1566,7 +1570,7 @@ msgid "" "Target platform requires 'ETC2' texture compression for GLES3. Enable " "'Import Etc 2' in Project Settings." msgstr "" -"대상 플랫폼에서는 GLES3 용 'ETC2' 텍스처 압축이 필요해요. 프로젝트 설정에서 " +"대상 플랫폼에서 GLES3 용 'ETC2' 텍스처 압축이 필요합니다. 프로젝트 설정에서 " "'Import Etc 2' 설정을 켜세요." #: editor/editor_export.cpp @@ -1576,29 +1580,29 @@ msgid "" "Enable 'Import Etc' in Project Settings, or disable 'Driver Fallback " "Enabled'." msgstr "" -"대상 플랫폼은 드라이버가 GLES2로 폴백하기 위해 'ETC' 텍스처 압축이 필요해요. " -"프로젝트 설정에서 'Import Etc' 설정을 켜거나, 'Driver Fallback Enabled' 설정" -"을 끄세요." +"대상 플랫폼에서 드라이버가 GLES2로 폴백하기 위해 'ETC' 텍스처 압축이 필요합니" +"다. 프로젝트 설정에서 'Import Etc' 설정을 켜거나, 'Driver Fallback Enabled' " +"설정을 끄세요." #: editor/editor_export.cpp platform/android/export/export.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom debug template not found." -msgstr "맞춤 디버그 템플릿을 찾을 수 없어요." +msgstr "사용자 지정 디버그 템플릿을 찾을 수 없습니다." #: editor/editor_export.cpp platform/android/export/export.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom release template not found." -msgstr "맞춤 출시 템플릿을 찾을 수 없어요." +msgstr "사용자 지정 출시 템플릿을 찾을 수 없습니다." #: editor/editor_export.cpp platform/javascript/export/export.cpp msgid "Template file not found:" -msgstr "템플릿 파일을 찾을 수 없어요:" +msgstr "템플릿 파일을 찾을 수 없습니다:" #: editor/editor_export.cpp msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB." -msgstr "32비트 환경에서는 4 GiB보다 큰 내장된 PCK를 내보낼 수 없어요." +msgstr "32비트 환경에서는 4 GiB보다 큰 내장 PCK를 내보낼 수 없습니다." #: editor/editor_feature_profile.cpp msgid "3D Editor" @@ -1614,7 +1618,7 @@ msgstr "애셋 라이브러리" #: editor/editor_feature_profile.cpp msgid "Scene Tree Editing" -msgstr "씬 트리 편집하기" +msgstr "씬 트리 편집" #: editor/editor_feature_profile.cpp msgid "Import Dock" @@ -1622,7 +1626,7 @@ msgstr "독 가져오기" #: editor/editor_feature_profile.cpp msgid "Node Dock" -msgstr "노드 독" +msgstr "노드 도킹" #: editor/editor_feature_profile.cpp msgid "FileSystem and Import Docks" @@ -1630,15 +1634,15 @@ msgstr "파일 시스템과 가져오기 독" #: editor/editor_feature_profile.cpp msgid "Erase profile '%s'? (no undo)" -msgstr "프로필 '%s'을(를) 지울까요? (되돌릴 수 없어요)" +msgstr "프로필 '%s'을(를) 지울까요? (되돌릴 수 없습니다)" #: editor/editor_feature_profile.cpp msgid "Profile must be a valid filename and must not contain '.'" -msgstr "프로필에는 올바른 파일 이름이면서, '.'이 없어야 해요" +msgstr "프로필 이름은 '.' 이 없는 올바른 파일 이름이어야 합니다" #: editor/editor_feature_profile.cpp msgid "Profile with this name already exists." -msgstr "이 이름으로 된 프로필이 이미 있어요." +msgstr "이 이름으로 된 프로필이 이미 있습니다." #: editor/editor_feature_profile.cpp msgid "(Editor Disabled, Properties Disabled)" @@ -1658,7 +1662,7 @@ msgstr "클래스 설정:" #: editor/editor_feature_profile.cpp msgid "Enable Contextual Editor" -msgstr "맥락 편집기 켜기" +msgstr "상황별 편집기 켜기" #: editor/editor_feature_profile.cpp msgid "Enabled Properties:" @@ -1674,15 +1678,15 @@ msgstr "켜진 클래스:" #: editor/editor_feature_profile.cpp msgid "File '%s' format is invalid, import aborted." -msgstr "파일 '%s' 형식이 잘못됐어요. 가져올 수 없어요." +msgstr "파일 '%s' 형식이 올바르지 않습니다. 가져오기를 중단합니다." #: editor/editor_feature_profile.cpp msgid "" "Profile '%s' already exists. Remove it first before importing, import " "aborted." msgstr "" -"프로필 '%s'이(가) 이미 있어요. 가져오기 전에 이미 있는 프로필을 먼저 삭제하세" -"요. 가져올 수 없어요." +"프로필 '%s'이(가) 이미 있습니다. 가져오기 전에 이미 있는 프로필을 먼저 삭제하" +"세요. 가져오기를 중단합니다." #: editor/editor_feature_profile.cpp msgid "Error saving profile to path: '%s'." @@ -1698,7 +1702,7 @@ msgstr "현재 프로필:" #: editor/editor_feature_profile.cpp msgid "Make Current" -msgstr "현재의 것으로 만들기" +msgstr "현재 프로필로 설정" #: editor/editor_feature_profile.cpp #: editor/plugins/animation_player_editor_plugin.cpp @@ -1745,23 +1749,23 @@ msgstr "프로필 내보내기" #: editor/editor_feature_profile.cpp msgid "Manage Editor Feature Profiles" -msgstr "편집기 기능 프로필 관리하기" +msgstr "편집기 기능 프로필 관리" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Select Current Folder" -msgstr "현재 폴더 선택하기" +msgstr "현재 폴더 선택" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File Exists, Overwrite?" -msgstr "파일이 이미 있어요. 덮어쓸까요?" +msgstr "파일이 이미 있습니다. 덮어쓸까요?" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Select This Folder" -msgstr "이 폴더 선택하기" +msgstr "이 폴더 선택" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "Copy Path" -msgstr "경로 복사하기" +msgstr "경로 복사" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "Open in File Manager" @@ -1810,23 +1814,23 @@ msgstr "디렉토리 또는 파일 열기" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp scene/gui/file_dialog.cpp msgid "Save" -msgstr "저장하기" +msgstr "저장" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Save a File" -msgstr "파일로 저장하기" +msgstr "파일로 저장" #: editor/editor_file_dialog.cpp msgid "Go Back" -msgstr "뒤로 가기" +msgstr "뒤로" #: editor/editor_file_dialog.cpp msgid "Go Forward" -msgstr "앞으로 가기" +msgstr "앞으로" #: editor/editor_file_dialog.cpp msgid "Go Up" -msgstr "위로 가기" +msgstr "상위로" #: editor/editor_file_dialog.cpp msgid "Toggle Hidden Files" @@ -1846,43 +1850,43 @@ msgstr "경로 포커스" #: editor/editor_file_dialog.cpp msgid "Move Favorite Up" -msgstr "즐겨찾기 위로 이동하기" +msgstr "즐겨찾기 위로 이동" #: editor/editor_file_dialog.cpp msgid "Move Favorite Down" -msgstr "즐겨찾기 아래로 이동하기" +msgstr "즐겨찾기 아래로 이동" #: editor/editor_file_dialog.cpp msgid "Go to previous folder." -msgstr "이전 폴더로 이동해요." +msgstr "이전 폴더로 이동합니다." #: editor/editor_file_dialog.cpp msgid "Go to next folder." -msgstr "다음 폴더로 이동해요." +msgstr "다음 폴더로 이동합니다." #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Go to parent folder." -msgstr "부모 폴더로 이동해요." +msgstr "부모 폴더로 이동합니다." #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Refresh files." -msgstr "파일을 새로고침해요." +msgstr "파일을 새로고침합니다." #: editor/editor_file_dialog.cpp msgid "(Un)favorite current folder." -msgstr "현재 폴더를 즐겨찾기하거나 하지 않아요." +msgstr "현재 폴더를 즐겨찾기 설정/즐겨찾기 해제합니다." #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Toggle the visibility of hidden files." -msgstr "숨긴 파일의 표시 여부 토글." +msgstr "숨긴 파일의 표시 여부를 토글합니다." #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "View items as a grid of thumbnails." -msgstr "썸네일 바둑판으로 보기." +msgstr "항목을 바둑판 형식의 썸네일로 봅니다." #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "View items as a list." -msgstr "목록으로 보기." +msgstr "항목을 목록 형식으로 봅니다." #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Directories & Files:" @@ -1900,17 +1904,17 @@ msgstr "파일:" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Must use a valid extension." -msgstr "올바른 확장자를 사용해야 해요." +msgstr "올바른 확장자를 사용해야 합니다." #: editor/editor_file_system.cpp msgid "ScanSources" -msgstr "소스 조사" +msgstr "소스 스캔중" #: editor/editor_file_system.cpp msgid "" "There are multiple importers for different types pointing to file %s, import " "aborted" -msgstr "파일 %s을(를) 가리키는 다른 유형의 가져오기가 많아요. 가져올 수 없어요" +msgstr "파일 % 에 해당하는 가져오기 포맷이 여러 종류입니다. 가져오기 중단됨" #: editor/editor_file_system.cpp msgid "(Re)Importing Assets" @@ -1947,7 +1951,7 @@ msgstr "속성" #: editor/editor_help.cpp msgid "override:" -msgstr "다시 정의하기:" +msgstr "오버라이드:" #: editor/editor_help.cpp msgid "default:" @@ -1963,11 +1967,11 @@ msgstr "테마 속성" #: editor/editor_help.cpp msgid "Enumerations" -msgstr "열거" +msgstr "열거형" #: editor/editor_help.cpp msgid "Constants" -msgstr "상수(Constant)" +msgstr "상수" #: editor/editor_help.cpp msgid "Property Descriptions" @@ -1982,8 +1986,8 @@ msgid "" "There is currently no description for this property. Please help us by " "[color=$color][url=$url]contributing one[/url][/color]!" msgstr "" -"현재 이 속성의 설명이 없어요. [color=$color][url=$url]관련 정보를 기여하여[/" -"url][/color] 개선할 수 있도록 도와주세요!" +"현재 이 속성의 설명이 없습니다. [color=$color][url=$url]관련 정보를 기여하여" +"[/url][/color] 개선할 수 있도록 도와주세요!" #: editor/editor_help.cpp msgid "Method Descriptions" @@ -1994,8 +1998,8 @@ msgid "" "There is currently no description for this method. Please help us by [color=" "$color][url=$url]contributing one[/url][/color]!" msgstr "" -"현재 이 메서드의 설명이 없어요. [color=$color][url=$url]관련 정보를 기여하여" -"[/url][/color] 개선할 수 있도록 도와주세요!" +"현재 이 메서드의 설명이 없습니다. [color=$color][url=$url]관련 정보를 기여하" +"여[/url][/color] 개선할 수 있도록 도와주세요!" #: editor/editor_help_search.cpp editor/editor_node.cpp #: editor/plugins/script_editor_plugin.cpp @@ -2012,31 +2016,31 @@ msgstr "계층 구조 보이기" #: editor/editor_help_search.cpp msgid "Display All" -msgstr "모두 표시하기" +msgstr "모두 표시" #: editor/editor_help_search.cpp msgid "Classes Only" -msgstr "클래스만 표시하기" +msgstr "클래스만 표시" #: editor/editor_help_search.cpp msgid "Methods Only" -msgstr "메서드만 표시하기" +msgstr "메서드만 표시" #: editor/editor_help_search.cpp msgid "Signals Only" -msgstr "시그널만 표시하기" +msgstr "시그널만 표시" #: editor/editor_help_search.cpp msgid "Constants Only" -msgstr "상수만 표시하기" +msgstr "상수만 표시" #: editor/editor_help_search.cpp msgid "Properties Only" -msgstr "속성만 표시하기" +msgstr "속성만 표시" #: editor/editor_help_search.cpp msgid "Theme Properties Only" -msgstr "테마 속성만 표시하기" +msgstr "테마 속성만 표시" #: editor/editor_help_search.cpp msgid "Member Type" @@ -2056,7 +2060,7 @@ msgstr "시그널" #: editor/editor_help_search.cpp editor/plugins/theme_editor_plugin.cpp msgid "Constant" -msgstr "비선형" +msgstr "상수" #: editor/editor_help_search.cpp msgid "Property" @@ -2076,7 +2080,7 @@ msgstr "설정" #: editor/editor_inspector.cpp msgid "Set Multiple:" -msgstr "여러 설정:" +msgstr "다수 설정:" #: editor/editor_log.cpp msgid "Output:" @@ -2084,7 +2088,7 @@ msgstr "출력:" #: editor/editor_log.cpp editor/plugins/tile_map_editor_plugin.cpp msgid "Copy Selection" -msgstr "선택 항목 복사하기" +msgstr "선택 항목 복사" #: editor/editor_log.cpp editor/editor_network_profiler.cpp #: editor/editor_profiler.cpp editor/editor_properties.cpp @@ -2103,12 +2107,12 @@ msgstr "출력 지우기" #: editor/editor_network_profiler.cpp editor/editor_node.cpp #: editor/editor_profiler.cpp msgid "Stop" -msgstr "중단하기" +msgstr "중단" #: editor/editor_network_profiler.cpp editor/editor_profiler.cpp #: editor/plugins/animation_state_machine_editor.cpp editor/rename_dialog.cpp msgid "Start" -msgstr "시작하기" +msgstr "시작" #: editor/editor_network_profiler.cpp msgid "%s/s" @@ -2148,12 +2152,12 @@ msgstr "새 창" #: editor/editor_node.cpp msgid "Imported resources can't be saved." -msgstr "가져온 리소스를 저장할 수 없어요." +msgstr "가져온 리소스를 저장할 수 없습니다." #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp #: scene/gui/dialogs.cpp msgid "OK" -msgstr "네" +msgstr "확인" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Error saving resource!" @@ -2164,16 +2168,16 @@ msgid "" "This resource can't be saved because it does not belong to the edited scene. " "Make it unique first." msgstr "" -"이 리소스는 편집 중인 씬에 속한 것이 아니라서 저장할 수 없어요. 저장하기 전" +"이 리소스는 편집 중인 씬에 속한 것이 아니라서 저장할 수 없습니다. 저장하기 전" "에 먼저 리소스를 유일하게 만드세요." #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Save Resource As..." -msgstr "리소스를 다른 이름으로 저장하기..." +msgstr "리소스를 다른 이름으로 저장..." #: editor/editor_node.cpp msgid "Can't open file for writing:" -msgstr "파일을 작성하려고 열 수 없음:" +msgstr "파일을 쓰기 모드로 열 수 없음:" #: editor/editor_node.cpp msgid "Requested file format unknown:" @@ -2185,7 +2189,7 @@ msgstr "저장 중 오류." #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp msgid "Can't open '%s'. The file could have been moved or deleted." -msgstr "'%s'을(를) 열 수 없어요. 파일이 이동했거나 삭제된 모양이에요." +msgstr "'%s'을(를) 열 수 없습니다. 파일이 이동했거나 삭제되었을 수 있습니다." #: editor/editor_node.cpp msgid "Error while parsing '%s'." @@ -2197,7 +2201,7 @@ msgstr "예기치 못한 '%s' 파일의 끝." #: editor/editor_node.cpp msgid "Missing '%s' or its dependencies." -msgstr "'%s' 또는 이것의 종속 항목이 없어요." +msgstr "'%s' 또는 이것의 종속 항목이 없습니다." #: editor/editor_node.cpp msgid "Error while loading '%s'." @@ -2205,26 +2209,26 @@ msgstr "'%s' 불러오는 중 오류." #: editor/editor_node.cpp msgid "Saving Scene" -msgstr "씬 저장하기" +msgstr "씬 저장 중" #: editor/editor_node.cpp msgid "Analyzing" -msgstr "분석하기" +msgstr "분석 중" #: editor/editor_node.cpp msgid "Creating Thumbnail" -msgstr "썸네일 만들기" +msgstr "썸네일 만드는 중" #: editor/editor_node.cpp msgid "This operation can't be done without a tree root." -msgstr "이 작업은 트리 루트가 필요해요." +msgstr "이 작업은 트리 루트가 필요합니다." #: editor/editor_node.cpp msgid "" "This scene can't be saved because there is a cyclic instancing inclusion.\n" "Please resolve it and then attempt to save again." msgstr "" -"이 씬에는 순환하는 인스턴스를 포함하고 있어서 저장할 수 없어요.\n" +"이 씬에 순환 인스턴스화가 있어서 저장할 수 없습니다.\n" "이를 해결한 후 다시 저장해보세요." #: editor/editor_node.cpp @@ -2232,16 +2236,16 @@ msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" -"씬을 저장할 수 없어요. (인스턴스 또는 상속과 같은) 종속 관계가 만족스럽지 않" -"은 모양이에요." +"씬을 저장할 수 없습니다. (인스턴스 또는 상속과 같은) 종속 관계를 성립할 수 없" +"는 것 같습니다." #: editor/editor_node.cpp editor/scene_tree_dock.cpp msgid "Can't overwrite scene that is still open!" -msgstr "열려있는 씬은 덮어쓸 수 없어요!" +msgstr "열려있는 씬은 덮어쓸 수 없습니다!" #: editor/editor_node.cpp msgid "Can't load MeshLibrary for merging!" -msgstr "병합할 메시 라이브러리를 불러올 수 없어요!" +msgstr "병합할 메시 라이브러리를 불러올 수 없습니다!" #: editor/editor_node.cpp msgid "Error saving MeshLibrary!" @@ -2249,7 +2253,7 @@ msgstr "메시 라이브러리 저장 중 오류!" #: editor/editor_node.cpp msgid "Can't load TileSet for merging!" -msgstr "병합할 타일셋을 불러올 수 없어요!" +msgstr "병합할 타일셋을 불러올 수 없습니다!" #: editor/editor_node.cpp msgid "Error saving TileSet!" @@ -2261,15 +2265,15 @@ msgstr "레이아웃 저장 중 오류!" #: editor/editor_node.cpp msgid "Default editor layout overridden." -msgstr "편집기 기본 레이아웃이 새로 정의됐어요." +msgstr "기본 편집기 레이아웃을 덮어씁니다." #: editor/editor_node.cpp msgid "Layout name not found!" -msgstr "레이아웃 이름을 찾을 수 없어요!" +msgstr "레이아웃 이름을 찾을 수 없습니다!" #: editor/editor_node.cpp msgid "Restored default layout to base settings." -msgstr "기본 레이아웃이 초기 설정으로 돌아왔어요." +msgstr "기본 레이아웃을 초기화하였습니다." #: editor/editor_node.cpp msgid "" @@ -2277,7 +2281,7 @@ msgid "" "Please read the documentation relevant to importing scenes to better " "understand this workflow." msgstr "" -"이 리소스는 가져온 씬에 속한 거라 편집할 수 없어요.\n" +"이 리소스는 가져온 씬에 속한 리소스이므로 편집할 수 없습니다.\n" "이 워크플로를 이해하려면 씬 가져오기(Importing Scenes)와 관련된 문서를 읽어주" "세요." @@ -2286,16 +2290,16 @@ msgid "" "This resource belongs to a scene that was instanced or inherited.\n" "Changes to it won't be kept when saving the current scene." msgstr "" -"이 리소스는 인스턴스되거나 상속된 씬에 속해 있어요.\n" -"현재 씬을 저장하는 경우 리소스의 변경 사항은 적용되지 않을 거예요." +"이 리소스는 인스턴스되거나 상속된 씬에 속해 있습니다.\n" +"현재 씬을 저장해도 리소스의 변경 사항이 유지되지 않을 것입니다." #: editor/editor_node.cpp msgid "" "This resource was imported, so it's not editable. Change its settings in the " "import panel and then re-import." msgstr "" -"이 리소스는 가져온 것이라 편집할 수 없어요. 가져오기 패널에서 설정을 변경한 " -"뒤 다시 가져오세요." +"이 리소스는 가져온 것이므로 편집할 수 없습니다. 가져오기 패널에서 설정을 변경" +"한 뒤 다시 가져오세요." #: editor/editor_node.cpp msgid "" @@ -2304,8 +2308,8 @@ msgid "" "Please read the documentation relevant to importing scenes to better " "understand this workflow." msgstr "" -"이 씬은 가져온 것이라 변경 사항은 적용되지 않아요.\n" -"이 씬을 인스턴스하거나 상속하면 편집할 수 있어요.\n" +"이 씬은 가져온 것이므로 변경 사항이 유지되지 않습니다.\n" +"이 씬을 인스턴스화하거나 상속하면 편집할 수 있습니다.\n" "이 워크플로를 이해하려면 씬 가져오기(Importing Scenes)와 관련된 문서를 읽어주" "세요." @@ -2315,20 +2319,20 @@ msgid "" "Please read the documentation relevant to debugging to better understand " "this workflow." msgstr "" -"원격 객체는 변경사항이 적용되지 않아요.\n" +"원격 객체는 변경사항이 적용되지 않습니다.\n" "이 워크플로를 이해하려면 디버깅(Debugging)과 관련된 문서를 읽어주세요." #: editor/editor_node.cpp msgid "There is no defined scene to run." -msgstr "실행하기로 정의한 씬이 없어요." +msgstr "실행할 씬이 설정되지 않았습니다." #: editor/editor_node.cpp msgid "Current scene was never saved, please save it prior to running." -msgstr "현재 씬이 저장되지 않았어요. 실행하기 전에 저장해주세요." +msgstr "현재 씬이 아직 저장되지 않았습니다. 실행하기 전에 저장해주세요." #: editor/editor_node.cpp msgid "Could not start subprocess!" -msgstr "하위 프로세스를 시작할 수 없어요!" +msgstr "하위 프로세스를 시작할 수 없습니다!" #: editor/editor_node.cpp editor/filesystem_dock.cpp msgid "Open Scene" @@ -2352,7 +2356,7 @@ msgstr "빠른 스크립트 열기..." #: editor/editor_node.cpp msgid "Save & Close" -msgstr "저장하기 & 닫기" +msgstr "저장 & 닫기" #: editor/editor_node.cpp msgid "Save changes to '%s' before closing?" @@ -2360,15 +2364,15 @@ msgstr "닫기 전에 '%s'에 변경 사항을 저장할까요?" #: editor/editor_node.cpp msgid "Saved %s modified resource(s)." -msgstr "수정된 리소스 %s이(가) 저장됐어요." +msgstr "수정된 리소스 %s을(를) 저장하였습니다." #: editor/editor_node.cpp msgid "A root node is required to save the scene." -msgstr "씬을 저장하려면 루트 노드가 필요해요." +msgstr "씬을 저장하려면 루트 노드가 필요합니다." #: editor/editor_node.cpp msgid "Save Scene As..." -msgstr "씬을 다른 이름으로 저장하기..." +msgstr "씬을 다른 이름으로 저장..." #: editor/editor_node.cpp msgid "No" @@ -2376,15 +2380,15 @@ msgstr "아니오" #: editor/editor_node.cpp msgid "Yes" -msgstr "네" +msgstr "예" #: editor/editor_node.cpp msgid "This scene has never been saved. Save before running?" -msgstr "이 씬은 아직 저장하지 않았어요. 실행하기 전에 저장할까요?" +msgstr "이 씬은 아직 저장하지 않았습니다. 실행하기 전에 저장할까요?" #: editor/editor_node.cpp editor/scene_tree_dock.cpp msgid "This operation can't be done without a scene." -msgstr "이 작업에는 씬이 필요해요." +msgstr "이 작업에는 씬이 필요합니다." #: editor/editor_node.cpp msgid "Export Mesh Library" @@ -2392,7 +2396,7 @@ msgstr "메시 라이브러리 내보내기" #: editor/editor_node.cpp msgid "This operation can't be done without a root node." -msgstr "이 작업에는 루트 노드가 필요해요." +msgstr "이 작업에는 루트 노드가 필요합니다." #: editor/editor_node.cpp msgid "Export Tile Set" @@ -2400,15 +2404,15 @@ msgstr "타일셋 내보내기" #: editor/editor_node.cpp msgid "This operation can't be done without a selected node." -msgstr "이 작업에는 선택한 노드가 필요해요." +msgstr "이 작업에는 선택한 노드가 필요합니다." #: editor/editor_node.cpp msgid "Current scene not saved. Open anyway?" -msgstr "현재 씬을 저장하지 않았어요. 무시하고 열까요?" +msgstr "현재 씬을 저장하지 않았습니다. 무시하고 열까요?" #: editor/editor_node.cpp msgid "Can't reload a scene that was never saved." -msgstr "저장하지 않은 씬은 다시 불러올 수 없어요." +msgstr "저장하지 않은 씬은 새로고침할 수 없습니다." #: editor/editor_node.cpp msgid "Revert" @@ -2416,15 +2420,15 @@ msgstr "되돌리기" #: editor/editor_node.cpp msgid "This action cannot be undone. Revert anyway?" -msgstr "이 행동은 취소할 수 없어요. 무시하고 되돌릴까요?" +msgstr "이 행동은 취소할 수 없습니다. 무시하고 되돌릴까요?" #: editor/editor_node.cpp msgid "Quick Run Scene..." -msgstr "빠른 씬 실행하기..." +msgstr "씬 빠른 실행..." #: editor/editor_node.cpp msgid "Quit" -msgstr "종료하기" +msgstr "종료" #: editor/editor_node.cpp msgid "Exit the editor?" @@ -2436,7 +2440,7 @@ msgstr "프로젝트 매니저를 열까요?" #: editor/editor_node.cpp msgid "Save & Quit" -msgstr "저장하기 & 종료하기" +msgstr "저장 & 종료" #: editor/editor_node.cpp msgid "Save changes to the following scene(s) before quitting?" @@ -2451,12 +2455,12 @@ msgid "" "This option is deprecated. Situations where refresh must be forced are now " "considered a bug. Please report." msgstr "" -"이 설정은 더 이상 사용할 수 없어요. 새로고침을 강제로 해야 하는 상황은 버그" -"로 간주돼요. 신고해주세요." +"이 설정은 제거되었습니다. 강제로 새로고침해야 하는 상황은 이제 버그입니다. 신" +"고해주세요." #: editor/editor_node.cpp msgid "Pick a Main Scene" -msgstr "메인 씬을 고르세요" +msgstr "메인 씬 선택" #: editor/editor_node.cpp msgid "Close Scene" @@ -2469,7 +2473,8 @@ msgstr "닫은 씬 다시 열기" #: editor/editor_node.cpp msgid "Unable to enable addon plugin at: '%s' parsing of config failed." msgstr "" -"애드온 플러그인을 여기서 켤 수 없음: '%s' 설정을 구문 분석할 수 없어요." +"다음 경로에 있는 애드온 플러그인을 활성화할 수 없음: '%s' 설정의 구문 분석을 " +"실패했습니다." #: editor/editor_node.cpp msgid "Unable to find script field for addon plugin at: 'res://addons/%s'." @@ -2484,37 +2489,37 @@ msgid "" "Unable to load addon script from path: '%s' There seems to be an error in " "the code, please check the syntax." msgstr "" -"다음 경로에서 애드온 스크립트를 불러올 수 없음: '%s' 코드에 오류가 있는 모양" -"이에요. 문법을 확인해보세요." +"다음 경로에서 애드온 스크립트를 불러올 수 없음: '%s' 코드에 오류가 있는 것 같" +"습니다. 문법을 확인해보세요." #: editor/editor_node.cpp msgid "" "Unable to load addon script from path: '%s' Base type is not EditorPlugin." msgstr "" "다음 경로에서 애드온 스크립트를 불러올 수 없음: '%s' 기본 유형이 EditorPlugin" -"이 아니에요." +"이 아닙니다." #: editor/editor_node.cpp msgid "Unable to load addon script from path: '%s' Script is not in tool mode." msgstr "" -"다음 경로에서 애드온 스크립트를 불러올 수 없음: '%s' 스크립트가 Tool 모드가 " -"아니에요." +"다음 경로에서 애드온 스크립트를 불러올 수 없음: '%s' 스크립트가 tool 모드가 " +"아닙니다." #: editor/editor_node.cpp msgid "" "Scene '%s' was automatically imported, so it can't be modified.\n" "To make changes to it, a new inherited scene can be created." msgstr "" -"씬 '%s'을(를) 자동으로 가져왔기 때문에, 수정할 수 없어요.\n" -"이 씬을 편집하려면 새로운 상속 씬을 만들어야 해요." +"씬 '%s'을(를) 자동으로 가져왔으므로 수정할 수 없습니다.\n" +"이 씬을 편집하려면 새로운 상속 씬을 만들어야 합니다." #: editor/editor_node.cpp msgid "" "Error loading scene, it must be inside the project path. Use 'Import' to " "open the scene, then save it inside the project path." msgstr "" -"씬을 불러오는 중 오류가 발생했어요. 씬은 프로젝트 경로에 있을 거예요. '가져오" -"기'를 사용해서 씬을 열고, 그 씬을 프로젝트 경로 안에 저장하세요." +"씬을 불러오는 중 오류가 발생했습니다. 씬은 프로젝트 경로 내에 있어야 합니다. " +"'가져오기'를 사용해서 씬을 열고, 그 씬을 프로젝트 경로 안에 저장하세요." #: editor/editor_node.cpp msgid "Scene '%s' has broken dependencies:" @@ -2530,8 +2535,8 @@ msgid "" "You can change it later in \"Project Settings\" under the 'application' " "category." msgstr "" -"메인 씬을 지정하지 않았네요. 하나 정할까요?\n" -"이건 나중에 \"프로젝트 설정\"의 'application' 카테고리에서 바꿀 수 있어요." +"메인 씬을 지정하지 않았습니다. 선택하시겠습니까?\n" +"나중에 \"프로젝트 설정\"의 'application' 카테고리에서 변경할 수 있습니다." #: editor/editor_node.cpp msgid "" @@ -2539,8 +2544,8 @@ msgid "" "You can change it later in \"Project Settings\" under the 'application' " "category." msgstr "" -"선택한 씬 '%s'이(가) 없어요, 다른 씬으로 정할까요?\n" -"이건 나중에 \"프로젝트 설정\"의 'application' 카테고리에서 바꿀 수 있어요." +"선택한 씬 '%s'이(가) 없습니다. 다른 씬으로 지정할까요?\n" +"나중에 \"프로젝트 설정\"의 'application' 카테고리에서 바꿀 수 있습니다." #: editor/editor_node.cpp msgid "" @@ -2548,16 +2553,16 @@ msgid "" "You can change it later in \"Project Settings\" under the 'application' " "category." msgstr "" -"선택한 씬 '%s'은(는) 씬 파일이 아니에요, 다른 씬으로 정할까요?\n" -"이건 나중에 \"프로젝트 설정\"의 'application' 카테고리에서 바꿀 수 있어요." +"선택한 씬 '%s'은(는) 씬 파일이 아닙니다, 다른 씬으로 정할까요?\n" +"이건 나중에 \"프로젝트 설정\"의 'application' 카테고리에서 바꿀 수 있습니다." #: editor/editor_node.cpp msgid "Save Layout" -msgstr "레이아웃 저장하기" +msgstr "레이아웃 저장" #: editor/editor_node.cpp msgid "Delete Layout" -msgstr "레이아웃 삭제하기" +msgstr "레이아웃 삭제" #: editor/editor_node.cpp editor/import_dock.cpp #: editor/script_create_dialog.cpp @@ -2571,7 +2576,7 @@ msgstr "파일 시스템에서 보기" #: editor/editor_node.cpp msgid "Play This Scene" -msgstr "이 씬 실행하기" +msgstr "이 씬 실행" #: editor/editor_node.cpp msgid "Close Tab" @@ -2595,7 +2600,7 @@ msgstr "모든 탭 닫기" #: editor/editor_node.cpp msgid "Switch Scene Tab" -msgstr "씬 탭 전환하기" +msgstr "씬 탭 전환" #: editor/editor_node.cpp msgid "%d more files or folders" @@ -2623,7 +2628,7 @@ msgstr "집중 모드 토글." #: editor/editor_node.cpp msgid "Add a new scene." -msgstr "새 씬을 추가해요." +msgstr "새 씬을 추가합니다." #: editor/editor_node.cpp msgid "Scene" @@ -2631,11 +2636,11 @@ msgstr "씬" #: editor/editor_node.cpp msgid "Go to previously opened scene." -msgstr "이전에 열었던 씬으로 가요." +msgstr "이전에 열었던 씬으로 이동합니다." #: editor/editor_node.cpp msgid "Copy Text" -msgstr "문자 복사하기" +msgstr "문자 복사" #: editor/editor_node.cpp msgid "Next tab" @@ -2651,7 +2656,7 @@ msgstr "파일 필터..." #: editor/editor_node.cpp msgid "Operations with scene files." -msgstr "씬 파일로 작업해요." +msgstr "씬 파일에 대한 작업입니다." #: editor/editor_node.cpp msgid "New Scene" @@ -2671,15 +2676,15 @@ msgstr "최근 기록 열기" #: editor/editor_node.cpp msgid "Save Scene" -msgstr "씬 저장하기" +msgstr "씬 저장" #: editor/editor_node.cpp msgid "Save All Scenes" -msgstr "모든 씬 저장하기" +msgstr "모든 씬 저장" #: editor/editor_node.cpp msgid "Convert To..." -msgstr "다음으로 변환하기..." +msgstr "다음으로 변환..." #: editor/editor_node.cpp msgid "MeshLibrary..." @@ -2697,7 +2702,7 @@ msgstr "되돌리기" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" -msgstr "다시 실행하기" +msgstr "다시 실행" #: editor/editor_node.cpp msgid "Revert Scene" @@ -2722,11 +2727,11 @@ msgstr "버전 컨트롤" #: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp msgid "Set Up Version Control" -msgstr "버전 컨트롤 설치하기" +msgstr "버전 컨트롤 설정" #: editor/editor_node.cpp msgid "Shut Down Version Control" -msgstr "버전 컨트롤 종료하기" +msgstr "버전 컨트롤 종료" #: editor/editor_node.cpp msgid "Export..." @@ -2734,7 +2739,7 @@ msgstr "내보내기..." #: editor/editor_node.cpp msgid "Install Android Build Template..." -msgstr "안드로이드 빌드 템플릿 설치하기..." +msgstr "안드로이드 빌드 템플릿 설치..." #: editor/editor_node.cpp msgid "Open Project Data Folder" @@ -2759,7 +2764,7 @@ msgstr "디버그" #: editor/editor_node.cpp msgid "Deploy with Remote Debug" -msgstr "원격 디버그와 함께 배포하기" +msgstr "원격 디버그와 함께 배포" #: editor/editor_node.cpp msgid "" @@ -2767,11 +2772,11 @@ msgid "" "connect to the IP of this computer in order to be debugged." msgstr "" "내보내거나 배포할 때, 결과 실행 파일은 디버깅을 위해 이 컴퓨터의 IP와 연결을 " -"시도할 거예요." +"시도할 것입니다." #: editor/editor_node.cpp msgid "Small Deploy with Network FS" -msgstr "네트워크 파일 시스템과 함께 작게 배포하기" +msgstr "네트워크 파일 시스템을 사용하여 작게 배포" #: editor/editor_node.cpp msgid "" @@ -2782,10 +2787,11 @@ msgid "" "On Android, deploy will use the USB cable for faster performance. This " "option speeds up testing for games with a large footprint." msgstr "" -"이 설정을 켜면, 내보내거나 배포할 때 최소한의 실행 파일을 만들어요.\n" -"네트워크 너머 편집기가 프로젝트에서 파일 시스템을 제공할 거예요.\n" -"Android의 경우, 더 빠른 성능을 원한다면 배포할 때 USB 케이블을 사용하세요. " -"이 설정은 설치 공간이 큰 게임을 빨리 테스트할 때 쓸 수 있어요." +"이 설정을 켜면, 내보내거나 배포할 때 최소한의 실행 파일을 만듭니다.\n" +"이 경우, 실행 파일이 네트워크 너머에 있는 편집기의 파일 시스템을 사용합니" +"다.\n" +"Android의 경우, 배포 시 더 빠른 속도를 위해 USB 케이블을 사용합니다. 이 설정" +"은 용량이 큰 게임의 테스트 배포 속도를 향상시킬 수 있습니다." #: editor/editor_node.cpp msgid "Visible Collision Shapes" @@ -2797,7 +2803,7 @@ msgid "" "running game if this option is turned on." msgstr "" "이 설정을 켜면 게임을 실행하는 동안 (2D와 3D용) Collision 모양과 Raycast 노드" -"가 보이게 돼요." +"가 보이게 됩니다." #: editor/editor_node.cpp msgid "Visible Navigation" @@ -2808,11 +2814,12 @@ msgid "" "Navigation meshes and polygons will be visible on the running game if this " "option is turned on." msgstr "" -"이 설정을 켜면, 게임을 실행하는 동안 Navigation 메시와 폴리곤이 보이게 돼요." +"이 설정을 켜면, 게임을 실행하는 동안 Navigation 메시와 폴리곤이 보이게 됩니" +"다." #: editor/editor_node.cpp msgid "Sync Scene Changes" -msgstr "씬 변경 사항 동기화하기" +msgstr "씬 변경 사항 동기화" #: editor/editor_node.cpp msgid "" @@ -2821,13 +2828,14 @@ msgid "" "When used remotely on a device, this is more efficient with network " "filesystem." msgstr "" -"이 설정을 켜면, 게임을 실행하는 동안 편집기에서 씬의 변경 사항이 게임에 적용" -"돼요.\n" -"기기를 원격에서 사용할 때, 이것은 네트워크 파일 시스템으로 더욱 효과적이에요." +"이 설정이 활성화된 경우, 편집기에서 씬을 수정하면 실행 중인 게임에도 반영됩니" +"다.\n" +"원격 장치에서 사용중인 경우 네트워크 파일 시스템 기능을 활성화하면 더욱 효율" +"적입니다." #: editor/editor_node.cpp msgid "Sync Script Changes" -msgstr "스크립트 변경 사항 동기화하기" +msgstr "스크립트 변경 사항 동기화" #: editor/editor_node.cpp msgid "" @@ -2836,12 +2844,14 @@ msgid "" "When used remotely on a device, this is more efficient with network " "filesystem." msgstr "" -"이 설정을 켜면, 게임을 실행하는 동안 저장한 모든 스크립트를 새로 불러와요.\n" -"기기를 원격에서 사용할 때, 이것은 네트워크 파일 시스템으로 더욱 효과적이에요." +"이 설정이 활성화된 경우, 어떤 스크립트든 저장하면 실행중인 게임에도 반영됩니" +"다.\n" +"원격 장치에서 사용중인 경우 네트워크 파일 시스템 기능을 활성화하면 더욱 효율" +"적입니다." #: editor/editor_node.cpp editor/script_create_dialog.cpp msgid "Editor" -msgstr "편집기(Editor)" +msgstr "편집기" #: editor/editor_node.cpp msgid "Editor Settings..." @@ -2857,7 +2867,7 @@ msgstr "스크린샷 찍기" #: editor/editor_node.cpp msgid "Screenshots are stored in the Editor Data/Settings Folder." -msgstr "스크린샷은 Editor Data/Settings 폴더에 저장됐어요." +msgstr "스크린샷이 Editor Data/Settings 폴더에 저장되었습니다." #: editor/editor_node.cpp msgid "Toggle Fullscreen" @@ -2881,7 +2891,7 @@ msgstr "편집기 설정 폴더 열기" #: editor/editor_node.cpp msgid "Manage Editor Features..." -msgstr "편집기 기능 관리하기..." +msgstr "편집기 기능 관리..." #: editor/editor_node.cpp msgid "Manage Export Templates..." @@ -2923,15 +2933,15 @@ msgstr "정보" #: editor/editor_node.cpp msgid "Play the project." -msgstr "프로젝트를 실행해요." +msgstr "프로젝트를 실행합니다." #: editor/editor_node.cpp msgid "Play" -msgstr "실행하기" +msgstr "실행" #: editor/editor_node.cpp msgid "Pause the scene execution for debugging." -msgstr "디버깅을 하기 위해 씬 실행을 멈춰요." +msgstr "디버깅을 하기 위해 씬 실행을 중단합니다." #: editor/editor_node.cpp msgid "Pause Scene" @@ -2939,19 +2949,19 @@ msgstr "씬 멈추기" #: editor/editor_node.cpp msgid "Stop the scene." -msgstr "씬을 멈춰요." +msgstr "씬을 중단합니다." #: editor/editor_node.cpp msgid "Play the edited scene." -msgstr "편집하고 있던 씬을 실행해요." +msgstr "편집하고 있던 씬을 실행합니다." #: editor/editor_node.cpp msgid "Play Scene" -msgstr "씬 실행하기" +msgstr "씬 실행" #: editor/editor_node.cpp msgid "Play custom scene" -msgstr "씬을 지정해서 실행해요" +msgstr "씬을 지정해서 실행합니다" #: editor/editor_node.cpp msgid "Play Custom Scene" @@ -2959,16 +2969,16 @@ msgstr "맞춤 씬 실행하기" #: editor/editor_node.cpp msgid "Changing the video driver requires restarting the editor." -msgstr "비디오 드라이버를 변경하려면 편집기를 다시 껐다 켜야 해요." +msgstr "비디오 드라이버를 변경하려면 편집기를 다시 껐다 켜야 합니다." #: editor/editor_node.cpp editor/project_settings_editor.cpp #: editor/settings_config_dialog.cpp msgid "Save & Restart" -msgstr "저장 & 다시 시작하기" +msgstr "저장 & 다시 시작" #: editor/editor_node.cpp msgid "Spins when the editor window redraws." -msgstr "편집기 창에 변화가 있을 때마다 돌아요." +msgstr "편집기 창에 변화가 있을 때마다 회전합니다." #: editor/editor_node.cpp msgid "Update Continuously" @@ -3004,7 +3014,7 @@ msgstr "저장하지 않음" #: editor/editor_node.cpp msgid "Android build template is missing, please install relevant templates." -msgstr "안드로이드 빌드 템플릿이 없어요, 관련 템플릿을 설치해주세요." +msgstr "안드로이드 빌드 템플릿이 없습니다, 관련 템플릿을 설치해주세요." #: editor/editor_node.cpp msgid "Manage Templates" @@ -3021,11 +3031,11 @@ msgid "" "preset." msgstr "" "\"res://android/build\"에 소스 템플릿을 설치해서, 프로젝트를 맞춤 안드로이드 " -"빌드에 맞게 설정할 거예요.\n" -"그런 다음 수정 사항을 적용하고 맞춤 APK를 만들어 내보낼 수 있어요 (모듈 추가" -"하기, AndroidManifest.xml 바꾸기 등).\n" +"빌드에 맞게 설정할 것입니다.\n" +"그런 다음 수정 사항을 적용하고 맞춤 APK를 만들어 내보낼 수 있습니다 (모듈 추" +"가, AndroidManifest.xml 바꾸기 등).\n" "미리 빌드된 APK를 사용하는 대신 맞춤 빌드를 만들려면, 안드로이드 내보내기 프" -"리셋에서 \"맞춤 빌드 사용하기\" 설정을 켜 놓아야 해요." +"리셋에서 \"맞춤 빌드 사용\" 설정을 켜 놓아야 합니다." #: editor/editor_node.cpp msgid "" @@ -3034,8 +3044,8 @@ msgid "" "Remove the \"res://android/build\" directory manually before attempting this " "operation again." msgstr "" -"안드로이드 빌드 템플릿이 이미 이 프로젝트에 설치했고, 덮어 쓸 수 없어요.\n" -"이 명령을 다시 실행하기 전에 \"res://android/build\" 디렉토리를 삭제하세요." +"안드로이드 빌드 템플릿이 이미 이 프로젝트에 설치했고, 덮어 쓸 수 없습니다.\n" +"이 명령을 다시 실행 전에 \"res://android/build\" 디렉토리를 삭제하세요." #: editor/editor_node.cpp msgid "Import Templates From ZIP File" @@ -3051,11 +3061,11 @@ msgstr "라이브러리 내보내기" #: editor/editor_node.cpp msgid "Merge With Existing" -msgstr "기존의 것과 병합하기" +msgstr "기존의 것과 병합" #: editor/editor_node.cpp msgid "Open & Run a Script" -msgstr "스크립트 열기 & 실행하기" +msgstr "스크립트 열기 & 실행" #: editor/editor_node.cpp msgid "New Inherited" @@ -3067,7 +3077,7 @@ msgstr "불러오기 오류" #: editor/editor_node.cpp editor/plugins/tile_map_editor_plugin.cpp msgid "Select" -msgstr "선택하기" +msgstr "선택" #: editor/editor_node.cpp msgid "Open 2D Editor" @@ -3099,11 +3109,11 @@ msgstr "경고!" #: editor/editor_path.cpp msgid "No sub-resources found." -msgstr "하위 리소스를 찾을 수 없어요." +msgstr "하위 리소스를 찾을 수 없습니다." #: editor/editor_plugin.cpp msgid "Creating Mesh Previews" -msgstr "메시 미리 보기 만들기" +msgstr "메시 미리 보기 만드는 중" #: editor/editor_plugin.cpp msgid "Thumbnail..." @@ -3115,7 +3125,7 @@ msgstr "기본 스크립트:" #: editor/editor_plugin_settings.cpp msgid "Edit Plugin" -msgstr "플러그인 편집하기" +msgstr "플러그인 편집" #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" @@ -3204,7 +3214,7 @@ msgstr "[비어있음]" #: editor/editor_properties.cpp editor/plugins/root_motion_editor_plugin.cpp msgid "Assign..." -msgstr "지정하기..." +msgstr "지정..." #: editor/editor_properties.cpp msgid "Invalid RID" @@ -3214,15 +3224,15 @@ msgstr "잘못된 RID" msgid "" "The selected resource (%s) does not match any type expected for this " "property (%s)." -msgstr "선택한 리소스 (%s)가 이 속성 (%s)에 적합한 모든 유형에 맞지 않아요." +msgstr "선택한 리소스 (%s)가 이 속성 (%s)에 적합한 모든 유형에 맞지 않습니다." #: editor/editor_properties.cpp msgid "" "Can't create a ViewportTexture on resources saved as a file.\n" "Resource needs to belong to a scene." msgstr "" -"파일로 저장한 리소스에 ViewportTexture를 만들 수 없어요.\n" -"리소스가 씬에 속해 있어야 해요." +"파일로 저장한 리소스에 ViewportTexture를 만들 수 없습니다.\n" +"리소스가 씬에 속해 있어야 합니다." #: editor/editor_properties.cpp msgid "" @@ -3232,7 +3242,7 @@ msgid "" "containing it up to a node)." msgstr "" "씬에 지역으로 설정되지 않았기 때문에 이 리소스에 ViewportTexture를 만들 수 없" -"어요.\n" +"습니다.\n" "리소스 (그리고 한 노드에 있는 모든 리소스)의 'local to scene' 속성을 켜주세" "요 ." @@ -3272,7 +3282,7 @@ msgstr "붙여넣기" #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Convert To %s" -msgstr "%s(으)로 변환하기" +msgstr "%s(으)로 변환" #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Selected node is not a Viewport!" @@ -3289,7 +3299,7 @@ msgstr "페이지: " #: editor/editor_properties_array_dict.cpp #: editor/plugins/theme_editor_plugin.cpp msgid "Remove Item" -msgstr "항목 삭제하기" +msgstr "항목 삭제" #: editor/editor_properties_array_dict.cpp msgid "New Key:" @@ -3301,14 +3311,14 @@ msgstr "새 값:" #: editor/editor_properties_array_dict.cpp msgid "Add Key/Value Pair" -msgstr "키/값 쌍 추가하기" +msgstr "키/값 쌍 추가" #: editor/editor_run_native.cpp msgid "" "No runnable export preset found for this platform.\n" "Please add a runnable preset in the export menu." msgstr "" -"이 플랫폼으로 실행할 수 있는 내보내기 프리셋이 없어요.\n" +"이 플랫폼으로 실행할 수 있는 내보내기 프리셋이 없습니다.\n" "내보내기 메뉴에서 실행할 수 있는 프리셋을 추가해주세요." #: editor/editor_run_script.cpp @@ -3317,7 +3327,7 @@ msgstr "_run() 메서드에 당신의 논리를 작성하세요." #: editor/editor_run_script.cpp msgid "There is an edited scene already." -msgstr "이미 편집된 씬이 있어요." +msgstr "이미 편집된 씬이 있습니다." #: editor/editor_run_script.cpp msgid "Couldn't instance script:" @@ -3337,11 +3347,11 @@ msgstr "'_run' 메서드를 잊었나요?" #: editor/editor_sub_scene.cpp msgid "Select Node(s) to Import" -msgstr "가져올 노드 선택하기" +msgstr "가져올 노드 선택" #: editor/editor_sub_scene.cpp editor/project_manager.cpp msgid "Browse" -msgstr "검색하기" +msgstr "탐색" #: editor/editor_sub_scene.cpp msgid "Scene Path:" @@ -3353,11 +3363,11 @@ msgstr "노드에서 가져오기:" #: editor/export_template_manager.cpp msgid "Redownload" -msgstr "다시 다운로드하기" +msgstr "다시 다운로드" #: editor/export_template_manager.cpp msgid "Uninstall" -msgstr "삭제하기" +msgstr "삭제" #: editor/export_template_manager.cpp msgid "(Installed)" @@ -3366,11 +3376,11 @@ msgstr "(설치됨)" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp msgid "Download" -msgstr "다운로드하기" +msgstr "다운로드" #: editor/export_template_manager.cpp msgid "Official export templates aren't available for development builds." -msgstr "공식 내보내기 템플릿은 개발 빌드에서는 이용할 수 없어요." +msgstr "공식 내보내기 템플릿은 개발 빌드에서는 이용할 수 없습니다." #: editor/export_template_manager.cpp msgid "(Missing)" @@ -3382,7 +3392,7 @@ msgstr "(현재)" #: editor/export_template_manager.cpp msgid "Retrieving mirrors, please wait..." -msgstr "미러를 검색 중이에요. 기다려주세요..." +msgstr "미러를 검색 중입니다. 기다려주세요..." #: editor/export_template_manager.cpp msgid "Remove template version '%s'?" @@ -3390,7 +3400,7 @@ msgstr "템플릿 버전 '%s'을(를) 삭제할까요?" #: editor/export_template_manager.cpp msgid "Can't open export templates zip." -msgstr "내보내기 템플릿 zip 파일을 열 수 없어요." +msgstr "내보내기 템플릿 zip 파일을 열 수 없습니다." #: editor/export_template_manager.cpp msgid "Invalid version.txt format inside templates: %s." @@ -3398,7 +3408,7 @@ msgstr "템플릿 속의 version.txt가 잘못된 형식임: %s." #: editor/export_template_manager.cpp msgid "No version.txt found inside templates." -msgstr "템플릿에 version.txt를 찾을 수 없어요." +msgstr "템플릿에 version.txt를 찾을 수 없습니다." #: editor/export_template_manager.cpp msgid "Error creating path for templates:" @@ -3425,18 +3435,18 @@ msgid "" "No download links found for this version. Direct download is only available " "for official releases." msgstr "" -"이 버전의 다운로드 링크를 찾을 수 없어요. 공식 출시 버전만 바로 다운로드할 " -"수 있어요." +"이 버전의 다운로드 링크를 찾을 수 없습니다. 공식 출시 버전만 바로 다운로드할 " +"수 있습니다." #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp msgid "Can't resolve." -msgstr "해결할 수 없어요." +msgstr "해결할 수 없습니다." #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp msgid "Can't connect." -msgstr "연결할 수 없어요." +msgstr "연결할 수 없습니다." #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp @@ -3469,8 +3479,8 @@ msgid "" "Templates installation failed.\n" "The problematic templates archives can be found at '%s'." msgstr "" -"템플릿 설치에 실패했어요.\n" -"문제가 있는 템플릿 기록은 '%s'에서 찾아 볼 수 있어요." +"템플릿 설치에 실패했습니다.\n" +"문제가 있는 템플릿 기록은 '%s'에서 찾아 볼 수 있습니다." #: editor/export_template_manager.cpp msgid "Error requesting URL:" @@ -3536,15 +3546,15 @@ msgstr "설치된 버전:" #: editor/export_template_manager.cpp msgid "Install From File" -msgstr "파일에서 설치하기" +msgstr "파일에서 설치" #: editor/export_template_manager.cpp msgid "Remove Template" -msgstr "템플릿 삭제하기" +msgstr "템플릿 삭제" #: editor/export_template_manager.cpp msgid "Select Template File" -msgstr "템플릿 파일 선택하기" +msgstr "템플릿 파일 선택" #: editor/export_template_manager.cpp msgid "Godot Export Templates" @@ -3556,7 +3566,7 @@ msgstr "내보내기 템플릿 매니저" #: editor/export_template_manager.cpp msgid "Download Templates" -msgstr "템플릿 다운로드하기" +msgstr "템플릿 다운로드" #: editor/export_template_manager.cpp msgid "Select mirror from list: (Shift+Click: Open in Browser)" @@ -3569,16 +3579,16 @@ msgstr "즐겨찾기" #: editor/filesystem_dock.cpp msgid "Status: Import of file failed. Please fix file and reimport manually." msgstr "" -"상태: 파일 가져오기에 실패했어요. 수동으로 파일을 수정하고 다시 가져 와주세" +"상태: 파일 가져오기에 실패했습니다. 수동으로 파일을 수정하고 다시 가져 와주세" "요." #: editor/filesystem_dock.cpp msgid "Cannot move/rename resources root." -msgstr "리소스 루트를 옮기거나 이름을 바꿀 수 없어요." +msgstr "리소스 루트를 옮기거나 이름을 바꿀 수 없습니다." #: editor/filesystem_dock.cpp msgid "Cannot move a folder into itself." -msgstr "폴더를 자신의 하위로 옮길 수 없어요." +msgstr "폴더를 자신의 하위로 옮길 수 없습니다." #: editor/filesystem_dock.cpp msgid "Error moving:" @@ -3594,19 +3604,19 @@ msgstr "종속 항목을 업데이트할 수 없음:" #: editor/filesystem_dock.cpp editor/scene_tree_editor.cpp msgid "No name provided." -msgstr "이름을 제공하지 않았어요." +msgstr "이름을 제공하지 않았습니다." #: editor/filesystem_dock.cpp msgid "Provided name contains invalid characters." -msgstr "제공한 이름에 잘못된 문자가 있어요." +msgstr "제공한 이름에 잘못된 문자가 있습니다." #: editor/filesystem_dock.cpp msgid "A file or folder with this name already exists." -msgstr "이 이름은 이미 어떤 파일이나 폴더가 쓰고 있어요." +msgstr "이 이름은 이미 어떤 파일이나 폴더가 쓰고 있습니다." #: editor/filesystem_dock.cpp msgid "Name contains invalid characters." -msgstr "이름에 잘못된 문자가 있어요." +msgstr "이름에 잘못된 문자가 있습니다." #: editor/filesystem_dock.cpp msgid "Renaming file:" @@ -3618,11 +3628,11 @@ msgstr "폴더 이름 바꾸기:" #: editor/filesystem_dock.cpp msgid "Duplicating file:" -msgstr "파일 복제하기:" +msgstr "파일 복제:" #: editor/filesystem_dock.cpp msgid "Duplicating folder:" -msgstr "폴더 복제하기:" +msgstr "폴더 복제:" #: editor/filesystem_dock.cpp msgid "New Inherited Scene" @@ -3630,7 +3640,7 @@ msgstr "새 상속 씬" #: editor/filesystem_dock.cpp msgid "Set As Main Scene" -msgstr "메인 씬으로 설정하기" +msgstr "메인 씬으로 설정" #: editor/filesystem_dock.cpp msgid "Open Scenes" @@ -3642,15 +3652,15 @@ msgstr "인스턴스하기" #: editor/filesystem_dock.cpp msgid "Add to Favorites" -msgstr "즐겨찾기로 추가하기" +msgstr "즐겨찾기로 추가" #: editor/filesystem_dock.cpp msgid "Remove from Favorites" -msgstr "즐겨찾기에서 삭제하기" +msgstr "즐겨찾기에서 삭제" #: editor/filesystem_dock.cpp msgid "Edit Dependencies..." -msgstr "종속 관계 편집하기..." +msgstr "종속 관계 편집..." #: editor/filesystem_dock.cpp msgid "View Owners..." @@ -3662,11 +3672,11 @@ msgstr "이름 바꾸기..." #: editor/filesystem_dock.cpp msgid "Duplicate..." -msgstr "복제하기..." +msgstr "복제..." #: editor/filesystem_dock.cpp msgid "Move To..." -msgstr "여기로 이동하기..." +msgstr "여기로 이동..." #: editor/filesystem_dock.cpp msgid "New Scene..." @@ -3707,7 +3717,7 @@ msgstr "다음 폴더/파일" #: editor/filesystem_dock.cpp msgid "Re-Scan Filesystem" -msgstr "파일 시스템 다시 스캔하기" +msgstr "파일 시스템 다시 스캔" #: editor/filesystem_dock.cpp msgid "Toggle Split Mode" @@ -3715,23 +3725,23 @@ msgstr "분할 모드 토글" #: editor/filesystem_dock.cpp msgid "Search files" -msgstr "파일 검색하기" +msgstr "파일 검색" #: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" "Please Wait..." msgstr "" -"파일 스캔 중이에요.\n" -"기다려주세요..." +"파일 스캔중.\n" +"기다려주십시오..." #: editor/filesystem_dock.cpp msgid "Move" -msgstr "이동하기" +msgstr "이동" #: editor/filesystem_dock.cpp msgid "There is already file or folder with the same name in this location." -msgstr "이 위치에는 같은 이름의 파일이나 폴더가 있어요." +msgstr "이 위치에는 같은 이름의 파일이나 폴더가 있습니다." #: editor/filesystem_dock.cpp msgid "Overwrite" @@ -3766,8 +3776,8 @@ msgid "" "Include the files with the following extensions. Add or remove them in " "ProjectSettings." msgstr "" -"해당 확장자 이름을 갖는 파일이 있어요. 프로젝트 설정에 파일을 추가하거나 삭제" -"하세요." +"해당 확장자 이름을 갖는 파일이 있습니다. 프로젝트 설정에 파일을 추가하거나 삭" +"제하세요." #: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -3780,7 +3790,7 @@ msgstr "바꾸기..." #: editor/find_in_files.cpp editor/progress_dialog.cpp scene/gui/dialogs.cpp msgid "Cancel" -msgstr "취소하기" +msgstr "취소" #: editor/find_in_files.cpp msgid "Find: " @@ -3792,7 +3802,7 @@ msgstr "바꾸기: " #: editor/find_in_files.cpp msgid "Replace all (no undo)" -msgstr "모두 바꾸기 (되돌릴 수 없어요)" +msgstr "모두 바꾸기 (되돌릴 수 없습니다)" #: editor/find_in_files.cpp msgid "Searching..." @@ -3804,19 +3814,19 @@ msgstr "검색 완료" #: editor/groups_editor.cpp msgid "Add to Group" -msgstr "그룹에 추가하기" +msgstr "그룹에 추가" #: editor/groups_editor.cpp msgid "Remove from Group" -msgstr "그룹에서 삭제하기" +msgstr "그룹에서 삭제" #: editor/groups_editor.cpp msgid "Group name already exists." -msgstr "이 그룹 이름은 이미 누가 쓰고 있어요." +msgstr "이 그룹 이름은 이미 누가 쓰고 있습니다." #: editor/groups_editor.cpp msgid "Invalid group name." -msgstr "이 그룹 이름은 잘못됐어요." +msgstr "이 그룹 이름은 잘못되었습니다." #: editor/groups_editor.cpp msgid "Rename Group" @@ -3824,7 +3834,7 @@ msgstr "그룹 이름 바꾸기" #: editor/groups_editor.cpp msgid "Delete Group" -msgstr "그룹 삭제하기" +msgstr "그룹 삭제" #: editor/groups_editor.cpp editor/node_dock.cpp msgid "Groups" @@ -3845,7 +3855,7 @@ msgstr "그룹에 속한 노드" #: editor/groups_editor.cpp msgid "Empty groups will be automatically removed." -msgstr "빈 그룹은 자동으로 삭제돼요." +msgstr "빈 그룹은 자동으로 삭제됩니다." #: editor/groups_editor.cpp msgid "Group Editor" @@ -3853,7 +3863,7 @@ msgstr "그룹 편집기" #: editor/groups_editor.cpp msgid "Manage Groups" -msgstr "그룹 관리하기" +msgstr "그룹 관리" #: editor/import/resource_importer_scene.cpp msgid "Import as Single Scene" @@ -3933,18 +3943,19 @@ msgid "Saving..." msgstr "저장 중..." #: editor/import_dock.cpp +#, fuzzy +msgid "%d Files" +msgstr " 파일" + +#: editor/import_dock.cpp msgid "Set as Default for '%s'" -msgstr "'%s'을(를) 기본으로 설정하기" +msgstr "'%s'을(를) 기본으로 설정" #: editor/import_dock.cpp msgid "Clear Default for '%s'" msgstr "'%s'을(를) 기본에서 지우기" #: editor/import_dock.cpp -msgid " Files" -msgstr " 파일" - -#: editor/import_dock.cpp msgid "Import As:" msgstr "다음 형식으로 가져오기:" @@ -3962,18 +3973,18 @@ msgstr "씬 저장, 다시 가져오기 및 다시 시작" #: editor/import_dock.cpp msgid "Changing the type of an imported file requires editor restart." -msgstr "가져온 파일의 유형을 바꾸려면 편집기를 다시 켜아 해요." +msgstr "가져온 파일의 유형을 바꾸려면 편집기를 다시 켜아 합니다." #: editor/import_dock.cpp msgid "" "WARNING: Assets exist that use this resource, they may stop loading properly." msgstr "" -"경고: 이 리소스를 사용하는 애셋이 있어요. 정상적으로 불러오지 못할 수도 있어" -"요." +"경고: 이 리소스를 사용하는 애셋이 있습니다. 정상적으로 불러오지 못할 수도 있" +"습니다." #: editor/inspector_dock.cpp msgid "Failed to load resource." -msgstr "리소스 불러오기에 실패했어요." +msgstr "리소스 불러오기에 실패했습니다." #: editor/inspector_dock.cpp msgid "Expand All Properties" @@ -3990,7 +4001,7 @@ msgstr "다른 이름으로 저장..." #: editor/inspector_dock.cpp msgid "Copy Params" -msgstr "매개변수 복사하기" +msgstr "매개변수 복사" #: editor/inspector_dock.cpp msgid "Paste Params" @@ -3998,11 +4009,11 @@ msgstr "매개변수 붙여넣기" #: editor/inspector_dock.cpp msgid "Edit Resource Clipboard" -msgstr "리소스 클립보드 편집하기" +msgstr "리소스 클립보드 편집" #: editor/inspector_dock.cpp msgid "Copy Resource" -msgstr "리소스 복사하기" +msgstr "리소스 복사" #: editor/inspector_dock.cpp msgid "Make Built-In" @@ -4018,27 +4029,27 @@ msgstr "도움말에서 열기" #: editor/inspector_dock.cpp msgid "Create a new resource in memory and edit it." -msgstr "새 리소스를 메모리에서 만들고 편집해요." +msgstr "새 리소스를 메모리에서 만들고 편집합니다." #: editor/inspector_dock.cpp msgid "Load an existing resource from disk and edit it." -msgstr "디스크에서 기존 리소스를 불러오고 편집해요." +msgstr "디스크에서 기존 리소스를 불러오고 편집합니다." #: editor/inspector_dock.cpp msgid "Save the currently edited resource." -msgstr "현재 편집하는 리소스를 저장해요." +msgstr "현재 편집하는 리소스를 저장합니다." #: editor/inspector_dock.cpp msgid "Go to the previous edited object in history." -msgstr "기록에서 이전에 편집한 객체로 가요." +msgstr "기록상 이전에 편집했던 객체로 이동합니다." #: editor/inspector_dock.cpp msgid "Go to the next edited object in history." -msgstr "기록에서 다음에 편집한 객체로 가요." +msgstr "기록상 다음에 편집했던 객체로 이동합니다." #: editor/inspector_dock.cpp msgid "History of recently edited objects." -msgstr "최근에 편집한 객체 기록이에요." +msgstr "최근에 편집한 객체 기록입니다." #: editor/inspector_dock.cpp msgid "Object properties." @@ -4050,11 +4061,11 @@ msgstr "필터 속성" #: editor/inspector_dock.cpp msgid "Changes may be lost!" -msgstr "변경 사항을 잃을 수도 있어요!" +msgstr "변경 사항을 잃을 수도 있습니다!" #: editor/multi_node_edit.cpp msgid "MultiNode Set" -msgstr "다중 노드 설정하기" +msgstr "다중 노드 설정" #: editor/node_dock.cpp msgid "Select a single node to edit its signals and groups." @@ -4062,7 +4073,7 @@ msgstr "시그널과 그룹을 편집할 노드 하나를 선택하세요." #: editor/plugin_config_dialog.cpp msgid "Edit a Plugin" -msgstr "플러그인 편집하기" +msgstr "플러그인 편집" #: editor/plugin_config_dialog.cpp msgid "Create a Plugin" @@ -4097,7 +4108,7 @@ msgstr "폴리곤 만들기" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Create points." -msgstr "점 만들기." +msgstr "점을 만듭니다." #: editor/plugins/abstract_polygon_2d_editor.cpp msgid "" @@ -4105,8 +4116,8 @@ msgid "" "LMB: Move Point\n" "RMB: Erase Point" msgstr "" -"점 편집하기.\n" -"좌클릭: 점 이동하기\n" +"점을 편집합니다.\n" +"좌클릭: 점 이동\n" "우클릭: 점 지우기" #: editor/plugins/abstract_polygon_2d_editor.cpp @@ -4116,19 +4127,19 @@ msgstr "점 지우기." #: editor/plugins/abstract_polygon_2d_editor.cpp msgid "Edit Polygon" -msgstr "폴리곤 편집하기" +msgstr "폴리곤 편집" #: editor/plugins/abstract_polygon_2d_editor.cpp msgid "Insert Point" -msgstr "점 삽입하기" +msgstr "점 삽입" #: editor/plugins/abstract_polygon_2d_editor.cpp msgid "Edit Polygon (Remove Point)" -msgstr "폴리곤 편집하기 (점 삭제하기)" +msgstr "폴리곤 편집 (점 삭제)" #: editor/plugins/abstract_polygon_2d_editor.cpp msgid "Remove Polygon And Point" -msgstr "폴리곤과 점 삭제하기" +msgstr "폴리곤과 점 삭제" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp @@ -4136,7 +4147,7 @@ msgstr "폴리곤과 점 삭제하기" #: editor/plugins/animation_state_machine_editor.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Add Animation" -msgstr "애니메이션 추가하기" +msgstr "애니메이션 추가" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp @@ -4148,7 +4159,7 @@ msgstr "불러오기..." #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Move Node Point" -msgstr "노드 점 이동하기" +msgstr "노드 점 이동" #: editor/plugins/animation_blend_space_1d_editor.cpp msgid "Change BlendSpace1D Limits" @@ -4162,25 +4173,25 @@ msgstr "BlendSpace1D 라벨 바꾸기" #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_state_machine_editor.cpp msgid "This type of node can't be used. Only root nodes are allowed." -msgstr "이 유형의 노드를 사용할 수 없어요. 루트 노드만 쓸 수 있어요." +msgstr "이 유형의 노드를 사용할 수 없습니다. 루트 노드만 쓸 수 있습니다." #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Add Node Point" -msgstr "노드 점 추가하기" +msgstr "노드 점 추가" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Add Animation Point" -msgstr "애니메이션 점 추가하기" +msgstr "애니메이션 점 추가" #: editor/plugins/animation_blend_space_1d_editor.cpp msgid "Remove BlendSpace1D Point" -msgstr "BlendSpace1D 점 삭제하기" +msgstr "BlendSpace1D 점 삭제" #: editor/plugins/animation_blend_space_1d_editor.cpp msgid "Move BlendSpace1D Node Point" -msgstr "BlendSpace1D 노드 점 이동하기" +msgstr "BlendSpace1D 노드 점 이동" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp @@ -4190,23 +4201,23 @@ msgid "" "AnimationTree is inactive.\n" "Activate to enable playback, check node warnings if activation fails." msgstr "" -"AnimationTree가 꺼져 있어요.\n" +"AnimationTree가 꺼져 있습니다.\n" "재생하려면 AnimationTree를 켜고, 실행에 실패하면 노드 경고를 확인하세요." #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Set the blending position within the space" -msgstr "공간 내의 혼합 지점 설정하기" +msgstr "공간 내의 혼합 지점 설정" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Select and move points, create points with RMB." -msgstr "점을 선택하고 이동해요. 우클릭으로 점을 만드세요." +msgstr "점을 선택하고 이동합니다. 우클릭으로 점을 만드세요." #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp scene/gui/graph_edit.cpp msgid "Enable snap and show grid." -msgstr "스냅을 켜고 격자를 보이게 해요." +msgstr "스냅을 켜고 격자를 보이게 합니다." #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp @@ -4228,11 +4239,11 @@ msgstr "애니메이션 노드 열기" #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Triangle already exists." -msgstr "삼각형이 이미 있어요." +msgstr "삼각형이 이미 있습니다." #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Add Triangle" -msgstr "삼각형 추가하기" +msgstr "삼각형 추가" #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Change BlendSpace2D Limits" @@ -4244,19 +4255,19 @@ msgstr "BlendSpace2D 라벨 바꾸기" #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Remove BlendSpace2D Point" -msgstr "BlendSpace2D 점 삭제하기" +msgstr "BlendSpace2D 점 삭제" #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Remove BlendSpace2D Triangle" -msgstr "BlendSpace2D 삼각형 삭제하기" +msgstr "BlendSpace2D 삼각형 삭제" #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "BlendSpace2D does not belong to an AnimationTree node." -msgstr "BlendSpace2D가 AnimationTree 노드에 속해있지 않아요." +msgstr "BlendSpace2D가 AnimationTree 노드에 속해있지 않습니다." #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "No triangles exist, so no blending can take place." -msgstr "삼각형이 없어요. 혼합이 일어나지 않을 거예요." +msgstr "삼각형이 없습니다. 혼합이 일어나지 않을 것입니다." #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Toggle Auto Triangles" @@ -4264,7 +4275,7 @@ msgstr "자동 삼각형 토글" #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Create triangles by connecting points." -msgstr "점을 연결해서 삼각형을 만들어요." +msgstr "점을 연결해서 삼각형을 만듭니다." #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Erase points and triangles." @@ -4286,15 +4297,15 @@ msgstr "매개변수 변경됨" #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Edit Filters" -msgstr "필터 편집하기" +msgstr "필터 편집" #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "Output node can't be added to the blend tree." -msgstr "출력 노드를 혼합 트리에 추가할 수 없어요." +msgstr "출력 노드를 혼합 트리에 추가할 수 없습니다." #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "Add Node to BlendTree" -msgstr "BlendTree에 노드 추가하기" +msgstr "BlendTree에 노드 추가" #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp @@ -4303,7 +4314,7 @@ msgstr "노드 이동됨" #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "Unable to connect, port may be in use or connection may be invalid." -msgstr "연결할 수 없어요. 포트가 사용 중이거나 연결이 잘못된 모양이에요." +msgstr "연결할 수 없습니다. 포트가 사용 중이거나 연결이 잘못된 것 같습니다." #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp @@ -4317,17 +4328,17 @@ msgstr "노드 연결 해제됨" #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "Set Animation" -msgstr "애니메이션 설정하기" +msgstr "애니메이션 설정" #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Delete Node" -msgstr "노드 삭제하기" +msgstr "노드 삭제" #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/scene_tree_dock.cpp msgid "Delete Node(s)" -msgstr "노드 삭제하기" +msgstr "노드 삭제" #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "Toggle Filter On/Off" @@ -4340,11 +4351,13 @@ msgstr "필터 바꾸기" #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "No animation player set, so unable to retrieve track names." msgstr "" -"애니메이션 플레이어가 설정되지 않았어요. 그래서 트랙 이름을 검색할 수 없어요." +"애니메이션 플레이어가 설정되지 않았습니다. 그래서 트랙 이름을 검색할 수 없습" +"니다." #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "Player path set is invalid, so unable to retrieve track names." -msgstr "플레이어 경로 설정이 잘못됐어요. 그래서 트랙 이름을 검색할 수 없어요." +msgstr "" +"플레이어 경로 설정이 잘못되었습니다. 그래서 트랙 이름을 검색할 수 없습니다." #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/root_motion_editor_plugin.cpp @@ -4352,8 +4365,8 @@ msgid "" "Animation player has no valid root node path, so unable to retrieve track " "names." msgstr "" -"애니메이션 플레이어가 잘못된 루트 경로를 갖고 있어요. 그래서 트랙 이름을 검색" -"할 수 없어요." +"애니메이션 플레이어가 잘못된 루트 경로를 갖고 있습니다. 그래서 트랙 이름을 검" +"색할 수 없습니다." #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "Anim Clips" @@ -4375,7 +4388,7 @@ msgstr "노드 이름 바뀜" #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Add Node..." -msgstr "노드 추가하기..." +msgstr "노드 추가..." #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/root_motion_editor_plugin.cpp @@ -4410,15 +4423,15 @@ msgstr "애니메이션을 삭제할까요?" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Remove Animation" -msgstr "애니메이션 삭제하기" +msgstr "애니메이션 삭제" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Invalid animation name!" -msgstr "애니메이션 이름이 잘못됐어요!" +msgstr "애니메이션 이름이 잘못되었습니다!" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Animation name already exists!" -msgstr "애니메이션 이름이 이미 있어요!" +msgstr "애니메이션 이름이 이미 있습니다!" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp @@ -4439,15 +4452,15 @@ msgstr "애니메이션 불러오기" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Duplicate Animation" -msgstr "애니메이션 복제하기" +msgstr "애니메이션 복제" #: editor/plugins/animation_player_editor_plugin.cpp msgid "No animation to copy!" -msgstr "복사할 애니메이션이 없어요!" +msgstr "복사할 애니메이션이 없습니다!" #: editor/plugins/animation_player_editor_plugin.cpp msgid "No animation resource on clipboard!" -msgstr "클립보드에 애니메이션 리소스가 없어요!" +msgstr "클립보드에 애니메이션 리소스가 없습니다!" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Pasted Animation" @@ -4459,27 +4472,27 @@ msgstr "애니메이션 붙여넣기" #: editor/plugins/animation_player_editor_plugin.cpp msgid "No animation to edit!" -msgstr "편집할 애니메이션이 없어요!" +msgstr "편집할 애니메이션이 없습니다!" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Play selected animation backwards from current pos. (A)" -msgstr "선택한 애니메이션을 현재 위치에서 거꾸로 재생해요. (A)" +msgstr "선택한 애니메이션을 현재 위치에서 거꾸로 재생합니다. (A)" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Play selected animation backwards from end. (Shift+A)" -msgstr "선택한 애니메이션을 끝에서 거꾸로 재생해요. (Shift+A)" +msgstr "선택한 애니메이션을 끝에서 거꾸로 재생합니다. (Shift+A)" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Stop animation playback. (S)" -msgstr "애니메이션 재생을 멈춰요. (S)" +msgstr "애니메이션 재생을 중단합니다. (S)" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Play selected animation from start. (Shift+D)" -msgstr "선택한 애니메이션을 처음부터 재생해요. (Shift+D)" +msgstr "선택한 애니메이션을 처음부터 재생합니다. (Shift+D)" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Play selected animation from current pos. (D)" -msgstr "선택한 애니메이션을 현재 위치부터 재생해요. (D)" +msgstr "선택한 애니메이션을 현재 위치부터 재생합니다. (D)" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Animation position (in seconds)." @@ -4487,7 +4500,7 @@ msgstr "애니메이션 위치 (초)." #: editor/plugins/animation_player_editor_plugin.cpp msgid "Scale animation playback globally for the node." -msgstr "노드의 애니메이션 재생 길이를 전체적으로 조절해요." +msgstr "노드의 애니메이션 재생 길이를 전체적으로 조절합니다." #: editor/plugins/animation_player_editor_plugin.cpp msgid "Animation Tools" @@ -4499,7 +4512,7 @@ msgstr "애니메이션(Animation)" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Edit Transitions..." -msgstr "전환 편집하기..." +msgstr "전환 편집..." #: editor/plugins/animation_player_editor_plugin.cpp msgid "Open in Inspector" @@ -4507,11 +4520,11 @@ msgstr "인스펙터에서 열기" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Display list of animations in player." -msgstr "애니메이션 목록을 표시해요." +msgstr "애니메이션 목록을 표시합니다." #: editor/plugins/animation_player_editor_plugin.cpp msgid "Autoplay on Load" -msgstr "불러올 시 자동으로 재생하기" +msgstr "불러올 시 자동으로 재생" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Enable Onion Skinning" @@ -4555,7 +4568,7 @@ msgstr "변경 사항만" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Force White Modulate" -msgstr "강제 흰색 조절하기" +msgstr "강제 흰색 조절" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Include Gizmos (3D)" @@ -4563,7 +4576,7 @@ msgstr "기즈모 포함 (3D)" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Pin AnimationPlayer" -msgstr "AnimationPlayer 고정하기" +msgstr "AnimationPlayer 고정" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Create New Animation" @@ -4594,20 +4607,20 @@ msgstr "교차-애니메이션 혼합 시간" #: editor/plugins/animation_state_machine_editor.cpp msgid "Move Node" -msgstr "노드 이동하기" +msgstr "노드 이동" #: editor/plugins/animation_state_machine_editor.cpp msgid "Transition exists!" -msgstr "전환이 있어요!" +msgstr "전환이 있습니다!" #: editor/plugins/animation_state_machine_editor.cpp msgid "Add Transition" -msgstr "전환 추가하기" +msgstr "전환 추가" #: editor/plugins/animation_state_machine_editor.cpp #: modules/visual_script/visual_script_editor.cpp msgid "Add Node" -msgstr "노드 추가하기" +msgstr "노드 추가" #: editor/plugins/animation_state_machine_editor.cpp msgid "End" @@ -4631,7 +4644,7 @@ msgstr "진행" #: editor/plugins/animation_state_machine_editor.cpp msgid "Start and end nodes are needed for a sub-transition." -msgstr "하위 전환에는 시작과 끝 노드가 필요해요." +msgstr "하위 전환에는 시작과 끝 노드가 필요합니다." #: editor/plugins/animation_state_machine_editor.cpp msgid "No playback resource set at path: %s." @@ -4647,7 +4660,7 @@ msgstr "전환 삭제됨" #: editor/plugins/animation_state_machine_editor.cpp msgid "Set Start Node (Autoplay)" -msgstr "시작 노드 설정하기 (자동 재생)" +msgstr "시작 노드 설정 (자동 재생)" #: editor/plugins/animation_state_machine_editor.cpp msgid "" @@ -4655,29 +4668,30 @@ msgid "" "RMB to add new nodes.\n" "Shift+LMB to create connections." msgstr "" -"노드를 선택하고 이동해요.\n" -"우클릭으로 새 노드를 추가해요.\n" -"Shift+좌클릭으로 연결을 만들어요." +"노드를 선택하고 이동합니다.\n" +"우클릭으로 새 노드를 추가합니다.\n" +"Shift+좌클릭으로 연결을 만듭니다." #: editor/plugins/animation_state_machine_editor.cpp msgid "Create new nodes." -msgstr "새 노드를 만들어요." +msgstr "새 노드를 만듭니다." #: editor/plugins/animation_state_machine_editor.cpp msgid "Connect nodes." -msgstr "노드를 연결해요." +msgstr "노드를 연결합니다." #: editor/plugins/animation_state_machine_editor.cpp msgid "Remove selected node or transition." -msgstr "선택한 노드나 전환을 삭제해요." +msgstr "선택한 노드나 전환을 삭제합니다." #: editor/plugins/animation_state_machine_editor.cpp msgid "Toggle autoplay this animation on start, restart or seek to zero." -msgstr "이 애니메이션을 시작, 재시작, 혹은 0으로 가도록 자동 재생을 토글해요." +msgstr "" +"이 애니메이션을 시작, 재시작, 혹은 0으로 가도록 자동 재생을 토글합니다." #: editor/plugins/animation_state_machine_editor.cpp msgid "Set the end animation. This is useful for sub-transitions." -msgstr "끝 애니메이션을 설정해요. 이것은 하위 전환에 유용해요." +msgstr "끝 애니메이션을 설정합니다. 이것은 하위 전환에 유용합니다." #: editor/plugins/animation_state_machine_editor.cpp msgid "Transition: " @@ -4758,7 +4772,7 @@ msgstr "현재:" #: editor/plugins/visual_shader_editor_plugin.cpp #: modules/visual_script/visual_script_editor.cpp msgid "Add Input" -msgstr "입력 추가하기" +msgstr "입력 추가" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Clear Auto-Advance" @@ -4766,19 +4780,19 @@ msgstr "자동 진행 지우기" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Set Auto-Advance" -msgstr "자동 진행 설정하기" +msgstr "자동 진행 설정" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Delete Input" -msgstr "입력 삭제하기" +msgstr "입력 삭제" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Animation tree is valid." -msgstr "애니메이션 트리는 정상이에요." +msgstr "애니메이션 트리는 정상입니다." #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Animation tree is invalid." -msgstr "애니메이션 트리가 잘못됐어요." +msgstr "애니메이션 트리가 잘못되었습니다." #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Animation Node" @@ -4822,7 +4836,7 @@ msgstr "애니메이션 가져오기..." #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Edit Node Filters" -msgstr "노드 필터 편집하기" +msgstr "노드 필터 편집" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Filters..." @@ -4926,11 +4940,11 @@ msgstr "대기" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Install..." -msgstr "설치하기..." +msgstr "설치..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Retry" -msgstr "다시 시도하기" +msgstr "다시 시도" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Download Error" @@ -4938,7 +4952,7 @@ msgstr "다운로드 오류" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Download for this asset is already in progress!" -msgstr "이 애셋은 이미 다운로드 중이에요!" +msgstr "이 애셋은 이미 다운로드 중입니다!" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Recently Updated" @@ -4986,7 +5000,7 @@ msgstr "모두" #: editor/plugins/asset_library_editor_plugin.cpp msgid "No results for \"%s\"." -msgstr "\"%s\"에 대한 결과가 없어요." +msgstr "\"%s\"에 대한 결과가 없습니다." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Import..." @@ -5035,7 +5049,7 @@ msgid "" "Save your scene (for images to be saved in the same dir), or pick a save " "path from the BakedLightmap properties." msgstr "" -"라이트맵 이미지의 저장 경로를 파악할 수 없어요.\n" +"라이트맵 이미지의 저장 경로를 파악할 수 없습니다.\n" "(같은 경로에 이미지를 저장할 수 있도록) 씬을 저장하거나, BakedLightmap 속성에" "서 저장 경로를 지정하세요." @@ -5044,8 +5058,8 @@ msgid "" "No meshes to bake. Make sure they contain an UV2 channel and that the 'Bake " "Light' flag is on." msgstr "" -"라이트맵을 구울 메시가 없어요. 메시가 UV2 채널을 갖고 있고 'Bake Light' 플래" -"그가 켜져 있는지 확인해주세요." +"라이트맵을 구울 메시가 없습니다. 메시가 UV2 채널을 갖고 있고 'Bake Light' 플" +"래그가 켜져 있는지 확인해주세요." #: editor/plugins/baked_lightmap_editor_plugin.cpp msgid "Failed creating lightmap images, make sure path is writable." @@ -5094,7 +5108,7 @@ msgstr "크기 조절 단계:" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move Vertical Guide" -msgstr "수직 가이드 이동하기" +msgstr "수직 가이드 이동" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Create Vertical Guide" @@ -5102,11 +5116,11 @@ msgstr "수직 가이드 만들기" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Remove Vertical Guide" -msgstr "수직 가이드 삭제하기" +msgstr "수직 가이드 삭제" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move Horizontal Guide" -msgstr "수평 가이드 이동하기" +msgstr "수평 가이드 이동" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Create Horizontal Guide" @@ -5114,7 +5128,7 @@ msgstr "수평 가이드 만들기" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Remove Horizontal Guide" -msgstr "수평 가이드 삭제하기" +msgstr "수평 가이드 삭제" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Create Horizontal and Vertical Guides" @@ -5122,19 +5136,19 @@ msgstr "수평 및 수직 가이드 만들기" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move pivot" -msgstr "피벗 이동하기" +msgstr "피벗 이동" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Rotate CanvasItem" -msgstr "CanvasItem 회전하기" +msgstr "CanvasItem 회전" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move anchor" -msgstr "앵커 이동하기" +msgstr "앵커 이동" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Resize CanvasItem" -msgstr "CanvasItem 크기 조절하기" +msgstr "CanvasItem 크기 조절" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Scale CanvasItem" @@ -5142,13 +5156,13 @@ msgstr "CanvasItem 규모" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move CanvasItem" -msgstr "CanvasItem 이동하기" +msgstr "CanvasItem 이동" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "" "Children of containers have their anchors and margins values overridden by " "their parent." -msgstr "컨테이너의 자식은 부모로 인해 다시 정의된 앵커와 여백 값을 가져요." +msgstr "컨테이너의 자식은 부모로 인해 재정의된 앵커와 여백 값을 가집니다." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Presets for the anchors and margins values of a Control node." @@ -5158,7 +5172,7 @@ msgstr "Control 노드의 앵커와 여백 값의 프리셋." msgid "" "When active, moving Control nodes changes their anchors instead of their " "margins." -msgstr "이 설정을 켜면, Control 노드는 움직이면서 여백이 아닌 앵커를 바꿔요." +msgstr "이 설정을 켜면, Control 노드는 움직이면서 여백이 아닌 앵커를 바꿉니다." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Top Left" @@ -5226,7 +5240,7 @@ msgstr "사각형 전체" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Keep Ratio" -msgstr "비율 유지하기" +msgstr "비율 유지" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Anchors only" @@ -5246,8 +5260,8 @@ msgid "" "Game Camera Override\n" "Overrides game camera with editor viewport camera." msgstr "" -"게임 카메라 다시 정의하기\n" -"편집기 뷰포트 카메라로 게임 카메라를 다시 정의해요." +"게임 카메라 다시 정의\n" +"편집기 뷰포트 카메라로 게임 카메라를 다시 정의합니다." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -5255,8 +5269,8 @@ msgid "" "Game Camera Override\n" "No game instance running." msgstr "" -"게임 카메라 다시 정의하기\n" -"실행하고 있는 게임 인스턴스가 없어요." +"게임 카메라 다시 정의\n" +"실행하고 있는 게임 인스턴스가 없습니다." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -5306,7 +5320,7 @@ msgstr "IK 체인 지우기" msgid "" "Warning: Children of a container get their position and size determined only " "by their parent." -msgstr "경고: 컨테이너의 자식 규모와 위치는 부모에 의해 결정돼요." +msgstr "경고: 컨테이너의 자식 규모와 위치는 부모에 의해 결정됩니다." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/texture_region_editor_plugin.cpp @@ -5325,7 +5339,7 @@ msgstr "드래그: 회전" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Alt+Drag: Move" -msgstr "Alt+드래그: 이동하기" +msgstr "Alt+드래그: 이동" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Press 'v' to Change Pivot, 'Shift+v' to Drag Pivot (while moving)." @@ -5333,7 +5347,7 @@ msgstr "'v'키로 피벗 바꾸기. 'Shift+v'키로 피벗 드래그 (이동하� #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Alt+RMB: Depth list selection" -msgstr "Alt+우클릭: 겹친 목록 선택하기" +msgstr "Alt+우클릭: 겹친 목록 선택" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -5361,7 +5375,7 @@ msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Click to change object's rotation pivot." -msgstr "클릭으로 객체의 회전 피벗을 바꿔요." +msgstr "클릭으로 객체의 회전 피벗을 바꿉니다." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Pan Mode" @@ -5377,7 +5391,7 @@ msgstr "스마트 스냅 토글." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Use Smart Snap" -msgstr "스마트 스냅 사용하기" +msgstr "스마트 스냅 사용" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Toggle grid snapping." @@ -5385,7 +5399,7 @@ msgstr "격자 스냅 토글." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Use Grid Snap" -msgstr "격자 스냅 사용하기" +msgstr "격자 스냅 사용" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snapping Options" @@ -5393,11 +5407,11 @@ msgstr "스냅 설정" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Use Rotation Snap" -msgstr "회전 스냅 사용하기" +msgstr "회전 스냅 사용" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Use Scale Snap" -msgstr "스마트 스냅 사용하기" +msgstr "스마트 스냅 사용" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap Relative" @@ -5405,7 +5419,7 @@ msgstr "상대적인 스냅" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Use Pixel Snap" -msgstr "픽셀 스냅 사용하기" +msgstr "픽셀 스냅 사용" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Smart Snapping" @@ -5414,7 +5428,7 @@ msgstr "스마트 스냅" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Configure Snap..." -msgstr "스냅 설정하기..." +msgstr "스냅 설정..." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap to Parent" @@ -5443,22 +5457,22 @@ msgstr "가이드에 스냅" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Lock the selected object in place (can't be moved)." -msgstr "선택한 객체를 그 자리에 잠가요 (움직일 수 없어요)." +msgstr "선택한 객체를 그 자리에 잠가요 (움직일 수 없습니다)." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Unlock the selected object (can be moved)." -msgstr "선택한 객체를 잠금에서 풀어요 (움직일 수 있어요)." +msgstr "선택한 객체를 잠금에서 풀 (움직일 수 있습니다)." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Makes sure the object's children are not selectable." -msgstr "객체의 자식을 선택하지 않도록 해요." +msgstr "객체의 자식을 선택하지 않도록 합니다." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Restores the object's children's ability to be selected." -msgstr "객체의 자식을 선택할 수 있도록 해요." +msgstr "객체의 자식을 선택할 수 있도록 합니다." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Skeleton Options" @@ -5544,14 +5558,14 @@ msgid "" "Keys are only added to existing tracks, no new tracks will be created.\n" "Keys must be inserted manually for the first time." msgstr "" -"객체를 전환, 회전 또는 크기 조절할 때마다 자동으로 키를 삽입해요 (마스크 기" +"객체를 전환, 회전 또는 크기 조절할 때마다 자동으로 키를 삽입합니다 (마스크 기" "준).\n" -"키는 기존 트랙에만 추가되고, 새 트랙을 추가하진 않아요.\n" -"처음에는 수동으로 키를 삽입해야 해요." +"키는 기존 트랙에만 추가되고, 새 트랙을 추가하진 않습니다.\n" +"처음에는 수동으로 키를 삽입해야 합니다." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Auto Insert Key" -msgstr "자동으로 키 삽입하기" +msgstr "자동으로 키 삽입" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Animation Key and Pose Options" @@ -5559,11 +5573,11 @@ msgstr "애니메이션 키와 포즈 설정" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Insert Key (Existing Tracks)" -msgstr "키 삽입하기 (기존 트랙)" +msgstr "키 삽입 (기존 트랙)" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Copy Pose" -msgstr "포즈 복사하기" +msgstr "포즈 복사" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Clear Pose" @@ -5583,7 +5597,7 @@ msgstr "팬 보기" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Add %s" -msgstr "%s 추가하기" +msgstr "%s 추가" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Adding %s..." @@ -5591,7 +5605,7 @@ msgstr "%s 추가하는 중..." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Cannot instantiate multiple nodes without root." -msgstr "루트 노드 없이는 여러 노드를 인스턴스할 수 없어요." +msgstr "루트 노드 없이는 여러 노드를 인스턴스할 수 없습니다." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp @@ -5612,7 +5626,7 @@ msgid "" "Drag & drop + Shift : Add node as sibling\n" "Drag & drop + Alt : Change node type" msgstr "" -"드래그 & 드롭 + Shift : 형제 노드로 추가하기\n" +"드래그 & 드롭 + Shift : 형제 노드로 추가\n" "드래그 & 드롭 + Alt : 노드 유형 바꾸기" #: editor/plugins/collision_polygon_editor_plugin.cpp @@ -5621,15 +5635,15 @@ msgstr "Polygon3D 만들기" #: editor/plugins/collision_polygon_editor_plugin.cpp msgid "Edit Poly" -msgstr "폴리곤 편집하기" +msgstr "폴리곤 편집" #: editor/plugins/collision_polygon_editor_plugin.cpp msgid "Edit Poly (Remove Point)" -msgstr "폴리곤 편집하기 (점 삭제하기)" +msgstr "폴리곤 편집 (점 삭제)" #: editor/plugins/collision_shape_2d_editor_plugin.cpp msgid "Set Handle" -msgstr "핸들 설정하기" +msgstr "핸들 설정" #: editor/plugins/cpu_particles_2d_editor_plugin.cpp #: editor/plugins/particles_2d_editor_plugin.cpp @@ -5641,7 +5655,7 @@ msgstr "방출 마스크 불러오기" #: editor/plugins/particles_2d_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp msgid "Restart" -msgstr "다시 시작하기" +msgstr "다시 시작" #: editor/plugins/cpu_particles_2d_editor_plugin.cpp #: editor/plugins/particles_2d_editor_plugin.cpp @@ -5725,11 +5739,11 @@ msgstr "부드러운 단계" #: editor/plugins/curve_editor_plugin.cpp msgid "Modify Curve Point" -msgstr "곡선 점 수정하기" +msgstr "곡선 점 수정" #: editor/plugins/curve_editor_plugin.cpp msgid "Modify Curve Tangent" -msgstr "곡선 탄젠트 수정하기" +msgstr "곡선 탄젠트 수정" #: editor/plugins/curve_editor_plugin.cpp msgid "Load Curve Preset" @@ -5737,11 +5751,11 @@ msgstr "곡선 프리셋 불러오기" #: editor/plugins/curve_editor_plugin.cpp msgid "Add Point" -msgstr "점 추가하기" +msgstr "점 추가" #: editor/plugins/curve_editor_plugin.cpp msgid "Remove Point" -msgstr "점 삭제하기" +msgstr "점 삭제" #: editor/plugins/curve_editor_plugin.cpp msgid "Left Linear" @@ -5757,7 +5771,7 @@ msgstr "프리셋 불러오기" #: editor/plugins/curve_editor_plugin.cpp msgid "Remove Curve Point" -msgstr "곡선 점 삭제하기" +msgstr "곡선 점 삭제" #: editor/plugins/curve_editor_plugin.cpp msgid "Toggle Curve Linear Tangent" @@ -5765,7 +5779,7 @@ msgstr "곡선 선형 탄젠트 토글" #: editor/plugins/curve_editor_plugin.cpp msgid "Hold Shift to edit tangents individually" -msgstr "Shift키를 눌러서 탄젠트를 개별적으로 편집하기" +msgstr "Shift키를 눌러서 탄젠트를 개별적으로 편집" #: editor/plugins/curve_editor_plugin.cpp msgid "Right click to add point" @@ -5797,30 +5811,50 @@ msgstr "Occluder 폴리곤 만들기" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Mesh is empty!" -msgstr "메시가 없어요!" +msgstr "메시가 없습니다!" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Trimesh Body" -msgstr "Static Trimesh Body 만들기" +#, fuzzy +msgid "Couldn't create a Trimesh collision shape." +msgstr "Trimesh 충돌 형제 만들기" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Convex Body" -msgstr "Static Convex Body 만들기" +msgid "Create Static Trimesh Body" +msgstr "Static Trimesh Body 만들기" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "This doesn't work on scene root!" -msgstr "씬 루트에서 작업할 수 없어요!" +msgstr "씬 루트에서 작업할 수 없습니다!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Static Shape" msgstr "Trimesh Static Shape 만들기" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Failed creating shapes!" -msgstr "Shape 만들기 실패!" +msgid "Can't create a single convex collision shape for the scene root." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Couldn't create a single convex collision shape." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Create Single Convex Shape" +msgstr "Convex Shape 만들기" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Can't create multiple convex collision shapes for the scene root." +msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Convex Shape(s)" +#, fuzzy +msgid "Couldn't create any collision shapes." +msgstr "폴더를 만들 수 없습니다." + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Create Multiple Convex Shapes" msgstr "Convex Shape 만들기" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -5829,35 +5863,35 @@ msgstr "내비게이션 메시 만들기" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Contained Mesh is not of type ArrayMesh." -msgstr "갖고 있는 메시가 ArrayMesh 유형이 아니에요." +msgstr "갖고 있는 메시가 ArrayMesh 유형이 아닙니다." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "UV Unwrap failed, mesh may not be manifold?" -msgstr "UV 펼치기를 실패했어요. 메시가 다양한 것 같은데요?" +msgstr "UV 펼치기를 실패했습니다. 메시가 다양한 것 같은데요?" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "No mesh to debug." -msgstr "디버그할 메시가 없어요." +msgstr "디버그할 메시가 없습니다." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Model has no UV in this layer" -msgstr "이 레이어에서 모델은 UV가 없어요" +msgstr "이 레이어에서 모델은 UV가 없습니다" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "MeshInstance lacks a Mesh!" -msgstr "MeshInstance에 메시가 없어요!" +msgstr "MeshInstance에 메시가 없습니다!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Mesh has not surface to create outlines from!" -msgstr "메시에 윤곽을 만들 표면이 없어요!" +msgstr "메시에 윤곽을 만들 표면이 없습니다!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Mesh primitive type is not PRIMITIVE_TRIANGLES!" -msgstr "메시 기본 유형이 PRIMITIVE_TRIANGLES이 아니에요!" +msgstr "메시 기본 유형이 PRIMITIVE_TRIANGLES이 아닙니다!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Could not create outline!" -msgstr "윤곽을 만들 수 없어요!" +msgstr "윤곽을 만들 수 없습니다!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Outline" @@ -5872,18 +5906,57 @@ msgid "Create Trimesh Static Body" msgstr "Trimesh Static Body 만들기" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a StaticBody and assigns a polygon-based collision shape to it " +"automatically.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Collision Sibling" msgstr "Trimesh 충돌 형제 만들기" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Convex Collision Sibling(s)" +msgid "" +"Creates a polygon-based collision shape.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Create Single Convex Collision Siblings" msgstr "Convex 충돌 형제 만들기" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a single convex collision shape.\n" +"This is the fastest (but least accurate) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Create Multiple Convex Collision Siblings" +msgstr "Convex 충돌 형제 만들기" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a polygon-based collision shape.\n" +"This is a performance middle-ground between the two above options." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Outline Mesh..." msgstr "윤곽 메시 만들기..." #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a static outline mesh. The outline mesh will have its normals " +"flipped automatically.\n" +"This can be used instead of the SpatialMaterial Grow property when using " +"that property isn't possible." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "View UV1" msgstr "UV1 보기" @@ -5926,11 +5999,11 @@ msgstr "메시 라이브러리" #: editor/plugins/mesh_library_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp msgid "Add Item" -msgstr "항목 추가하기" +msgstr "항목 추가" #: editor/plugins/mesh_library_editor_plugin.cpp msgid "Remove Selected Item" -msgstr "선택한 항목 삭제하기" +msgstr "선택한 항목 삭제" #: editor/plugins/mesh_library_editor_plugin.cpp msgid "Import from Scene" @@ -5938,52 +6011,53 @@ msgstr "씬에서 가져오기" #: editor/plugins/mesh_library_editor_plugin.cpp msgid "Update from Scene" -msgstr "씬에서 업데이트하기" +msgstr "씬에서 업데이트" #: editor/plugins/multimesh_editor_plugin.cpp msgid "No mesh source specified (and no MultiMesh set in node)." msgstr "" -"메시 소스를 지정하지 않았어요 (그리고 노드에 MultiMesh를 설정하지 않았어요)." +"메시 소스를 지정하지 않았습니다 (그리고 노드에 MultiMesh를 설정하지 않았습니" +"다)." #: editor/plugins/multimesh_editor_plugin.cpp msgid "No mesh source specified (and MultiMesh contains no Mesh)." -msgstr "메시 소스를 지정하지 않았어요 (그리고 MultiMesh에 메시가 없어요)." +msgstr "메시 소스를 지정하지 않았습니다 (그리고 MultiMesh에 메시가 없습니다)." #: editor/plugins/multimesh_editor_plugin.cpp msgid "Mesh source is invalid (invalid path)." -msgstr "메시 소스가 잘못됐어요 (잘못된 경로)." +msgstr "메시 소스가 잘못되었습니다 (잘못된 경로)." #: editor/plugins/multimesh_editor_plugin.cpp msgid "Mesh source is invalid (not a MeshInstance)." -msgstr "메시 소스가 잘못됐어요 (MeshInstance가 아님)." +msgstr "메시 소스가 잘못되었습니다 (MeshInstance가 아님)." #: editor/plugins/multimesh_editor_plugin.cpp msgid "Mesh source is invalid (contains no Mesh resource)." -msgstr "메시 소스가 잘못됐어요 (Mesh 리소스가 없음)." +msgstr "메시 소스가 잘못되었습니다 (Mesh 리소스가 없음)." #: editor/plugins/multimesh_editor_plugin.cpp msgid "No surface source specified." -msgstr "표면 소스를 지정하지 않았어요." +msgstr "표면 소스를 지정하지 않았습니다." #: editor/plugins/multimesh_editor_plugin.cpp msgid "Surface source is invalid (invalid path)." -msgstr "표면 소스가 잘못됐어요 (잘못된 경로)." +msgstr "표면 소스가 잘못되었습니다 (잘못된 경로)." #: editor/plugins/multimesh_editor_plugin.cpp msgid "Surface source is invalid (no geometry)." -msgstr "표면 소스가 잘못됐어요 (형태 없음)." +msgstr "표면 소스가 잘못되었습니다 (형태 없음)." #: editor/plugins/multimesh_editor_plugin.cpp msgid "Surface source is invalid (no faces)." -msgstr "표면 소스가 잘못됐어요 (면 없음)." +msgstr "표면 소스가 잘못되었습니다 (면 없음)." #: editor/plugins/multimesh_editor_plugin.cpp msgid "Select a Source Mesh:" -msgstr "소스 메시 선택하기:" +msgstr "소스 메시를 선택하세요:" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Select a Target Surface:" -msgstr "대상 표면 선택하기:" +msgstr "대상 표면을 선택하세요:" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Populate Surface" @@ -6041,7 +6115,7 @@ msgstr "내비게이션 폴리곤 만들기" #: editor/plugins/particles_2d_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp msgid "Convert to CPUParticles" -msgstr "CPU파티클로 변환하기" +msgstr "CPU파티클로 변환" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Generating Visibility Rect" @@ -6049,11 +6123,11 @@ msgstr "가시성 직사각형 만들기" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Generate Visibility Rect" -msgstr "가시성 직사각형을 만들어요" +msgstr "가시성 직사각형을 만듭니다" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Can only set point into a ParticlesMaterial process material" -msgstr "ParticlesMaterial 프로세스 머티리얼 안에만 점을 설정할 수 있어요" +msgstr "ParticlesMaterial 프로세스 머티리얼 안에만 점을 설정할 수 있습니다" #: editor/plugins/particles_2d_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp @@ -6062,23 +6136,23 @@ msgstr "생성 시간 (초):" #: editor/plugins/particles_editor_plugin.cpp msgid "The geometry's faces don't contain any area." -msgstr "형태의 표면에 영역이 없어요." +msgstr "형태의 표면에 영역이 없습니다." #: editor/plugins/particles_editor_plugin.cpp msgid "The geometry doesn't contain any faces." -msgstr "형태에 면이 없어요." +msgstr "형태에 면이 없습니다." #: editor/plugins/particles_editor_plugin.cpp msgid "\"%s\" doesn't inherit from Spatial." -msgstr "\"%s\"은(는) Spatial을 상속받지 않아요." +msgstr "\"%s\"은(는) Spatial을 상속받지 않습니다." #: editor/plugins/particles_editor_plugin.cpp msgid "\"%s\" doesn't contain geometry." -msgstr "\"%s\"에 형태가 없어요." +msgstr "\"%s\"에 형태가 없습니다." #: editor/plugins/particles_editor_plugin.cpp msgid "\"%s\" doesn't contain face geometry." -msgstr "\"%s\"에 면 형태가 없어요." +msgstr "\"%s\"에 면 형태가 없습니다." #: editor/plugins/particles_editor_plugin.cpp msgid "Create Emitter" @@ -6106,7 +6180,7 @@ msgstr "방출 소스: " #: editor/plugins/particles_editor_plugin.cpp msgid "A processor material of type 'ParticlesMaterial' is required." -msgstr "'ParticlesMaterial' 유형의 프로세서 머티리얼이 필요해요." +msgstr "'ParticlesMaterial' 유형의 프로세서 머티리얼이 필요합니다." #: editor/plugins/particles_editor_plugin.cpp msgid "Generating AABB" @@ -6122,20 +6196,20 @@ msgstr "AABB 만들기" #: editor/plugins/path_2d_editor_plugin.cpp msgid "Remove Point from Curve" -msgstr "곡선에서 점 삭제하기" +msgstr "곡선에서 점 삭제" #: editor/plugins/path_2d_editor_plugin.cpp msgid "Remove Out-Control from Curve" -msgstr "곡선의 아웃-컨트롤 삭제하기" +msgstr "곡선의 아웃-컨트롤 삭제" #: editor/plugins/path_2d_editor_plugin.cpp msgid "Remove In-Control from Curve" -msgstr "곡선의 인-컨트롤 삭제하기" +msgstr "곡선의 인-컨트롤 삭제" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Add Point to Curve" -msgstr "곡선에 점 추가하기" +msgstr "곡선에 점 추가" #: editor/plugins/path_2d_editor_plugin.cpp msgid "Split Curve" @@ -6143,30 +6217,30 @@ msgstr "곡선 가르기" #: editor/plugins/path_2d_editor_plugin.cpp msgid "Move Point in Curve" -msgstr "곡선의 점 이동하기" +msgstr "곡선의 점 이동" #: editor/plugins/path_2d_editor_plugin.cpp msgid "Move In-Control in Curve" -msgstr "곡선의 인-컨트롤 이동하기" +msgstr "곡선의 인-컨트롤 이동" #: editor/plugins/path_2d_editor_plugin.cpp msgid "Move Out-Control in Curve" -msgstr "곡선의 아웃-컨트롤 이동하기" +msgstr "곡선의 아웃-컨트롤 이동" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Select Points" -msgstr "점 선택하기" +msgstr "점 선택" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Shift+Drag: Select Control Points" -msgstr "Shift+드래그: 컨트롤 점 선택하기" +msgstr "Shift+드래그: 컨트롤 점 선택" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Click: Add Point" -msgstr "클릭: 점 추가하기" +msgstr "클릭: 점 추가" #: editor/plugins/path_2d_editor_plugin.cpp msgid "Left Click: Split Segment (in curve)" @@ -6175,21 +6249,21 @@ msgstr "좌클릭: (곡선에서) 선분 가르기" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Right Click: Delete Point" -msgstr "우클릭: 점 삭제하기" +msgstr "우클릭: 점 삭제" #: editor/plugins/path_2d_editor_plugin.cpp msgid "Select Control Points (Shift+Drag)" -msgstr "컨트롤 점 선택하기 (Shift+드래그)" +msgstr "컨트롤 점 선택 (Shift+드래그)" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Add Point (in empty space)" -msgstr "(빈 공간에) 점 추가하기" +msgstr "(빈 공간에) 점 추가" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Delete Point" -msgstr "점 삭제하기" +msgstr "점 삭제" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp @@ -6218,15 +6292,15 @@ msgstr "곡선 점 #" #: editor/plugins/path_editor_plugin.cpp msgid "Set Curve Point Position" -msgstr "곡선 점 위치 설정하기" +msgstr "곡선 점 위치 설정" #: editor/plugins/path_editor_plugin.cpp msgid "Set Curve In Position" -msgstr "곡선의 인 위치 설정하기" +msgstr "곡선의 인 위치 설정" #: editor/plugins/path_editor_plugin.cpp msgid "Set Curve Out Position" -msgstr "곡선의 아웃 위치 설정하기" +msgstr "곡선의 아웃 위치 설정" #: editor/plugins/path_editor_plugin.cpp msgid "Split Path" @@ -6234,15 +6308,15 @@ msgstr "경로 가르기" #: editor/plugins/path_editor_plugin.cpp msgid "Remove Path Point" -msgstr "경로 점 삭제하기" +msgstr "경로 점 삭제" #: editor/plugins/path_editor_plugin.cpp msgid "Remove Out-Control Point" -msgstr "아웃-컨트롤 점 삭제하기" +msgstr "아웃-컨트롤 점 삭제" #: editor/plugins/path_editor_plugin.cpp msgid "Remove In-Control Point" -msgstr "인-컨트롤 점 삭제하기" +msgstr "인-컨트롤 점 삭제" #: editor/plugins/path_editor_plugin.cpp msgid "Split Segment (in curve)" @@ -6250,12 +6324,12 @@ msgstr "(곡선에서) 선분 가르기" #: editor/plugins/physical_bone_plugin.cpp msgid "Move Joint" -msgstr "관절 이동하기" +msgstr "관절 이동" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "" "The skeleton property of the Polygon2D does not point to a Skeleton2D node" -msgstr "Polygon2D의 Skeleton 속성이 Skeleton2D 노드를 향하지 않아요" +msgstr "Polygon2D의 Skeleton 속성이 Skeleton2D 노드를 향하지 않습니다" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Sync Bones" @@ -6266,7 +6340,7 @@ msgid "" "No texture in this polygon.\n" "Set a texture to be able to edit UV." msgstr "" -"이 폴리곤에 텍스처가 없어요.\n" +"이 폴리곤에 텍스처가 없습니다.\n" "UV를 편집하려면 텍스처를 설정하세요." #: editor/plugins/polygon_2d_editor_plugin.cpp @@ -6277,7 +6351,8 @@ msgstr "UV 맵 만들기" msgid "" "Polygon 2D has internal vertices, so it can no longer be edited in the " "viewport." -msgstr "Polygon2D에 내부 꼭짓점이 있어요. 더 이상 뷰포트에서 편집할 수 없어요." +msgstr "" +"Polygon2D에 내부 꼭짓점이 있습니다. 더 이상 뷰포트에서 편집할 수 없습니다." #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Create Polygon & UV" @@ -6289,31 +6364,31 @@ msgstr "내부 꼭짓점 만들기" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Remove Internal Vertex" -msgstr "내부 꼭짓점 삭제하기" +msgstr "내부 꼭짓점 삭제" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Invalid Polygon (need 3 different vertices)" -msgstr "잘못된 폴리곤 (3개의 다른 꼭짓점이 필요해요)" +msgstr "잘못된 폴리곤 (3개의 다른 꼭짓점이 필요합니다)" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Add Custom Polygon" -msgstr "맞춤 폴리곤 추가하기" +msgstr "맞춤 폴리곤 추가" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Remove Custom Polygon" -msgstr "맞춤 폴리곤 삭제하기" +msgstr "맞춤 폴리곤 삭제" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Transform UV Map" -msgstr "UV 맵 변형하기" +msgstr "UV 맵 변형" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Transform Polygon" -msgstr "폴리곤 변형하기" +msgstr "폴리곤 변형" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Paint Bone Weights" -msgstr "본 가중치 칠하기" +msgstr "본 가중치 칠" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Open Polygon 2D UV editor." @@ -6341,51 +6416,51 @@ msgstr "본" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Move Points" -msgstr "점 이동하기" +msgstr "점 이동" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Ctrl: Rotate" -msgstr "Ctrl: 회전하기" +msgstr "Ctrl: 회전" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Shift: Move All" -msgstr "Shift: 모두 이동하기" +msgstr "Shift: 모두 이동" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Shift+Ctrl: Scale" -msgstr "Shift+Ctrl: 크기 조절하기" +msgstr "Shift+Ctrl: 크기 조절" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Move Polygon" -msgstr "폴리곤 이동하기" +msgstr "폴리곤 이동" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Rotate Polygon" -msgstr "폴리곤 회전하기" +msgstr "폴리곤 회전" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Scale Polygon" -msgstr "폴리곤 크기 조절하기" +msgstr "폴리곤 크기 조절" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Create a custom polygon. Enables custom polygon rendering." -msgstr "맞춤 폴리곤을 만들어요. 맞춤 폴리곤 렌더링을 켜세요." +msgstr "맞춤 폴리곤을 만듭니다. 맞춤 폴리곤 렌더링을 켜세요." #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "" "Remove a custom polygon. If none remain, custom polygon rendering is " "disabled." msgstr "" -"맞춤 폴리곤을 삭제해요. 남아있는 맞춤 폴리곤이 없으면, 맞춤 폴리곤 렌더링은 " -"꺼져요." +"맞춤 폴리곤을 삭제합니다. 남아있는 맞춤 폴리곤이 없으면, 맞춤 폴리곤 렌더링" +"은 꺼집니다." #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Paint weights with specified intensity." -msgstr "지정한 강도로 가중치를 칠해요." +msgstr "지정한 강도로 가중치를 칠합니다." #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Unpaint weights with specified intensity." -msgstr "지정한 강도로 가중치를 지워요." +msgstr "지정한 강도로 가중치를 지웁니다." #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Radius:" @@ -6449,11 +6524,11 @@ msgstr "본을 폴리곤에 동기화" #: editor/plugins/resource_preloader_editor_plugin.cpp msgid "ERROR: Couldn't load resource!" -msgstr "오류: 리소스를 불러올 수 없어요!" +msgstr "오류: 리소스를 불러올 수 없습니다!" #: editor/plugins/resource_preloader_editor_plugin.cpp msgid "Add Resource" -msgstr "리소스 추가하기" +msgstr "리소스 추가" #: editor/plugins/resource_preloader_editor_plugin.cpp msgid "Rename Resource" @@ -6462,11 +6537,11 @@ msgstr "리소스 이름 바꾸기" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Delete Resource" -msgstr "리소스 삭제하기" +msgstr "리소스 삭제" #: editor/plugins/resource_preloader_editor_plugin.cpp msgid "Resource clipboard is empty!" -msgstr "리소스 클립보드가 비었어요!" +msgstr "리소스 클립보드가 비었습니다!" #: editor/plugins/resource_preloader_editor_plugin.cpp msgid "Paste Resource" @@ -6499,11 +6574,11 @@ msgstr "리소스 프리로더" #: editor/plugins/root_motion_editor_plugin.cpp msgid "AnimationTree has no path set to an AnimationPlayer" -msgstr "AnimationTree에 AnimationPlayer를 향하는 경로가 없어요" +msgstr "AnimationTree에 AnimationPlayer를 향하는 경로가 없습니다" #: editor/plugins/root_motion_editor_plugin.cpp msgid "Path to AnimationPlayer is invalid" -msgstr "AnimationPlayer를 향하는 경로가 잘못됐어요" +msgstr "AnimationPlayer를 향하는 경로가 잘못되었습니다" #: editor/plugins/script_editor_plugin.cpp msgid "Clear Recent Files" @@ -6551,26 +6626,26 @@ msgstr "파일 열기" #: editor/plugins/script_editor_plugin.cpp msgid "Save File As..." -msgstr "다른 이름으로 저장하기..." +msgstr "다른 이름으로 저장..." #: editor/plugins/script_editor_plugin.cpp msgid "Can't obtain the script for running." -msgstr "실행하기 위한 스크립트를 가질 수 없어요." +msgstr "실행하기 위한 스크립트를 가질 수 없습니다." #: editor/plugins/script_editor_plugin.cpp msgid "Script failed reloading, check console for errors." -msgstr "스크립트 다시 불러오기에 실패했어요. 콘솔에서 오류를 확인하세요." +msgstr "스크립트 다시 불러오기에 실패했습니다. 콘솔에서 오류를 확인하세요." #: editor/plugins/script_editor_plugin.cpp msgid "Script is not in tool mode, will not be able to run." -msgstr "스크립트가 Tool 모드가 아니에요. 실행할 수 없을 거예요." +msgstr "스크립트가 Tool 모드가 아닙니다. 실행할 수 없을 것입니다." #: editor/plugins/script_editor_plugin.cpp msgid "" "To run this script, it must inherit EditorScript and be set to tool mode." msgstr "" "이 스크립트를 실행하려면, 반드시 EditorScript에 속해야 하며, Tool 모드로 설정" -"되어 있어야 해요." +"되어 있어야 합니다." #: editor/plugins/script_editor_plugin.cpp msgid "Import Theme" @@ -6586,7 +6661,7 @@ msgstr "저장 중 오류" #: editor/plugins/script_editor_plugin.cpp msgid "Save Theme As..." -msgstr "테마를 다른 이름으로 저장하기..." +msgstr "테마를 다른 이름으로 저장..." #: editor/plugins/script_editor_plugin.cpp msgid "%s Class Reference" @@ -6608,7 +6683,7 @@ msgstr "스크립트 필터" #: editor/plugins/script_editor_plugin.cpp msgid "Toggle alphabetical sorting of the method list." -msgstr "메서드 목록의 사전 식 정렬을 토글해요." +msgstr "메서드 목록의 사전 식 정렬을 토글합니다." #: editor/plugins/script_editor_plugin.cpp msgid "Filter methods" @@ -6616,19 +6691,19 @@ msgstr "메서드 필터" #: editor/plugins/script_editor_plugin.cpp msgid "Sort" -msgstr "정렬하기" +msgstr "정렬" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Move Up" -msgstr "위로 이동하기" +msgstr "위로 이동" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Move Down" -msgstr "아래로 이동하기" +msgstr "아래로 이동" #: editor/plugins/script_editor_plugin.cpp msgid "Next script" @@ -6652,7 +6727,7 @@ msgstr "닫은 스크립트 다시 열기" #: editor/plugins/script_editor_plugin.cpp msgid "Save All" -msgstr "모두 저장하기" +msgstr "모두 저장" #: editor/plugins/script_editor_plugin.cpp msgid "Soft Reload Script" @@ -6660,7 +6735,7 @@ msgstr "스크립트 다시 불러오기" #: editor/plugins/script_editor_plugin.cpp msgid "Copy Script Path" -msgstr "스크립트 경로 복사하기" +msgstr "스크립트 경로 복사" #: editor/plugins/script_editor_plugin.cpp msgid "History Previous" @@ -6685,7 +6760,7 @@ msgstr "테마 다시 불러오기" #: editor/plugins/script_editor_plugin.cpp msgid "Save Theme" -msgstr "테마 저장하기" +msgstr "테마 저장" #: editor/plugins/script_editor_plugin.cpp msgid "Close All" @@ -6697,24 +6772,24 @@ msgstr "문서 닫기" #: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp msgid "Run" -msgstr "실행하기" +msgstr "실행" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Step Into" -msgstr "프로시저 단위 실행하기" +msgstr "프로시저 단위 실행" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Step Over" -msgstr "한 단계식 코드 실행하기" +msgstr "한 단계식 코드 실행" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Break" -msgstr "정지하기" +msgstr "정지" #: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp #: editor/script_editor_debugger.cpp msgid "Continue" -msgstr "계속하기" +msgstr "계속" #: editor/plugins/script_editor_plugin.cpp msgid "Keep Debugger Open" @@ -6726,7 +6801,7 @@ msgstr "외부 편집기로 디버깅" #: editor/plugins/script_editor_plugin.cpp msgid "Open Godot online documentation." -msgstr "Godot 온라인 문서를 열어요." +msgstr "Godot 온라인 문서를 열." #: editor/plugins/script_editor_plugin.cpp msgid "Request Docs" @@ -6738,15 +6813,15 @@ msgstr "피드백으로 Godot 문서를 개선하는데 도와주세요." #: editor/plugins/script_editor_plugin.cpp msgid "Search the reference documentation." -msgstr "참조 문서 검색하기." +msgstr "참조 문서 검색." #: editor/plugins/script_editor_plugin.cpp msgid "Go to previous edited document." -msgstr "이전에 편집한 문서로 이동해요." +msgstr "이전에 편집한 문서로 이동합니다." #: editor/plugins/script_editor_plugin.cpp msgid "Go to next edited document." -msgstr "다음에 편집한 문서로 이동해요." +msgstr "다음에 편집한 문서로 이동합니다." #: editor/plugins/script_editor_plugin.cpp msgid "Discard" @@ -6757,7 +6832,7 @@ msgid "" "The following files are newer on disk.\n" "What action should be taken?:" msgstr "" -"해당 파일은 디스크에 있는 게 더 최신이에요.\n" +"해당 파일은 디스크에 있는 게 더 최신입니다.\n" "어떻게 할 건가요?:" #: editor/plugins/script_editor_plugin.cpp @@ -6768,7 +6843,7 @@ msgstr "다시 불러오기" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/shader_editor_plugin.cpp msgid "Resave" -msgstr "다시 저장하기" +msgstr "다시 저장" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Debugger" @@ -6784,7 +6859,7 @@ msgstr "최근 스크립트 지우기" #: editor/plugins/script_text_editor.cpp msgid "Connections to method:" -msgstr "메서드에 연결하기:" +msgstr "메서드에 연결:" #: editor/plugins/script_text_editor.cpp editor/script_editor_debugger.cpp msgid "Source" @@ -6798,8 +6873,8 @@ msgstr "Target(대상)" msgid "" "Missing connected method '%s' for signal '%s' from node '%s' to node '%s'." msgstr "" -"메서드 '%s'이(가) 시그널 '%s'을 노드 '%s'에서 노드 '%s'으로 연결하지 않았어" -"요." +"메서드 '%s'이(가) 시그널 '%s'을 노드 '%s'에서 노드 '%s'으로 연결하지 않았습니" +"다." #: editor/plugins/script_text_editor.cpp msgid "Line" @@ -6811,17 +6886,17 @@ msgstr "(무시함)" #: editor/plugins/script_text_editor.cpp msgid "Go to Function" -msgstr "함수로 이동하기" +msgstr "함수로 이동" #: editor/plugins/script_text_editor.cpp msgid "Only resources from filesystem can be dropped." -msgstr "파일 시스템의 리소스만 드롭할 수 있어요." +msgstr "파일 시스템의 리소스만 드롭할 수 있습니다." #: editor/plugins/script_text_editor.cpp #: modules/visual_script/visual_script_editor.cpp msgid "Can't drop nodes because script '%s' is not used in this scene." msgstr "" -"스크립트 '%s'이(가) 이 씬에서 사용되지 않고 있어서 노드를 드롭할 수 없어요." +"스크립트 '%s'이(가) 이 씬에서 사용되지 않고 있어서 노드를 드롭할 수 없습니다." #: editor/plugins/script_text_editor.cpp msgid "Lookup Symbol" @@ -6829,11 +6904,11 @@ msgstr "룩업 기호" #: editor/plugins/script_text_editor.cpp msgid "Pick Color" -msgstr "색상 선택하기" +msgstr "색상 선택" #: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp msgid "Convert Case" -msgstr "대소문자 변환하기" +msgstr "대소문자 변환" #: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp msgid "Uppercase" @@ -6845,16 +6920,16 @@ msgstr "소문자로 바꾸기" #: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp msgid "Capitalize" -msgstr "대문자로 시작하기" +msgstr "대문자로 시작" #: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp msgid "Syntax Highlighter" -msgstr "구문 강조하기" +msgstr "구문 강조" #: editor/plugins/script_text_editor.cpp #: editor/plugins/shader_editor_plugin.cpp editor/plugins/text_editor.cpp msgid "Go To" -msgstr "이동하기" +msgstr "이동" #: editor/plugins/script_text_editor.cpp #: editor/plugins/shader_editor_plugin.cpp editor/plugins/text_editor.cpp @@ -6873,11 +6948,11 @@ msgstr "잘라내기" #: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp #: scene/gui/text_edit.cpp msgid "Select All" -msgstr "모두 선택하기" +msgstr "모두 선택" #: editor/plugins/script_text_editor.cpp msgid "Delete Line" -msgstr "행 삭제하기" +msgstr "행 삭제" #: editor/plugins/script_text_editor.cpp msgid "Indent Left" @@ -6905,7 +6980,7 @@ msgstr "모든 행 펼치기" #: editor/plugins/script_text_editor.cpp msgid "Clone Down" -msgstr "아래로 복제하기" +msgstr "아래로 복제" #: editor/plugins/script_text_editor.cpp msgid "Complete Symbol" @@ -6913,19 +6988,19 @@ msgstr "자동 완성" #: editor/plugins/script_text_editor.cpp msgid "Evaluate Selection" -msgstr "선택 항목 평가하기" +msgstr "선택 항목 평가" #: editor/plugins/script_text_editor.cpp msgid "Trim Trailing Whitespace" -msgstr "후행 공백 문자 삭제하기" +msgstr "후행 공백 문자 삭제" #: editor/plugins/script_text_editor.cpp msgid "Convert Indent to Spaces" -msgstr "공백으로 들여쓰도록 변환하기" +msgstr "공백으로 들여쓰도록 변환" #: editor/plugins/script_text_editor.cpp msgid "Convert Indent to Tabs" -msgstr "탭으로 들여쓰도록 변환하기" +msgstr "탭으로 들여쓰도록 변환" #: editor/plugins/script_text_editor.cpp msgid "Auto Indent" @@ -6945,23 +7020,23 @@ msgstr "북마크 토글" #: editor/plugins/script_text_editor.cpp msgid "Go to Next Bookmark" -msgstr "다음 북마크로 이동하기" +msgstr "다음 북마크로 이동" #: editor/plugins/script_text_editor.cpp msgid "Go to Previous Bookmark" -msgstr "이전 북마크로 이동하기" +msgstr "이전 북마크로 이동" #: editor/plugins/script_text_editor.cpp msgid "Remove All Bookmarks" -msgstr "모든 북마크 삭제하기" +msgstr "모든 북마크 삭제" #: editor/plugins/script_text_editor.cpp msgid "Go to Function..." -msgstr "함수로 이동하기..." +msgstr "함수로 이동..." #: editor/plugins/script_text_editor.cpp msgid "Go to Line..." -msgstr "행으로 이동하기..." +msgstr "행으로 이동..." #: editor/plugins/script_text_editor.cpp #: modules/visual_script/visual_script_editor.cpp @@ -6970,22 +7045,22 @@ msgstr "중단점 토글" #: editor/plugins/script_text_editor.cpp msgid "Remove All Breakpoints" -msgstr "중단점 모두 삭제하기" +msgstr "중단점 모두 삭제" #: editor/plugins/script_text_editor.cpp msgid "Go to Next Breakpoint" -msgstr "다음 중단점으로 이동하기" +msgstr "다음 중단점으로 이동" #: editor/plugins/script_text_editor.cpp msgid "Go to Previous Breakpoint" -msgstr "이전 중단점으로 이동하기" +msgstr "이전 중단점으로 이동" #: editor/plugins/shader_editor_plugin.cpp msgid "" "This shader has been modified on on disk.\n" "What action should be taken?" msgstr "" -"이 셰이더는 디스크에서 수정했어요.\n" +"이 셰이더는 디스크에서 수정했습니다.\n" "어떤 행동을 할 건가요?" #: editor/plugins/shader_editor_plugin.cpp @@ -6994,7 +7069,7 @@ msgstr "셰이더" #: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "This skeleton has no bones, create some children Bone2D nodes." -msgstr "이 스켈레톤에는 본이 없어요. Bone2D노드를 자식으로 만드세요." +msgstr "이 스켈레톤에는 본이 없습니다. Bone2D노드를 자식으로 만드세요." #: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Create Rest Pose from Bones" @@ -7002,7 +7077,7 @@ msgstr "본의 대기 자세 만들기" #: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Set Rest Pose to Bones" -msgstr "본에게 대기 자세 설정하기" +msgstr "본에게 대기 자세 설정" #: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Skeleton2D" @@ -7014,7 +7089,7 @@ msgstr "(본의) 대기 자세 만들기" #: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Set Bones to Rest Pose" -msgstr "본을 대기 자세로 설정하기" +msgstr "본을 대기 자세로 설정" #: editor/plugins/skeleton_editor_plugin.cpp msgid "Create physical bones" @@ -7030,7 +7105,7 @@ msgstr "물리적 스켈레톤 만들기" #: editor/plugins/skeleton_ik_editor_plugin.cpp msgid "Play IK" -msgstr "IK 실행하기" +msgstr "IK 실행" #: editor/plugins/spatial_editor_plugin.cpp msgid "Orthogonal" @@ -7070,15 +7145,15 @@ msgstr "이동 중: " #: editor/plugins/spatial_editor_plugin.cpp msgid "Rotating %s degrees." -msgstr "%s도로 회전하기." +msgstr "%s도로 회전." #: editor/plugins/spatial_editor_plugin.cpp msgid "Keying is disabled (no key inserted)." -msgstr "키가 꺼져 있어요 (키가 삽입되지 않아요)." +msgstr "키가 꺼져 있습니다 (키가 삽입되지 않습니다)." #: editor/plugins/spatial_editor_plugin.cpp msgid "Animation Key Inserted." -msgstr "애니메이션 키를 삽입했어요." +msgstr "애니메이션 키를 삽입했습니다." #: editor/plugins/spatial_editor_plugin.cpp msgid "Pitch" @@ -7158,19 +7233,19 @@ msgstr "뒷면" #: editor/plugins/spatial_editor_plugin.cpp msgid "Align Transform with View" -msgstr "변형을 뷰에 정렬하기" +msgstr "변형을 뷰에 정렬" #: editor/plugins/spatial_editor_plugin.cpp msgid "Align Rotation with View" -msgstr "회전을 뷰에 정렬하기" +msgstr "회전을 뷰에 정렬" #: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "No parent to instance a child at." -msgstr "자식을 인스턴스할 부모가 없어요." +msgstr "자식을 인스턴스할 부모가 없습니다." #: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "This operation requires a single selected node." -msgstr "이 작업은 하나의 노드를 선택해야 해요." +msgstr "이 작업은 하나의 노드를 선택해야 합니다." #: editor/plugins/spatial_editor_plugin.cpp msgid "Lock View Rotation" @@ -7178,19 +7253,19 @@ msgstr "뷰 회전 잠금" #: editor/plugins/spatial_editor_plugin.cpp msgid "Display Normal" -msgstr "노멀 표시하기" +msgstr "노멀 표시" #: editor/plugins/spatial_editor_plugin.cpp msgid "Display Wireframe" -msgstr "와이어프레임 표시하기" +msgstr "와이어프레임 표시" #: editor/plugins/spatial_editor_plugin.cpp msgid "Display Overdraw" -msgstr "오버드로 표시하기" +msgstr "오버드로 표시" #: editor/plugins/spatial_editor_plugin.cpp msgid "Display Unshaded" -msgstr "셰이더 없음 표시하기" +msgstr "셰이더 없음 표시" #: editor/plugins/spatial_editor_plugin.cpp msgid "View Environment" @@ -7226,7 +7301,7 @@ msgstr "시네마틱 미리 보기" #: editor/plugins/spatial_editor_plugin.cpp msgid "Not available when using the GLES2 renderer." -msgstr "GLES2 렌더러에서 사용할 수 없어요." +msgstr "GLES2 렌더러에서 사용할 수 없습니다." #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Left" @@ -7265,8 +7340,8 @@ msgid "" "Note: The FPS value displayed is the editor's framerate.\n" "It cannot be used as a reliable indication of in-game performance." msgstr "" -"참고: FPS 값은 편집기의 프레임으로 표시돼요.\n" -"이것이 게임 내 성능을 보장할 수 없어요." +"참고: FPS 값은 편집기의 프레임으로 표시됩니다.\n" +"이것이 게임 내 성능을 보장할 수 없습니다." #: editor/plugins/spatial_editor_plugin.cpp msgid "View Rotation Locked" @@ -7282,7 +7357,7 @@ msgstr "노드를 바닥에 스냅" #: editor/plugins/spatial_editor_plugin.cpp msgid "Couldn't find a solid floor to snap the selection to." -msgstr "선택 항목을 스냅할 바닥을 찾을 수 없어요." +msgstr "선택 항목을 스냅할 바닥을 찾을 수 없습니다." #: editor/plugins/spatial_editor_plugin.cpp msgid "" @@ -7290,17 +7365,17 @@ msgid "" "Alt+Drag: Move\n" "Alt+RMB: Depth list selection" msgstr "" -"드래그: 회전하기\n" -"Alt+드래그: 이동하기\n" -"Alt+우클릭: 겹친 목록 선택하기" +"드래그: 회전\n" +"Alt+드래그: 이동\n" +"Alt+우클릭: 겹친 목록 선택" #: editor/plugins/spatial_editor_plugin.cpp msgid "Use Local Space" -msgstr "로컬 스페이스 사용하기" +msgstr "로컬 스페이스 사용" #: editor/plugins/spatial_editor_plugin.cpp msgid "Use Snap" -msgstr "스냅 사용하기" +msgstr "스냅 사용" #: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View" @@ -7332,7 +7407,7 @@ msgstr "원근/직교 뷰 전환" #: editor/plugins/spatial_editor_plugin.cpp msgid "Insert Animation Key" -msgstr "애니메이션 키 삽입하기" +msgstr "애니메이션 키 삽입" #: editor/plugins/spatial_editor_plugin.cpp msgid "Focus Origin" @@ -7349,7 +7424,7 @@ msgstr "자유 시점 토글" #: editor/plugins/spatial_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Transform" -msgstr "변형하기" +msgstr "변형" #: editor/plugins/spatial_editor_plugin.cpp msgid "Snap Object to Floor" @@ -7438,7 +7513,7 @@ msgstr "변형 바꾸기" #: editor/plugins/spatial_editor_plugin.cpp msgid "Translate:" -msgstr "이동하기:" +msgstr "이동:" #: editor/plugins/spatial_editor_plugin.cpp msgid "Rotate (deg.):" @@ -7498,31 +7573,31 @@ msgstr "LightOccluder2D 미리 보기" #: editor/plugins/sprite_editor_plugin.cpp msgid "Sprite is empty!" -msgstr "스프라이트가 없어요!" +msgstr "스프라이트가 없습니다!" #: editor/plugins/sprite_editor_plugin.cpp msgid "Can't convert a sprite using animation frames to mesh." -msgstr "애니메이션 프레임을 사용하는 스프라이트를 메시로 변환할 수 없어요." +msgstr "애니메이션 프레임을 사용하는 스프라이트를 메시로 변환할 수 없습니다." #: editor/plugins/sprite_editor_plugin.cpp msgid "Invalid geometry, can't replace by mesh." -msgstr "잘못된 형태. 메시로 대체할 수 없어요." +msgstr "잘못된 형태. 메시로 대체할 수 없습니다." #: editor/plugins/sprite_editor_plugin.cpp msgid "Convert to Mesh2D" -msgstr "Mesh2D로 변환하기" +msgstr "Mesh2D로 변환" #: editor/plugins/sprite_editor_plugin.cpp msgid "Invalid geometry, can't create polygon." -msgstr "잘못된 형태. 폴리곤을 만들 수 없어요." +msgstr "잘못된 형태. 폴리곤을 만들 수 없습니다." #: editor/plugins/sprite_editor_plugin.cpp msgid "Convert to Polygon2D" -msgstr "Polygon2D로 변환하기" +msgstr "Polygon2D로 변환" #: editor/plugins/sprite_editor_plugin.cpp msgid "Invalid geometry, can't create collision polygon." -msgstr "잘못된 형태. 충돌 폴리곤을 만들 수 없어요." +msgstr "잘못된 형태. 충돌 폴리곤을 만들 수 없습니다." #: editor/plugins/sprite_editor_plugin.cpp msgid "Create CollisionPolygon2D Sibling" @@ -7530,7 +7605,7 @@ msgstr "CollisionPolygon2D 노드 만들기" #: editor/plugins/sprite_editor_plugin.cpp msgid "Invalid geometry, can't create light occluder." -msgstr "잘못된 형태, 조명 어클루더를 만들 수 없어요." +msgstr "잘못된 형태, 조명 어클루더를 만들 수 없습니다." #: editor/plugins/sprite_editor_plugin.cpp msgid "Create LightOccluder2D Sibling" @@ -7566,11 +7641,11 @@ msgstr "선택한 프레임 없음" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Add %d Frame(s)" -msgstr "%d개의 프레임 추가하기" +msgstr "%d개의 프레임 추가" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Add Frame" -msgstr "프레임 추가하기" +msgstr "프레임 추가" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Unable to load images" @@ -7578,11 +7653,11 @@ msgstr "이미지를 불러올 수 없음" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "ERROR: Couldn't load frame resource!" -msgstr "오류: 프레임 리소스를 불러올 수 없어요!" +msgstr "오류: 프레임 리소스를 불러올 수 없습니다!" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Resource clipboard is empty or not a texture!" -msgstr "리소스 클립보드가 비었거나 텍스처가 아니에요!" +msgstr "리소스 클립보드가 비었거나 텍스처가 아닙니다!" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Paste Frame" @@ -7590,7 +7665,7 @@ msgstr "프레임 붙여넣기" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Add Empty" -msgstr "빈 프레임 추가하기" +msgstr "빈 프레임 추가" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Change Animation FPS" @@ -7602,7 +7677,7 @@ msgstr "(비었음)" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Move Frame" -msgstr "프레임 이동하기" +msgstr "프레임 이동" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Animations:" @@ -7626,31 +7701,31 @@ msgstr "애니메이션 프레임:" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Add a Texture from File" -msgstr "파일에서 텍스처 추가하기" +msgstr "파일에서 텍스처 추가" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Add Frames from a Sprite Sheet" -msgstr "스프라이트 시트에서 프레임 추가하기" +msgstr "스프라이트 시트에서 프레임 추가" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Insert Empty (Before)" -msgstr "빈 프레임 삽입하기 (이전)" +msgstr "빈 프레임 삽입 (이전)" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Insert Empty (After)" -msgstr "빈 프레임 삽입하기 (이후)" +msgstr "빈 프레임 삽입 (이후)" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Move (Before)" -msgstr "이동하기 (이전)" +msgstr "이동 (이전)" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Move (After)" -msgstr "이동하기 (이후)" +msgstr "이동 (이후)" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Select Frames" -msgstr "프레임 선택하기" +msgstr "프레임 선택" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Horizontal:" @@ -7662,7 +7737,7 @@ msgstr "수직:" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Select/Clear All Frames" -msgstr "모든 프레임 선택하기/지우기" +msgstr "모든 프레임 선택/지우기" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Create Frames from Sprite Sheet" @@ -7674,11 +7749,11 @@ msgstr "스프라이트 프레임" #: editor/plugins/texture_region_editor_plugin.cpp msgid "Set Region Rect" -msgstr "사각 영역 설정하기" +msgstr "사각 영역 설정" #: editor/plugins/texture_region_editor_plugin.cpp msgid "Set Margin" -msgstr "여백 설정하기" +msgstr "여백 설정" #: editor/plugins/texture_region_editor_plugin.cpp msgid "Snap Mode:" @@ -7719,23 +7794,23 @@ msgstr "텍스처 영역" #: editor/plugins/theme_editor_plugin.cpp msgid "Add All Items" -msgstr "모든 항목 추가하기" +msgstr "모든 항목 추가" #: editor/plugins/theme_editor_plugin.cpp msgid "Add All" -msgstr "모두 추가하기" +msgstr "모두 추가" #: editor/plugins/theme_editor_plugin.cpp msgid "Remove All Items" -msgstr "모든 항목 삭제하기" +msgstr "모든 항목 삭제" #: editor/plugins/theme_editor_plugin.cpp editor/project_manager.cpp msgid "Remove All" -msgstr "모두 삭제하기" +msgstr "모두 삭제" #: editor/plugins/theme_editor_plugin.cpp msgid "Edit Theme" -msgstr "테마 편집하기" +msgstr "테마 편집" #: editor/plugins/theme_editor_plugin.cpp msgid "Theme editing menu." @@ -7743,11 +7818,11 @@ msgstr "테마 편집 메뉴." #: editor/plugins/theme_editor_plugin.cpp msgid "Add Class Items" -msgstr "클래스 항목 추가하기" +msgstr "클래스 항목 추가" #: editor/plugins/theme_editor_plugin.cpp msgid "Remove Class Items" -msgstr "클래스 항목 삭제하기" +msgstr "클래스 항목 삭제" #: editor/plugins/theme_editor_plugin.cpp msgid "Create Empty Template" @@ -7885,7 +7960,7 @@ msgstr "선택 항목 잘라내기" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint TileMap" -msgstr "타일맵 칠하기" +msgstr "타일맵 칠" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Line Draw" @@ -7941,15 +8016,15 @@ msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Pick Tile" -msgstr "타일 선택하기" +msgstr "타일 선택" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Rotate Left" -msgstr "왼쪽으로 회전하기" +msgstr "왼쪽으로 회전" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Rotate Right" -msgstr "오른쪽으로 회전하기" +msgstr "오른쪽으로 회전" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Flip Horizontally" @@ -7965,11 +8040,11 @@ msgstr "변형 지우기" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Add Texture(s) to TileSet." -msgstr "TileSet에 텍스처 추가하기." +msgstr "TileSet에 텍스처를 추가합니다." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Remove selected Texture from TileSet." -msgstr "선택한 텍스처를 TileSet에서 삭제하기." +msgstr "선택한 텍스처를 TileSet에서 삭제." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Create from Scene" @@ -8069,7 +8144,7 @@ msgstr "Z 인덱스 모드" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Copy bitmask." -msgstr "비트 마스크 복사하기." +msgstr "비트 마스크 복사." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Paste bitmask." @@ -8081,15 +8156,15 @@ msgstr "비트 마스크 지우기." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Create a new rectangle." -msgstr "새로운 사각형 만들기." +msgstr "새로운 사각형을 만듭니다." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Create a new polygon." -msgstr "새로운 폴리곤 만들기." +msgstr "새로운 폴리곤을 만듭니다." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." -msgstr "사각형 내부에 폴리곤을 유지하기." +msgstr "사각형 내부에 폴리곤을 유지." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Enable snap and show grid (configurable via the Inspector)." @@ -8108,15 +8183,15 @@ msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Remove selected texture? This will remove all tiles which use it." msgstr "" -"선택한 텍스처를 삭제할까요? 이 텍스처를 사용하는 모든 타일도 삭제될 거예요." +"선택한 텍스처를 삭제할까요? 이 텍스처를 사용하는 모든 타일도 삭제될 것입니다." #: editor/plugins/tile_set_editor_plugin.cpp msgid "You haven't selected a texture to remove." -msgstr "삭제할 텍스처를 선택하지 않았어요." +msgstr "삭제할 텍스처를 선택하지 않았습니다." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Create from scene? This will overwrite all current tiles." -msgstr "씬에서 만들까요? 모든 현재 파일을 덮어 씌울 거예요." +msgstr "씬에서 만들까요? 모든 현재 파일을 덮어 씌울 것입니다." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Merge from scene?" @@ -8124,35 +8199,35 @@ msgstr "씬에서 병합할까요?" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Remove Texture" -msgstr "텍스처 삭제하기" +msgstr "텍스처 삭제" #: editor/plugins/tile_set_editor_plugin.cpp msgid "%s file(s) were not added because was already on the list." -msgstr "%s 파일이 이미 목록에 있어서 추가하지 않았어요." +msgstr "%s 파일이 이미 목록에 있어서 추가하지 않았습니다." #: editor/plugins/tile_set_editor_plugin.cpp msgid "" "Drag handles to edit Rect.\n" "Click on another Tile to edit it." msgstr "" -"핸들을 드래그하여 사각형을 편집해요.\n" +"핸들을 드래그하여 사각형을 편집합니다.\n" "다른 타일을 편집하려면 클릭하세요." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Delete selected Rect." -msgstr "선택한 사각형을 삭제하기." +msgstr "선택한 사각형을 삭제합니다." #: editor/plugins/tile_set_editor_plugin.cpp msgid "" "Select current edited sub-tile.\n" "Click on another Tile to edit it." msgstr "" -"현재 편집한 하위 타일을 선택해요.\n" +"현재 편집한 하위 타일을 선택합니다.\n" "다른 타일을 편집하려면 클릭하세요." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Delete polygon." -msgstr "폴리곤 삭제하기." +msgstr "폴리곤을 삭제합니다." #: editor/plugins/tile_set_editor_plugin.cpp msgid "" @@ -8161,9 +8236,9 @@ msgid "" "Shift+LMB: Set wildcard bit.\n" "Click on another Tile to edit it." msgstr "" -"좌클릭: 비트를 켜요.\n" -"우클릭: 비트를 꺼요.\n" -"Shift+좌클릭: 와일드카드 비트를 설정해요.\n" +"좌클릭: 비트를 켭니다.\n" +"우클릭: 비트를 끕니다.\n" +"Shift+좌클릭: 와일드카드 비트를 설정합니다.\n" "다른 타일을 편집하려면 클릭하세요." #: editor/plugins/tile_set_editor_plugin.cpp @@ -8173,7 +8248,7 @@ msgid "" "Click on another Tile to edit it." msgstr "" "아이콘으로 쓸 하위 타일을 선택하세요. 이것은 잘못된 오토타일 바인딩에도 사용" -"돼요.\n" +"됩니다.\n" "다른 타일을 편집하려면 클릭하세요." #: editor/plugins/tile_set_editor_plugin.cpp @@ -8181,7 +8256,7 @@ msgid "" "Select sub-tile to change its priority.\n" "Click on another Tile to edit it." msgstr "" -"하위 타일을 선택해서 우선 순위를 바꿔요.\n" +"하위 타일을 선택해서 우선 순위를 바꿉니다.\n" "다른 타일을 편집하려면 클릭하세요." #: editor/plugins/tile_set_editor_plugin.cpp @@ -8189,12 +8264,12 @@ msgid "" "Select sub-tile to change its z index.\n" "Click on another Tile to edit it." msgstr "" -"하위 타일을 선택해서 Z 인덱스를 바꿔요.\n" +"하위 타일을 선택해서 Z 인덱스를 바꿉니다.\n" "다른 타일을 편집하려면 클릭하세요." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Set Tile Region" -msgstr "타일 영역 설정하기" +msgstr "타일 영역 설정" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Create Tile" @@ -8202,23 +8277,23 @@ msgstr "타일 만들기" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Set Tile Icon" -msgstr "타일 아이콘 설정하기" +msgstr "타일 아이콘 설정" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Edit Tile Bitmask" -msgstr "타일 비트 마스크 편집하기" +msgstr "타일 비트 마스크 편집" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Edit Collision Polygon" -msgstr "충돌 폴리곤 편집하기" +msgstr "충돌 폴리곤 편집" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Edit Occlusion Polygon" -msgstr "어클루전 폴리곤 편집하기" +msgstr "어클루전 폴리곤 편집" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Edit Navigation Polygon" -msgstr "내비게이션 폴리곤 편집하기" +msgstr "내비게이션 폴리곤 편집" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Paste Tile Bitmask" @@ -8238,27 +8313,27 @@ msgstr "볼록한 폴리곤 만들기" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Remove Tile" -msgstr "타일 삭제하기" +msgstr "타일 삭제" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Remove Collision Polygon" -msgstr "충돌 폴리곤 삭제하기" +msgstr "충돌 폴리곤 삭제" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Remove Occlusion Polygon" -msgstr "어클루전 폴리곤 삭제하기" +msgstr "어클루전 폴리곤 삭제" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Remove Navigation Polygon" -msgstr "내비게이션 폴리곤 삭제하기" +msgstr "내비게이션 폴리곤 삭제" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Edit Tile Priority" -msgstr "필터 우선 순위 편집하기" +msgstr "필터 우선 순위 편집" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Edit Tile Z Index" -msgstr "타일 Z 인덱스 편집하기" +msgstr "타일 Z 인덱스 편집" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Make Convex" @@ -8278,7 +8353,7 @@ msgstr "어클루전 폴리곤 만들기" #: editor/plugins/tile_set_editor_plugin.cpp msgid "This property can't be changed." -msgstr "이 속성은 바꿀 수 없어요." +msgstr "이 속성은 바꿀 수 없습니다." #: editor/plugins/tile_set_editor_plugin.cpp msgid "TileSet" @@ -8286,19 +8361,19 @@ msgstr "타일셋" #: editor/plugins/version_control_editor_plugin.cpp msgid "No VCS addons are available." -msgstr "이용할 수 있는 버전 관리 시스템(VCS)이 없어요." +msgstr "이용할 수 있는 버전 관리 시스템(VCS)이 없습니다." -#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Error" msgstr "오류" #: editor/plugins/version_control_editor_plugin.cpp msgid "No commit message was provided" -msgstr "커밋 메시지를 제공하지 않았어요" +msgstr "커밋 메시지를 제공하지 않았습니다" #: editor/plugins/version_control_editor_plugin.cpp msgid "No files added to stage" -msgstr "스테이지에 추가된 파일이 없어요" +msgstr "스테이지에 추가된 파일이 없습니다" #: editor/plugins/version_control_editor_plugin.cpp msgid "Commit" @@ -8306,7 +8381,7 @@ msgstr "커밋" #: editor/plugins/version_control_editor_plugin.cpp msgid "VCS Addon is not initialized" -msgstr "버전 관리 시스템(VCS)이 초기화되지 않았어요" +msgstr "버전 관리 시스템(VCS)이 초기화되지 않았습니다" #: editor/plugins/version_control_editor_plugin.cpp msgid "Version Control System" @@ -8354,7 +8429,7 @@ msgstr "모두 스테이지로 보내기" #: editor/plugins/version_control_editor_plugin.cpp msgid "Add a commit message" -msgstr "커밋 메시지 추가하기" +msgstr "커밋 메시지 추가" #: editor/plugins/version_control_editor_plugin.cpp msgid "Commit Changes" @@ -8371,7 +8446,7 @@ msgstr "최신 버전으로 커밋하기 전에 파일 diff 보기" #: editor/plugins/version_control_editor_plugin.cpp msgid "No file diff is active" -msgstr "파일 diff가 켜져 있지 않아요" +msgstr "파일 diff가 켜져 있지 않습니다" #: editor/plugins/version_control_editor_plugin.cpp msgid "Detect changes in file diff" @@ -8383,7 +8458,7 @@ msgstr "(GLES3만 가능)" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Add Output" -msgstr "출력 추가하기" +msgstr "출력 추가" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Scalar" @@ -8435,27 +8510,27 @@ msgstr "출력 포트 삭제하기" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Set expression" -msgstr "표현식 설정하기" +msgstr "표현식 설정" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Resize VisualShader node" -msgstr "비주얼 셰이더 노드 크기 조정하기" +msgstr "비주얼 셰이더 노드 크기 조정" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Set Uniform Name" -msgstr "Uniform 이름 설정하기" +msgstr "Uniform 이름 설정" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Set Input Default Port" -msgstr "입력 기본 포트 설정하기" +msgstr "입력 기본 포트 설정" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Add Node to Visual Shader" -msgstr "노드를 비주얼 셰이더에 추가하기" +msgstr "노드를 비주얼 셰이더에 추가" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Duplicate Nodes" -msgstr "노드 복제하기" +msgstr "노드 복제" #: editor/plugins/visual_shader_editor_plugin.cpp #: modules/visual_script/visual_script_editor.cpp @@ -8464,7 +8539,7 @@ msgstr "노드 붙여넣기" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Delete Nodes" -msgstr "노드 삭제하기" +msgstr "노드 삭제" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Visual Shader Input Type Changed" @@ -8504,11 +8579,11 @@ msgstr "회색조 함수." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Converts HSV vector to RGB equivalent." -msgstr "HSV 벡터를 RGB로 변환해요." +msgstr "HSV 벡터를 RGB로 변환합니다." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Converts RGB vector to HSV equivalent." -msgstr "RGB 벡터를 HSV로 변환해요." +msgstr "RGB 벡터를 HSV로 변환합니다." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Sepia function." @@ -8560,7 +8635,7 @@ msgstr "색상 Uniform." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the boolean result of the %s comparison between two parameters." -msgstr "두 매개변수 사이 %s 비교의 불리언 결과 값을 반환해요." +msgstr "두 매개변수 사이 %s 비교의 불리언 결과 값을 반환합니다." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Equal (==)" @@ -8578,20 +8653,20 @@ msgstr "보다 크거나 같다 (>=)" msgid "" "Returns an associated vector if the provided scalars are equal, greater or " "less." -msgstr "제공된 스칼라가 같거나, 더 크거나, 더 작으면 관련 벡터를 반환해요." +msgstr "제공된 스칼라가 같거나, 더 크거나, 더 작으면 관련 벡터를 반환합니다." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" "Returns the boolean result of the comparison between INF and a scalar " "parameter." -msgstr "INF(무한)과 스칼라 매개변수 사이 비교의 불리언 결과 값을 반환해요." +msgstr "INF(무한)과 스칼라 매개변수 사이 비교의 불리언 결과 값을 반환합니다." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" "Returns the boolean result of the comparison between NaN and a scalar " "parameter." msgstr "" -"NaN(숫자 아님)과 스칼라 매개변수 사이 비교의 불리언 결과 값을 반환해요." +"NaN(숫자 아님)과 스칼라 매개변수 사이 비교의 불리언 결과 값을 반환합니다." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Less Than (<)" @@ -8608,16 +8683,16 @@ msgstr "같지 않다 (!=)" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" "Returns an associated vector if the provided boolean value is true or false." -msgstr "불리언 값이 참이거나 거짓이면 관련 벡터를 반환해요." +msgstr "불리언 값이 참이거나 거짓이면 관련 벡터를 반환합니다." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" "Returns an associated scalar if the provided boolean value is true or false." -msgstr "불리언 값이 참이거나 거짓이면 관련 스칼라를 반환해요." +msgstr "불리언 값이 참이거나 거짓이면 관련 스칼라를 반환합니다." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the boolean result of the comparison between two parameters." -msgstr "두 매개변수 사이 비교의 불리언 결과 값을 반환해요." +msgstr "두 매개변수 사이 비교의 불리언 결과 값을 반환합니다." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" @@ -8625,7 +8700,7 @@ msgid "" "scalar parameter." msgstr "" "INF(무한) (또는 NaN(숫자 아님))과 스칼라 매개변수 사이 비교의 불리언 결과 값" -"을 반환해요." +"을 반환합니다." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Boolean constant." @@ -8709,35 +8784,35 @@ msgstr "Sqrt2 상수 (1.414214). 2의 제곱근." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the absolute value of the parameter." -msgstr "매개변수의 절대값을 반환해요." +msgstr "매개변수의 절대값을 반환합니다." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the arc-cosine of the parameter." -msgstr "매개변수의 아크코사인 값을 반환해요." +msgstr "매개변수의 아크코사인 값을 반환합니다." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the inverse hyperbolic cosine of the parameter." -msgstr "매개변수의 역쌍곡코사인 값을 반환해요." +msgstr "매개변수의 역쌍곡코사인 값을 반환합니다." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the arc-sine of the parameter." -msgstr "매개변수의 아크사인 값을 반환해요." +msgstr "매개변수의 아크사인 값을 반환합니다." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the inverse hyperbolic sine of the parameter." -msgstr "매개변수의 역쌍곡사인 값을 반환해요." +msgstr "매개변수의 역쌍곡사인 값을 반환합니다." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the arc-tangent of the parameter." -msgstr "매개변수의 아크탄젠트 값을 반환해요." +msgstr "매개변수의 아크탄젠트 값을 반환합니다." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the arc-tangent of the parameters." -msgstr "매개변수들의 아크탄젠트 값을 반환해요." +msgstr "매개변수들의 아크탄젠트 값을 반환합니다." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the inverse hyperbolic tangent of the parameter." -msgstr "매개변수의 역쌍곡탄젠트 값을 반환해요." +msgstr "매개변수의 역쌍곡탄젠트 값을 반환합니다." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" @@ -8746,19 +8821,19 @@ msgstr "매개변수보다 크거나 같은 가장 가까운 정수를 찾아요 #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Constrains a value to lie between two further values." -msgstr "떨어져 있는 두 값 사이에 놓이는 값을 제한해요." +msgstr "떨어져 있는 두 값 사이에 놓이는 값을 제한합니다." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the cosine of the parameter." -msgstr "매개변수의 코사인 값을 반환해요." +msgstr "매개변수의 코사인 값을 반환합니다." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the hyperbolic cosine of the parameter." -msgstr "매개변수의 쌍곡코사인 값을 반환해요." +msgstr "매개변수의 쌍곡코사인 값을 반환합니다." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Converts a quantity in radians to degrees." -msgstr "각도 단위를 라디안에서 도로 변환해요." +msgstr "각도 단위를 라디안에서 도로 변환합니다." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Base-e Exponential." @@ -8774,11 +8849,11 @@ msgstr "매개변수보다 적거나 같은 가장 가까운 정수를 찾아요 #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Computes the fractional part of the argument." -msgstr "인수의 소수 부분을 계산해요." +msgstr "인수의 소수 부분을 계산합니다." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the inverse of the square root of the parameter." -msgstr "매개변수의 제곱근 역함수 값을 반환해요." +msgstr "매개변수의 제곱근 역함수 값을 반환합니다." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Natural logarithm." @@ -8790,11 +8865,11 @@ msgstr "2가 밑인 로그 함수." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the greater of two values." -msgstr "두 값 중 더 큰 값을 반환해요." +msgstr "두 값 중 더 큰 값을 반환합니다." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the lesser of two values." -msgstr "두 값 중 더 작은 값을 반환해요." +msgstr "두 값 중 더 작은 값을 반환합니다." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Linear interpolation between two scalars." @@ -8802,7 +8877,7 @@ msgstr "두 스칼라 값 사이 선형 보간." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the opposite value of the parameter." -msgstr "매개변수의 반대 값을 반환해요." +msgstr "매개변수의 반대 값을 반환합니다." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "1.0 - scalar" @@ -8811,11 +8886,11 @@ msgstr "1.0 - 스칼라" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" "Returns the value of the first parameter raised to the power of the second." -msgstr "첫 번째 매개변수를 두 번째 매개변수로 제곱한 값을 반환해요." +msgstr "첫 번째 매개변수를 두 번째 매개변수로 제곱한 값을 반환합니다." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Converts a quantity in degrees to radians." -msgstr "각도 단위를 도에서 라디안으로 변환해요." +msgstr "각도 단위를 도에서 라디안으로 변환합니다." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "1.0 / scalar" @@ -8831,23 +8906,23 @@ msgstr "매개변수에서 가장 가까운 짝수 정수를 찾아요." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Clamps the value between 0.0 and 1.0." -msgstr "값을 0.0에서 1.0 사이로 고정해요." +msgstr "값을 0.0에서 1.0 사이로 고정합니다." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Extracts the sign of the parameter." -msgstr "매개변수의 부호를 추출해요." +msgstr "매개변수의 부호를 추출합니다." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the sine of the parameter." -msgstr "매개변수의 사인 값을 반환해요." +msgstr "매개변수의 사인 값을 반환합니다." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the hyperbolic sine of the parameter." -msgstr "매개변수의 쌍곡사인 값을 반환해요." +msgstr "매개변수의 쌍곡사인 값을 반환합니다." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the square root of the parameter." -msgstr "매개변수의 제곱근을 반환해요." +msgstr "매개변수의 제곱근을 반환합니다." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" @@ -8859,8 +8934,8 @@ msgid "" msgstr "" "SmoothStep 함수( 스칼라(edge0), 스칼라(edge1), 스칼라(x) ).\n" "\n" -"'x'가 'edge0'보다 작으면 0.0을 반환하고, 'edge1'보다 크면 1.0을 반환해요. 그" -"렇지 않은 경우, 에르미트 다항식을 통해반환값을 0.0과 1.0사이로 보간해요." +"'x'가 'edge0'보다 작으면 0.0을 반환하고, 'edge1'보다 크면 1.0을 반환합니다. " +"그렇지 않은 경우, 에르미트 다항식을 통해반환값을 0.0과 1.0사이로 보간합니다." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" @@ -8870,15 +8945,15 @@ msgid "" msgstr "" "Step 함수( 스칼라(edge), 스칼라(x) ).\n" "\n" -"'x'가 'edge'보다 작으면 0.0을 반환하고 그렇지 않으면 1.0을 반환해요." +"'x'가 'edge'보다 작으면 0.0을 반환하고 그렇지 않으면 1.0을 반환합니다." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the tangent of the parameter." -msgstr "매개변수의 탄젠트 값을 반환해요." +msgstr "매개변수의 탄젠트 값을 반환합니다." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the hyperbolic tangent of the parameter." -msgstr "매개변수의 쌍곡탄젠트 값을 반환해요." +msgstr "매개변수의 쌍곡탄젠트 값을 반환합니다." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Finds the truncated value of the parameter." @@ -8886,23 +8961,23 @@ msgstr "매개변수의 절사된 값을 찾아요." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Adds scalar to scalar." -msgstr "스칼라에 스칼라를 더해요." +msgstr "스칼라에 스칼라를 더합니다." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Divides scalar by scalar." -msgstr "스칼라를 스칼라로 나누어요." +msgstr "스칼라를 스칼라로 나눕니다." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Multiplies scalar by scalar." -msgstr "스칼라를 스칼라로 곱해요." +msgstr "스칼라를 스칼라로 곱합니다." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the remainder of the two scalars." -msgstr "두 스칼라의 나머지를 반환해요." +msgstr "두 스칼라의 나머지를 반환합니다." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Subtracts scalar from scalar." -msgstr "스칼라에서 스칼라를 빼요." +msgstr "스칼라에서 스칼라를 뺍니다." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Scalar constant." @@ -8914,11 +8989,11 @@ msgstr "스칼라 Uniform." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Perform the cubic texture lookup." -msgstr "세제곱 텍스처 룩업을 수행해요." +msgstr "세제곱 텍스처 룩업을 수행합니다." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Perform the texture lookup." -msgstr "텍스처 룩업을 수행해요." +msgstr "텍스처 룩업을 수행합니다." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Cubic texture uniform lookup." @@ -8946,40 +9021,40 @@ msgid "" "whose number of rows is the number of components in 'c' and whose number of " "columns is the number of components in 'r'." msgstr "" -"벡터 한 쌍의 외적을 계산해요.\n" +"벡터 한 쌍의 외적을 계산합니다.\n" "\n" "OuterProduct는 첫 매개변수 'c'를 열 벡터로 취급하고 (1열로 이루어진 행렬) 두 " -"번째 매개변수 'r'을 행 벡터로 취급해요 (1행으로 이루어진 행렬), 그리고 선형 " -"대수 행렬에 'c * r'을 곱해서 행렬을 산출하는데, 행 수는 'c'의 구성 요소 수이" -"고 열 수는 'r'의 구성 요소 수가 돼요." +"번째 매개변수 'r'을 행 벡터로 취급합니다 (1행으로 이루어진 행렬), 그리고 선" +"형 대수 행렬에 'c * r'을 곱해서 행렬을 산출하는데, 행 수는 'c'의 구성 요소 수" +"이고 열 수는 'r'의 구성 요소 수가 됩니다." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Composes transform from four vectors." -msgstr "4개의 벡터로 변형을 합성해요." +msgstr "4개의 벡터로 변형을 합성합니다." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Decomposes transform to four vectors." -msgstr "변형을 4개의 벡터로 분해해요." +msgstr "변형을 4개의 벡터로 분해합니다." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Calculates the determinant of a transform." -msgstr "변형의 행렬식을 계산해요." +msgstr "변형의 행렬식을 계산합니다." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Calculates the inverse of a transform." -msgstr "변형의 역함수를 계산해요." +msgstr "변형의 역함수를 계산합니다." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Calculates the transpose of a transform." -msgstr "변형의 전치를 계산해요." +msgstr "변형의 전치를 계산합니다." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Multiplies transform by transform." -msgstr "변형에 변형을 곱해요." +msgstr "변형에 변형을 곱합니다." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Multiplies vector by transform." -msgstr "변형에 벡터를 곱해요." +msgstr "변형에 벡터를 곱합니다." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Transform constant." @@ -8999,23 +9074,23 @@ msgstr "벡터 연산자." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Composes vector from three scalars." -msgstr "세 개의 스칼라로 벡터를 합성해요." +msgstr "세 개의 스칼라로 벡터를 합성합니다." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Decomposes vector to three scalars." -msgstr "벡터를 세 개의 스칼라로 분해해요." +msgstr "벡터를 세 개의 스칼라로 분해합니다." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Calculates the cross product of two vectors." -msgstr "두 벡터의 벡터곱 값을 계산해요." +msgstr "두 벡터의 벡터곱 값을 계산합니다." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the distance between two points." -msgstr "두 점 사이의 거리를 반환해요." +msgstr "두 점 사이의 거리를 반환합니다." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Calculates the dot product of two vectors." -msgstr "두 벡터의 스칼라곱 값을 계산해요." +msgstr "두 벡터의 스칼라곱 값을 계산합니다." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" @@ -9024,14 +9099,14 @@ msgid "" "incident vector, and Nref, the reference vector. If the dot product of I and " "Nref is smaller than zero the return value is N. Otherwise -N is returned." msgstr "" -"같은 방향을 가리키는 벡터를 참조 벡터로 반환해요. 함수에는 세 개의 벡터 매개" -"변수가 있어요 : 방향을 지정하는 벡터 N, 인시던트 벡터 I, 그리고 참조 벡터 " -"Nref. 만약 I와 Nref가 0의 벡터곱이 0보다 작다면 반환값은 N이 돼요. 그렇지 않" -"으면 -N이 반환돼요." +"같은 방향을 가리키는 벡터를 참조 벡터로 반환합니다. 함수에는 세 개의 벡터 매" +"개변수가 있습니다 : 방향을 지정하는 벡터 N, 인시던트 벡터 I, 그리고 참조 벡" +"터 Nref. 만약 I와 Nref가 0의 벡터곱이 0보다 작다면 반환값은 N이 됩니다. 그렇" +"지 않으면 -N이 반환됩니다." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Calculates the length of a vector." -msgstr "벡터의 길이를 계산해요." +msgstr "벡터의 길이를 계산합니다." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Linear interpolation between two vectors." @@ -9043,7 +9118,7 @@ msgstr "스칼라를 사용하 두 벡터 간의 선형 보간." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Calculates the normalize product of vector." -msgstr "벡터의 노멀 값을 계산해요." +msgstr "벡터의 노멀 값을 계산합니다." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "1.0 - vector" @@ -9058,11 +9133,11 @@ msgid "" "Returns the vector that points in the direction of reflection ( a : incident " "vector, b : normal vector )." msgstr "" -"반사 방향을 가리키는 벡터를 반환해요 (a : 인시던트 벡터, b : 노멀 벡터)." +"반사 방향을 가리키는 벡터를 반환합니다 (a : 인시던트 벡터, b : 노멀 벡터)." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the vector that points in the direction of refraction." -msgstr "반사 방향을 가리키는 벡터를 반환해요." +msgstr "반사 방향을 가리키는 벡터를 반환합니다." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" @@ -9074,8 +9149,8 @@ msgid "" msgstr "" "SmoothStep 함수( 벡터(edge0), 벡터(edge1), 벡터(x) ).\n" "\n" -"'x'가 'edge0'보다 작으면 0.0을, 'x'가 'edge1'보다 크면 1.0을 반환해요. 그렇" -"지 않은 경우 에르미트 다항식으로 반환값을 0.0과 1.0 사이로 보간해요." +"'x'가 'edge0'보다 작으면 0.0을, 'x'가 'edge1'보다 크면 1.0을 반환합니다. 그렇" +"지 않은 경우 에르미트 다항식으로 반환값을 0.0과 1.0 사이로 보간합니다." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" @@ -9087,8 +9162,8 @@ msgid "" msgstr "" "SmoothStep 함수( 스칼라(edge0), 스칼라(edge1), 벡터(x) ).\n" "\n" -"'x'가 'edge0'보다 작으면 0.0을, 'x'가 'edge1'보다 크면 1.0을 반환해요. 그렇" -"지 않은 경우 에르미트 다항식으로 반환값을 0.0과 1.0 사이로 보간해요." +"'x'가 'edge0'보다 작으면 0.0을, 'x'가 'edge1'보다 크면 1.0을 반환합니다. 그렇" +"지 않은 경우 에르미트 다항식으로 반환값을 0.0과 1.0 사이로 보간합니다." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" @@ -9098,7 +9173,7 @@ msgid "" msgstr "" "Step 함수( 벡터(edge), 벡터(x) ).\n" "\n" -"'x'가 'edge'보다 작으면 0.0을 반환하고, 그렇지 않은 경우 1.0을 반환해요." +"'x'가 'edge'보다 작으면 0.0을 반환하고, 그렇지 않은 경우 1.0을 반환합니다." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" @@ -9108,27 +9183,27 @@ msgid "" msgstr "" "Step 함수( 스칼라(edge), 벡터(x) ).\n" "\n" -"'x'가 'edge'보다 작으면 0.0을 반환하고, 그렇지 않은 경우 1.0을 반환해요." +"'x'가 'edge'보다 작으면 0.0을 반환하고, 그렇지 않은 경우 1.0을 반환합니다." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Adds vector to vector." -msgstr "벡터에 벡터를 더해요." +msgstr "벡터에 벡터를 더합니다." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Divides vector by vector." -msgstr "벡터를 벡터로 나누어요." +msgstr "벡터를 벡터로 나눕니다." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Multiplies vector by vector." -msgstr "벡터를 벡터로 곱해요." +msgstr "벡터를 벡터로 곱합니다." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the remainder of the two vectors." -msgstr "두 벡터의 나머지를 반환해요." +msgstr "두 벡터의 나머지를 반환합니다." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Subtracts vector from vector." -msgstr "벡터에서 벡터를 빼요." +msgstr "벡터에서 벡터를 뺍니다." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Vector constant." @@ -9153,8 +9228,8 @@ msgid "" "Returns falloff based on the dot product of surface normal and view " "direction of camera (pass associated inputs to it)." msgstr "" -"카메라의 화면 방향과 표면 노멀의 스칼라곱을 기반으로 하는 폴오프를 반환해요 " -"(폴오프와 관련된 입력을 전달함)." +"카메라의 화면 방향과 표면 노멀의 스칼라곱을 기반으로 하는 폴오프를 반환합니" +"다 (폴오프와 관련된 입력을 전달함)." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" @@ -9164,8 +9239,8 @@ msgid "" "constants." msgstr "" "결과 셰이더 위에 배치된, 맞춤 Godot 셰이더 언어 표현식. 다양한 함수 선언을 놓" -"은 뒤 나중에 표현식에서 호출할 수 있어요. Varying, Uniform, 상수도 정의할 수 " -"있어요." +"은 뒤 나중에 표현식에서 호출할 수 있습니다. Varying, Uniform, 상수도 정의할 " +"수 있습니다." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "(Fragment/Light mode only) Scalar derivative function." @@ -9219,7 +9294,7 @@ msgstr "비주얼 셰이더" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Edit Visual Property" -msgstr "비주얼 속성 편집하기" +msgstr "비주얼 속성 편집" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Visual Shader Mode Changed" @@ -9231,11 +9306,11 @@ msgstr "실행가능" #: editor/project_export.cpp msgid "Add initial export..." -msgstr "초기 내보내기 추가하기..." +msgstr "초기 내보내기 추가..." #: editor/project_export.cpp msgid "Add previous patches..." -msgstr "이전 패치 추가하기..." +msgstr "이전 패치 추가..." #: editor/project_export.cpp msgid "Delete patch '%s' from list?" @@ -9250,8 +9325,8 @@ msgid "" "Failed to export the project for platform '%s'.\n" "Export templates seem to be missing or invalid." msgstr "" -"'%s' 플랫폼에 프로젝트를 내보낼 수 없어요.\n" -"내보내기 템플릿이 누락되거나 잘못된 모양이에요." +"'%s' 플랫폼에 프로젝트를 내보낼 수 없습니다.\n" +"내보내기 템플릿이 누락되거나 잘못된 것 같습니다." #: editor/project_export.cpp msgid "" @@ -9259,8 +9334,8 @@ msgid "" "This might be due to a configuration issue in the export preset or your " "export settings." msgstr "" -"'%s' 플랫폼에 프로젝트를 내보낼 수 없어요.\n" -"내보내기 프리셋이나 내보내기 설정의 문제로 보여요." +"'%s' 플랫폼에 프로젝트를 내보낼 수 없습니다.\n" +"내보내기 프리셋이나 내보내기 설정의 문제인 것 같습니다." #: editor/project_export.cpp msgid "Release" @@ -9284,15 +9359,15 @@ msgstr "프리셋" #: editor/project_export.cpp editor/project_settings_editor.cpp msgid "Add..." -msgstr "추가하기..." +msgstr "추가..." #: editor/project_export.cpp msgid "" "If checked, the preset will be available for use in one-click deploy.\n" "Only one preset per platform may be marked as runnable." msgstr "" -"체크하면 프리셋은 원 클릭 배포로 사용할 수 있게 돼요.\n" -"플랫폼 당 하나의 프리셋만 실행 가능하다고 표시될 거에요." +"체크하면 프리셋은 원 클릭 배포로 사용할 수 있게 됩니다.\n" +"플랫폼 당 하나의 프리셋만 실행 가능하다고 표시될 것입니다." #: editor/project_export.cpp msgid "Export Path" @@ -9379,11 +9454,11 @@ msgstr "컴파일됨" #: editor/project_export.cpp msgid "Encrypted (Provide Key Below)" -msgstr "암호화 (아래에 키가 필요해요)" +msgstr "암호화 (아래에 키가 필요합니다)" #: editor/project_export.cpp msgid "Invalid Encryption Key (must be 64 characters long)" -msgstr "잘못된 암호화 키 (길이가 64자이어야 해요)" +msgstr "잘못된 암호화 키 (길이가 64자이어야 합니다)" #: editor/project_export.cpp msgid "Script Encryption Key (256-bits as hex):" @@ -9426,25 +9501,35 @@ msgid "Export With Debug" msgstr "디버그와 함께 내보내기" #: editor/project_manager.cpp -msgid "The path does not exist." -msgstr "경로가 없어요." +#, fuzzy +msgid "The path specified doesn't exist." +msgstr "경로가 없습니다." #: editor/project_manager.cpp -msgid "Invalid '.zip' project file, does not contain a 'project.godot' file." +#, fuzzy +msgid "Error opening package file (it's not in ZIP format)." +msgstr "패키지 파일을 여는 중 오류. ZIP 형식이 아닙니다." + +#: editor/project_manager.cpp +#, fuzzy +msgid "" +"Invalid \".zip\" project file; it doesn't contain a \"project.godot\" file." msgstr "" -"잘못된 '.zip' 프로젝트 파일이에요. 'project.godot' 파일을 갖고 있지 않아요." +"잘못된 '.zip' 프로젝트 파일입니다. 'project.godot' 파일을 갖고 있지 않습니다." #: editor/project_manager.cpp msgid "Please choose an empty folder." msgstr "비어있는 폴더를 선택해주세요." #: editor/project_manager.cpp -msgid "Please choose a 'project.godot' or '.zip' file." +#, fuzzy +msgid "Please choose a \"project.godot\" or \".zip\" file." msgstr "'project.godot' 파일 또는 '.zip' 파일을 선택해주세요." #: editor/project_manager.cpp -msgid "Directory already contains a Godot project." -msgstr "디렉토리에 Godot 프로젝트가 이미 있어요." +#, fuzzy +msgid "This directory already contains a Godot project." +msgstr "디렉토리에 Godot 프로젝트가 이미 있습니다." #: editor/project_manager.cpp msgid "New Game Project" @@ -9460,35 +9545,35 @@ msgstr "잘못된 프로젝트 이름." #: editor/project_manager.cpp msgid "Couldn't create folder." -msgstr "폴더를 만들 수 없어요." +msgstr "폴더를 만들 수 없습니다." #: editor/project_manager.cpp msgid "There is already a folder in this path with the specified name." -msgstr "이미 이 경로에 이 이름과 같은 폴더가 있어요." +msgstr "이미 이 경로에 이 이름과 같은 폴더가 있습니다." #: editor/project_manager.cpp msgid "It would be a good idea to name your project." -msgstr "프로젝트 이름을 정하는 게 좋을 거예요." +msgstr "프로젝트 이름을 정하는 게 좋을 것입니다." #: editor/project_manager.cpp msgid "Invalid project path (changed anything?)." -msgstr "잘못된 프로젝트 경로 (프로젝트에 손대셨나요?)." +msgstr "잘못된 프로젝트 경로 (무언가를 변경하셨습니까?)." #: editor/project_manager.cpp msgid "" "Couldn't load project.godot in project path (error %d). It may be missing or " "corrupted." msgstr "" -"프로젝트 경로에서 project.godot을 불러올 수 없어요 (error %d). 누락되거나 손" -"상된 모양이에요." +"프로젝트 경로에서 project.godot을 불러올 수 없습니다 (error %d). 누락되거나 " +"손상된 모양입니다." #: editor/project_manager.cpp msgid "Couldn't edit project.godot in project path." -msgstr "프로젝트 경로에서 project.godot 파일을 편집할 수 없어요." +msgstr "프로젝트 경로에서 project.godot 파일을 편집할 수 없습니다." #: editor/project_manager.cpp msgid "Couldn't create project.godot in project path." -msgstr "프로젝트 경로에서 project.godot 파일을 만들 수 없어요." +msgstr "프로젝트 경로에서 project.godot 파일을 만들 수 없습니다." #: editor/project_manager.cpp msgid "Rename Project" @@ -9500,7 +9585,7 @@ msgstr "기존 프로젝트 가져오기" #: editor/project_manager.cpp msgid "Import & Edit" -msgstr "가져오기 & 편집하기" +msgstr "가져오기 & 편집" #: editor/project_manager.cpp msgid "Create New Project" @@ -9508,7 +9593,7 @@ msgstr "새 프로젝트 만들기" #: editor/project_manager.cpp msgid "Create & Edit" -msgstr "만들기 & 편집하기" +msgstr "만들기 & 편집" #: editor/project_manager.cpp msgid "Install Project:" @@ -9516,7 +9601,7 @@ msgstr "프로젝트 설치:" #: editor/project_manager.cpp msgid "Install & Edit" -msgstr "설치하기 & 편집하기" +msgstr "설치 & 편집" #: editor/project_manager.cpp msgid "Project Name:" @@ -9568,7 +9653,7 @@ msgstr "" #: editor/project_manager.cpp msgid "Renderer can be changed later, but scenes may need to be adjusted." -msgstr "렌더러는 나중에 바꿀 수 있지만, 씬을 조정해야 할지도 몰라요." +msgstr "렌더러는 나중에 바꿀 수 있지만, 씬을 조정해야 할 수도 있습니다." #: editor/project_manager.cpp msgid "Unnamed Project" @@ -9580,15 +9665,15 @@ msgstr "누락된 프로젝트" #: editor/project_manager.cpp msgid "Error: Project is missing on the filesystem." -msgstr "오류: 프로젝트가 파일 시스템에서 누락됐어요." +msgstr "오류: 프로젝트가 파일 시스템에서 누락되었습니다." #: editor/project_manager.cpp msgid "Can't open project at '%s'." -msgstr "'%s'에서 프로젝트를 열 수 없어요." +msgstr "'%s'에서 프로젝트를 열 수 없습니다." #: editor/project_manager.cpp msgid "Are you sure to open more than one project?" -msgstr "두 개 이상의 프로젝트를 열 건가요?" +msgstr "두 개 이상의 프로젝트를 여시겠습니까?" #: editor/project_manager.cpp msgid "" @@ -9602,12 +9687,12 @@ msgid "" "Warning: You won't be able to open the project with previous versions of the " "engine anymore." msgstr "" -"다음 프로젝트 설정 파일은 현재 버전의 Godot에서 만든 것이 아니에요.\n" +"다음 프로젝트 설정 파일은 현재 버전의 Godot에서 만든 것이 아닙니다.\n" "↵\n" "%s↵\n" "↵\n" -"파일 열기를 계속한다면, 현재 Godot의 구성 파일 형식으로 변환될 거예요.\n" -"경고: 더 이상 이 프로젝트를 이전 버전의 엔진에서 열 수 없을 거예요." +"파일 열기를 계속한다면, 현재 Godot의 구성 파일 형식으로 변환될 것입니다.\n" +"경고: 더 이상 이 프로젝트를 이전 버전의 엔진에서 열 수 없을 것입니다." #: editor/project_manager.cpp msgid "" @@ -9621,19 +9706,20 @@ msgid "" "engine anymore." msgstr "" "다음 프로젝트 설정 파일은 이전 버전에 만든 것으로, 현재 버전에 맞게 변환해야 " -"해요:\n" +"합니다:\n" "\n" "%s\n" "\n" "변환할까요?\n" -"경고: 더 이상 이 프로젝트를 이전 버전의 엔진에서 열 수 없을 거예요." +"경고: 더 이상 이 프로젝트를 이전 버전의 엔진에서 열 수 없을 것입니다." #: editor/project_manager.cpp msgid "" "The project settings were created by a newer engine version, whose settings " "are not compatible with this version." msgstr "" -"프로젝트 설정이 새 버전에 맞게 만들어졌어요. 이 버전에서는 호환하지 않아요." +"프로젝트 설정이 새 버전에 맞게 만들어졌습니다. 이 버전에서는 호환하지 않습니" +"다." #: editor/project_manager.cpp msgid "" @@ -9641,7 +9727,7 @@ msgid "" "Please edit the project and set the main scene in the Project Settings under " "the \"Application\" category." msgstr "" -"프로젝트를 실행할 수 없음: 메인 씬을 정의하지 않았어요.\n" +"프로젝트를 실행할 수 없음: 메인 씬을 정의하지 않았습니다.\n" "프로젝트를 편집하고 프로젝트 설정의 \"Application\" 카테고리에서 메인 씬을 설" "정해주세요." @@ -9650,7 +9736,7 @@ msgid "" "Can't run project: Assets need to be imported.\n" "Please edit the project to trigger the initial import." msgstr "" -"프로젝트를 실행할 수 없음: 애셋을 가져와야 해요.\n" +"프로젝트를 실행할 수 없음: 애셋을 가져와야 합니다.\n" "프로젝트를 편집해서 최초 가져오기가 실행되도록 하세요." #: editor/project_manager.cpp @@ -9663,7 +9749,7 @@ msgid "" "The project folders' contents won't be modified." msgstr "" "%d개의 프로젝트를 삭제할까요?\n" -"프로젝트 폴더의 내용은 수정되지 않아요." +"프로젝트 폴더의 내용은 수정되지 않습니다." #: editor/project_manager.cpp msgid "" @@ -9671,7 +9757,7 @@ msgid "" "The project folder's contents won't be modified." msgstr "" "이 프로젝트를 목록에서 삭제할까요?\n" -"프로젝트 폴더의 내용은 수정되지 않아요." +"프로젝트 폴더의 내용은 수정되지 않습니다." #: editor/project_manager.cpp msgid "" @@ -9679,15 +9765,15 @@ msgid "" "The project folders' contents won't be modified." msgstr "" "모든 누락된 프로젝트를 삭제할까요?\n" -"프로젝트 폴더의 내용은 수정되지 않아요." +"프로젝트 폴더의 내용은 수정되지 않습니다." #: editor/project_manager.cpp msgid "" "Language changed.\n" "The interface will update after restarting the editor or project manager." msgstr "" -"언어가 바뀌었어요.\n" -"인터페이스는 편집기나 프로젝트 매니저를 다시 켜면 적용돼요." +"언어가 바뀌었.\n" +"인터페이스는 편집기나 프로젝트 매니저를 다시 켜면 적용됩니다." #: editor/project_manager.cpp msgid "" @@ -9695,7 +9781,7 @@ msgid "" "This could take a while." msgstr "" "Godot 프로젝트를 확인하기 위해 %s 폴더를 스캔할까요?\n" -"시간이 걸릴 수 있어요." +"시간이 걸릴 수 있습니다." #: editor/project_manager.cpp msgid "Project Manager" @@ -9723,7 +9809,7 @@ msgstr "새 프로젝트" #: editor/project_manager.cpp msgid "Remove Missing" -msgstr "누락된 부분 삭제하기" +msgstr "누락된 부분 삭제" #: editor/project_manager.cpp msgid "Templates" @@ -9735,14 +9821,14 @@ msgstr "지금 다시 시작" #: editor/project_manager.cpp msgid "Can't run project" -msgstr "프로젝트를 실행할 수 없어요" +msgstr "프로젝트를 실행할 수 없습니다" #: editor/project_manager.cpp msgid "" "You currently don't have any projects.\n" "Would you like to explore official example projects in the Asset Library?" msgstr "" -"현재 프로젝트가 하나도 없어요.\n" +"현재 프로젝트가 하나도 없습니다.\n" "애셋 라이브러리에서 공식 예제 프로젝트를 찾아볼까요?" #: editor/project_settings_editor.cpp @@ -9766,11 +9852,12 @@ msgid "" "Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " "'\"'" msgstr "" -"잘못된 액션 이름. 공백이거나, '/' , ':', '=', '\\', '\"' 를 포함하면 안 돼요" +"잘못된 액션 이름. 공백이거나, '/' , ':', '=', '\\', '\"' 를 포함하면 안 됩니" +"다" #: editor/project_settings_editor.cpp msgid "An action with the name '%s' already exists." -msgstr "이름 '%s'을(를) 가진 액션이 이미 있어요." +msgstr "이름 '%s'을(를) 가진 액션이 이미 있습니다." #: editor/project_settings_editor.cpp msgid "Rename Input Action Event" @@ -9782,7 +9869,7 @@ msgstr "액션 데드존 바꾸기" #: editor/project_settings_editor.cpp msgid "Add Input Action Event" -msgstr "입력 액션 이벤트 추가하기" +msgstr "입력 액션 이벤트 추가" #: editor/project_settings_editor.cpp msgid "All Devices" @@ -9854,11 +9941,11 @@ msgstr "입력 액션 지우기" #: editor/project_settings_editor.cpp msgid "Erase Input Action Event" -msgstr "입력 액션 이벤트 삭제하기" +msgstr "입력 액션 이벤트 삭제" #: editor/project_settings_editor.cpp msgid "Add Event" -msgstr "이벤트 추가하기" +msgstr "이벤트 추가" #: editor/project_settings_editor.cpp msgid "Button" @@ -9886,7 +9973,7 @@ msgstr "휠 아래로." #: editor/project_settings_editor.cpp msgid "Add Global Property" -msgstr "전역 속성 추가하기" +msgstr "전역 속성 추가" #: editor/project_settings_editor.cpp msgid "Select a setting item first!" @@ -9894,26 +9981,27 @@ msgstr "먼저 설정 항목을 선택하세요!" #: editor/project_settings_editor.cpp msgid "No property '%s' exists." -msgstr "'%s' 속성이 없어요." +msgstr "'%s' 속성이 없습니다." #: editor/project_settings_editor.cpp msgid "Setting '%s' is internal, and it can't be deleted." -msgstr "'%s' 설정은 내부적인 것이에요. 삭제할 수 없어요." +msgstr "'%s' 설정은 내부적인 것입니다. 삭제할 수 없습니다." #: editor/project_settings_editor.cpp msgid "Delete Item" -msgstr "항목 삭제하기" +msgstr "항목 삭제" #: editor/project_settings_editor.cpp msgid "" "Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " "'\"'." msgstr "" -"잘못된 액션 이름. 공백이거나, '/' , ':', '=', '\\', '\"'를 포함하면 안 돼요." +"잘못된 액션 이름. 공백이거나, '/' , ':', '=', '\\', '\"'를 포함하면 안 됩니" +"다." #: editor/project_settings_editor.cpp msgid "Add Input Action" -msgstr "입력 액션 추가하기" +msgstr "입력 액션 추가" #: editor/project_settings_editor.cpp msgid "Error saving settings." @@ -9933,19 +10021,19 @@ msgstr "기능 재정의" #: editor/project_settings_editor.cpp msgid "Add Translation" -msgstr "번역 추가하기" +msgstr "번역 추가" #: editor/project_settings_editor.cpp msgid "Remove Translation" -msgstr "번역 삭제하기" +msgstr "번역 삭제" #: editor/project_settings_editor.cpp msgid "Add Remapped Path" -msgstr "리맵핑 경로 추가하기" +msgstr "리맵핑 경로 추가" #: editor/project_settings_editor.cpp msgid "Resource Remap Add Remap" -msgstr "리소스 리맵핑 추가하기" +msgstr "리소스 리맵핑 추가" #: editor/project_settings_editor.cpp msgid "Change Resource Remap Language" @@ -9953,11 +10041,11 @@ msgstr "리소스 리맵핑 언어 바꾸기" #: editor/project_settings_editor.cpp msgid "Remove Resource Remap" -msgstr "리소스 리맵핑 삭제하기" +msgstr "리소스 리맵핑 삭제" #: editor/project_settings_editor.cpp msgid "Remove Resource Remap Option" -msgstr "리소스 리맵핑 설정 삭제하기" +msgstr "리소스 리맵핑 설정 삭제" #: editor/project_settings_editor.cpp msgid "Changed Locale Filter" @@ -9981,7 +10069,7 @@ msgstr "재정의..." #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp msgid "The editor must be restarted for changes to take effect." -msgstr "변경 사항을 적용하려면 편집기를 다시 켜야 해요." +msgstr "변경 사항을 적용하려면 편집기를 다시 켜야 합니다." #: editor/project_settings_editor.cpp msgid "Input Map" @@ -10089,15 +10177,15 @@ msgstr "디렉토리..." #: editor/property_editor.cpp msgid "Assign" -msgstr "지정하기" +msgstr "지정" #: editor/property_editor.cpp msgid "Select Node" -msgstr "노드 선택하기" +msgstr "노드 선택" #: editor/property_editor.cpp msgid "Error loading file: Not a resource!" -msgstr "파일 불러오기 오류: 리소스가 아니에요!" +msgstr "파일 불러오기 오류: 리소스가 아닙니다!" #: editor/property_editor.cpp msgid "Pick a Node" @@ -10109,15 +10197,15 @@ msgstr "비트 %d, 값 %d." #: editor/property_selector.cpp msgid "Select Property" -msgstr "속성 선택하기" +msgstr "속성 선택" #: editor/property_selector.cpp msgid "Select Virtual Method" -msgstr "가상 메서드 선택하기" +msgstr "가상 메서드 선택" #: editor/property_selector.cpp msgid "Select Method" -msgstr "메서드 선택하기" +msgstr "메서드 선택" #: editor/rename_dialog.cpp editor/scene_tree_dock.cpp msgid "Batch Rename" @@ -10132,6 +10220,11 @@ msgid "Suffix" msgstr "접미사" #: editor/rename_dialog.cpp +#, fuzzy +msgid "Use Regular Expressions" +msgstr "정규 표현식" + +#: editor/rename_dialog.cpp msgid "Advanced Options" msgstr "고급 설정" @@ -10165,15 +10258,16 @@ msgid "" "Compare counter options." msgstr "" "순차 정수 카운터.\n" -"카운터 설정과 비교해요." +"카운터 설정과 비교합니다." #: editor/rename_dialog.cpp -msgid "Per Level counter" +#, fuzzy +msgid "Per-level Counter" msgstr "단계 별 카운터" #: editor/rename_dialog.cpp msgid "If set the counter restarts for each group of child nodes" -msgstr "설정하면 각 그룹의 자식 노드의 카운터를 다시 시작해요" +msgstr "설정하면 각 그룹의 자식 노드의 카운터를 다시 시작합니다" #: editor/rename_dialog.cpp msgid "Initial value for the counter" @@ -10197,11 +10291,7 @@ msgid "" "Missing digits are padded with leading zeros." msgstr "" "카운터의 최소 자릿수.\n" -"빈 자리는 0으로 채워요." - -#: editor/rename_dialog.cpp -msgid "Regular Expressions" -msgstr "정규 표현식" +"빈 자리는 0으로 채웁니다." #: editor/rename_dialog.cpp msgid "Post-Process" @@ -10209,15 +10299,17 @@ msgstr "후처리" #: editor/rename_dialog.cpp msgid "Keep" -msgstr "유지하기" +msgstr "유지" #: editor/rename_dialog.cpp -msgid "CamelCase to under_scored" -msgstr "CamelCase를 under_scored로 하기" +#, fuzzy +msgid "PascalCase to snake_case" +msgstr "CamelCase를 under_scored로" #: editor/rename_dialog.cpp -msgid "under_scored to CamelCase" -msgstr "under_scored를 CamelCase로 하기" +#, fuzzy +msgid "snake_case to PascalCase" +msgstr "under_scored를 CamelCase로" #: editor/rename_dialog.cpp msgid "Case" @@ -10225,31 +10317,41 @@ msgstr "문자" #: editor/rename_dialog.cpp msgid "To Lowercase" -msgstr "소문자로 하기" +msgstr "소문자화" #: editor/rename_dialog.cpp msgid "To Uppercase" -msgstr "대문자로 하기" +msgstr "대문자화" #: editor/rename_dialog.cpp msgid "Reset" msgstr "되돌리기" +#: editor/rename_dialog.cpp +#, fuzzy +msgid "Regular Expression Error" +msgstr "정규 표현식" + +#: editor/rename_dialog.cpp +#, fuzzy +msgid "At character %s" +msgstr "올바른 문자:" + #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" -msgstr "부모 노드 다시 지정하기" +msgstr "부모 노드 다시 지정" #: editor/reparent_dialog.cpp msgid "Reparent Location (Select new Parent):" -msgstr "부모 노드 다시 지정 위치 (새 부모 노드를 선택해요):" +msgstr "부모 노드 다시 지정 위치 (새 부모 노드를 선택합니다):" #: editor/reparent_dialog.cpp msgid "Keep Global Transform" -msgstr "전역 변형 유지하기" +msgstr "전역 변형 유지" #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent" -msgstr "부모 다시 지정하기" +msgstr "부모 다시 지정" #: editor/run_settings_dialog.cpp msgid "Run Mode:" @@ -10273,7 +10375,7 @@ msgstr "씬 실행 설정" #: editor/scene_tree_dock.cpp msgid "No parent to instance the scenes at." -msgstr "씬을 인스턴스할 수 있는 부모가 없어요." +msgstr "씬을 인스턴스할 수 있는 부모가 없습니다." #: editor/scene_tree_dock.cpp msgid "Error loading scene from %s" @@ -10283,52 +10385,53 @@ msgstr "%s에서 씬 불러오는 중 오류" msgid "" "Cannot instance the scene '%s' because the current scene exists within one " "of its nodes." -msgstr "한 노드에 현재 씬이 있기 때문에, '%s' 씬을 인스턴스할 수 없어요." +msgstr "한 노드에 현재 씬이 있기 때문에, '%s' 씬을 인스턴스할 수 없습니다." #: editor/scene_tree_dock.cpp msgid "Instance Scene(s)" -msgstr "씬 인스턴스하기" +msgstr "씬 인스턴스화" #: editor/scene_tree_dock.cpp msgid "Replace with Branch Scene" -msgstr "분기 씬으로 교체하기" +msgstr "분기 씬으로 교체" #: editor/scene_tree_dock.cpp msgid "Instance Child Scene" -msgstr "자식 씬 인스턴스하기" +msgstr "자식 씬 인스턴스화" #: editor/scene_tree_dock.cpp msgid "Clear Script" -msgstr "스크립트 삭제하기" +msgstr "스크립트 삭제" #: editor/scene_tree_dock.cpp msgid "This operation can't be done on the tree root." -msgstr "이 작업은 트리 루트에서 할 수 없어요." +msgstr "이 작업은 트리 루트에서 할 수 없습니다." #: editor/scene_tree_dock.cpp msgid "Move Node In Parent" -msgstr "노드를 부모 노드로 이동하기" +msgstr "노드를 부모 노드로 이동" #: editor/scene_tree_dock.cpp msgid "Move Nodes In Parent" -msgstr "노드들을 부모 노드로 이동하기" +msgstr "노드들을 부모 노드로 이동" #: editor/scene_tree_dock.cpp msgid "Duplicate Node(s)" -msgstr "노드 복제하기" +msgstr "노드 복제" #: editor/scene_tree_dock.cpp msgid "Can't reparent nodes in inherited scenes, order of nodes can't change." msgstr "" -"상속한 씬에서 노드의 부모를 다시 지정할 수 없어요. 노드 순서는 바뀌지 않아요." +"상속한 씬에서 노드의 부모를 다시 지정할 수 없습니다. 노드 순서는 바뀌지 않습" +"니다." #: editor/scene_tree_dock.cpp msgid "Node must belong to the edited scene to become root." -msgstr "노드는 루트가 되기 위해선 편집한 씬에 속해야 해요." +msgstr "노드는 루트가 되기 위해선 편집한 씬에 속해야 합니다." #: editor/scene_tree_dock.cpp msgid "Instantiated scenes can't become root" -msgstr "인스턴트화된 씬은 루트가 될 수 없어요" +msgstr "인스턴트화된 씬은 루트가 될 수 없습니다" #: editor/scene_tree_dock.cpp msgid "Make node as Root" @@ -10352,22 +10455,22 @@ msgstr "노드 \"%s\"을(를) 삭제할까요?" #: editor/scene_tree_dock.cpp msgid "Can not perform with the root node." -msgstr "루트 노드로는 수행할 수 없어요." +msgstr "루트 노드로는 수행할 수 없습니다." #: editor/scene_tree_dock.cpp msgid "This operation can't be done on instanced scenes." -msgstr "이 작업은 인스턴스된 씬에서 할 수 없어요." +msgstr "이 작업은 인스턴스된 씬에서 할 수 없습니다." #: editor/scene_tree_dock.cpp msgid "Save New Scene As..." -msgstr "새 씬을 다른 이름으로 저장하기..." +msgstr "새 씬을 다른 이름으로 저장..." #: editor/scene_tree_dock.cpp msgid "" "Disabling \"editable_instance\" will cause all properties of the node to be " "reverted to their default." msgstr "" -"\"editable_instance\"를 끄게 되면 노드의 모든 속성이 기본 값으로 되돌아와요." +"\"editable_instance\"를 끄게 되면 노드의 모든 속성이 기본 값으로 복원됩니다." #: editor/scene_tree_dock.cpp msgid "" @@ -10375,7 +10478,7 @@ msgid "" "cause all properties of the node to be reverted to their default." msgstr "" "\"자리 표시자로 불러오기\"를 켜면 \"편집할 수 있는 자식\" 설정이 꺼지고, 그러" -"면 그 노드의 모든 속성이 기본값으로 돌아와요." +"면 그 노드의 모든 속성이 기본값으로 복원됩니다." #: editor/scene_tree_dock.cpp msgid "Make Local" @@ -10407,11 +10510,11 @@ msgstr "다른 노드" #: editor/scene_tree_dock.cpp msgid "Can't operate on nodes from a foreign scene!" -msgstr "다른 씬에서 수행할 수 없는 작업이에요!" +msgstr "다른 씬에서 수행할 수 없는 작업입니다!" #: editor/scene_tree_dock.cpp msgid "Can't operate on nodes the current scene inherits from!" -msgstr "상속 씬 내에서 수행할 수 없는 작업이에요!" +msgstr "상속 씬 내에서 수행할 수 없는 작업입니다!" #: editor/scene_tree_dock.cpp msgid "Attach Script" @@ -10419,7 +10522,7 @@ msgstr "스크립트 붙이기" #: editor/scene_tree_dock.cpp msgid "Remove Node(s)" -msgstr "노드 삭제하기" +msgstr "노드 삭제" #: editor/scene_tree_dock.cpp msgid "Change type of node(s)" @@ -10430,7 +10533,7 @@ msgid "" "Couldn't save new scene. Likely dependencies (instances) couldn't be " "satisfied." msgstr "" -"씬을 저장할 수 없어요. 종속 관계 (인스턴스)가 만족스럽지 않은 모양이에요." +"씬을 저장할 수 없습니다. 종속 관계 (인스턴스)가 만족되지 않은 것 같습니다." #: editor/scene_tree_dock.cpp msgid "Error saving scene." @@ -10462,7 +10565,7 @@ msgstr "문서 열기" #: editor/scene_tree_dock.cpp msgid "Add Child Node" -msgstr "자식 노드 추가하기" +msgstr "자식 노드 추가" #: editor/scene_tree_dock.cpp msgid "Expand/Collapse All" @@ -10474,7 +10577,7 @@ msgstr "유형 바꾸기" #: editor/scene_tree_dock.cpp msgid "Reparent to New Node" -msgstr "새 노드에 부모 노드 다시 지정하기" +msgstr "새 노드에 부모 노드 다시 지정" #: editor/scene_tree_dock.cpp msgid "Make Scene Root" @@ -10486,34 +10589,34 @@ msgstr "다른 씬에서 병합하기" #: editor/scene_tree_dock.cpp editor/script_editor_debugger.cpp msgid "Save Branch as Scene" -msgstr "분기를 씬으로 저장하기" +msgstr "분기를 씬으로 저장" #: editor/scene_tree_dock.cpp editor/script_editor_debugger.cpp msgid "Copy Node Path" -msgstr "노드 경로 복사하기" +msgstr "노드 경로 복사" #: editor/scene_tree_dock.cpp msgid "Delete (No Confirm)" -msgstr "삭제하기 (확인 없음)" +msgstr "삭제 (확인 없음)" #: editor/scene_tree_dock.cpp msgid "Add/Create a New Node." -msgstr "새 노드 추가하기/만들기." +msgstr "새 노드를 추가하거나 만듭니다." #: editor/scene_tree_dock.cpp msgid "" "Instance a scene file as a Node. Creates an inherited scene if no root node " "exists." msgstr "" -"씬 파일을 노드로 인스턴스해요. 루트 노드가 없으면 상속된 씬을 만들어요." +"씬 파일을 노드로 인스턴스합니다. 루트 노드가 없으면 상속된 씬을 만듭니다." #: editor/scene_tree_dock.cpp msgid "Attach a new or existing script for the selected node." -msgstr "선택한 노드에 새로운 혹은 존재하는 스크립트를 붙여요." +msgstr "선택한 노드에 새로운 혹은 존재하는 스크립트를 붙입니다." #: editor/scene_tree_dock.cpp msgid "Clear a script for the selected node." -msgstr "선택한 노드의 스크립트를 삭제해요." +msgstr "선택한 노드의 스크립트를 삭제합니다." #: editor/scene_tree_dock.cpp msgid "Remote" @@ -10525,7 +10628,7 @@ msgstr "로컬" #: editor/scene_tree_dock.cpp msgid "Clear Inheritance? (No Undo!)" -msgstr "상속을 지울까요? (되돌릴 수 없어요!)" +msgstr "상속을 지울까요? (되돌릴 수 없습니다!)" #: editor/scene_tree_editor.cpp msgid "Toggle Visible" @@ -10552,7 +10655,7 @@ msgid "" "Node has %s connection(s) and %s group(s).\n" "Click to show signals dock." msgstr "" -"노드가 %s 연결과 %s 그룹을 갖고 있어요.\n" +"노드가 %s 연결과 %s 그룹을 갖고 있습니다.\n" "클릭하면 시그널 독을 보여줘요." #: editor/scene_tree_editor.cpp @@ -10560,7 +10663,7 @@ msgid "" "Node has %s connection(s).\n" "Click to show signals dock." msgstr "" -"노드가 %s 연결을 갖고 있어요.\n" +"노드가 %s 연결을 갖고 있습니다.\n" "클릭하면 시그널 독을 보여줘요." #: editor/scene_tree_editor.cpp @@ -10568,7 +10671,7 @@ msgid "" "Node is in %s group(s).\n" "Click to show groups dock." msgstr "" -"노드가 그룹 안에 있어요.\n" +"노드가 그룹 안에 있습니다.\n" "클릭하면 그룹 독을 보여줘요." #: editor/scene_tree_editor.cpp @@ -10580,16 +10683,16 @@ msgid "" "Node is locked.\n" "Click to unlock it." msgstr "" -"노드가 잠겨있어요.\n" -"클릭하면 잠금을 풀어요." +"노드가 잠겨있습니다.\n" +"클릭하면 잠금을 해제합니다." #: editor/scene_tree_editor.cpp msgid "" "Children are not selectable.\n" "Click to make selectable." msgstr "" -"자식을 선택할 수 없어요.\n" -"클릭하면 선택할 수 있어요." +"자식을 선택할 수 없습니다.\n" +"클릭하면 선택할 수 있습니다." #: editor/scene_tree_editor.cpp msgid "Toggle Visibility" @@ -10600,12 +10703,12 @@ msgid "" "AnimationPlayer is pinned.\n" "Click to unpin." msgstr "" -"AnimationPlayer가 고정되어 있어요.\n" -"클릭하면 고정을 풀어요." +"AnimationPlayer가 고정되어 있습니다.\n" +"클릭하면 고정을 해제합니다." #: editor/scene_tree_editor.cpp msgid "Invalid node name, the following characters are not allowed:" -msgstr "잘못된 노드 이름이에요. 다음 문자는 허용하지 않아요:" +msgstr "잘못된 노드 이름입니다. 다음 문자는 허용하지 않습니다:" #: editor/scene_tree_editor.cpp msgid "Rename Node" @@ -10625,15 +10728,15 @@ msgstr "노드를 선택하세요" #: editor/script_create_dialog.cpp msgid "Path is empty." -msgstr "경로가 비었어요." +msgstr "경로가 비었습니다." #: editor/script_create_dialog.cpp msgid "Filename is empty." -msgstr "파일 이름이 비었어요." +msgstr "파일 이름이 비었습니다." #: editor/script_create_dialog.cpp msgid "Path is not local." -msgstr "경로가 로컬이 아니에요." +msgstr "경로가 로컬이 아닙니다." #: editor/script_create_dialog.cpp msgid "Invalid base path." @@ -10641,7 +10744,7 @@ msgstr "잘못된 기본 경로." #: editor/script_create_dialog.cpp msgid "A directory with the same name exists." -msgstr "같은 이름의 디렉토리가 있어요." +msgstr "같은 이름의 디렉토리가 있습니다." #: editor/script_create_dialog.cpp msgid "Invalid extension." @@ -10657,7 +10760,7 @@ msgstr "'%s' 템플릿 불러오는 중 오류" #: editor/script_create_dialog.cpp msgid "Error - Could not create script in filesystem." -msgstr "오류 - 파일 시스템에 스크립트를 만들 수 없어요." +msgstr "오류 - 파일 시스템에 스크립트를 만들 수 없습니다." #: editor/script_create_dialog.cpp msgid "Error loading script from %s" @@ -10665,7 +10768,7 @@ msgstr "'%s' 스크립트 불러오는 중 오류" #: editor/script_create_dialog.cpp msgid "Overrides" -msgstr "다시 정의하기" +msgstr "재정의" #: editor/script_create_dialog.cpp msgid "N/A" @@ -10673,7 +10776,7 @@ msgstr "해당 없음" #: editor/script_create_dialog.cpp msgid "Open Script / Choose Location" -msgstr "스크립트 열기 / 위치 선택하기" +msgstr "스크립트 열기 / 위치 선택" #: editor/script_create_dialog.cpp msgid "Open Script" @@ -10681,7 +10784,7 @@ msgstr "스크립트 열기" #: editor/script_create_dialog.cpp msgid "File exists, it will be reused." -msgstr "파일이 있어요. 다시 사용할 거예요." +msgstr "파일이 있습니다. 다시 사용할 것입니다." #: editor/script_create_dialog.cpp msgid "Invalid class name." @@ -10692,7 +10795,8 @@ msgid "Invalid inherited parent name or path." msgstr "잘못된 상속된 부모 이름 또는 경로." #: editor/script_create_dialog.cpp -msgid "Script is valid." +#, fuzzy +msgid "Script path/name is valid." msgstr "스크립트가 올바릅니다." #: editor/script_create_dialog.cpp @@ -10705,15 +10809,15 @@ msgstr "내장 스크립트 (씬 파일 안)." #: editor/script_create_dialog.cpp msgid "Will create a new script file." -msgstr "새 스크립트 파일을 만들어요." +msgstr "새 스크립트 파일을 만듭니다." #: editor/script_create_dialog.cpp msgid "Will load an existing script file." -msgstr "기존 스크립트 파일을 불러와요." +msgstr "기존 스크립트 파일을 불러옵니다." #: editor/script_create_dialog.cpp msgid "Script file already exists." -msgstr "스크립트 파일이 이미 있어요." +msgstr "스크립트 파일이 이미 있습니다." #: editor/script_create_dialog.cpp msgid "Class Name:" @@ -10781,7 +10885,12 @@ msgstr "자식 프로세스 연결됨." #: editor/script_editor_debugger.cpp msgid "Copy Error" -msgstr "복사하기 오류" +msgstr "복사 오류" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Video RAM" +msgstr "비디오 메모리" #: editor/script_editor_debugger.cpp msgid "Skip Breakpoints" @@ -10789,11 +10898,11 @@ msgstr "중단점 넘기기" #: editor/script_editor_debugger.cpp msgid "Inspect Previous Instance" -msgstr "이전 인스턴스 검사하기" +msgstr "이전 인스턴스 검사" #: editor/script_editor_debugger.cpp msgid "Inspect Next Instance" -msgstr "다음 인스턴스 검사하기" +msgstr "다음 인스턴스 검사" #: editor/script_editor_debugger.cpp msgid "Stack Frames" @@ -10832,10 +10941,6 @@ msgid "Total:" msgstr "전체:" #: editor/script_editor_debugger.cpp -msgid "Video Mem" -msgstr "비디오 메모리" - -#: editor/script_editor_debugger.cpp msgid "Resource Path" msgstr "리소스 경로" @@ -10869,7 +10974,7 @@ msgstr "실시간 편집 루트:" #: editor/script_editor_debugger.cpp msgid "Set From Tree" -msgstr "트리에서 설정하기" +msgstr "트리에서 설정" #: editor/script_editor_debugger.cpp msgid "Export measures as CSV" @@ -10881,7 +10986,7 @@ msgstr "단축키 지우기" #: editor/settings_config_dialog.cpp msgid "Restore Shortcut" -msgstr "단축키 복원하기" +msgstr "단축키 복원" #: editor/settings_config_dialog.cpp msgid "Change Shortcut" @@ -10973,15 +11078,15 @@ msgstr "도넛 외부 반지름 바꾸기" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Select the dynamic library for this entry" -msgstr "이 항목의 동적 라이브러리 선택하기" +msgstr "이 항목의 동적 라이브러리 선택" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Select dependencies of the library for this entry" -msgstr "이 항목의 동적 라이브러리의 종속 관계를 선택하기" +msgstr "이 항목의 동적 라이브러리의 종속 관계를 선택" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Remove current entry" -msgstr "현재 엔트리 삭제하기" +msgstr "현재 엔트리 삭제" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Double click to create a new entry" @@ -11001,7 +11106,7 @@ msgstr "동적 라이브러리" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Add an architecture entry" -msgstr "구조 항목을 추가하기" +msgstr "구조 항목을 추가" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "GDNativeLibrary" @@ -11029,7 +11134,7 @@ msgstr "GDNative" #: modules/gdscript/gdscript_functions.cpp msgid "Step argument is zero!" -msgstr "스텝 인수가 0이에요!" +msgstr "스텝 인수가 0입니다!" #: modules/gdscript/gdscript_functions.cpp msgid "Not a script with an instance" @@ -11061,7 +11166,7 @@ msgstr "잘못된 인스턴스 Dictionary (하위 클래스가 올바르지 않� #: modules/gdscript/gdscript_functions.cpp msgid "Object can't provide a length." -msgstr "객체는 길이를 제공할 수 없어요." +msgstr "객체는 길이를 제공할 수 없습니다." #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Next Plane" @@ -11089,7 +11194,7 @@ msgstr "층:" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "GridMap Delete Selection" -msgstr "그리드맵 선택 항목 삭제하기" +msgstr "그리드맵 선택 항목 삭제" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "GridMap Fill Selection" @@ -11181,7 +11286,7 @@ msgstr "그리드맵 설정" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Pick Distance:" -msgstr "거리 선택하기:" +msgstr "거리 선택:" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Filter meshes" @@ -11193,7 +11298,7 @@ msgstr "메시를 사용하려면 이 GridMap에 MeshLibrary 리소스를 주세 #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" -msgstr "클래스 이름은 키워드가 될 수 없어요" +msgstr "클래스 이름은 키워드가 될 수 없습니다" #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" @@ -11264,7 +11369,7 @@ msgid "" "A node yielded without working memory, please read the docs on how to yield " "properly!" msgstr "" -"작업 메모리 없이 Yield된 노드이에요 문서에서 노드에게 적절히 Yield하는 방법" +"작업 메모리 없이 Yield된 노드입니다. 문서에서 노드에게 적절히 Yield하는 방법" "을 읽어주세요!" #: modules/visual_script/visual_script.cpp @@ -11272,15 +11377,15 @@ msgid "" "Node yielded, but did not return a function state in the first working " "memory." msgstr "" -"노드가 Yield됐지만, 첫번째 작업 메모리의 함수 상태를 반환하지 않았어요." +"노드가 Yield됐지만, 첫번째 작업 메모리의 함수 상태를 반환하지 않았습니다." #: modules/visual_script/visual_script.cpp msgid "" "Return value must be assigned to first element of node working memory! Fix " "your node please." msgstr "" -"반환 값은 반드시 노드 작업 메모리의 첫 번째 요소로 지정해야 해요! 노드를 고쳐" -"주세요." +"반환 값은 반드시 노드 작업 메모리의 첫 번째 요소로 지정해야 합니다! 노드를 고" +"쳐주세요." #: modules/visual_script/visual_script.cpp msgid "Node returned an invalid sequence output: " @@ -11288,7 +11393,8 @@ msgstr "잘못된 시퀀스 출력을 반환한 노드: " #: modules/visual_script/visual_script.cpp msgid "Found sequence bit but not the node in the stack, report bug!" -msgstr "시퀀스 비트를 발견했지만 스택 안의 노드에는 없어요. 버그를 신고하세요!" +msgstr "" +"시퀀스 비트를 발견했지만 스택 안의 노드에는 없습니다. 버그를 신고하세요!" #: modules/visual_script/visual_script.cpp msgid "Stack overflow with stack depth: " @@ -11324,11 +11430,11 @@ msgstr "출력 포트 추가하기" #: modules/visual_script/visual_script_editor.cpp msgid "Override an existing built-in function." -msgstr "존재하는 내장 함수를 다시 정의해요." +msgstr "존재하는 내장 함수를 재정의합니다." #: modules/visual_script/visual_script_editor.cpp msgid "Create a new function." -msgstr "새 함수를 만들어요." +msgstr "새 함수를 만듭니다." #: modules/visual_script/visual_script_editor.cpp msgid "Variables:" @@ -11336,7 +11442,7 @@ msgstr "변수:" #: modules/visual_script/visual_script_editor.cpp msgid "Create a new variable." -msgstr "새 변수를 만들어요." +msgstr "새 변수를 만듭니다." #: modules/visual_script/visual_script_editor.cpp msgid "Signals:" @@ -11344,7 +11450,7 @@ msgstr "시그널:" #: modules/visual_script/visual_script_editor.cpp msgid "Create a new signal." -msgstr "새 시그널을 만들어요." +msgstr "새 시그널을 만듭니다." #: modules/visual_script/visual_script_editor.cpp msgid "Name is not a valid identifier:" @@ -11368,19 +11474,19 @@ msgstr "시그널 이름 바꾸기" #: modules/visual_script/visual_script_editor.cpp msgid "Add Function" -msgstr "함수 추가하기" +msgstr "함수 추가" #: modules/visual_script/visual_script_editor.cpp msgid "Delete input port" -msgstr "입력 포트 삭제하기" +msgstr "입력 포트 삭제" #: modules/visual_script/visual_script_editor.cpp msgid "Add Variable" -msgstr "변수 추가하기" +msgstr "변수 추가" #: modules/visual_script/visual_script_editor.cpp msgid "Add Signal" -msgstr "시그널 추가하기" +msgstr "시그널 추가" #: modules/visual_script/visual_script_editor.cpp msgid "Remove Input Port" @@ -11396,63 +11502,64 @@ msgstr "표현식 바꾸기" #: modules/visual_script/visual_script_editor.cpp msgid "Remove VisualScript Nodes" -msgstr "비주얼 스크립트 노드 삭제하기" +msgstr "비주얼 스크립트 노드 삭제" #: modules/visual_script/visual_script_editor.cpp msgid "Duplicate VisualScript Nodes" -msgstr "비주얼 스크립트 노드 복제하기" +msgstr "비주얼 스크립트 노드 복제" #: modules/visual_script/visual_script_editor.cpp msgid "Hold %s to drop a Getter. Hold Shift to drop a generic signature." msgstr "" -"%s을(를) 누르고 있으면 Getter를 드롭해요. Shift를 누르고 있으면 일반적인 시그" -"니처를 드롭해요." +"%s을(를) 누르고 있으면 Getter를 드롭합니다. Shift를 누르고 있으면 일반적인 시" +"그니처를 드롭합니다." #: modules/visual_script/visual_script_editor.cpp msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature." msgstr "" -"Ctrl을 누르고 있으면 Getter를 드롭해요. Shift를 누르고 있으면 일반적인 시그니" -"처를 드롭해요." +"Ctrl을 누르고 있으면 Getter를 드롭합니다. Shift를 누르고 있으면 일반적인 시그" +"니처를 드롭합니다." #: modules/visual_script/visual_script_editor.cpp msgid "Hold %s to drop a simple reference to the node." -msgstr "%s을(를) 누르고 있으면 노드에 대한 간단한 참조를 드롭해요." +msgstr "%s을(를) 누르고 있으면 노드에 대한 간단한 참조를 드롭합니다." #: modules/visual_script/visual_script_editor.cpp msgid "Hold Ctrl to drop a simple reference to the node." -msgstr "Ctrl을 누르고 있으면 노드에 대한 간단한 참조를 드롭해요." +msgstr "Ctrl을 누르고 있으면 노드에 대한 간단한 참조를 드롭합니다." #: modules/visual_script/visual_script_editor.cpp msgid "Hold %s to drop a Variable Setter." -msgstr "%s을(를) 누르고 있르면 변수 Setter를 드롭해요." +msgstr "%s을(를) 누르고 있르면 변수 Setter를 드롭합니다." #: modules/visual_script/visual_script_editor.cpp msgid "Hold Ctrl to drop a Variable Setter." -msgstr "Ctrl을 누르고 있으면 변수 Setter를 드롭해요." +msgstr "Ctrl을 누르고 있으면 변수 Setter를 드롭합니다." #: modules/visual_script/visual_script_editor.cpp msgid "Add Preload Node" -msgstr "Preload 노드 추가하기" +msgstr "Preload 노드 추가" #: modules/visual_script/visual_script_editor.cpp msgid "Add Node(s) From Tree" -msgstr "트리에서 노드 추가하기" +msgstr "트리에서 노드 추가" #: modules/visual_script/visual_script_editor.cpp msgid "" "Can't drop properties because script '%s' is not used in this scene.\n" "Drop holding 'Shift' to just copy the signature." msgstr "" -"스크립트 '%s'이(가) 이 씬에서 사용되지 않고 있어서 속성을 드롭할 수 없어요.\n" -"'Shift' 키를 누른 채로 드롭하면 시그니처를 복사해요." +"스크립트 '%s'이(가) 이 씬에서 사용되지 않고 있어서 속성을 드롭할 수 없습니" +"다.\n" +"'Shift' 키를 누른 채로 드롭하면 시그니처를 복사합니다." #: modules/visual_script/visual_script_editor.cpp msgid "Add Getter Property" -msgstr "Getter 속성 추가하기" +msgstr "Getter 속성 추가" #: modules/visual_script/visual_script_editor.cpp msgid "Add Setter Property" -msgstr "Setter 속성 추가하기" +msgstr "Setter 속성 추가" #: modules/visual_script/visual_script_editor.cpp msgid "Change Base Type" @@ -11460,15 +11567,15 @@ msgstr "기본 유형 바꾸기" #: modules/visual_script/visual_script_editor.cpp msgid "Move Node(s)" -msgstr "노드 이동하기" +msgstr "노드 이동" #: modules/visual_script/visual_script_editor.cpp msgid "Remove VisualScript Node" -msgstr "비주얼 스크립트 노드 삭제하기" +msgstr "비주얼 스크립트 노드 삭제" #: modules/visual_script/visual_script_editor.cpp msgid "Connect Nodes" -msgstr "노드 연결하기" +msgstr "노드 연결" #: modules/visual_script/visual_script_editor.cpp msgid "Disconnect Nodes" @@ -11476,15 +11583,15 @@ msgstr "그래프 노드 연결 풀기" #: modules/visual_script/visual_script_editor.cpp msgid "Connect Node Data" -msgstr "노드 데이터 연결하기" +msgstr "노드 데이터 연결" #: modules/visual_script/visual_script_editor.cpp msgid "Connect Node Sequence" -msgstr "노드 시퀀스 연결하기" +msgstr "노드 시퀀스 연결" #: modules/visual_script/visual_script_editor.cpp msgid "Script already has function '%s'" -msgstr "스크립트가 이미 '%s' 함수를 갖고 있어요" +msgstr "스크립트가 이미 '%s' 함수를 갖고 있습니다" #: modules/visual_script/visual_script_editor.cpp msgid "Change Input Value" @@ -11492,15 +11599,15 @@ msgstr "입력 값 바꾸기" #: modules/visual_script/visual_script_editor.cpp msgid "Resize Comment" -msgstr "주석 크기 조절하기" +msgstr "주석 크기 조절" #: modules/visual_script/visual_script_editor.cpp msgid "Can't copy the function node." -msgstr "함수 노드를 복사할 수 없어요." +msgstr "함수 노드를 복사할 수 없습니다." #: modules/visual_script/visual_script_editor.cpp msgid "Clipboard is empty!" -msgstr "클립보드가 비었어요!" +msgstr "클립보드가 비었습니다!" #: modules/visual_script/visual_script_editor.cpp msgid "Paste VisualScript Nodes" @@ -11508,11 +11615,11 @@ msgstr "비주얼 스크립트 노드 붙여넣기" #: modules/visual_script/visual_script_editor.cpp msgid "Can't create function with a function node." -msgstr "함수 노드가 있으면 함수를 만들 수 없어요." +msgstr "함수 노드가 있으면 함수를 만들 수 없습니다." #: modules/visual_script/visual_script_editor.cpp msgid "Can't create function of nodes from nodes of multiple functions." -msgstr "많은 함수의 노드에서 노드의 함수를 만들 수 없어요." +msgstr "많은 함수의 노드에서 노드의 함수를 만들 수 없습니다." #: modules/visual_script/visual_script_editor.cpp msgid "Select at least one node with sequence port." @@ -11528,23 +11635,23 @@ msgstr "함수 만들기" #: modules/visual_script/visual_script_editor.cpp msgid "Remove Function" -msgstr "함수 삭제하기" +msgstr "함수 삭제" #: modules/visual_script/visual_script_editor.cpp msgid "Remove Variable" -msgstr "변수 삭제하기" +msgstr "변수 삭제" #: modules/visual_script/visual_script_editor.cpp msgid "Editing Variable:" -msgstr "변수 편집하기:" +msgstr "변수 편집:" #: modules/visual_script/visual_script_editor.cpp msgid "Remove Signal" -msgstr "시그널 삭제하기" +msgstr "시그널 삭제" #: modules/visual_script/visual_script_editor.cpp msgid "Editing Signal:" -msgstr "시그널 편집하기:" +msgstr "시그널 편집:" #: modules/visual_script/visual_script_editor.cpp msgid "Make Tool:" @@ -11560,11 +11667,11 @@ msgstr "기본 유형 바꾸기:" #: modules/visual_script/visual_script_editor.cpp msgid "Add Nodes..." -msgstr "노드 추가하기..." +msgstr "노드 추가..." #: modules/visual_script/visual_script_editor.cpp msgid "Add Function..." -msgstr "함수 추가하기..." +msgstr "함수 추가..." #: modules/visual_script/visual_script_editor.cpp msgid "function_name" @@ -11576,7 +11683,7 @@ msgstr "그래프를 편집하기 위한 함수를 선택하거나 만드세요. #: modules/visual_script/visual_script_editor.cpp msgid "Delete Selected" -msgstr "선택 항목 삭제하기" +msgstr "선택 항목 삭제" #: modules/visual_script/visual_script_editor.cpp msgid "Find Node Type" @@ -11584,7 +11691,7 @@ msgstr "노드 유형 찾기" #: modules/visual_script/visual_script_editor.cpp msgid "Copy Nodes" -msgstr "노드 복사하기" +msgstr "노드 복사" #: modules/visual_script/visual_script_editor.cpp msgid "Cut Nodes" @@ -11600,7 +11707,7 @@ msgstr "그래프 새로고침" #: modules/visual_script/visual_script_editor.cpp msgid "Edit Member" -msgstr "멤버 편집하기" +msgstr "멤버 편집" #: modules/visual_script/visual_script_flow_control.cpp msgid "Input type not iterable: " @@ -11608,7 +11715,7 @@ msgstr "반복할 수 없는 입력 유형: " #: modules/visual_script/visual_script_flow_control.cpp msgid "Iterator became invalid" -msgstr "Iterator가 잘못됐어요" +msgstr "Iterator가 잘못되었습니다" #: modules/visual_script/visual_script_flow_control.cpp msgid "Iterator became invalid: " @@ -11620,15 +11727,15 @@ msgstr "잘못된 인덱스 속성 이름." #: modules/visual_script/visual_script_func_nodes.cpp msgid "Base object is not a Node!" -msgstr "기본 객체는 노드가 아니에요!" +msgstr "기본 객체는 노드가 아닙니다!" #: modules/visual_script/visual_script_func_nodes.cpp msgid "Path does not lead Node!" -msgstr "노드를 지정하는 경로가 아니에요!" +msgstr "노드를 지정하는 경로가 아닙니다!" #: modules/visual_script/visual_script_func_nodes.cpp msgid "Invalid index property name '%s' in node %s." -msgstr "노드 %s 안에 인덱스 속성 이름 '%s'이(가) 잘못됐어요." +msgstr "노드 %s 안에 인덱스 속성 이름 '%s'이(가) 잘못되었습니다." #: modules/visual_script/visual_script_nodes.cpp msgid ": Invalid argument of type: " @@ -11648,19 +11755,19 @@ msgstr "VariableSet을 스크립트에서 찾을 수 없음: " #: modules/visual_script/visual_script_nodes.cpp msgid "Custom node has no _step() method, can't process graph." -msgstr "맞춤 노드에 _step() 메서드가 없어요. 그래프를 처리할 수 없어요." +msgstr "맞춤 노드에 _step() 메서드가 없습니다. 그래프를 처리할 수 없습니다." #: modules/visual_script/visual_script_nodes.cpp msgid "" "Invalid return value from _step(), must be integer (seq out), or string " "(error)." msgstr "" -"_step()에서 잘못된 반환 값이에요. 정수 (seq out), 또는 문자열 (error)이어야 " -"해요." +"_step()에서 잘못된 반환 값입니다. 정수 (seq out), 또는 문자열 (error)이어야 " +"합니다." #: modules/visual_script/visual_script_property_selector.cpp msgid "Search VisualScript" -msgstr "비주얼 스크립트 검색하기" +msgstr "비주얼 스크립트 검색" #: modules/visual_script/visual_script_property_selector.cpp msgid "Get %s" @@ -11672,63 +11779,64 @@ msgstr "Set %s" #: platform/android/export/export.cpp msgid "Package name is missing." -msgstr "패키지 이름이 없어요." +msgstr "패키지 이름이 없습니다." #: platform/android/export/export.cpp msgid "Package segments must be of non-zero length." -msgstr "패키지 세그먼트는 길이가 0이 아니어야 해요." +msgstr "패키지 세그먼트는 길이가 0이 아니어야 합니다." #: platform/android/export/export.cpp msgid "The character '%s' is not allowed in Android application package names." -msgstr "문자 '%s'은(는) 안드로이드 애플리케이션 패키지 이름으로 쓸 수 없어요." +msgstr "" +"문자 '%s'은(는) 안드로이드 애플리케이션 패키지 이름으로 쓸 수 없습니다." #: platform/android/export/export.cpp msgid "A digit cannot be the first character in a package segment." -msgstr "숫자는 패키지 세그먼트의 첫 문자로 쓸 수 없어요." +msgstr "숫자는 패키지 세그먼트의 첫 문자로 쓸 수 없습니다." #: platform/android/export/export.cpp msgid "The character '%s' cannot be the first character in a package segment." -msgstr "문자 '%s'은(는) 패키지 세그먼트의 첫 문자로 쓸 수 없어요." +msgstr "문자 '%s'은(는) 패키지 세그먼트의 첫 문자로 쓸 수 없습니다." #: platform/android/export/export.cpp msgid "The package must have at least one '.' separator." -msgstr "패키지는 적어도 하나의 '.' 분리 기호가 있어야 해요." +msgstr "패키지는 적어도 하나의 '.' 분리 기호가 있어야 합니다." #: platform/android/export/export.cpp msgid "Select device from the list" -msgstr "목록에서 기기 선택하기" +msgstr "목록에서 기기 선택" #: platform/android/export/export.cpp msgid "ADB executable not configured in the Editor Settings." -msgstr "ADB 실행 파일을 편집기 설정에서 설정하지 않았어요." +msgstr "ADB 실행 파일을 편집기 설정에서 설정하지 않았습니다." #: platform/android/export/export.cpp msgid "OpenJDK jarsigner not configured in the Editor Settings." -msgstr "OpenJDK jarsigner를 편집기 설정에서 설정하지 않았어요." +msgstr "OpenJDK jarsigner를 편집기 설정에서 설정하지 않았습니다." #: platform/android/export/export.cpp msgid "Debug keystore not configured in the Editor Settings nor in the preset." -msgstr "Debug keystore를 편집기 설정과 프리셋에 설정하지 않았어요." +msgstr "Debug keystore를 편집기 설정과 프리셋에 설정하지 않았습니다." #: platform/android/export/export.cpp msgid "Custom build requires a valid Android SDK path in Editor Settings." -msgstr "맞춤 빌드에는 편집기 설정에서 올바른 안드로이드 SDK 경로가 필요해요." +msgstr "맞춤 빌드에는 편집기 설정에서 올바른 안드로이드 SDK 경로가 필요합니다." #: platform/android/export/export.cpp msgid "Invalid Android SDK path for custom build in Editor Settings." -msgstr "편집기 설정에서 맞춤 빌드에 잘못된 안드로이드 SDK 경로이에요." +msgstr "편집기 설정에서 맞춤 빌드에 잘못된 안드로이드 SDK 경로입니다." #: platform/android/export/export.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." msgstr "" -"프로젝트에 안드로이드 빌드 템플릿을 설치하지 않았네요. 프로젝트 메뉴에서 설치" -"하세요." +"프로젝트에 안드로이드 빌드 템플릿을 설치하지 않았습니다. 프로젝트 메뉴에서 설" +"치하세요." #: platform/android/export/export.cpp msgid "Invalid public key for APK expansion." -msgstr "APK 확장에 잘못된 공개 키에요." +msgstr "APK 확장에 잘못된 공개 키입니다." #: platform/android/export/export.cpp msgid "Invalid package name:" @@ -11739,8 +11847,8 @@ msgid "" "Trying to build from a custom built template, but no version info for it " "exists. Please reinstall from the 'Project' menu." msgstr "" -"맞춤 빌드 템플릿으로 빌드하려 했으나, 버전 정보가가 없어요. '프로젝트' 메뉴에" -"서 다시 설치해주세요." +"맞춤 빌드 템플릿으로 빌드하려 했으나, 버전 정보가가 없습니다. '프로젝트' 메뉴" +"에서 다시 설치해주세요." #: platform/android/export/export.cpp msgid "" @@ -11763,7 +11871,7 @@ msgid "" "Building of Android project failed, check output for the error.\n" "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" -"안드로이드 프로젝트의 빌드에 실패했어요, 출력한 오류를 확인하세요.\n" +"안드로이드 프로젝트의 빌드에 실패했, 출력한 오류를 확인하세요.\n" "또는 docs.godotengine.org에서 안드로이드 빌드 문서를 찾아 보세요." #: platform/android/export/export.cpp @@ -11772,15 +11880,15 @@ msgstr "여기에 빌드 apk를 만들지 않음: " #: platform/iphone/export/export.cpp msgid "Identifier is missing." -msgstr "식별자가 없어요." +msgstr "식별자가 없습니다." #: platform/iphone/export/export.cpp msgid "The character '%s' is not allowed in Identifier." -msgstr "문자 '%s'은(는) 식별자에 쓸 수 없어요." +msgstr "문자 '%s'은(는) 식별자에 쓸 수 없습니다." #: platform/iphone/export/export.cpp msgid "App Store Team ID not specified - cannot configure the project." -msgstr "App Store 팀 ID를 지정하지 않았어요 - 프로젝트를 구성할 수 없어요." +msgstr "App Store 팀 ID를 지정하지 않았습니다 - 프로젝트를 구성할 수 없습니다." #: platform/iphone/export/export.cpp msgid "Invalid Identifier:" @@ -11788,7 +11896,7 @@ msgstr "잘못된 식별자:" #: platform/iphone/export/export.cpp msgid "Required icon is not specified in the preset." -msgstr "요구하는 아이콘을 프리셋에서 지정하지 않았어요." +msgstr "요구하는 아이콘을 프리셋에서 지정하지 않았습니다." #: platform/javascript/export/export.cpp msgid "Stop HTTP Server" @@ -11796,11 +11904,11 @@ msgstr "HTTP 서버 멈추기" #: platform/javascript/export/export.cpp msgid "Run in Browser" -msgstr "브라우저에서 실행하기" +msgstr "브라우저에서 실행" #: platform/javascript/export/export.cpp msgid "Run exported HTML in the system's default browser." -msgstr "내보낸 HTML을 시스템의 기본 브라우저를 사용하여 실행해요." +msgstr "내보낸 HTML을 시스템의 기본 브라우저를 사용하여 실행합니다." #: platform/javascript/export/export.cpp msgid "Could not write file:" @@ -11824,7 +11932,7 @@ msgstr "부트 스플래시 이미지 파일을 읽을 수 없음:" #: platform/javascript/export/export.cpp msgid "Using default boot splash image." -msgstr "기본 부트 스플래시 이미지 사용하기." +msgstr "기본 부트 스플래시 이미지 사용." #: platform/uwp/export/export.cpp msgid "Invalid package short name." @@ -11852,31 +11960,31 @@ msgstr "잘못된 배경 색상." #: platform/uwp/export/export.cpp msgid "Invalid Store Logo image dimensions (should be 50x50)." -msgstr "잘못된 Store 로고 이미지 크기(50x50이어야 해요)." +msgstr "잘못된 Store 로고 이미지 크기(50x50이어야 합니다)." #: platform/uwp/export/export.cpp msgid "Invalid square 44x44 logo image dimensions (should be 44x44)." -msgstr "잘못된 사각형 44x44 로고 이미지 크기 (44x44이어야 해요)." +msgstr "잘못된 사각형 44x44 로고 이미지 크기 (44x44이어야 합니다)." #: platform/uwp/export/export.cpp msgid "Invalid square 71x71 logo image dimensions (should be 71x71)." -msgstr "잘못된 사각형 71x71 로고 이미지 크기 (71x71이어야 해요)." +msgstr "잘못된 사각형 71x71 로고 이미지 크기 (71x71이어야 합니다)." #: platform/uwp/export/export.cpp msgid "Invalid square 150x150 logo image dimensions (should be 150x150)." -msgstr "잘못된 사각형 150x150 로고 이미지 크기 (150x150이어야 해요)." +msgstr "잘못된 사각형 150x150 로고 이미지 크기 (150x150이어야 합니다)." #: platform/uwp/export/export.cpp msgid "Invalid square 310x310 logo image dimensions (should be 310x310)." -msgstr "잘못된 사각형 310x310 로고 이미지 크기 (310x310이어야 해요)." +msgstr "잘못된 사각형 310x310 로고 이미지 크기 (310x310이어야 합니다)." #: platform/uwp/export/export.cpp msgid "Invalid wide 310x150 logo image dimensions (should be 310x150)." -msgstr "잘못된 넓은 310x150 로고 이미지 크기 (310x150이어야 해요)." +msgstr "잘못된 넓은 310x150 로고 이미지 크기 (310x150이어야 합니다)." #: platform/uwp/export/export.cpp msgid "Invalid splash screen image dimensions (should be 620x300)." -msgstr "잘못된 스플래시 스크린 이미지 크기 (620x300이어야 해요)." +msgstr "잘못된 스플래시 스크린 이미지 크기 (620x300이어야 합니다)." #: scene/2d/animated_sprite.cpp msgid "" @@ -11884,15 +11992,15 @@ msgid "" "order for AnimatedSprite to display frames." msgstr "" "AnimatedSprite이 프레임을 보여주려면 \"Frames\" 속성에 SpriteFrames 리소스를 " -"만들거나 지정해야 해요." +"만들거나 지정해야 합니다." #: scene/2d/canvas_modulate.cpp msgid "" "Only one visible CanvasModulate is allowed per scene (or set of instanced " "scenes). The first created one will work, while the rest will be ignored." msgstr "" -"CanvasModulate는 씬 당 단 하나만 보일 수 있어요. 처음에 만든 것만 작동하고, " -"나머지는 무시돼요." +"CanvasModulate는 씬 당 단 하나만 보일 수 있습니다. 처음에 만든 것만 작동하" +"고, 나머지는 무시됩니다." #: scene/2d/collision_object_2d.cpp msgid "" @@ -11900,7 +12008,7 @@ msgid "" "Consider adding a CollisionShape2D or CollisionPolygon2D as a child to " "define its shape." msgstr "" -"이 노드는 Shape가 없어요, 다른 물체와 충돌하거나 상호 작용할 수 없어요.\n" +"이 노드는 Shape가 없습니다, 다른 물체와 충돌하거나 상호 작용할 수 없습니다.\n" "CollisionShape2D 또는 CollisionPolygon2D를 자식 노드로 추가하여 Shape를 정의" "하세요." @@ -11910,13 +12018,13 @@ msgid "" "CollisionObject2D derived node. Please only use it as a child of Area2D, " "StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape." msgstr "" -"CollisionPolygon2D는 CollisionObject2D에 충돌 모양을 지정하는 용도로만 사용돼" -"요. Shape를 정의해야 하는 Area2D, StaticBody2D, RigidBody2D, KinematicBody2D " -"등의 자식으로만 사용해주세요." +"CollisionPolygon2D는 CollisionObject2D에 충돌 모양을 지정하는 용도로만 사용됩" +"니다. Shape를 정의해야 하는 Area2D, StaticBody2D, RigidBody2D, " +"KinematicBody2D 등의 자식으로만 사용해주세요." #: scene/2d/collision_polygon_2d.cpp msgid "An empty CollisionPolygon2D has no effect on collision." -msgstr "빈 CollisionPolygon2D는 충돌에 영향을 주지 않아요." +msgstr "빈 CollisionPolygon2D는 충돌에 영향을 주지 않습니다." #: scene/2d/collision_shape_2d.cpp msgid "" @@ -11924,8 +12032,8 @@ msgid "" "CollisionObject2D derived node. Please only use it as a child of Area2D, " "StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape." msgstr "" -"CollisionShape2D는 CollisionObject2D에 충돌 모양을 지정하는 용도로만 사용돼" -"요. Shape를 정의해야 하는 Area2D, StaticBody2D, RigidBody2D, KinematicBody2D " +"CollisionShape2D는 CollisionObject2D에 충돌 모양을 지정하는 용도로만 사용됩니" +"다. Shape를 정의해야 하는 Area2D, StaticBody2D, RigidBody2D, KinematicBody2D " "등의 자식으로만 사용해주세요." #: scene/2d/collision_shape_2d.cpp @@ -11933,8 +12041,8 @@ msgid "" "A shape must be provided for CollisionShape2D to function. Please create a " "shape resource for it!" msgstr "" -"CollisionShape2D가 작동하려면 반드시 Shape가 있어야 해요. Shape 리소스를 만들" -"어주세요!" +"CollisionShape2D가 작동하려면 반드시 Shape가 있어야 합니다. Shape 리소스를 만" +"들어주세요!" #: scene/2d/cpu_particles_2d.cpp msgid "" @@ -11942,46 +12050,46 @@ msgid "" "\"Particles Animation\" enabled." msgstr "" "CPUParticles2D 애니메이션에는 \"Particles Animation\"이 켜진 " -"CanvasItemMaterial을 사용해야 해요." +"CanvasItemMaterial을 사용해야 합니다." #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " "property." -msgstr "조명의 모양을 나타낼 텍스처를 \"Texture\" 속성에 지정해야 해요." +msgstr "조명의 모양을 나타낼 텍스처를 \"Texture\" 속성에 지정해야 합니다." #: scene/2d/light_occluder_2d.cpp msgid "" "An occluder polygon must be set (or drawn) for this occluder to take effect." msgstr "" -"이 Occluder가 영향을 주게 하려면 Occluder 폴리곤을 설정해야 (혹은 그려야) 해" -"요." +"이 Occluder가 영향을 주게 하려면 Occluder 폴리곤을 설정해야 (혹은 그려야) 합" +"니다." #: scene/2d/light_occluder_2d.cpp msgid "The occluder polygon for this occluder is empty. Please draw a polygon." -msgstr "Occluder 폴리곤이 비어있어요. 폴리곤을 그려주세요." +msgstr "Occluder 폴리곤이 비어있습니다. 폴리곤을 그려주세요." #: scene/2d/navigation_polygon.cpp msgid "" "A NavigationPolygon resource must be set or created for this node to work. " "Please set a property or draw a polygon." msgstr "" -"이 노드가 작동하려면 NavigationPolygon 리소스를 설정하거나 만들어야 해요. 속" -"성을 설정하거나 폴리곤을 그려주세요." +"이 노드가 작동하려면 NavigationPolygon 리소스를 설정하거나 만들어야 합니다. " +"속성을 설정하거나 폴리곤을 그려주세요." #: scene/2d/navigation_polygon.cpp msgid "" "NavigationPolygonInstance must be a child or grandchild to a Navigation2D " "node. It only provides navigation data." msgstr "" -"NavigationPolygonInstance는 Navigation2D 노드의 자식 또는 그 아래에 있어야 해" -"요. 이것은 내비게이션 데이터만을 제공해요." +"NavigationPolygonInstance는 Navigation2D 노드의 자식 또는 그 아래에 있어야 합" +"니다. 이것은 내비게이션 데이터만을 제공합니다." #: scene/2d/parallax_layer.cpp msgid "" "ParallaxLayer node only works when set as child of a ParallaxBackground node." msgstr "" -"ParallaxLayer는 ParallaxBackground 노드의 자식 노드로 있을 때만 작동해요." +"ParallaxLayer는 ParallaxBackground 노드의 자식 노드로 있을 때만 작동합니다." #: scene/2d/particles_2d.cpp msgid "" @@ -11989,16 +12097,17 @@ msgid "" "Use the CPUParticles2D node instead. You can use the \"Convert to " "CPUParticles\" option for this purpose." msgstr "" -"GPU 기반 파티클은 GLES2 비디오 드라이버에서 지원하지 않아요.\n" -"대신 CPUParticles2D 노드를 사용하세요. 이 경우 \"CPU파티클로 변환하기\" 옵션" -"을 사용할 수 있어요." +"GPU 기반 파티클은 GLES2 비디오 드라이버에서 지원하지 않습니다.\n" +"대신 CPUParticles2D 노드를 사용하세요. 이 경우 \"CPU파티클로 변환\" 옵션을 사" +"용할 수 있습니다." #: scene/2d/particles_2d.cpp scene/3d/particles.cpp msgid "" "A material to process the particles is not assigned, so no behavior is " "imprinted." msgstr "" -"파티클을 처리할 머티리얼을 지정하지 않았어요. 아무런 동작도 찍히지 않아요." +"파티클을 처리할 머티리얼을 지정하지 않았습니다. 아무런 동작도 찍히지 않습니" +"다." #: scene/2d/particles_2d.cpp msgid "" @@ -12006,11 +12115,11 @@ msgid "" "\"Particles Animation\" enabled." msgstr "" "Particles2D 애니메이션은 \"Particles Animation\"이 켜져 있는 " -"CanvasItemMaterial을 사용해야 해요." +"CanvasItemMaterial을 사용해야 합니다." #: scene/2d/path_2d.cpp msgid "PathFollow2D only works when set as a child of a Path2D node." -msgstr "PathFollow2D는 Path2D 노드의 자식 노드로 있을 때만 작동해요." +msgstr "PathFollow2D는 Path2D 노드의 자식 노드로 있을 때만 작동합니다." #: scene/2d/physics_body_2d.cpp msgid "" @@ -12019,27 +12128,27 @@ msgid "" "Change the size in children collision shapes instead." msgstr "" "(캐릭터나 리지드 모드에서) RigidBody2D의 크기 변경은 물리 엔진이 작동하는 동" -"안 큰 부담이 돼요.\n" +"안 큰 부담이 됩니다.\n" "대신 자식 충돌 형태의 크기를 변경해보세요." #: scene/2d/remote_transform_2d.cpp msgid "Path property must point to a valid Node2D node to work." -msgstr "Path 속성은 올바른 Node2D 노드를 가리켜야 해요." +msgstr "Path 속성은 올바른 Node2D 노드를 가리켜야 합니다." #: scene/2d/skeleton_2d.cpp msgid "This Bone2D chain should end at a Skeleton2D node." -msgstr "이 Bone2D 체인은 Skeleton2D 노드에서 끝나야 해요." +msgstr "이 Bone2D 체인은 Skeleton2D 노드에서 끝나야 합니다." #: scene/2d/skeleton_2d.cpp msgid "A Bone2D only works with a Skeleton2D or another Bone2D as parent node." -msgstr "Bone2D는 Skeleton2D나 다른 Bone2D가 부모 노드로 있어야만 작동해요." +msgstr "Bone2D는 Skeleton2D나 다른 Bone2D가 부모 노드로 있어야만 작동합니다." #: scene/2d/skeleton_2d.cpp msgid "" "This bone lacks a proper REST pose. Go to the Skeleton2D node and set one." msgstr "" -"이 본에 적절한 대기 자세가 없어요. Skeleton2D 노드로 가서 대기 자세를 설정하" -"세요." +"이 본에 적절한 대기 자세가 없습니다. Skeleton2D 노드로 가서 대기 자세를 설정" +"하세요." #: scene/2d/tile_map.cpp msgid "" @@ -12047,46 +12156,46 @@ msgid "" "to. Please use it as a child of Area2D, StaticBody2D, RigidBody2D, " "KinematicBody2D, etc. to give them a shape." msgstr "" -"Use Parent가 켜진 TileMap은 형태를 주는 부모 CollisionObject2D가 필요해요. 형" -"태를 주기 위해 Area2D, StaticBody2D, RigidBody2D, KinematicBody2D 등을 자식 " -"노드로 사용해주세요." +"Use Parent가 켜진 TileMap은 형태를 주는 부모 CollisionObject2D가 필요합니다. " +"형태를 주기 위해 Area2D, StaticBody2D, RigidBody2D, KinematicBody2D 등을 자" +"식 노드로 사용해주세요." #: scene/2d/visibility_notifier_2d.cpp msgid "" "VisibilityEnabler2D works best when used with the edited scene root directly " "as parent." msgstr "" -"VisibilityEnabler2D는 편집한 씬의 루트에 직접 부모로 사용할 때 가장 잘 작동해" -"요." +"VisibilityEnabler2D는 편집한 씬의 루트에 직접 부모로 사용할 때 가장 잘 작동합" +"니다." #: scene/3d/arvr_nodes.cpp msgid "ARVRCamera must have an ARVROrigin node as its parent." -msgstr "ARVRCamera는 반드시 ARVROrigin 노드를 부모로 갖고 있어야 해요." +msgstr "ARVRCamera는 반드시 ARVROrigin 노드를 부모로 갖고 있어야 합니다." #: scene/3d/arvr_nodes.cpp msgid "ARVRController must have an ARVROrigin node as its parent." -msgstr "ARVRController는 반드시 ARVROrigin 노드를 부모로 갖고 있어야 해요." +msgstr "ARVRController는 반드시 ARVROrigin 노드를 부모로 갖고 있어야 합니다." #: scene/3d/arvr_nodes.cpp msgid "" "The controller ID must not be 0 or this controller won't be bound to an " "actual controller." msgstr "" -"컨트롤러 ID가 0이 되면 컨트롤러가 실제 컨트롤러에 바인딩하지 않게 돼요." +"컨트롤러 ID가 0이 되면 컨트롤러가 실제 컨트롤러에 바인딩하지 않게 됩니다." #: scene/3d/arvr_nodes.cpp msgid "ARVRAnchor must have an ARVROrigin node as its parent." -msgstr "ARVRAnchor는 반드시 ARVROrigin 노드를 부모로 갖고 있어야 해요." +msgstr "ARVRAnchor는 반드시 ARVROrigin 노드를 부모로 갖고 있어야 합니다." #: scene/3d/arvr_nodes.cpp msgid "" "The anchor ID must not be 0 or this anchor won't be bound to an actual " "anchor." -msgstr "앵커 ID가 0이 되면 앵커가 실제 앵커에 바인딩하지 않게 돼요." +msgstr "앵커 ID가 0이 되면 앵커가 실제 앵커에 바인딩하지 않게 됩니다." #: scene/3d/arvr_nodes.cpp msgid "ARVROrigin requires an ARVRCamera child node." -msgstr "ARVROrigin은 자식으로 ARVRCamera 노드가 필요해요." +msgstr "ARVROrigin은 자식으로 ARVRCamera 노드가 필요합니다." #: scene/3d/baked_lightmap.cpp msgid "%d%%" @@ -12118,7 +12227,7 @@ msgid "" "Consider adding a CollisionShape or CollisionPolygon as a child to define " "its shape." msgstr "" -"이 노드는 Shape가 없어요. 다른 물체와 충돌하거나 상호 작용할 수 없어요.\n" +"이 노드는 Shape가 없습니다. 다른 물체와 충돌하거나 상호 작용할 수 없습니다.\n" "CollisionShape 또는 CollisionPolygon을 자식 노드로 추가해서 Shape을 정의해보" "세요." @@ -12128,13 +12237,13 @@ msgid "" "CollisionObject derived node. Please only use it as a child of Area, " "StaticBody, RigidBody, KinematicBody, etc. to give them a shape." msgstr "" -"CollisionPolygon은 CollisionObject에 충돌 Shape를 지정하는 용도로만 사용돼" -"요. Area, StaticBody, RigidBody, KinematicBody 등에 자식 노드로 추가해서 사용" +"CollisionPolygon은 CollisionObject에 충돌 Shape를 지정하는 용도로만 사용됩니" +"다. Area, StaticBody, RigidBody, KinematicBody 등에 자식 노드로 추가해서 사용" "해주세요." #: scene/3d/collision_polygon.cpp msgid "An empty CollisionPolygon has no effect on collision." -msgstr "빈 CollisionPolygon는 충돌에 영향을 주지 않아요." +msgstr "빈 CollisionPolygon는 충돌에 영향을 주지 않습니다." #: scene/3d/collision_shape.cpp msgid "" @@ -12142,29 +12251,29 @@ msgid "" "derived node. Please only use it as a child of Area, StaticBody, RigidBody, " "KinematicBody, etc. to give them a shape." msgstr "" -"CollisionShape은 CollisionObject에 충돌 Shape를 지정하는 용도로만 사용돼요. " -"Area, StaticBody, RigidBody, KinematicBody 등에 자식 노드로 추가해서 사용해주" -"세요." +"CollisionShape은 CollisionObject에 충돌 Shape를 지정하는 용도로만 사용됩니" +"다. Area, StaticBody, RigidBody, KinematicBody 등에 자식 노드로 추가해서 사용" +"해주세요." #: scene/3d/collision_shape.cpp msgid "" "A shape must be provided for CollisionShape to function. Please create a " "shape resource for it." msgstr "" -"CollisionShape가 제 기능을 하려면 Shape가 있어야 해요. Shape 리소스를 만들어" -"주세요." +"CollisionShape가 제 기능을 하려면 Shape가 있어야 합니다. Shape 리소스를 만들" +"어주세요." #: scene/3d/collision_shape.cpp msgid "" "Plane shapes don't work well and will be removed in future versions. Please " "don't use them." msgstr "" -"평면 Shape는 잘 작동하지 않으며 이후 버전에서 제거될 예정이에요. 사용하지 말" +"평면 Shape는 잘 작동하지 않으며 이후 버전에서 제거될 예정입니다. 사용하지 말" "아주세요." #: scene/3d/cpu_particles.cpp msgid "Nothing is visible because no mesh has been assigned." -msgstr "지정한 메시가 없어서 아무 것도 보이지 않아요." +msgstr "지정한 메시가 없어서 아무 것도 보이지 않습니다." #: scene/3d/cpu_particles.cpp msgid "" @@ -12172,35 +12281,36 @@ msgid "" "Billboard Mode is set to \"Particle Billboard\"." msgstr "" "CPUParticles 애니메이션을 사용하려면 Billboard Mode가 \"Particle Billboard" -"\"로 설정된 SpatialMaterial이 필요해요." +"\"로 설정된 SpatialMaterial이 필요합니다." #: scene/3d/gi_probe.cpp msgid "Plotting Meshes" -msgstr "메시 구분하기" +msgstr "메시 구분" #: scene/3d/gi_probe.cpp msgid "" "GIProbes are not supported by the GLES2 video driver.\n" "Use a BakedLightmap instead." msgstr "" -"GIProbe는 GLES2 비디오 드라이버에서 지원하지 않아요.\n" +"GIProbe는 GLES2 비디오 드라이버에서 지원하지 않습니다.\n" "대신 BakedLightmap을 사용하세요." #: scene/3d/light.cpp msgid "A SpotLight with an angle wider than 90 degrees cannot cast shadows." -msgstr "SpotLight의 각도를 90도 이상으로 잡게되면 그림자를 투영할 수 없어요." +msgstr "SpotLight의 각도를 90도 이상으로 잡게되면 그림자를 투영할 수 없습니다." #: scene/3d/navigation_mesh.cpp msgid "A NavigationMesh resource must be set or created for this node to work." -msgstr "이 노드가 작동하려면 NavigationMesh 리소스를 설정하거나 만들어야 해요." +msgstr "" +"이 노드가 작동하려면 NavigationMesh 리소스를 설정하거나 만들어야 합니다." #: scene/3d/navigation_mesh.cpp msgid "" "NavigationMeshInstance must be a child or grandchild to a Navigation node. " "It only provides navigation data." msgstr "" -"NavigationMeshInstance는 Navigation 노드의 자식이나 더 하위에 있어야 해요. 이" -"것은 내비게이션 데이터만 제공해요." +"NavigationMeshInstance는 Navigation 노드의 자식이나 더 하위에 있어야 합니다. " +"이것은 내비게이션 데이터만 제공합니다." #: scene/3d/particles.cpp msgid "" @@ -12208,14 +12318,14 @@ msgid "" "Use the CPUParticles node instead. You can use the \"Convert to CPUParticles" "\" option for this purpose." msgstr "" -"GPU 기반 파티클은 GLES2 비디오 드라이버에서 지원하지 않아요.\n" -"대신 CPUParticles 노드를 사용하세요. 이 경우 \"CPU파티클로 변환하기\" 설정을 " -"사용할 수 있어요." +"GPU 기반 파티클은 GLES2 비디오 드라이버에서 지원하지 않습니다.\n" +"대신 CPUParticles 노드를 사용하세요. 이 경우 \"CPU파티클로 변환\" 설정을 사용" +"할 수 있습니다." #: scene/3d/particles.cpp msgid "" "Nothing is visible because meshes have not been assigned to draw passes." -msgstr "메시가 패스를 그리도록 지정하지 않아서, 아무 것도 보이지 않아요." +msgstr "메시가 패스를 그리도록 지정하지 않아서, 아무 것도 보이지 않습니다." #: scene/3d/particles.cpp msgid "" @@ -12223,11 +12333,11 @@ msgid "" "Mode is set to \"Particle Billboard\"." msgstr "" "Particles 애니메이션을 사용하려면 Billboard Mode가 \"Particle Billboard\"로 " -"설정된 SpatialMaterial이 필요해요." +"설정된 SpatialMaterial이 필요합니다." #: scene/3d/path.cpp msgid "PathFollow only works when set as a child of a Path node." -msgstr "PathFollow는 Path 노드의 자식으로 있을 때만 작동해요." +msgstr "PathFollow는 Path 노드의 자식으로 있을 때만 작동합니다." #: scene/3d/path.cpp msgid "" @@ -12235,7 +12345,7 @@ msgid "" "parent Path's Curve resource." msgstr "" "PathFollow의 ROTATION_ORIENTED는 부모 Path의 Curve 리소스에서 \"Up Vector" -"\"가 켜져 있어야 해요." +"\"가 켜져 있어야 합니다." #: scene/3d/physics_body.cpp msgid "" @@ -12244,7 +12354,7 @@ msgid "" "Change the size in children collision shapes instead." msgstr "" "(캐릭터나 리지드 모드에서) RigidBody의 크기 변경은 물리 엔진이 작동하는 동안 " -"큰 부담이 돼요.\n" +"큰 부담이 됩니다.\n" "대신 자식 충돌 모양의 크기를 변경하세요." #: scene/3d/remote_transform.cpp @@ -12253,11 +12363,11 @@ msgid "" "derived node to work." msgstr "" "\"Remote Path\" 속성은 올바른 Spatial 노드, 또는 Spatial에서 파생된 노드를 가" -"리켜야 해요." +"리켜야 합니다." #: scene/3d/soft_body.cpp msgid "This body will be ignored until you set a mesh." -msgstr "이 바디는 메시를 설정할 때까지 무시돼요." +msgstr "이 바디는 메시를 설정할 때까지 무시됩니다." #: scene/3d/soft_body.cpp msgid "" @@ -12265,7 +12375,7 @@ msgid "" "running.\n" "Change the size in children collision shapes instead." msgstr "" -"실행 중에 SoftBody의 크기 변경은 물리 엔진에 의해 다시 정의돼요.\n" +"실행 중에 SoftBody의 크기 변경은 물리 엔진에 의해 재정의됩니다.\n" "대신 자식의 충돌 모양 크기를 변경하세요." #: scene/3d/sprite_3d.cpp @@ -12274,14 +12384,14 @@ msgid "" "order for AnimatedSprite3D to display frames." msgstr "" "AnimatedSprite3D가 프레임을 보여주기 위해서는 \"Frames\" 속성에 SpriteFrames " -"리소스를 만들거나 설정해야 해요." +"리소스를 만들거나 설정해야 합니다." #: scene/3d/vehicle_body.cpp msgid "" "VehicleWheel serves to provide a wheel system to a VehicleBody. Please use " "it as a child of a VehicleBody." msgstr "" -"VehicleWheel은 VehicleBody로 바퀴 시스템을 제공하는 역할이에요. VehicleBody" +"VehicleWheel은 VehicleBody로 바퀴 시스템을 제공하는 역할입니다. VehicleBody" "의 자식으로 사용해주세요." #: scene/3d/world_environment.cpp @@ -12290,20 +12400,20 @@ msgid "" "Environment to have a visible effect." msgstr "" "WorldEnvironment가 시각 효과를 갖도록 Environment를 갖고 있는 \"Environment" -"\" 속성이 필요해요." +"\" 속성이 필요합니다." #: scene/3d/world_environment.cpp msgid "" "Only one WorldEnvironment is allowed per scene (or set of instanced scenes)." msgstr "" -"씬마다 (혹은 인스턴스된 씬 세트마다) WorldEnvironment는 하나만 허용돼요." +"씬마다 (혹은 인스턴스된 씬 세트마다) WorldEnvironment는 하나만 허용됩니다." #: scene/3d/world_environment.cpp msgid "" "This WorldEnvironment is ignored. Either add a Camera (for 3D scenes) or set " "this environment's Background Mode to Canvas (for 2D scenes)." msgstr "" -"이 WorldEnvironment는 무시돼요. (3D 씬을 위해) Camera를 추가하거나 아니면 " +"이 WorldEnvironment는 무시됩니다. (3D 씬을 위해) Camera를 추가하거나 아니면 " "(2D 씬을 위해) 이 환경의 Background Mode를 Canvas로 설정하세요." #: scene/animation/animation_blend_tree.cpp @@ -12324,29 +12434,30 @@ msgstr "잘못된 애니메이션: '%s'." #: scene/animation/animation_tree.cpp msgid "Nothing connected to input '%s' of node '%s'." -msgstr "노드 '%s'의 '%s' 입력에 아무것도 연결되지 않았어요." +msgstr "노드 '%s'의 '%s' 입력에 아무것도 연결되지 않았습니다." #: scene/animation/animation_tree.cpp msgid "No root AnimationNode for the graph is set." -msgstr "그래프를 위한 루트 AnimationNode를 설정하지 않았어요." +msgstr "그래프를 위한 루트 AnimationNode를 설정하지 않았습니다." #: scene/animation/animation_tree.cpp msgid "Path to an AnimationPlayer node containing animations is not set." msgstr "" -"애니메이션을 갖고 있는 AnimationPlayer 노드의 경로를 설정하지 않았어요." +"애니메이션을 갖고 있는 AnimationPlayer 노드의 경로를 설정하지 않았습니다." #: scene/animation/animation_tree.cpp msgid "Path set for AnimationPlayer does not lead to an AnimationPlayer node." msgstr "" -"AnimationPlayer에 대한 경로 설정이 AnimationPlayer 노드를 향하고 있지 않아요." +"AnimationPlayer에 대한 경로 설정이 AnimationPlayer 노드를 향하고 있지 않습니" +"다." #: scene/animation/animation_tree.cpp msgid "The AnimationPlayer root node is not a valid node." -msgstr "AnimationPlayer 루트 노드가 올바른 노드가 아니에요." +msgstr "AnimationPlayer 루트 노드가 올바른 노드가 아닙니다." #: scene/animation/animation_tree_player.cpp msgid "This node has been deprecated. Use AnimationTree instead." -msgstr "이 노드는 더 이상 사용할 수 없어요. 대신 AnimationTree를 사용하세요." +msgstr "이 노드는 더 이상 사용할 수 없습니다. 대신 AnimationTree를 사용하세요." #: scene/gui/color_picker.cpp msgid "" @@ -12355,8 +12466,8 @@ msgid "" "RMB: Remove preset" msgstr "" "색상: #%s\n" -"좌클릭: 색상 설정하기\n" -"우클릭: 프리셋 제거하기" +"좌클릭: 색상 설정\n" +"우클릭: 프리셋 제거" #: scene/gui/color_picker.cpp msgid "Pick a color from the editor window." @@ -12372,11 +12483,11 @@ msgstr "Raw" #: scene/gui/color_picker.cpp msgid "Switch between hexadecimal and code values." -msgstr "16진수나 코드 값으로 전환해요." +msgstr "16진수나 코드 값으로 전환합니다." #: scene/gui/color_picker.cpp msgid "Add current color as a preset." -msgstr "현재 색상을 프리셋으로 추가해요." +msgstr "현재 색상을 프리셋으로 추가합니다." #: scene/gui/container.cpp msgid "" @@ -12384,7 +12495,7 @@ msgid "" "children placement behavior.\n" "If you don't intend to add a script, use a plain Control node instead." msgstr "" -"Container 자체는 자식 배치 작업을 구성하는 스크립트 외에는 목적이 없어요.\n" +"Container 자체는 자식 배치 작업을 구성하는 스크립트 외에는 목적이 없습니다.\n" "스크립트를 추가하는 의도가 없으면, 순수한 Control 노드를 사용해주세요." #: scene/gui/control.cpp @@ -12393,7 +12504,8 @@ msgid "" "\"Ignore\". To solve this, set the Mouse Filter to \"Stop\" or \"Pass\"." msgstr "" "Hint Tooltip은 Control의 Mouse Filter가 \"Ignore\"으로 설정되어 있기 때문에 " -"보이지 않아요. 해결하려면 Mouse Filter를 \"Stop\"이나 \"Pass\"로 설정하세요." +"보이지 않습니다. 해결하려면 Mouse Filter를 \"Stop\"이나 \"Pass\"로 설정하세" +"요." #: scene/gui/dialogs.cpp msgid "Alert!" @@ -12409,12 +12521,12 @@ msgid "" "functions. Making them visible for editing is fine, but they will hide upon " "running." msgstr "" -"Popup은 popup() 또는 기타 popup*() 함수로 호출하기 전까지 기본적으로 숨어있어" -"요. 편집하는 동안 보이도록 할 수는 있으나, 실행 시에는 보이지 않아요." +"Popup은 popup() 또는 기타 popup*() 함수로 호출하기 전까지 기본적으로 숨어있습" +"니다. 편집하는 동안 보이도록 할 수는 있으나, 실행 시에는 보이지 않습니다." #: scene/gui/range.cpp msgid "If \"Exp Edit\" is enabled, \"Min Value\" must be greater than 0." -msgstr "\"Exp Edit\"을 켜면, \"Min Value\"는 반드시 0보다 커야 해요." +msgstr "\"Exp Edit\"을 켜면, \"Min Value\"는 반드시 0보다 커야 합니다." #: scene/gui/scroll_container.cpp msgid "" @@ -12422,7 +12534,7 @@ msgid "" "Use a container as child (VBox, HBox, etc.), or a Control and set the custom " "minimum size manually." msgstr "" -"ScrollContainer는 단일 자식 Control을 작업하기 위한 것이에요.\n" +"ScrollContainer는 단일 자식 Control을 작업하기 위한 것입니다.\n" "(VBox, HBox 등) 컨테이너를 자식으로 사용하거나, Control을 사용하고 맞춤 최소 " "수치를 수동으로 설정하세요." @@ -12436,7 +12548,7 @@ msgid "" "Environment -> Default Environment) could not be loaded." msgstr "" "프로젝트 설정 (Rendering -> Environment -> Default Environment)에 지정한 기" -"본 환경을 불러올 수 없어요." +"본 환경을 불러올 수 없습니다." #: scene/main/viewport.cpp msgid "" @@ -12445,10 +12557,10 @@ msgid "" "obtain a size. Otherwise, make it a RenderTarget and assign its internal " "texture to some node for display." msgstr "" -"뷰포트를 렌더 대상으로 설정하지 않았어요. 뷰포트의 내용을 화면에 직접 표시하" -"려면, Control의 자식 노드로 만들어서 크기를 얻어야 해요. 그렇지 않을 경우, 화" -"면에 표시하기 위해서는 뷰포트를 RenderTarget으로 만들고 내부적인 텍스처를 다" -"른 노드에 지정해야 해요." +"뷰포트를 렌더 대상으로 설정하지 않았습니다. 뷰포트의 내용을 화면에 직접 표시" +"하려면, Control의 자식 노드로 만들어서 크기를 얻어야 합니다. 그렇지 않을 경" +"우, 화면에 표시하기 위해서는 뷰포트를 RenderTarget으로 만들고 내부적인 텍스처" +"를 다른 노드에 지정해야 합니다." #: scene/resources/visual_shader_nodes.cpp msgid "Invalid source for preview." @@ -12472,11 +12584,20 @@ msgstr "Uniform에 대입." #: servers/visual/shader_language.cpp msgid "Varyings can only be assigned in vertex function." -msgstr "Varying은 꼭짓점 함수에만 지정할 수 있어요." +msgstr "Varying은 꼭짓점 함수에만 지정할 수 있습니다." #: servers/visual/shader_language.cpp msgid "Constants cannot be modified." -msgstr "상수는 수정할 수 없어요." +msgstr "상수는 수정할 수 없습니다." + +#~ msgid "Replaced %d occurrence(s)." +#~ msgstr "%d개를 바꿨습니다." + +#~ msgid "Create Static Convex Body" +#~ msgstr "Static Convex Body 만들기" + +#~ msgid "Failed creating shapes!" +#~ msgstr "Shape 만들기 실패!" #~ msgid "" #~ "There are currently no tutorials for this class, you can [color=$color]" diff --git a/editor/translations/lt.po b/editor/translations/lt.po index f3118b9942..60d2adc418 100644 --- a/editor/translations/lt.po +++ b/editor/translations/lt.po @@ -702,7 +702,7 @@ msgid "Line Number:" msgstr "" #: editor/code_editor.cpp -msgid "Replaced %d occurrence(s)." +msgid "%d replaced." msgstr "" #: editor/code_editor.cpp editor/editor_help.cpp @@ -3923,15 +3923,16 @@ msgid "Saving..." msgstr "" #: editor/import_dock.cpp -msgid "Set as Default for '%s'" -msgstr "" +#, fuzzy +msgid "%d Files" +msgstr "Redaguoti Filtrus" #: editor/import_dock.cpp -msgid "Clear Default for '%s'" +msgid "Set as Default for '%s'" msgstr "" #: editor/import_dock.cpp -msgid " Files" +msgid "Clear Default for '%s'" msgstr "" #: editor/import_dock.cpp @@ -5821,11 +5822,11 @@ msgid "Mesh is empty!" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Trimesh Body" +msgid "Couldn't create a Trimesh collision shape." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Convex Body" +msgid "Create Static Trimesh Body" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -5837,12 +5838,29 @@ msgid "Create Trimesh Static Shape" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Failed creating shapes!" +msgid "Can't create a single convex collision shape for the scene root." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Couldn't create a single convex collision shape." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp #, fuzzy -msgid "Create Convex Shape(s)" +msgid "Create Single Convex Shape" +msgstr "Sukurti Naują" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Can't create multiple convex collision shapes for the scene root." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Couldn't create any collision shapes." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Create Multiple Convex Shapes" msgstr "Sukurti Naują" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -5894,19 +5912,57 @@ msgid "Create Trimesh Static Body" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a StaticBody and assigns a polygon-based collision shape to it " +"automatically.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Collision Sibling" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a polygon-based collision shape.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp #, fuzzy -msgid "Create Convex Collision Sibling(s)" +msgid "Create Single Convex Collision Siblings" msgstr "Keisti Poligono Skalę" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a single convex collision shape.\n" +"This is the fastest (but least accurate) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Create Multiple Convex Collision Siblings" +msgstr "Keisti Poligono Skalę" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a polygon-based collision shape.\n" +"This is a performance middle-ground between the two above options." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Outline Mesh..." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a static outline mesh. The outline mesh will have its normals " +"flipped automatically.\n" +"This can be used instead of the SpatialMaterial Grow property when using " +"that property isn't possible." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "View UV1" msgstr "" @@ -8356,7 +8412,7 @@ msgstr "" msgid "No VCS addons are available." msgstr "" -#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Error" msgstr "" @@ -9468,11 +9524,16 @@ msgid "Export With Debug" msgstr "" #: editor/project_manager.cpp -msgid "The path does not exist." +msgid "The path specified doesn't exist." +msgstr "" + +#: editor/project_manager.cpp +msgid "Error opening package file (it's not in ZIP format)." msgstr "" #: editor/project_manager.cpp -msgid "Invalid '.zip' project file, does not contain a 'project.godot' file." +msgid "" +"Invalid \".zip\" project file; it doesn't contain a \"project.godot\" file." msgstr "" #: editor/project_manager.cpp @@ -9480,11 +9541,11 @@ msgid "Please choose an empty folder." msgstr "" #: editor/project_manager.cpp -msgid "Please choose a 'project.godot' or '.zip' file." +msgid "Please choose a \"project.godot\" or \".zip\" file." msgstr "" #: editor/project_manager.cpp -msgid "Directory already contains a Godot project." +msgid "This directory already contains a Godot project." msgstr "" #: editor/project_manager.cpp @@ -10137,6 +10198,10 @@ msgid "Suffix" msgstr "" #: editor/rename_dialog.cpp +msgid "Use Regular Expressions" +msgstr "" + +#: editor/rename_dialog.cpp msgid "Advanced Options" msgstr "" @@ -10172,7 +10237,7 @@ msgid "" msgstr "" #: editor/rename_dialog.cpp -msgid "Per Level counter" +msgid "Per-level Counter" msgstr "" #: editor/rename_dialog.cpp @@ -10203,10 +10268,6 @@ msgid "" msgstr "" #: editor/rename_dialog.cpp -msgid "Regular Expressions" -msgstr "" - -#: editor/rename_dialog.cpp msgid "Post-Process" msgstr "" @@ -10215,11 +10276,11 @@ msgid "Keep" msgstr "" #: editor/rename_dialog.cpp -msgid "CamelCase to under_scored" +msgid "PascalCase to snake_case" msgstr "" #: editor/rename_dialog.cpp -msgid "under_scored to CamelCase" +msgid "snake_case to PascalCase" msgstr "" #: editor/rename_dialog.cpp @@ -10239,6 +10300,14 @@ msgstr "" msgid "Reset" msgstr "Atstatyti Priartinimą" +#: editor/rename_dialog.cpp +msgid "Regular Expression Error" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "At character %s" +msgstr "" + #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "" @@ -10691,7 +10760,7 @@ msgid "Invalid inherited parent name or path." msgstr "" #: editor/script_create_dialog.cpp -msgid "Script is valid." +msgid "Script path/name is valid." msgstr "" #: editor/script_create_dialog.cpp @@ -10788,6 +10857,10 @@ msgid "Copy Error" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Video RAM" +msgstr "" + +#: editor/script_editor_debugger.cpp #, fuzzy msgid "Skip Breakpoints" msgstr "Sukurti" @@ -10838,10 +10911,6 @@ msgid "Total:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Video Mem" -msgstr "" - -#: editor/script_editor_debugger.cpp msgid "Resource Path" msgstr "" diff --git a/editor/translations/lv.po b/editor/translations/lv.po index b6066df271..9a6454d81b 100644 --- a/editor/translations/lv.po +++ b/editor/translations/lv.po @@ -693,8 +693,9 @@ msgid "Line Number:" msgstr "" #: editor/code_editor.cpp -msgid "Replaced %d occurrence(s)." -msgstr "" +#, fuzzy +msgid "%d replaced." +msgstr "Aizvietot" #: editor/code_editor.cpp editor/editor_help.cpp msgid "%d match." @@ -3915,15 +3916,16 @@ msgid "Saving..." msgstr "" #: editor/import_dock.cpp -msgid "Set as Default for '%s'" -msgstr "" +#, fuzzy +msgid "%d Files" +msgstr "Nederīgs nosaukums." #: editor/import_dock.cpp -msgid "Clear Default for '%s'" +msgid "Set as Default for '%s'" msgstr "" #: editor/import_dock.cpp -msgid " Files" +msgid "Clear Default for '%s'" msgstr "" #: editor/import_dock.cpp @@ -5806,11 +5808,11 @@ msgid "Mesh is empty!" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Trimesh Body" +msgid "Couldn't create a Trimesh collision shape." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Convex Body" +msgid "Create Static Trimesh Body" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -5822,12 +5824,29 @@ msgid "Create Trimesh Static Shape" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Failed creating shapes!" +msgid "Can't create a single convex collision shape for the scene root." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Couldn't create a single convex collision shape." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp #, fuzzy -msgid "Create Convex Shape(s)" +msgid "Create Single Convex Shape" +msgstr "Izveidot Jaunu %s" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Can't create multiple convex collision shapes for the scene root." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Couldn't create any collision shapes." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Create Multiple Convex Shapes" msgstr "Izveidot Jaunu %s" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -5879,19 +5898,57 @@ msgid "Create Trimesh Static Body" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a StaticBody and assigns a polygon-based collision shape to it " +"automatically.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Collision Sibling" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a polygon-based collision shape.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Create Single Convex Collision Siblings" +msgstr "Izveidot" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a single convex collision shape.\n" +"This is the fastest (but least accurate) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp #, fuzzy -msgid "Create Convex Collision Sibling(s)" +msgid "Create Multiple Convex Collision Siblings" msgstr "Izveidot" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a polygon-based collision shape.\n" +"This is a performance middle-ground between the two above options." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Outline Mesh..." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a static outline mesh. The outline mesh will have its normals " +"flipped automatically.\n" +"This can be used instead of the SpatialMaterial Grow property when using " +"that property isn't possible." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "View UV1" msgstr "" @@ -8329,7 +8386,7 @@ msgstr "" msgid "No VCS addons are available." msgstr "" -#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Error" msgstr "" @@ -9438,11 +9495,17 @@ msgid "Export With Debug" msgstr "" #: editor/project_manager.cpp -msgid "The path does not exist." +msgid "The path specified doesn't exist." msgstr "" #: editor/project_manager.cpp -msgid "Invalid '.zip' project file, does not contain a 'project.godot' file." +#, fuzzy +msgid "Error opening package file (it's not in ZIP format)." +msgstr "Kļūme atverot arhīvu failu, nav ZIP formātā." + +#: editor/project_manager.cpp +msgid "" +"Invalid \".zip\" project file; it doesn't contain a \"project.godot\" file." msgstr "" #: editor/project_manager.cpp @@ -9450,11 +9513,11 @@ msgid "Please choose an empty folder." msgstr "" #: editor/project_manager.cpp -msgid "Please choose a 'project.godot' or '.zip' file." +msgid "Please choose a \"project.godot\" or \".zip\" file." msgstr "" #: editor/project_manager.cpp -msgid "Directory already contains a Godot project." +msgid "This directory already contains a Godot project." msgstr "" #: editor/project_manager.cpp @@ -10103,6 +10166,10 @@ msgid "Suffix" msgstr "" #: editor/rename_dialog.cpp +msgid "Use Regular Expressions" +msgstr "" + +#: editor/rename_dialog.cpp msgid "Advanced Options" msgstr "" @@ -10137,7 +10204,7 @@ msgid "" msgstr "" #: editor/rename_dialog.cpp -msgid "Per Level counter" +msgid "Per-level Counter" msgstr "" #: editor/rename_dialog.cpp @@ -10168,10 +10235,6 @@ msgid "" msgstr "" #: editor/rename_dialog.cpp -msgid "Regular Expressions" -msgstr "" - -#: editor/rename_dialog.cpp msgid "Post-Process" msgstr "" @@ -10180,11 +10243,11 @@ msgid "Keep" msgstr "" #: editor/rename_dialog.cpp -msgid "CamelCase to under_scored" +msgid "PascalCase to snake_case" msgstr "" #: editor/rename_dialog.cpp -msgid "under_scored to CamelCase" +msgid "snake_case to PascalCase" msgstr "" #: editor/rename_dialog.cpp @@ -10204,6 +10267,15 @@ msgstr "" msgid "Reset" msgstr "Atiestatīt tālummaiņu" +#: editor/rename_dialog.cpp +msgid "Regular Expression Error" +msgstr "" + +#: editor/rename_dialog.cpp +#, fuzzy +msgid "At character %s" +msgstr "Derīgie simboli:" + #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "" @@ -10655,7 +10727,7 @@ msgid "Invalid inherited parent name or path." msgstr "" #: editor/script_create_dialog.cpp -msgid "Script is valid." +msgid "Script path/name is valid." msgstr "" #: editor/script_create_dialog.cpp @@ -10755,6 +10827,10 @@ msgid "Copy Error" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Video RAM" +msgstr "" + +#: editor/script_editor_debugger.cpp #, fuzzy msgid "Skip Breakpoints" msgstr "Izveidot" @@ -10804,10 +10880,6 @@ msgid "Total:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Video Mem" -msgstr "" - -#: editor/script_editor_debugger.cpp msgid "Resource Path" msgstr "" diff --git a/editor/translations/mi.po b/editor/translations/mi.po index 24d1f213e2..2e6c563aec 100644 --- a/editor/translations/mi.po +++ b/editor/translations/mi.po @@ -659,7 +659,7 @@ msgid "Line Number:" msgstr "" #: editor/code_editor.cpp -msgid "Replaced %d occurrence(s)." +msgid "%d replaced." msgstr "" #: editor/code_editor.cpp editor/editor_help.cpp @@ -3795,15 +3795,15 @@ msgid "Saving..." msgstr "" #: editor/import_dock.cpp -msgid "Set as Default for '%s'" +msgid "%d Files" msgstr "" #: editor/import_dock.cpp -msgid "Clear Default for '%s'" +msgid "Set as Default for '%s'" msgstr "" #: editor/import_dock.cpp -msgid " Files" +msgid "Clear Default for '%s'" msgstr "" #: editor/import_dock.cpp @@ -5632,11 +5632,11 @@ msgid "Mesh is empty!" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Trimesh Body" +msgid "Couldn't create a Trimesh collision shape." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Convex Body" +msgid "Create Static Trimesh Body" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -5648,11 +5648,27 @@ msgid "Create Trimesh Static Shape" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Failed creating shapes!" +msgid "Can't create a single convex collision shape for the scene root." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Couldn't create a single convex collision shape." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Single Convex Shape" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Can't create multiple convex collision shapes for the scene root." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Couldn't create any collision shapes." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Convex Shape(s)" +msgid "Create Multiple Convex Shapes" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -5704,11 +5720,40 @@ msgid "Create Trimesh Static Body" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a StaticBody and assigns a polygon-based collision shape to it " +"automatically.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Collision Sibling" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Convex Collision Sibling(s)" +msgid "" +"Creates a polygon-based collision shape.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Single Convex Collision Siblings" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a single convex collision shape.\n" +"This is the fastest (but least accurate) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Multiple Convex Collision Siblings" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a polygon-based collision shape.\n" +"This is a performance middle-ground between the two above options." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -5716,6 +5761,14 @@ msgid "Create Outline Mesh..." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a static outline mesh. The outline mesh will have its normals " +"flipped automatically.\n" +"This can be used instead of the SpatialMaterial Grow property when using " +"that property isn't possible." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "View UV1" msgstr "" @@ -8080,7 +8133,7 @@ msgstr "" msgid "No VCS addons are available." msgstr "" -#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Error" msgstr "" @@ -9164,11 +9217,16 @@ msgid "Export With Debug" msgstr "" #: editor/project_manager.cpp -msgid "The path does not exist." +msgid "The path specified doesn't exist." +msgstr "" + +#: editor/project_manager.cpp +msgid "Error opening package file (it's not in ZIP format)." msgstr "" #: editor/project_manager.cpp -msgid "Invalid '.zip' project file, does not contain a 'project.godot' file." +msgid "" +"Invalid \".zip\" project file; it doesn't contain a \"project.godot\" file." msgstr "" #: editor/project_manager.cpp @@ -9176,11 +9234,11 @@ msgid "Please choose an empty folder." msgstr "" #: editor/project_manager.cpp -msgid "Please choose a 'project.godot' or '.zip' file." +msgid "Please choose a \"project.godot\" or \".zip\" file." msgstr "" #: editor/project_manager.cpp -msgid "Directory already contains a Godot project." +msgid "This directory already contains a Godot project." msgstr "" #: editor/project_manager.cpp @@ -9826,6 +9884,10 @@ msgid "Suffix" msgstr "" #: editor/rename_dialog.cpp +msgid "Use Regular Expressions" +msgstr "" + +#: editor/rename_dialog.cpp msgid "Advanced Options" msgstr "" @@ -9860,7 +9922,7 @@ msgid "" msgstr "" #: editor/rename_dialog.cpp -msgid "Per Level counter" +msgid "Per-level Counter" msgstr "" #: editor/rename_dialog.cpp @@ -9890,10 +9952,6 @@ msgid "" msgstr "" #: editor/rename_dialog.cpp -msgid "Regular Expressions" -msgstr "" - -#: editor/rename_dialog.cpp msgid "Post-Process" msgstr "" @@ -9902,11 +9960,11 @@ msgid "Keep" msgstr "" #: editor/rename_dialog.cpp -msgid "CamelCase to under_scored" +msgid "PascalCase to snake_case" msgstr "" #: editor/rename_dialog.cpp -msgid "under_scored to CamelCase" +msgid "snake_case to PascalCase" msgstr "" #: editor/rename_dialog.cpp @@ -9925,6 +9983,14 @@ msgstr "" msgid "Reset" msgstr "" +#: editor/rename_dialog.cpp +msgid "Regular Expression Error" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "At character %s" +msgstr "" + #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "" @@ -10364,7 +10430,7 @@ msgid "Invalid inherited parent name or path." msgstr "" #: editor/script_create_dialog.cpp -msgid "Script is valid." +msgid "Script path/name is valid." msgstr "" #: editor/script_create_dialog.cpp @@ -10456,6 +10522,10 @@ msgid "Copy Error" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Video RAM" +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Skip Breakpoints" msgstr "" @@ -10504,10 +10574,6 @@ msgid "Total:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Video Mem" -msgstr "" - -#: editor/script_editor_debugger.cpp msgid "Resource Path" msgstr "" diff --git a/editor/translations/ml.po b/editor/translations/ml.po index dbf8e76d3f..500a1d9156 100644 --- a/editor/translations/ml.po +++ b/editor/translations/ml.po @@ -669,7 +669,7 @@ msgid "Line Number:" msgstr "" #: editor/code_editor.cpp -msgid "Replaced %d occurrence(s)." +msgid "%d replaced." msgstr "" #: editor/code_editor.cpp editor/editor_help.cpp @@ -3807,15 +3807,15 @@ msgid "Saving..." msgstr "" #: editor/import_dock.cpp -msgid "Set as Default for '%s'" +msgid "%d Files" msgstr "" #: editor/import_dock.cpp -msgid "Clear Default for '%s'" +msgid "Set as Default for '%s'" msgstr "" #: editor/import_dock.cpp -msgid " Files" +msgid "Clear Default for '%s'" msgstr "" #: editor/import_dock.cpp @@ -5648,11 +5648,11 @@ msgid "Mesh is empty!" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Trimesh Body" +msgid "Couldn't create a Trimesh collision shape." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Convex Body" +msgid "Create Static Trimesh Body" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -5664,11 +5664,27 @@ msgid "Create Trimesh Static Shape" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Failed creating shapes!" +msgid "Can't create a single convex collision shape for the scene root." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Couldn't create a single convex collision shape." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Single Convex Shape" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Can't create multiple convex collision shapes for the scene root." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Couldn't create any collision shapes." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Convex Shape(s)" +msgid "Create Multiple Convex Shapes" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -5720,11 +5736,40 @@ msgid "Create Trimesh Static Body" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a StaticBody and assigns a polygon-based collision shape to it " +"automatically.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Collision Sibling" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Convex Collision Sibling(s)" +msgid "" +"Creates a polygon-based collision shape.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Single Convex Collision Siblings" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a single convex collision shape.\n" +"This is the fastest (but least accurate) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Multiple Convex Collision Siblings" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a polygon-based collision shape.\n" +"This is a performance middle-ground between the two above options." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -5732,6 +5777,14 @@ msgid "Create Outline Mesh..." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a static outline mesh. The outline mesh will have its normals " +"flipped automatically.\n" +"This can be used instead of the SpatialMaterial Grow property when using " +"that property isn't possible." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "View UV1" msgstr "" @@ -8096,7 +8149,7 @@ msgstr "" msgid "No VCS addons are available." msgstr "" -#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Error" msgstr "" @@ -9180,11 +9233,16 @@ msgid "Export With Debug" msgstr "" #: editor/project_manager.cpp -msgid "The path does not exist." +msgid "The path specified doesn't exist." +msgstr "" + +#: editor/project_manager.cpp +msgid "Error opening package file (it's not in ZIP format)." msgstr "" #: editor/project_manager.cpp -msgid "Invalid '.zip' project file, does not contain a 'project.godot' file." +msgid "" +"Invalid \".zip\" project file; it doesn't contain a \"project.godot\" file." msgstr "" #: editor/project_manager.cpp @@ -9192,11 +9250,11 @@ msgid "Please choose an empty folder." msgstr "" #: editor/project_manager.cpp -msgid "Please choose a 'project.godot' or '.zip' file." +msgid "Please choose a \"project.godot\" or \".zip\" file." msgstr "" #: editor/project_manager.cpp -msgid "Directory already contains a Godot project." +msgid "This directory already contains a Godot project." msgstr "" #: editor/project_manager.cpp @@ -9842,6 +9900,10 @@ msgid "Suffix" msgstr "" #: editor/rename_dialog.cpp +msgid "Use Regular Expressions" +msgstr "" + +#: editor/rename_dialog.cpp msgid "Advanced Options" msgstr "" @@ -9876,7 +9938,7 @@ msgid "" msgstr "" #: editor/rename_dialog.cpp -msgid "Per Level counter" +msgid "Per-level Counter" msgstr "" #: editor/rename_dialog.cpp @@ -9906,10 +9968,6 @@ msgid "" msgstr "" #: editor/rename_dialog.cpp -msgid "Regular Expressions" -msgstr "" - -#: editor/rename_dialog.cpp msgid "Post-Process" msgstr "" @@ -9918,11 +9976,11 @@ msgid "Keep" msgstr "" #: editor/rename_dialog.cpp -msgid "CamelCase to under_scored" +msgid "PascalCase to snake_case" msgstr "" #: editor/rename_dialog.cpp -msgid "under_scored to CamelCase" +msgid "snake_case to PascalCase" msgstr "" #: editor/rename_dialog.cpp @@ -9941,6 +9999,14 @@ msgstr "" msgid "Reset" msgstr "" +#: editor/rename_dialog.cpp +msgid "Regular Expression Error" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "At character %s" +msgstr "" + #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "" @@ -10380,7 +10446,7 @@ msgid "Invalid inherited parent name or path." msgstr "" #: editor/script_create_dialog.cpp -msgid "Script is valid." +msgid "Script path/name is valid." msgstr "" #: editor/script_create_dialog.cpp @@ -10472,6 +10538,10 @@ msgid "Copy Error" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Video RAM" +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Skip Breakpoints" msgstr "" @@ -10520,10 +10590,6 @@ msgid "Total:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Video Mem" -msgstr "" - -#: editor/script_editor_debugger.cpp msgid "Resource Path" msgstr "" diff --git a/editor/translations/mr.po b/editor/translations/mr.po index 43f7620d28..ca97848940 100644 --- a/editor/translations/mr.po +++ b/editor/translations/mr.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2020-01-11 03:05+0000\n" +"PO-Revision-Date: 2020-01-30 03:56+0000\n" "Last-Translator: Prachi Joshi <josprachi@yahoo.com>\n" "Language-Team: Marathi <https://hosted.weblate.org/projects/godot-engine/" "godot/mr/>\n" @@ -14,7 +14,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8-bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 3.10.1\n" +"X-Generator: Weblate 3.11-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -665,7 +665,7 @@ msgid "Line Number:" msgstr "" #: editor/code_editor.cpp -msgid "Replaced %d occurrence(s)." +msgid "%d replaced." msgstr "" #: editor/code_editor.cpp editor/editor_help.cpp @@ -3802,15 +3802,15 @@ msgid "Saving..." msgstr "" #: editor/import_dock.cpp -msgid "Set as Default for '%s'" +msgid "%d Files" msgstr "" #: editor/import_dock.cpp -msgid "Clear Default for '%s'" +msgid "Set as Default for '%s'" msgstr "" #: editor/import_dock.cpp -msgid " Files" +msgid "Clear Default for '%s'" msgstr "" #: editor/import_dock.cpp @@ -4398,95 +4398,95 @@ msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp msgid "1 step" -msgstr "" +msgstr "1 पायरी" #: editor/plugins/animation_player_editor_plugin.cpp msgid "2 steps" -msgstr "" +msgstr "2 पायऱ्या" #: editor/plugins/animation_player_editor_plugin.cpp msgid "3 steps" -msgstr "" +msgstr "3 पायर्या" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Differences Only" -msgstr "" +msgstr "फक्त फरक" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Force White Modulate" -msgstr "" +msgstr "व्हाइट मॉड्युलेटेड सक्ती करा" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Include Gizmos (3D)" -msgstr "" +msgstr "गिझ्मोस (3 डी) समाविष्ट करा" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Pin AnimationPlayer" -msgstr "" +msgstr "अॅनिमेशनप्लेअर पिन करा" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Create New Animation" -msgstr "" +msgstr "नवीन अॅनिमेशन तयार करा" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Animation Name:" -msgstr "" +msgstr "अॅनिमेशन नाव:" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp msgid "Error!" -msgstr "" +msgstr "त्रुटी!" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Blend Times:" -msgstr "" +msgstr "ब्लेंड टाइम्स:" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Next (Auto Queue):" -msgstr "" +msgstr "पुढील (स्वयं रांग):" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Cross-Animation Blend Times" -msgstr "" +msgstr "क्रॉस-अॅनिमेशन ब्लेंड टाइम्स" #: editor/plugins/animation_state_machine_editor.cpp msgid "Move Node" -msgstr "" +msgstr "नोड हलवा" #: editor/plugins/animation_state_machine_editor.cpp msgid "Transition exists!" -msgstr "" +msgstr "संक्रमण विद्यमान आहे!" #: editor/plugins/animation_state_machine_editor.cpp msgid "Add Transition" -msgstr "" +msgstr "संक्रमण जोडा" #: editor/plugins/animation_state_machine_editor.cpp #: modules/visual_script/visual_script_editor.cpp msgid "Add Node" -msgstr "" +msgstr "नोड जोडा" #: editor/plugins/animation_state_machine_editor.cpp msgid "End" -msgstr "" +msgstr "समाप्त" #: editor/plugins/animation_state_machine_editor.cpp msgid "Immediate" -msgstr "" +msgstr "त्वरित" #: editor/plugins/animation_state_machine_editor.cpp msgid "Sync" -msgstr "" +msgstr "समक्रमित करा" #: editor/plugins/animation_state_machine_editor.cpp msgid "At End" -msgstr "" +msgstr "शेवटी" #: editor/plugins/animation_state_machine_editor.cpp msgid "Travel" -msgstr "" +msgstr "प्रवास" #: editor/plugins/animation_state_machine_editor.cpp msgid "Start and end nodes are needed for a sub-transition." @@ -4498,15 +4498,15 @@ msgstr "" #: editor/plugins/animation_state_machine_editor.cpp msgid "Node Removed" -msgstr "" +msgstr "नोड काढला" #: editor/plugins/animation_state_machine_editor.cpp msgid "Transition Removed" -msgstr "" +msgstr "संक्रमण काढले" #: editor/plugins/animation_state_machine_editor.cpp msgid "Set Start Node (Autoplay)" -msgstr "" +msgstr "स्टार्ट नोड सेट करा (ऑटोप्ले)" #: editor/plugins/animation_state_machine_editor.cpp msgid "" @@ -4517,15 +4517,15 @@ msgstr "" #: editor/plugins/animation_state_machine_editor.cpp msgid "Create new nodes." -msgstr "" +msgstr "नवीन नोड तयार करा." #: editor/plugins/animation_state_machine_editor.cpp msgid "Connect nodes." -msgstr "" +msgstr "नोड कनेक्ट करा." #: editor/plugins/animation_state_machine_editor.cpp msgid "Remove selected node or transition." -msgstr "" +msgstr "निवडलेले नोड किंवा संक्रमण काढा." #: editor/plugins/animation_state_machine_editor.cpp msgid "Toggle autoplay this animation on start, restart or seek to zero." @@ -4533,29 +4533,29 @@ msgstr "" #: editor/plugins/animation_state_machine_editor.cpp msgid "Set the end animation. This is useful for sub-transitions." -msgstr "" +msgstr "शेवटचे अॅनिमेशन सेट करा. हे उप-संक्रमणांसाठी उपयुक्त आहे." #: editor/plugins/animation_state_machine_editor.cpp msgid "Transition: " -msgstr "" +msgstr "संक्रमण: " #: editor/plugins/animation_state_machine_editor.cpp msgid "Play Mode:" -msgstr "" +msgstr "प्ले मोड:" #: editor/plugins/animation_tree_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "AnimationTree" -msgstr "" +msgstr "अॅनिमेशन ट्री" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "New name:" -msgstr "" +msgstr "नवीन नाव:" #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/plugins/multimesh_editor_plugin.cpp msgid "Scale:" -msgstr "" +msgstr "स्केल:" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Fade In (s):" @@ -5639,11 +5639,11 @@ msgid "Mesh is empty!" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Trimesh Body" +msgid "Couldn't create a Trimesh collision shape." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Convex Body" +msgid "Create Static Trimesh Body" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -5655,11 +5655,27 @@ msgid "Create Trimesh Static Shape" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Failed creating shapes!" +msgid "Can't create a single convex collision shape for the scene root." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Couldn't create a single convex collision shape." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Single Convex Shape" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Can't create multiple convex collision shapes for the scene root." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Convex Shape(s)" +msgid "Couldn't create any collision shapes." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Multiple Convex Shapes" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -5711,11 +5727,40 @@ msgid "Create Trimesh Static Body" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a StaticBody and assigns a polygon-based collision shape to it " +"automatically.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Collision Sibling" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Convex Collision Sibling(s)" +msgid "" +"Creates a polygon-based collision shape.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Single Convex Collision Siblings" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a single convex collision shape.\n" +"This is the fastest (but least accurate) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Multiple Convex Collision Siblings" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a polygon-based collision shape.\n" +"This is a performance middle-ground between the two above options." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -5723,6 +5768,14 @@ msgid "Create Outline Mesh..." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a static outline mesh. The outline mesh will have its normals " +"flipped automatically.\n" +"This can be used instead of the SpatialMaterial Grow property when using " +"that property isn't possible." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "View UV1" msgstr "" @@ -8087,7 +8140,7 @@ msgstr "" msgid "No VCS addons are available." msgstr "" -#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Error" msgstr "" @@ -9171,11 +9224,16 @@ msgid "Export With Debug" msgstr "" #: editor/project_manager.cpp -msgid "The path does not exist." +msgid "The path specified doesn't exist." +msgstr "" + +#: editor/project_manager.cpp +msgid "Error opening package file (it's not in ZIP format)." msgstr "" #: editor/project_manager.cpp -msgid "Invalid '.zip' project file, does not contain a 'project.godot' file." +msgid "" +"Invalid \".zip\" project file; it doesn't contain a \"project.godot\" file." msgstr "" #: editor/project_manager.cpp @@ -9183,11 +9241,11 @@ msgid "Please choose an empty folder." msgstr "" #: editor/project_manager.cpp -msgid "Please choose a 'project.godot' or '.zip' file." +msgid "Please choose a \"project.godot\" or \".zip\" file." msgstr "" #: editor/project_manager.cpp -msgid "Directory already contains a Godot project." +msgid "This directory already contains a Godot project." msgstr "" #: editor/project_manager.cpp @@ -9833,6 +9891,10 @@ msgid "Suffix" msgstr "" #: editor/rename_dialog.cpp +msgid "Use Regular Expressions" +msgstr "" + +#: editor/rename_dialog.cpp msgid "Advanced Options" msgstr "" @@ -9867,7 +9929,7 @@ msgid "" msgstr "" #: editor/rename_dialog.cpp -msgid "Per Level counter" +msgid "Per-level Counter" msgstr "" #: editor/rename_dialog.cpp @@ -9897,10 +9959,6 @@ msgid "" msgstr "" #: editor/rename_dialog.cpp -msgid "Regular Expressions" -msgstr "" - -#: editor/rename_dialog.cpp msgid "Post-Process" msgstr "" @@ -9909,11 +9967,11 @@ msgid "Keep" msgstr "" #: editor/rename_dialog.cpp -msgid "CamelCase to under_scored" +msgid "PascalCase to snake_case" msgstr "" #: editor/rename_dialog.cpp -msgid "under_scored to CamelCase" +msgid "snake_case to PascalCase" msgstr "" #: editor/rename_dialog.cpp @@ -9932,6 +9990,14 @@ msgstr "" msgid "Reset" msgstr "" +#: editor/rename_dialog.cpp +msgid "Regular Expression Error" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "At character %s" +msgstr "" + #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "" @@ -10371,7 +10437,7 @@ msgid "Invalid inherited parent name or path." msgstr "" #: editor/script_create_dialog.cpp -msgid "Script is valid." +msgid "Script path/name is valid." msgstr "" #: editor/script_create_dialog.cpp @@ -10463,6 +10529,10 @@ msgid "Copy Error" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Video RAM" +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Skip Breakpoints" msgstr "" @@ -10511,10 +10581,6 @@ msgid "Total:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Video Mem" -msgstr "" - -#: editor/script_editor_debugger.cpp msgid "Resource Path" msgstr "" diff --git a/editor/translations/ms.po b/editor/translations/ms.po index 0207d83de5..d7e9bd443a 100644 --- a/editor/translations/ms.po +++ b/editor/translations/ms.po @@ -689,7 +689,7 @@ msgid "Line Number:" msgstr "" #: editor/code_editor.cpp -msgid "Replaced %d occurrence(s)." +msgid "%d replaced." msgstr "" #: editor/code_editor.cpp editor/editor_help.cpp @@ -3830,15 +3830,15 @@ msgid "Saving..." msgstr "" #: editor/import_dock.cpp -msgid "Set as Default for '%s'" +msgid "%d Files" msgstr "" #: editor/import_dock.cpp -msgid "Clear Default for '%s'" +msgid "Set as Default for '%s'" msgstr "" #: editor/import_dock.cpp -msgid " Files" +msgid "Clear Default for '%s'" msgstr "" #: editor/import_dock.cpp @@ -5686,11 +5686,11 @@ msgid "Mesh is empty!" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Trimesh Body" +msgid "Couldn't create a Trimesh collision shape." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Convex Body" +msgid "Create Static Trimesh Body" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -5702,11 +5702,27 @@ msgid "Create Trimesh Static Shape" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Failed creating shapes!" +msgid "Can't create a single convex collision shape for the scene root." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Couldn't create a single convex collision shape." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Single Convex Shape" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Can't create multiple convex collision shapes for the scene root." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Couldn't create any collision shapes." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Convex Shape(s)" +msgid "Create Multiple Convex Shapes" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -5758,11 +5774,40 @@ msgid "Create Trimesh Static Body" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a StaticBody and assigns a polygon-based collision shape to it " +"automatically.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Collision Sibling" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Convex Collision Sibling(s)" +msgid "" +"Creates a polygon-based collision shape.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Single Convex Collision Siblings" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a single convex collision shape.\n" +"This is the fastest (but least accurate) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Multiple Convex Collision Siblings" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a polygon-based collision shape.\n" +"This is a performance middle-ground between the two above options." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -5770,6 +5815,14 @@ msgid "Create Outline Mesh..." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a static outline mesh. The outline mesh will have its normals " +"flipped automatically.\n" +"This can be used instead of the SpatialMaterial Grow property when using " +"that property isn't possible." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "View UV1" msgstr "" @@ -8144,7 +8197,7 @@ msgstr "" msgid "No VCS addons are available." msgstr "" -#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Error" msgstr "" @@ -9237,11 +9290,16 @@ msgid "Export With Debug" msgstr "" #: editor/project_manager.cpp -msgid "The path does not exist." +msgid "The path specified doesn't exist." +msgstr "" + +#: editor/project_manager.cpp +msgid "Error opening package file (it's not in ZIP format)." msgstr "" #: editor/project_manager.cpp -msgid "Invalid '.zip' project file, does not contain a 'project.godot' file." +msgid "" +"Invalid \".zip\" project file; it doesn't contain a \"project.godot\" file." msgstr "" #: editor/project_manager.cpp @@ -9249,11 +9307,11 @@ msgid "Please choose an empty folder." msgstr "" #: editor/project_manager.cpp -msgid "Please choose a 'project.godot' or '.zip' file." +msgid "Please choose a \"project.godot\" or \".zip\" file." msgstr "" #: editor/project_manager.cpp -msgid "Directory already contains a Godot project." +msgid "This directory already contains a Godot project." msgstr "" #: editor/project_manager.cpp @@ -9900,6 +9958,10 @@ msgid "Suffix" msgstr "" #: editor/rename_dialog.cpp +msgid "Use Regular Expressions" +msgstr "" + +#: editor/rename_dialog.cpp msgid "Advanced Options" msgstr "" @@ -9934,7 +9996,7 @@ msgid "" msgstr "" #: editor/rename_dialog.cpp -msgid "Per Level counter" +msgid "Per-level Counter" msgstr "" #: editor/rename_dialog.cpp @@ -9964,10 +10026,6 @@ msgid "" msgstr "" #: editor/rename_dialog.cpp -msgid "Regular Expressions" -msgstr "" - -#: editor/rename_dialog.cpp msgid "Post-Process" msgstr "" @@ -9976,11 +10034,11 @@ msgid "Keep" msgstr "" #: editor/rename_dialog.cpp -msgid "CamelCase to under_scored" +msgid "PascalCase to snake_case" msgstr "" #: editor/rename_dialog.cpp -msgid "under_scored to CamelCase" +msgid "snake_case to PascalCase" msgstr "" #: editor/rename_dialog.cpp @@ -9999,6 +10057,14 @@ msgstr "" msgid "Reset" msgstr "" +#: editor/rename_dialog.cpp +msgid "Regular Expression Error" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "At character %s" +msgstr "" + #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "" @@ -10441,7 +10507,7 @@ msgid "Invalid inherited parent name or path." msgstr "" #: editor/script_create_dialog.cpp -msgid "Script is valid." +msgid "Script path/name is valid." msgstr "" #: editor/script_create_dialog.cpp @@ -10533,6 +10599,10 @@ msgid "Copy Error" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Video RAM" +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Skip Breakpoints" msgstr "" @@ -10581,10 +10651,6 @@ msgid "Total:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Video Mem" -msgstr "" - -#: editor/script_editor_debugger.cpp msgid "Resource Path" msgstr "" diff --git a/editor/translations/nb.po b/editor/translations/nb.po index dcbe8e6950..9060ee7249 100644 --- a/editor/translations/nb.po +++ b/editor/translations/nb.po @@ -727,8 +727,9 @@ msgid "Line Number:" msgstr "Linjenummer:" #: editor/code_editor.cpp -msgid "Replaced %d occurrence(s)." -msgstr "Erstattet %d forekomst(er)." +#, fuzzy +msgid "%d replaced." +msgstr "Erstatt..." #: editor/code_editor.cpp editor/editor_help.cpp #, fuzzy @@ -4195,6 +4196,10 @@ msgid "Saving..." msgstr "Lagrer..." #: editor/import_dock.cpp +msgid "%d Files" +msgstr "%d Filer" + +#: editor/import_dock.cpp msgid "Set as Default for '%s'" msgstr "Sett som Standard for '%s'" @@ -4203,10 +4208,6 @@ msgid "Clear Default for '%s'" msgstr "Fjern Standard for '%s'" #: editor/import_dock.cpp -msgid " Files" -msgstr " Filer" - -#: editor/import_dock.cpp msgid "Import As:" msgstr "Importer Som:" @@ -6221,11 +6222,12 @@ msgid "Mesh is empty!" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Trimesh Body" -msgstr "" +#, fuzzy +msgid "Couldn't create a Trimesh collision shape." +msgstr "Kunne ikke opprette mappe." #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Convex Body" +msgid "Create Static Trimesh Body" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -6237,12 +6239,30 @@ msgid "Create Trimesh Static Shape" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Failed creating shapes!" +msgid "Can't create a single convex collision shape for the scene root." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Couldn't create a single convex collision shape." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Create Single Convex Shape" +msgstr "Lag ny %s" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Can't create multiple convex collision shapes for the scene root." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp #, fuzzy -msgid "Create Convex Shape(s)" +msgid "Couldn't create any collision shapes." +msgstr "Kunne ikke opprette mappe." + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Create Multiple Convex Shapes" msgstr "Lag ny %s" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -6294,19 +6314,57 @@ msgid "Create Trimesh Static Body" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a StaticBody and assigns a polygon-based collision shape to it " +"automatically.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Collision Sibling" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a polygon-based collision shape.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Create Single Convex Collision Siblings" +msgstr "Lag Poly" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a single convex collision shape.\n" +"This is the fastest (but least accurate) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp #, fuzzy -msgid "Create Convex Collision Sibling(s)" +msgid "Create Multiple Convex Collision Siblings" msgstr "Lag Poly" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a polygon-based collision shape.\n" +"This is a performance middle-ground between the two above options." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Outline Mesh..." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a static outline mesh. The outline mesh will have its normals " +"flipped automatically.\n" +"This can be used instead of the SpatialMaterial Grow property when using " +"that property isn't possible." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp #, fuzzy msgid "View UV1" msgstr "Vis" @@ -8859,7 +8917,7 @@ msgstr "TileSet..." msgid "No VCS addons are available." msgstr "" -#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Error" msgstr "" @@ -9997,11 +10055,18 @@ msgid "Export With Debug" msgstr "" #: editor/project_manager.cpp -msgid "The path does not exist." -msgstr "" +#, fuzzy +msgid "The path specified doesn't exist." +msgstr "Fil eksisterer ikke." + +#: editor/project_manager.cpp +#, fuzzy +msgid "Error opening package file (it's not in ZIP format)." +msgstr "Feil ved åpning av pakkefil, ikke i zip format." #: editor/project_manager.cpp -msgid "Invalid '.zip' project file, does not contain a 'project.godot' file." +msgid "" +"Invalid \".zip\" project file; it doesn't contain a \"project.godot\" file." msgstr "" #: editor/project_manager.cpp @@ -10009,11 +10074,11 @@ msgid "Please choose an empty folder." msgstr "" #: editor/project_manager.cpp -msgid "Please choose a 'project.godot' or '.zip' file." +msgid "Please choose a \"project.godot\" or \".zip\" file." msgstr "" #: editor/project_manager.cpp -msgid "Directory already contains a Godot project." +msgid "This directory already contains a Godot project." msgstr "" #: editor/project_manager.cpp @@ -10697,6 +10762,11 @@ msgstr "" #: editor/rename_dialog.cpp #, fuzzy +msgid "Use Regular Expressions" +msgstr "Gjeldende Versjon:" + +#: editor/rename_dialog.cpp +#, fuzzy msgid "Advanced Options" msgstr "Snapping innstillinger" @@ -10735,7 +10805,7 @@ msgid "" msgstr "" #: editor/rename_dialog.cpp -msgid "Per Level counter" +msgid "Per-level Counter" msgstr "" #: editor/rename_dialog.cpp @@ -10766,10 +10836,6 @@ msgid "" msgstr "" #: editor/rename_dialog.cpp -msgid "Regular Expressions" -msgstr "" - -#: editor/rename_dialog.cpp msgid "Post-Process" msgstr "" @@ -10778,11 +10844,11 @@ msgid "Keep" msgstr "" #: editor/rename_dialog.cpp -msgid "CamelCase to under_scored" +msgid "PascalCase to snake_case" msgstr "" #: editor/rename_dialog.cpp -msgid "under_scored to CamelCase" +msgid "snake_case to PascalCase" msgstr "" #: editor/rename_dialog.cpp @@ -10804,6 +10870,15 @@ msgstr "Store versaler" msgid "Reset" msgstr "Nullstill Zoom" +#: editor/rename_dialog.cpp +msgid "Regular Expression Error" +msgstr "" + +#: editor/rename_dialog.cpp +#, fuzzy +msgid "At character %s" +msgstr "Gyldige karakterer:" + #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "" @@ -11278,7 +11353,7 @@ msgstr "Ugyldig indeks egenskap navn '%s' i node %s." #: editor/script_create_dialog.cpp #, fuzzy -msgid "Script is valid." +msgid "Script path/name is valid." msgstr "Animasjonstre er gyldig." #: editor/script_create_dialog.cpp @@ -11387,6 +11462,10 @@ msgid "Copy Error" msgstr "Last Errors" #: editor/script_editor_debugger.cpp +msgid "Video RAM" +msgstr "" + +#: editor/script_editor_debugger.cpp #, fuzzy msgid "Skip Breakpoints" msgstr "Slett punkter" @@ -11437,10 +11516,6 @@ msgid "Total:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Video Mem" -msgstr "" - -#: editor/script_editor_debugger.cpp msgid "Resource Path" msgstr "" @@ -13034,6 +13109,9 @@ msgstr "" msgid "Constants cannot be modified." msgstr "Konstanter kan ikke endres." +#~ msgid "Replaced %d occurrence(s)." +#~ msgstr "Erstattet %d forekomst(er)." + #~ msgid "" #~ "There are currently no tutorials for this class, you can [color=$color]" #~ "[url=$url]contribute one[/url][/color] or [color=$color][url=" diff --git a/editor/translations/nl.po b/editor/translations/nl.po index 39bca63def..cc5c2c978f 100644 --- a/editor/translations/nl.po +++ b/editor/translations/nl.po @@ -721,8 +721,9 @@ msgid "Line Number:" msgstr "Regelnummer:" #: editor/code_editor.cpp -msgid "Replaced %d occurrence(s)." -msgstr "%d voorgekomen waarde(s) vervangen." +#, fuzzy +msgid "%d replaced." +msgstr "Vervang..." #: editor/code_editor.cpp editor/editor_help.cpp msgid "%d match." @@ -3996,6 +3997,10 @@ msgid "Saving..." msgstr "Opslaan..." #: editor/import_dock.cpp +msgid "%d Files" +msgstr "%d Bestanden" + +#: editor/import_dock.cpp msgid "Set as Default for '%s'" msgstr "Stel in als Standaard voor '%s'" @@ -4004,10 +4009,6 @@ msgid "Clear Default for '%s'" msgstr "Wis Standaard voor '%s'" #: editor/import_dock.cpp -msgid " Files" -msgstr " Bestanden" - -#: editor/import_dock.cpp msgid "Import As:" msgstr "Importeer als:" @@ -5884,12 +5885,13 @@ msgid "Mesh is empty!" msgstr "Mesh is leeg!" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Trimesh Body" -msgstr "Creëer een statisch tri-mesh lichaam" +#, fuzzy +msgid "Couldn't create a Trimesh collision shape." +msgstr "Creëer Trimesh Botsing Broer" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Convex Body" -msgstr "Creëer een statisch convex lichaam" +msgid "Create Static Trimesh Body" +msgstr "Creëer een statisch tri-mesh lichaam" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "This doesn't work on scene root!" @@ -5900,11 +5902,30 @@ msgid "Create Trimesh Static Shape" msgstr "Creëer Trimesh Static Shape" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Failed creating shapes!" -msgstr "Shapes maken mislukt!" +msgid "Can't create a single convex collision shape for the scene root." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Couldn't create a single convex collision shape." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Create Single Convex Shape" +msgstr "Creëer Convex Shape(s)" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Can't create multiple convex collision shapes for the scene root." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Couldn't create any collision shapes." +msgstr "Kon map niet aanmaken." #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Convex Shape(s)" +#, fuzzy +msgid "Create Multiple Convex Shapes" msgstr "Creëer Convex Shape(s)" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -5956,18 +5977,57 @@ msgid "Create Trimesh Static Body" msgstr "Creëer Trimesh Statisch Lichaam" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a StaticBody and assigns a polygon-based collision shape to it " +"automatically.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Collision Sibling" msgstr "Creëer Trimesh Botsing Broer" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Convex Collision Sibling(s)" +msgid "" +"Creates a polygon-based collision shape.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Create Single Convex Collision Siblings" msgstr "Creëer Convex Collision Sibling(s)" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a single convex collision shape.\n" +"This is the fastest (but least accurate) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Create Multiple Convex Collision Siblings" +msgstr "Creëer Convex Collision Sibling(s)" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a polygon-based collision shape.\n" +"This is a performance middle-ground between the two above options." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Outline Mesh..." msgstr "Creëer Outline Mesh..." #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a static outline mesh. The outline mesh will have its normals " +"flipped automatically.\n" +"This can be used instead of the SpatialMaterial Grow property when using " +"that property isn't possible." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "View UV1" msgstr "Geef UV1 Weer" @@ -8380,7 +8440,7 @@ msgstr "TileSet" msgid "No VCS addons are available." msgstr "Geen VCS addons beschikbaar." -#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Error" msgstr "Fout" @@ -9559,11 +9619,19 @@ msgid "Export With Debug" msgstr "Exporteer Met Debug" #: editor/project_manager.cpp -msgid "The path does not exist." +#, fuzzy +msgid "The path specified doesn't exist." msgstr "Dit pad bestaat niet." #: editor/project_manager.cpp -msgid "Invalid '.zip' project file, does not contain a 'project.godot' file." +#, fuzzy +msgid "Error opening package file (it's not in ZIP format)." +msgstr "Fout bij het openen van het pakketbestand, geen zip-formaat." + +#: editor/project_manager.cpp +#, fuzzy +msgid "" +"Invalid \".zip\" project file; it doesn't contain a \"project.godot\" file." msgstr "Ongeldig '.zip' projectbestand, bevat geen 'project.godot' bestand." #: editor/project_manager.cpp @@ -9571,11 +9639,13 @@ msgid "Please choose an empty folder." msgstr "Kies alstublieft een lege map." #: editor/project_manager.cpp -msgid "Please choose a 'project.godot' or '.zip' file." +#, fuzzy +msgid "Please choose a \"project.godot\" or \".zip\" file." msgstr "Kies alstublieft een 'project.godot' of '.zip' bestand." #: editor/project_manager.cpp -msgid "Directory already contains a Godot project." +#, fuzzy +msgid "This directory already contains a Godot project." msgstr "Map bevat al een Godot project." #: editor/project_manager.cpp @@ -10274,6 +10344,11 @@ msgid "Suffix" msgstr "Achtervoegsel" #: editor/rename_dialog.cpp +#, fuzzy +msgid "Use Regular Expressions" +msgstr "Reguliere Expressie" + +#: editor/rename_dialog.cpp msgid "Advanced Options" msgstr "Geavanceerde opties" @@ -10310,7 +10385,8 @@ msgstr "" "Vergelijk tellersopties." #: editor/rename_dialog.cpp -msgid "Per Level counter" +#, fuzzy +msgid "Per-level Counter" msgstr "Per Niveau teller" #: editor/rename_dialog.cpp @@ -10344,10 +10420,6 @@ msgstr "" "Missende cijfers worden met voorloopnullen opgevuld." #: editor/rename_dialog.cpp -msgid "Regular Expressions" -msgstr "Reguliere Expressie" - -#: editor/rename_dialog.cpp msgid "Post-Process" msgstr "Post-Process" @@ -10356,11 +10428,13 @@ msgid "Keep" msgstr "Houd" #: editor/rename_dialog.cpp -msgid "CamelCase to under_scored" +#, fuzzy +msgid "PascalCase to snake_case" msgstr "CamelCase naar under_scored" #: editor/rename_dialog.cpp -msgid "under_scored to CamelCase" +#, fuzzy +msgid "snake_case to PascalCase" msgstr "under_scored naar CamelCase" #: editor/rename_dialog.cpp @@ -10379,6 +10453,16 @@ msgstr "Naar hoofdletters" msgid "Reset" msgstr "Resetten" +#: editor/rename_dialog.cpp +#, fuzzy +msgid "Regular Expression Error" +msgstr "Reguliere Expressie" + +#: editor/rename_dialog.cpp +#, fuzzy +msgid "At character %s" +msgstr "Geldige karakters:" + #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "Knoopouder wijzigen" @@ -10843,7 +10927,8 @@ msgid "Invalid inherited parent name or path." msgstr "Ongeldige overgenomen oudernaam of pad." #: editor/script_create_dialog.cpp -msgid "Script is valid." +#, fuzzy +msgid "Script path/name is valid." msgstr "Script is geldig." #: editor/script_create_dialog.cpp @@ -10935,6 +11020,11 @@ msgid "Copy Error" msgstr "Kopieer Fout" #: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Video RAM" +msgstr "Videogeheugen" + +#: editor/script_editor_debugger.cpp msgid "Skip Breakpoints" msgstr "Breakpoint overslaan" @@ -10983,10 +11073,6 @@ msgid "Total:" msgstr "Totaal:" #: editor/script_editor_debugger.cpp -msgid "Video Mem" -msgstr "Videogeheugen" - -#: editor/script_editor_debugger.cpp msgid "Resource Path" msgstr "Bronpad" @@ -12673,6 +12759,15 @@ msgstr "Varyings kunnen alleen worden toegewezenin vertex functies." msgid "Constants cannot be modified." msgstr "Constanten kunnen niet worden aangepast." +#~ msgid "Replaced %d occurrence(s)." +#~ msgstr "%d voorgekomen waarde(s) vervangen." + +#~ msgid "Create Static Convex Body" +#~ msgstr "Creëer een statisch convex lichaam" + +#~ msgid "Failed creating shapes!" +#~ msgstr "Shapes maken mislukt!" + #~ msgid "" #~ "There are currently no tutorials for this class, you can [color=$color]" #~ "[url=$url]contribute one[/url][/color] or [color=$color][url=" diff --git a/editor/translations/or.po b/editor/translations/or.po index 5cddf8dee7..1e2acc1c86 100644 --- a/editor/translations/or.po +++ b/editor/translations/or.po @@ -665,7 +665,7 @@ msgid "Line Number:" msgstr "" #: editor/code_editor.cpp -msgid "Replaced %d occurrence(s)." +msgid "%d replaced." msgstr "" #: editor/code_editor.cpp editor/editor_help.cpp @@ -3801,15 +3801,15 @@ msgid "Saving..." msgstr "" #: editor/import_dock.cpp -msgid "Set as Default for '%s'" +msgid "%d Files" msgstr "" #: editor/import_dock.cpp -msgid "Clear Default for '%s'" +msgid "Set as Default for '%s'" msgstr "" #: editor/import_dock.cpp -msgid " Files" +msgid "Clear Default for '%s'" msgstr "" #: editor/import_dock.cpp @@ -5638,11 +5638,11 @@ msgid "Mesh is empty!" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Trimesh Body" +msgid "Couldn't create a Trimesh collision shape." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Convex Body" +msgid "Create Static Trimesh Body" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -5654,11 +5654,27 @@ msgid "Create Trimesh Static Shape" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Failed creating shapes!" +msgid "Can't create a single convex collision shape for the scene root." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Couldn't create a single convex collision shape." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Single Convex Shape" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Can't create multiple convex collision shapes for the scene root." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Couldn't create any collision shapes." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Convex Shape(s)" +msgid "Create Multiple Convex Shapes" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -5710,11 +5726,40 @@ msgid "Create Trimesh Static Body" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a StaticBody and assigns a polygon-based collision shape to it " +"automatically.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Collision Sibling" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Convex Collision Sibling(s)" +msgid "" +"Creates a polygon-based collision shape.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Single Convex Collision Siblings" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a single convex collision shape.\n" +"This is the fastest (but least accurate) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Multiple Convex Collision Siblings" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a polygon-based collision shape.\n" +"This is a performance middle-ground between the two above options." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -5722,6 +5767,14 @@ msgid "Create Outline Mesh..." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a static outline mesh. The outline mesh will have its normals " +"flipped automatically.\n" +"This can be used instead of the SpatialMaterial Grow property when using " +"that property isn't possible." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "View UV1" msgstr "" @@ -8086,7 +8139,7 @@ msgstr "" msgid "No VCS addons are available." msgstr "" -#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Error" msgstr "" @@ -9170,11 +9223,16 @@ msgid "Export With Debug" msgstr "" #: editor/project_manager.cpp -msgid "The path does not exist." +msgid "The path specified doesn't exist." +msgstr "" + +#: editor/project_manager.cpp +msgid "Error opening package file (it's not in ZIP format)." msgstr "" #: editor/project_manager.cpp -msgid "Invalid '.zip' project file, does not contain a 'project.godot' file." +msgid "" +"Invalid \".zip\" project file; it doesn't contain a \"project.godot\" file." msgstr "" #: editor/project_manager.cpp @@ -9182,11 +9240,11 @@ msgid "Please choose an empty folder." msgstr "" #: editor/project_manager.cpp -msgid "Please choose a 'project.godot' or '.zip' file." +msgid "Please choose a \"project.godot\" or \".zip\" file." msgstr "" #: editor/project_manager.cpp -msgid "Directory already contains a Godot project." +msgid "This directory already contains a Godot project." msgstr "" #: editor/project_manager.cpp @@ -9832,6 +9890,10 @@ msgid "Suffix" msgstr "" #: editor/rename_dialog.cpp +msgid "Use Regular Expressions" +msgstr "" + +#: editor/rename_dialog.cpp msgid "Advanced Options" msgstr "" @@ -9866,7 +9928,7 @@ msgid "" msgstr "" #: editor/rename_dialog.cpp -msgid "Per Level counter" +msgid "Per-level Counter" msgstr "" #: editor/rename_dialog.cpp @@ -9896,10 +9958,6 @@ msgid "" msgstr "" #: editor/rename_dialog.cpp -msgid "Regular Expressions" -msgstr "" - -#: editor/rename_dialog.cpp msgid "Post-Process" msgstr "" @@ -9908,11 +9966,11 @@ msgid "Keep" msgstr "" #: editor/rename_dialog.cpp -msgid "CamelCase to under_scored" +msgid "PascalCase to snake_case" msgstr "" #: editor/rename_dialog.cpp -msgid "under_scored to CamelCase" +msgid "snake_case to PascalCase" msgstr "" #: editor/rename_dialog.cpp @@ -9931,6 +9989,14 @@ msgstr "" msgid "Reset" msgstr "" +#: editor/rename_dialog.cpp +msgid "Regular Expression Error" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "At character %s" +msgstr "" + #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "" @@ -10370,7 +10436,7 @@ msgid "Invalid inherited parent name or path." msgstr "" #: editor/script_create_dialog.cpp -msgid "Script is valid." +msgid "Script path/name is valid." msgstr "" #: editor/script_create_dialog.cpp @@ -10462,6 +10528,10 @@ msgid "Copy Error" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Video RAM" +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Skip Breakpoints" msgstr "" @@ -10510,10 +10580,6 @@ msgid "Total:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Video Mem" -msgstr "" - -#: editor/script_editor_debugger.cpp msgid "Resource Path" msgstr "" diff --git a/editor/translations/pl.po b/editor/translations/pl.po index e5e5e91d65..48c51e8ea1 100644 --- a/editor/translations/pl.po +++ b/editor/translations/pl.po @@ -42,7 +42,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2020-01-27 07:10+0000\n" +"PO-Revision-Date: 2020-02-18 15:09+0000\n" "Last-Translator: Tomek <kobewi4e@gmail.com>\n" "Language-Team: Polish <https://hosted.weblate.org/projects/godot-engine/" "godot/pl/>\n" @@ -52,7 +52,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " "|| n%100>=20) ? 1 : 2;\n" -"X-Generator: Weblate 3.11-dev\n" +"X-Generator: Weblate 3.11\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -721,8 +721,8 @@ msgid "Line Number:" msgstr "Numer linii:" #: editor/code_editor.cpp -msgid "Replaced %d occurrence(s)." -msgstr "Zastąpiono %d wystąpień." +msgid "%d replaced." +msgstr "%d zamieniono." #: editor/code_editor.cpp editor/editor_help.cpp msgid "%d match." @@ -3980,6 +3980,11 @@ msgid "Saving..." msgstr "Zapisywanie..." #: editor/import_dock.cpp +#, fuzzy +msgid "%d Files" +msgstr " Pliki" + +#: editor/import_dock.cpp msgid "Set as Default for '%s'" msgstr "Ustaw jako domyślne dla \"%s\"" @@ -3988,10 +3993,6 @@ msgid "Clear Default for '%s'" msgstr "Usuń domyślne dla \"%s\"" #: editor/import_dock.cpp -msgid " Files" -msgstr " Pliki" - -#: editor/import_dock.cpp msgid "Import As:" msgstr "Importuj jako:" @@ -5868,12 +5869,12 @@ msgid "Mesh is empty!" msgstr "Siatka jest pusta!" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Trimesh Body" -msgstr "Stwórz Static Trimesh Body" +msgid "Couldn't create a Trimesh collision shape." +msgstr "Nie udało się utworzyć kształtu trójsiatki." #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Convex Body" -msgstr "Stwórz statycznych ciało wypukłe" +msgid "Create Static Trimesh Body" +msgstr "Stwórz Static Trimesh Body" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "This doesn't work on scene root!" @@ -5884,12 +5885,31 @@ msgid "Create Trimesh Static Shape" msgstr "Utwórz statyczny kształt trójsiatki" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Failed creating shapes!" -msgstr "Tworzenie kształtów nieudane!" +msgid "Can't create a single convex collision shape for the scene root." +msgstr "" +"Nie można utworzyć pojedynczego wypukłego kształtu kolizji dla korzenia " +"sceny." + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Couldn't create a single convex collision shape." +msgstr "Nie udało się utworzyć pojedynczego wypukłego kształtu kolizji." + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Single Convex Shape" +msgstr "Utwórz pojedynczy wypukły kształt" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Can't create multiple convex collision shapes for the scene root." +msgstr "" +"Nie można utworzyć wielu wypukłych kształtów kolizji dla korzenia sceny." + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Couldn't create any collision shapes." +msgstr "Nie udało się utworzyć żadnego kształtu kolizji." #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Convex Shape(s)" -msgstr "Utwórz kształt wypukły" +msgid "Create Multiple Convex Shapes" +msgstr "Utwórz wiele wypukłych kształtów" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Navigation Mesh" @@ -5940,18 +5960,57 @@ msgid "Create Trimesh Static Body" msgstr "Utwórz statyczne ciało trójsiatki" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a StaticBody and assigns a polygon-based collision shape to it " +"automatically.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Collision Sibling" msgstr "Utwórz sąsiadującą trójsiatkę kolizji" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Convex Collision Sibling(s)" +msgid "" +"Creates a polygon-based collision shape.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Create Single Convex Collision Siblings" +msgstr "Utwórz wypukłego sąsiada kolizji" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a single convex collision shape.\n" +"This is the fastest (but least accurate) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Create Multiple Convex Collision Siblings" msgstr "Utwórz wypukłego sąsiada kolizji" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a polygon-based collision shape.\n" +"This is a performance middle-ground between the two above options." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Outline Mesh..." msgstr "Utwórz siatkę zarysu..." #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a static outline mesh. The outline mesh will have its normals " +"flipped automatically.\n" +"This can be used instead of the SpatialMaterial Grow property when using " +"that property isn't possible." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "View UV1" msgstr "Widok UV1" @@ -8360,7 +8419,7 @@ msgstr "TileSet" msgid "No VCS addons are available." msgstr "Brak dostępnych dodatków VCS." -#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Error" msgstr "Błąd" @@ -9526,11 +9585,19 @@ msgid "Export With Debug" msgstr "Eksport z debugowaniem" #: editor/project_manager.cpp -msgid "The path does not exist." +#, fuzzy +msgid "The path specified doesn't exist." msgstr "Ścieżka nie istnieje." #: editor/project_manager.cpp -msgid "Invalid '.zip' project file, does not contain a 'project.godot' file." +#, fuzzy +msgid "Error opening package file (it's not in ZIP format)." +msgstr "Błąd otwierania pliku pakietu, nie jest w formacie ZIP." + +#: editor/project_manager.cpp +#, fuzzy +msgid "" +"Invalid \".zip\" project file; it doesn't contain a \"project.godot\" file." msgstr "" "Niewłaściwy projekt pliku \".zip\", nie zawiera pliku \"project.godot\"." @@ -9539,11 +9606,13 @@ msgid "Please choose an empty folder." msgstr "Proszę wybrać pusty folder." #: editor/project_manager.cpp -msgid "Please choose a 'project.godot' or '.zip' file." +#, fuzzy +msgid "Please choose a \"project.godot\" or \".zip\" file." msgstr "Proszę wybrać plik \"project.godot\" lub \".zip\"." #: editor/project_manager.cpp -msgid "Directory already contains a Godot project." +#, fuzzy +msgid "This directory already contains a Godot project." msgstr "Folder już zawiera projekt Godota." #: editor/project_manager.cpp @@ -10242,6 +10311,11 @@ msgid "Suffix" msgstr "Przyrostek" #: editor/rename_dialog.cpp +#, fuzzy +msgid "Use Regular Expressions" +msgstr "Wyrażenia regularne" + +#: editor/rename_dialog.cpp msgid "Advanced Options" msgstr "Opcje zaawansowane" @@ -10278,7 +10352,8 @@ msgstr "" "Porównaj opcje licznika." #: editor/rename_dialog.cpp -msgid "Per Level counter" +#, fuzzy +msgid "Per-level Counter" msgstr "Poziomowy licznik" #: editor/rename_dialog.cpp @@ -10310,10 +10385,6 @@ msgstr "" "Brakujące cyfry są wyrównywane zerami poprzedzającymi." #: editor/rename_dialog.cpp -msgid "Regular Expressions" -msgstr "Wyrażenia regularne" - -#: editor/rename_dialog.cpp msgid "Post-Process" msgstr "Przetwarzanie końcowe" @@ -10322,12 +10393,12 @@ msgid "Keep" msgstr "Bez zmian" #: editor/rename_dialog.cpp -msgid "CamelCase to under_scored" -msgstr "CamelCase na under_scored" +msgid "PascalCase to snake_case" +msgstr "PascalCase na snake_case" #: editor/rename_dialog.cpp -msgid "under_scored to CamelCase" -msgstr "under_scored na CamelCase" +msgid "snake_case to PascalCase" +msgstr "snake_case na PascalCase" #: editor/rename_dialog.cpp msgid "Case" @@ -10345,6 +10416,14 @@ msgstr "Na wielkie litery" msgid "Reset" msgstr "Resetuj" +#: editor/rename_dialog.cpp +msgid "Regular Expression Error" +msgstr "Błąd wyrażenia regularnego" + +#: editor/rename_dialog.cpp +msgid "At character %s" +msgstr "Przy znaku %s" + #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "Zmień nadrzędny węzeł" @@ -10808,8 +10887,8 @@ msgid "Invalid inherited parent name or path." msgstr "Nieprawidłowa nazwa lub ścieżka klasy bazowej." #: editor/script_create_dialog.cpp -msgid "Script is valid." -msgstr "Skrypt jest prawidłowy." +msgid "Script path/name is valid." +msgstr "Ścieżka/nazwa skryptu jest prawidłowa." #: editor/script_create_dialog.cpp msgid "Allowed: a-z, A-Z, 0-9, _ and ." @@ -10900,6 +10979,10 @@ msgid "Copy Error" msgstr "Kopiuj błąd" #: editor/script_editor_debugger.cpp +msgid "Video RAM" +msgstr "Wideo RAM" + +#: editor/script_editor_debugger.cpp msgid "Skip Breakpoints" msgstr "Pomiń punkty wstrzymania" @@ -10948,10 +11031,6 @@ msgid "Total:" msgstr "Całkowity:" #: editor/script_editor_debugger.cpp -msgid "Video Mem" -msgstr "Pamięć wideo" - -#: editor/script_editor_debugger.cpp msgid "Resource Path" msgstr "Ścieżka zasobu" @@ -12636,6 +12715,15 @@ msgstr "Varying może być przypisane tylko w funkcji wierzchołków." msgid "Constants cannot be modified." msgstr "Stałe nie mogą być modyfikowane." +#~ msgid "Replaced %d occurrence(s)." +#~ msgstr "Zastąpiono %d wystąpień." + +#~ msgid "Create Static Convex Body" +#~ msgstr "Stwórz statycznych ciało wypukłe" + +#~ msgid "Failed creating shapes!" +#~ msgstr "Tworzenie kształtów nieudane!" + #~ msgid "" #~ "There are currently no tutorials for this class, you can [color=$color]" #~ "[url=$url]contribute one[/url][/color] or [color=$color][url=" diff --git a/editor/translations/pr.po b/editor/translations/pr.po index e77bf47b81..2be9100ab8 100644 --- a/editor/translations/pr.po +++ b/editor/translations/pr.po @@ -698,7 +698,7 @@ msgid "Line Number:" msgstr "" #: editor/code_editor.cpp -msgid "Replaced %d occurrence(s)." +msgid "%d replaced." msgstr "" #: editor/code_editor.cpp editor/editor_help.cpp @@ -3927,15 +3927,16 @@ msgid "Saving..." msgstr "" #: editor/import_dock.cpp -msgid "Set as Default for '%s'" -msgstr "" +#, fuzzy +msgid "%d Files" +msgstr "Edit yer Variable:" #: editor/import_dock.cpp -msgid "Clear Default for '%s'" +msgid "Set as Default for '%s'" msgstr "" #: editor/import_dock.cpp -msgid " Files" +msgid "Clear Default for '%s'" msgstr "" #: editor/import_dock.cpp @@ -5826,11 +5827,11 @@ msgid "Mesh is empty!" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Trimesh Body" +msgid "Couldn't create a Trimesh collision shape." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Convex Body" +msgid "Create Static Trimesh Body" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -5842,11 +5843,27 @@ msgid "Create Trimesh Static Shape" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Failed creating shapes!" +msgid "Can't create a single convex collision shape for the scene root." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Couldn't create a single convex collision shape." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Single Convex Shape" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Can't create multiple convex collision shapes for the scene root." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Convex Shape(s)" +msgid "Couldn't create any collision shapes." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Multiple Convex Shapes" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -5898,19 +5915,57 @@ msgid "Create Trimesh Static Body" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a StaticBody and assigns a polygon-based collision shape to it " +"automatically.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Collision Sibling" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a polygon-based collision shape.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp #, fuzzy -msgid "Create Convex Collision Sibling(s)" +msgid "Create Single Convex Collision Siblings" msgstr "Yar, Blow th' Selected Down!" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a single convex collision shape.\n" +"This is the fastest (but least accurate) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Create Multiple Convex Collision Siblings" +msgstr "Yar, Blow th' Selected Down!" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a polygon-based collision shape.\n" +"This is a performance middle-ground between the two above options." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Outline Mesh..." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a static outline mesh. The outline mesh will have its normals " +"flipped automatically.\n" +"This can be used instead of the SpatialMaterial Grow property when using " +"that property isn't possible." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "View UV1" msgstr "" @@ -8377,7 +8432,7 @@ msgstr "" msgid "No VCS addons are available." msgstr "" -#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Error" msgstr "" @@ -9486,11 +9541,16 @@ msgid "Export With Debug" msgstr "" #: editor/project_manager.cpp -msgid "The path does not exist." +msgid "The path specified doesn't exist." msgstr "" #: editor/project_manager.cpp -msgid "Invalid '.zip' project file, does not contain a 'project.godot' file." +msgid "Error opening package file (it's not in ZIP format)." +msgstr "" + +#: editor/project_manager.cpp +msgid "" +"Invalid \".zip\" project file; it doesn't contain a \"project.godot\" file." msgstr "" #: editor/project_manager.cpp @@ -9498,11 +9558,11 @@ msgid "Please choose an empty folder." msgstr "" #: editor/project_manager.cpp -msgid "Please choose a 'project.godot' or '.zip' file." +msgid "Please choose a \"project.godot\" or \".zip\" file." msgstr "" #: editor/project_manager.cpp -msgid "Directory already contains a Godot project." +msgid "This directory already contains a Godot project." msgstr "" #: editor/project_manager.cpp @@ -10160,6 +10220,11 @@ msgid "Suffix" msgstr "" #: editor/rename_dialog.cpp +#, fuzzy +msgid "Use Regular Expressions" +msgstr "Swap yer Expression" + +#: editor/rename_dialog.cpp msgid "Advanced Options" msgstr "" @@ -10195,7 +10260,7 @@ msgid "" msgstr "" #: editor/rename_dialog.cpp -msgid "Per Level counter" +msgid "Per-level Counter" msgstr "" #: editor/rename_dialog.cpp @@ -10225,11 +10290,6 @@ msgid "" msgstr "" #: editor/rename_dialog.cpp -#, fuzzy -msgid "Regular Expressions" -msgstr "Swap yer Expression" - -#: editor/rename_dialog.cpp msgid "Post-Process" msgstr "" @@ -10238,11 +10298,11 @@ msgid "Keep" msgstr "" #: editor/rename_dialog.cpp -msgid "CamelCase to under_scored" +msgid "PascalCase to snake_case" msgstr "" #: editor/rename_dialog.cpp -msgid "under_scored to CamelCase" +msgid "snake_case to PascalCase" msgstr "" #: editor/rename_dialog.cpp @@ -10261,6 +10321,15 @@ msgstr "" msgid "Reset" msgstr "" +#: editor/rename_dialog.cpp +#, fuzzy +msgid "Regular Expression Error" +msgstr "Swap yer Expression" + +#: editor/rename_dialog.cpp +msgid "At character %s" +msgstr "" + #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "" @@ -10718,7 +10787,7 @@ msgid "Invalid inherited parent name or path." msgstr "Yer index property name be thrown overboard!" #: editor/script_create_dialog.cpp -msgid "Script is valid." +msgid "Script path/name is valid." msgstr "" #: editor/script_create_dialog.cpp @@ -10819,6 +10888,10 @@ msgid "Copy Error" msgstr "Slit th' Node" #: editor/script_editor_debugger.cpp +msgid "Video RAM" +msgstr "" + +#: editor/script_editor_debugger.cpp #, fuzzy msgid "Skip Breakpoints" msgstr "Yar, Blow th' Selected Down!" @@ -10869,10 +10942,6 @@ msgid "Total:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Video Mem" -msgstr "" - -#: editor/script_editor_debugger.cpp msgid "Resource Path" msgstr "" diff --git a/editor/translations/pt_BR.po b/editor/translations/pt_BR.po index a7d921b78e..8fc0ef4f39 100644 --- a/editor/translations/pt_BR.po +++ b/editor/translations/pt_BR.po @@ -48,7 +48,7 @@ # joel silva <joelgbsilva@gmail.com>, 2019. # Heitor Novais Pereira <heitornovais394@outlook.com>, 2019. # Joel Landgraf Filho <joel.landgraf@gmail.com>, 2019. -# Alan Valmorbida <alanvalmorbida@gmail.com>, 2019. +# Alan Valmorbida <alanvalmorbida@gmail.com>, 2019, 2020. # João Vitor Ferreira Cavalcante <jvfecav@gmail.com>, 2019. # Thiago Amendola <amendolathiago@gmail.com>, 2019. # Raphael Nogueira Campos <raphaelncampos@gmail.com>, 2019. @@ -61,12 +61,12 @@ # Ivo Nascimento <iannsp@gmail.com>, 2019. # Klaus Dellano <klausdell@hotmail.com>, 2019. # Esdras Tarsis <esdrastarsis@gmail.com>, 2019. -# Douglas Fiedler <dognew@gmail.com>, 2019. +# Douglas Fiedler <dognew@gmail.com>, 2019, 2020. # Rarysson Guilherme <r_guilherme12@hotmail.com>, 2019. # Gustavo da Silva Santos <gustavo94.rb@gmail.com>, 2019. # Rafael Roque <rafael.roquec@gmail.com>, 2019. # José Victor Dias Rodrigues <zoldyakopersonal@gmail.com>, 2019. -# Fupi Brazil <fupicat@gmail.com>, 2019. +# Fupi Brazil <fupicat@gmail.com>, 2019, 2020. # Julio Pinto Coelho <juliopcrj@gmail.com>, 2019. # Perrottacooking <perrottacooking@gmail.com>, 2019. # Wow Bitch <hahaj@itmailr.com>, 2019. @@ -80,12 +80,14 @@ # sribgui <sribgui@gmail.com>, 2020. # patrickvob <patrickvob@gmail.com>, 2020. # Michael Leocádio <aeronmike@gmail.com>, 2020. +# Z <rainromes@gmail.com>, 2020. +# Leonardo Dimano <leodimano@live.com>, 2020. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: 2016-05-30\n" -"PO-Revision-Date: 2020-01-27 07:10+0000\n" -"Last-Translator: Michael Leocádio <aeronmike@gmail.com>\n" +"PO-Revision-Date: 2020-02-18 15:09+0000\n" +"Last-Translator: Douglas Fiedler <dognew@gmail.com>\n" "Language-Team: Portuguese (Brazil) <https://hosted.weblate.org/projects/" "godot-engine/godot/pt_BR/>\n" "Language: pt_BR\n" @@ -93,16 +95,16 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 3.11-dev\n" +"X-Generator: Weblate 3.11\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Invalid type argument to convert(), use TYPE_* constants." -msgstr "Argumento de tipo inválido para convert(), use constantes TYPE_*." +msgstr "Argumento de tipo inválido para converter(), use TYPE_* constantes." #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp msgid "Expected a string of length 1 (a character)." -msgstr "Esperado string de comprimento 1 (a caractere)." +msgstr "Esperado uma string de comprimento 1 (um caractere)." #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/mono/glue/gd_glue.cpp @@ -346,7 +348,7 @@ msgstr "Tempo (s): " #: editor/animation_track_editor.cpp msgid "Toggle Track Enabled" -msgstr "Habilitar/Desabilitar Trilha" +msgstr "Habilitar Trilha" #: editor/animation_track_editor.cpp msgid "Continuous" @@ -761,8 +763,8 @@ msgid "Line Number:" msgstr "Número da Linha:" #: editor/code_editor.cpp -msgid "Replaced %d occurrence(s)." -msgstr "%d ocorrência(s) substituída(s)." +msgid "%d replaced." +msgstr "%d substituído." #: editor/code_editor.cpp editor/editor_help.cpp msgid "%d match." @@ -4033,6 +4035,10 @@ msgid "Saving..." msgstr "Salvando..." #: editor/import_dock.cpp +msgid "%d Files" +msgstr "%d Arquivos" + +#: editor/import_dock.cpp msgid "Set as Default for '%s'" msgstr "Definir como Padrão para '%s'" @@ -4041,10 +4047,6 @@ msgid "Clear Default for '%s'" msgstr "Limpar Padrão para '%s'" #: editor/import_dock.cpp -msgid " Files" -msgstr " Arquivos" - -#: editor/import_dock.cpp msgid "Import As:" msgstr "Importar como:" @@ -5924,12 +5926,12 @@ msgid "Mesh is empty!" msgstr "Mesh está vazia!" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Trimesh Body" -msgstr "Criar Corpo Trimesh Estático" +msgid "Couldn't create a Trimesh collision shape." +msgstr "Não foi possível criar uma forma de colisão Trimesh." #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Convex Body" -msgstr "Criar Corpo Convexo Estático" +msgid "Create Static Trimesh Body" +msgstr "Criar Corpo Trimesh Estático" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "This doesn't work on scene root!" @@ -5940,12 +5942,28 @@ msgid "Create Trimesh Static Shape" msgstr "Criar Forma Estática Trimesh" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Failed creating shapes!" -msgstr "Falha ao criar formas!" +msgid "Can't create a single convex collision shape for the scene root." +msgstr "Não foi possível criar forma de colisão convexa para a cena raiz." #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Convex Shape(s)" -msgstr "Criar Forma(s) Convexa(s)" +msgid "Couldn't create a single convex collision shape." +msgstr "Não foi possível criar uma forma de colisão convexa simples." + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Single Convex Shape" +msgstr "Criar Forma(s) Convexa(s) Simples" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Can't create multiple convex collision shapes for the scene root." +msgstr "Não foi possível criar uma forma de colisão convexa para a cena raiz." + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Couldn't create any collision shapes." +msgstr "Não foi possível criar nenhuma forma de colisão." + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Multiple Convex Shapes" +msgstr "Criar Múltiplas Forma(s) Convexa(s)" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Navigation Mesh" @@ -5996,18 +6014,68 @@ msgid "Create Trimesh Static Body" msgstr "Criar Corpo Trimesh Estático" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a StaticBody and assigns a polygon-based collision shape to it " +"automatically.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" +"Criar um Staticbody e atribuir uma forma de colisão baseado em polígono para " +"isto automaticamente.\n" +"Esta é a opção mais precisa (mas lenta) para detecção de colisão." + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Collision Sibling" msgstr "Criar Colisão Trimesh Irmã" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Convex Collision Sibling(s)" -msgstr "Criar Colisão Convexa Irmã(s)" +msgid "" +"Creates a polygon-based collision shape.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" +"Criar uma forma de colisão baseada em polígono.\n" +"Este é a opção mais precisa (mas lenta) para detecção de colisão." + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Single Convex Collision Siblings" +msgstr "Criar Simples Colisão Convexa Irmã(s)" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a single convex collision shape.\n" +"This is the fastest (but least accurate) option for collision detection." +msgstr "" +"Criar uma simples forma convexa de colisão.\n" +"Esta é a opção mais rápida (mas menos precisa) para detecção de colisão." + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Multiple Convex Collision Siblings" +msgstr "Criar Múltipla Colisão Convexa Irmã(s)" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a polygon-based collision shape.\n" +"This is a performance middle-ground between the two above options." +msgstr "" +"Cria um polígono base de colisão forma.\n" +"Este é um meio-termo entre as duas opções acima." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Outline Mesh..." msgstr "Criar Malha de Contorno..." #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a static outline mesh. The outline mesh will have its normals " +"flipped automatically.\n" +"This can be used instead of the SpatialMaterial Grow property when using " +"that property isn't possible." +msgstr "" +"Cria uma malha de contorno estática. A malha de contorno pode ter suas " +"normals viradas automaticamente.\n" +"Isso pode ser usado em vez da propriedade SpatialMaterial Grow quando o uso " +"dessa propriedade não for possível." + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "View UV1" msgstr "Visualizar UV1" @@ -8417,7 +8485,7 @@ msgstr "Conjunto de Telha" msgid "No VCS addons are available." msgstr "Nenhum complemento VCS está disponível." -#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Error" msgstr "Erro" @@ -9583,24 +9651,28 @@ msgid "Export With Debug" msgstr "Exportar Com Depuração" #: editor/project_manager.cpp -msgid "The path does not exist." -msgstr "O caminho não existe." +msgid "The path specified doesn't exist." +msgstr "O caminho especificado não existe." #: editor/project_manager.cpp -msgid "Invalid '.zip' project file, does not contain a 'project.godot' file." -msgstr "" -"Projeto '.zip' inválido, o projeto não contém um arquivo 'project.godot'." +msgid "Error opening package file (it's not in ZIP format)." +msgstr "Erro ao abrir arquivo compactado (não está em formato ZIP)." + +#: editor/project_manager.cpp +msgid "" +"Invalid \".zip\" project file; it doesn't contain a \"project.godot\" file." +msgstr "Projeto '.zip' inválido; não contém um arquivo 'project.godot'." #: editor/project_manager.cpp msgid "Please choose an empty folder." msgstr "Por favor, escolha uma pasta vazia." #: editor/project_manager.cpp -msgid "Please choose a 'project.godot' or '.zip' file." -msgstr "Por favor, escolha um arquivo 'project.godot' ou '.zip'." +msgid "Please choose a \"project.godot\" or \".zip\" file." +msgstr "Por favor, escolha um arquivo 'project.godot' ou arquivo '.zip'." #: editor/project_manager.cpp -msgid "Directory already contains a Godot project." +msgid "This directory already contains a Godot project." msgstr "O diretório já contém um projeto Godot." #: editor/project_manager.cpp @@ -10224,7 +10296,7 @@ msgstr "Idiomas:" #: editor/project_settings_editor.cpp msgid "AutoLoad" -msgstr "Carregamento Automático" +msgstr "O AutoLoad" #: editor/project_settings_editor.cpp msgid "Plugins" @@ -10299,6 +10371,10 @@ msgid "Suffix" msgstr "Sufixo" #: editor/rename_dialog.cpp +msgid "Use Regular Expressions" +msgstr "Utilize Expressões Regulares" + +#: editor/rename_dialog.cpp msgid "Advanced Options" msgstr "Opções Avançadas" @@ -10335,7 +10411,7 @@ msgstr "" "Compare as opções do contador." #: editor/rename_dialog.cpp -msgid "Per Level counter" +msgid "Per-level Counter" msgstr "Contador de nível" #: editor/rename_dialog.cpp @@ -10367,10 +10443,6 @@ msgstr "" "Os dígitos ausentes são preenchidos com zeros à esquerda." #: editor/rename_dialog.cpp -msgid "Regular Expressions" -msgstr "Expressões regulares" - -#: editor/rename_dialog.cpp msgid "Post-Process" msgstr "Pós-Processamento" @@ -10379,12 +10451,12 @@ msgid "Keep" msgstr "Manter" #: editor/rename_dialog.cpp -msgid "CamelCase to under_scored" -msgstr "CamelCase para under_scored" +msgid "PascalCase to snake_case" +msgstr "PascalCase para snake_case" #: editor/rename_dialog.cpp -msgid "under_scored to CamelCase" -msgstr "under_scored para CamelCase" +msgid "snake_case to PascalCase" +msgstr "snake_case para PascalCase" #: editor/rename_dialog.cpp msgid "Case" @@ -10402,6 +10474,14 @@ msgstr "Para Maiúscula" msgid "Reset" msgstr "Recompor" +#: editor/rename_dialog.cpp +msgid "Regular Expression Error" +msgstr "Erro de Expressão Regular" + +#: editor/rename_dialog.cpp +msgid "At character %s" +msgstr "Para caractere %s" + #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "Reparentar Nó" @@ -10865,8 +10945,8 @@ msgid "Invalid inherited parent name or path." msgstr "Nome ou caminho do pai herdado inválido." #: editor/script_create_dialog.cpp -msgid "Script is valid." -msgstr "Script válido." +msgid "Script path/name is valid." +msgstr "O caminho/nome do script é válido." #: editor/script_create_dialog.cpp msgid "Allowed: a-z, A-Z, 0-9, _ and ." @@ -10957,6 +11037,10 @@ msgid "Copy Error" msgstr "Copiar Erro" #: editor/script_editor_debugger.cpp +msgid "Video RAM" +msgstr "Memória de Vídeo" + +#: editor/script_editor_debugger.cpp msgid "Skip Breakpoints" msgstr "Pular Breakpoints" @@ -11005,10 +11089,6 @@ msgid "Total:" msgstr "Total:" #: editor/script_editor_debugger.cpp -msgid "Video Mem" -msgstr "Mem. de Vídeo" - -#: editor/script_editor_debugger.cpp msgid "Resource Path" msgstr "Caminho do Recurso" @@ -12693,6 +12773,15 @@ msgstr "Variáveis só podem ser atribuídas na função de vértice." msgid "Constants cannot be modified." msgstr "Constantes não podem serem modificadas." +#~ msgid "Replaced %d occurrence(s)." +#~ msgstr "%d ocorrência(s) substituída(s)." + +#~ msgid "Create Static Convex Body" +#~ msgstr "Criar Corpo Convexo Estático" + +#~ msgid "Failed creating shapes!" +#~ msgstr "Falha ao criar formas!" + #~ msgid "" #~ "There are currently no tutorials for this class, you can [color=$color]" #~ "[url=$url]contribute one[/url][/color] or [color=$color][url=" diff --git a/editor/translations/pt_PT.po b/editor/translations/pt_PT.po index d293860dec..6bd8da8610 100644 --- a/editor/translations/pt_PT.po +++ b/editor/translations/pt_PT.po @@ -19,7 +19,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2020-01-27 07:10+0000\n" +"PO-Revision-Date: 2020-02-18 15:09+0000\n" "Last-Translator: João Lopes <linux-man@hotmail.com>\n" "Language-Team: Portuguese (Portugal) <https://hosted.weblate.org/projects/" "godot-engine/godot/pt_PT/>\n" @@ -28,7 +28,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 3.11-dev\n" +"X-Generator: Weblate 3.11\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -37,7 +37,7 @@ msgstr "Tipo de argumento inválido para convert(), use constantes TYPE_*." #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp msgid "Expected a string of length 1 (a character)." -msgstr "Esperado um string de comprimento 1 (um caráter)." +msgstr "Esperado um string de comprimento 1 (um carácter)." #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/mono/glue/gd_glue.cpp @@ -428,7 +428,7 @@ msgstr "" #: editor/animation_track_editor.cpp msgid "Not possible to add a new track without a root" -msgstr "Não é possível adicionar nova pista sem uma raíz" +msgstr "Não é possível adicionar nova pista sem uma raiz" #: editor/animation_track_editor.cpp msgid "Invalid track for Bezier (no suitable sub-properties)" @@ -444,7 +444,7 @@ msgstr "Caminho da pista é inválido, não se consegue adicionar uma chave." #: editor/animation_track_editor.cpp msgid "Track is not of type Spatial, can't insert key" -msgstr "Pista não do tipo Spatial, impossível inserir chave" +msgstr "Pista não é do tipo Spatial, não consigo inserir chave" #: editor/animation_track_editor.cpp msgid "Add Transform Track Key" @@ -456,7 +456,7 @@ msgstr "Adicionar Chave da Pista" #: editor/animation_track_editor.cpp msgid "Track path is invalid, so can't add a method key." -msgstr "Caminho da pista é inválido, impossível adicionar uma chave método." +msgstr "Caminho da pista é inválido, não consigo adicionar uma chave método." #: editor/animation_track_editor.cpp msgid "Add Method Track Key" @@ -698,8 +698,8 @@ msgid "Line Number:" msgstr "Numero da linha:" #: editor/code_editor.cpp -msgid "Replaced %d occurrence(s)." -msgstr "Substituído %d ocorrência(s)." +msgid "%d replaced." +msgstr "%d substituído." #: editor/code_editor.cpp editor/editor_help.cpp msgid "%d match." @@ -764,7 +764,7 @@ msgstr "Números de Linha e Coluna." #: editor/connections_dialog.cpp msgid "Method in target node must be specified." -msgstr "Método no Nó alvo deve ser especificado." +msgstr "Método no nó alvo deve ser especificado." #: editor/connections_dialog.cpp msgid "" @@ -772,7 +772,7 @@ msgid "" "target node." msgstr "" "Método alvo não encontrado. Especifique um método válido ou anexe um script " -"ao Nó de destino." +"ao nó de destino." #: editor/connections_dialog.cpp msgid "Connect to Node:" @@ -788,7 +788,7 @@ msgstr "Do Sinal:" #: editor/connections_dialog.cpp msgid "Scene does not contain any script." -msgstr "A Cena não contém qualquer script." +msgstr "A cena não contém qualquer script." #: editor/connections_dialog.cpp editor/editor_autoload_settings.cpp #: editor/groups_editor.cpp editor/plugins/item_list_editor_plugin.cpp @@ -844,7 +844,7 @@ msgstr "Desconecta o sinal após a primeira emissão." #: editor/connections_dialog.cpp msgid "Cannot connect signal" -msgstr "Impossível conectar sinal" +msgstr "Não consigo conectar sinal" #: editor/connections_dialog.cpp editor/dependency_editor.cpp #: editor/export_template_manager.cpp editor/groups_editor.cpp @@ -976,7 +976,7 @@ msgid "" "Scene '%s' is currently being edited.\n" "Changes will only take effect when reloaded." msgstr "" -"A Cena '%s' está a ser editada.\n" +"A cena '%s' está a ser editada.\n" "As alterações só terão efeito quando recarregar." #: editor/dependency_editor.cpp @@ -1047,7 +1047,7 @@ msgstr "" #: editor/dependency_editor.cpp msgid "Cannot remove:" -msgstr "Impossível remover:" +msgstr "Não consigo remover:" #: editor/dependency_editor.cpp msgid "Error loading:" @@ -1207,7 +1207,7 @@ msgstr "%s (Já Existe)" #: editor/editor_asset_installer.cpp msgid "Uncompressing Assets" -msgstr "A descompactar Ativos" +msgstr "A Descomprimir Ativos" #: editor/editor_asset_installer.cpp editor/project_manager.cpp msgid "The following files failed extraction from package:" @@ -1415,7 +1415,7 @@ msgstr "Nome inválido." #: editor/editor_autoload_settings.cpp msgid "Valid characters:" -msgstr "Carateres válidos:" +msgstr "Caracteres válidos:" #: editor/editor_autoload_settings.cpp msgid "Must not collide with an existing engine class name." @@ -1501,7 +1501,7 @@ msgstr "Instância única" #: editor/editor_data.cpp msgid "Updating Scene" -msgstr "Atualizando a Cena" +msgstr "A atualizar Cena" #: editor/editor_data.cpp msgid "Storing local changes..." @@ -1509,7 +1509,7 @@ msgstr "Armazenando alterações locais..." #: editor/editor_data.cpp msgid "Updating scene..." -msgstr "Atualizando a Cena..." +msgstr "A atualizar cena..." #: editor/editor_data.cpp editor/editor_properties.cpp msgid "[empty]" @@ -1543,7 +1543,7 @@ msgstr "Nome:" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp #: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp msgid "Could not create folder." -msgstr "Não foi possível criar pasta." +msgstr "Não consegui criar pasta." #: editor/editor_dir_dialog.cpp msgid "Choose" @@ -1632,7 +1632,7 @@ msgstr "Importar Doca" #: editor/editor_feature_profile.cpp msgid "Node Dock" -msgstr "Nó Doca" +msgstr "Doca de Nó" #: editor/editor_feature_profile.cpp msgid "FileSystem and Import Docks" @@ -2184,7 +2184,7 @@ msgstr "Guardar Recurso Como..." #: editor/editor_node.cpp msgid "Can't open file for writing:" -msgstr "Impossível abrir o Ficheiro para escrita:" +msgstr "Não consigo abrir o ficheiro para escrita:" #: editor/editor_node.cpp msgid "Requested file format unknown:" @@ -2196,7 +2196,7 @@ msgstr "Erro ao guardar." #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp msgid "Can't open '%s'. The file could have been moved or deleted." -msgstr "Impossível abrir '%s'. O ficheiro pode ter sido movido ou apagado." +msgstr "Não consigo abrir '%s'. O ficheiro pode ter sido movido ou apagado." #: editor/editor_node.cpp msgid "Error while parsing '%s'." @@ -2216,7 +2216,7 @@ msgstr "Erro ao carregar '%s'." #: editor/editor_node.cpp msgid "Saving Scene" -msgstr "A guardar a Cena" +msgstr "A guardar Cena" #: editor/editor_node.cpp msgid "Analyzing" @@ -2244,7 +2244,7 @@ msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" -"Impossível guardar Cena. Provavelmente, as dependências (instâncias ou " +"Não consigo guardar cena. Provavelmente, as dependências (instâncias ou " "heranças) não puderam ser satisfeitas." #: editor/editor_node.cpp editor/scene_tree_dock.cpp @@ -2253,7 +2253,7 @@ msgstr "Não se consegue sobrescrever cena ainda aberta!" #: editor/editor_node.cpp msgid "Can't load MeshLibrary for merging!" -msgstr "Impossível carregar MeshLibrary para fundir!" +msgstr "Não consigo carregar MeshLibrary para combinar!" #: editor/editor_node.cpp msgid "Error saving MeshLibrary!" @@ -2261,7 +2261,7 @@ msgstr "Erro ao guardar MeshLibrary!" #: editor/editor_node.cpp msgid "Can't load TileSet for merging!" -msgstr "Impossível carregar TileSet para fundir!" +msgstr "Não consigo carregar TileSet para combinar!" #: editor/editor_node.cpp msgid "Error saving TileSet!" @@ -2289,9 +2289,8 @@ msgid "" "Please read the documentation relevant to importing scenes to better " "understand this workflow." msgstr "" -"Este recurso pertence a uma Cena que foi importado, portanto, não é " -"editável.\n" -"Por favor, leia a documentação relevante sobre importação de Cenas, para um " +"Este recurso pertence a uma cena que foi importado, não sendo editável.\n" +"Por favor, leia a documentação relevante sobre importação de cenas, para um " "melhor entendimento deste fluxo de trabalho." #: editor/editor_node.cpp @@ -2336,15 +2335,15 @@ msgstr "" #: editor/editor_node.cpp msgid "There is no defined scene to run." -msgstr "Não existe nenhuma Cena definida para executar." +msgstr "Não existe cena definida para execução." #: editor/editor_node.cpp msgid "Current scene was never saved, please save it prior to running." -msgstr "A Cena atual nunca foi guardada, por favor guarde-a antes de executar." +msgstr "A cena atual nunca foi guardada, por favor guarde-a antes de executar." #: editor/editor_node.cpp msgid "Could not start subprocess!" -msgstr "Não foi possível iniciar o subprocesso!" +msgstr "Não consegui iniciar o subprocesso!" #: editor/editor_node.cpp editor/filesystem_dock.cpp msgid "Open Scene" @@ -2360,7 +2359,7 @@ msgstr "Abertura rápida..." #: editor/editor_node.cpp msgid "Quick Open Scene..." -msgstr "Abrir Cena de forma rápida..." +msgstr "Abrir Cena Rapidamente..." #: editor/editor_node.cpp msgid "Quick Open Script..." @@ -2380,11 +2379,11 @@ msgstr "Guardado(s) %s recurso(s) modificado(s)." #: editor/editor_node.cpp msgid "A root node is required to save the scene." -msgstr "É necessário um Nó Raiz para guardar a cena." +msgstr "É necessário um nó raiz para guardar a cena." #: editor/editor_node.cpp msgid "Save Scene As..." -msgstr "Guardar Cena como..." +msgstr "Guardar Cena Como..." #: editor/editor_node.cpp msgid "No" @@ -2396,11 +2395,11 @@ msgstr "Sim" #: editor/editor_node.cpp msgid "This scene has never been saved. Save before running?" -msgstr "Esta Cena nunca foi guardada. Guardar antes de executar?" +msgstr "Esta cena nunca foi guardada. Guardar antes de executar?" #: editor/editor_node.cpp editor/scene_tree_dock.cpp msgid "This operation can't be done without a scene." -msgstr "Esta operação não pode ser efetuada sem uma Cena." +msgstr "Esta operação não pode ser efetuada sem uma cena." #: editor/editor_node.cpp msgid "Export Mesh Library" @@ -2408,7 +2407,7 @@ msgstr "Exportar Biblioteca de Malhas" #: editor/editor_node.cpp msgid "This operation can't be done without a root node." -msgstr "Esta operação não pode ser efetuada sem um Nó raiz." +msgstr "Esta operação não pode ser efetuada sem um nó raiz." #: editor/editor_node.cpp msgid "Export Tile Set" @@ -2416,15 +2415,15 @@ msgstr "Exportar conjunto de Tiles" #: editor/editor_node.cpp msgid "This operation can't be done without a selected node." -msgstr "Esta operação não pode ser efetuada sem um Nó selecionado." +msgstr "Esta operação não pode ser efetuada sem um nó selecionado." #: editor/editor_node.cpp msgid "Current scene not saved. Open anyway?" -msgstr "A Cena atual não foi guardada. Abrir na mesma?" +msgstr "A cena atual não foi guardada. Abrir na mesma?" #: editor/editor_node.cpp msgid "Can't reload a scene that was never saved." -msgstr "Impossível recarregar uma Cena que nunca foi guardada." +msgstr "Não consigo recarregar uma cena que nunca foi guardada." #: editor/editor_node.cpp msgid "Revert" @@ -2436,7 +2435,7 @@ msgstr "Esta acção não pode ser desfeita. Reverter na mesma?" #: editor/editor_node.cpp msgid "Quick Run Scene..." -msgstr "Executar Cena de forma rápida..." +msgstr "Executar Cena Rapidamente..." #: editor/editor_node.cpp msgid "Quit" @@ -2456,12 +2455,12 @@ msgstr "Guardar & Sair" #: editor/editor_node.cpp msgid "Save changes to the following scene(s) before quitting?" -msgstr "Guardar alterações da(s) seguinte(s) Cena(s) antes de sair?" +msgstr "Guardar alterações da(s) seguinte(s) cena(s) antes de sair?" #: editor/editor_node.cpp msgid "Save changes the following scene(s) before opening Project Manager?" msgstr "" -"Guardar alterações da(s) seguinte(s) Cena(s) antes de abrir o Gestor de " +"Guardar alterações da(s) seguinte(s) cena(s) antes de abrir o Gestor de " "Projeto?" #: editor/editor_node.cpp @@ -2523,19 +2522,19 @@ msgid "" "To make changes to it, a new inherited scene can be created." msgstr "" "Cena '%s' foi importada automaticamente, não podendo ser alterada.\n" -"Para fazer alterações, pode ser criada uma nova Cena herdada." +"Para fazer alterações, pode ser criada uma nova cena herdada." #: editor/editor_node.cpp msgid "" "Error loading scene, it must be inside the project path. Use 'Import' to " "open the scene, then save it inside the project path." msgstr "" -"Erro ao carregar a Cena, tem de estar no Caminho do Projeto. Use 'Importar' " -"para abrir a Cena, e guarde-a dentro do Caminho do Projeto." +"Erro ao carregar cena, tem de estar no caminho do projeto. Use 'Importar' " +"para abrir a cena, e guarde-a dentro do caminho do projeto." #: editor/editor_node.cpp msgid "Scene '%s' has broken dependencies:" -msgstr "A Cena '%s' tem dependências não satisfeitas:" +msgstr "Cena '%s' tem dependências não satisfeitas:" #: editor/editor_node.cpp msgid "Clear Recent Scenes" @@ -2547,7 +2546,7 @@ msgid "" "You can change it later in \"Project Settings\" under the 'application' " "category." msgstr "" -"Não foi definida nenhuma Cena principal. Selecionar uma?\n" +"Não foi definida nenhuma cena principal. Selecionar uma?\n" "Poderá alterá-la depois nas \"Definições do Projeto\", na categoria " "'aplicação'." @@ -2557,8 +2556,8 @@ msgid "" "You can change it later in \"Project Settings\" under the 'application' " "category." msgstr "" -"A Cena selecionada '%s' não existe, selecionar uma válida?\n" -"Poderá alterá-la depois em \"Configurações de Projeto\", na categoria de " +"A cena selecionada '%s' não existe, selecionar uma válida?\n" +"Poderá alterá-la depois em \"Configurações de Projeto\", na categoria " "'aplicação'." #: editor/editor_node.cpp @@ -2567,7 +2566,7 @@ msgid "" "You can change it later in \"Project Settings\" under the 'application' " "category." msgstr "" -"A Cena selecionada '%s' não é um Ficheiro de Cena, selecione um Ficheiro " +"A cena selecionada '%s' não é um ficheiro de cena, selecione um ficheiro " "válido?\n" "Poderá alterá-la depois em \"Configurações de Projeto\", na categoria " "'aplicação'." @@ -2592,7 +2591,7 @@ msgstr "Mostrar no Sistema de Ficheiros" #: editor/editor_node.cpp msgid "Play This Scene" -msgstr "Executar esta Cena" +msgstr "Executar Esta Cena" #: editor/editor_node.cpp msgid "Close Tab" @@ -2616,7 +2615,7 @@ msgstr "Fechar Todos os Separadores" #: editor/editor_node.cpp msgid "Switch Scene Tab" -msgstr "Trocar Tab de Cena" +msgstr "Trocar Aba de Cena" #: editor/editor_node.cpp msgid "%d more files or folders" @@ -2644,7 +2643,7 @@ msgstr "Alternar modo livre de distrações." #: editor/editor_node.cpp msgid "Add a new scene." -msgstr "Adicionar nova Cena." +msgstr "Adicionar nova cena." #: editor/editor_node.cpp msgid "Scene" @@ -2652,7 +2651,7 @@ msgstr "Cena" #: editor/editor_node.cpp msgid "Go to previously opened scene." -msgstr "Ir para Cena aberta anteriormente." +msgstr "Ir para cena aberta anteriormente." #: editor/editor_node.cpp msgid "Copy Text" @@ -2672,7 +2671,7 @@ msgstr "Filtrar Ficheiro..." #: editor/editor_node.cpp msgid "Operations with scene files." -msgstr "Operações com Ficheiros de Cena." +msgstr "Operações com ficheiros de cena." #: editor/editor_node.cpp msgid "New Scene" @@ -2726,7 +2725,7 @@ msgstr "Reverter Cena" #: editor/editor_node.cpp msgid "Miscellaneous project or scene-wide tools." -msgstr "Ferramentas diversas de Projeto ou Cena." +msgstr "Ferramentas diversas de projeto ou cena." #: editor/editor_node.cpp editor/project_manager.cpp #: editor/script_create_dialog.cpp @@ -2818,7 +2817,7 @@ msgid "" "Collision shapes and raycast nodes (for 2D and 3D) will be visible on the " "running game if this option is turned on." msgstr "" -"Com esta opção ativa, formas de colisão e Nós raycast (para 2D e 3D) serão " +"Com esta opção ativa, formas de colisão e nós raycast (para 2D e 3D) serão " "visíveis no jogo em execução." #: editor/editor_node.cpp @@ -2843,10 +2842,10 @@ msgid "" "When used remotely on a device, this is more efficient with network " "filesystem." msgstr "" -"Com esta opção ativa, alterações da Cena no Editor serão replicadas no jogo " +"Com esta opção ativa, alterações da cena no editor serão replicadas no jogo " "em execução.\n" -"Quando usada num dispositivo remoto, é mais eficiente com um Sistema de " -"Ficheiros em rede." +"Quando usada num dispositivo remoto, é mais eficiente com um sistema de " +"ficheiros em rede." #: editor/editor_node.cpp msgid "Sync Script Changes" @@ -2961,11 +2960,11 @@ msgstr "Pausar a execução da cena para depuração." #: editor/editor_node.cpp msgid "Pause Scene" -msgstr "Pausar a Cena" +msgstr "Pausar Cena" #: editor/editor_node.cpp msgid "Stop the scene." -msgstr "Para a Cena." +msgstr "Para a cena." #: editor/editor_node.cpp msgid "Play the edited scene." @@ -2973,11 +2972,11 @@ msgstr "Executa a cena editada." #: editor/editor_node.cpp msgid "Play Scene" -msgstr "Executar a Cena" +msgstr "Executar Cena" #: editor/editor_node.cpp msgid "Play custom scene" -msgstr "Executa a cena personalizada" +msgstr "Executa cena personalizada" #: editor/editor_node.cpp msgid "Play Custom Scene" @@ -3080,7 +3079,7 @@ msgstr "Exportar Biblioteca" #: editor/editor_node.cpp msgid "Merge With Existing" -msgstr "Fundir com o Existente" +msgstr "Combinar com o Existente" #: editor/editor_node.cpp msgid "Open & Run a Script" @@ -3265,7 +3264,7 @@ msgstr "" "Não se consegue criar Textura Viewport neste recurso porque não está " "definido na cena como local.\n" "Ative a sua propriedade 'local to scene' (e em todos os recursos que o " -"contêm até a um Nó)." +"contêm até a um nó)." #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Pick a Viewport" @@ -3348,11 +3347,11 @@ msgstr "Escreva a sua lógica no Método _run()." #: editor/editor_run_script.cpp msgid "There is an edited scene already." -msgstr "Já existe uma Cena editada." +msgstr "Já existe uma cena editada." #: editor/editor_run_script.cpp msgid "Couldn't instance script:" -msgstr "Não foi possível instanciar o Script:" +msgstr "Não consegui instanciar o script:" #: editor/editor_run_script.cpp msgid "Did you forget the 'tool' keyword?" @@ -3360,7 +3359,7 @@ msgstr "Esqueceu-se da palavra chave 'tool'?" #: editor/editor_run_script.cpp msgid "Couldn't run script:" -msgstr "Não foi possível executar o Script:" +msgstr "Não consegui executar o script:" #: editor/editor_run_script.cpp msgid "Did you forget the '_run' method?" @@ -3368,7 +3367,7 @@ msgstr "Esqueceu-se do médodo '_run'?" #: editor/editor_sub_scene.cpp msgid "Select Node(s) to Import" -msgstr "Selecionar Nó(s) para importar" +msgstr "Selecionar Nó(s) para Importar" #: editor/editor_sub_scene.cpp editor/project_manager.cpp msgid "Browse" @@ -3423,7 +3422,7 @@ msgstr "Remover versão '%s' do Modelo?" #: editor/export_template_manager.cpp msgid "Can't open export templates zip." -msgstr "Impossível abrir o zip de Modelos." +msgstr "Não consigo abrir zip de modelos de exportação." #: editor/export_template_manager.cpp msgid "Invalid version.txt format inside templates: %s." @@ -3465,12 +3464,12 @@ msgstr "" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp msgid "Can't resolve." -msgstr "Impossível resolver." +msgstr "Não consigo resolver." #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp msgid "Can't connect." -msgstr "Impossível conectar." +msgstr "Não consigo conectar." #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp @@ -3496,7 +3495,7 @@ msgstr "Download Completo." #: editor/export_template_manager.cpp msgid "Cannot remove temporary file:" -msgstr "Impossível remover ficheiro temporário:" +msgstr "Não consigo remover ficheiro temporário:" #: editor/export_template_manager.cpp msgid "" @@ -3524,7 +3523,7 @@ msgstr "A resolver" #: editor/export_template_manager.cpp msgid "Can't Resolve" -msgstr "Impossível resolver" +msgstr "Não consigo Resolver" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp @@ -3533,7 +3532,7 @@ msgstr "A ligar..." #: editor/export_template_manager.cpp msgid "Can't Connect" -msgstr "Impossível conetar" +msgstr "Não consigo Conectar" #: editor/export_template_manager.cpp msgid "Connected" @@ -3608,7 +3607,7 @@ msgstr "" #: editor/filesystem_dock.cpp msgid "Cannot move/rename resources root." -msgstr "Não foi possível mover/renomear raíz dos recursos." +msgstr "Não consegui mover/renomear raiz dos recursos." #: editor/filesystem_dock.cpp msgid "Cannot move a folder into itself." @@ -3632,7 +3631,7 @@ msgstr "Nome não fornecido." #: editor/filesystem_dock.cpp msgid "Provided name contains invalid characters." -msgstr "O nome fornecido contém carateres inválidos." +msgstr "O nome fornecido contém caracteres inválidos." #: editor/filesystem_dock.cpp msgid "A file or folder with this name already exists." @@ -3640,7 +3639,7 @@ msgstr "Um Ficheiro ou diretoria já existe com este nome." #: editor/filesystem_dock.cpp msgid "Name contains invalid characters." -msgstr "O nome contém carateres inválidos." +msgstr "O nome contém caracteres inválidos." #: editor/filesystem_dock.cpp msgid "Renaming file:" @@ -3871,7 +3870,7 @@ msgstr "Nós fora do Grupo" #: editor/groups_editor.cpp editor/scene_tree_dock.cpp #: editor/scene_tree_editor.cpp msgid "Filter nodes" -msgstr "Filtrar Nós" +msgstr "Filtrar nós" #: editor/groups_editor.cpp msgid "Nodes in Group" @@ -3891,7 +3890,7 @@ msgstr "Gerir Grupos" #: editor/import/resource_importer_scene.cpp msgid "Import as Single Scene" -msgstr "Importar como Cena única" +msgstr "Importar como Cena Única" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Animations" @@ -3927,7 +3926,7 @@ msgstr "Importar como Cenas Múltiplas" #: editor/import/resource_importer_scene.cpp msgid "Import as Multiple Scenes+Materials" -msgstr "Importar como Cenas e Materiais Múltiplos" +msgstr "Importar como Cenas Múltiplas + Materiais" #: editor/import/resource_importer_scene.cpp #: editor/plugins/mesh_library_editor_plugin.cpp @@ -3967,6 +3966,10 @@ msgid "Saving..." msgstr "A guardar..." #: editor/import_dock.cpp +msgid "%d Files" +msgstr "%d Ficheiros" + +#: editor/import_dock.cpp msgid "Set as Default for '%s'" msgstr "Definir como Padrão para '%s'" @@ -3975,10 +3978,6 @@ msgid "Clear Default for '%s'" msgstr "Limpar Padrão para '%s'" #: editor/import_dock.cpp -msgid " Files" -msgstr " Ficheiros" - -#: editor/import_dock.cpp msgid "Import As:" msgstr "Importar Como:" @@ -4088,7 +4087,7 @@ msgstr "As alterações podem ser perdidas!" #: editor/multi_node_edit.cpp msgid "MultiNode Set" -msgstr "Conjunto MultiNode" +msgstr "Conjunto MultiNó" #: editor/node_dock.cpp msgid "Select a single node to edit its signals and groups." @@ -4526,7 +4525,7 @@ msgstr "Posição da Animação (em segundos)." #: editor/plugins/animation_player_editor_plugin.cpp msgid "Scale animation playback globally for the node." -msgstr "Escalar globalmente a reprodução da Animação para o Nó." +msgstr "Escalar globalmente a reprodução da animação para o nó." #: editor/plugins/animation_player_editor_plugin.cpp msgid "Animation Tools" @@ -4670,7 +4669,7 @@ msgstr "Viagem" #: editor/plugins/animation_state_machine_editor.cpp msgid "Start and end nodes are needed for a sub-transition." -msgstr "Nodos de início e fim são necessários para uma sub-transição." +msgstr "Nós de início e fim são necessários para uma sub-transição." #: editor/plugins/animation_state_machine_editor.cpp msgid "No playback resource set at path: %s." @@ -4862,7 +4861,7 @@ msgstr "Importar Animações..." #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Edit Node Filters" -msgstr "Editar filtros de Nó" +msgstr "Editar Filtros de Nó" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Filters..." @@ -4882,7 +4881,7 @@ msgstr "Erro de ligação, tente novamente." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Can't connect to host:" -msgstr "Impossível ligar ao host:" +msgstr "Não consigo ligar ao host:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "No response from host:" @@ -4890,7 +4889,7 @@ msgstr "Sem resposta do host:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Can't resolve hostname:" -msgstr "Impossível resolver hostname:" +msgstr "Não consigo resolver hostname:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Request failed, return code:" @@ -4902,7 +4901,7 @@ msgstr "Pedido falhado." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Cannot save response to:" -msgstr "Impossível guardar resposta para:" +msgstr "Não consigo guardar resposta para:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Write error." @@ -5075,8 +5074,8 @@ msgid "" "Save your scene (for images to be saved in the same dir), or pick a save " "path from the BakedLightmap properties." msgstr "" -"Impossível determinar um caminho para guardar imagens lightmap.\n" -"Guarde a sua Cena (para as imagens serem guardadas na mesma diretoria), ou " +"Não consigo determinar um caminho para guardar imagens lightmap.\n" +"Guarde a sua cena (para as imagens serem guardadas na mesma diretoria), ou " "escolha um caminho nas propriedades BakedLightmap." #: editor/plugins/baked_lightmap_editor_plugin.cpp @@ -5194,7 +5193,7 @@ msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Presets for the anchors and margins values of a Control node." -msgstr "Pré-definições para âncoras e margens de um Nó Control." +msgstr "Pré-definições para âncoras e margens de um nó Control." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "" @@ -5490,7 +5489,7 @@ msgstr "Ajustar às Guias" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Lock the selected object in place (can't be moved)." -msgstr "Bloquear a posição do Objeto selecionado (não pode ser movido)." +msgstr "Bloquear a posição do objeto selecionado (não pode ser movido)." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -5639,7 +5638,7 @@ msgstr "A adicionar %s..." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Cannot instantiate multiple nodes without root." -msgstr "Impossível instanciar nós múltiplos sem raiz." +msgstr "Não consigo instanciar nós múltiplos sem raiz." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp @@ -5649,7 +5648,7 @@ msgstr "Criar Nó" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Error instancing scene from %s" -msgstr "Erro a instanciar Cena de %s" +msgstr "Erro a instanciar cena de %s" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Change Default Type" @@ -5660,8 +5659,8 @@ msgid "" "Drag & drop + Shift : Add node as sibling\n" "Drag & drop + Alt : Change node type" msgstr "" -"Arrastar & largar + Shift : Adiciona Nó como irmão\n" -"Arrastar & largar + Alt : Altera o tipo de Nó" +"Arrastar & largar + Shift : Adiciona nó como irmão\n" +"Arrastar & largar + Alt : Altera o tipo de nó" #: editor/plugins/collision_polygon_editor_plugin.cpp msgid "Create Polygon3D" @@ -5848,28 +5847,45 @@ msgid "Mesh is empty!" msgstr "A Malha está vazia!" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Trimesh Body" -msgstr "Criar corpo estático Trimesh" +msgid "Couldn't create a Trimesh collision shape." +msgstr "Não consegui criar uma forma de colisão Trimesh." #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Convex Body" -msgstr "Criar corpo estático convexo" +msgid "Create Static Trimesh Body" +msgstr "Criar corpo estático Trimesh" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "This doesn't work on scene root!" -msgstr "Não funciona na raiz da Cena!" +msgstr "Isto não funciona na raiz da cena!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Static Shape" msgstr "Criar Forma Estática Trimesh" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Failed creating shapes!" -msgstr "Falha na criação de formas!" +msgid "Can't create a single convex collision shape for the scene root." +msgstr "Não consigo criar uma única forma convexa para a raiz da cena." + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Couldn't create a single convex collision shape." +msgstr "Não consegui criar uma forma única de colisão convexa." #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Convex Shape(s)" -msgstr "Criar Forma(s) Convexa(s)" +msgid "Create Single Convex Shape" +msgstr "Criar Forma Convexa Simples" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Can't create multiple convex collision shapes for the scene root." +msgstr "" +"Não consigo criar múltiplas formas de colisão convexas para a raiz da cena." + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Couldn't create any collision shapes." +msgstr "Não consegui criar qualquer forma de colisão." + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Multiple Convex Shapes" +msgstr "Criar Múltiplas Formas Convexas" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Navigation Mesh" @@ -5920,18 +5936,68 @@ msgid "Create Trimesh Static Body" msgstr "Criar corpo estático Trimesh" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a StaticBody and assigns a polygon-based collision shape to it " +"automatically.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" +"Cria um StaticBody e atribui-lhe automaticamente uma forma de colisão " +"baseada em polígonos.\n" +"Esta é a mais precisa (mas mais lenta) opção para deteção de colisão." + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Collision Sibling" -msgstr "Criar irmão de colisão Trimesh" +msgstr "Criar Irmão de Colisão Trimesh" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a polygon-based collision shape.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" +"Cria uma forma de colisão baseada em polígonos.\n" +"Esta é a mais precisa (mas mais lenta) opção para deteção de colisão." + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Single Convex Collision Siblings" +msgstr "Criar Irmãos Únicos de Colisão Convexa" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a single convex collision shape.\n" +"This is the fastest (but least accurate) option for collision detection." +msgstr "" +"Cria uma única forma de colisão convexa.\n" +"Esta é a mais rápida (mas menos precisa) opção para deteção de colisão." #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Convex Collision Sibling(s)" -msgstr "Criar Irmão(s) de Colisão Convexa" +msgid "Create Multiple Convex Collision Siblings" +msgstr "Criar Vários Irmãos de Colisão Convexa" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a polygon-based collision shape.\n" +"This is a performance middle-ground between the two above options." +msgstr "" +"Cria uma forma de colisão baseada em polígonos.\n" +"Esta uma opção de desempenho intermédio entre as duas opções acima." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Outline Mesh..." msgstr "Criar Malha de Contorno..." #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a static outline mesh. The outline mesh will have its normals " +"flipped automatically.\n" +"This can be used instead of the SpatialMaterial Grow property when using " +"that property isn't possible." +msgstr "" +"Cria uma malha de contorno estática. A malha de contorno terá as suas " +"normais automaticamente invertidas.\n" +"Pode ser usada no lugar da propriedade Aumentar de SpatialMaterial quando " +"não é possível usar essa propriedade." + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "View UV1" msgstr "Ver UV1" @@ -5986,11 +6052,11 @@ msgstr "Importar da Cena" #: editor/plugins/mesh_library_editor_plugin.cpp msgid "Update from Scene" -msgstr "Atualizar da Cena" +msgstr "Atualizar a partir da Cena" #: editor/plugins/multimesh_editor_plugin.cpp msgid "No mesh source specified (and no MultiMesh set in node)." -msgstr "Fonte da Malha não especificada (nem MultiMesh no Nó)." +msgstr "Fonte da Malha não especificada (nem MultiMesh no nó)." #: editor/plugins/multimesh_editor_plugin.cpp msgid "No mesh source specified (and MultiMesh contains no Mesh)." @@ -6498,7 +6564,7 @@ msgstr "Sincronizar Ossos com Polígono" #: editor/plugins/resource_preloader_editor_plugin.cpp msgid "ERROR: Couldn't load resource!" -msgstr "ERRO: Não foi possível carregar recurso!" +msgstr "ERRO: Não consegui carregar recurso!" #: editor/plugins/resource_preloader_editor_plugin.cpp msgid "Add Resource" @@ -6568,7 +6634,7 @@ msgstr "Erro ao escrever TextFile:" #: editor/plugins/script_editor_plugin.cpp msgid "Could not load file at:" -msgstr "Impossível carregar ficheiro em:" +msgstr "Não consigo carregar ficheiro em:" #: editor/plugins/script_editor_plugin.cpp msgid "Error saving file!" @@ -6604,7 +6670,7 @@ msgstr "Guardar Ficheiro Como..." #: editor/plugins/script_editor_plugin.cpp msgid "Can't obtain the script for running." -msgstr "Não é possível obter o script para executar." +msgstr "Não consigo obter o script para executar." #: editor/plugins/script_editor_plugin.cpp msgid "Script failed reloading, check console for errors." @@ -6867,7 +6933,7 @@ msgstr "Só podem ser largados recursos do Sistema de Ficheiros ." #: editor/plugins/script_text_editor.cpp #: modules/visual_script/visual_script_editor.cpp msgid "Can't drop nodes because script '%s' is not used in this scene." -msgstr "Impossível largar nós porque o script '%s' não é usado neste cena." +msgstr "Não consigo largar nós porque o script '%s' não é usado neste cena." #: editor/plugins/script_text_editor.cpp msgid "Lookup Symbol" @@ -7040,7 +7106,7 @@ msgstr "Shader" #: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "This skeleton has no bones, create some children Bone2D nodes." -msgstr "Este esqueleto não tem ossos, crie alguns nós Bone2D filhos." +msgstr "Este esqueleto não tem ossos, crie alguns nós filhos Bone2D." #: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Create Rest Pose from Bones" @@ -7216,7 +7282,7 @@ msgstr "Sem parente para criar instância de filho." #: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "This operation requires a single selected node." -msgstr "Esta operação requer um único Nó selecionado." +msgstr "Esta operação requer um único nó selecionado." #: editor/plugins/spatial_editor_plugin.cpp msgid "Lock View Rotation" @@ -7548,7 +7614,7 @@ msgstr "Sprite está vazia!" #: editor/plugins/sprite_editor_plugin.cpp msgid "Can't convert a sprite using animation frames to mesh." -msgstr "Impossível converter sprite com frames de animação para malha." +msgstr "Não consigo converter sprite com frames de animação para malha." #: editor/plugins/sprite_editor_plugin.cpp msgid "Invalid geometry, can't replace by mesh." @@ -7560,7 +7626,7 @@ msgstr "Converter para Mesh2D" #: editor/plugins/sprite_editor_plugin.cpp msgid "Invalid geometry, can't create polygon." -msgstr "Geometria inválida, impossível criar polígono." +msgstr "Geometria inválida, não consigo criar polígono." #: editor/plugins/sprite_editor_plugin.cpp msgid "Convert to Polygon2D" @@ -7568,19 +7634,19 @@ msgstr "Converter para Polygon2D" #: editor/plugins/sprite_editor_plugin.cpp msgid "Invalid geometry, can't create collision polygon." -msgstr "Geometria inválida, impossível criar polígono de colisão." +msgstr "Geometria inválida, não consigo criar polígono de colisão." #: editor/plugins/sprite_editor_plugin.cpp msgid "Create CollisionPolygon2D Sibling" -msgstr "Criar irmão de CollisionPolygon2D" +msgstr "Criar Irmão de CollisionPolygon2D" #: editor/plugins/sprite_editor_plugin.cpp msgid "Invalid geometry, can't create light occluder." -msgstr "Geometria inválida, impossível criar oclusor de luz." +msgstr "Geometria inválida, não consigo criar oclusor de luz." #: editor/plugins/sprite_editor_plugin.cpp msgid "Create LightOccluder2D Sibling" -msgstr "Criar irmão de LightOccluder2D" +msgstr "Criar Irmão de LightOccluder2D" #: editor/plugins/sprite_editor_plugin.cpp msgid "Sprite" @@ -8023,7 +8089,7 @@ msgstr "Criar a partir da Cena" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Merge from Scene" -msgstr "Fundir a partir da Cena" +msgstr "Combinar a partir da Cena" #: editor/plugins/tile_set_editor_plugin.cpp msgid "New Single Tile" @@ -8163,11 +8229,11 @@ msgstr "Não selecionou uma textura para remover." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Create from scene? This will overwrite all current tiles." -msgstr "Criar a partir de cena? Irá substituir todos os Tiles atuais." +msgstr "Criar a partir de cena? Irá substituir todos os tiles atuais." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Merge from scene?" -msgstr "Fundir a partir da Cena?" +msgstr "Combinar a partir da cena?" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Remove Texture" @@ -8335,7 +8401,7 @@ msgstr "TileSet" msgid "No VCS addons are available." msgstr "Não existem addons VCS disponíveis." -#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Error" msgstr "Erro" @@ -9377,7 +9443,7 @@ msgstr "Exportar todos os recursos do Projeto" #: editor/project_export.cpp msgid "Export selected scenes (and dependencies)" -msgstr "Exportar Cenas (e dependências) selecionadas" +msgstr "Exportar cenas (e dependências) selecionadas" #: editor/project_export.cpp msgid "Export selected resources (and dependencies)" @@ -9429,7 +9495,7 @@ msgstr "Personalizado (separados por vírgula):" #: editor/project_export.cpp msgid "Feature List:" -msgstr "Lista de características:" +msgstr "Lista de Características:" #: editor/project_export.cpp msgid "Script" @@ -9496,25 +9562,31 @@ msgid "Export With Debug" msgstr "Exportar com Depuração" #: editor/project_manager.cpp -msgid "The path does not exist." -msgstr "O Caminho não existe." +msgid "The path specified doesn't exist." +msgstr "O caminho especificado não existe." #: editor/project_manager.cpp -msgid "Invalid '.zip' project file, does not contain a 'project.godot' file." +msgid "Error opening package file (it's not in ZIP format)." +msgstr "Erro ao abrir ficheiro comprimido (não está no formato ZIP)." + +#: editor/project_manager.cpp +msgid "" +"Invalid \".zip\" project file; it doesn't contain a \"project.godot\" file." msgstr "" -"Ficheiro de projeto '.zip' inválido, não contém um ficheiro 'project.godot'." +"Ficheiro de projeto \".zip\" inválido, não contém um ficheiro \"project.godot" +"\"." #: editor/project_manager.cpp msgid "Please choose an empty folder." msgstr "Por favor escolha uma pasta vazia." #: editor/project_manager.cpp -msgid "Please choose a 'project.godot' or '.zip' file." -msgstr "Escolha um ficheiro 'project.godot' ou '.zip'." +msgid "Please choose a \"project.godot\" or \".zip\" file." +msgstr "Escolha um ficheiro \"project.godot\" ou \".zip\"." #: editor/project_manager.cpp -msgid "Directory already contains a Godot project." -msgstr "A pasta já contém um projeto Godot." +msgid "This directory already contains a Godot project." +msgstr "Esta diretoria já contém um projeto Godot." #: editor/project_manager.cpp msgid "New Game Project" @@ -9530,7 +9602,7 @@ msgstr "Nome do Projeto Inválido." #: editor/project_manager.cpp msgid "Couldn't create folder." -msgstr "Impossível criar pasta." +msgstr "Não consigo criar pasta." #: editor/project_manager.cpp msgid "There is already a folder in this path with the specified name." @@ -9549,16 +9621,16 @@ msgid "" "Couldn't load project.godot in project path (error %d). It may be missing or " "corrupted." msgstr "" -"Não foi possível carregar o project.godot no caminho do projeto (erro %d). " +"Não consegui carregar o project.godot no caminho do projeto (erro %d). " "Poderá estar em falta ou corrompido." #: editor/project_manager.cpp msgid "Couldn't edit project.godot in project path." -msgstr "Impossível editar project.godot no Caminho do Projeto." +msgstr "Não consigo editar project.godot no caminho do projeto." #: editor/project_manager.cpp msgid "Couldn't create project.godot in project path." -msgstr "Impossível criar project.godot no Caminho do Projeto." +msgstr "Não consigo criar project.godot no caminho do projeto." #: editor/project_manager.cpp msgid "Rename Project" @@ -9639,7 +9711,7 @@ msgstr "" #: editor/project_manager.cpp msgid "Renderer can be changed later, but scenes may need to be adjusted." msgstr "" -"O Renderizador pode ser alterado mais tarde, mas as cenas poderão ter de ser " +"O renderizador pode ser alterado mais tarde, mas as cenas poderão ter de ser " "ajustadas." #: editor/project_manager.cpp @@ -9656,7 +9728,7 @@ msgstr "Erro: Projeto inexistente no sistema de ficheiros." #: editor/project_manager.cpp msgid "Can't open project at '%s'." -msgstr "Impossível abrir Projeto em '%s'." +msgstr "Não consigo abrir projeto em '%s'." #: editor/project_manager.cpp msgid "Are you sure to open more than one project?" @@ -9718,8 +9790,8 @@ msgid "" "Please edit the project and set the main scene in the Project Settings under " "the \"Application\" category." msgstr "" -"Impossível executar o Projeto: Cena principal não definida.\n" -"Edite o Projeto e defina a Cena principal em Definições do Projeto dentro da " +"Não consigo executar o projeto: cena principal não definida.\n" +"Edite o projeto e defina a cena principal em Definições do Projeto dentro da " "categoria \"Aplicação\"." #: editor/project_manager.cpp @@ -9727,8 +9799,8 @@ msgid "" "Can't run project: Assets need to be imported.\n" "Please edit the project to trigger the initial import." msgstr "" -"Impossível executar o Projeto: Ativos têm de ser importados.\n" -"Edite o Projeto para desencadear a importação inicial." +"Não consigo executar o projeto: Ativos têm de ser importados.\n" +"Edite o projeto para desencadear a importação inicial." #: editor/project_manager.cpp msgid "Are you sure to run %d projects at once?" @@ -9813,7 +9885,7 @@ msgstr "Reiniciar agora" #: editor/project_manager.cpp msgid "Can't run project" -msgstr "Impossível executar o Projeto" +msgstr "Não consigo executar o Projeto" #: editor/project_manager.cpp msgid "" @@ -10212,6 +10284,10 @@ msgid "Suffix" msgstr "Sufixo" #: editor/rename_dialog.cpp +msgid "Use Regular Expressions" +msgstr "Usar Expressões Regulares" + +#: editor/rename_dialog.cpp msgid "Advanced Options" msgstr "Opções Avançadas" @@ -10221,15 +10297,15 @@ msgstr "Substituto" #: editor/rename_dialog.cpp msgid "Node name" -msgstr "Nome do Nó" +msgstr "Nome do nó" #: editor/rename_dialog.cpp msgid "Node's parent name, if available" -msgstr "Nome do parente do Nó, se disponível" +msgstr "Nome do parente do nó, se disponível" #: editor/rename_dialog.cpp msgid "Node type" -msgstr "Tipo de Nó" +msgstr "Tipo de nó" #: editor/rename_dialog.cpp msgid "Current scene name" @@ -10237,7 +10313,7 @@ msgstr "Nome da cena atual" #: editor/rename_dialog.cpp msgid "Root node name" -msgstr "Nome do Nó raiz" +msgstr "Nome do nó raiz" #: editor/rename_dialog.cpp msgid "" @@ -10248,7 +10324,7 @@ msgstr "" "Comparar opções do contador." #: editor/rename_dialog.cpp -msgid "Per Level counter" +msgid "Per-level Counter" msgstr "Contador por nível" #: editor/rename_dialog.cpp @@ -10280,10 +10356,6 @@ msgstr "" "Dígitos ausentes são preenchidos com zeros." #: editor/rename_dialog.cpp -msgid "Regular Expressions" -msgstr "Expressões Regulares" - -#: editor/rename_dialog.cpp msgid "Post-Process" msgstr "Pós-processamento" @@ -10292,12 +10364,12 @@ msgid "Keep" msgstr "Manter" #: editor/rename_dialog.cpp -msgid "CamelCase to under_scored" -msgstr "CamelCase para under_scored" +msgid "PascalCase to snake_case" +msgstr "PascalCase para snake_case" #: editor/rename_dialog.cpp -msgid "under_scored to CamelCase" -msgstr "under_scored para CamelCase" +msgid "snake_case to PascalCase" +msgstr "snake_case para PascalCase" #: editor/rename_dialog.cpp msgid "Case" @@ -10315,6 +10387,14 @@ msgstr "Para Maiúsculas" msgid "Reset" msgstr "Repor" +#: editor/rename_dialog.cpp +msgid "Regular Expression Error" +msgstr "Erro em Expressão Regular" + +#: editor/rename_dialog.cpp +msgid "At character %s" +msgstr "No carácter %s" + #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "Recolocar Nó" @@ -10337,35 +10417,35 @@ msgstr "Modo Execução:" #: editor/run_settings_dialog.cpp msgid "Current Scene" -msgstr "Cena atual" +msgstr "Cena Atual" #: editor/run_settings_dialog.cpp msgid "Main Scene" -msgstr "Cena principal" +msgstr "Cena Principal" #: editor/run_settings_dialog.cpp msgid "Main Scene Arguments:" -msgstr "Argumentos da Cena principal:" +msgstr "Argumentos da Cena Principal:" #: editor/run_settings_dialog.cpp msgid "Scene Run Settings" -msgstr "Configurações de execução da Cena" +msgstr "Configurações de Execução da Cena" #: editor/scene_tree_dock.cpp msgid "No parent to instance the scenes at." -msgstr "Nenhum parente para instanciar a Cena." +msgstr "Nenhum parente para instância das cenas." #: editor/scene_tree_dock.cpp msgid "Error loading scene from %s" -msgstr "Erro ao carregar a Cena de %s" +msgstr "Erro ao carregar a cena de %s" #: editor/scene_tree_dock.cpp msgid "" "Cannot instance the scene '%s' because the current scene exists within one " "of its nodes." msgstr "" -"Impossível instanciar a Cena '%s' porque a Cena atual existe dentro de um " -"dos seus Nós." +"Não consigo instanciar a cena '%s' porque a cena atual existe dentro de um " +"dos seus nós." #: editor/scene_tree_dock.cpp msgid "Instance Scene(s)" @@ -10377,7 +10457,7 @@ msgstr "Substituir com Cena-Ramo" #: editor/scene_tree_dock.cpp msgid "Instance Child Scene" -msgstr "Instanciar Cena filha" +msgstr "Instanciar Cena Filha" #: editor/scene_tree_dock.cpp msgid "Clear Script" @@ -10401,15 +10481,16 @@ msgstr "Duplicar Nó(s)" #: editor/scene_tree_dock.cpp msgid "Can't reparent nodes in inherited scenes, order of nodes can't change." -msgstr "Impossível mudar nó em cenas herdadas, a ordem dos nós não pode mudar." +msgstr "" +"Não consigo mudar nó em cenas herdadas, a ordem dos nós não pode mudar." #: editor/scene_tree_dock.cpp msgid "Node must belong to the edited scene to become root." -msgstr "O nó deve pertencer à cena editada para se tornar root." +msgstr "O nó deve pertencer à cena editada para se tornar raiz." #: editor/scene_tree_dock.cpp msgid "Instantiated scenes can't become root" -msgstr "Cenas instantâneas não se podem tornar root" +msgstr "Cenas instanciadas não se podem tornar raízes" #: editor/scene_tree_dock.cpp msgid "Make node as Root" @@ -10417,38 +10498,38 @@ msgstr "Tornar Nó Raiz" #: editor/scene_tree_dock.cpp msgid "Delete %d nodes?" -msgstr "Apagar %d Nós?" +msgstr "Apagar %d nós?" #: editor/scene_tree_dock.cpp msgid "Delete the root node \"%s\"?" -msgstr "Apagar Nó raiz \"%s\"?" +msgstr "Apagar nó raiz \"%s\"?" #: editor/scene_tree_dock.cpp msgid "Delete node \"%s\" and its children?" -msgstr "Apagar Nó \"%s\" e filhos?" +msgstr "Apagar nó \"%s\" e filhos?" #: editor/scene_tree_dock.cpp msgid "Delete node \"%s\"?" -msgstr "Apagar Nó \"%s\"?" +msgstr "Apagar nó \"%s\"?" #: editor/scene_tree_dock.cpp msgid "Can not perform with the root node." -msgstr "Impossível executar com o Nó raiz." +msgstr "Não consigo executar com o nó raiz." #: editor/scene_tree_dock.cpp msgid "This operation can't be done on instanced scenes." -msgstr "Esta operação não pode ser feita numa Cena instanciada." +msgstr "Esta operação não pode ser feita numa cena instanciada." #: editor/scene_tree_dock.cpp msgid "Save New Scene As..." -msgstr "Guardar nova Cena como..." +msgstr "Guardar Nova Cena Como..." #: editor/scene_tree_dock.cpp msgid "" "Disabling \"editable_instance\" will cause all properties of the node to be " "reverted to their default." msgstr "" -"Desativar \"editable_instance\" irá reverter todas as propriedades do Nó " +"Desativar \"editable_instance\" irá reverter todas as propriedades do nó " "para os seus valores padrão." #: editor/scene_tree_dock.cpp @@ -10465,7 +10546,7 @@ msgstr "Tornar Local" #: editor/scene_tree_dock.cpp msgid "New Scene Root" -msgstr "Nova Raiz de Cena" +msgstr "Nova Raiz da Cena" #: editor/scene_tree_dock.cpp msgid "Create Root Node:" @@ -10489,11 +10570,11 @@ msgstr "Outro Nó" #: editor/scene_tree_dock.cpp msgid "Can't operate on nodes from a foreign scene!" -msgstr "Impossível operar em Nós de uma Cena externa!" +msgstr "Não consigo operar em nós de uma cena externa!" #: editor/scene_tree_dock.cpp msgid "Can't operate on nodes the current scene inherits from!" -msgstr "Impossível operar em Nós herdados pela Cena atual!" +msgstr "Não consigo operar em nós herdados pela cena atual!" #: editor/scene_tree_dock.cpp msgid "Attach Script" @@ -10512,16 +10593,16 @@ msgid "" "Couldn't save new scene. Likely dependencies (instances) couldn't be " "satisfied." msgstr "" -"Impossível guardar nova Cena. Provavelmente dependências (instâncias) não " +"Não consigo guardar nova cena. Provavelmente dependências (instâncias) não " "foram satisfeitas." #: editor/scene_tree_dock.cpp msgid "Error saving scene." -msgstr "Erro ao guardar Cena." +msgstr "Erro ao guardar cena." #: editor/scene_tree_dock.cpp msgid "Error duplicating scene to save it." -msgstr "Erro ao duplicar Cena para guardar." +msgstr "Erro ao duplicar cena para guardar." #: editor/scene_tree_dock.cpp msgid "Sub-Resources" @@ -10545,7 +10626,7 @@ msgstr "Abrir documentação" #: editor/scene_tree_dock.cpp msgid "Add Child Node" -msgstr "Adicionar Nó filho" +msgstr "Adicionar Nó Filho" #: editor/scene_tree_dock.cpp msgid "Expand/Collapse All" @@ -10561,15 +10642,15 @@ msgstr "Recolocar o Novo Nó" #: editor/scene_tree_dock.cpp msgid "Make Scene Root" -msgstr "Tornar Nó Raiz" +msgstr "Tornar Raiz da Cena" #: editor/scene_tree_dock.cpp msgid "Merge From Scene" -msgstr "Fundir a partir da Cena" +msgstr "Combinar a partir da Cena" #: editor/scene_tree_dock.cpp editor/script_editor_debugger.cpp msgid "Save Branch as Scene" -msgstr "Guardar ramo como Cena" +msgstr "Guardar Ramo como Cena" #: editor/scene_tree_dock.cpp editor/script_editor_debugger.cpp msgid "Copy Node Path" @@ -10588,16 +10669,16 @@ msgid "" "Instance a scene file as a Node. Creates an inherited scene if no root node " "exists." msgstr "" -"Instanciar Ficheiro de Cena como Nó. Cria uma Cena herdada se não existir Nó " -"raiz." +"Instanciar um ficheiro de cena como um Nó. Cria uma cena herdada se não " +"existir nó raiz." #: editor/scene_tree_dock.cpp msgid "Attach a new or existing script for the selected node." -msgstr "Anexar Script novo ou existente ao Nó selecionado." +msgstr "Anexar script novo ou existente ao nó selecionado." #: editor/scene_tree_dock.cpp msgid "Clear a script for the selected node." -msgstr "Limpar Script do Nó selecionado." +msgstr "Limpar script do nó selecionado." #: editor/scene_tree_dock.cpp msgid "Remote" @@ -10629,7 +10710,7 @@ msgstr "(A Ligar de)" #: editor/scene_tree_editor.cpp msgid "Node configuration warning:" -msgstr "Aviso de configuração do Nó:" +msgstr "Aviso de configuração do nó:" #: editor/scene_tree_editor.cpp msgid "" @@ -10689,7 +10770,7 @@ msgstr "" #: editor/scene_tree_editor.cpp msgid "Invalid node name, the following characters are not allowed:" -msgstr "Nome de Nó inválido, os carateres seguintes não são permitidos:" +msgstr "Nome de nó inválido, os caracteres seguintes não são permitidos:" #: editor/scene_tree_editor.cpp msgid "Rename Node" @@ -10701,7 +10782,7 @@ msgstr "Árvore de Cena (Nós):" #: editor/scene_tree_editor.cpp msgid "Node Configuration Warning!" -msgstr "Aviso de configuração de Nó!" +msgstr "Aviso de Configuração de Nó!" #: editor/scene_tree_editor.cpp msgid "Select a Node" @@ -10741,7 +10822,7 @@ msgstr "Erro ao carregar Modelo '%s'" #: editor/script_create_dialog.cpp msgid "Error - Could not create script in filesystem." -msgstr "Erro - Impossível criar Script no Sistema de Ficheiros." +msgstr "Erro - Não consigo criar script no sistema de ficheiros." #: editor/script_create_dialog.cpp msgid "Error loading script from %s" @@ -10776,8 +10857,8 @@ msgid "Invalid inherited parent name or path." msgstr "Nome ou Caminho de parente herdado inválido." #: editor/script_create_dialog.cpp -msgid "Script is valid." -msgstr "Script é válido." +msgid "Script path/name is valid." +msgstr "Caminho/nome de Script é válido." #: editor/script_create_dialog.cpp msgid "Allowed: a-z, A-Z, 0-9, _ and ." @@ -10868,6 +10949,10 @@ msgid "Copy Error" msgstr "Copiar Erro" #: editor/script_editor_debugger.cpp +msgid "Video RAM" +msgstr "Memória Vídeo" + +#: editor/script_editor_debugger.cpp msgid "Skip Breakpoints" msgstr "Saltar Pontos de Paragem" @@ -10916,10 +11001,6 @@ msgid "Total:" msgstr "Total:" #: editor/script_editor_debugger.cpp -msgid "Video Mem" -msgstr "Memória Vídeo" - -#: editor/script_editor_debugger.cpp msgid "Resource Path" msgstr "Caminho do recurso" @@ -10949,7 +11030,7 @@ msgstr "Tipo de controlo clicado:" #: editor/script_editor_debugger.cpp msgid "Live Edit Root:" -msgstr "Raiz de edição ao vivo:" +msgstr "Raiz de Edição ao Vivo:" #: editor/script_editor_debugger.cpp msgid "Set From Tree" @@ -11134,8 +11215,8 @@ msgstr "Formato de dicionário de instância inválido (falta @path)" #: modules/gdscript/gdscript_functions.cpp msgid "Invalid instance dictionary format (can't load script at @path)" msgstr "" -"Formato de dicionário de instância inválido (não foi possível carregar o " -"Script em @path)" +"Formato de dicionário de instância inválido (não consigo carregar o script " +"em @path)" #: modules/gdscript/gdscript_functions.cpp msgid "Invalid instance dictionary format (invalid script at @path)" @@ -11350,7 +11431,7 @@ msgid "" "A node yielded without working memory, please read the docs on how to yield " "properly!" msgstr "" -"Um Nó fez yield sem memória para usar, por favor leia os documentos para " +"Um nó fez yield sem memória para usar, por favor leia os documentos para " "saber como fazer yield corretamente!" #: modules/visual_script/visual_script.cpp @@ -11358,7 +11439,7 @@ msgid "" "Node yielded, but did not return a function state in the first working " "memory." msgstr "" -"O Nó fez yield, mas não retornou um estado de Função na primeira memória de " +"O nó fez yield, mas não retornou um estado de função na primeira memória de " "trabalho." #: modules/visual_script/visual_script.cpp @@ -11367,15 +11448,15 @@ msgid "" "your node please." msgstr "" "O valor de retorno deve ser atribuído ao primeiro elemento da memória de " -"trabalho de Nós! Corrija o seu Nó por favor." +"trabalho de nós! Corrija o seu nó por favor." #: modules/visual_script/visual_script.cpp msgid "Node returned an invalid sequence output: " -msgstr "O Nó retornou uma sequência de saída (output) incorreta: " +msgstr "O nó retornou uma sequência de saída (output) incorreta: " #: modules/visual_script/visual_script.cpp msgid "Found sequence bit but not the node in the stack, report bug!" -msgstr "Foi encontrada o bit da sequência mas não o Nó na pilha, relate o bug!" +msgstr "Foi encontrada o bit da sequência mas não o nó na pilha, relate o bug!" #: modules/visual_script/visual_script.cpp msgid "Stack overflow with stack depth: " @@ -11503,11 +11584,11 @@ msgstr "" #: modules/visual_script/visual_script_editor.cpp msgid "Hold %s to drop a simple reference to the node." -msgstr "Pressione %s para largar uma referência simples no Nó." +msgstr "Pressione %s para largar uma referência simples no nó." #: modules/visual_script/visual_script_editor.cpp msgid "Hold Ctrl to drop a simple reference to the node." -msgstr "Pressione Ctrl para largar uma referência simples no Nó." +msgstr "Pressione Ctrl para largar uma referência simples no nó." #: modules/visual_script/visual_script_editor.cpp msgid "Hold %s to drop a Variable Setter." @@ -11515,7 +11596,7 @@ msgstr "Pressione %s para largar um Setter variável." #: modules/visual_script/visual_script_editor.cpp msgid "Hold Ctrl to drop a Variable Setter." -msgstr "Pressione Ctrl para largar um Setter variável." +msgstr "Pressione Ctrl para largar um Setter Variável." #: modules/visual_script/visual_script_editor.cpp msgid "Add Preload Node" @@ -11523,14 +11604,15 @@ msgstr "Adicionar Nó de Pré-carregamento" #: modules/visual_script/visual_script_editor.cpp msgid "Add Node(s) From Tree" -msgstr "Adicionar Nó da Árvore" +msgstr "Adicionar Nó(s) da Árvore" #: modules/visual_script/visual_script_editor.cpp msgid "" "Can't drop properties because script '%s' is not used in this scene.\n" "Drop holding 'Shift' to just copy the signature." msgstr "" -"Impossível largar propriedades porque o script '%s' não é usado neste cena.\n" +"Não consigo largar propriedades porque o script '%s' não é usado neste " +"cena.\n" "Largue com 'Shift' para copiar apenas a assinatura." #: modules/visual_script/visual_script_editor.cpp @@ -11563,11 +11645,11 @@ msgstr "Desconectar Nós" #: modules/visual_script/visual_script_editor.cpp msgid "Connect Node Data" -msgstr "Conectar Dados de Nó" +msgstr "Conectar Dados do Nó" #: modules/visual_script/visual_script_editor.cpp msgid "Connect Node Sequence" -msgstr "Conectar Sequência de Nós" +msgstr "Conectar Sequência do Nó" #: modules/visual_script/visual_script_editor.cpp msgid "Script already has function '%s'" @@ -11583,7 +11665,7 @@ msgstr "Redimensionar Comentário" #: modules/visual_script/visual_script_editor.cpp msgid "Can't copy the function node." -msgstr "Impossível copiar o Nó Função." +msgstr "Não consigo copiar o nó função." #: modules/visual_script/visual_script_editor.cpp msgid "Clipboard is empty!" @@ -11595,11 +11677,11 @@ msgstr "Colar Nós VisualScript" #: modules/visual_script/visual_script_editor.cpp msgid "Can't create function with a function node." -msgstr "Impossível criar função com um nó função." +msgstr "Não consigo criar função com um nó função." #: modules/visual_script/visual_script_editor.cpp msgid "Can't create function of nodes from nodes of multiple functions." -msgstr "Impossível criar função de nós com nós de várias funções." +msgstr "Não consigo criar função de nós a partir de nós de várias funções." #: modules/visual_script/visual_script_editor.cpp msgid "Select at least one node with sequence port." @@ -11715,7 +11797,7 @@ msgstr "Caminho não conduz Nó!" #: modules/visual_script/visual_script_func_nodes.cpp msgid "Invalid index property name '%s' in node %s." -msgstr "Nome de Propriedade índice '%s' inválido em Nó %s." +msgstr "Nome de propriedade índice '%s' inválido no nó %s." #: modules/visual_script/visual_script_nodes.cpp msgid ": Invalid argument of type: " @@ -11735,15 +11817,16 @@ msgstr "VariableSet não encontrado no script: " #: modules/visual_script/visual_script_nodes.cpp msgid "Custom node has no _step() method, can't process graph." -msgstr "Impossível processar gráfico, Nó personalizado sem método _step()." +msgstr "" +"Nó personalizado não tem método _step(), não podendo processar um gráfico." #: modules/visual_script/visual_script_nodes.cpp msgid "" "Invalid return value from _step(), must be integer (seq out), or string " "(error)." msgstr "" -"Valor de retorno de _step() inválido, tem de ser inteiro (seq out), ou " -"string (error)." +"Retorno de valor inválido a partir do _step(), tem de ser inteiro (seq out), " +"ou string (error)." #: modules/visual_script/visual_script_property_selector.cpp msgid "Search VisualScript" @@ -11768,15 +11851,16 @@ msgstr "Os segmentos de pacote devem ser de comprimento diferente de zero." #: platform/android/export/export.cpp msgid "The character '%s' is not allowed in Android application package names." msgstr "" -"O caráter '%s' não é permitido em nomes de pacotes de aplicações Android." +"O carácter '%s' não é permitido em nomes de pacotes de aplicações Android." #: platform/android/export/export.cpp msgid "A digit cannot be the first character in a package segment." -msgstr "Um dígito não pode ser o primeiro caráter num segmento de pacote." +msgstr "Um dígito não pode ser o primeiro carácter num segmento de pacote." #: platform/android/export/export.cpp msgid "The character '%s' cannot be the first character in a package segment." -msgstr "O caráter '%s' não pode ser o primeiro caráter num segmento de pacote." +msgstr "" +"O carácter '%s' não pode ser o primeiro carácter num segmento de pacote." #: platform/android/export/export.cpp msgid "The package must have at least one '.' separator." @@ -11871,13 +11955,13 @@ msgstr "Falta o identificador." #: platform/iphone/export/export.cpp msgid "The character '%s' is not allowed in Identifier." -msgstr "O caráter \"%s\" não é permitido no Identificador." +msgstr "O carácter \"%s\" não é permitido no Identificador." #: platform/iphone/export/export.cpp msgid "App Store Team ID not specified - cannot configure the project." msgstr "" -"ID da equipa da App Store não especificado - não é possível configurar o " -"projecto." +"ID da equipa da App Store não especificado - não consigo configurar o " +"projeto." #: platform/iphone/export/export.cpp msgid "Invalid Identifier:" @@ -11901,11 +11985,11 @@ msgstr "Executar HTML exportado no Navegador padrão do sistema." #: platform/javascript/export/export.cpp msgid "Could not write file:" -msgstr "Impossível escrever Ficheiro:" +msgstr "Não consigo escrever ficheiro:" #: platform/javascript/export/export.cpp msgid "Could not open template for export:" -msgstr "Impossível abrir Modelo para exportar:" +msgstr "Não consigo abrir modelo para exportação:" #: platform/javascript/export/export.cpp msgid "Invalid export template:" @@ -11913,11 +11997,11 @@ msgstr "Modelo de exportação inválido:" #: platform/javascript/export/export.cpp msgid "Could not read custom HTML shell:" -msgstr "Impossível ler Shell HTML personalizado:" +msgstr "Não consigo ler shell HTML personalizado:" #: platform/javascript/export/export.cpp msgid "Could not read boot splash image file:" -msgstr "Impossível ler Ficheiro de imagem do ecrã de inicialização:" +msgstr "Não consigo ler ficheiro de imagem do ecrã de inicialização:" #: platform/javascript/export/export.cpp msgid "Using default boot splash image." @@ -12004,8 +12088,7 @@ msgid "" "Consider adding a CollisionShape2D or CollisionPolygon2D as a child to " "define its shape." msgstr "" -"Este nó não tem forma, não conseguindo assim colidir ou interagir com outros " -"objetos.\n" +"Este nó não tem forma, não podendo colidir ou interagir com outros objetos.\n" "Considere adicionar nós CollisionShape2D ou CollisionPolygon2D como filhos " "para definir a sua forma." @@ -12015,7 +12098,7 @@ msgid "" "CollisionObject2D derived node. Please only use it as a child of Area2D, " "StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape." msgstr "" -"CollisionPolygon2D serve apenas para fornecer uma forma de colisão a um Nó " +"CollisionPolygon2D serve apenas para fornecer uma forma de colisão a um nó " "derivado de CollisionObject2D. Use-o apenas como um filho de Area2D, " "StaticBody2D, RigidBody2D, KinematicBody2D, etc. para lhes dar uma forma." @@ -12029,7 +12112,7 @@ msgid "" "CollisionObject2D derived node. Please only use it as a child of Area2D, " "StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape." msgstr "" -"CollisionShape2D serve apenas para fornecer uma forma de colisão a um Nó " +"CollisionShape2D serve apenas para fornecer uma forma de colisão a um nó " "derivado de CollisionObject2D. Use-o apenas como um filho de Area2D, " "StaticBody2D, RigidBody2D, KinematicBody2D, etc. para lhes dar uma forma." @@ -12073,22 +12156,22 @@ msgid "" "A NavigationPolygon resource must be set or created for this node to work. " "Please set a property or draw a polygon." msgstr "" -"Um recurso NavigationPolygon tem de ser definido ou criado para este Nó " -"funcionar. Defina a Propriedade ou desenhe o Polígono." +"Um recurso NavigationPolygon tem de ser definido ou criado para este nó " +"funcionar. Defina a propriedade ou desenhe o polígono." #: scene/2d/navigation_polygon.cpp msgid "" "NavigationPolygonInstance must be a child or grandchild to a Navigation2D " "node. It only provides navigation data." msgstr "" -"NavigationPolygonInstance tem de ser filho ou neto de um Nó Navigation2D. " +"NavigationPolygonInstance tem de ser filho ou neto de um nó Navigation2D. " "Apenas fornece dados de navegação." #: scene/2d/parallax_layer.cpp msgid "" "ParallaxLayer node only works when set as child of a ParallaxBackground node." msgstr "" -"O Nó ParallaxLayer só funciona quando definido como filho de um Nó " +"O nó ParallaxLayer só funciona quando definido como filho de um nó " "ParallaxBackground." #: scene/2d/particles_2d.cpp @@ -12098,7 +12181,7 @@ msgid "" "CPUParticles\" option for this purpose." msgstr "" "Partículas baseadas em GPU não são suportadas pelo driver de vídeo GLES2.\n" -"Use o Nó CPUParticles2D. Pode usar a opção \"Converter em CPUParticles\" " +"Use o nó CPUParticles2D. Pode usar a opção \"Converter em CPUParticles\" " "para este efeito." #: scene/2d/particles_2d.cpp scene/3d/particles.cpp @@ -12120,7 +12203,7 @@ msgstr "" #: scene/2d/path_2d.cpp msgid "PathFollow2D only works when set as a child of a Path2D node." msgstr "" -"PathFollow2D apenas funciona quando definido como filho de um Nó Path2D." +"PathFollow2D apenas funciona quando definido como filho de um nó Path2D." #: scene/2d/physics_body_2d.cpp msgid "" @@ -12128,14 +12211,14 @@ msgid "" "by the physics engine when running.\n" "Change the size in children collision shapes instead." msgstr "" -"Mudanças no tamanho do RigidBody2D (em modos caráter ou rígido) serão " +"Mudanças no tamanho do RigidBody2D (em modos carácter ou rígido) serão " "reescritas pelo motor de física na execução.\n" "Mude antes o tamanho das formas de colisão filhas." #: scene/2d/remote_transform_2d.cpp msgid "Path property must point to a valid Node2D node to work." msgstr "" -"Para funcionar, a Propriedade Caminho tem de apontar para um Nó Node2D " +"Para funcionar, a Propriedade Caminho tem de apontar para um nó Node2D " "válido." #: scene/2d/skeleton_2d.cpp @@ -12167,15 +12250,15 @@ msgid "" "as parent." msgstr "" "VisibilityEnabler2D funciona melhor quando usado diretamente como parente na " -"Cena raiz editada." +"cena raiz editada." #: scene/3d/arvr_nodes.cpp msgid "ARVRCamera must have an ARVROrigin node as its parent." -msgstr "ARVRCamera precisa de um Nó ARVROrigin como parente." +msgstr "ARVRCamera precisa de um nó ARVROrigin como parente." #: scene/3d/arvr_nodes.cpp msgid "ARVRController must have an ARVROrigin node as its parent." -msgstr "ARVRController precisa de um Nó ARVROrigin como parente." +msgstr "ARVRController precisa de um nó ARVROrigin como parente." #: scene/3d/arvr_nodes.cpp msgid "" @@ -12187,7 +12270,7 @@ msgstr "" #: scene/3d/arvr_nodes.cpp msgid "ARVRAnchor must have an ARVROrigin node as its parent." -msgstr "ARVRAnchor precisa de um Nó ARVROrigin como parente." +msgstr "ARVRAnchor precisa de um nó ARVROrigin como parente." #: scene/3d/arvr_nodes.cpp msgid "" @@ -12199,7 +12282,7 @@ msgstr "" #: scene/3d/arvr_nodes.cpp msgid "ARVROrigin requires an ARVRCamera child node." -msgstr "ARVROrigin exige um Nó filho ARVRCamera." +msgstr "ARVROrigin exige um nó filho ARVRCamera." #: scene/3d/baked_lightmap.cpp msgid "%d%%" @@ -12231,8 +12314,7 @@ msgid "" "Consider adding a CollisionShape or CollisionPolygon as a child to define " "its shape." msgstr "" -"Este nó não tem forma, não conseguindo assim colidir ou interagir com outros " -"objetos.\n" +"Este nó não tem forma, não podendo colidir ou interagir com outros objetos.\n" "Considere adicionar nós CollisionShape ou CollisionPolygon como filhos para " "definir a sua forma." @@ -12242,7 +12324,7 @@ msgid "" "CollisionObject derived node. Please only use it as a child of Area, " "StaticBody, RigidBody, KinematicBody, etc. to give them a shape." msgstr "" -"CollisionPolygon serve apenas para fornecer uma forma de colisão a um Nó " +"CollisionPolygon serve apenas para fornecer uma forma de colisão a um nó " "derivado de CollisionObject. Use-o apenas como um filho de Area, StaticBody, " "RigidBody, KinematicBody, etc. para lhes dar uma forma." @@ -12256,7 +12338,7 @@ msgid "" "derived node. Please only use it as a child of Area, StaticBody, RigidBody, " "KinematicBody, etc. to give them a shape." msgstr "" -"CollisionShape serve apenas para fornecer uma forma de colisão a um Nó " +"CollisionShape serve apenas para fornecer uma forma de colisão a um nó " "derivado de CollisionObject. Use-o apenas como um filho de Area, StaticBody, " "RigidBody, KinematicBody, etc. para lhes dar uma forma." @@ -12307,7 +12389,7 @@ msgstr "Uma SpotLight com ângulo superior a 90 graus não cria sombras." #: scene/3d/navigation_mesh.cpp msgid "A NavigationMesh resource must be set or created for this node to work." msgstr "" -"Um recurso NavigationMesh tem de ser definido ou criado para este Nó " +"Um recurso NavigationMesh tem de ser definido ou criado para este nó " "funcionar." #: scene/3d/navigation_mesh.cpp @@ -12315,7 +12397,7 @@ msgid "" "NavigationMeshInstance must be a child or grandchild to a Navigation node. " "It only provides navigation data." msgstr "" -"NavigationMeshInstance tem de ser filho ou neto de um Nó Navigation. Apenas " +"NavigationMeshInstance tem de ser filho ou neto de um nó Navigation. Apenas " "fornece dados de navegação." #: scene/3d/particles.cpp @@ -12325,7 +12407,7 @@ msgid "" "\" option for this purpose." msgstr "" "Partículas baseadas em GPU não são suportadas pelo driver de vídeo GLES2.\n" -"Use o Nó CPUParticles. Pode usar a opção \"Converter em CPUParticles\" para " +"Use o nó CPUParticles. Pode usar a opção \"Converter em CPUParticles\" para " "este efeito." #: scene/3d/particles.cpp @@ -12344,7 +12426,7 @@ msgstr "" #: scene/3d/path.cpp msgid "PathFollow only works when set as a child of a Path node." -msgstr "PathFollow apenas funciona quando definido como filho de um Nó Path." +msgstr "PathFollow apenas funciona quando definido como filho de um nó Path." #: scene/3d/path.cpp msgid "" @@ -12360,7 +12442,7 @@ msgid "" "by the physics engine when running.\n" "Change the size in children collision shapes instead." msgstr "" -"Mudanças no tamanho do RigidBody (em modos caráter ou rígido) serão " +"Mudanças no tamanho do RigidBody (em modos carácter ou rígido) serão " "reescritas pelo motor de física na execução.\n" "Mude antes o tamanho das formas de colisão filhas." @@ -12369,7 +12451,7 @@ msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" "derived node to work." msgstr "" -"Para funcionar, a Propriedade \"Caminho Remoto\" tem de apontar para um Nó " +"Para funcionar, a Propriedade \"Caminho Remoto\" tem de apontar para um nó " "Spatial válido ou seu derivado." #: scene/3d/soft_body.cpp @@ -12414,7 +12496,7 @@ msgstr "" msgid "" "Only one WorldEnvironment is allowed per scene (or set of instanced scenes)." msgstr "" -"Apenas um WorldEnvironment é permitido por Cena (ou grupo de cenas " +"Apenas um WorldEnvironment é permitido por cena (ou grupo de cenas " "instanciadas)." #: scene/3d/world_environment.cpp @@ -12447,7 +12529,7 @@ msgstr "Nada conectado à entrada '%s' do nó '%s'." #: scene/animation/animation_tree.cpp msgid "No root AnimationNode for the graph is set." -msgstr "Não foi definida uma raíz AnimationNode para o gráfico." +msgstr "Não foi definida uma raiz AnimationNode para o gráfico." #: scene/animation/animation_tree.cpp msgid "Path to an AnimationPlayer node containing animations is not set." @@ -12461,11 +12543,11 @@ msgstr "" #: scene/animation/animation_tree.cpp msgid "The AnimationPlayer root node is not a valid node." -msgstr "O Nó raiz de AnimationPlayer não é um Nó válido." +msgstr "O nó raiz de AnimationPlayer não é um nó válido." #: scene/animation/animation_tree_player.cpp msgid "This node has been deprecated. Use AnimationTree instead." -msgstr "Este nó foi depreciado. Use AnimationTree em vez disso." +msgstr "Este nó foi descontinuado. Use antes AnimationTree." #: scene/gui/color_picker.cpp msgid "" @@ -12505,7 +12587,7 @@ msgid "" msgstr "" "Por si só um Contentor não tem utilidade, a não ser que um script configure " "a disposição dos seu filhos.\n" -"Se não pretende adicionar um script, use antes um simples Nó Control." +"Se não pretende adicionar um script, use antes um simples nó Control." #: scene/gui/control.cpp msgid "" @@ -12570,7 +12652,7 @@ msgstr "" "Esta vista não está definida como alvo de Renderização. Se pretende " "apresentar o seu conteúdo diretamente no ecrã, torne-a um filho de um " "Control de modo a que obtenha um tamanho. Caso contrário, torne-a um " -"RenderTarget e atribua a sua textura interna a outro Nó para visualizar." +"RenderTarget e atribua a sua textura interna a outro nó para visualizar." #: scene/resources/visual_shader_nodes.cpp msgid "Invalid source for preview." @@ -12600,6 +12682,15 @@ msgstr "Variações só podem ser atribuídas na função vértice." msgid "Constants cannot be modified." msgstr "Constantes não podem ser modificadas." +#~ msgid "Replaced %d occurrence(s)." +#~ msgstr "Substituído %d ocorrência(s)." + +#~ msgid "Create Static Convex Body" +#~ msgstr "Criar corpo estático convexo" + +#~ msgid "Failed creating shapes!" +#~ msgstr "Falha na criação de formas!" + #~ msgid "" #~ "There are currently no tutorials for this class, you can [color=$color]" #~ "[url=$url]contribute one[/url][/color] or [color=$color][url=" diff --git a/editor/translations/ro.po b/editor/translations/ro.po index e73e0c1703..7bd5c90156 100644 --- a/editor/translations/ro.po +++ b/editor/translations/ro.po @@ -679,8 +679,9 @@ msgid "Line Number:" msgstr "Linia Numărul:" #: editor/code_editor.cpp -msgid "Replaced %d occurrence(s)." -msgstr "Înlocuit %d potriviri." +#, fuzzy +msgid "%d replaced." +msgstr "Înlocuiți" #: editor/code_editor.cpp editor/editor_help.cpp msgid "%d match." @@ -3995,6 +3996,11 @@ msgid "Saving..." msgstr "Se Salvează..." #: editor/import_dock.cpp +#, fuzzy +msgid "%d Files" +msgstr " Fișiere" + +#: editor/import_dock.cpp msgid "Set as Default for '%s'" msgstr "Setează ca Implicit pentru '%s'" @@ -4003,10 +4009,6 @@ msgid "Clear Default for '%s'" msgstr "Curăță setarea Implicită pentru '%s'" #: editor/import_dock.cpp -msgid " Files" -msgstr " Fișiere" - -#: editor/import_dock.cpp msgid "Import As:" msgstr "Importă Ca:" @@ -5999,12 +6001,13 @@ msgid "Mesh is empty!" msgstr "Mesh-ul este gol!" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Trimesh Body" -msgstr "Creează un Corp Static Trimesh" +#, fuzzy +msgid "Couldn't create a Trimesh collision shape." +msgstr "Creează un Frate de Coliziune Trimesh" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Convex Body" -msgstr "Creează un Corp Static Convex" +msgid "Create Static Trimesh Body" +msgstr "Creează un Corp Static Trimesh" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "This doesn't work on scene root!" @@ -6016,12 +6019,30 @@ msgid "Create Trimesh Static Shape" msgstr "Creează o Formă Trimesh" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Failed creating shapes!" +msgid "Can't create a single convex collision shape for the scene root." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Couldn't create a single convex collision shape." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp #, fuzzy -msgid "Create Convex Shape(s)" +msgid "Create Single Convex Shape" +msgstr "Creează o Formă Convexă" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Can't create multiple convex collision shapes for the scene root." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Couldn't create any collision shapes." +msgstr "Nu s-a putut creea un contur!" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Create Multiple Convex Shapes" msgstr "Creează o Formă Convexă" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -6073,19 +6094,57 @@ msgid "Create Trimesh Static Body" msgstr "Creează un Corp Static Trimesh" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a StaticBody and assigns a polygon-based collision shape to it " +"automatically.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Collision Sibling" msgstr "Creează un Frate de Coliziune Trimesh" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a polygon-based collision shape.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp #, fuzzy -msgid "Create Convex Collision Sibling(s)" +msgid "Create Single Convex Collision Siblings" msgstr "Creează un Frate de Coliziune Convex" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a single convex collision shape.\n" +"This is the fastest (but least accurate) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Create Multiple Convex Collision Siblings" +msgstr "Creează un Frate de Coliziune Convex" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a polygon-based collision shape.\n" +"This is a performance middle-ground between the two above options." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Outline Mesh..." msgstr "Se Creează un Mesh de Contur..." #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a static outline mesh. The outline mesh will have its normals " +"flipped automatically.\n" +"This can be used instead of the SpatialMaterial Grow property when using " +"that property isn't possible." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "View UV1" msgstr "Vizionare UV1" @@ -8613,7 +8672,7 @@ msgstr "Set_de_Plăci..." msgid "No VCS addons are available." msgstr "" -#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Error" msgstr "" @@ -9746,11 +9805,18 @@ msgid "Export With Debug" msgstr "" #: editor/project_manager.cpp -msgid "The path does not exist." -msgstr "" +#, fuzzy +msgid "The path specified doesn't exist." +msgstr "Fișierul nu există." + +#: editor/project_manager.cpp +#, fuzzy +msgid "Error opening package file (it's not in ZIP format)." +msgstr "Eroare la deschiderea fişierului pachet, nu este în format ZIP." #: editor/project_manager.cpp -msgid "Invalid '.zip' project file, does not contain a 'project.godot' file." +msgid "" +"Invalid \".zip\" project file; it doesn't contain a \"project.godot\" file." msgstr "" #: editor/project_manager.cpp @@ -9758,11 +9824,11 @@ msgid "Please choose an empty folder." msgstr "" #: editor/project_manager.cpp -msgid "Please choose a 'project.godot' or '.zip' file." +msgid "Please choose a \"project.godot\" or \".zip\" file." msgstr "" #: editor/project_manager.cpp -msgid "Directory already contains a Godot project." +msgid "This directory already contains a Godot project." msgstr "" #: editor/project_manager.cpp @@ -10430,6 +10496,11 @@ msgstr "" #: editor/rename_dialog.cpp #, fuzzy +msgid "Use Regular Expressions" +msgstr "Versiune Curentă:" + +#: editor/rename_dialog.cpp +#, fuzzy msgid "Advanced Options" msgstr "Opțiuni Snapping" @@ -10468,7 +10539,7 @@ msgid "" msgstr "" #: editor/rename_dialog.cpp -msgid "Per Level counter" +msgid "Per-level Counter" msgstr "" #: editor/rename_dialog.cpp @@ -10499,10 +10570,6 @@ msgid "" msgstr "" #: editor/rename_dialog.cpp -msgid "Regular Expressions" -msgstr "" - -#: editor/rename_dialog.cpp msgid "Post-Process" msgstr "" @@ -10511,11 +10578,11 @@ msgid "Keep" msgstr "" #: editor/rename_dialog.cpp -msgid "CamelCase to under_scored" +msgid "PascalCase to snake_case" msgstr "" #: editor/rename_dialog.cpp -msgid "under_scored to CamelCase" +msgid "snake_case to PascalCase" msgstr "" #: editor/rename_dialog.cpp @@ -10535,6 +10602,15 @@ msgstr "" msgid "Reset" msgstr "Resetați Zoom-area" +#: editor/rename_dialog.cpp +msgid "Regular Expression Error" +msgstr "" + +#: editor/rename_dialog.cpp +#, fuzzy +msgid "At character %s" +msgstr "Caractere valide:" + #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "" @@ -11003,7 +11079,7 @@ msgstr "" #: editor/script_create_dialog.cpp #, fuzzy -msgid "Script is valid." +msgid "Script path/name is valid." msgstr "Arborele Animației este valid." #: editor/script_create_dialog.cpp @@ -11109,6 +11185,10 @@ msgid "Copy Error" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Video RAM" +msgstr "" + +#: editor/script_editor_debugger.cpp #, fuzzy msgid "Skip Breakpoints" msgstr "Șterge puncte" @@ -11158,10 +11238,6 @@ msgid "Total:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Video Mem" -msgstr "" - -#: editor/script_editor_debugger.cpp msgid "Resource Path" msgstr "" @@ -12726,6 +12802,12 @@ msgstr "" msgid "Constants cannot be modified." msgstr "" +#~ msgid "Replaced %d occurrence(s)." +#~ msgstr "Înlocuit %d potriviri." + +#~ msgid "Create Static Convex Body" +#~ msgstr "Creează un Corp Static Convex" + #~ msgid "" #~ "There are currently no tutorials for this class, you can [color=$color]" #~ "[url=$url]contribute one[/url][/color] or [color=$color][url=" diff --git a/editor/translations/ru.po b/editor/translations/ru.po index 9c56393ae8..d4efabc2cd 100644 --- a/editor/translations/ru.po +++ b/editor/translations/ru.po @@ -62,12 +62,14 @@ # Rei <clxgamer12@gmail.com>, 2019. # Vitaly <arkology11@gmail.com>, 2019. # Andy <8ofproject@gmail.com>, 2020. +# Андрей Беляков <andbelandantrus@gmail.com>, 2020. +# Artur Tretiak <stikyt@protonmail.com>, 2020. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2020-01-27 07:10+0000\n" -"Last-Translator: Danil Alexeev <danil@alexeev.xyz>\n" +"PO-Revision-Date: 2020-02-14 03:18+0000\n" +"Last-Translator: Artur Tretiak <stikyt@protonmail.com>\n" "Language-Team: Russian <https://hosted.weblate.org/projects/godot-engine/" "godot/ru/>\n" "Language: ru\n" @@ -223,9 +225,8 @@ msgid "Anim Multi Change Keyframe Time" msgstr "Время смены ключевых кадров анимации" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Multi Change Transition" -msgstr "Анимация Многократное изменение Переход" +msgstr "Многократное изменение перехода" #: editor/animation_track_editor.cpp #, fuzzy @@ -233,9 +234,8 @@ msgid "Anim Multi Change Transform" msgstr "Анимационное многосменное преобразование" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Multi Change Keyframe Value" -msgstr "Анимация многократное изменение ключевых кадров Значение" +msgstr "Изменить значение ключевого кадра" #: editor/animation_track_editor.cpp msgid "Anim Multi Change Call" @@ -479,7 +479,6 @@ msgid "Not possible to add a new track without a root" msgstr "Нельзя добавить новый трек без корневого узла" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Invalid track for Bezier (no suitable sub-properties)" msgstr "Неверный трек для кривой Безье (нет подходящих подсвойств)" @@ -749,8 +748,9 @@ msgid "Line Number:" msgstr "Номер строки:" #: editor/code_editor.cpp -msgid "Replaced %d occurrence(s)." -msgstr "Заменено %d совпадений." +#, fuzzy +msgid "%d replaced." +msgstr "Заменить..." #: editor/code_editor.cpp editor/editor_help.cpp msgid "%d match." @@ -2007,14 +2007,12 @@ msgid "Properties" msgstr "Свойства" #: editor/editor_help.cpp -#, fuzzy msgid "override:" -msgstr "Переопределить" +msgstr "Переопределить:" #: editor/editor_help.cpp -#, fuzzy msgid "default:" -msgstr "По умолчанию" +msgstr "По умолчанию:" #: editor/editor_help.cpp msgid "Methods" @@ -2037,9 +2035,8 @@ msgid "Property Descriptions" msgstr "Описание свойств" #: editor/editor_help.cpp -#, fuzzy msgid "(value)" -msgstr "Значение" +msgstr "(значение)" #: editor/editor_help.cpp msgid "" @@ -4016,6 +4013,11 @@ msgid "Saving..." msgstr "Сохранение..." #: editor/import_dock.cpp +#, fuzzy +msgid "%d Files" +msgstr " Файлы" + +#: editor/import_dock.cpp msgid "Set as Default for '%s'" msgstr "Установить по умолчанию для '%s'" @@ -4024,10 +4026,6 @@ msgid "Clear Default for '%s'" msgstr "Очистить по умолчанию для '%s'" #: editor/import_dock.cpp -msgid " Files" -msgstr " Файлы" - -#: editor/import_dock.cpp msgid "Import As:" msgstr "Импортировать как:" @@ -5613,9 +5611,8 @@ msgid "Frame Selection" msgstr "Кадрировать выбранное" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Preview Canvas Scale" -msgstr "Предпросмотр масштаба холста" +msgstr "Масштаб при просмотре холста" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Translation mask for inserting keys." @@ -5676,9 +5673,8 @@ msgid "Divide grid step by 2" msgstr "Разделить шаг сетки на 2" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Pan View" -msgstr "Вид сзади" +msgstr "Панорама" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Add %s" @@ -5772,7 +5768,7 @@ msgstr "Твёрдые пиксели" #: editor/plugins/cpu_particles_2d_editor_plugin.cpp #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Border Pixels" -msgstr "" +msgstr "Граничные пиксели" #: editor/plugins/cpu_particles_2d_editor_plugin.cpp #: editor/plugins/particles_2d_editor_plugin.cpp @@ -5901,12 +5897,13 @@ msgid "Mesh is empty!" msgstr "Полисетка пуста!" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Trimesh Body" -msgstr "Создать вогнутое статичное тело" +#, fuzzy +msgid "Couldn't create a Trimesh collision shape." +msgstr "Создать вогнутую область столкновения" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Convex Body" -msgstr "Создать выпуклое статичное тело" +msgid "Create Static Trimesh Body" +msgstr "Создать вогнутое статичное тело" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "This doesn't work on scene root!" @@ -5918,11 +5915,30 @@ msgid "Create Trimesh Static Shape" msgstr "Создать вогнутую форму" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Failed creating shapes!" -msgstr "Не удалось создать форму!" +msgid "Can't create a single convex collision shape for the scene root." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Couldn't create a single convex collision shape." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Create Single Convex Shape" +msgstr "Создать выпуклую форму(ы)" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Convex Shape(s)" +msgid "Can't create multiple convex collision shapes for the scene root." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Couldn't create any collision shapes." +msgstr "Не удалось создать папку." + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Create Multiple Convex Shapes" msgstr "Создать выпуклую форму(ы)" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -5974,19 +5990,57 @@ msgid "Create Trimesh Static Body" msgstr "Создать вогнутое статичное тело" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a StaticBody and assigns a polygon-based collision shape to it " +"automatically.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Collision Sibling" msgstr "Создать вогнутую область столкновения" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a polygon-based collision shape.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Create Single Convex Collision Siblings" +msgstr "Создать выпуклую область столкновения" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a single convex collision shape.\n" +"This is the fastest (but least accurate) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp #, fuzzy -msgid "Create Convex Collision Sibling(s)" +msgid "Create Multiple Convex Collision Siblings" msgstr "Создать выпуклую область столкновения" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a polygon-based collision shape.\n" +"This is a performance middle-ground between the two above options." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Outline Mesh..." msgstr "Создать полисетку обводки..." #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a static outline mesh. The outline mesh will have its normals " +"flipped automatically.\n" +"This can be used instead of the SpatialMaterial Grow property when using " +"that property isn't possible." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "View UV1" msgstr "Просмотр UV1" @@ -6167,7 +6221,6 @@ msgid "The geometry's faces don't contain any area." msgstr "Грани данной геометрии не содержат никакой области." #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy msgid "The geometry doesn't contain any faces." msgstr "Данная геометрия не содержит граней." @@ -8400,7 +8453,7 @@ msgstr "Набор тайлов" msgid "No VCS addons are available." msgstr "Нет доступных VCS плагинов." -#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Error" msgstr "Ошибка" @@ -8453,9 +8506,8 @@ msgid "Deleted" msgstr "Удалён" #: editor/plugins/version_control_editor_plugin.cpp -#, fuzzy msgid "Typechange" -msgstr "Изменить" +msgstr "Изменить тип" #: editor/plugins/version_control_editor_plugin.cpp msgid "Stage Selected" @@ -9534,7 +9586,7 @@ msgstr "" #: editor/project_export.cpp msgid "Script Encryption Key (256-bits as hex):" -msgstr "Ключ шифрования скрипта (256-бит, а в шестнадцатеричном виде):" +msgstr "Ключ шифрования скрипта (256-бит, в шестнадцатеричном виде):" #: editor/project_export.cpp msgid "Export PCK/Zip" @@ -9573,11 +9625,19 @@ msgid "Export With Debug" msgstr "Экспорт в режиме отладки" #: editor/project_manager.cpp -msgid "The path does not exist." +#, fuzzy +msgid "The path specified doesn't exist." msgstr "Путь не существует." #: editor/project_manager.cpp -msgid "Invalid '.zip' project file, does not contain a 'project.godot' file." +#, fuzzy +msgid "Error opening package file (it's not in ZIP format)." +msgstr "Ошибка при открытии файла пакета, не в формате zip." + +#: editor/project_manager.cpp +#, fuzzy +msgid "" +"Invalid \".zip\" project file; it doesn't contain a \"project.godot\" file." msgstr "" "Недействительный '.zip' файл проекта, не содержит файл 'project.godot'." @@ -9586,11 +9646,13 @@ msgid "Please choose an empty folder." msgstr "Пожалуйста, выберите пустую папку." #: editor/project_manager.cpp -msgid "Please choose a 'project.godot' or '.zip' file." +#, fuzzy +msgid "Please choose a \"project.godot\" or \".zip\" file." msgstr "Пожалуйста, выберите файл 'project.godot' или '.zip'." #: editor/project_manager.cpp -msgid "Directory already contains a Godot project." +#, fuzzy +msgid "This directory already contains a Godot project." msgstr "Каталог уже содержит проект Godot." #: editor/project_manager.cpp @@ -10288,6 +10350,11 @@ msgid "Suffix" msgstr "Суффикс" #: editor/rename_dialog.cpp +#, fuzzy +msgid "Use Regular Expressions" +msgstr "Регулярное выражение" + +#: editor/rename_dialog.cpp msgid "Advanced Options" msgstr "Дополнительные параметры" @@ -10324,7 +10391,8 @@ msgstr "" "Сравните параметры счетчика." #: editor/rename_dialog.cpp -msgid "Per Level counter" +#, fuzzy +msgid "Per-level Counter" msgstr "Счетчик уровня" #: editor/rename_dialog.cpp @@ -10358,10 +10426,6 @@ msgstr "" "Недостающие цифры заполняются нулями." #: editor/rename_dialog.cpp -msgid "Regular Expressions" -msgstr "Регулярное выражение" - -#: editor/rename_dialog.cpp msgid "Post-Process" msgstr "Пост-обработка" @@ -10370,11 +10434,13 @@ msgid "Keep" msgstr "Оставить оригинал" #: editor/rename_dialog.cpp -msgid "CamelCase to under_scored" +#, fuzzy +msgid "PascalCase to snake_case" msgstr "CamelCase в under_scored" #: editor/rename_dialog.cpp -msgid "under_scored to CamelCase" +#, fuzzy +msgid "snake_case to PascalCase" msgstr "under_scored к CamelCase" #: editor/rename_dialog.cpp @@ -10393,6 +10459,16 @@ msgstr "В верхний регистр" msgid "Reset" msgstr "Сбросить" +#: editor/rename_dialog.cpp +#, fuzzy +msgid "Regular Expression Error" +msgstr "Регулярное выражение" + +#: editor/rename_dialog.cpp +#, fuzzy +msgid "At character %s" +msgstr "Допустимые символы:" + #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "Переподчинить узел" @@ -10857,7 +10933,8 @@ msgid "Invalid inherited parent name or path." msgstr "Неверное имя или путь наследуемого предка." #: editor/script_create_dialog.cpp -msgid "Script is valid." +#, fuzzy +msgid "Script path/name is valid." msgstr "Скрипт корректен." #: editor/script_create_dialog.cpp @@ -10949,6 +11026,11 @@ msgid "Copy Error" msgstr "Копировать ошибку" #: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Video RAM" +msgstr "Видео память" + +#: editor/script_editor_debugger.cpp msgid "Skip Breakpoints" msgstr "Пропустить точки останова" @@ -10998,10 +11080,6 @@ msgid "Total:" msgstr "Всего:" #: editor/script_editor_debugger.cpp -msgid "Video Mem" -msgstr "Видео память" - -#: editor/script_editor_debugger.cpp msgid "Resource Path" msgstr "Путь к ресурсу" @@ -11332,9 +11410,8 @@ msgid "Cursor Clear Rotation" msgstr "Курсор очистить поворот" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Paste Selects" -msgstr "Очистить выделенное" +msgstr "Вставить выделение" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Clear Selection" @@ -11720,7 +11797,6 @@ msgid "Editing Signal:" msgstr "Редактирование сигнала:" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Make Tool:" msgstr "Сделать инструментом:" @@ -12687,6 +12763,15 @@ msgstr "Изменения могут быть назначены только � msgid "Constants cannot be modified." msgstr "Константы не могут быть изменены." +#~ msgid "Replaced %d occurrence(s)." +#~ msgstr "Заменено %d совпадений." + +#~ msgid "Create Static Convex Body" +#~ msgstr "Создать выпуклое статичное тело" + +#~ msgid "Failed creating shapes!" +#~ msgstr "Не удалось создать форму!" + #~ msgid "" #~ "There are currently no tutorials for this class, you can [color=$color]" #~ "[url=$url]contribute one[/url][/color] or [color=$color][url=" diff --git a/editor/translations/si.po b/editor/translations/si.po index bd57c6a782..15bc5975ef 100644 --- a/editor/translations/si.po +++ b/editor/translations/si.po @@ -687,7 +687,7 @@ msgid "Line Number:" msgstr "" #: editor/code_editor.cpp -msgid "Replaced %d occurrence(s)." +msgid "%d replaced." msgstr "" #: editor/code_editor.cpp editor/editor_help.cpp @@ -3828,15 +3828,15 @@ msgid "Saving..." msgstr "" #: editor/import_dock.cpp -msgid "Set as Default for '%s'" +msgid "%d Files" msgstr "" #: editor/import_dock.cpp -msgid "Clear Default for '%s'" +msgid "Set as Default for '%s'" msgstr "" #: editor/import_dock.cpp -msgid " Files" +msgid "Clear Default for '%s'" msgstr "" #: editor/import_dock.cpp @@ -5689,11 +5689,11 @@ msgid "Mesh is empty!" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Trimesh Body" +msgid "Couldn't create a Trimesh collision shape." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Convex Body" +msgid "Create Static Trimesh Body" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -5705,11 +5705,27 @@ msgid "Create Trimesh Static Shape" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Failed creating shapes!" +msgid "Can't create a single convex collision shape for the scene root." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Couldn't create a single convex collision shape." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Single Convex Shape" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Can't create multiple convex collision shapes for the scene root." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Couldn't create any collision shapes." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Convex Shape(s)" +msgid "Create Multiple Convex Shapes" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -5761,11 +5777,40 @@ msgid "Create Trimesh Static Body" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a StaticBody and assigns a polygon-based collision shape to it " +"automatically.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Collision Sibling" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Convex Collision Sibling(s)" +msgid "" +"Creates a polygon-based collision shape.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Single Convex Collision Siblings" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a single convex collision shape.\n" +"This is the fastest (but least accurate) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Multiple Convex Collision Siblings" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a polygon-based collision shape.\n" +"This is a performance middle-ground between the two above options." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -5773,6 +5818,14 @@ msgid "Create Outline Mesh..." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a static outline mesh. The outline mesh will have its normals " +"flipped automatically.\n" +"This can be used instead of the SpatialMaterial Grow property when using " +"that property isn't possible." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "View UV1" msgstr "" @@ -8152,7 +8205,7 @@ msgstr "" msgid "No VCS addons are available." msgstr "" -#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Error" msgstr "" @@ -9246,11 +9299,16 @@ msgid "Export With Debug" msgstr "" #: editor/project_manager.cpp -msgid "The path does not exist." +msgid "The path specified doesn't exist." +msgstr "" + +#: editor/project_manager.cpp +msgid "Error opening package file (it's not in ZIP format)." msgstr "" #: editor/project_manager.cpp -msgid "Invalid '.zip' project file, does not contain a 'project.godot' file." +msgid "" +"Invalid \".zip\" project file; it doesn't contain a \"project.godot\" file." msgstr "" #: editor/project_manager.cpp @@ -9258,11 +9316,11 @@ msgid "Please choose an empty folder." msgstr "" #: editor/project_manager.cpp -msgid "Please choose a 'project.godot' or '.zip' file." +msgid "Please choose a \"project.godot\" or \".zip\" file." msgstr "" #: editor/project_manager.cpp -msgid "Directory already contains a Godot project." +msgid "This directory already contains a Godot project." msgstr "" #: editor/project_manager.cpp @@ -9908,6 +9966,10 @@ msgid "Suffix" msgstr "" #: editor/rename_dialog.cpp +msgid "Use Regular Expressions" +msgstr "" + +#: editor/rename_dialog.cpp msgid "Advanced Options" msgstr "" @@ -9942,7 +10004,7 @@ msgid "" msgstr "" #: editor/rename_dialog.cpp -msgid "Per Level counter" +msgid "Per-level Counter" msgstr "" #: editor/rename_dialog.cpp @@ -9972,10 +10034,6 @@ msgid "" msgstr "" #: editor/rename_dialog.cpp -msgid "Regular Expressions" -msgstr "" - -#: editor/rename_dialog.cpp msgid "Post-Process" msgstr "" @@ -9984,11 +10042,11 @@ msgid "Keep" msgstr "" #: editor/rename_dialog.cpp -msgid "CamelCase to under_scored" +msgid "PascalCase to snake_case" msgstr "" #: editor/rename_dialog.cpp -msgid "under_scored to CamelCase" +msgid "snake_case to PascalCase" msgstr "" #: editor/rename_dialog.cpp @@ -10007,6 +10065,14 @@ msgstr "" msgid "Reset" msgstr "" +#: editor/rename_dialog.cpp +msgid "Regular Expression Error" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "At character %s" +msgstr "" + #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "" @@ -10449,7 +10515,7 @@ msgid "Invalid inherited parent name or path." msgstr "" #: editor/script_create_dialog.cpp -msgid "Script is valid." +msgid "Script path/name is valid." msgstr "" #: editor/script_create_dialog.cpp @@ -10542,6 +10608,10 @@ msgid "Copy Error" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Video RAM" +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Skip Breakpoints" msgstr "" @@ -10590,10 +10660,6 @@ msgid "Total:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Video Mem" -msgstr "" - -#: editor/script_editor_debugger.cpp msgid "Resource Path" msgstr "" diff --git a/editor/translations/sk.po b/editor/translations/sk.po index a81d842616..709d2964ca 100644 --- a/editor/translations/sk.po +++ b/editor/translations/sk.po @@ -696,7 +696,7 @@ msgid "Line Number:" msgstr "" #: editor/code_editor.cpp -msgid "Replaced %d occurrence(s)." +msgid "%d replaced." msgstr "" #: editor/code_editor.cpp editor/editor_help.cpp @@ -3942,6 +3942,11 @@ msgid "Saving..." msgstr "" #: editor/import_dock.cpp +#, fuzzy +msgid "%d Files" +msgstr "Súbor:" + +#: editor/import_dock.cpp msgid "Set as Default for '%s'" msgstr "" @@ -3950,11 +3955,6 @@ msgid "Clear Default for '%s'" msgstr "" #: editor/import_dock.cpp -#, fuzzy -msgid " Files" -msgstr "Súbor:" - -#: editor/import_dock.cpp msgid "Import As:" msgstr "" @@ -5854,11 +5854,12 @@ msgid "Mesh is empty!" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Trimesh Body" -msgstr "" +#, fuzzy +msgid "Couldn't create a Trimesh collision shape." +msgstr "Vytvoriť adresár" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Convex Body" +msgid "Create Static Trimesh Body" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -5870,12 +5871,30 @@ msgid "Create Trimesh Static Shape" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Failed creating shapes!" +msgid "Can't create a single convex collision shape for the scene root." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Couldn't create a single convex collision shape." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Create Single Convex Shape" +msgstr "Vytvoriť adresár" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Can't create multiple convex collision shapes for the scene root." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp #, fuzzy -msgid "Create Convex Shape(s)" +msgid "Couldn't create any collision shapes." +msgstr "Vytvoriť adresár" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Create Multiple Convex Shapes" msgstr "Vytvoriť adresár" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -5927,19 +5946,57 @@ msgid "Create Trimesh Static Body" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a StaticBody and assigns a polygon-based collision shape to it " +"automatically.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Collision Sibling" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a polygon-based collision shape.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp #, fuzzy -msgid "Create Convex Collision Sibling(s)" +msgid "Create Single Convex Collision Siblings" msgstr "Vytvoriť adresár" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a single convex collision shape.\n" +"This is the fastest (but least accurate) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Create Multiple Convex Collision Siblings" +msgstr "Vytvoriť adresár" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a polygon-based collision shape.\n" +"This is a performance middle-ground between the two above options." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Outline Mesh..." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a static outline mesh. The outline mesh will have its normals " +"flipped automatically.\n" +"This can be used instead of the SpatialMaterial Grow property when using " +"that property isn't possible." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp #, fuzzy msgid "View UV1" msgstr "Súbor:" @@ -8413,7 +8470,7 @@ msgstr "Súbor:" msgid "No VCS addons are available." msgstr "" -#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Error" msgstr "" @@ -9530,11 +9587,17 @@ msgid "Export With Debug" msgstr "" #: editor/project_manager.cpp -msgid "The path does not exist." +msgid "The path specified doesn't exist." msgstr "" #: editor/project_manager.cpp -msgid "Invalid '.zip' project file, does not contain a 'project.godot' file." +#, fuzzy +msgid "Error opening package file (it's not in ZIP format)." +msgstr "Chyba pri otváraní súboru balíka, nie je vo formáte zip." + +#: editor/project_manager.cpp +msgid "" +"Invalid \".zip\" project file; it doesn't contain a \"project.godot\" file." msgstr "" #: editor/project_manager.cpp @@ -9542,11 +9605,11 @@ msgid "Please choose an empty folder." msgstr "" #: editor/project_manager.cpp -msgid "Please choose a 'project.godot' or '.zip' file." +msgid "Please choose a \"project.godot\" or \".zip\" file." msgstr "" #: editor/project_manager.cpp -msgid "Directory already contains a Godot project." +msgid "This directory already contains a Godot project." msgstr "" #: editor/project_manager.cpp @@ -10207,6 +10270,10 @@ msgid "Suffix" msgstr "" #: editor/rename_dialog.cpp +msgid "Use Regular Expressions" +msgstr "" + +#: editor/rename_dialog.cpp msgid "Advanced Options" msgstr "" @@ -10241,7 +10308,7 @@ msgid "" msgstr "" #: editor/rename_dialog.cpp -msgid "Per Level counter" +msgid "Per-level Counter" msgstr "" #: editor/rename_dialog.cpp @@ -10271,10 +10338,6 @@ msgid "" msgstr "" #: editor/rename_dialog.cpp -msgid "Regular Expressions" -msgstr "" - -#: editor/rename_dialog.cpp msgid "Post-Process" msgstr "" @@ -10283,11 +10346,11 @@ msgid "Keep" msgstr "" #: editor/rename_dialog.cpp -msgid "CamelCase to under_scored" +msgid "PascalCase to snake_case" msgstr "" #: editor/rename_dialog.cpp -msgid "under_scored to CamelCase" +msgid "snake_case to PascalCase" msgstr "" #: editor/rename_dialog.cpp @@ -10306,6 +10369,14 @@ msgstr "" msgid "Reset" msgstr "" +#: editor/rename_dialog.cpp +msgid "Regular Expression Error" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "At character %s" +msgstr "" + #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "" @@ -10763,7 +10834,7 @@ msgid "Invalid inherited parent name or path." msgstr "" #: editor/script_create_dialog.cpp -msgid "Script is valid." +msgid "Script path/name is valid." msgstr "" #: editor/script_create_dialog.cpp @@ -10866,6 +10937,10 @@ msgid "Copy Error" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Video RAM" +msgstr "" + +#: editor/script_editor_debugger.cpp #, fuzzy msgid "Skip Breakpoints" msgstr "Všetky vybrané" @@ -10916,10 +10991,6 @@ msgid "Total:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Video Mem" -msgstr "" - -#: editor/script_editor_debugger.cpp msgid "Resource Path" msgstr "" diff --git a/editor/translations/sl.po b/editor/translations/sl.po index 6f63bb7483..3a30fcac1a 100644 --- a/editor/translations/sl.po +++ b/editor/translations/sl.po @@ -726,8 +726,9 @@ msgid "Line Number:" msgstr "Številka Vrste:" #: editor/code_editor.cpp -msgid "Replaced %d occurrence(s)." -msgstr "Zamenjana %d ponovitev/e." +#, fuzzy +msgid "%d replaced." +msgstr "Zamenjaj" #: editor/code_editor.cpp editor/editor_help.cpp msgid "%d match." @@ -4124,6 +4125,11 @@ msgid "Saving..." msgstr "Shranjevanje..." #: editor/import_dock.cpp +#, fuzzy +msgid "%d Files" +msgstr " Datoteke" + +#: editor/import_dock.cpp msgid "Set as Default for '%s'" msgstr "Nastavi kot Privzeto za '%s'" @@ -4132,10 +4138,6 @@ msgid "Clear Default for '%s'" msgstr "Počisti privzeto za '%s'" #: editor/import_dock.cpp -msgid " Files" -msgstr " Datoteke" - -#: editor/import_dock.cpp msgid "Import As:" msgstr "Uvozi Kot:" @@ -6122,28 +6124,46 @@ msgid "Mesh is empty!" msgstr "Model je prazen!" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Couldn't create a Trimesh collision shape." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Static Trimesh Body" msgstr "Ustvari Statično Telo TriModel" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Convex Body" +msgid "This doesn't work on scene root!" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "This doesn't work on scene root!" +msgid "Create Trimesh Static Shape" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Trimesh Static Shape" +msgid "Can't create a single convex collision shape for the scene root." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Failed creating shapes!" +msgid "Couldn't create a single convex collision shape." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp #, fuzzy -msgid "Create Convex Shape(s)" +msgid "Create Single Convex Shape" +msgstr "Ustvari Nov %s" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Can't create multiple convex collision shapes for the scene root." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Couldn't create any collision shapes." +msgstr "Mape ni mogoče ustvariti." + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Create Multiple Convex Shapes" msgstr "Ustvari Nov %s" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -6195,19 +6215,57 @@ msgid "Create Trimesh Static Body" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a StaticBody and assigns a polygon-based collision shape to it " +"automatically.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Collision Sibling" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a polygon-based collision shape.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp #, fuzzy -msgid "Create Convex Collision Sibling(s)" +msgid "Create Single Convex Collision Siblings" msgstr "Ustvarite Poligon" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a single convex collision shape.\n" +"This is the fastest (but least accurate) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Create Multiple Convex Collision Siblings" +msgstr "Ustvarite Poligon" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a polygon-based collision shape.\n" +"This is a performance middle-ground between the two above options." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Outline Mesh..." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a static outline mesh. The outline mesh will have its normals " +"flipped automatically.\n" +"This can be used instead of the SpatialMaterial Grow property when using " +"that property isn't possible." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "View UV1" msgstr "" @@ -8725,7 +8783,7 @@ msgstr "Izvozi Ploščno Zbirko" msgid "No VCS addons are available." msgstr "" -#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Error" msgstr "" @@ -9858,11 +9916,18 @@ msgid "Export With Debug" msgstr "" #: editor/project_manager.cpp -msgid "The path does not exist." -msgstr "" +#, fuzzy +msgid "The path specified doesn't exist." +msgstr "Datoteka ne obstaja." + +#: editor/project_manager.cpp +#, fuzzy +msgid "Error opening package file (it's not in ZIP format)." +msgstr "Napaka pri odpiranju datoteke paketa, ker ni v formatu zip." #: editor/project_manager.cpp -msgid "Invalid '.zip' project file, does not contain a 'project.godot' file." +msgid "" +"Invalid \".zip\" project file; it doesn't contain a \"project.godot\" file." msgstr "" #: editor/project_manager.cpp @@ -9871,11 +9936,11 @@ msgstr "Izberite prazno mapo." #: editor/project_manager.cpp #, fuzzy -msgid "Please choose a 'project.godot' or '.zip' file." +msgid "Please choose a \"project.godot\" or \".zip\" file." msgstr "Izberite datoteko 'projekt.godot'." #: editor/project_manager.cpp -msgid "Directory already contains a Godot project." +msgid "This directory already contains a Godot project." msgstr "" #: editor/project_manager.cpp @@ -10539,6 +10604,11 @@ msgstr "" #: editor/rename_dialog.cpp #, fuzzy +msgid "Use Regular Expressions" +msgstr "Trenutna Različica:" + +#: editor/rename_dialog.cpp +#, fuzzy msgid "Advanced Options" msgstr "Možnosti pripenjanja" @@ -10577,7 +10647,7 @@ msgid "" msgstr "" #: editor/rename_dialog.cpp -msgid "Per Level counter" +msgid "Per-level Counter" msgstr "" #: editor/rename_dialog.cpp @@ -10608,10 +10678,6 @@ msgid "" msgstr "" #: editor/rename_dialog.cpp -msgid "Regular Expressions" -msgstr "" - -#: editor/rename_dialog.cpp msgid "Post-Process" msgstr "" @@ -10620,11 +10686,11 @@ msgid "Keep" msgstr "" #: editor/rename_dialog.cpp -msgid "CamelCase to under_scored" +msgid "PascalCase to snake_case" msgstr "" #: editor/rename_dialog.cpp -msgid "under_scored to CamelCase" +msgid "snake_case to PascalCase" msgstr "" #: editor/rename_dialog.cpp @@ -10644,6 +10710,15 @@ msgstr "" msgid "Reset" msgstr "Ponastavi Povečavo/Pomanjšavo" +#: editor/rename_dialog.cpp +msgid "Regular Expression Error" +msgstr "" + +#: editor/rename_dialog.cpp +#, fuzzy +msgid "At character %s" +msgstr "Veljavni znaki:" + #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "" @@ -11112,7 +11187,7 @@ msgstr "Neveljaveno prevzeto ime ali pot nadrejenega" #: editor/script_create_dialog.cpp #, fuzzy -msgid "Script is valid." +msgid "Script path/name is valid." msgstr "Drevo animacije je veljavno." #: editor/script_create_dialog.cpp @@ -11218,6 +11293,10 @@ msgid "Copy Error" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Video RAM" +msgstr "" + +#: editor/script_editor_debugger.cpp #, fuzzy msgid "Skip Breakpoints" msgstr "Izbriši točke" @@ -11268,10 +11347,6 @@ msgid "Total:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Video Mem" -msgstr "" - -#: editor/script_editor_debugger.cpp msgid "Resource Path" msgstr "" @@ -12876,6 +12951,9 @@ msgstr "" msgid "Constants cannot be modified." msgstr "Konstante ni možno spreminjati." +#~ msgid "Replaced %d occurrence(s)." +#~ msgstr "Zamenjana %d ponovitev/e." + #~ msgid "" #~ "There are currently no tutorials for this class, you can [color=$color]" #~ "[url=$url]contribute one[/url][/color] or [color=$color][url=" diff --git a/editor/translations/sq.po b/editor/translations/sq.po index 3c55191a34..65ea4fdb56 100644 --- a/editor/translations/sq.po +++ b/editor/translations/sq.po @@ -673,8 +673,9 @@ msgid "Line Number:" msgstr "" #: editor/code_editor.cpp -msgid "Replaced %d occurrence(s)." -msgstr "" +#, fuzzy +msgid "%d replaced." +msgstr "Zëvendëso..." #: editor/code_editor.cpp editor/editor_help.cpp msgid "%d match." @@ -4035,6 +4036,11 @@ msgid "Saving..." msgstr "Duke Ruajtur..." #: editor/import_dock.cpp +#, fuzzy +msgid "%d Files" +msgstr " Skedarët" + +#: editor/import_dock.cpp msgid "Set as Default for '%s'" msgstr "Vendos si të Parazgjedhur për '%s'" @@ -4043,10 +4049,6 @@ msgid "Clear Default for '%s'" msgstr "Pastro të Parazgjedhurat për '%s'" #: editor/import_dock.cpp -msgid " Files" -msgstr " Skedarët" - -#: editor/import_dock.cpp msgid "Import As:" msgstr "Importo Si:" @@ -5912,11 +5914,11 @@ msgid "Mesh is empty!" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Trimesh Body" +msgid "Couldn't create a Trimesh collision shape." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Convex Body" +msgid "Create Static Trimesh Body" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -5928,11 +5930,28 @@ msgid "Create Trimesh Static Shape" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Failed creating shapes!" +msgid "Can't create a single convex collision shape for the scene root." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Couldn't create a single convex collision shape." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Convex Shape(s)" +msgid "Create Single Convex Shape" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Can't create multiple convex collision shapes for the scene root." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Couldn't create any collision shapes." +msgstr "Nuk mund të krijoj folderin." + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Multiple Convex Shapes" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -5984,19 +6003,57 @@ msgid "Create Trimesh Static Body" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a StaticBody and assigns a polygon-based collision shape to it " +"automatically.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Collision Sibling" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a polygon-based collision shape.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Create Single Convex Collision Siblings" +msgstr "Krijo një Poligon" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a single convex collision shape.\n" +"This is the fastest (but least accurate) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp #, fuzzy -msgid "Create Convex Collision Sibling(s)" +msgid "Create Multiple Convex Collision Siblings" msgstr "Krijo një Poligon" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a polygon-based collision shape.\n" +"This is a performance middle-ground between the two above options." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Outline Mesh..." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a static outline mesh. The outline mesh will have its normals " +"flipped automatically.\n" +"This can be used instead of the SpatialMaterial Grow property when using " +"that property isn't possible." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "View UV1" msgstr "" @@ -8402,7 +8459,7 @@ msgstr "" msgid "No VCS addons are available." msgstr "" -#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Error" msgstr "" @@ -9510,11 +9567,18 @@ msgid "Export With Debug" msgstr "" #: editor/project_manager.cpp -msgid "The path does not exist." -msgstr "" +#, fuzzy +msgid "The path specified doesn't exist." +msgstr "Skedari nuk egziston." + +#: editor/project_manager.cpp +#, fuzzy +msgid "Error opening package file (it's not in ZIP format)." +msgstr "Gabim në hapjen e skedarit paketë, nuk është në formatin zip." #: editor/project_manager.cpp -msgid "Invalid '.zip' project file, does not contain a 'project.godot' file." +msgid "" +"Invalid \".zip\" project file; it doesn't contain a \"project.godot\" file." msgstr "" #: editor/project_manager.cpp @@ -9522,11 +9586,11 @@ msgid "Please choose an empty folder." msgstr "" #: editor/project_manager.cpp -msgid "Please choose a 'project.godot' or '.zip' file." +msgid "Please choose a \"project.godot\" or \".zip\" file." msgstr "" #: editor/project_manager.cpp -msgid "Directory already contains a Godot project." +msgid "This directory already contains a Godot project." msgstr "" #: editor/project_manager.cpp @@ -10180,6 +10244,11 @@ msgid "Suffix" msgstr "" #: editor/rename_dialog.cpp +#, fuzzy +msgid "Use Regular Expressions" +msgstr "Versioni Aktual:" + +#: editor/rename_dialog.cpp msgid "Advanced Options" msgstr "" @@ -10214,7 +10283,7 @@ msgid "" msgstr "" #: editor/rename_dialog.cpp -msgid "Per Level counter" +msgid "Per-level Counter" msgstr "" #: editor/rename_dialog.cpp @@ -10244,10 +10313,6 @@ msgid "" msgstr "" #: editor/rename_dialog.cpp -msgid "Regular Expressions" -msgstr "" - -#: editor/rename_dialog.cpp msgid "Post-Process" msgstr "" @@ -10256,11 +10321,11 @@ msgid "Keep" msgstr "" #: editor/rename_dialog.cpp -msgid "CamelCase to under_scored" +msgid "PascalCase to snake_case" msgstr "" #: editor/rename_dialog.cpp -msgid "under_scored to CamelCase" +msgid "snake_case to PascalCase" msgstr "" #: editor/rename_dialog.cpp @@ -10279,6 +10344,15 @@ msgstr "" msgid "Reset" msgstr "" +#: editor/rename_dialog.cpp +msgid "Regular Expression Error" +msgstr "" + +#: editor/rename_dialog.cpp +#, fuzzy +msgid "At character %s" +msgstr "Karakteret e lejuar:" + #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "" @@ -10735,7 +10809,7 @@ msgid "Invalid inherited parent name or path." msgstr "" #: editor/script_create_dialog.cpp -msgid "Script is valid." +msgid "Script path/name is valid." msgstr "" #: editor/script_create_dialog.cpp @@ -10838,6 +10912,10 @@ msgid "Copy Error" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Video RAM" +msgstr "" + +#: editor/script_editor_debugger.cpp #, fuzzy msgid "Skip Breakpoints" msgstr "Krijo pika." @@ -10888,10 +10966,6 @@ msgid "Total:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Video Mem" -msgstr "" - -#: editor/script_editor_debugger.cpp msgid "Resource Path" msgstr "" diff --git a/editor/translations/sr_Cyrl.po b/editor/translations/sr_Cyrl.po index 366c12b77c..7b6f9a73b1 100644 --- a/editor/translations/sr_Cyrl.po +++ b/editor/translations/sr_Cyrl.po @@ -722,8 +722,9 @@ msgid "Line Number:" msgstr "Број линије:" #: editor/code_editor.cpp -msgid "Replaced %d occurrence(s)." -msgstr "Замени %d појаве/а." +#, fuzzy +msgid "%d replaced." +msgstr "Замени..." #: editor/code_editor.cpp editor/editor_help.cpp msgid "%d match." @@ -4150,6 +4151,11 @@ msgid "Saving..." msgstr "Чување..." #: editor/import_dock.cpp +#, fuzzy +msgid "%d Files" +msgstr " Датотеке" + +#: editor/import_dock.cpp msgid "Set as Default for '%s'" msgstr "Постави као уобичајено за „%s“" @@ -4158,10 +4164,6 @@ msgid "Clear Default for '%s'" msgstr "Обриши уобичајено за „%s“" #: editor/import_dock.cpp -msgid " Files" -msgstr " Датотеке" - -#: editor/import_dock.cpp msgid "Import As:" msgstr "Увези као:" @@ -6152,12 +6154,13 @@ msgid "Mesh is empty!" msgstr "Мрежа је празна!" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Trimesh Body" -msgstr "Направи статичо тело од троуглова" +#, fuzzy +msgid "Couldn't create a Trimesh collision shape." +msgstr "Направи троугластог сударног брата" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Convex Body" -msgstr "Направи конвексно статичко тело" +msgid "Create Static Trimesh Body" +msgstr "Направи статичо тело од троуглова" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "This doesn't work on scene root!" @@ -6169,12 +6172,30 @@ msgid "Create Trimesh Static Shape" msgstr "Направи фигуру од троуглова" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Failed creating shapes!" +msgid "Can't create a single convex collision shape for the scene root." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Couldn't create a single convex collision shape." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp #, fuzzy -msgid "Create Convex Shape(s)" +msgid "Create Single Convex Shape" +msgstr "Направи конвексну фигуру" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Can't create multiple convex collision shapes for the scene root." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Couldn't create any collision shapes." +msgstr "Неуспех при прављењу директоријума." + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Create Multiple Convex Shapes" msgstr "Направи конвексну фигуру" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -6226,19 +6247,57 @@ msgid "Create Trimesh Static Body" msgstr "Направи троугласто статично тело" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a StaticBody and assigns a polygon-based collision shape to it " +"automatically.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Collision Sibling" msgstr "Направи троугластог сударног брата" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a polygon-based collision shape.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Create Single Convex Collision Siblings" +msgstr "Направи конвексног сударног брата" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a single convex collision shape.\n" +"This is the fastest (but least accurate) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp #, fuzzy -msgid "Create Convex Collision Sibling(s)" +msgid "Create Multiple Convex Collision Siblings" msgstr "Направи конвексног сударног брата" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a polygon-based collision shape.\n" +"This is a performance middle-ground between the two above options." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Outline Mesh..." msgstr "Направи ивичну мрежу..." #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a static outline mesh. The outline mesh will have its normals " +"flipped automatically.\n" +"This can be used instead of the SpatialMaterial Grow property when using " +"that property isn't possible." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp #, fuzzy msgid "View UV1" msgstr "Поглед" @@ -8819,7 +8878,7 @@ msgstr "TileSet..." msgid "No VCS addons are available." msgstr "" -#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Error" msgstr "Грешка" @@ -9977,11 +10036,18 @@ msgid "Export With Debug" msgstr "" #: editor/project_manager.cpp -msgid "The path does not exist." +#, fuzzy +msgid "The path specified doesn't exist." msgstr "Путања не постоји." #: editor/project_manager.cpp -msgid "Invalid '.zip' project file, does not contain a 'project.godot' file." +#, fuzzy +msgid "Error opening package file (it's not in ZIP format)." +msgstr "Грешка при отварању датотеку пакета. Датотека није zip формата." + +#: editor/project_manager.cpp +msgid "" +"Invalid \".zip\" project file; it doesn't contain a \"project.godot\" file." msgstr "" #: editor/project_manager.cpp @@ -9989,11 +10055,11 @@ msgid "Please choose an empty folder." msgstr "" #: editor/project_manager.cpp -msgid "Please choose a 'project.godot' or '.zip' file." +msgid "Please choose a \"project.godot\" or \".zip\" file." msgstr "" #: editor/project_manager.cpp -msgid "Directory already contains a Godot project." +msgid "This directory already contains a Godot project." msgstr "" #: editor/project_manager.cpp @@ -10661,6 +10727,11 @@ msgstr "" #: editor/rename_dialog.cpp #, fuzzy +msgid "Use Regular Expressions" +msgstr "Постави правоугаони регион" + +#: editor/rename_dialog.cpp +#, fuzzy msgid "Advanced Options" msgstr "Поставке залепљавања" @@ -10699,7 +10770,7 @@ msgid "" msgstr "" #: editor/rename_dialog.cpp -msgid "Per Level counter" +msgid "Per-level Counter" msgstr "" #: editor/rename_dialog.cpp @@ -10730,10 +10801,6 @@ msgid "" msgstr "" #: editor/rename_dialog.cpp -msgid "Regular Expressions" -msgstr "" - -#: editor/rename_dialog.cpp msgid "Post-Process" msgstr "" @@ -10742,11 +10809,11 @@ msgid "Keep" msgstr "" #: editor/rename_dialog.cpp -msgid "CamelCase to under_scored" +msgid "PascalCase to snake_case" msgstr "" #: editor/rename_dialog.cpp -msgid "under_scored to CamelCase" +msgid "snake_case to PascalCase" msgstr "" #: editor/rename_dialog.cpp @@ -10768,6 +10835,15 @@ msgstr "Велика слова" msgid "Reset" msgstr "Ресетуј увеличање" +#: editor/rename_dialog.cpp +msgid "Regular Expression Error" +msgstr "" + +#: editor/rename_dialog.cpp +#, fuzzy +msgid "At character %s" +msgstr "Важећа слова:" + #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "" @@ -11239,7 +11315,7 @@ msgstr "" #: editor/script_create_dialog.cpp #, fuzzy -msgid "Script is valid." +msgid "Script path/name is valid." msgstr "Анимационо дрво је важеће." #: editor/script_create_dialog.cpp @@ -11352,6 +11428,10 @@ msgid "Copy Error" msgstr "Учитај грешке" #: editor/script_editor_debugger.cpp +msgid "Video RAM" +msgstr "" + +#: editor/script_editor_debugger.cpp #, fuzzy msgid "Skip Breakpoints" msgstr "Обриши тачке" @@ -11402,10 +11482,6 @@ msgid "Total:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Video Mem" -msgstr "" - -#: editor/script_editor_debugger.cpp msgid "Resource Path" msgstr "" @@ -12981,6 +13057,12 @@ msgstr "" msgid "Constants cannot be modified." msgstr "" +#~ msgid "Replaced %d occurrence(s)." +#~ msgstr "Замени %d појаве/а." + +#~ msgid "Create Static Convex Body" +#~ msgstr "Направи конвексно статичко тело" + #, fuzzy #~ msgid "" #~ "There are currently no tutorials for this class, you can [color=$color]" diff --git a/editor/translations/sr_Latn.po b/editor/translations/sr_Latn.po index e55a90f6f8..3bbd854cb0 100644 --- a/editor/translations/sr_Latn.po +++ b/editor/translations/sr_Latn.po @@ -696,7 +696,7 @@ msgid "Line Number:" msgstr "" #: editor/code_editor.cpp -msgid "Replaced %d occurrence(s)." +msgid "%d replaced." msgstr "" #: editor/code_editor.cpp editor/editor_help.cpp @@ -3845,15 +3845,15 @@ msgid "Saving..." msgstr "" #: editor/import_dock.cpp -msgid "Set as Default for '%s'" +msgid "%d Files" msgstr "" #: editor/import_dock.cpp -msgid "Clear Default for '%s'" +msgid "Set as Default for '%s'" msgstr "" #: editor/import_dock.cpp -msgid " Files" +msgid "Clear Default for '%s'" msgstr "" #: editor/import_dock.cpp @@ -5718,11 +5718,11 @@ msgid "Mesh is empty!" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Trimesh Body" +msgid "Couldn't create a Trimesh collision shape." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Convex Body" +msgid "Create Static Trimesh Body" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -5734,11 +5734,27 @@ msgid "Create Trimesh Static Shape" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Failed creating shapes!" +msgid "Can't create a single convex collision shape for the scene root." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Couldn't create a single convex collision shape." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Convex Shape(s)" +msgid "Create Single Convex Shape" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Can't create multiple convex collision shapes for the scene root." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Couldn't create any collision shapes." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Multiple Convex Shapes" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -5790,19 +5806,57 @@ msgid "Create Trimesh Static Body" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a StaticBody and assigns a polygon-based collision shape to it " +"automatically.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Collision Sibling" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a polygon-based collision shape.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp #, fuzzy -msgid "Create Convex Collision Sibling(s)" +msgid "Create Single Convex Collision Siblings" msgstr "Napravi" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a single convex collision shape.\n" +"This is the fastest (but least accurate) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Create Multiple Convex Collision Siblings" +msgstr "Napravi" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a polygon-based collision shape.\n" +"This is a performance middle-ground between the two above options." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Outline Mesh..." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a static outline mesh. The outline mesh will have its normals " +"flipped automatically.\n" +"This can be used instead of the SpatialMaterial Grow property when using " +"that property isn't possible." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "View UV1" msgstr "" @@ -8219,7 +8273,7 @@ msgstr "" msgid "No VCS addons are available." msgstr "" -#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Error" msgstr "" @@ -9320,11 +9374,16 @@ msgid "Export With Debug" msgstr "" #: editor/project_manager.cpp -msgid "The path does not exist." +msgid "The path specified doesn't exist." +msgstr "" + +#: editor/project_manager.cpp +msgid "Error opening package file (it's not in ZIP format)." msgstr "" #: editor/project_manager.cpp -msgid "Invalid '.zip' project file, does not contain a 'project.godot' file." +msgid "" +"Invalid \".zip\" project file; it doesn't contain a \"project.godot\" file." msgstr "" #: editor/project_manager.cpp @@ -9332,11 +9391,11 @@ msgid "Please choose an empty folder." msgstr "" #: editor/project_manager.cpp -msgid "Please choose a 'project.godot' or '.zip' file." +msgid "Please choose a \"project.godot\" or \".zip\" file." msgstr "" #: editor/project_manager.cpp -msgid "Directory already contains a Godot project." +msgid "This directory already contains a Godot project." msgstr "" #: editor/project_manager.cpp @@ -9986,6 +10045,10 @@ msgid "Suffix" msgstr "" #: editor/rename_dialog.cpp +msgid "Use Regular Expressions" +msgstr "" + +#: editor/rename_dialog.cpp msgid "Advanced Options" msgstr "" @@ -10020,7 +10083,7 @@ msgid "" msgstr "" #: editor/rename_dialog.cpp -msgid "Per Level counter" +msgid "Per-level Counter" msgstr "" #: editor/rename_dialog.cpp @@ -10050,10 +10113,6 @@ msgid "" msgstr "" #: editor/rename_dialog.cpp -msgid "Regular Expressions" -msgstr "" - -#: editor/rename_dialog.cpp msgid "Post-Process" msgstr "" @@ -10062,11 +10121,11 @@ msgid "Keep" msgstr "" #: editor/rename_dialog.cpp -msgid "CamelCase to under_scored" +msgid "PascalCase to snake_case" msgstr "" #: editor/rename_dialog.cpp -msgid "under_scored to CamelCase" +msgid "snake_case to PascalCase" msgstr "" #: editor/rename_dialog.cpp @@ -10085,6 +10144,14 @@ msgstr "" msgid "Reset" msgstr "" +#: editor/rename_dialog.cpp +msgid "Regular Expression Error" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "At character %s" +msgstr "" + #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "" @@ -10529,7 +10596,7 @@ msgid "Invalid inherited parent name or path." msgstr "" #: editor/script_create_dialog.cpp -msgid "Script is valid." +msgid "Script path/name is valid." msgstr "" #: editor/script_create_dialog.cpp @@ -10623,6 +10690,10 @@ msgid "Copy Error" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Video RAM" +msgstr "" + +#: editor/script_editor_debugger.cpp #, fuzzy msgid "Skip Breakpoints" msgstr "Napravi" @@ -10672,10 +10743,6 @@ msgid "Total:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Video Mem" -msgstr "" - -#: editor/script_editor_debugger.cpp msgid "Resource Path" msgstr "" diff --git a/editor/translations/sv.po b/editor/translations/sv.po index 0da6531121..0c35991d32 100644 --- a/editor/translations/sv.po +++ b/editor/translations/sv.po @@ -709,8 +709,9 @@ msgid "Line Number:" msgstr "Radnummer:" #: editor/code_editor.cpp -msgid "Replaced %d occurrence(s)." -msgstr "Ersatte %d förekomst(er)." +#, fuzzy +msgid "%d replaced." +msgstr "Ersätt..." #: editor/code_editor.cpp editor/editor_help.cpp msgid "%d match." @@ -4109,6 +4110,10 @@ msgid "Saving..." msgstr "Sparar..." #: editor/import_dock.cpp +msgid "%d Files" +msgstr "%d Filer" + +#: editor/import_dock.cpp msgid "Set as Default for '%s'" msgstr "Ange som Standard för '%s'" @@ -4117,10 +4122,6 @@ msgid "Clear Default for '%s'" msgstr "Rensa Standarden för '%s'" #: editor/import_dock.cpp -msgid " Files" -msgstr "" - -#: editor/import_dock.cpp msgid "Import As:" msgstr "Importera Som:" @@ -6069,11 +6070,12 @@ msgid "Mesh is empty!" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Trimesh Body" -msgstr "" +#, fuzzy +msgid "Couldn't create a Trimesh collision shape." +msgstr "Kunde inte skapa mapp." #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Convex Body" +msgid "Create Static Trimesh Body" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -6085,12 +6087,30 @@ msgid "Create Trimesh Static Shape" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Failed creating shapes!" +msgid "Can't create a single convex collision shape for the scene root." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Couldn't create a single convex collision shape." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp #, fuzzy -msgid "Create Convex Shape(s)" +msgid "Create Single Convex Shape" +msgstr "Skapa Ny" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Can't create multiple convex collision shapes for the scene root." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Couldn't create any collision shapes." +msgstr "Kunde inte skapa mapp." + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Create Multiple Convex Shapes" msgstr "Skapa Ny" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -6142,19 +6162,57 @@ msgid "Create Trimesh Static Body" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a StaticBody and assigns a polygon-based collision shape to it " +"automatically.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Collision Sibling" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a polygon-based collision shape.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Create Single Convex Collision Siblings" +msgstr "Skapa Prenumeration" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a single convex collision shape.\n" +"This is the fastest (but least accurate) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp #, fuzzy -msgid "Create Convex Collision Sibling(s)" +msgid "Create Multiple Convex Collision Siblings" msgstr "Skapa Prenumeration" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a polygon-based collision shape.\n" +"This is a performance middle-ground between the two above options." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Outline Mesh..." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a static outline mesh. The outline mesh will have its normals " +"flipped automatically.\n" +"This can be used instead of the SpatialMaterial Grow property when using " +"that property isn't possible." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp #, fuzzy msgid "View UV1" msgstr "Visa" @@ -8669,7 +8727,7 @@ msgstr "TileSet..." msgid "No VCS addons are available." msgstr "" -#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Error" msgstr "Fel" @@ -9797,11 +9855,18 @@ msgid "Export With Debug" msgstr "" #: editor/project_manager.cpp -msgid "The path does not exist." +#, fuzzy +msgid "The path specified doesn't exist." msgstr "Sökvägen finns inte." #: editor/project_manager.cpp -msgid "Invalid '.zip' project file, does not contain a 'project.godot' file." +#, fuzzy +msgid "Error opening package file (it's not in ZIP format)." +msgstr "Fel vid öppning av paketetfil, inte i zip-format." + +#: editor/project_manager.cpp +msgid "" +"Invalid \".zip\" project file; it doesn't contain a \"project.godot\" file." msgstr "" #: editor/project_manager.cpp @@ -9809,11 +9874,11 @@ msgid "Please choose an empty folder." msgstr "" #: editor/project_manager.cpp -msgid "Please choose a 'project.godot' or '.zip' file." +msgid "Please choose a \"project.godot\" or \".zip\" file." msgstr "" #: editor/project_manager.cpp -msgid "Directory already contains a Godot project." +msgid "This directory already contains a Godot project." msgstr "" #: editor/project_manager.cpp @@ -10482,6 +10547,11 @@ msgstr "" #: editor/rename_dialog.cpp #, fuzzy +msgid "Use Regular Expressions" +msgstr "Nuvarande Version:" + +#: editor/rename_dialog.cpp +#, fuzzy msgid "Advanced Options" msgstr "Alternativ" @@ -10520,7 +10590,7 @@ msgid "" msgstr "" #: editor/rename_dialog.cpp -msgid "Per Level counter" +msgid "Per-level Counter" msgstr "" #: editor/rename_dialog.cpp @@ -10551,10 +10621,6 @@ msgid "" msgstr "" #: editor/rename_dialog.cpp -msgid "Regular Expressions" -msgstr "" - -#: editor/rename_dialog.cpp msgid "Post-Process" msgstr "" @@ -10563,11 +10629,11 @@ msgid "Keep" msgstr "" #: editor/rename_dialog.cpp -msgid "CamelCase to under_scored" +msgid "PascalCase to snake_case" msgstr "" #: editor/rename_dialog.cpp -msgid "under_scored to CamelCase" +msgid "snake_case to PascalCase" msgstr "" #: editor/rename_dialog.cpp @@ -10589,6 +10655,15 @@ msgstr "Versaler" msgid "Reset" msgstr "Återställ Zoom" +#: editor/rename_dialog.cpp +msgid "Regular Expression Error" +msgstr "" + +#: editor/rename_dialog.cpp +#, fuzzy +msgid "At character %s" +msgstr "Giltiga tecken:" + #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "Byt Förälder-Node" @@ -11062,7 +11137,7 @@ msgstr "" #: editor/script_create_dialog.cpp #, fuzzy -msgid "Script is valid." +msgid "Script path/name is valid." msgstr "Skript giltigt" #: editor/script_create_dialog.cpp @@ -11170,6 +11245,10 @@ msgid "Copy Error" msgstr "Fel" #: editor/script_editor_debugger.cpp +msgid "Video RAM" +msgstr "" + +#: editor/script_editor_debugger.cpp #, fuzzy msgid "Skip Breakpoints" msgstr "Radera punkter" @@ -11219,10 +11298,6 @@ msgid "Total:" msgstr "Totalt:" #: editor/script_editor_debugger.cpp -msgid "Video Mem" -msgstr "" - -#: editor/script_editor_debugger.cpp msgid "Resource Path" msgstr "" @@ -12822,6 +12897,9 @@ msgstr "" msgid "Constants cannot be modified." msgstr "" +#~ msgid "Replaced %d occurrence(s)." +#~ msgstr "Ersatte %d förekomst(er)." + #, fuzzy #~ msgid "" #~ "There are currently no tutorials for this class, you can [color=$color]" diff --git a/editor/translations/ta.po b/editor/translations/ta.po index 0c08e2f565..ae6b41bf5c 100644 --- a/editor/translations/ta.po +++ b/editor/translations/ta.po @@ -688,7 +688,7 @@ msgid "Line Number:" msgstr "" #: editor/code_editor.cpp -msgid "Replaced %d occurrence(s)." +msgid "%d replaced." msgstr "" #: editor/code_editor.cpp editor/editor_help.cpp @@ -3832,15 +3832,15 @@ msgid "Saving..." msgstr "" #: editor/import_dock.cpp -msgid "Set as Default for '%s'" +msgid "%d Files" msgstr "" #: editor/import_dock.cpp -msgid "Clear Default for '%s'" +msgid "Set as Default for '%s'" msgstr "" #: editor/import_dock.cpp -msgid " Files" +msgid "Clear Default for '%s'" msgstr "" #: editor/import_dock.cpp @@ -5688,11 +5688,11 @@ msgid "Mesh is empty!" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Trimesh Body" +msgid "Couldn't create a Trimesh collision shape." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Convex Body" +msgid "Create Static Trimesh Body" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -5704,11 +5704,27 @@ msgid "Create Trimesh Static Shape" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Failed creating shapes!" +msgid "Can't create a single convex collision shape for the scene root." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Couldn't create a single convex collision shape." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Single Convex Shape" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Can't create multiple convex collision shapes for the scene root." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Couldn't create any collision shapes." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Convex Shape(s)" +msgid "Create Multiple Convex Shapes" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -5760,11 +5776,40 @@ msgid "Create Trimesh Static Body" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a StaticBody and assigns a polygon-based collision shape to it " +"automatically.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Collision Sibling" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Convex Collision Sibling(s)" +msgid "" +"Creates a polygon-based collision shape.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Single Convex Collision Siblings" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a single convex collision shape.\n" +"This is the fastest (but least accurate) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Multiple Convex Collision Siblings" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a polygon-based collision shape.\n" +"This is a performance middle-ground between the two above options." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -5772,6 +5817,14 @@ msgid "Create Outline Mesh..." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a static outline mesh. The outline mesh will have its normals " +"flipped automatically.\n" +"This can be used instead of the SpatialMaterial Grow property when using " +"that property isn't possible." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "View UV1" msgstr "" @@ -8149,7 +8202,7 @@ msgstr "" msgid "No VCS addons are available." msgstr "" -#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Error" msgstr "" @@ -9241,11 +9294,16 @@ msgid "Export With Debug" msgstr "" #: editor/project_manager.cpp -msgid "The path does not exist." +msgid "The path specified doesn't exist." +msgstr "" + +#: editor/project_manager.cpp +msgid "Error opening package file (it's not in ZIP format)." msgstr "" #: editor/project_manager.cpp -msgid "Invalid '.zip' project file, does not contain a 'project.godot' file." +msgid "" +"Invalid \".zip\" project file; it doesn't contain a \"project.godot\" file." msgstr "" #: editor/project_manager.cpp @@ -9253,11 +9311,11 @@ msgid "Please choose an empty folder." msgstr "" #: editor/project_manager.cpp -msgid "Please choose a 'project.godot' or '.zip' file." +msgid "Please choose a \"project.godot\" or \".zip\" file." msgstr "" #: editor/project_manager.cpp -msgid "Directory already contains a Godot project." +msgid "This directory already contains a Godot project." msgstr "" #: editor/project_manager.cpp @@ -9905,6 +9963,10 @@ msgid "Suffix" msgstr "" #: editor/rename_dialog.cpp +msgid "Use Regular Expressions" +msgstr "" + +#: editor/rename_dialog.cpp msgid "Advanced Options" msgstr "" @@ -9939,7 +10001,7 @@ msgid "" msgstr "" #: editor/rename_dialog.cpp -msgid "Per Level counter" +msgid "Per-level Counter" msgstr "" #: editor/rename_dialog.cpp @@ -9969,10 +10031,6 @@ msgid "" msgstr "" #: editor/rename_dialog.cpp -msgid "Regular Expressions" -msgstr "" - -#: editor/rename_dialog.cpp msgid "Post-Process" msgstr "" @@ -9981,11 +10039,11 @@ msgid "Keep" msgstr "" #: editor/rename_dialog.cpp -msgid "CamelCase to under_scored" +msgid "PascalCase to snake_case" msgstr "" #: editor/rename_dialog.cpp -msgid "under_scored to CamelCase" +msgid "snake_case to PascalCase" msgstr "" #: editor/rename_dialog.cpp @@ -10004,6 +10062,14 @@ msgstr "" msgid "Reset" msgstr "" +#: editor/rename_dialog.cpp +msgid "Regular Expression Error" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "At character %s" +msgstr "" + #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "" @@ -10447,7 +10513,7 @@ msgid "Invalid inherited parent name or path." msgstr "" #: editor/script_create_dialog.cpp -msgid "Script is valid." +msgid "Script path/name is valid." msgstr "" #: editor/script_create_dialog.cpp @@ -10539,6 +10605,10 @@ msgid "Copy Error" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Video RAM" +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Skip Breakpoints" msgstr "" @@ -10587,10 +10657,6 @@ msgid "Total:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Video Mem" -msgstr "" - -#: editor/script_editor_debugger.cpp msgid "Resource Path" msgstr "" diff --git a/editor/translations/te.po b/editor/translations/te.po index 2efe179ce6..836675db64 100644 --- a/editor/translations/te.po +++ b/editor/translations/te.po @@ -667,7 +667,7 @@ msgid "Line Number:" msgstr "" #: editor/code_editor.cpp -msgid "Replaced %d occurrence(s)." +msgid "%d replaced." msgstr "" #: editor/code_editor.cpp editor/editor_help.cpp @@ -3803,15 +3803,15 @@ msgid "Saving..." msgstr "" #: editor/import_dock.cpp -msgid "Set as Default for '%s'" +msgid "%d Files" msgstr "" #: editor/import_dock.cpp -msgid "Clear Default for '%s'" +msgid "Set as Default for '%s'" msgstr "" #: editor/import_dock.cpp -msgid " Files" +msgid "Clear Default for '%s'" msgstr "" #: editor/import_dock.cpp @@ -5640,11 +5640,11 @@ msgid "Mesh is empty!" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Trimesh Body" +msgid "Couldn't create a Trimesh collision shape." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Convex Body" +msgid "Create Static Trimesh Body" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -5656,11 +5656,27 @@ msgid "Create Trimesh Static Shape" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Failed creating shapes!" +msgid "Can't create a single convex collision shape for the scene root." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Couldn't create a single convex collision shape." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Single Convex Shape" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Can't create multiple convex collision shapes for the scene root." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Couldn't create any collision shapes." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Convex Shape(s)" +msgid "Create Multiple Convex Shapes" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -5712,11 +5728,40 @@ msgid "Create Trimesh Static Body" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a StaticBody and assigns a polygon-based collision shape to it " +"automatically.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Collision Sibling" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Convex Collision Sibling(s)" +msgid "" +"Creates a polygon-based collision shape.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Single Convex Collision Siblings" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a single convex collision shape.\n" +"This is the fastest (but least accurate) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Multiple Convex Collision Siblings" +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a polygon-based collision shape.\n" +"This is a performance middle-ground between the two above options." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -5724,6 +5769,14 @@ msgid "Create Outline Mesh..." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a static outline mesh. The outline mesh will have its normals " +"flipped automatically.\n" +"This can be used instead of the SpatialMaterial Grow property when using " +"that property isn't possible." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "View UV1" msgstr "" @@ -8088,7 +8141,7 @@ msgstr "" msgid "No VCS addons are available." msgstr "" -#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Error" msgstr "" @@ -9173,11 +9226,16 @@ msgid "Export With Debug" msgstr "" #: editor/project_manager.cpp -msgid "The path does not exist." +msgid "The path specified doesn't exist." +msgstr "" + +#: editor/project_manager.cpp +msgid "Error opening package file (it's not in ZIP format)." msgstr "" #: editor/project_manager.cpp -msgid "Invalid '.zip' project file, does not contain a 'project.godot' file." +msgid "" +"Invalid \".zip\" project file; it doesn't contain a \"project.godot\" file." msgstr "" #: editor/project_manager.cpp @@ -9185,11 +9243,11 @@ msgid "Please choose an empty folder." msgstr "" #: editor/project_manager.cpp -msgid "Please choose a 'project.godot' or '.zip' file." +msgid "Please choose a \"project.godot\" or \".zip\" file." msgstr "" #: editor/project_manager.cpp -msgid "Directory already contains a Godot project." +msgid "This directory already contains a Godot project." msgstr "" #: editor/project_manager.cpp @@ -9835,6 +9893,10 @@ msgid "Suffix" msgstr "" #: editor/rename_dialog.cpp +msgid "Use Regular Expressions" +msgstr "" + +#: editor/rename_dialog.cpp msgid "Advanced Options" msgstr "" @@ -9869,7 +9931,7 @@ msgid "" msgstr "" #: editor/rename_dialog.cpp -msgid "Per Level counter" +msgid "Per-level Counter" msgstr "" #: editor/rename_dialog.cpp @@ -9899,10 +9961,6 @@ msgid "" msgstr "" #: editor/rename_dialog.cpp -msgid "Regular Expressions" -msgstr "" - -#: editor/rename_dialog.cpp msgid "Post-Process" msgstr "" @@ -9911,11 +9969,11 @@ msgid "Keep" msgstr "" #: editor/rename_dialog.cpp -msgid "CamelCase to under_scored" +msgid "PascalCase to snake_case" msgstr "" #: editor/rename_dialog.cpp -msgid "under_scored to CamelCase" +msgid "snake_case to PascalCase" msgstr "" #: editor/rename_dialog.cpp @@ -9934,6 +9992,14 @@ msgstr "" msgid "Reset" msgstr "" +#: editor/rename_dialog.cpp +msgid "Regular Expression Error" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "At character %s" +msgstr "" + #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "" @@ -10373,7 +10439,7 @@ msgid "Invalid inherited parent name or path." msgstr "" #: editor/script_create_dialog.cpp -msgid "Script is valid." +msgid "Script path/name is valid." msgstr "" #: editor/script_create_dialog.cpp @@ -10465,6 +10531,10 @@ msgid "Copy Error" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Video RAM" +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Skip Breakpoints" msgstr "" @@ -10513,10 +10583,6 @@ msgid "Total:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Video Mem" -msgstr "" - -#: editor/script_editor_debugger.cpp msgid "Resource Path" msgstr "" diff --git a/editor/translations/th.po b/editor/translations/th.po index 73a18a006d..30dba54a16 100644 --- a/editor/translations/th.po +++ b/editor/translations/th.po @@ -725,8 +725,9 @@ msgid "Line Number:" msgstr "บรรทัดที่:" #: editor/code_editor.cpp -msgid "Replaced %d occurrence(s)." -msgstr "แทนที่แล้ว %d ครั้ง" +#, fuzzy +msgid "%d replaced." +msgstr "แทนที่..." #: editor/code_editor.cpp editor/editor_help.cpp msgid "%d match." @@ -4079,6 +4080,11 @@ msgid "Saving..." msgstr "กำลังบันทึก..." #: editor/import_dock.cpp +#, fuzzy +msgid "%d Files" +msgstr " ไฟล์" + +#: editor/import_dock.cpp msgid "Set as Default for '%s'" msgstr "กำหนดเป็นค่าเริ่มต้นของ '%s'" @@ -4087,10 +4093,6 @@ msgid "Clear Default for '%s'" msgstr "ลบค่าเริ่มต้นของ '%s'" #: editor/import_dock.cpp -msgid " Files" -msgstr " ไฟล์" - -#: editor/import_dock.cpp msgid "Import As:" msgstr "นำเข้าเป็น:" @@ -6074,12 +6076,13 @@ msgid "Mesh is empty!" msgstr "Mesh ว่างเปล่า!" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Trimesh Body" -msgstr "สร้าง Static Trimesh Body" +#, fuzzy +msgid "Couldn't create a Trimesh collision shape." +msgstr "สร้างรูปทรงกายภาพเป็นโหนดญาติ" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Convex Body" -msgstr "สร้าง StaticBody ทรงตัน" +msgid "Create Static Trimesh Body" +msgstr "สร้าง Static Trimesh Body" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "This doesn't work on scene root!" @@ -6091,12 +6094,30 @@ msgid "Create Trimesh Static Shape" msgstr "สร้างรูปทรง Trimesh" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Failed creating shapes!" +msgid "Can't create a single convex collision shape for the scene root." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Couldn't create a single convex collision shape." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Create Single Convex Shape" +msgstr "สร้างรูปทรงนูน" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Can't create multiple convex collision shapes for the scene root." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp #, fuzzy -msgid "Create Convex Shape(s)" +msgid "Couldn't create any collision shapes." +msgstr "ไม่สามารถสร้างโฟลเดอร์" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Create Multiple Convex Shapes" msgstr "สร้างรูปทรงนูน" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -6148,19 +6169,57 @@ msgid "Create Trimesh Static Body" msgstr "สร้าง Trimesh Static Body" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a StaticBody and assigns a polygon-based collision shape to it " +"automatically.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Collision Sibling" msgstr "สร้างรูปทรงกายภาพเป็นโหนดญาติ" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a polygon-based collision shape.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp #, fuzzy -msgid "Create Convex Collision Sibling(s)" +msgid "Create Single Convex Collision Siblings" msgstr "สร้างรูปทรงตันกายภาพเป็นโหนดญาติ" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a single convex collision shape.\n" +"This is the fastest (but least accurate) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Create Multiple Convex Collision Siblings" +msgstr "สร้างรูปทรงตันกายภาพเป็นโหนดญาติ" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a polygon-based collision shape.\n" +"This is a performance middle-ground between the two above options." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Outline Mesh..." msgstr "สร้างเส้นขอบ Mesh..." #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a static outline mesh. The outline mesh will have its normals " +"flipped automatically.\n" +"This can be used instead of the SpatialMaterial Grow property when using " +"that property isn't possible." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "View UV1" msgstr "แสดง UV1" @@ -8730,7 +8789,7 @@ msgstr "Tile Set" msgid "No VCS addons are available." msgstr "" -#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Error" msgstr "ผิดพลาด" @@ -9886,12 +9945,19 @@ msgid "Export With Debug" msgstr "ส่งออกพร้อมการแก้ไขจุดบกพร่อง" #: editor/project_manager.cpp -msgid "The path does not exist." +#, fuzzy +msgid "The path specified doesn't exist." msgstr "ไม่พบไฟล์" #: editor/project_manager.cpp #, fuzzy -msgid "Invalid '.zip' project file, does not contain a 'project.godot' file." +msgid "Error opening package file (it's not in ZIP format)." +msgstr "ผิดพลาดขณะเปิดไฟล์แพคเกจ, ไม่ใช่รูปแบบ zip" + +#: editor/project_manager.cpp +#, fuzzy +msgid "" +"Invalid \".zip\" project file; it doesn't contain a \"project.godot\" file." msgstr "กรุณาเลือกโฟลเดอร์ที่ไม่มีไฟล์ 'project.godot'" #: editor/project_manager.cpp @@ -9900,11 +9966,11 @@ msgstr "กรุณาเลือกโฟลเดอร์ว่างเป #: editor/project_manager.cpp #, fuzzy -msgid "Please choose a 'project.godot' or '.zip' file." +msgid "Please choose a \"project.godot\" or \".zip\" file." msgstr "กรุณาเลือกไฟล์ 'project.godot'" #: editor/project_manager.cpp -msgid "Directory already contains a Godot project." +msgid "This directory already contains a Godot project." msgstr "" #: editor/project_manager.cpp @@ -10586,6 +10652,11 @@ msgstr "" #: editor/rename_dialog.cpp #, fuzzy +msgid "Use Regular Expressions" +msgstr "แก้ไขสมการ" + +#: editor/rename_dialog.cpp +#, fuzzy msgid "Advanced Options" msgstr "ตัวเลือกการจำกัด" @@ -10624,7 +10695,7 @@ msgid "" msgstr "" #: editor/rename_dialog.cpp -msgid "Per Level counter" +msgid "Per-level Counter" msgstr "" #: editor/rename_dialog.cpp @@ -10656,11 +10727,6 @@ msgstr "" #: editor/rename_dialog.cpp #, fuzzy -msgid "Regular Expressions" -msgstr "แก้ไขสมการ" - -#: editor/rename_dialog.cpp -#, fuzzy msgid "Post-Process" msgstr "สคริปต์หลังประมวลผล:" @@ -10669,11 +10735,11 @@ msgid "Keep" msgstr "เก็บ" #: editor/rename_dialog.cpp -msgid "CamelCase to under_scored" +msgid "PascalCase to snake_case" msgstr "" #: editor/rename_dialog.cpp -msgid "under_scored to CamelCase" +msgid "snake_case to PascalCase" msgstr "" #: editor/rename_dialog.cpp @@ -10695,6 +10761,16 @@ msgstr "ตัวพิมพ์ใหญ่" msgid "Reset" msgstr "รีเซ็ตซูม" +#: editor/rename_dialog.cpp +#, fuzzy +msgid "Regular Expression Error" +msgstr "แก้ไขสมการ" + +#: editor/rename_dialog.cpp +#, fuzzy +msgid "At character %s" +msgstr "ตัวอักษรที่ใช้ได้:" + #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "หาโหนดแม่ใหม่" @@ -11186,7 +11262,7 @@ msgstr "ชื่อหรือตำแหน่งทีสืบทอดไ #: editor/script_create_dialog.cpp #, fuzzy -msgid "Script is valid." +msgid "Script path/name is valid." msgstr "สคริปต์ถูกต้อง" #: editor/script_create_dialog.cpp @@ -11295,6 +11371,11 @@ msgstr "คัดลอกผิดพลาด" #: editor/script_editor_debugger.cpp #, fuzzy +msgid "Video RAM" +msgstr "หน่วยความจำวีดีโอ" + +#: editor/script_editor_debugger.cpp +#, fuzzy msgid "Skip Breakpoints" msgstr "ลบจุด" @@ -11344,10 +11425,6 @@ msgid "Total:" msgstr "ทั้งหมด:" #: editor/script_editor_debugger.cpp -msgid "Video Mem" -msgstr "หน่วยความจำวีดีโอ" - -#: editor/script_editor_debugger.cpp msgid "Resource Path" msgstr "ตำแหน่งรีซอร์ส" @@ -12983,6 +13060,12 @@ msgstr "" msgid "Constants cannot be modified." msgstr "" +#~ msgid "Replaced %d occurrence(s)." +#~ msgstr "แทนที่แล้ว %d ครั้ง" + +#~ msgid "Create Static Convex Body" +#~ msgstr "สร้าง StaticBody ทรงตัน" + #~ msgid "" #~ "There are currently no tutorials for this class, you can [color=$color]" #~ "[url=$url]contribute one[/url][/color] or [color=$color][url=" diff --git a/editor/translations/tr.po b/editor/translations/tr.po index 192364f0c6..207c91e7c3 100644 --- a/editor/translations/tr.po +++ b/editor/translations/tr.po @@ -41,12 +41,13 @@ # isimsiz <isimsiz@mailinator.com>, 2019. # Muhammet Mustafa Tozlu <m.mustafatozlu@gmail.com>, 2019. # HALİL ATAŞ <halillatass@gmail.com>, 2019. +# Zsosu Ktosu <zktosu@gmail.com>, 2020. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2019-11-20 14:07+0000\n" -"Last-Translator: HALİL ATAŞ <halillatass@gmail.com>\n" +"PO-Revision-Date: 2020-01-30 03:56+0000\n" +"Last-Translator: Zsosu Ktosu <zktosu@gmail.com>\n" "Language-Team: Turkish <https://hosted.weblate.org/projects/godot-engine/" "godot/tr/>\n" "Language: tr\n" @@ -54,7 +55,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 3.10-dev\n" +"X-Generator: Weblate 3.11-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -65,13 +66,13 @@ msgstr "" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp msgid "Expected a string of length 1 (a character)." -msgstr "" +msgstr "1 (karakter) uzunlukta metin bekleniyor." #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/mono/glue/gd_glue.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." -msgstr "Byte kodu çözmek için yetersiz byte, ya da geçersiz format." +msgstr "Baytları çözümlemek için yetersiz miktarda bayt ya da geçersiz format." #: core/math/expression.cpp msgid "Invalid input %i (not passed) in expression" @@ -131,7 +132,7 @@ msgstr "EiB" #: editor/animation_bezier_editor.cpp msgid "Free" -msgstr "Ücretsiz" +msgstr "Serbest" #: editor/animation_bezier_editor.cpp msgid "Balanced" @@ -458,7 +459,7 @@ msgstr "Bir kök olmadan yeni bir iz eklemek mümkün değildir" #: editor/animation_track_editor.cpp msgid "Invalid track for Bezier (no suitable sub-properties)" -msgstr "" +msgstr "Geçersiz Bezier eğrisi izi (uygun alt-nitelik yok)" #: editor/animation_track_editor.cpp msgid "Add Bezier Track" @@ -490,7 +491,7 @@ msgstr "Yöntem İz Anahtarı Ekle" #: editor/animation_track_editor.cpp msgid "Method not found in object: " -msgstr "Yöntem, nesne içinde bulunamadı " +msgstr "Metot, nesne içinde bulunamadı: " #: editor/animation_track_editor.cpp msgid "Anim Move Keys" @@ -542,7 +543,8 @@ msgstr "Uyarı: İçe aktarılan animasyonu düzenleme" #: editor/animation_track_editor.cpp msgid "Select an AnimationPlayer node to create and edit animations." -msgstr "Animasyonları düzenleyebilmek için Animasyon Oynatıcı düğümü seçin." +msgstr "" +"Animasyonları oluşturup düzenlemek için Animasyon Oynatıcı düğümü seçin." #: editor/animation_track_editor.cpp msgid "Only show tracks from nodes selected in tree." @@ -648,7 +650,7 @@ msgstr "Maks. Eniyileştirilebilir Açı:" #: editor/animation_track_editor.cpp msgid "Optimize" -msgstr "Eniyileştir" +msgstr "İyileştir" #: editor/animation_track_editor.cpp msgid "Remove invalid keys" @@ -724,8 +726,9 @@ msgid "Line Number:" msgstr "Satır Numarası:" #: editor/code_editor.cpp -msgid "Replaced %d occurrence(s)." -msgstr "Değiştirildi %d oluş(sn)." +#, fuzzy +msgid "%d replaced." +msgstr "Değiştir..." #: editor/code_editor.cpp editor/editor_help.cpp msgid "%d match." @@ -842,9 +845,8 @@ msgid "Extra Call Arguments:" msgstr "Ekstra Çağrı Argümanları:" #: editor/connections_dialog.cpp -#, fuzzy msgid "Receiver Method:" -msgstr "Metot Seç" +msgstr "Alıcı Metodu:" #: editor/connections_dialog.cpp msgid "Advanced" @@ -857,7 +859,7 @@ msgstr "Ertelenmiş" #: editor/connections_dialog.cpp msgid "" "Defers the signal, storing it in a queue and only firing it at idle time." -msgstr "Sinyali savunur, sıraya kaydeder ve sadece rölantide iken ateşler." +msgstr "Sinyali erteler, sıraya kaydeder ve sadece işlemci boşta iken ateşler." #: editor/connections_dialog.cpp msgid "Oneshot" @@ -942,7 +944,7 @@ msgstr "Tüm Bağlantıları Kes" #: editor/connections_dialog.cpp msgid "Edit..." -msgstr "Düzenle" +msgstr "Düzenle..." #: editor/connections_dialog.cpp msgid "Go To Method" @@ -1228,9 +1230,8 @@ msgid "Error opening package file, not in ZIP format." msgstr "Paket dosyası açılırken hata oluştu, zip formatında değil." #: editor/editor_asset_installer.cpp -#, fuzzy msgid "%s (Already Exists)" -msgstr "Zaten mevcut" +msgstr "%s (Zaten Var)" #: editor/editor_asset_installer.cpp msgid "Uncompressing Assets" @@ -1241,9 +1242,8 @@ msgid "The following files failed extraction from package:" msgstr "Aşağıdaki dosyaların, çıkından ayıklanma işlemi başarısız oldu:" #: editor/editor_asset_installer.cpp -#, fuzzy msgid "And %s more files." -msgstr "%d daha fazla dosyalar" +msgstr "Ve %s kadar dosya daha." #: editor/editor_asset_installer.cpp editor/project_manager.cpp msgid "Package installed successfully!" @@ -1255,9 +1255,8 @@ msgid "Success!" msgstr "Başarılı!" #: editor/editor_asset_installer.cpp -#, fuzzy msgid "Package Contents:" -msgstr "İçerikler:" +msgstr "Paket İçerikleri:" #: editor/editor_asset_installer.cpp editor/editor_node.cpp msgid "Install" @@ -1397,9 +1396,8 @@ msgid "Invalid file, not an audio bus layout." msgstr "Geçersiz dosya, bu bir audio bus yerleşim düzeni değil." #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Error saving file: %s" -msgstr "Dosya kaydedilirken hata!" +msgstr "%s dosyası kaydedilirken hata" #: editor/editor_audio_buses.cpp msgid "Add Bus" @@ -1445,7 +1443,7 @@ msgstr "Geçersiz ad." #: editor/editor_autoload_settings.cpp msgid "Valid characters:" -msgstr "Geçerli damgalar:" +msgstr "Geçerli karakterler:" #: editor/editor_autoload_settings.cpp msgid "Must not collide with an existing engine class name." @@ -1769,9 +1767,8 @@ msgid "Erase Profile" msgstr "Profili Sil" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Godot Feature Profile" -msgstr "Dışa Aktarım Şablonlarını Yönet" +msgstr "Godot Özellik Profili" #: editor/editor_feature_profile.cpp msgid "Import Profile(s)" @@ -1974,9 +1971,8 @@ msgid "Inherited by:" msgstr "Şundan miras alındı:" #: editor/editor_help.cpp -#, fuzzy msgid "Description" -msgstr "Açıklama:" +msgstr "Tanım" #: editor/editor_help.cpp msgid "Online Tutorials" @@ -1987,14 +1983,12 @@ msgid "Properties" msgstr "Özellikler" #: editor/editor_help.cpp -#, fuzzy msgid "override:" -msgstr "Üzerine Yaz" +msgstr "üzerine yaz:" #: editor/editor_help.cpp -#, fuzzy msgid "default:" -msgstr "Varsayılan" +msgstr "varsayılan:" #: editor/editor_help.cpp msgid "Methods" @@ -2017,9 +2011,8 @@ msgid "Property Descriptions" msgstr "Özellik Açıklamaları" #: editor/editor_help.cpp -#, fuzzy msgid "(value)" -msgstr "Değer" +msgstr "(değer)" #: editor/editor_help.cpp msgid "" @@ -2051,9 +2044,8 @@ msgid "Case Sensitive" msgstr "Büyük Küçük Harf Duyarlı" #: editor/editor_help_search.cpp -#, fuzzy msgid "Show Hierarchy" -msgstr "Yardımcıları Göster" +msgstr "Hiyerarşiyi Göster" #: editor/editor_help_search.cpp msgid "Display All" @@ -2092,9 +2084,8 @@ msgid "Class" msgstr "Sınıf" #: editor/editor_help_search.cpp -#, fuzzy msgid "Method" -msgstr "Metotlar" +msgstr "Metot" #: editor/editor_help_search.cpp editor/plugins/script_text_editor.cpp msgid "Signal" @@ -2105,14 +2096,12 @@ msgid "Constant" msgstr "Sabit" #: editor/editor_help_search.cpp -#, fuzzy msgid "Property" -msgstr "Özellik:" +msgstr "Nitelik" #: editor/editor_help_search.cpp -#, fuzzy msgid "Theme Property" -msgstr "Tema Özellikleri" +msgstr "Tema Özelliği" #: editor/editor_inspector.cpp editor/project_settings_editor.cpp msgid "Property:" @@ -2989,7 +2978,7 @@ msgstr "Oynat" #: editor/editor_node.cpp msgid "Pause the scene execution for debugging." -msgstr "" +msgstr "Hata ayıklama için sahnenin çalıştırılmasını duraklat." #: editor/editor_node.cpp msgid "Pause Scene" @@ -3098,9 +3087,8 @@ msgid "Import Templates From ZIP File" msgstr "Şablonları Zip Dosyasından İçeri Aktar" #: editor/editor_node.cpp -#, fuzzy msgid "Template Package" -msgstr "Dışa Aktarım Şablonu Yöneticisi" +msgstr "Şablon Paketi" #: editor/editor_node.cpp msgid "Export Library" @@ -3151,9 +3139,8 @@ msgid "Open the previous Editor" msgstr "Önceki Düzenleyiciyi Aç" #: editor/editor_node.h -#, fuzzy msgid "Warning!" -msgstr "Uyarı" +msgstr "Uyarı!" #: editor/editor_path.cpp msgid "No sub-resources found." @@ -3476,13 +3463,12 @@ msgid "Importing:" msgstr "İçe Aktarım:" #: editor/export_template_manager.cpp -#, fuzzy msgid "Error getting the list of mirrors." -msgstr "İmza nesnesini oluşturmada sorun." +msgstr "Kaynaklar listesini alırken hata." #: editor/export_template_manager.cpp msgid "Error parsing JSON of mirror list. Please report this issue!" -msgstr "" +msgstr "JSON sunucuları listesini alırken hata. Lütfen bu hatayı bildirin!" #: editor/export_template_manager.cpp msgid "" @@ -3611,9 +3597,8 @@ msgid "Select Template File" msgstr "Şablon Dosyası Seç" #: editor/export_template_manager.cpp -#, fuzzy msgid "Godot Export Templates" -msgstr "Dışa Aktarım Kalıpları Yükleniyor" +msgstr "Godot Dışa Aktarım Şablonları" #: editor/export_template_manager.cpp msgid "Export Template Manager" @@ -3694,9 +3679,8 @@ msgid "New Inherited Scene" msgstr "Yeni Miras Alınmış Sahne" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Set As Main Scene" -msgstr "Ana Sahne" +msgstr "Sahneyi Ana Sahne Yap" #: editor/filesystem_dock.cpp msgid "Open Scenes" @@ -4001,6 +3985,11 @@ msgid "Saving..." msgstr "Kaydediliyor..." #: editor/import_dock.cpp +#, fuzzy +msgid "%d Files" +msgstr " Dosyalar" + +#: editor/import_dock.cpp msgid "Set as Default for '%s'" msgstr "'%s' için Varsayılanı Ayarla" @@ -4009,10 +3998,6 @@ msgid "Clear Default for '%s'" msgstr "'%s' İçin Varsayılanı Temizle" #: editor/import_dock.cpp -msgid " Files" -msgstr " Dosyalar" - -#: editor/import_dock.cpp msgid "Import As:" msgstr "Şu Şekilde İçe Aktar:" @@ -4427,19 +4412,16 @@ msgstr "" "alınamadı." #: editor/plugins/animation_blend_tree_editor_plugin.cpp -#, fuzzy msgid "Anim Clips" -msgstr "Animasyon Klipleri:" +msgstr "Animasyon Klipleri" #: editor/plugins/animation_blend_tree_editor_plugin.cpp -#, fuzzy msgid "Audio Clips" -msgstr "Ses Parçası:" +msgstr "Ses Parçaları" #: editor/plugins/animation_blend_tree_editor_plugin.cpp -#, fuzzy msgid "Functions" -msgstr "İşlevler:" +msgstr "İşlevler" #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp @@ -4505,7 +4487,7 @@ msgstr "Sonraki Değişeni Karıştır" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Change Blend Time" -msgstr "Karışım Süresini Değiştir" +msgstr "Oluşturma Süresini Değiştir" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Load Animation" @@ -4671,9 +4653,8 @@ msgid "Move Node" msgstr "Düğümü Taşı" #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Transition exists!" -msgstr "Geçiş: " +msgstr "Geçiş zaten var!" #: editor/plugins/animation_state_machine_editor.cpp msgid "Add Transition" @@ -4763,9 +4744,8 @@ msgid "Transition: " msgstr "Geçiş: " #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Play Mode:" -msgstr "Kaydırma Biçimi" +msgstr "Oynatma Modu:" #: editor/plugins/animation_tree_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp @@ -5022,29 +5002,27 @@ msgstr "Bu nesne için zaten sürdürülen bir indirme var!" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Recently Updated" -msgstr "" +msgstr "Henüz Güncellenenler" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Least Recently Updated" -msgstr "" +msgstr "Pek Eski Güncellenenler" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Name (A-Z)" -msgstr "" +msgstr "İsim (A-Z)" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Name (Z-A)" -msgstr "" +msgstr "Name (Z-A)" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "License (A-Z)" -msgstr "Lisans" +msgstr "Lisans (A-Z)" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "License (Z-A)" -msgstr "Lisans" +msgstr "Lisans (Z-A)" #: editor/plugins/asset_library_editor_plugin.cpp msgid "First" @@ -5158,12 +5136,11 @@ msgstr "Izgara Adımı:" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Primary Line Every:" -msgstr "" +msgstr "Birincil Satır Her:" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "steps" -msgstr "2 kademe" +msgstr "adımlar" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Rotation Offset:" @@ -5174,9 +5151,8 @@ msgid "Rotation Step:" msgstr "Dönme Adımı:" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Scale Step:" -msgstr "Ölçekle:" +msgstr "Ölçek Adımı:" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move Vertical Guide" @@ -5251,86 +5227,72 @@ msgstr "" "noktasını değiştirir." #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Top Left" -msgstr "Sol" +msgstr "Sol Üst" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Top Right" -msgstr "Sağ" +msgstr "Sağ Üst" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Bottom Right" -msgstr "Sağa Döndür" +msgstr "Alt Sağ" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Bottom Left" -msgstr "Alttan Görünüm" +msgstr "Alt Sol" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Center Left" -msgstr "Sola Girintile" +msgstr "Sol Merkez" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Center Top" -msgstr "İçre Seçimi" +msgstr "Merkez Üst" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Center Right" -msgstr "Sağa Girintile" +msgstr "Merkez Sağ" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Center Bottom" -msgstr "Alt" +msgstr "Merkez Alt" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center" -msgstr "" +msgstr "Merkez" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Left Wide" msgstr "Soldan Görünüm" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Top Wide" msgstr "Üstten Görünüm" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Right Wide" msgstr "Sağdan Görünüm" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Bottom Wide" msgstr "Alttan Görünüm" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "VCenter Wide" -msgstr "" +msgstr "DikeyMerkez Görünüm" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "HCenter Wide" -msgstr "" +msgstr "YatayMerkez Görünüm" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Full Rect" -msgstr "Tam adı" +msgstr "Tam Kare" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Keep Ratio" -msgstr "Ölçek Oranı:" +msgstr "Oranı Koru" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Anchors only" @@ -5350,6 +5312,8 @@ msgid "" "Game Camera Override\n" "Overrides game camera with editor viewport camera." msgstr "" +"Oyun Kamerası Değiştir\n" +"Oyun kamerasını, düzenleme arayüzü kamerası ile değiştirir." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -5357,6 +5321,8 @@ msgid "" "Game Camera Override\n" "No game instance running." msgstr "" +"Oyun Kamera Değiştir\n" +"Çalışan oyun örneği yok." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -5500,9 +5466,8 @@ msgid "Use Rotation Snap" msgstr "Döndürme Yapışması Kullan" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Use Scale Snap" -msgstr "Akıllı Hizalama Kullan" +msgstr "Esnetme Hizalaması Kullan" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap Relative" @@ -5643,15 +5608,14 @@ msgid "Insert keys (based on mask)." msgstr "Anahtar Gir (maskeye dayalı olarak)." #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "" "Auto insert keys when objects are translated, rotated or scaled (based on " "mask).\n" "Keys are only added to existing tracks, no new tracks will be created.\n" "Keys must be inserted manually for the first time." msgstr "" -"Anahtarları otomatik olarak yerleştir eğer nesne yer değiştirdiyse, döndüyse " -"ya da esnetildiyse (maskeye göre).\n" +"Eğer nesne hareket ettiyle, döndürüldüyse ya da esnetildiyse anahtarları " +"otomatik yerleştir (maskeye göre).\n" "Anahtarlar yalnızca mevcut izlere eklenir, yeni izler oluşturulmayacak.\n" "İlkinde anahtarlar elle girilmeli." @@ -5660,9 +5624,8 @@ msgid "Auto Insert Key" msgstr "Otomatik Anahtar Gir" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Animation Key and Pose Options" -msgstr "Animasyon Anahtarı Eklendi." +msgstr "Animasyon Anahtarı ve Pozlama Seçenekleri" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Insert Key (Existing Tracks)" @@ -5773,20 +5736,18 @@ msgstr "Emisyon Maskesi" #: editor/plugins/cpu_particles_2d_editor_plugin.cpp #: editor/plugins/particles_2d_editor_plugin.cpp -#, fuzzy msgid "Solid Pixels" -msgstr "Sıkıştır (Pikselleri): " +msgstr "Şekil Pikselleri" #: editor/plugins/cpu_particles_2d_editor_plugin.cpp #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Border Pixels" -msgstr "" +msgstr "Kenar Pikselleri" #: editor/plugins/cpu_particles_2d_editor_plugin.cpp #: editor/plugins/particles_2d_editor_plugin.cpp -#, fuzzy msgid "Directed Border Pixels" -msgstr "Dizinler & Dosyalar:" +msgstr "Yönelimli Kenar Pikselleri" #: editor/plugins/cpu_particles_2d_editor_plugin.cpp #: editor/plugins/particles_2d_editor_plugin.cpp @@ -5909,12 +5870,13 @@ msgid "Mesh is empty!" msgstr "Örüntü boş!" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Trimesh Body" -msgstr "Durağan Üçlü Örüntü Oluştur" +#, fuzzy +msgid "Couldn't create a Trimesh collision shape." +msgstr "Üçlü Örüntü Çarpışma Kardeşi Oluştur" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Convex Body" -msgstr "Durağan Dışbükey Gövde Oluştur" +msgid "Create Static Trimesh Body" +msgstr "Durağan Üçlü Örüntü Oluştur" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "This doesn't work on scene root!" @@ -5925,11 +5887,30 @@ msgid "Create Trimesh Static Shape" msgstr "Üçlü Örüntü Yüzeyi Oluştur" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Failed creating shapes!" -msgstr "Şekil oluşturma başarısız!" +msgid "Can't create a single convex collision shape for the scene root." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Couldn't create a single convex collision shape." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Create Single Convex Shape" +msgstr "Dışbükey Şekil[ler] Oluştur" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Can't create multiple convex collision shapes for the scene root." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Couldn't create any collision shapes." +msgstr "Klasör oluşturulamadı." #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Convex Shape(s)" +#, fuzzy +msgid "Create Multiple Convex Shapes" msgstr "Dışbükey Şekil[ler] Oluştur" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -5981,18 +5962,57 @@ msgid "Create Trimesh Static Body" msgstr "Üçlü Örüntü Durağan Gövdesi Oluştur" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a StaticBody and assigns a polygon-based collision shape to it " +"automatically.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Collision Sibling" msgstr "Üçlü Örüntü Çarpışma Kardeşi Oluştur" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Convex Collision Sibling(s)" +msgid "" +"Creates a polygon-based collision shape.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Create Single Convex Collision Siblings" msgstr "Dışbükey Çarpışma Komşusu Oluştur" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a single convex collision shape.\n" +"This is the fastest (but least accurate) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Create Multiple Convex Collision Siblings" +msgstr "Dışbükey Çarpışma Komşusu Oluştur" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a polygon-based collision shape.\n" +"This is a performance middle-ground between the two above options." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Outline Mesh..." msgstr "Anahat Örüntüsü Oluştur..." #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a static outline mesh. The outline mesh will have its normals " +"flipped automatically.\n" +"This can be used instead of the SpatialMaterial Grow property when using " +"that property isn't possible." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "View UV1" msgstr "UV1'i Göster" @@ -6014,23 +6034,23 @@ msgstr "Kontur Boyutu:" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "UV Channel Debug" -msgstr "" +msgstr "UV Kanal Hata Ayıkla" #: editor/plugins/mesh_library_editor_plugin.cpp msgid "Remove item %d?" msgstr "%d öğe kaldırılsın mı?" #: editor/plugins/mesh_library_editor_plugin.cpp -#, fuzzy msgid "" "Update from existing scene?:\n" "%s" -msgstr "Sahneden Güncelle" +msgstr "" +"Mevcut sahneden güncellensin mi?:\n" +"%s" #: editor/plugins/mesh_library_editor_plugin.cpp -#, fuzzy msgid "Mesh Library" -msgstr "MeshLibrary ..." +msgstr "Model Kütüphanesi" #: editor/plugins/mesh_library_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp @@ -6665,20 +6685,22 @@ msgstr "Farklı Kaydet..." #: editor/plugins/script_editor_plugin.cpp msgid "Can't obtain the script for running." -msgstr "" +msgstr "Çalıştırmak için komut dosyası alınamıyor." #: editor/plugins/script_editor_plugin.cpp msgid "Script failed reloading, check console for errors." -msgstr "" +msgstr "Komut dosyası yeniden yüklenemedi, konsolda hataları denetleyin." #: editor/plugins/script_editor_plugin.cpp msgid "Script is not in tool mode, will not be able to run." -msgstr "" +msgstr "Komut dosyası araç modunda değil, çalıştırılamayacak." #: editor/plugins/script_editor_plugin.cpp msgid "" "To run this script, it must inherit EditorScript and be set to tool mode." msgstr "" +"Komut dosyasının çalışabilmesi için EditörScript'den devrolunmalı ve araç " +"moduna ayarlandmalı." #: editor/plugins/script_editor_plugin.cpp msgid "Import Theme" @@ -6928,6 +6950,7 @@ msgstr "Sadece dosya sisteminden kaynaklar bırakılabilir." #: modules/visual_script/visual_script_editor.cpp msgid "Can't drop nodes because script '%s' is not used in this scene." msgstr "" +"Bu sahnede '% s' komut dosyası kullanılmadığı için düğümler bırakılamıyor." #: editor/plugins/script_text_editor.cpp msgid "Lookup Symbol" @@ -7332,7 +7355,7 @@ msgstr "Sinematik Önizleme" #: editor/plugins/spatial_editor_plugin.cpp msgid "Not available when using the GLES2 renderer." -msgstr "" +msgstr "GLES2 işleyici kullanılırken kullanılamaz." #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Left" @@ -7575,9 +7598,8 @@ msgid "Create Mesh2D" msgstr "Örüntü2D Oluştur" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Mesh2D Preview" -msgstr "Mesh Önizlemeleri Oluşturuluyor" +msgstr "Mesh2B Önizleme" #: editor/plugins/sprite_editor_plugin.cpp msgid "Create Polygon2D" @@ -7585,25 +7607,23 @@ msgstr "Çokgen2D Oluştur" #: editor/plugins/sprite_editor_plugin.cpp msgid "Polygon2D Preview" -msgstr "" +msgstr "Çokgen2B Önizleme" #: editor/plugins/sprite_editor_plugin.cpp msgid "Create CollisionPolygon2D" msgstr "TemasÇokgen2D Oluştur" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "CollisionPolygon2D Preview" -msgstr "TemasÇokgen2D Oluştur" +msgstr "TemasÇokgen2B Önizle" #: editor/plugins/sprite_editor_plugin.cpp msgid "Create LightOccluder2D" msgstr "IşıkEngelleyici2D Oluştur" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "LightOccluder2D Preview" -msgstr "IşıkEngelleyici2D Oluştur" +msgstr "IşıkEngelleyici2D Önizle" #: editor/plugins/sprite_editor_plugin.cpp msgid "Sprite is empty!" @@ -7683,9 +7703,8 @@ msgid "Add Frame" msgstr "Çerçeve Ekle" #: editor/plugins/sprite_frames_editor_plugin.cpp -#, fuzzy msgid "Unable to load images" -msgstr "Bediz yüklenemedi:" +msgstr "Resimler yüklenemiyor" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "ERROR: Couldn't load frame resource!" @@ -7954,7 +7973,7 @@ msgstr "Altağaç" #: editor/plugins/theme_editor_plugin.cpp msgid "Has,Many,Options" -msgstr "Birçok,Seçenek,Var" +msgstr "Var,Çok,Seçenekler" #: editor/plugins/theme_editor_plugin.cpp msgid "Data Type:" @@ -7978,9 +7997,8 @@ msgid "Color" msgstr "Renk" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Theme File" -msgstr "Tema" +msgstr "Tema Dosyası" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Erase Selection" @@ -8095,17 +8113,15 @@ msgstr "Sahneden Birleştir" #: editor/plugins/tile_set_editor_plugin.cpp msgid "New Single Tile" -msgstr "" +msgstr "Yeni Döşeme Parçacığı" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "New Autotile" -msgstr "Oto-döşemeleri Pasifleştir" +msgstr "Yeni oto-döşeme" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "New Atlas" -msgstr "Atlas :" +msgstr "Yeni Atlas" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Next Coordinate" @@ -8124,39 +8140,32 @@ msgid "Select the previous shape, subtile, or Tile." msgstr "Önceki şekil, altdöşeme ya da Döşemeyi Seç." #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Region" -msgstr "Bölge Şekli" +msgstr "Bölge" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Collision" -msgstr "Temas Şekli" +msgstr "Temas" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Occlusion" -msgstr "Örtü Şekli" +msgstr "Engel" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Navigation" -msgstr "Gezinim Şekli" +msgstr "Gezinim" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Bitmask" -msgstr "BitMaskeleme Şekli" +msgstr "Bitmaskesi" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Priority" -msgstr "Öncelik Şekli" +msgstr "Öncelik" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Z Index" -msgstr "İndeks:" +msgstr "Derinlik İndeksi" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Region Mode" @@ -8388,14 +8397,12 @@ msgid "Edit Tile Z Index" msgstr "Döşeme Z Derinliğini Değiştir" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Make Convex" -msgstr "Çokgeni Dışbükey Yap" +msgstr "Dışbükey Yap" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Make Concave" -msgstr "Çokgeni İçbükey Yap" +msgstr "İçbükey Yap" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Create Collision Polygon" @@ -8417,7 +8424,7 @@ msgstr "DöşemeTakımı" msgid "No VCS addons are available." msgstr "Hiçbir VCS eklentisi mevcut değil." -#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Error" msgstr "Hata" @@ -8660,9 +8667,8 @@ msgid "Dodge operator." msgstr "Dodge operatörü." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "HardLight operator." -msgstr "HardLight opeartörü" +msgstr "HardLight opeartörü." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Lighten operator." @@ -9085,7 +9091,7 @@ msgstr "" "\n" "OuterProduct ilk parametre 'c' 'yi kolon vektör olarak ele alır. (tek " "sütunlu matrix) ve ikinci parametre 'r' yi ise yatay vektör (tek satırlı " -"matrix) olarak ele alır. doğrusal cebirsel çarpım yapar: 'c * r', 'c' 'nin " +"matrix) olarak ele alır. doğrusal cebirsel çarpım yapar: 'c * r', 'c' 'nin " "bileşenleri miktarınca satırı olan bir matrix üretir. Bu matrix'in kolon " "sayısı ise 'r' 'nin bileşen sayısına eşit olur." @@ -9210,8 +9216,8 @@ msgid "" msgstr "" "SmoothStep işlevi( vektör(edge0), vektör(edge1), vektör(x) ).\n" "\n" -"0.0 döndürür eğer 'x' 'edge0''den küçükse, ve 1.0 eğer 'x' 'edge1'' den " -"büyükse. Aksi takdirde dönen değer 0.0 ve 1.0 arasından Hermite polinom " +"0.0 döndürür eğer 'x' 'edge0''den küçükse, ve 1.0 eğer 'x' 'edge1'' den " +"büyükse. Aksi takdirde dönen değer 0.0 ve 1.0 arasından Hermite polinom " "hesabıyla döndürürlür." #: editor/plugins/visual_shader_editor_plugin.cpp @@ -9224,7 +9230,7 @@ msgid "" msgstr "" "SmoothStep işlevi( katsayı(edge0), katsayı(edge1), katsayı(x) ).\n" "\n" -"0.0 döndürür eğer 'x' 'edge0''den küçükse, ve 1.0 eğer 'x' 'edge1'' den " +"0.0 döndürür eğer 'x' 'edge0''den küçükse, ve 1.0 eğer 'x' 'edge1'' den " "büyükse. Aksi takdirde dönen değer 0.0 ve 1.0 arasından Hermite polinom " "hesabıyla döndürülür." @@ -9282,12 +9288,17 @@ msgid "" "output ports. This is a direct injection of code into the vertex/fragment/" "light function, do not use it to write the function declarations inside." msgstr "" +"İstenilen kadar girdi ve çıktı miktarı ile Özel Godot Shader Dili girişi. Bu " +"yöntemle doğrudan vertex/fragment/light shaderları girişi yapılıyor, " +"içerisinde işlev tanımları yapmayın." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" "Returns falloff based on the dot product of surface normal and view " "direction of camera (pass associated inputs to it)." msgstr "" +"Kamera görüş yönü ile yüzey normali arasındaki Nokta Ürüne dayalı geçiş " +"değerleri döndürür (ilgili girdileri geçirir)." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" @@ -9296,78 +9307,90 @@ msgid "" "it later in the Expressions. You can also declare varyings, uniforms and " "constants." msgstr "" +"Elde edilen sonuç shader'ın üzerine yerleştirilen Özel Godot Shader dili " +"ifadesi. İçerisinde İşlev tanımlarını yapabilir ve daha sonra İfadeler " +"bölümünden çağırabilirsiniz. Ayrıca varaying, uniforms ve constant " +"değişkenleri tanımlayabilirsiniz." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "(Fragment/Light mode only) Scalar derivative function." -msgstr "" +msgstr "(Yalnızca Fragment/Light modu) Sayısal Türetim İşlevi SDF." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "(Fragment/Light mode only) Vector derivative function." -msgstr "" +msgstr "(Yalnızca Fragment/Light modu) Vektörel Türetim İşlevi." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" "(Fragment/Light mode only) (Vector) Derivative in 'x' using local " "differencing." msgstr "" +"(Yalnızca Fragment/Light modu) (Vektör) Yerel farklar kullanılarak 'x' " +"cinsinden türev." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" "(Fragment/Light mode only) (Scalar) Derivative in 'x' using local " "differencing." msgstr "" +"(Yalnızca Fragment/Light Modu) (Sayısal) Yerel farklar kullanılarak 'x' " +"cinsinden türev." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" "(Fragment/Light mode only) (Vector) Derivative in 'y' using local " "differencing." msgstr "" +"(Yalnızca Fragment/Light modu) (Vektör) Yerel farklar kullanılarak 'y' " +"cinsinden türev." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" "(Fragment/Light mode only) (Scalar) Derivative in 'y' using local " "differencing." msgstr "" +"(Yalnızca Fragment/Light modu) (Sayısal) Yerel farklar kullanılarak 'y' " +"cinsinden türev." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" "(Fragment/Light mode only) (Vector) Sum of absolute derivative in 'x' and " "'y'." msgstr "" +"(Yalnızca Fragment/Light modu) (Vektör) 'X' ve 'y' de mutlak türevlerin " +"toplamı." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" "(Fragment/Light mode only) (Scalar) Sum of absolute derivative in 'x' and " "'y'." msgstr "" +"(Yalnızca Fragment/Light modu) (Sayısal) 'X' ve 'y' de mutlak türevlerin " +"toplamı." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "VisualShader" -msgstr "Gölgelendirici" +msgstr "GörselShader" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Edit Visual Property" -msgstr "Süzgeçleri Düzenle" +msgstr "Görsel Niteliği Düzenle" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Visual Shader Mode Changed" -msgstr "Shader Değişiklikleri" +msgstr "Görsel Shader Modu Değişti" #: editor/project_export.cpp msgid "Runnable" msgstr "Koşturulabilir" #: editor/project_export.cpp -#, fuzzy msgid "Add initial export..." -msgstr "Giriş noktası ekle" +msgstr "İlk dışa aktarmayı ekle ..." #: editor/project_export.cpp msgid "Add previous patches..." -msgstr "" +msgstr "Önceki yamaları ekle..." #: editor/project_export.cpp msgid "Delete patch '%s' from list?" @@ -9404,9 +9427,8 @@ msgid "Exporting All" msgstr "Tümünü Dışa Aktarma" #: editor/project_export.cpp -#, fuzzy msgid "The given export path doesn't exist:" -msgstr "Yol mevcut değil." +msgstr "Belirtilen Dışa aktarım yolu mevcut değil:" #: editor/project_export.cpp msgid "Export templates for this platform are missing/corrupted:" @@ -9425,11 +9447,13 @@ msgid "" "If checked, the preset will be available for use in one-click deploy.\n" "Only one preset per platform may be marked as runnable." msgstr "" +"Eğer bu seçenek seçilirse önayar, tek tıklamalı dağıtımda kullanılabilir.\n" +"Her platform için sadece tek bir önayar çalıştırılabilir olarak " +"işaretlenebilir." #: editor/project_export.cpp -#, fuzzy msgid "Export Path" -msgstr "Ön Ayarları Dışa Aktar:" +msgstr "Dışa aktarım Yolu" #: editor/project_export.cpp msgid "Resources" @@ -9456,22 +9480,20 @@ msgid "Resources to export:" msgstr "Dışa aktarılacak kaynaklar:" #: editor/project_export.cpp -#, fuzzy msgid "" "Filters to export non-resource files/folders\n" "(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" -"Kaynak olmayan dosyaları dışa aktarmak için kullanılan süzgeçler (virgülle " -"ayrılmış, ör. * .json, * .txt)" +"Kaynak olmayan dosyaları / klasörleri dışa aktarmak için filtreler\n" +"(virgülle-ayrık, e.g: *.json, *.txt, docs/*)" #: editor/project_export.cpp -#, fuzzy msgid "" "Filters to exclude files/folders from project\n" "(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" -"Dışa aktarma işleminden hariç tutulacak süzgeçler (virgülle ayrılmış, ör. * ." -"json, * .txt)" +"Dosyaları / klasörleri projeden hariç tutmak için filtreler\n" +"(virgülle-ayrık, e.g: *.json, *.txt, docs/*)" #: editor/project_export.cpp msgid "Patches" @@ -9482,9 +9504,8 @@ msgid "Make Patch" msgstr "Yama Yap" #: editor/project_export.cpp -#, fuzzy msgid "Pack File" -msgstr " Dosyalar" +msgstr "Paket Dosyası" #: editor/project_export.cpp msgid "Features" @@ -9499,9 +9520,8 @@ msgid "Feature List:" msgstr "Özellik Listesi:" #: editor/project_export.cpp -#, fuzzy msgid "Script" -msgstr "Yeni Betik" +msgstr "Betik" #: editor/project_export.cpp msgid "Script Export Mode:" @@ -9521,7 +9541,7 @@ msgstr "Şifreli (Açarı Aşağıda Belirtin)" #: editor/project_export.cpp msgid "Invalid Encryption Key (must be 64 characters long)" -msgstr "" +msgstr "Geçersiz Şifreleme Anahtarı (64 karakter uzunluğunda olmalı)" #: editor/project_export.cpp msgid "Script Encryption Key (256-bits as hex):" @@ -9536,23 +9556,20 @@ msgid "Export Project" msgstr "Projeyi Dışa Aktar" #: editor/project_export.cpp -#, fuzzy msgid "Export mode?" -msgstr "Dışa Aktarma Biçimi:" +msgstr "Dışa Aktarma Modu?" #: editor/project_export.cpp -#, fuzzy msgid "Export All" -msgstr "Dışa Aktar" +msgstr "Tümünü Dışa Aktar" #: editor/project_export.cpp editor/project_manager.cpp -#, fuzzy msgid "ZIP File" -msgstr " Dosyalar" +msgstr "ZIP Dosyası" #: editor/project_export.cpp msgid "Godot Game Pack" -msgstr "" +msgstr "Godot Oyun Paketi" #: editor/project_export.cpp msgid "Export templates for this platform are missing:" @@ -9567,13 +9584,20 @@ msgid "Export With Debug" msgstr "Hata Ayıklama İle Dışa Aktar" #: editor/project_manager.cpp -msgid "The path does not exist." +#, fuzzy +msgid "The path specified doesn't exist." msgstr "Yol mevcut değil." #: editor/project_manager.cpp #, fuzzy -msgid "Invalid '.zip' project file, does not contain a 'project.godot' file." -msgstr "Lütfen 'proje.godot' dosyası içermeyen bir klasör seçin." +msgid "Error opening package file (it's not in ZIP format)." +msgstr "Paket dosyası açılırken hata oluştu, zip formatında değil." + +#: editor/project_manager.cpp +#, fuzzy +msgid "" +"Invalid \".zip\" project file; it doesn't contain a \"project.godot\" file." +msgstr "Geçersiz '.zip' proje dosyası, 'project.godot' dosyası içermiyor." #: editor/project_manager.cpp msgid "Please choose an empty folder." @@ -9581,12 +9605,13 @@ msgstr "Lütfen boş bir klasör seçin." #: editor/project_manager.cpp #, fuzzy -msgid "Please choose a 'project.godot' or '.zip' file." -msgstr "Lütfen bir 'proje.godot' dosyası seçin." +msgid "Please choose a \"project.godot\" or \".zip\" file." +msgstr "Lütfen bir 'project.godot' veya '.zip' dosyası seçin." #: editor/project_manager.cpp -msgid "Directory already contains a Godot project." -msgstr "" +#, fuzzy +msgid "This directory already contains a Godot project." +msgstr "Bu dizinde zaten bir Godot projesi var." #: editor/project_manager.cpp msgid "New Game Project" @@ -9621,7 +9646,8 @@ msgid "" "Couldn't load project.godot in project path (error %d). It may be missing or " "corrupted." msgstr "" -"Proje yolundaki proje.godot düzenlenemedi.Eksik veya bozulmuş olabilir." +"Proje yolundaki proje.godot düzenlenemedi (error %d). Eksik veya bozulmuş " +"olabilir." #: editor/project_manager.cpp msgid "Couldn't edit project.godot in project path." @@ -9668,17 +9694,16 @@ msgid "Project Path:" msgstr "Proje Yolu:" #: editor/project_manager.cpp -#, fuzzy msgid "Project Installation Path:" -msgstr "Proje Yolu:" +msgstr "Proje Yükleme Yolu:" #: editor/project_manager.cpp msgid "Renderer:" -msgstr "" +msgstr "Oluşturucu:" #: editor/project_manager.cpp msgid "OpenGL ES 3.0" -msgstr "" +msgstr "OpenGL ES 3" #: editor/project_manager.cpp msgid "" @@ -9687,10 +9712,14 @@ msgid "" "Incompatible with older hardware\n" "Not recommended for web games" msgstr "" +"Daha yüksek görsel kalite\n" +"Tüm özellikler mevcut\n" +"Eski donanımla uyumsuz\n" +"Web oyunları için önerilmez" #: editor/project_manager.cpp msgid "OpenGL ES 2.0" -msgstr "" +msgstr "OpenGL ES 2" #: editor/project_manager.cpp msgid "" @@ -9699,28 +9728,32 @@ msgid "" "Works on most hardware\n" "Recommended for web games" msgstr "" +"Daha Düşük Görsel Kalite\n" +"Bazı özellikler eksik\n" +"Çoğu donanımda çalışır\n" +"Web uygulamaları için önerilir" #: editor/project_manager.cpp msgid "Renderer can be changed later, but scenes may need to be adjusted." msgstr "" +"Oluşturucu daha sonra değiştirilebilir, ancak sahnelerin ayarlanması " +"gerekebilir." #: editor/project_manager.cpp msgid "Unnamed Project" msgstr "Adsız Proje" #: editor/project_manager.cpp -#, fuzzy msgid "Missing Project" -msgstr "Var Olan Projeyi İçe Aktar" +msgstr "Eksik Proje" #: editor/project_manager.cpp msgid "Error: Project is missing on the filesystem." -msgstr "" +msgstr "Hata: Proje dosya sisteminde mevcut değil.." #: editor/project_manager.cpp -#, fuzzy msgid "Can't open project at '%s'." -msgstr "Proje Açılamadı" +msgstr "'%s' adresindeki proje açılamıyor." #: editor/project_manager.cpp msgid "Are you sure to open more than one project?" @@ -9738,6 +9771,14 @@ msgid "" "Warning: You won't be able to open the project with previous versions of the " "engine anymore." msgstr "" +"Aşağıdaki proje ayarları dosyası, içinden oluşturulduğu Godot sürümünü " +"belirtmiyor.\n" +"\n" +"%s\n" +"\n" +"Açmaya devam ederseniz, Godot'un geçerli yapılandırma dosyası biçimine " +"dönüştürülecektir..\n" +"Uyarı: Projeyi artık motorun önceki sürümleriyle açamayacaksınız." #: editor/project_manager.cpp msgid "" @@ -9750,15 +9791,23 @@ msgid "" "Warning: You won't be able to open the project with previous versions of the " "engine anymore." msgstr "" +"Aşağıdaki proje ayarları dosyası daha eski bir motor sürümü tarafından " +"oluşturulmuştur ve bu sürüm için dönüştürülmesi gerekir:\n" +"\n" +"%s\n" +"\n" +"Dönüştürmek ister misiniz?\n" +"Uyarı: Projeyi artık motorun önceki sürümleriyle açamayacaksınız." #: editor/project_manager.cpp msgid "" "The project settings were created by a newer engine version, whose settings " "are not compatible with this version." msgstr "" +"Proje ayarları, ayarları bu sürümle uyumlu olmayan daha yeni bir motor " +"sürümü tarafından oluşturuldu." #: editor/project_manager.cpp -#, fuzzy msgid "" "Can't run project: no main scene defined.\n" "Please edit the project and set the main scene in the Project Settings under " @@ -9777,33 +9826,34 @@ msgstr "" "Lütfen ilk içe aktarmayı tetiklemek için projeyi düzenleyin." #: editor/project_manager.cpp -#, fuzzy msgid "Are you sure to run %d projects at once?" -msgstr "Birden fazla projeyi çalıştırmaya kararlı mısınız?" +msgstr "Birden fazla projeyi çalıştırmak istediğinize emin misiniz?" #: editor/project_manager.cpp -#, fuzzy msgid "" "Remove %d projects from the list?\n" "The project folders' contents won't be modified." -msgstr "Proje listeden kaldırılsın mı? (Klasör içerikleri değiştirilmeyecek)" +msgstr "" +"%d projeleri listeden kalksın mı?\n" +"Proje klasörü'nün içeriği değiştirilmeyecek." #: editor/project_manager.cpp -#, fuzzy msgid "" "Remove this project from the list?\n" "The project folder's contents won't be modified." -msgstr "Proje listeden kaldırılsın mı? (Klasör içerikleri değiştirilmeyecek)" +msgstr "" +"Bu projeyi listeden kaldır?\n" +"Proje klasörünün içeriği değiştirilmeyecek." #: editor/project_manager.cpp -#, fuzzy msgid "" "Remove all missing projects from the list?\n" "The project folders' contents won't be modified." -msgstr "Proje listeden kaldırılsın mı? (Klasör içerikleri değiştirilmeyecek)" +msgstr "" +"Tüm eksik projeleri listeden kaldır?\n" +"Proje klasörlerinin içeriği değiştirilmeyecek." #: editor/project_manager.cpp -#, fuzzy msgid "" "Language changed.\n" "The interface will update after restarting the editor or project manager." @@ -9813,27 +9863,25 @@ msgstr "" "olacak." #: editor/project_manager.cpp -#, fuzzy msgid "" "Are you sure to scan %s folders for existing Godot projects?\n" "This could take a while." msgstr "" -"Var olan Godot projeleri için %s klasör taraması yapıyorsunuz. Onaylıyor " -"musunuz?" +"Var olan Godot projeleri için %s klasör taraması yapmak istediğinize emin " +"misiniz?\n" +"Bu biraz zaman alabilir." #: editor/project_manager.cpp msgid "Project Manager" msgstr "Proje Yöneticisi" #: editor/project_manager.cpp -#, fuzzy msgid "Projects" -msgstr "Proje" +msgstr "Projeler" #: editor/project_manager.cpp -#, fuzzy msgid "Last Modified" -msgstr "Değişti" +msgstr "Son Değişiklik" #: editor/project_manager.cpp msgid "Scan" @@ -9848,9 +9896,8 @@ msgid "New Project" msgstr "Yeni Proje" #: editor/project_manager.cpp -#, fuzzy msgid "Remove Missing" -msgstr "Noktayı kaldır" +msgstr "Eksikleri Kaldır" #: editor/project_manager.cpp msgid "Templates" @@ -9865,7 +9912,6 @@ msgid "Can't run project" msgstr "Proje çalıştırılamadı" #: editor/project_manager.cpp -#, fuzzy msgid "" "You currently don't have any projects.\n" "Would you like to explore official example projects in the Asset Library?" @@ -9890,35 +9936,31 @@ msgid "Mouse Button" msgstr "Fare Düğmesi" #: editor/project_settings_editor.cpp -#, fuzzy msgid "" "Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " "'\"'" msgstr "" -"Geçersiz işlem adı. Boş olamaz ve '/', ':', '=', '\\' veya '\"' içeremez." +"Geçersiz işlem adı. Boş olamaz ve '/', ':', '=', '\\' veya '\"' içeremez" #: editor/project_settings_editor.cpp -#, fuzzy msgid "An action with the name '%s' already exists." -msgstr "İşlem '%s' zaten var!" +msgstr "İşlem '%s' zaten var." #: editor/project_settings_editor.cpp msgid "Rename Input Action Event" msgstr "Girdi Eylem Olayını Yeniden Adlandır" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Change Action deadzone" -msgstr "Animasyonun Adını Değiştir:" +msgstr "Eylem Değiştir ölübölgesi" #: editor/project_settings_editor.cpp msgid "Add Input Action Event" msgstr "Giriş İşlem Olayı Ekle" #: editor/project_settings_editor.cpp -#, fuzzy msgid "All Devices" -msgstr "Aygıt" +msgstr "Tüm Aygıtlar" #: editor/project_settings_editor.cpp msgid "Device" @@ -9953,24 +9995,20 @@ msgid "Wheel Down Button" msgstr "Tekerlek Aşağı Düğmesi" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Wheel Left Button" -msgstr "Tekerlek Yukarı Düğmesi" +msgstr "Tekerlek Sol Düğmesi" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Wheel Right Button" -msgstr "Sağ Düğme" +msgstr "Tekerlek Sağ Düğme" #: editor/project_settings_editor.cpp -#, fuzzy msgid "X Button 1" -msgstr "Düğme 6" +msgstr "X Düğmesi 1" #: editor/project_settings_editor.cpp -#, fuzzy msgid "X Button 2" -msgstr "Düğme 6" +msgstr "X Düğmesi 2" #: editor/project_settings_editor.cpp msgid "Joypad Axis Index:" @@ -10060,9 +10098,8 @@ msgid "Settings saved OK." msgstr "Ayarlar kaydedildi TAMAM." #: editor/project_settings_editor.cpp -#, fuzzy msgid "Moved Input Action Event" -msgstr "Giriş İşlem Olayı Ekle" +msgstr "Taşınan Giriş Eylemi Olayı" #: editor/project_settings_editor.cpp msgid "Override for Feature" @@ -10119,6 +10156,8 @@ msgstr "Şunun Üzerine Yaz..." #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp msgid "The editor must be restarted for changes to take effect." msgstr "" +"Değişikliklerin geçerli olması için düzenleyicinin yeniden başlatılması " +"gerekir." #: editor/project_settings_editor.cpp msgid "Input Map" @@ -10134,7 +10173,7 @@ msgstr "Eylem" #: editor/project_settings_editor.cpp msgid "Deadzone" -msgstr "" +msgstr "Ölü bölge" #: editor/project_settings_editor.cpp msgid "Device:" @@ -10177,14 +10216,12 @@ msgid "Locales Filter" msgstr "Yereller Süzgeci" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Show All Locales" -msgstr "Tüm yerelleri göster" +msgstr "Tüm Dilleri Göster" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Show Selected Locales Only" -msgstr "Sadece seçili yerelleri göster" +msgstr "Sadece Seçili Dilleri Göster" #: editor/project_settings_editor.cpp msgid "Filter mode:" @@ -10259,128 +10296,134 @@ msgid "Select Method" msgstr "Metot Seç" #: editor/rename_dialog.cpp editor/scene_tree_dock.cpp -#, fuzzy msgid "Batch Rename" -msgstr "Yeniden Adlandır" +msgstr "Tümden Yeniden Adlandır" #: editor/rename_dialog.cpp msgid "Prefix" -msgstr "" +msgstr "Ön Ek" #: editor/rename_dialog.cpp msgid "Suffix" -msgstr "" +msgstr "Son Ek" #: editor/rename_dialog.cpp #, fuzzy +msgid "Use Regular Expressions" +msgstr "Düzenli İfadeler" + +#: editor/rename_dialog.cpp msgid "Advanced Options" -msgstr "Yapışma ayarları" +msgstr "Gelişmiş Ayarlar" #: editor/rename_dialog.cpp msgid "Substitute" -msgstr "" +msgstr "Yer Tutucu" #: editor/rename_dialog.cpp -#, fuzzy msgid "Node name" -msgstr "Düğüm adı:" +msgstr "Düğüm adı" #: editor/rename_dialog.cpp msgid "Node's parent name, if available" -msgstr "" +msgstr "Düğüm'ün üst düğüm ismi, eğer varsa" #: editor/rename_dialog.cpp -#, fuzzy msgid "Node type" -msgstr "Düğüm Türü Bul" +msgstr "Düğüm Türü" #: editor/rename_dialog.cpp -#, fuzzy msgid "Current scene name" -msgstr "Şu anki Sahne" +msgstr "Mevcut sahne adı" #: editor/rename_dialog.cpp -#, fuzzy msgid "Root node name" -msgstr "Kök Düğüm adı:" +msgstr "Kök düğüm adı" #: editor/rename_dialog.cpp msgid "" "Sequential integer counter.\n" "Compare counter options." msgstr "" +"Sıralı tamsayı sayacı.\n" +"Sayaç seçeneklerini karşılaştırın." #: editor/rename_dialog.cpp -msgid "Per Level counter" -msgstr "" +#, fuzzy +msgid "Per-level Counter" +msgstr "Seviye Başına sayaç" #: editor/rename_dialog.cpp msgid "If set the counter restarts for each group of child nodes" -msgstr "" +msgstr "Ayarlanmışsa, sayaç her bir alt düğüm grubu için yeniden başlar" #: editor/rename_dialog.cpp msgid "Initial value for the counter" -msgstr "" +msgstr "Sayaç için başlangıç değeri" #: editor/rename_dialog.cpp -#, fuzzy msgid "Step" -msgstr "Adım:" +msgstr "Adım" #: editor/rename_dialog.cpp msgid "Amount by which counter is incremented for each node" -msgstr "" +msgstr "Her düğüm için sayacın artırılacağı miktar" #: editor/rename_dialog.cpp msgid "Padding" -msgstr "" +msgstr "Dolgulama" #: editor/rename_dialog.cpp msgid "" "Minimum number of digits for the counter.\n" "Missing digits are padded with leading zeros." msgstr "" +"Sayaç için minimum basamak sayısı.\n" +"Eksik rakamları baştaki sıfırlarla doldurulur." #: editor/rename_dialog.cpp -#, fuzzy -msgid "Regular Expressions" -msgstr "İfadeyi Değiştir" - -#: editor/rename_dialog.cpp -#, fuzzy msgid "Post-Process" -msgstr "İşlem Sonrası Betik Dizeci:" +msgstr "Artçıl-İşlem" #: editor/rename_dialog.cpp msgid "Keep" msgstr "Tut" #: editor/rename_dialog.cpp -msgid "CamelCase to under_scored" -msgstr "" +#, fuzzy +msgid "PascalCase to snake_case" +msgstr "DeveŞekilli'den alt_tireli'ye dönüştür" #: editor/rename_dialog.cpp -msgid "under_scored to CamelCase" -msgstr "" +#, fuzzy +msgid "snake_case to PascalCase" +msgstr "alt_tireli'den DeveŞekilli'ye dönüştür" #: editor/rename_dialog.cpp msgid "Case" -msgstr "" +msgstr "Büyük/Küçük" #: editor/rename_dialog.cpp -#, fuzzy msgid "To Lowercase" -msgstr "Küçük harf" +msgstr "Küçük Harfe Döndür" #: editor/rename_dialog.cpp -#, fuzzy msgid "To Uppercase" -msgstr "Büyük harf" +msgstr "Büyük Harfe Döndür" #: editor/rename_dialog.cpp -#, fuzzy msgid "Reset" -msgstr "Yaklaşmayı Sıfırla" +msgstr "Sıfırla" + +#: editor/rename_dialog.cpp +#, fuzzy +msgid "Regular Expression Error" +msgstr "Düzenli İfadeler" + +#: editor/rename_dialog.cpp +#, fuzzy +msgid "At character %s" +msgstr "Geçerli karakterler:" #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" @@ -10439,9 +10482,8 @@ msgid "Instance Scene(s)" msgstr "Sahne(leri) Örnekle" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Replace with Branch Scene" -msgstr "Dalı Sahne olarak Kaydet" +msgstr "Dal Sahnesi ile Değiştir" #: editor/scene_tree_dock.cpp msgid "Instance Child Scene" @@ -10470,38 +10512,36 @@ msgstr "Düğüm(leri) Çoğalt" #: editor/scene_tree_dock.cpp msgid "Can't reparent nodes in inherited scenes, order of nodes can't change." msgstr "" +"Devralınan sahnelerde düğümler yeniden oluşturulamaz, düğümlerin sırası " +"değişemez." #: editor/scene_tree_dock.cpp msgid "Node must belong to the edited scene to become root." -msgstr "" +msgstr "Kök olabilmek için düğümün düzenlenen sahneye ait olması gerekir." #: editor/scene_tree_dock.cpp msgid "Instantiated scenes can't become root" -msgstr "" +msgstr "Örneklenen sahneler kök olamaz" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Make node as Root" -msgstr "Anlamlı!" +msgstr "Düğümü Kök düğüm yap" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Delete %d nodes?" -msgstr "Düğümleri Sil" +msgstr "%d düğümleri silelim mi?" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Delete the root node \"%s\"?" -msgstr "Gölgelendirici Çizge Düğümünü Sil" +msgstr "\"%s\" kök düğümü silinsin mi?" #: editor/scene_tree_dock.cpp msgid "Delete node \"%s\" and its children?" -msgstr "" +msgstr "\"%s\" düğümü ve alt düğümleri silinsin mi?" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Delete node \"%s\"?" -msgstr "Düğümleri Sil" +msgstr "\"%s\" düğümü silinsin mi?" #: editor/scene_tree_dock.cpp msgid "Can not perform with the root node." @@ -10520,46 +10560,45 @@ msgid "" "Disabling \"editable_instance\" will cause all properties of the node to be " "reverted to their default." msgstr "" +"\"düzenlenebilir_örnek\" seçeneği iptal edilince düğümün nitelikleri " +"varsayılan değerlere döner." #: editor/scene_tree_dock.cpp msgid "" "Enabling \"Load As Placeholder\" will disable \"Editable Children\" and " "cause all properties of the node to be reverted to their default." msgstr "" +"\"Yer Tutucu Olarak Yükle\" seçeneğinin etkinleştirilmesi \"Düzenlenebilir " +"alt Düğüm\" seçeneğini pasifleştirir ve düğümün niteliklerini varsayılanlara " +"döndürür." #: editor/scene_tree_dock.cpp msgid "Make Local" msgstr "Yerelleştir" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "New Scene Root" -msgstr "Anlamlı!" +msgstr "Yeni Sahne Kökü" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Create Root Node:" -msgstr "Düğüm Oluştur" +msgstr "Kök Düğüm Oluştur:" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "2D Scene" -msgstr "Sahne" +msgstr "2B Sahne" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "3D Scene" -msgstr "Sahne" +msgstr "3B Sahne" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "User Interface" -msgstr "Kalıtı Temizle" +msgstr "Kullanıcı Arayüzü" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Other Node" -msgstr "Düğümleri Sil" +msgstr "Diğer Düğüm" #: editor/scene_tree_dock.cpp msgid "Can't operate on nodes from a foreign scene!" @@ -10578,9 +10617,8 @@ msgid "Remove Node(s)" msgstr "Düğümleri Kaldır" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Change type of node(s)" -msgstr "Giriş Adını Değiştir" +msgstr "Düğüm(ler) türünü değiştir" #: editor/scene_tree_dock.cpp msgid "" @@ -10614,32 +10652,28 @@ msgid "Load As Placeholder" msgstr "Yer Tutucu Olarak Yükle" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Open Documentation" -msgstr "Çevrimiçi Godot dökümanlarını aç" +msgstr "Klavuzu Aç" #: editor/scene_tree_dock.cpp msgid "Add Child Node" msgstr "Çocuk Düğüm Ekle" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Expand/Collapse All" -msgstr "Hepsini Daralt" +msgstr "Hepsini Aç/Kapa" #: editor/scene_tree_dock.cpp msgid "Change Type" msgstr "Türü Değiştir" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Reparent to New Node" -msgstr "Düğümün Ebeveynliğini Değiştir" +msgstr "Başka Düğüme Eklemle" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Make Scene Root" -msgstr "Anlamlı!" +msgstr "Sahne Kökü Yap" #: editor/scene_tree_dock.cpp msgid "Merge From Scene" @@ -10658,9 +10692,8 @@ msgid "Delete (No Confirm)" msgstr "Sil (Doğrulama Yok)" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Add/Create a New Node." -msgstr "Yeni Bir Düğüm Ekle / Oluştur" +msgstr "Yeni Bir Düğüm Ekle/Oluştur." #: editor/scene_tree_dock.cpp msgid "" @@ -10691,78 +10724,68 @@ msgid "Clear Inheritance? (No Undo!)" msgstr "Miras Silinsin mi? (Geri Alınamaz!)" #: editor/scene_tree_editor.cpp -#, fuzzy msgid "Toggle Visible" msgstr "Görünebilirliği Aç/Kapa" #: editor/scene_tree_editor.cpp -#, fuzzy msgid "Unlock Node" -msgstr "Düğüm Seç" +msgstr "Düğüm Kilidi Aç" #: editor/scene_tree_editor.cpp -#, fuzzy msgid "Button Group" -msgstr "Düğme 7" +msgstr "Düğme Grubu" #: editor/scene_tree_editor.cpp -#, fuzzy msgid "(Connecting From)" -msgstr "Bağlantı Hatası" +msgstr "(Gelen Bağlantı)" #: editor/scene_tree_editor.cpp msgid "Node configuration warning:" msgstr "Düğüm yapılandırma uyarısı:" #: editor/scene_tree_editor.cpp -#, fuzzy msgid "" "Node has %s connection(s) and %s group(s).\n" "Click to show signals dock." msgstr "" -"Düğüm bağlantı(lar) ve grup(lar)a sahip\n" -"Sinyaller dokunu göstermek için tıkla." +"Düğüm %s bağlantı(lar) ve %s grup(lar)a sahip\n" +"Sinyaller bölümünü göstermek için tıkla." #: editor/scene_tree_editor.cpp -#, fuzzy msgid "" "Node has %s connection(s).\n" "Click to show signals dock." msgstr "" -"Düğüm bağlantılara sahip.\n" -"Sinyaller dokunu göstermek için tıkla." +"Düğüm %s bağlantılara sahip.\n" +"Sinyaller bölümünü göstermek için tıkla." #: editor/scene_tree_editor.cpp -#, fuzzy msgid "" "Node is in %s group(s).\n" "Click to show groups dock." msgstr "" -"Düğüm grup(lar)ın içinde.\n" -"Gruplar dokunu göstermek için tıkla." +"Düğüm %s grup(lar)ı içinde.\n" +"Gruplar bölümünü göstermek için tıkla." #: editor/scene_tree_editor.cpp -#, fuzzy msgid "Open Script:" -msgstr "Betik Aç" +msgstr "Betik Aç:" #: editor/scene_tree_editor.cpp -#, fuzzy msgid "" "Node is locked.\n" "Click to unlock it." msgstr "" "Düğüm kilitli.\n" -"Kiliti açmak için tıkla" +"Kiliti açmak için tıkla." #: editor/scene_tree_editor.cpp -#, fuzzy msgid "" "Children are not selectable.\n" "Click to make selectable." msgstr "" -"Çocuklar seçilebilir değil.\n" -"Seçilebilir yapmak için tıkla" +"Alt düğümler seçilebilir değil.\n" +"Seçilebilir yapmak için tıkla." #: editor/scene_tree_editor.cpp msgid "Toggle Visibility" @@ -10773,6 +10796,8 @@ msgid "" "AnimationPlayer is pinned.\n" "Click to unpin." msgstr "" +"AnimasyonOynatıcı sabitlendi.\n" +"Çözmek için tıklayın." #: editor/scene_tree_editor.cpp msgid "Invalid node name, the following characters are not allowed:" @@ -10795,39 +10820,32 @@ msgid "Select a Node" msgstr "Bir Düğüm Seç" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Path is empty." -msgstr "Yol boş" +msgstr "Yol boş." #: editor/script_create_dialog.cpp -#, fuzzy msgid "Filename is empty." -msgstr "Kayıt yolu boş!" +msgstr "Dosya ismi boş." #: editor/script_create_dialog.cpp -#, fuzzy msgid "Path is not local." -msgstr "Yol yerel değil" +msgstr "Yol yerel değil." #: editor/script_create_dialog.cpp -#, fuzzy msgid "Invalid base path." -msgstr "Geçersiz üst yol" +msgstr "Geçersiz ana yol." #: editor/script_create_dialog.cpp -#, fuzzy msgid "A directory with the same name exists." -msgstr "Aynı isimde dizin zaten var" +msgstr "Aynı isimde dizin zaten var." #: editor/script_create_dialog.cpp -#, fuzzy msgid "Invalid extension." -msgstr "Geçersiz uzantı" +msgstr "Geçersiz uzantı." #: editor/script_create_dialog.cpp -#, fuzzy msgid "Wrong extension chosen." -msgstr "Yanlış uzantı seçili" +msgstr "Yanlış uzantı seçili." #: editor/script_create_dialog.cpp msgid "Error loading template '%s'" @@ -10842,7 +10860,6 @@ msgid "Error loading script from %s" msgstr "Şuradan: %s betik yüklenirken hata" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Overrides" msgstr "Üzerine Yaz" @@ -10851,74 +10868,61 @@ msgid "N/A" msgstr "Uygulanamaz" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Open Script / Choose Location" -msgstr "Betik Düzenleyiciyi Aç" +msgstr "Betik Aç / Konum Seç" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Open Script" msgstr "Betik Aç" #: editor/script_create_dialog.cpp -#, fuzzy msgid "File exists, it will be reused." -msgstr "Dosya mevcut, yeniden kullanılacak" +msgstr "Dosya mevcut, yeniden kullanılacak." #: editor/script_create_dialog.cpp -#, fuzzy msgid "Invalid class name." -msgstr "Geçersiz sınıf ismi" +msgstr "Geçersiz sınıf ismi." #: editor/script_create_dialog.cpp -#, fuzzy msgid "Invalid inherited parent name or path." -msgstr "Geçersiz miras alınmış ebeveyn ismi veya yolu" +msgstr "Geçersiz devralınan üst ad veya yol." #: editor/script_create_dialog.cpp #, fuzzy -msgid "Script is valid." -msgstr "Betik geçerli" +msgid "Script path/name is valid." +msgstr "Betik geçerli." #: editor/script_create_dialog.cpp -#, fuzzy msgid "Allowed: a-z, A-Z, 0-9, _ and ." -msgstr "İzin verilenler: a-z, A-Z, 0-9 ve _" +msgstr "İzin verilenler: a-z, A-Z, 0-9, _ ve ." #: editor/script_create_dialog.cpp -#, fuzzy msgid "Built-in script (into scene file)." -msgstr "Gömülü betik (sahne dosyasına)" +msgstr "Gömülü betik (sahne dosyasına)." #: editor/script_create_dialog.cpp -#, fuzzy msgid "Will create a new script file." -msgstr "Yeni betik dosyası oluştur" +msgstr "Yeni betik dosyası oluşturulacak." #: editor/script_create_dialog.cpp -#, fuzzy msgid "Will load an existing script file." -msgstr "Mevcut betik dosyasını yükle" +msgstr "Mevcut betik dosyasını yükle." #: editor/script_create_dialog.cpp -#, fuzzy msgid "Script file already exists." -msgstr "İşlem '%s' zaten var!" +msgstr "Betik dosyası zaten mevcut." #: editor/script_create_dialog.cpp -#, fuzzy msgid "Class Name:" -msgstr "Sınıf İsmi" +msgstr "Sınıf İsmi:" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Template:" -msgstr "Şablon" +msgstr "Şablon:" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Built-in Script:" -msgstr "Gömme Betik" +msgstr "Gömülü Betik:" #: editor/script_create_dialog.cpp msgid "Attach Node Script" @@ -10933,52 +10937,44 @@ msgid "Bytes:" msgstr "Baytlar:" #: editor/script_editor_debugger.cpp -#, fuzzy msgid "Warning:" -msgstr "Uyarılar" +msgstr "Uyarılar:" #: editor/script_editor_debugger.cpp msgid "Error:" msgstr "Hata:" #: editor/script_editor_debugger.cpp -#, fuzzy msgid "C++ Error" -msgstr "Hatayı Kopyala" +msgstr "C++ Hatası" #: editor/script_editor_debugger.cpp -#, fuzzy msgid "C++ Error:" -msgstr "Hata:" +msgstr "C++ Hatası:" #: editor/script_editor_debugger.cpp -#, fuzzy msgid "C++ Source" -msgstr "Kaynak:" +msgstr "C++ Kaynağı" #: editor/script_editor_debugger.cpp -#, fuzzy msgid "Source:" msgstr "Kaynak:" #: editor/script_editor_debugger.cpp -#, fuzzy msgid "C++ Source:" -msgstr "Kaynak:" +msgstr "C++ Kaynak:" #: editor/script_editor_debugger.cpp -#, fuzzy msgid "Stack Trace" -msgstr "Çerçeveleri Yığ" +msgstr "Bellek Dökümü" #: editor/script_editor_debugger.cpp msgid "Errors" msgstr "Hatalar" #: editor/script_editor_debugger.cpp -#, fuzzy msgid "Child process connected." -msgstr "Çocuk Süreç Bağlandı" +msgstr "Alt süreç connected." #: editor/script_editor_debugger.cpp msgid "Copy Error" @@ -10986,8 +10982,12 @@ msgstr "Hatayı Kopyala" #: editor/script_editor_debugger.cpp #, fuzzy +msgid "Video RAM" +msgstr "Görüntü Belleği" + +#: editor/script_editor_debugger.cpp msgid "Skip Breakpoints" -msgstr "Noktalar oluştur." +msgstr "İşaret Noktalarını Atla" #: editor/script_editor_debugger.cpp msgid "Inspect Previous Instance" @@ -11034,10 +11034,6 @@ msgid "Total:" msgstr "Toplam:" #: editor/script_editor_debugger.cpp -msgid "Video Mem" -msgstr "Görüntü Belleği" - -#: editor/script_editor_debugger.cpp msgid "Resource Path" msgstr "Kaynak Yolu" @@ -11075,22 +11071,19 @@ msgstr "Ağaçtan Ayarla" #: editor/script_editor_debugger.cpp msgid "Export measures as CSV" -msgstr "" +msgstr "Ölçüleri CSV olarak dışa aktar" #: editor/settings_config_dialog.cpp -#, fuzzy msgid "Erase Shortcut" -msgstr "Kararma" +msgstr "Kısayol Sil" #: editor/settings_config_dialog.cpp -#, fuzzy msgid "Restore Shortcut" -msgstr "Kısayollar" +msgstr "Kısayolları Geri Yükle" #: editor/settings_config_dialog.cpp -#, fuzzy msgid "Change Shortcut" -msgstr "Çapaları Değiştir" +msgstr "Kısayol Değiştir" #: editor/settings_config_dialog.cpp msgid "Editor Settings" @@ -11121,9 +11114,8 @@ msgid "Change Camera Size" msgstr "Kamera Boyutunu Değiştir" #: editor/spatial_editor_gizmos.cpp -#, fuzzy msgid "Change Notifier AABB" -msgstr "Bildirim Kapsamını Değiştir" +msgstr "Bildirici Değiştir AABB" #: editor/spatial_editor_gizmos.cpp msgid "Change Particles AABB" @@ -11150,38 +11142,32 @@ msgid "Change Capsule Shape Height" msgstr "Kapsülün Yüksekliğini Değiştir" #: editor/spatial_editor_gizmos.cpp -#, fuzzy msgid "Change Cylinder Shape Radius" -msgstr "Kapsülün Çapını Değiştir" +msgstr "Silindir Şekli Yarıçapını Değiştir" #: editor/spatial_editor_gizmos.cpp -#, fuzzy msgid "Change Cylinder Shape Height" -msgstr "Kapsülün Yüksekliğini Değiştir" +msgstr "Silindir Şekli Yüksekliğini Değiştir" #: editor/spatial_editor_gizmos.cpp msgid "Change Ray Shape Length" msgstr "Işın Şeklinin Uzunluğunu Değiştir" #: modules/csg/csg_gizmos.cpp -#, fuzzy msgid "Change Cylinder Radius" -msgstr "Işın Çapını Değiştir" +msgstr "Silindir Yarıçapını Değiştir" #: modules/csg/csg_gizmos.cpp -#, fuzzy msgid "Change Cylinder Height" -msgstr "Kapsülün Yüksekliğini Değiştir" +msgstr "Silindir Yüksekliğini Değiştir" #: modules/csg/csg_gizmos.cpp -#, fuzzy msgid "Change Torus Inner Radius" -msgstr "Küresel Şeklin Çapını Değiştir" +msgstr "Simit Şekli İç Yarıçapını Değiştir" #: modules/csg/csg_gizmos.cpp -#, fuzzy msgid "Change Torus Outer Radius" -msgstr "Işın Çapını Değiştir" +msgstr "Simit Şekli Dış Yarıçapını Değiştir" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Select the dynamic library for this entry" @@ -11221,12 +11207,11 @@ msgstr "GDYerelKütüphanesi" #: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Enabled GDNative Singleton" -msgstr "" +msgstr "GDNative İskelet Etkinleştirildi" #: modules/gdnative/gdnative_library_singleton_editor.cpp -#, fuzzy msgid "Disabled GDNative Singleton" -msgstr "Güncelleme Topacını Devre Dışı Bırak" +msgstr "GDNative İskeleti Pasifleştirildi" #: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Library" @@ -11241,9 +11226,8 @@ msgid "GDNative" msgstr "GDYerel" #: modules/gdscript/gdscript_functions.cpp -#, fuzzy msgid "Step argument is zero!" -msgstr "adım değiştirgeni sıfır!" +msgstr "Adım argümanı sıfır!" #: modules/gdscript/gdscript_functions.cpp msgid "Not a script with an instance" @@ -11306,19 +11290,16 @@ msgid "GridMap Delete Selection" msgstr "IzgaraHaritası Seçimi Sil" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "GridMap Fill Selection" -msgstr "IzgaraHaritası Seçimi Sil" +msgstr "IzgaraHaritası Seçimi Doldur" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "GridMap Paste Selection" -msgstr "IzgaraHaritası Seçimi Sil" +msgstr "IzgaraHaritası Seçimi Yapıştır" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "GridMap Paint" -msgstr "IzgaraHaritası Ayarları" +msgstr "IzgaraHaritası Boyama" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Grid Map" @@ -11381,18 +11362,16 @@ msgid "Cursor Clear Rotation" msgstr "İmleç Döndürme Temizle" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Paste Selects" -msgstr "Seçimi Sil" +msgstr "Seçimleri Yapıştır" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Clear Selection" msgstr "Seçimi Temizle" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Fill Selection" -msgstr "Tüm Seçim" +msgstr "Seçimi Doldur" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "GridMap Settings" @@ -11403,13 +11382,12 @@ msgid "Pick Distance:" msgstr "Uzaklık Seç:" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Filter meshes" -msgstr "Süzgeç kipi:" +msgstr "Modelleri Süz" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Give a MeshLibrary resource to this GridMap to use its meshes." -msgstr "" +msgstr "Model olarak kullanması için bu GridMap'e MeshLibrary kaynağı atayın." #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" @@ -11421,7 +11399,7 @@ msgstr "İç özel durum yığını izlemesinin sonu" #: modules/recast/navigation_mesh_editor_plugin.cpp msgid "Bake NavMesh" -msgstr "" +msgstr "NavMesh'i Sabitle" #: modules/recast/navigation_mesh_editor_plugin.cpp msgid "Clear the navigation mesh." @@ -11536,42 +11514,36 @@ msgid "Set Variable Type" msgstr "Değişken Tipini Ayarla" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Add Input Port" -msgstr "Giriş Ekle" +msgstr "Giriş Portu Ekle" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Add Output Port" -msgstr "Giriş Ekle" +msgstr "Çıkış Portu Ekle" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Override an existing built-in function." -msgstr "Geçersiz ad. Var olan gömülü türdeki ad ile çakışmamalı." +msgstr "Varolan gömülü işlevi değiştir." #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Create a new function." -msgstr "Yeni %s oluştur" +msgstr "Yeni işlev oluştur." #: modules/visual_script/visual_script_editor.cpp msgid "Variables:" msgstr "Değişkenler:" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Create a new variable." -msgstr "Yeni %s oluştur" +msgstr "Yeni değişken oluştur." #: modules/visual_script/visual_script_editor.cpp msgid "Signals:" msgstr "Sinyaller:" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Create a new signal." -msgstr "Sıfırdan yeni bir çokgen oluşturun." +msgstr "Yeni sinyal oluştur." #: modules/visual_script/visual_script_editor.cpp msgid "Name is not a valid identifier:" @@ -11598,9 +11570,8 @@ msgid "Add Function" msgstr "Fonksiyon Ekle" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Delete input port" -msgstr "Noktayı kaldır" +msgstr "Girdi portunu sil" #: modules/visual_script/visual_script_editor.cpp msgid "Add Variable" @@ -11611,14 +11582,12 @@ msgid "Add Signal" msgstr "Sinyal Ekle" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Remove Input Port" -msgstr "Noktayı kaldır" +msgstr "Girdi Portunu Kaldır" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Remove Output Port" -msgstr "Noktayı kaldır" +msgstr "Çıktı Portunu Kaldır" #: modules/visual_script/visual_script_editor.cpp msgid "Change Expression" @@ -11673,6 +11642,9 @@ msgid "" "Can't drop properties because script '%s' is not used in this scene.\n" "Drop holding 'Shift' to just copy the signature." msgstr "" +"Bu sahnede '% s' komut dosyası kullanılmadığı için özellikler " +"bırakılamıyor.\n" +"Sadece imzayı kopyalamak için 'Shift' tuşunu basılı tutarak bırakın." #: modules/visual_script/visual_script_editor.cpp msgid "Add Getter Property" @@ -11699,19 +11671,16 @@ msgid "Connect Nodes" msgstr "Düğümleri Bağla" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Disconnect Nodes" -msgstr "Çizge Düğümlerinin Bağlantılarını Kes" +msgstr "Düğümleri Ayır" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Connect Node Data" -msgstr "Düğümleri Bağla" +msgstr "Düğüm Verisi Bağla" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Connect Node Sequence" -msgstr "Düğümleri Bağla" +msgstr "Düğüm Dizisi Bağla" #: modules/visual_script/visual_script_editor.cpp msgid "Script already has function '%s'" @@ -11722,9 +11691,8 @@ msgid "Change Input Value" msgstr "Girdi Değerini Değiştir" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Resize Comment" -msgstr "CanvasItem Düzenle" +msgstr "Yorumu Boyutlandır" #: modules/visual_script/visual_script_editor.cpp msgid "Can't copy the function node." @@ -11739,26 +11707,24 @@ msgid "Paste VisualScript Nodes" msgstr "GörselBetik Düğümleri Yapıştır" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Can't create function with a function node." -msgstr "Fonksiyon düğümü kopyalanamıyor." +msgstr "İşlev düğümü ile işlev oluşturulamıyor." #: modules/visual_script/visual_script_editor.cpp msgid "Can't create function of nodes from nodes of multiple functions." -msgstr "" +msgstr "Birden çok işlevin düğümlerinden düğüm işlevi oluşturulamıyor." #: modules/visual_script/visual_script_editor.cpp msgid "Select at least one node with sequence port." -msgstr "" +msgstr "Dizi portlu en az bir düğüm seçin." #: modules/visual_script/visual_script_editor.cpp msgid "Try to only have one sequence input in selection." -msgstr "" +msgstr "Seçimde yalnızca bir dizi girişi olmasını deneyin." #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Create Function" -msgstr "İşlevi Yeniden Adlandır" +msgstr "İşlev Oluştur" #: modules/visual_script/visual_script_editor.cpp msgid "Remove Function" @@ -11781,38 +11747,32 @@ msgid "Editing Signal:" msgstr "Sinyal Düzenleniyor:" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Make Tool:" -msgstr "Yerelleştir" +msgstr "Araç Yap:" #: modules/visual_script/visual_script_editor.cpp msgid "Members:" msgstr "Üyeler:" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Change Base Type:" -msgstr "Temel Tipi Değiştir" +msgstr "Temel Tipi Değiştir:" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Add Nodes..." -msgstr "Düğüm Ekle..." +msgstr "Düğümler Ekle..." #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Add Function..." -msgstr "Fonksiyon Ekle" +msgstr "İşlev Ekle..." #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "function_name" -msgstr "Fonksiyon:" +msgstr "işlev_ismi" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Select or create a function to edit its graph." -msgstr "Çizgeyi düzenlemek için bir fonksiyon seçin ya da oluşturun" +msgstr "Grafiği düzenlemek için işlev seçin ya da oluşturun." #: modules/visual_script/visual_script_editor.cpp msgid "Delete Selected" @@ -11831,19 +11791,16 @@ msgid "Cut Nodes" msgstr "Düğümleri Kes" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Make Function" -msgstr "İşlevi Yeniden Adlandır" +msgstr "İşlev Yap" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Refresh Graph" -msgstr "Yenile" +msgstr "Grafiği Yenile" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Edit Member" -msgstr "Üyeler" +msgstr "Üye Düzenle" #: modules/visual_script/visual_script_flow_control.cpp msgid "Input type not iterable: " @@ -11902,41 +11859,40 @@ msgstr "" "(hatası) olmalı." #: modules/visual_script/visual_script_property_selector.cpp -#, fuzzy msgid "Search VisualScript" -msgstr "GörselBetik Düğümü Kaldır" +msgstr "Görsel Betikte Ara" #: modules/visual_script/visual_script_property_selector.cpp msgid "Get %s" -msgstr "" +msgstr "Getir %s" #: modules/visual_script/visual_script_property_selector.cpp msgid "Set %s" -msgstr "" +msgstr "Ayarla %s" #: platform/android/export/export.cpp msgid "Package name is missing." -msgstr "" +msgstr "Paket ismi eksik." #: platform/android/export/export.cpp msgid "Package segments must be of non-zero length." -msgstr "" +msgstr "Paket segmentleri sıfır olmayan uzunlukta olmalıdır." #: platform/android/export/export.cpp msgid "The character '%s' is not allowed in Android application package names." -msgstr "" +msgstr "Android uygulama paketi adlarında '% s' karakterine izin verilmiyor." #: platform/android/export/export.cpp msgid "A digit cannot be the first character in a package segment." -msgstr "" +msgstr "Rakam, paket segmentindeki ilk karakter olamaz." #: platform/android/export/export.cpp msgid "The character '%s' cannot be the first character in a package segment." -msgstr "" +msgstr "'%s' karakteri bir paket segmentindeki ilk karakter olamaz." #: platform/android/export/export.cpp msgid "The package must have at least one '.' separator." -msgstr "" +msgstr "Paket en azından bir tane '.' ayıracına sahip olmalıdır." #: platform/android/export/export.cpp msgid "Select device from the list" @@ -11944,45 +11900,49 @@ msgstr "Listeden aygıt seç" #: platform/android/export/export.cpp msgid "ADB executable not configured in the Editor Settings." -msgstr "" +msgstr "Editör Ayarlarında ADB uygulaması tayin edilmemiş." #: platform/android/export/export.cpp msgid "OpenJDK jarsigner not configured in the Editor Settings." -msgstr "" +msgstr "OpenJDK jarimzalayıcı Editör Ayarlarında yapılandırılmamış." #: platform/android/export/export.cpp msgid "Debug keystore not configured in the Editor Settings nor in the preset." msgstr "" +"Anahtar deposunda Hata Ayıklayıcı Ayarları'nda veya ön ayarda " +"yapılandırılmamış." #: platform/android/export/export.cpp msgid "Custom build requires a valid Android SDK path in Editor Settings." msgstr "" +"Özel derleme için Editör Ayarları'nda geçerli bir Android SDK yolu gerekir." #: platform/android/export/export.cpp msgid "Invalid Android SDK path for custom build in Editor Settings." -msgstr "" +msgstr "Editör Ayarlarında özel derleme için geçersiz Android SDK yolu." #: platform/android/export/export.cpp -#, fuzzy msgid "" "Android build template not installed in the project. Install it from the " "Project menu." -msgstr "Android yapı şablonu eksik, lütfen ilgili şablonları yükleyin." +msgstr "" +"Android derleme şablonu projede yüklü değil. Proje menüsünden yükleyin." #: platform/android/export/export.cpp msgid "Invalid public key for APK expansion." -msgstr "" +msgstr "APK genişletmesi için geçersiz ortak anahtar." #: platform/android/export/export.cpp -#, fuzzy msgid "Invalid package name:" -msgstr "Geçersiz sınıf ismi" +msgstr "Geçersiz paket ismi:" #: platform/android/export/export.cpp msgid "" "Trying to build from a custom built template, but no version info for it " "exists. Please reinstall from the 'Project' menu." msgstr "" +"Özel olarak oluşturulmuş bir şablondan oluşturmaya çalışılıyor, ancak bunun " +"için sürüm bilgisi yok. Lütfen 'Proje' menüsünden yeniden yükleyin." #: platform/android/export/export.cpp msgid "" @@ -11991,46 +11951,52 @@ msgid "" " Godot Version: %s\n" "Please reinstall Android build template from 'Project' menu." msgstr "" +"Android derlemesi sürüm uyumsuzluğu:\n" +" Yüklü Şablon: %s\n" +" Godot Versiyonu: %s\n" +"Lütfen 'Derleme' menüsünden Android derleme şablonunu yeniden yükleyin." #: platform/android/export/export.cpp msgid "Building Android Project (gradle)" -msgstr "" +msgstr "Android Projesi Oluşturma (gradle)" #: platform/android/export/export.cpp msgid "" "Building of Android project failed, check output for the error.\n" "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" +"Android projesinin oluşturulması başarısız oldu, hatayı çıktı için kontrol " +"edin.\n" +"Alternatif olarak, Android derleme dokümantasyonu için docs.godotengine.org " +"adresini ziyaret edin.." #: platform/android/export/export.cpp msgid "No build apk generated at: " -msgstr "" +msgstr "Şurada derleme apk oluşturulmadı: " #: platform/iphone/export/export.cpp msgid "Identifier is missing." -msgstr "" +msgstr "Tanımlayıcı eksik." #: platform/iphone/export/export.cpp -#, fuzzy msgid "The character '%s' is not allowed in Identifier." -msgstr "Ad doğru bir belirleyici değil:" +msgstr "Tanımlayıcı'da '%s' karakterine izin verilmiyor." #: platform/iphone/export/export.cpp msgid "App Store Team ID not specified - cannot configure the project." -msgstr "" +msgstr "App Store Ekip Kimliği belirtilmedi - proje yapılandırılamıyor." #: platform/iphone/export/export.cpp -#, fuzzy msgid "Invalid Identifier:" -msgstr "Ad doğru bir belirleyici değil:" +msgstr "Geçersiz Tanımlayıcı:" #: platform/iphone/export/export.cpp msgid "Required icon is not specified in the preset." -msgstr "" +msgstr "Ön ayarda gerekli simge belirtilmemiş." #: platform/javascript/export/export.cpp msgid "Stop HTTP Server" -msgstr "" +msgstr "HTTP sunucuyu durdur" #: platform/javascript/export/export.cpp msgid "Run in Browser" @@ -12065,19 +12031,16 @@ msgid "Using default boot splash image." msgstr "Açılış ekranı resim dosyası okunamadı." #: platform/uwp/export/export.cpp -#, fuzzy msgid "Invalid package short name." -msgstr "Geçersiz sınıf ismi" +msgstr "Geçersiz paket kısa ismi." #: platform/uwp/export/export.cpp -#, fuzzy msgid "Invalid package unique name." -msgstr "Benzersiz Ad Geçersiz." +msgstr "Geçersiz benzersiz paket ismi." #: platform/uwp/export/export.cpp -#, fuzzy msgid "Invalid package publisher display name." -msgstr "Benzersiz Ad Geçersiz." +msgstr "Geçersiz paket yayıncı görünen adı." #: platform/uwp/export/export.cpp msgid "Invalid product GUID." @@ -12120,13 +12083,12 @@ msgid "Invalid splash screen image dimensions (should be 620x300)." msgstr "Geçersiz açılış görüntülüğü bediz boyutları (620x300 olmalı)." #: scene/2d/animated_sprite.cpp -#, fuzzy msgid "" "A SpriteFrames resource must be created or set in the \"Frames\" property in " "order for AnimatedSprite to display frames." msgstr "" -"Bir SpriteFrames kaynağı oluşturulmalı ya da 'Kareler' özelliğine atanmalı " -"ki AnimatedSprite düğümü kareleri gösterebilsin." +"AnimatedSprite öğesinin çerçeveleri görüntülemesi için \"Çerçeveler\" " +"özelliğinde bir SpriteFrames kaynağı oluşturulmalı veya ayarlanmalıdır." #: scene/2d/canvas_modulate.cpp msgid "" @@ -12138,15 +12100,15 @@ msgstr "" "edilecektir." #: scene/2d/collision_object_2d.cpp -#, fuzzy msgid "" "This node has no shape, so it can't collide or interact with other objects.\n" "Consider adding a CollisionShape2D or CollisionPolygon2D as a child to " "define its shape." msgstr "" -"Bu düğüm alt şekillere sahip değil, bu yüzden uzayla etkileşime giremez.\n" -"Şeklini belirlemek için CollisionShape2D ya da CollisionPolygon2D eklemeyi " -"düşünebilirsiniz." +"Bu düğümün şekli yoktur, bu nedenle diğer nesnelerle çarpışamaz veya " +"etkileşime giremez.\n" +"Şeklini tanımlamak için alt düğüm olarak bir TemasŞekli2B veya TemasÇokgen2B " +"eklemeyi düşünün." #: scene/2d/collision_polygon_2d.cpp msgid "" @@ -12187,13 +12149,14 @@ msgid "" "CPUParticles2D animation requires the usage of a CanvasItemMaterial with " "\"Particles Animation\" enabled." msgstr "" +"CPUParçacık2B animasyonu \"Parçacık Animasyonu\" seçimi etkin olarak " +"CanvasÖgesiMalzemesi kullanımı gerektirir." #: scene/2d/light_2d.cpp -#, fuzzy msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " "property." -msgstr "Işık yüzeyli bir doku, 'texture' özelliğine sağlanmalıdır." +msgstr "\"Doku\" özelliğine ışık şeklinde bir doku sağlanmalıdır." #: scene/2d/light_occluder_2d.cpp msgid "" @@ -12203,9 +12166,8 @@ msgstr "" "(ya da çizilmelidir)." #: scene/2d/light_occluder_2d.cpp -#, fuzzy msgid "The occluder polygon for this occluder is empty. Please draw a polygon." -msgstr "Bu engelleyici için engelleyici çokgeni boş. Lütfen bir çokgen çizin!" +msgstr "Bu engelleyici için engelleyici çokgeni boş. Lütfen bir çokgen çizin." #: scene/2d/navigation_polygon.cpp msgid "" @@ -12237,6 +12199,9 @@ msgid "" "Use the CPUParticles2D node instead. You can use the \"Convert to " "CPUParticles\" option for this purpose." msgstr "" +"GPU tabanlı parçacıklar GLES2 video sürücüsü tarafından desteklenmez.\n" +"Bunun yerine CPUParçacıklar2B düğümünü kullanın. Bu amaçla " +"\"CPUParçacıklar'a Dönüştür\" seçeneğini kullanabilirsiniz." #: scene/2d/particles_2d.cpp scene/3d/particles.cpp msgid "" @@ -12251,6 +12216,8 @@ msgid "" "Particles2D animation requires the usage of a CanvasItemMaterial with " "\"Particles Animation\" enabled." msgstr "" +"Particles2D animasyonu, \"Parçacık Animasyonu\" etkinleştirilmiş bir " +"CanvasÖgesiMalzemesi kullanımını gerektirir." #: scene/2d/path_2d.cpp msgid "PathFollow2D only works when set as a child of a Path2D node." @@ -12274,74 +12241,70 @@ msgstr "" #: scene/2d/skeleton_2d.cpp msgid "This Bone2D chain should end at a Skeleton2D node." -msgstr "" +msgstr "Bu İskelet2B zinciri İskelet2B düğümünde sonlanmalı." #: scene/2d/skeleton_2d.cpp msgid "A Bone2D only works with a Skeleton2D or another Bone2D as parent node." msgstr "" +"Bir Kemit2B yalnızca İskelet2B ya da başka bir Kemik2B'nin alt düğümü olarak " +"çalışabilir." #: scene/2d/skeleton_2d.cpp msgid "" "This bone lacks a proper REST pose. Go to the Skeleton2D node and set one." msgstr "" +"Bu kemik uygun bir DİNLENME pozundan yoksun. İskelet2B düğümüne gidip bir " +"tane atayın." #: scene/2d/tile_map.cpp -#, fuzzy msgid "" "TileMap with Use Parent on needs a parent CollisionObject2D to give shapes " "to. Please use it as a child of Area2D, StaticBody2D, RigidBody2D, " "KinematicBody2D, etc. to give them a shape." msgstr "" "CollisionShape2D yalnızca CollisionObject2D'den türeyen düğümlere bir şekil " -"elde etmeye hizmet eder. Lütfen onu yalnızca şunların çocuğu olarak kullanın " -"ve Area2D, StaticBody2D, RigidBody2D, KinematicBody2D vs.'ye bir şekil " -"vermek için kullanın." +"elde etmeye hizmet eder. Lütfen onu yalnızca Area2D, StaticBody2D, " +"RigidBody2D, KinematicBody2D vs.'nin alt şekli olarak ve onlara şekil vermek " +"için kullanın." #: scene/2d/visibility_notifier_2d.cpp -#, fuzzy msgid "" "VisibilityEnabler2D works best when used with the edited scene root directly " "as parent." msgstr "" -"VisibilityEnable2D düğümü düzenlenmiş sahne kökü doğrudan ebeveyn olarak " -"kullanıldığında çalışır." +"VisibilityEnabler2D, düzenlenmiş sahne köküyle doğrudan üst öğe olarak " +"kullanıldığında en iyi sonucu verir." #: scene/3d/arvr_nodes.cpp -#, fuzzy msgid "ARVRCamera must have an ARVROrigin node as its parent." -msgstr "ARVRCamera ebeveyni olarak ARVROrigin düğümüne sahip olmalı" +msgstr "ARVRCamera üst düğüm olarak ARVROrigin düğümüne sahip olmalı." #: scene/3d/arvr_nodes.cpp -#, fuzzy msgid "ARVRController must have an ARVROrigin node as its parent." -msgstr "ARVRController ebeveyni olarak ARVROrigin düğümüne sahip olmalı" +msgstr "ARVRController üst düğüm olarak ARVROrigin düğümüne sahip olmalı." #: scene/3d/arvr_nodes.cpp -#, fuzzy msgid "" "The controller ID must not be 0 or this controller won't be bound to an " "actual controller." msgstr "" "Deneytleyici kimliği 0 olmamalı aksi taktirde bu denetleyici gerçek bir " -"denetleyiciye bağlı olmayacak" +"denetleyiciye bağlı olmayacak." #: scene/3d/arvr_nodes.cpp -#, fuzzy msgid "ARVRAnchor must have an ARVROrigin node as its parent." -msgstr "ARVRAnchor ebeveyni olarak ARVROrigin düğümüne sahip olmalı" +msgstr "ARVRAnchor üst düğüm olarak ARVROrigin düğümüne sahip olmalı." #: scene/3d/arvr_nodes.cpp -#, fuzzy msgid "" "The anchor ID must not be 0 or this anchor won't be bound to an actual " "anchor." msgstr "" -"Çapa kimliği 0 olmamalı aksi halde bu çapa gerçek bir çapaya bağlı olmayacak" +"Çapa kimliği 0 olmamalı aksi halde bu çapa gerçek bir çapaya bağlı olmayacak." #: scene/3d/arvr_nodes.cpp -#, fuzzy msgid "ARVROrigin requires an ARVRCamera child node." -msgstr "ARVROrigin bir ARVRCamera çocuk düğümü gerektirir" +msgstr "ARVROrigin bir ARVRCamera alt düğümü gerektirir." #: scene/3d/baked_lightmap.cpp msgid "%d%%" @@ -12368,15 +12331,14 @@ msgid "Lighting Meshes: " msgstr "Örüntüler Haritalanıyor: " #: scene/3d/collision_object.cpp -#, fuzzy msgid "" "This node has no shape, so it can't collide or interact with other objects.\n" "Consider adding a CollisionShape or CollisionPolygon as a child to define " "its shape." msgstr "" -"Bu düğüm alt şekillere sahip değil, bu yüzden uzayla etkileşime giremez.\n" -"Şeklini belirlemek için CollisionShape ya da CollisionPolygon eklemeyi " -"düşünebilirsiniz." +"Bu düğüm şekle sahip değil, bu yüzden diğer nesnelerle etkileşime giremez.\n" +"Şeklini belirlemek için alt düğüm olarak CollisionShape ya da " +"CollisionPolygon eklemeyi düşünebilirsiniz." #: scene/3d/collision_polygon.cpp msgid "" @@ -12404,31 +12366,32 @@ msgstr "" "RigidBody, KinematicBody, v.b. onu sadece bunların çocuğu olarak kullanın." #: scene/3d/collision_shape.cpp -#, fuzzy msgid "" "A shape must be provided for CollisionShape to function. Please create a " "shape resource for it." msgstr "" -"CollisionShape'in çalışması için bir şekil verilmelidir. Lütfen bunun için " -"bir şekil kaynağı oluşturun!" +"CollisionShape'in çalışması için ona bir şekil verilmelidir. Lütfen bunun " +"için bir şekil kaynağı oluşturun." #: scene/3d/collision_shape.cpp msgid "" "Plane shapes don't work well and will be removed in future versions. Please " "don't use them." msgstr "" +"Düzlem şekli iyi çalışmıyor ve gelecek versiyonlarda çıkarılacak. Lütfen " +"kullanmayın." #: scene/3d/cpu_particles.cpp -#, fuzzy msgid "Nothing is visible because no mesh has been assigned." -msgstr "" -"Hiçbirşey görünebilir değil çünkü örüntüler çizim geçişlerine atanmış değil." +msgstr "Hiçbirşey görünebilir değil çünkü hiçbir model atanmış değil." #: scene/3d/cpu_particles.cpp msgid "" "CPUParticles animation requires the usage of a SpatialMaterial whose " "Billboard Mode is set to \"Particle Billboard\"." msgstr "" +"CPUParçacık animasyonu Billboard Modu \"Parçacık Billboard\" olarak " +"belirlenmiş UzamsalMalzeme kullanımı gerektirir." #: scene/3d/gi_probe.cpp msgid "Plotting Meshes" @@ -12439,10 +12402,12 @@ msgid "" "GIProbes are not supported by the GLES2 video driver.\n" "Use a BakedLightmap instead." msgstr "" +"GIProbes GLES2 video sürücüsü tarafından desteklenmez.\n" +"Bunun yerine bir BakedLightmap kullanın." #: scene/3d/light.cpp msgid "A SpotLight with an angle wider than 90 degrees cannot cast shadows." -msgstr "" +msgstr "90 dereceden geniş açılı SpotIşık gölge oluşturamaz." #: scene/3d/navigation_mesh.cpp msgid "A NavigationMesh resource must be set or created for this node to work." @@ -12464,6 +12429,9 @@ msgid "" "Use the CPUParticles node instead. You can use the \"Convert to CPUParticles" "\" option for this purpose." msgstr "" +"GPU tabanlı parçacıklar GLES2 video sürücüsü tarafından desteklenmez.\n" +"Bunun yerine CPUParçacık düğümünü kullanın. Bu amaçla \"CPUParçacık'a " +"Dönüştür\" seçeneğini kullanabilirsiniz." #: scene/3d/particles.cpp msgid "" @@ -12476,18 +12444,21 @@ msgid "" "Particles animation requires the usage of a SpatialMaterial whose Billboard " "Mode is set to \"Particle Billboard\"." msgstr "" +"Parçacık animasyonu, Reklam Panosu Modu \"Parçacık Reklam Panosu\" olarak " +"ayarlanmış bir SpatialMaterial'ın kullanılmasını gerektirir." #: scene/3d/path.cpp -#, fuzzy msgid "PathFollow only works when set as a child of a Path node." msgstr "" -"PathFollow2D yalnızca Path2D düğümünün çocuğu olarak ayarlanınca çalışır." +"PathFollow yalnızca Path düğümünün alt düğümü olarak ayarlanınca çalışır." #: scene/3d/path.cpp msgid "" "PathFollow's ROTATION_ORIENTED requires \"Up Vector\" to be enabled in its " "parent Path's Curve resource." msgstr "" +"YolTakibet'in DÖNME_ODAKLI öğesi, üst Yol'un Eğri kaynağında \"Yukarı Vektör" +"\" özelliğinin etkinleştirilmesini gerektiriyor." #: scene/3d/physics_body.cpp msgid "" @@ -12500,36 +12471,34 @@ msgstr "" "Boyu değişikliğini bunun yerine çocuk çarpışma şekilleri içinden yapın." #: scene/3d/remote_transform.cpp -#, fuzzy msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" "derived node to work." msgstr "" -"Yol özelliği, çalışmak için geçerli bir Spatial düğümüne işaret etmelidir." +"\"Uzak Yol\" özelliği çalışması için geçerli bir Uzamsal veya Uzamsal türevi " +"düğüme işaret etmelidir." #: scene/3d/soft_body.cpp msgid "This body will be ignored until you set a mesh." -msgstr "" +msgstr "Bir model ayarlanana kadar bu gövde yok sayılır." #: scene/3d/soft_body.cpp -#, fuzzy msgid "" "Size changes to SoftBody will be overridden by the physics engine when " "running.\n" "Change the size in children collision shapes instead." msgstr "" -"RigidBody boyut değişikliği(karakter yada rigid kipleri) fizik motoru " -"çalıştığında geçersiz kılınacak.\n" -"Boyu değişikliğini bunun yerine çocuk çarpışma şekilleri içinden yapın." +"SoftBody'deki boyut değişiklikleri çalışırken fizik motoru tarafından " +"geçersiz kılınır.\n" +"Bunun yerine alt düğümlerde çarpışma şekillerindeki boyutu değiştirin." #: scene/3d/sprite_3d.cpp -#, fuzzy msgid "" "A SpriteFrames resource must be created or set in the \"Frames\" property in " "order for AnimatedSprite3D to display frames." msgstr "" -"AnimatedSprite3D 'nin çerçeveleri görüntülemek için bir SpriteFrames kaynağı " -"oluşturulmalı veya 'Çerçeveler' niteliğinde ayarlanmalıdır." +"AnimatedSprite3D'nin kareleri görüntüleyebilmesi için \"Çerçeveler\" " +"özelliğinde bir SpriteFrames kaynağı oluşturulmalı veya ayarlanmalıdır." #: scene/3d/vehicle_body.cpp msgid "" @@ -12544,6 +12513,8 @@ msgid "" "WorldEnvironment requires its \"Environment\" property to contain an " "Environment to have a visible effect." msgstr "" +"WorldEnvironment, \"Ortam\" özelliğinin görünür bir etkiye sahip olması için " +"bir Ortam içermesi gereklidir." #: scene/3d/world_environment.cpp msgid "" @@ -12562,50 +12533,45 @@ msgstr "" #: scene/animation/animation_blend_tree.cpp msgid "On BlendTree node '%s', animation not found: '%s'" -msgstr "" +msgstr "'%s' BlendTree düğümünde, animasyon bulunamadı: '% s'" #: scene/animation/animation_blend_tree.cpp -#, fuzzy msgid "Animation not found: '%s'" -msgstr "Animasyon Araçları" +msgstr "Animasyon bulunamadı: '%s'" #: scene/animation/animation_tree.cpp msgid "In node '%s', invalid animation: '%s'." -msgstr "" +msgstr "'%s' düğümünde geçersiz animasyon: '%s'." #: scene/animation/animation_tree.cpp -#, fuzzy msgid "Invalid animation: '%s'." -msgstr "HATA: Geçersiz animasyon adı!" +msgstr "Geçersiz animasyon: '%s'." #: scene/animation/animation_tree.cpp -#, fuzzy msgid "Nothing connected to input '%s' of node '%s'." -msgstr "Şunun: '%s' şununla: '%s' bağlantısını kes" +msgstr "'%s' düğümünün '%s' girişine hiçbir şey bağlı değil." #: scene/animation/animation_tree.cpp msgid "No root AnimationNode for the graph is set." -msgstr "" +msgstr "Grafik için hiçbir kök AnimationNode ayarlanmadı." #: scene/animation/animation_tree.cpp -#, fuzzy msgid "Path to an AnimationPlayer node containing animations is not set." -msgstr "" -"Sahne Ağacı'ndan animasyonları düzenleyebilmek için bir AnimationPlayer " -"seçin." +msgstr "Animasyon içeren bir AnimationPlayer düğümünün yolu ayarlanmadı." #: scene/animation/animation_tree.cpp msgid "Path set for AnimationPlayer does not lead to an AnimationPlayer node." msgstr "" +"AnimasyonOynatıcı için ayarlanan yol, bir AnimasyonOynatıcı düğümüne yol " +"açmaz." #: scene/animation/animation_tree.cpp -#, fuzzy msgid "The AnimationPlayer root node is not a valid node." -msgstr "Animasyon ağacı geçersizdir." +msgstr "AnimationOynatıcı kök düğümü geçerli bir düğüm değil." #: scene/animation/animation_tree_player.cpp msgid "This node has been deprecated. Use AnimationTree instead." -msgstr "" +msgstr "Bu düğüm kullanımdan kaldırıldı. Bunun yerine AnimasyonAğacı kullanın." #: scene/gui/color_picker.cpp msgid "" @@ -12613,27 +12579,29 @@ msgid "" "LMB: Set color\n" "RMB: Remove preset" msgstr "" +"Renk: #%s\n" +"SFD: Renk ata\n" +"RMB: Önayar kaldır" #: scene/gui/color_picker.cpp msgid "Pick a color from the editor window." -msgstr "" +msgstr "Düzenleme penceresinden renk seç." #: scene/gui/color_picker.cpp msgid "HSV" -msgstr "" +msgstr "HSV" #: scene/gui/color_picker.cpp msgid "Raw" -msgstr "" +msgstr "Ham" #: scene/gui/color_picker.cpp msgid "Switch between hexadecimal and code values." -msgstr "" +msgstr "Hex ve kod değerleri arasında geçiş yap." #: scene/gui/color_picker.cpp -#, fuzzy msgid "Add current color as a preset." -msgstr "Şuanki rengi bir önayar olarak kaydet" +msgstr "Şuanki rengi bir önayar olarak kaydet." #: scene/gui/container.cpp msgid "" @@ -12641,12 +12609,19 @@ msgid "" "children placement behavior.\n" "If you don't intend to add a script, use a plain Control node instead." msgstr "" +"Bir komut dosyası alt öğelerin yerleştirme davranışını yapılandırmadıkça, " +"kapsayıcı kendi başına hiçbir amaca hizmet etmez.\n" +"Komut dosyası eklemek istemiyorsanız bunun yerine düz bir Kontrol düğümü " +"kullanın." #: scene/gui/control.cpp msgid "" "The Hint Tooltip won't be displayed as the control's Mouse Filter is set to " "\"Ignore\". To solve this, set the Mouse Filter to \"Stop\" or \"Pass\"." msgstr "" +"İpucu Araç İpucu, kontrolün Fare Filtresi \"Yoksay\" olarak ayarlandığı için " +"görüntülenmez. Bu sorunu çözmek için Fare Filtresini \"Durdur\" veya " +"\"Başarılı\" olarak ayarlayın." #: scene/gui/dialogs.cpp msgid "Alert!" @@ -12657,30 +12632,28 @@ msgid "Please Confirm..." msgstr "Lütfen Doğrulayın..." #: scene/gui/popup.cpp -#, fuzzy msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " "functions. Making them visible for editing is fine, but they will hide upon " "running." msgstr "" -"Açılır pencereler popup() veya popup*() işlevleri çağrılmadıkça varsayılan " -"olarak gizlenecektir. Onları düzenleme için görünür kılmak da iyidir, ancak " -"çalışırken gizlenecekler." +"Popup() veya popup*() işlevlerinden herhangi birini çağırmazsanız pop-up'lar " +"varsayılan olarak gizlenir. Bunları düzenleme için görünür yapmak iyidir, " +"ancak çalıştırıldıktan sonra gizlenirler." #: scene/gui/range.cpp msgid "If \"Exp Edit\" is enabled, \"Min Value\" must be greater than 0." -msgstr "" +msgstr "\"Exp Edit\" etkinse, \"Min Değer\" 0'dan büyük olmalıdır." #: scene/gui/scroll_container.cpp -#, fuzzy msgid "" "ScrollContainer is intended to work with a single child control.\n" "Use a container as child (VBox, HBox, etc.), or a Control and set the custom " "minimum size manually." msgstr "" -"ScrollContainer tek bir çocuk denetimi ile çalışmak için tasarlanmıştır.\n" -"Bir kapsayıcı (VBox,HBox, vb) veya bir Control'ü çocuk olarak kullanın ve " -"özel minimum boyutu elle ayarlayın." +"ScrollContainer tek bir alt denetimi ile çalışmak için tasarlanmıştır.\n" +"Bir kapsayıcı (VBox,HBox, vb) ya da Control'ü alt düğüm olarak kullanın ve " +"minimum boyutu elle ayarlayın." #: scene/gui/tree.cpp msgid "(Other)" @@ -12711,9 +12684,8 @@ msgid "Invalid source for preview." msgstr "Önizleme için geçersiz kaynak." #: scene/resources/visual_shader_nodes.cpp -#, fuzzy msgid "Invalid source for shader." -msgstr "Gölgelendirici için geçersiz kaynak." +msgstr "Shader için geçersiz kaynak." #: scene/resources/visual_shader_nodes.cpp msgid "Invalid comparison function for that type." @@ -12724,19 +12696,26 @@ msgid "Assignment to function." msgstr "İşleve atama." #: servers/visual/shader_language.cpp -#, fuzzy msgid "Assignment to uniform." -msgstr "Değişmeze atama." +msgstr "uniform için atama." #: servers/visual/shader_language.cpp -#, fuzzy msgid "Varyings can only be assigned in vertex function." -msgstr "Değişkenler yalnızca tepe işlevinde atanabilir." +msgstr "varyings yalnızca vertex işlevinde atanabilir." #: servers/visual/shader_language.cpp msgid "Constants cannot be modified." msgstr "Sabit değerler değiştirilemez." +#~ msgid "Replaced %d occurrence(s)." +#~ msgstr "%d değişiklik gerçekleştirildi." + +#~ msgid "Create Static Convex Body" +#~ msgstr "Durağan Dışbükey Gövde Oluştur" + +#~ msgid "Failed creating shapes!" +#~ msgstr "Şekil oluşturma başarısız!" + #~ msgid "" #~ "There are currently no tutorials for this class, you can [color=$color]" #~ "[url=$url]contribute one[/url][/color] or [color=$color][url=" diff --git a/editor/translations/uk.po b/editor/translations/uk.po index aca5040517..32cb1e33cd 100644 --- a/editor/translations/uk.po +++ b/editor/translations/uk.po @@ -17,7 +17,7 @@ msgid "" msgstr "" "Project-Id-Version: Ukrainian (Godot Engine)\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2020-01-27 07:10+0000\n" +"PO-Revision-Date: 2020-02-16 15:20+0000\n" "Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n" "Language-Team: Ukrainian <https://hosted.weblate.org/projects/godot-engine/" "godot/uk/>\n" @@ -702,8 +702,8 @@ msgid "Line Number:" msgstr "Номер рядка:" #: editor/code_editor.cpp -msgid "Replaced %d occurrence(s)." -msgstr "Замінено %d випадок(-ів)." +msgid "%d replaced." +msgstr "%d замінено." #: editor/code_editor.cpp editor/editor_help.cpp msgid "%d match." @@ -3973,6 +3973,11 @@ msgid "Saving..." msgstr "Збереження..." #: editor/import_dock.cpp +#, fuzzy +msgid "%d Files" +msgstr " Файли" + +#: editor/import_dock.cpp msgid "Set as Default for '%s'" msgstr "Встановити як типове для '%s'" @@ -3981,10 +3986,6 @@ msgid "Clear Default for '%s'" msgstr "Очистити типове для '%s'" #: editor/import_dock.cpp -msgid " Files" -msgstr " Файли" - -#: editor/import_dock.cpp msgid "Import As:" msgstr "Імпортувати як:" @@ -5864,12 +5865,12 @@ msgid "Mesh is empty!" msgstr "Сітка порожня!" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Trimesh Body" -msgstr "Створіть увігнуте статичне тіло" +msgid "Couldn't create a Trimesh collision shape." +msgstr "Не вдалося створити форму зіткнення Trimesh." #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Convex Body" -msgstr "Створити опукле статичне тіло" +msgid "Create Static Trimesh Body" +msgstr "Створіть увігнуте статичне тіло" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "This doesn't work on scene root!" @@ -5880,12 +5881,28 @@ msgid "Create Trimesh Static Shape" msgstr "Створити трисіткову статичну форму" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Failed creating shapes!" -msgstr "Не вдалося створити форми!" +msgid "Can't create a single convex collision shape for the scene root." +msgstr "Не вдалося створити єдину опуклу форму зіткнення для кореня сцени." + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Couldn't create a single convex collision shape." +msgstr "Не вдалося створити єдину опуклу форму зіткнення." + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Single Convex Shape" +msgstr "Створити єдину опуклу форму" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Can't create multiple convex collision shapes for the scene root." +msgstr "Не вдалося створити декілька опуклих форм зіткнення для кореня сцени." #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Convex Shape(s)" -msgstr "Створити вигнуті форми" +msgid "Couldn't create any collision shapes." +msgstr "Не вдалося створити жодних форм зіткнення." + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Multiple Convex Shapes" +msgstr "Створити декілька опуклих форм" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Navigation Mesh" @@ -5936,18 +5953,68 @@ msgid "Create Trimesh Static Body" msgstr "Створити увігнуте статичне тіло" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a StaticBody and assigns a polygon-based collision shape to it " +"automatically.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" +"Створює StaticBody і автоматично пов'язує з ним засновану на багатокутниках " +"форму зіткнення.\n" +"Це найточніший (але найповільніший) варіант для виявлення зіткнення." + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Collision Sibling" msgstr "Створити увігнуту область зіткнення" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Convex Collision Sibling(s)" -msgstr "Створити опуклу області зіткнення" +msgid "" +"Creates a polygon-based collision shape.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" +"Створює засновану на багатокутниках форму зіткнення.\n" +"Цей найточніший (але найповільніший) варіант для виявлення зіткнень." + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Single Convex Collision Siblings" +msgstr "Створити єдині опуклі області зіткнення" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a single convex collision shape.\n" +"This is the fastest (but least accurate) option for collision detection." +msgstr "" +"Створює єдину опуклу форму зіткнення.\n" +"Цей найшвидший (але найменш точний) варіант для виявлення зіткнень." + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Multiple Convex Collision Siblings" +msgstr "Створити декілька опуклих областей зіткнення" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a polygon-based collision shape.\n" +"This is a performance middle-ground between the two above options." +msgstr "" +"Створює засновану на багатокутниках форму зіткнення.\n" +"Цей проміжний за швидкістю варіант між наведеними вище двома варіантами." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Outline Mesh..." msgstr "Створити контурну сітку ..." #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a static outline mesh. The outline mesh will have its normals " +"flipped automatically.\n" +"This can be used instead of the SpatialMaterial Grow property when using " +"that property isn't possible." +msgstr "" +"Створює статичну контурну сітку. Нормалі контурної сітки " +"віддзеркалюватимуться автоматично.\n" +"Цим можна скористатися замість властивості Grow SpatialMaterial, якщо " +"використання цієї властивості є неможливим." + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "View UV1" msgstr "Перегляд UV1" @@ -8366,7 +8433,7 @@ msgstr "Набір плиток" msgid "No VCS addons are available." msgstr "Немає доступних доданків систем керування версіями." -#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Error" msgstr "Помилка" @@ -9534,11 +9601,16 @@ msgid "Export With Debug" msgstr "Експортувати із діагностикою" #: editor/project_manager.cpp -msgid "The path does not exist." -msgstr "Шляху не існує." +msgid "The path specified doesn't exist." +msgstr "Вказаного шляху не існує." + +#: editor/project_manager.cpp +msgid "Error opening package file (it's not in ZIP format)." +msgstr "Помилка під час спроби відкрити файл пакунка (дані не у форматі ZIP)." #: editor/project_manager.cpp -msgid "Invalid '.zip' project file, does not contain a 'project.godot' file." +msgid "" +"Invalid \".zip\" project file; it doesn't contain a \"project.godot\" file." msgstr "Некоректний файл проєкту «.zip»: у ньому немає файла «project.godot»." #: editor/project_manager.cpp @@ -9546,12 +9618,12 @@ msgid "Please choose an empty folder." msgstr "Будь ласка, виберіть порожню теку." #: editor/project_manager.cpp -msgid "Please choose a 'project.godot' or '.zip' file." +msgid "Please choose a \"project.godot\" or \".zip\" file." msgstr "Будь ласка, виберіть файл «project.godot» або «.zip»." #: editor/project_manager.cpp -msgid "Directory already contains a Godot project." -msgstr "У каталозі вже міститься проєкт Godot." +msgid "This directory already contains a Godot project." +msgstr "У цьому каталозі вже міститься проєкт Godot." #: editor/project_manager.cpp msgid "New Game Project" @@ -10249,6 +10321,10 @@ msgid "Suffix" msgstr "Суфікс" #: editor/rename_dialog.cpp +msgid "Use Regular Expressions" +msgstr "Використовувати формальні вирази" + +#: editor/rename_dialog.cpp msgid "Advanced Options" msgstr "Додаткові параметри" @@ -10285,7 +10361,7 @@ msgstr "" "Порівняйте параметри лічильника." #: editor/rename_dialog.cpp -msgid "Per Level counter" +msgid "Per-level Counter" msgstr "Лічильник на рівень" #: editor/rename_dialog.cpp @@ -10319,10 +10395,6 @@ msgstr "" "Якщо цифр буде менше, значення доповнюватиметься початковими нулями." #: editor/rename_dialog.cpp -msgid "Regular Expressions" -msgstr "Формальні вирази" - -#: editor/rename_dialog.cpp msgid "Post-Process" msgstr "Пост-обробка" @@ -10331,11 +10403,11 @@ msgid "Keep" msgstr "Не змінювати" #: editor/rename_dialog.cpp -msgid "CamelCase to under_scored" +msgid "PascalCase to snake_case" msgstr "ГорбатийРегістр у під_креслювання" #: editor/rename_dialog.cpp -msgid "under_scored to CamelCase" +msgid "snake_case to PascalCase" msgstr "під_креслювання у ГорбатийРегістр" #: editor/rename_dialog.cpp @@ -10354,6 +10426,14 @@ msgstr "ВЕРХНІЙ РЕГІСТР" msgid "Reset" msgstr "Скинути" +#: editor/rename_dialog.cpp +msgid "Regular Expression Error" +msgstr "Помилка у формальному виразі" + +#: editor/rename_dialog.cpp +msgid "At character %s" +msgstr "На символі %s" + #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "Змінити батьківський вузол" @@ -10817,8 +10897,8 @@ msgid "Invalid inherited parent name or path." msgstr "Некоректна назва або шлях до успадкованого батьківського елемента." #: editor/script_create_dialog.cpp -msgid "Script is valid." -msgstr "Скрипт є коректним." +msgid "Script path/name is valid." +msgstr "Шлях до скрипту і назва скрипту є коректними." #: editor/script_create_dialog.cpp msgid "Allowed: a-z, A-Z, 0-9, _ and ." @@ -10909,6 +10989,10 @@ msgid "Copy Error" msgstr "Помилка копіювання" #: editor/script_editor_debugger.cpp +msgid "Video RAM" +msgstr "Відеопам'ять" + +#: editor/script_editor_debugger.cpp msgid "Skip Breakpoints" msgstr "Пропустити точки зупину" @@ -10957,10 +11041,6 @@ msgid "Total:" msgstr "Загалом:" #: editor/script_editor_debugger.cpp -msgid "Video Mem" -msgstr "Відеопам'ять" - -#: editor/script_editor_debugger.cpp msgid "Resource Path" msgstr "Шлях до ресурсу" @@ -12658,6 +12738,15 @@ msgstr "Змінні величини можна пов'язувати лише msgid "Constants cannot be modified." msgstr "Сталі не можна змінювати." +#~ msgid "Replaced %d occurrence(s)." +#~ msgstr "Замінено %d випадок(-ів)." + +#~ msgid "Create Static Convex Body" +#~ msgstr "Створити опукле статичне тіло" + +#~ msgid "Failed creating shapes!" +#~ msgstr "Не вдалося створити форми!" + #~ msgid "" #~ "There are currently no tutorials for this class, you can [color=$color]" #~ "[url=$url]contribute one[/url][/color] or [color=$color][url=" diff --git a/editor/translations/ur_PK.po b/editor/translations/ur_PK.po index 5cbc202847..00c647fba1 100644 --- a/editor/translations/ur_PK.po +++ b/editor/translations/ur_PK.po @@ -677,7 +677,7 @@ msgid "Line Number:" msgstr "" #: editor/code_editor.cpp -msgid "Replaced %d occurrence(s)." +msgid "%d replaced." msgstr "" #: editor/code_editor.cpp editor/editor_help.cpp @@ -3878,15 +3878,16 @@ msgid "Saving..." msgstr "" #: editor/import_dock.cpp -msgid "Set as Default for '%s'" -msgstr "" +#, fuzzy +msgid "%d Files" +msgstr "اثاثہ کی زپ فائل" #: editor/import_dock.cpp -msgid "Clear Default for '%s'" +msgid "Set as Default for '%s'" msgstr "" #: editor/import_dock.cpp -msgid " Files" +msgid "Clear Default for '%s'" msgstr "" #: editor/import_dock.cpp @@ -5765,11 +5766,12 @@ msgid "Mesh is empty!" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Trimesh Body" -msgstr "" +#, fuzzy +msgid "Couldn't create a Trimesh collision shape." +msgstr "سب سکریپشن بنائیں" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Convex Body" +msgid "Create Static Trimesh Body" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -5781,12 +5783,30 @@ msgid "Create Trimesh Static Shape" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Failed creating shapes!" +msgid "Can't create a single convex collision shape for the scene root." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Couldn't create a single convex collision shape." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp #, fuzzy -msgid "Create Convex Shape(s)" +msgid "Create Single Convex Shape" +msgstr "سب سکریپشن بنائیں" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Can't create multiple convex collision shapes for the scene root." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Couldn't create any collision shapes." +msgstr "سب سکریپشن بنائیں" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Create Multiple Convex Shapes" msgstr "سب سکریپشن بنائیں" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -5838,19 +5858,57 @@ msgid "Create Trimesh Static Body" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a StaticBody and assigns a polygon-based collision shape to it " +"automatically.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Collision Sibling" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a polygon-based collision shape.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp #, fuzzy -msgid "Create Convex Collision Sibling(s)" +msgid "Create Single Convex Collision Siblings" msgstr "سب سکریپشن بنائیں" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a single convex collision shape.\n" +"This is the fastest (but least accurate) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Create Multiple Convex Collision Siblings" +msgstr "سب سکریپشن بنائیں" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a polygon-based collision shape.\n" +"This is a performance middle-ground between the two above options." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Outline Mesh..." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a static outline mesh. The outline mesh will have its normals " +"flipped automatically.\n" +"This can be used instead of the SpatialMaterial Grow property when using " +"that property isn't possible." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "View UV1" msgstr "" @@ -8294,7 +8352,7 @@ msgstr "" msgid "No VCS addons are available." msgstr "" -#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Error" msgstr "" @@ -9399,11 +9457,16 @@ msgid "Export With Debug" msgstr "" #: editor/project_manager.cpp -msgid "The path does not exist." +msgid "The path specified doesn't exist." msgstr "" #: editor/project_manager.cpp -msgid "Invalid '.zip' project file, does not contain a 'project.godot' file." +msgid "Error opening package file (it's not in ZIP format)." +msgstr "" + +#: editor/project_manager.cpp +msgid "" +"Invalid \".zip\" project file; it doesn't contain a \"project.godot\" file." msgstr "" #: editor/project_manager.cpp @@ -9411,11 +9474,11 @@ msgid "Please choose an empty folder." msgstr "" #: editor/project_manager.cpp -msgid "Please choose a 'project.godot' or '.zip' file." +msgid "Please choose a \"project.godot\" or \".zip\" file." msgstr "" #: editor/project_manager.cpp -msgid "Directory already contains a Godot project." +msgid "This directory already contains a Godot project." msgstr "" #: editor/project_manager.cpp @@ -10071,6 +10134,10 @@ msgid "Suffix" msgstr "" #: editor/rename_dialog.cpp +msgid "Use Regular Expressions" +msgstr "" + +#: editor/rename_dialog.cpp msgid "Advanced Options" msgstr "" @@ -10105,7 +10172,7 @@ msgid "" msgstr "" #: editor/rename_dialog.cpp -msgid "Per Level counter" +msgid "Per-level Counter" msgstr "" #: editor/rename_dialog.cpp @@ -10135,10 +10202,6 @@ msgid "" msgstr "" #: editor/rename_dialog.cpp -msgid "Regular Expressions" -msgstr "" - -#: editor/rename_dialog.cpp msgid "Post-Process" msgstr "" @@ -10147,11 +10210,11 @@ msgid "Keep" msgstr "" #: editor/rename_dialog.cpp -msgid "CamelCase to under_scored" +msgid "PascalCase to snake_case" msgstr "" #: editor/rename_dialog.cpp -msgid "under_scored to CamelCase" +msgid "snake_case to PascalCase" msgstr "" #: editor/rename_dialog.cpp @@ -10170,6 +10233,14 @@ msgstr "" msgid "Reset" msgstr "" +#: editor/rename_dialog.cpp +msgid "Regular Expression Error" +msgstr "" + +#: editor/rename_dialog.cpp +msgid "At character %s" +msgstr "" + #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "" @@ -10622,7 +10693,7 @@ msgid "Invalid inherited parent name or path." msgstr "" #: editor/script_create_dialog.cpp -msgid "Script is valid." +msgid "Script path/name is valid." msgstr "" #: editor/script_create_dialog.cpp @@ -10720,6 +10791,10 @@ msgid "Copy Error" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Video RAM" +msgstr "" + +#: editor/script_editor_debugger.cpp #, fuzzy msgid "Skip Breakpoints" msgstr ".تمام کا انتخاب" @@ -10770,10 +10845,6 @@ msgid "Total:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Video Mem" -msgstr "" - -#: editor/script_editor_debugger.cpp msgid "Resource Path" msgstr "" diff --git a/editor/translations/vi.po b/editor/translations/vi.po index d6f5114a98..9c81e2b063 100644 --- a/editor/translations/vi.po +++ b/editor/translations/vi.po @@ -9,15 +9,15 @@ # Tung Le <tungkradle@gmail.com>, 2017. # 38569459 <xxx38569459@gmail.com>, 2018. # TyTYct Hihi <tytyct@gmail.com>, 2019. -# Steve Dang <itsnguu@outlook.com>, 2019. +# Steve Dang <itsnguu@outlook.com>, 2019, 2020. # Peter Anh <peteranh3105@gmail.com>, 2019. # Dũng Đinh <dqdthanhthanh@gmail.com>, 2019. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2019-10-04 03:15+0000\n" -"Last-Translator: Dũng Đinh <dqdthanhthanh@gmail.com>\n" +"PO-Revision-Date: 2020-02-02 08:51+0000\n" +"Last-Translator: Steve Dang <itsnguu@outlook.com>\n" "Language-Team: Vietnamese <https://hosted.weblate.org/projects/godot-engine/" "godot/vi/>\n" "Language: vi\n" @@ -25,7 +25,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 3.9-dev\n" +"X-Generator: Weblate 3.11-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -40,15 +40,15 @@ msgstr "" #: modules/mono/glue/gd_glue.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." -msgstr "Số byte không đủ để giải mã, hoặc cấu trúc không chính xác." +msgstr "Không đủ byte để giải mã, hoặc định dạng không hợp lệ." #: core/math/expression.cpp msgid "Invalid input %i (not passed) in expression" -msgstr "" +msgstr "Dữ liệu vào không hợp lệ %i (không được thông qua)" #: core/math/expression.cpp msgid "self can't be used because instance is null (not passed)" -msgstr "" +msgstr "self không thể sử dụng vì instance là null (không thông qua)" #: core/math/expression.cpp msgid "Invalid operands to operator %s, %s and %s." @@ -56,11 +56,11 @@ msgstr "Toán hạng không hợp lệ cho toán tử %s, %s và %s." #: core/math/expression.cpp msgid "Invalid index of type %s for base type %s" -msgstr "" +msgstr "Index không hợp lệ của loại %s cho loại cơ sở %s" #: core/math/expression.cpp msgid "Invalid named index '%s' for base type %s" -msgstr "" +msgstr "Tên index không hợp lệ '%s' cho loại cơ sở %s" #: core/math/expression.cpp msgid "Invalid arguments to construct '%s'" @@ -68,7 +68,7 @@ msgstr "Đối số không hợp lệ để dựng '%s'" #: core/math/expression.cpp msgid "On call to '%s':" -msgstr "" +msgstr "Khi cuộc gọi đến '%s':" #: core/ustring.cpp msgid "B" @@ -100,7 +100,7 @@ msgstr "" #: editor/animation_bezier_editor.cpp msgid "Free" -msgstr "Miễn phí" +msgstr "Tự do" #: editor/animation_bezier_editor.cpp msgid "Balanced" @@ -108,7 +108,7 @@ msgstr "Cân bằng" #: editor/animation_bezier_editor.cpp msgid "Mirror" -msgstr "" +msgstr "Phản chiếu" #: editor/animation_bezier_editor.cpp editor/editor_profiler.cpp msgid "Time:" @@ -128,7 +128,7 @@ msgstr "Nhân đôi các khoá đã chọn" #: editor/animation_bezier_editor.cpp msgid "Delete Selected Key(s)" -msgstr "Xoá Key(s) được chọn" +msgstr "Xoá các khoá được chọn" #: editor/animation_bezier_editor.cpp msgid "Add Bezier Point" @@ -256,39 +256,36 @@ msgid "Anim Clips:" msgstr "" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Change Track Path" -msgstr "Đổi giá trị Array" +msgstr "Thay đổi đường dẫn Track" #: editor/animation_track_editor.cpp msgid "Toggle this track on/off." -msgstr "" +msgstr "Bật tắt track này on/off." #: editor/animation_track_editor.cpp msgid "Update Mode (How this property is set)" -msgstr "" +msgstr "Cập nhật chế độ (Cách thuộc tính được thiết lập)" #: editor/animation_track_editor.cpp msgid "Interpolation Mode" -msgstr "" +msgstr "Nội suy" #: editor/animation_track_editor.cpp msgid "Loop Wrap Mode (Interpolate end with beginning on loop)" -msgstr "" +msgstr "Bọc vòng lặp (Nội suy kết thúc với việc bắt đầu vòng lặp)" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Remove this track." -msgstr "Bỏ track đang chọn." +msgstr "Bỏ track này." #: editor/animation_track_editor.cpp -#, fuzzy msgid "Time (s): " -msgstr "Bước (s):" +msgstr "Bước: " #: editor/animation_track_editor.cpp msgid "Toggle Track Enabled" -msgstr "" +msgstr "Bật tắt kích hoạt Track" #: editor/animation_track_editor.cpp msgid "Continuous" @@ -304,7 +301,7 @@ msgstr "Kích hoạt" #: editor/animation_track_editor.cpp msgid "Capture" -msgstr "" +msgstr "Chụp" #: editor/animation_track_editor.cpp msgid "Nearest" @@ -321,11 +318,11 @@ msgstr "Khối" #: editor/animation_track_editor.cpp msgid "Clamp Loop Interp" -msgstr "" +msgstr "Kẹp vòng nội suy" #: editor/animation_track_editor.cpp msgid "Wrap Loop Interp" -msgstr "" +msgstr "Bọc vòng lặp nội suy" #: editor/animation_track_editor.cpp #: editor/plugins/canvas_item_editor_plugin.cpp @@ -415,6 +412,10 @@ msgid "" "-AudioStreamPlayer2D\n" "-AudioStreamPlayer3D" msgstr "" +"Các bản âm thanh chỉ có thể trỏ đến các nút:\n" +"-AudioStreamPlayer\n" +"-AudioStreamPlayer2D\n" +"-AudioStreamPlayer3D" #: editor/animation_track_editor.cpp msgid "Animation tracks can only point to AnimationPlayer nodes." @@ -433,40 +434,36 @@ msgid "Invalid track for Bezier (no suitable sub-properties)" msgstr "" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Add Bezier Track" -msgstr "Thêm Track Animation" +msgstr "Thêm Bezier Track" #: editor/animation_track_editor.cpp msgid "Track path is invalid, so can't add a key." -msgstr "" +msgstr "Đường dẫn không hợp lệ, không thể thêm khoá." #: editor/animation_track_editor.cpp msgid "Track is not of type Spatial, can't insert key" -msgstr "" +msgstr "Track không phải loại Spatial, không thể thêm khoá" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Add Transform Track Key" -msgstr "Chèn Track & Key Anim" +msgstr "Thêm khoá Transform Track" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Add Track Key" -msgstr "Thêm Track Animation" +msgstr "Thêm khoá Track" #: editor/animation_track_editor.cpp msgid "Track path is invalid, so can't add a method key." -msgstr "" +msgstr "Đường dẫn Track không hợp lệ, không thể thêm khoá phương thức." #: editor/animation_track_editor.cpp -#, fuzzy msgid "Add Method Track Key" -msgstr "Chèn Track & Key Anim" +msgstr "Thêm khoá Method Track" #: editor/animation_track_editor.cpp msgid "Method not found in object: " -msgstr "" +msgstr "Không tìm thấy phương thức trong đối tượng: " #: editor/animation_track_editor.cpp msgid "Anim Move Keys" @@ -514,11 +511,11 @@ msgstr "Chọn một AnimationPlayer từ Scene Tree để chỉnh sửa animati #: editor/animation_track_editor.cpp msgid "Only show tracks from nodes selected in tree." -msgstr "" +msgstr "Chỉ hiển thị các track từ các nút đã chọn trong cây." #: editor/animation_track_editor.cpp msgid "Group tracks by node or display them as plain list." -msgstr "" +msgstr "Nhóm các track bởi nút hoặc hiển thị chúng dạng danh sách đơn giản." #: editor/animation_track_editor.cpp msgid "Snap:" @@ -694,8 +691,9 @@ msgid "Line Number:" msgstr "Dòng số:" #: editor/code_editor.cpp -msgid "Replaced %d occurrence(s)." -msgstr "Đã thay thế %d biến cố." +#, fuzzy +msgid "%d replaced." +msgstr "Thay thế ..." #: editor/code_editor.cpp editor/editor_help.cpp #, fuzzy @@ -3843,9 +3841,8 @@ msgid "Groups" msgstr "Nhóm (Groups)" #: editor/groups_editor.cpp -#, fuzzy msgid "Nodes Not in Group" -msgstr "Nút không trong Nhóm" +msgstr "Các nút không trong Nhóm" #: editor/groups_editor.cpp editor/scene_tree_dock.cpp #: editor/scene_tree_editor.cpp @@ -3947,6 +3944,11 @@ msgid "Saving..." msgstr "Đang lưu ..." #: editor/import_dock.cpp +#, fuzzy +msgid "%d Files" +msgstr " Tệp tin" + +#: editor/import_dock.cpp msgid "Set as Default for '%s'" msgstr "Gán Mặc định cho '%s'" @@ -3955,10 +3957,6 @@ msgid "Clear Default for '%s'" msgstr "Dọn Mặc định cho '%s'" #: editor/import_dock.cpp -msgid " Files" -msgstr " Tệp tin" - -#: editor/import_dock.cpp msgid "Import As:" msgstr "Nhập vào với:" @@ -4071,7 +4069,7 @@ msgstr "" #: editor/node_dock.cpp msgid "Select a single node to edit its signals and groups." -msgstr "" +msgstr "Chọn nút duy nhất để chỉnh sửa tính hiệu và nhóm của nó." #: editor/plugin_config_dialog.cpp msgid "Edit a Plugin" @@ -4178,7 +4176,7 @@ msgstr "Đổi Thời gian Chuyển Animation" #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_state_machine_editor.cpp msgid "This type of node can't be used. Only root nodes are allowed." -msgstr "" +msgstr "Loại nút này không thể sử dụng. Chỉ các nút gốc được phép." #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp @@ -4196,7 +4194,7 @@ msgstr "" #: editor/plugins/animation_blend_space_1d_editor.cpp msgid "Move BlendSpace1D Node Point" -msgstr "" +msgstr "Di chuyển điểm nút BlendSpace1D" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp @@ -4269,7 +4267,7 @@ msgstr "Xoá Variable" #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "BlendSpace2D does not belong to an AnimationTree node." -msgstr "" +msgstr "BlendSpace2D không thuộc nút AnimationTree." #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "No triangles exist, so no blending can take place." @@ -4308,11 +4306,11 @@ msgstr "Chỉnh sửa Lọc" #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "Output node can't be added to the blend tree." -msgstr "" +msgstr "Nút đầu ra không thể thêm vào cây Blend." #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "Add Node to BlendTree" -msgstr "" +msgstr "Thêm nút vào cây Blend" #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp @@ -4507,7 +4505,7 @@ msgstr "Vị trí hoạt ảnh (giây)." #: editor/plugins/animation_player_editor_plugin.cpp msgid "Scale animation playback globally for the node." -msgstr "" +msgstr "Quy mô trình phát hoạt ảnh toàn cầu cho các nút." #: editor/plugins/animation_player_editor_plugin.cpp msgid "Animation Tools" @@ -4653,7 +4651,7 @@ msgstr "" #: editor/plugins/animation_state_machine_editor.cpp msgid "Start and end nodes are needed for a sub-transition." -msgstr "" +msgstr "Các nút bắt đầu và kết thúc là cần thiết cho một sub-transition." #: editor/plugins/animation_state_machine_editor.cpp msgid "No playback resource set at path: %s." @@ -4708,9 +4706,8 @@ msgid "Transition: " msgstr "Chuyển tiếp: " #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Play Mode:" -msgstr "Nhập từ Node:" +msgstr "Chế độ chơi:" #: editor/plugins/animation_tree_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp @@ -4815,31 +4812,31 @@ msgstr "Nút Chạy một lần" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Mix Node" -msgstr "" +msgstr "Nút Mix" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Blend2 Node" -msgstr "" +msgstr "Nút Blend2" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Blend3 Node" -msgstr "" +msgstr "Nút Blend3" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Blend4 Node" -msgstr "" +msgstr "Nút Blend4" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "TimeScale Node" -msgstr "" +msgstr "Nút TimeScale" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "TimeSeek Node" -msgstr "" +msgstr "Nút TimeSeek" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Transition Node" -msgstr "" +msgstr "Nút Transition" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Import Animations..." @@ -4847,7 +4844,7 @@ msgstr "Nhập vào các hoạt ảnh ..." #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Edit Node Filters" -msgstr "Chỉnh sửa lọc Node" +msgstr "Chỉnh bộ lọc Node" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Filters..." @@ -5145,9 +5142,8 @@ msgid "Move Horizontal Guide" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Create Horizontal Guide" -msgstr "Tạo Root Node:" +msgstr "Tạo đường Guide ngang" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy @@ -5468,19 +5464,19 @@ msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap to Node Anchor" -msgstr "" +msgstr "Snap đến neo của Nút" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap to Node Sides" -msgstr "" +msgstr "Snap sang hai bên nút" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap to Node Center" -msgstr "" +msgstr "Snap đến chính giữa nút" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap to Other Nodes" -msgstr "" +msgstr "Snap đế các nút khác" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap to Guides" @@ -5516,7 +5512,7 @@ msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Make Custom Bone(s) from Node(s)" -msgstr "" +msgstr "Tạo xương tuỳ chọn từ các nút" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Clear Custom Bones" @@ -5637,7 +5633,7 @@ msgstr "Đang thêm %s..." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Cannot instantiate multiple nodes without root." -msgstr "" +msgstr "Không thể khởi tạo nhiều nút mà không có nút gốc." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp @@ -5658,6 +5654,8 @@ msgid "" "Drag & drop + Shift : Add node as sibling\n" "Drag & drop + Alt : Change node type" msgstr "" +"Kéo & thả + Shift: Thêm nút cùng cấp\n" +"Kéo & thả + Alt: Đổi loại nút" #: editor/plugins/collision_polygon_editor_plugin.cpp msgid "Create Polygon3D" @@ -5747,7 +5745,7 @@ msgstr "" #: editor/plugins/cpu_particles_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp msgid "Create Emission Points From Node" -msgstr "" +msgstr "Tạo điểm phát xạ từ nút" #: editor/plugins/curve_editor_plugin.cpp msgid "Flat 0" @@ -5849,11 +5847,11 @@ msgid "Mesh is empty!" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Trimesh Body" +msgid "Couldn't create a Trimesh collision shape." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Convex Body" +msgid "Create Static Trimesh Body" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -5865,13 +5863,31 @@ msgid "Create Trimesh Static Shape" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Failed creating shapes!" +msgid "Can't create a single convex collision shape for the scene root." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Couldn't create a single convex collision shape." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Create Single Convex Shape" +msgstr "Tạo hình dạng lồi" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Can't create multiple convex collision shapes for the scene root." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp #, fuzzy -msgid "Create Convex Shape(s)" -msgstr "Tạo nodes mới." +msgid "Couldn't create any collision shapes." +msgstr "Không thể tạo folder." + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Create Multiple Convex Shapes" +msgstr "Tạo hình dạng lồi" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Navigation Mesh" @@ -5922,19 +5938,57 @@ msgid "Create Trimesh Static Body" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a StaticBody and assigns a polygon-based collision shape to it " +"automatically.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Collision Sibling" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a polygon-based collision shape.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp #, fuzzy -msgid "Create Convex Collision Sibling(s)" +msgid "Create Single Convex Collision Siblings" msgstr "Tạo" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a single convex collision shape.\n" +"This is the fastest (but least accurate) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Create Multiple Convex Collision Siblings" +msgstr "Tạo" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a polygon-based collision shape.\n" +"This is a performance middle-ground between the two above options." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Outline Mesh..." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a static outline mesh. The outline mesh will have its normals " +"flipped automatically.\n" +"This can be used instead of the SpatialMaterial Grow property when using " +"that property isn't possible." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "View UV1" msgstr "" @@ -5993,6 +6047,7 @@ msgstr "" #: editor/plugins/multimesh_editor_plugin.cpp msgid "No mesh source specified (and no MultiMesh set in node)." msgstr "" +"Không có nguồn lưới được chỉ định (và không có MultiMesh đặt trong nút)." #: editor/plugins/multimesh_editor_plugin.cpp msgid "No mesh source specified (and MultiMesh contains no Mesh)." @@ -6188,9 +6243,8 @@ msgid "Add Point to Curve" msgstr "" #: editor/plugins/path_2d_editor_plugin.cpp -#, fuzzy msgid "Split Curve" -msgstr "Sửa Node Curve" +msgstr "Chia đường Curve" #: editor/plugins/path_2d_editor_plugin.cpp msgid "Move Point in Curve" @@ -6307,7 +6361,7 @@ msgstr "Di chuyển đến..." #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "" "The skeleton property of the Polygon2D does not point to a Skeleton2D node" -msgstr "" +msgstr "Thuộc tính xương của nút Polygon2D không trỏ đến nút Skeleton2D" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Sync Bones" @@ -6849,9 +6903,8 @@ msgid "Clear Recent Scripts" msgstr "Dọn các cảnh gần đây" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Connections to method:" -msgstr "Kết nối đến Node:" +msgstr "Kết nối đến phương thức:" #: editor/plugins/script_text_editor.cpp editor/script_editor_debugger.cpp msgid "Source" @@ -6862,10 +6915,10 @@ msgid "Target" msgstr "" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "" "Missing connected method '%s' for signal '%s' from node '%s' to node '%s'." -msgstr "Không có kết nối đến input '%s' của node '%s'." +msgstr "" +"Không có phương thức kết nối '%s' của tín hiệu '%s' từ nút '%s' đến nút '%s'." #: editor/plugins/script_text_editor.cpp #, fuzzy @@ -6888,7 +6941,7 @@ msgstr "" #: editor/plugins/script_text_editor.cpp #: modules/visual_script/visual_script_editor.cpp msgid "Can't drop nodes because script '%s' is not used in this scene." -msgstr "" +msgstr "Không thể bỏ nút vì script '%s' không sử dụng trong cảnh này." #: editor/plugins/script_text_editor.cpp msgid "Lookup Symbol" @@ -7069,7 +7122,7 @@ msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "This skeleton has no bones, create some children Bone2D nodes." -msgstr "" +msgstr "Bộ xương không có xương, tạo một số nút Bone2D." #: editor/plugins/skeleton_2d_editor_plugin.cpp #, fuzzy @@ -7247,7 +7300,7 @@ msgstr "" #: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "This operation requires a single selected node." -msgstr "" +msgstr "Hoạt động yêu cầu chọn một nút duy nhất." #: editor/plugins/spatial_editor_plugin.cpp msgid "Lock View Rotation" @@ -7354,7 +7407,7 @@ msgstr "" #: editor/plugins/spatial_editor_plugin.cpp msgid "Snap Nodes To Floor" -msgstr "" +msgstr "Snap các nút đến Floor" #: editor/plugins/spatial_editor_plugin.cpp msgid "Couldn't find a solid floor to snap the selection to." @@ -8127,18 +8180,16 @@ msgid "Occlusion" msgstr "Tạo" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Navigation" -msgstr "Animation Node" +msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Bitmask" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Priority" -msgstr "Nhập từ Node:" +msgstr "Ưu tiên" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Z Index" @@ -8159,18 +8210,16 @@ msgid "Occlusion Mode" msgstr "Tạo" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Navigation Mode" -msgstr "Animation Node" +msgstr "Chế độ Navigation" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Bitmask Mode" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Priority Mode" -msgstr "Nhập từ Node:" +msgstr "Chế độ Ưu tiên" #: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy @@ -8195,9 +8244,8 @@ msgid "Erase bitmask." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Create a new rectangle." -msgstr "Tạo nodes mới." +msgstr "Tạo hình chữ nhật mới." #: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy @@ -8406,7 +8454,7 @@ msgstr "Xuất Tile Set" msgid "No VCS addons are available." msgstr "" -#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Error" msgstr "" @@ -8440,9 +8488,8 @@ msgid "Staging area" msgstr "" #: editor/plugins/version_control_editor_plugin.cpp -#, fuzzy msgid "Detect new changes" -msgstr "Tạo nodes mới." +msgstr "Phát hiện thay đổi mới" #: editor/plugins/version_control_editor_plugin.cpp #, fuzzy @@ -8574,7 +8621,7 @@ msgstr "Phiên bản hiện tại:" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Resize VisualShader node" -msgstr "" +msgstr "Thay đổi kích thước nút VisualShader" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Set Uniform Name" @@ -8586,22 +8633,20 @@ msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Add Node to Visual Shader" -msgstr "" +msgstr "Thêm nút vào Visual Shader" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Duplicate Nodes" -msgstr "Nhân đôi Node(s)" +msgstr "Nhân bản các nút" #: editor/plugins/visual_shader_editor_plugin.cpp #: modules/visual_script/visual_script_editor.cpp msgid "Paste Nodes" -msgstr "" +msgstr "Dán các nút" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Delete Nodes" -msgstr "Xóa Node(s)" +msgstr "Xoá các nút" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Visual Shader Input Type Changed" @@ -8620,14 +8665,12 @@ msgid "Light" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Show resulted shader code." -msgstr "Tạo Root Node:" +msgstr "Hiện kết quả mã shader." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Create Shader Node" -msgstr "Tạo Root Node:" +msgstr "Tạo nút Shader" #: editor/plugins/visual_shader_editor_plugin.cpp #, fuzzy @@ -9467,9 +9510,8 @@ msgid "Script" msgstr "Tạo Script" #: editor/project_export.cpp -#, fuzzy msgid "Script Export Mode:" -msgstr "Nhập từ Node:" +msgstr "Chế độ xuất Script:" #: editor/project_export.cpp msgid "Text" @@ -9500,9 +9542,8 @@ msgid "Export Project" msgstr "Xuất dự án ra" #: editor/project_export.cpp -#, fuzzy msgid "Export mode?" -msgstr "Nhập từ Node:" +msgstr "Chế độ xuất?" #: editor/project_export.cpp #, fuzzy @@ -9531,11 +9572,18 @@ msgid "Export With Debug" msgstr "" #: editor/project_manager.cpp -msgid "The path does not exist." -msgstr "" +#, fuzzy +msgid "The path specified doesn't exist." +msgstr "Tệp không tồn tại." #: editor/project_manager.cpp -msgid "Invalid '.zip' project file, does not contain a 'project.godot' file." +#, fuzzy +msgid "Error opening package file (it's not in ZIP format)." +msgstr "Lỗi không thể mở gói, không phải dạng nén." + +#: editor/project_manager.cpp +msgid "" +"Invalid \".zip\" project file; it doesn't contain a \"project.godot\" file." msgstr "" #: editor/project_manager.cpp @@ -9543,11 +9591,11 @@ msgid "Please choose an empty folder." msgstr "" #: editor/project_manager.cpp -msgid "Please choose a 'project.godot' or '.zip' file." +msgid "Please choose a \"project.godot\" or \".zip\" file." msgstr "" #: editor/project_manager.cpp -msgid "Directory already contains a Godot project." +msgid "This directory already contains a Godot project." msgstr "" #: editor/project_manager.cpp @@ -10166,7 +10214,7 @@ msgstr "" #: editor/property_editor.cpp msgid "Select Node" -msgstr "" +msgstr "Chọn nút" #: editor/property_editor.cpp msgid "Error loading file: Not a resource!" @@ -10174,7 +10222,7 @@ msgstr "" #: editor/property_editor.cpp msgid "Pick a Node" -msgstr "" +msgstr "Lấy một nút" #: editor/property_editor.cpp msgid "Bit %d, val %d." @@ -10206,6 +10254,11 @@ msgid "Suffix" msgstr "" #: editor/rename_dialog.cpp +#, fuzzy +msgid "Use Regular Expressions" +msgstr "Phiên bản hiện tại:" + +#: editor/rename_dialog.cpp msgid "Advanced Options" msgstr "" @@ -10214,26 +10267,24 @@ msgid "Substitute" msgstr "" #: editor/rename_dialog.cpp -#, fuzzy msgid "Node name" -msgstr "Đổi tên" +msgstr "Tên nút" #: editor/rename_dialog.cpp msgid "Node's parent name, if available" -msgstr "" +msgstr "Tên cha mẹ của nút, nếu có sẵn" #: editor/rename_dialog.cpp msgid "Node type" -msgstr "" +msgstr "Loại nút" #: editor/rename_dialog.cpp msgid "Current scene name" msgstr "" #: editor/rename_dialog.cpp -#, fuzzy msgid "Root node name" -msgstr "Đổi tên" +msgstr "Tên nút gốc" #: editor/rename_dialog.cpp msgid "" @@ -10242,12 +10293,12 @@ msgid "" msgstr "" #: editor/rename_dialog.cpp -msgid "Per Level counter" +msgid "Per-level Counter" msgstr "" #: editor/rename_dialog.cpp msgid "If set the counter restarts for each group of child nodes" -msgstr "" +msgstr "Nếu đặt bộ đếm khởi động lại cho từng nhóm nút con" #: editor/rename_dialog.cpp msgid "Initial value for the counter" @@ -10260,7 +10311,7 @@ msgstr "Bước (s):" #: editor/rename_dialog.cpp msgid "Amount by which counter is incremented for each node" -msgstr "" +msgstr "Giá trị mà bộ đếm tăng lên cho mỗi nút" #: editor/rename_dialog.cpp msgid "Padding" @@ -10273,10 +10324,6 @@ msgid "" msgstr "" #: editor/rename_dialog.cpp -msgid "Regular Expressions" -msgstr "" - -#: editor/rename_dialog.cpp msgid "Post-Process" msgstr "" @@ -10285,11 +10332,11 @@ msgid "Keep" msgstr "" #: editor/rename_dialog.cpp -msgid "CamelCase to under_scored" +msgid "PascalCase to snake_case" msgstr "" #: editor/rename_dialog.cpp -msgid "under_scored to CamelCase" +msgid "snake_case to PascalCase" msgstr "" #: editor/rename_dialog.cpp @@ -10309,9 +10356,18 @@ msgstr "" msgid "Reset" msgstr "Đặt lại phóng" +#: editor/rename_dialog.cpp +msgid "Regular Expression Error" +msgstr "" + +#: editor/rename_dialog.cpp +#, fuzzy +msgid "At character %s" +msgstr "Ký tự hợp lệ:" + #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" -msgstr "" +msgstr "Đổi cha mẹ của nút" #: editor/reparent_dialog.cpp msgid "Reparent Location (Select new Parent):" @@ -10358,6 +10414,8 @@ msgid "" "Cannot instance the scene '%s' because the current scene exists within one " "of its nodes." msgstr "" +"Không thể làm cảnh '%s' vì trong cảnh hiện tại tồn tại trong một các nút của " +"nó." #: editor/scene_tree_dock.cpp msgid "Instance Scene(s)" @@ -10381,23 +10439,25 @@ msgstr "" #: editor/scene_tree_dock.cpp msgid "Move Node In Parent" -msgstr "" +msgstr "Chuyển nút trong cha mẹ" #: editor/scene_tree_dock.cpp msgid "Move Nodes In Parent" -msgstr "" +msgstr "Di chuyển các nút trong cha mẹ" #: editor/scene_tree_dock.cpp msgid "Duplicate Node(s)" -msgstr "Nhân đôi Node(s)" +msgstr "Nhân đôi các nút" #: editor/scene_tree_dock.cpp msgid "Can't reparent nodes in inherited scenes, order of nodes can't change." msgstr "" +"Không thể đổi cha mẹ các nút trong cảnh kế thừa, thứ tự các nút không thể " +"thay đổi." #: editor/scene_tree_dock.cpp msgid "Node must belong to the edited scene to become root." -msgstr "" +msgstr "Nút phải thuộc cảnh đã chỉnh sửa để trở thành gốc." #: editor/scene_tree_dock.cpp msgid "Instantiated scenes can't become root" @@ -10405,29 +10465,27 @@ msgstr "" #: editor/scene_tree_dock.cpp msgid "Make node as Root" -msgstr "" +msgstr "Gán nút là nút Gốc" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Delete %d nodes?" -msgstr "Xóa Node(s)" +msgstr "Xoá %d nút?" #: editor/scene_tree_dock.cpp msgid "Delete the root node \"%s\"?" -msgstr "" +msgstr "Xoá nút gốc \"%s\"?" #: editor/scene_tree_dock.cpp msgid "Delete node \"%s\" and its children?" -msgstr "" +msgstr "Xoá nút \"%s\" và các nút con của nó?" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Delete node \"%s\"?" -msgstr "Xóa Node(s)" +msgstr "Xoá nút \"%s\"?" #: editor/scene_tree_dock.cpp msgid "Can not perform with the root node." -msgstr "" +msgstr "Không thể thực hiện với nút gốc." #: editor/scene_tree_dock.cpp msgid "This operation can't be done on instanced scenes." @@ -10442,12 +10500,15 @@ msgid "" "Disabling \"editable_instance\" will cause all properties of the node to be " "reverted to their default." msgstr "" +"Vô hiệu \"editable_instance\" sẽ khiến tất cả thuộc tính nút về lại mặc định." #: editor/scene_tree_dock.cpp msgid "" "Enabling \"Load As Placeholder\" will disable \"Editable Children\" and " "cause all properties of the node to be reverted to their default." msgstr "" +"Kích hoạt \"Load As Placeholder\" sẽ vô hiệu hoá \"Editable Children\" và " +"khiến tất cả thuộc tính của nút về lại mặc định." #: editor/scene_tree_dock.cpp msgid "Make Local" @@ -10460,7 +10521,7 @@ msgstr "Tạo Scene Mới" #: editor/scene_tree_dock.cpp msgid "Create Root Node:" -msgstr "Tạo Root Node:" +msgstr "Tạo Nút Gốc:" #: editor/scene_tree_dock.cpp msgid "2D Scene" @@ -10475,17 +10536,16 @@ msgid "User Interface" msgstr "Giao diện người dùng" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Other Node" -msgstr "Xóa Node(s)" +msgstr "Nút khác" #: editor/scene_tree_dock.cpp msgid "Can't operate on nodes from a foreign scene!" -msgstr "" +msgstr "Không thể hoạt động trên các nút từ ngoại cảnh!" #: editor/scene_tree_dock.cpp msgid "Can't operate on nodes the current scene inherits from!" -msgstr "" +msgstr "Không thể hoạt động các nút mà cảnh hiện tại kế thừa từ nó!" #: editor/scene_tree_dock.cpp msgid "Attach Script" @@ -10493,11 +10553,11 @@ msgstr "Đính kèm Script" #: editor/scene_tree_dock.cpp msgid "Remove Node(s)" -msgstr "Xóa Node(s)" +msgstr "Xóa các nút" #: editor/scene_tree_dock.cpp msgid "Change type of node(s)" -msgstr "" +msgstr "Đổi loại của các nút" #: editor/scene_tree_dock.cpp msgid "" @@ -10535,7 +10595,7 @@ msgstr "" #: editor/scene_tree_dock.cpp msgid "Add Child Node" -msgstr "" +msgstr "Thêm nút con" #: editor/scene_tree_dock.cpp #, fuzzy @@ -10547,9 +10607,8 @@ msgid "Change Type" msgstr "" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Reparent to New Node" -msgstr "Tạo các nút mới." +msgstr "Reparent đến nút mới" #: editor/scene_tree_dock.cpp msgid "Make Scene Root" @@ -10565,30 +10624,30 @@ msgstr "" #: editor/scene_tree_dock.cpp editor/script_editor_debugger.cpp msgid "Copy Node Path" -msgstr "" +msgstr "Sao chép đường dẫn nút" #: editor/scene_tree_dock.cpp msgid "Delete (No Confirm)" msgstr "" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Add/Create a New Node." -msgstr "Tạo các nút mới." +msgstr "Thêm/Tạo một nút mới." #: editor/scene_tree_dock.cpp msgid "" "Instance a scene file as a Node. Creates an inherited scene if no root node " "exists." msgstr "" +"Tệp tin cảnh giống như một nút. Tạo một cảnh kế thừa nếu nó không có nút gốc." #: editor/scene_tree_dock.cpp msgid "Attach a new or existing script for the selected node." -msgstr "" +msgstr "Đính kèm một tệp lệnh cho nút đã chọn." #: editor/scene_tree_dock.cpp msgid "Clear a script for the selected node." -msgstr "" +msgstr "Xoá tệp lệnh khỏi nút đã chọn." #: editor/scene_tree_dock.cpp msgid "Remote" @@ -10607,9 +10666,8 @@ msgid "Toggle Visible" msgstr "" #: editor/scene_tree_editor.cpp -#, fuzzy msgid "Unlock Node" -msgstr "Di chuyển Node(s)" +msgstr "Mở khoá nút" #: editor/scene_tree_editor.cpp #, fuzzy @@ -10623,25 +10681,31 @@ msgstr "Kết nối bị lỗi" #: editor/scene_tree_editor.cpp msgid "Node configuration warning:" -msgstr "" +msgstr "Cảnh báo cấu hình nút:" #: editor/scene_tree_editor.cpp msgid "" "Node has %s connection(s) and %s group(s).\n" "Click to show signals dock." msgstr "" +"Nút có %s kết nối và %s nhóm.\n" +"Nhấp để hiện khung tín hiệu." #: editor/scene_tree_editor.cpp msgid "" "Node has %s connection(s).\n" "Click to show signals dock." msgstr "" +"Nút có %s kết nối.\n" +"Nhấp để hiện khung tín hiệu." #: editor/scene_tree_editor.cpp msgid "" "Node is in %s group(s).\n" "Click to show groups dock." msgstr "" +"Nút có trong %s nhóm.\n" +"Nhấp để hiện khung nhóm." #: editor/scene_tree_editor.cpp #, fuzzy @@ -10653,6 +10717,8 @@ msgid "" "Node is locked.\n" "Click to unlock it." msgstr "" +"Nút hiện khoá.\n" +"Nhấp để mở khoá nó." #: editor/scene_tree_editor.cpp msgid "" @@ -10672,23 +10738,23 @@ msgstr "" #: editor/scene_tree_editor.cpp msgid "Invalid node name, the following characters are not allowed:" -msgstr "" +msgstr "Tên nút không hợp lệ, các ký tự sau bị cấm:" #: editor/scene_tree_editor.cpp msgid "Rename Node" -msgstr "" +msgstr "Đổi tên nút" #: editor/scene_tree_editor.cpp msgid "Scene Tree (Nodes):" -msgstr "" +msgstr "Cây (nút):" #: editor/scene_tree_editor.cpp msgid "Node Configuration Warning!" -msgstr "" +msgstr "Cảnh báo cấu hình nút!" #: editor/scene_tree_editor.cpp msgid "Select a Node" -msgstr "" +msgstr "Chọn một Nút" #: editor/script_create_dialog.cpp msgid "Path is empty." @@ -10699,9 +10765,8 @@ msgid "Filename is empty." msgstr "" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Path is not local." -msgstr "Path không chỉ đến Node!" +msgstr "Path không là cục bộ." #: editor/script_create_dialog.cpp #, fuzzy @@ -10767,7 +10832,7 @@ msgstr "" #: editor/script_create_dialog.cpp #, fuzzy -msgid "Script is valid." +msgid "Script path/name is valid." msgstr "Animation tree khả dụng." #: editor/script_create_dialog.cpp @@ -10779,9 +10844,8 @@ msgid "Built-in script (into scene file)." msgstr "" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Will create a new script file." -msgstr "Tạo nodes mới." +msgstr "Sẽ tạo một tệp lệnh mới." #: editor/script_create_dialog.cpp msgid "Will load an existing script file." @@ -10809,7 +10873,7 @@ msgstr "Tạo Script" #: editor/script_create_dialog.cpp msgid "Attach Node Script" -msgstr "" +msgstr "Đính kèm lệnh cho nút" #: editor/script_editor_debugger.cpp msgid "Remote " @@ -10871,6 +10935,10 @@ msgid "Copy Error" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Video RAM" +msgstr "" + +#: editor/script_editor_debugger.cpp #, fuzzy msgid "Skip Breakpoints" msgstr "Tạo các điểm." @@ -10921,10 +10989,6 @@ msgid "Total:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Video Mem" -msgstr "" - -#: editor/script_editor_debugger.cpp msgid "Resource Path" msgstr "" @@ -11361,26 +11425,31 @@ msgid "" "A node yielded without working memory, please read the docs on how to yield " "properly!" msgstr "" +"Một nút yielded không có bộ nhớ làm việc, đọc lại tài liệu vể cách yield!" #: modules/visual_script/visual_script.cpp msgid "" "Node yielded, but did not return a function state in the first working " "memory." msgstr "" +"Nút đã yield, nhưng không trả về trạng thái chức năng trong bộ nhớ làm việc " +"đầu tiên." #: modules/visual_script/visual_script.cpp msgid "" "Return value must be assigned to first element of node working memory! Fix " "your node please." msgstr "" +"Giá trị trả về phải được gán cho phần tử đầu tiên của bộ nhớ làm việc của " +"nút! Sửa lại nút của bạn." #: modules/visual_script/visual_script.cpp msgid "Node returned an invalid sequence output: " -msgstr "" +msgstr "Nút trả về đầu ra là chuỗi không hợp lệ: " #: modules/visual_script/visual_script.cpp msgid "Found sequence bit but not the node in the stack, report bug!" -msgstr "" +msgstr "Tìm ra chuỗi bit nhưng không phải nút trong ngăn xếp, báo cáo lỗi!" #: modules/visual_script/visual_script.cpp msgid "Stack overflow with stack depth: " @@ -11421,18 +11490,16 @@ msgid "Override an existing built-in function." msgstr "" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Create a new function." -msgstr "Tạo nodes mới." +msgstr "Tạo một hàm mới." #: modules/visual_script/visual_script_editor.cpp msgid "Variables:" msgstr "" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Create a new variable." -msgstr "Tạo nodes mới." +msgstr "Tạo một biến mới." #: modules/visual_script/visual_script_editor.cpp msgid "Signals:" @@ -11496,11 +11563,11 @@ msgstr "" #: modules/visual_script/visual_script_editor.cpp msgid "Remove VisualScript Nodes" -msgstr "" +msgstr "Gỡ bỏ các nút VisualScript" #: modules/visual_script/visual_script_editor.cpp msgid "Duplicate VisualScript Nodes" -msgstr "" +msgstr "Nhân bản các nút VisualScript" #: modules/visual_script/visual_script_editor.cpp msgid "Hold %s to drop a Getter. Hold Shift to drop a generic signature." @@ -11512,11 +11579,11 @@ msgstr "" #: modules/visual_script/visual_script_editor.cpp msgid "Hold %s to drop a simple reference to the node." -msgstr "" +msgstr "Giữ %s và thả để tham chiếu đơn giản đế nút." #: modules/visual_script/visual_script_editor.cpp msgid "Hold Ctrl to drop a simple reference to the node." -msgstr "" +msgstr "Giữ Ctrl và thả để tham chiếu đơn giản đến nút." #: modules/visual_script/visual_script_editor.cpp msgid "Hold %s to drop a Variable Setter." @@ -11528,11 +11595,11 @@ msgstr "" #: modules/visual_script/visual_script_editor.cpp msgid "Add Preload Node" -msgstr "" +msgstr "Thêm nút Preload" #: modules/visual_script/visual_script_editor.cpp msgid "Add Node(s) From Tree" -msgstr "" +msgstr "Thêm các nút từ cây" #: modules/visual_script/visual_script_editor.cpp msgid "" @@ -11554,30 +11621,27 @@ msgstr "" #: modules/visual_script/visual_script_editor.cpp msgid "Move Node(s)" -msgstr "Di chuyển Node(s)" +msgstr "Di chuyển các nút" #: modules/visual_script/visual_script_editor.cpp msgid "Remove VisualScript Node" -msgstr "" +msgstr "Gỡ bỏ nút VisualScript" #: modules/visual_script/visual_script_editor.cpp msgid "Connect Nodes" -msgstr "" +msgstr "Kết nối các nút" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Disconnect Nodes" -msgstr "Đứt kết nối" +msgstr "Ngắt kết nối các nút" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Connect Node Data" -msgstr "Kết nối đến Node:" +msgstr "Kết nối dữ liệu nút" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Connect Node Sequence" -msgstr "Kết nối đến Node:" +msgstr "Kết nối trình tự nút" #: modules/visual_script/visual_script_editor.cpp msgid "Script already has function '%s'" @@ -11593,7 +11657,7 @@ msgstr "" #: modules/visual_script/visual_script_editor.cpp msgid "Can't copy the function node." -msgstr "" +msgstr "Không thể sao chép nút chức năng." #: modules/visual_script/visual_script_editor.cpp msgid "Clipboard is empty!" @@ -11601,19 +11665,19 @@ msgstr "" #: modules/visual_script/visual_script_editor.cpp msgid "Paste VisualScript Nodes" -msgstr "" +msgstr "Dán các nút VisualScript" #: modules/visual_script/visual_script_editor.cpp msgid "Can't create function with a function node." -msgstr "" +msgstr "Không thể tạo hàm với một nút chức năng." #: modules/visual_script/visual_script_editor.cpp msgid "Can't create function of nodes from nodes of multiple functions." -msgstr "" +msgstr "Không thể tạo hàm của các nút từ các nút của nhiều chức năng." #: modules/visual_script/visual_script_editor.cpp msgid "Select at least one node with sequence port." -msgstr "" +msgstr "Chọn ít nhất một nút cho cổng trình tự." #: modules/visual_script/visual_script_editor.cpp msgid "Try to only have one sequence input in selection." @@ -11658,9 +11722,8 @@ msgid "Change Base Type:" msgstr "Đổi %s Loại" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Add Nodes..." -msgstr "Thêm Nút ..." +msgstr "Thêm các nút..." #: modules/visual_script/visual_script_editor.cpp #, fuzzy @@ -11686,11 +11749,11 @@ msgstr "Tìm loại Node" #: modules/visual_script/visual_script_editor.cpp msgid "Copy Nodes" -msgstr "" +msgstr "Sao chép các nút" #: modules/visual_script/visual_script_editor.cpp msgid "Cut Nodes" -msgstr "" +msgstr "Cắt các nút" #: modules/visual_script/visual_script_editor.cpp #, fuzzy @@ -11724,7 +11787,7 @@ msgstr "" #: modules/visual_script/visual_script_func_nodes.cpp msgid "Base object is not a Node!" -msgstr "" +msgstr "Đối tượng cơ sở không phải một nút!" #: modules/visual_script/visual_script_func_nodes.cpp msgid "Path does not lead Node!" @@ -12482,6 +12545,9 @@ msgstr "" msgid "Constants cannot be modified." msgstr "Không thể chỉnh sửa hằng số." +#~ msgid "Replaced %d occurrence(s)." +#~ msgstr "Đã thay thế %d biến cố." + #, fuzzy #~ msgid "Brief Description" #~ msgstr "Mô tả ngắn gọn:" diff --git a/editor/translations/zh_CN.po b/editor/translations/zh_CN.po index 67f2738f86..e984a05e3a 100644 --- a/editor/translations/zh_CN.po +++ b/editor/translations/zh_CN.po @@ -59,11 +59,12 @@ # king <wangding1992@126.com>, 2019. # silentbird <silentbird520@outlook.com>, 2019. # Haoyu Qiu <timothyqiu32@gmail.com>, 2019, 2020. +# Revan Ji <jiruifancr@gmail.com>, 2020. msgid "" msgstr "" "Project-Id-Version: Chinese (Simplified) (Godot Engine)\n" "POT-Creation-Date: 2018-01-20 12:15+0200\n" -"PO-Revision-Date: 2020-01-27 07:10+0000\n" +"PO-Revision-Date: 2020-02-16 15:21+0000\n" "Last-Translator: Haoyu Qiu <timothyqiu32@gmail.com>\n" "Language-Team: Chinese (Simplified) <https://hosted.weblate.org/projects/" "godot-engine/godot/zh_Hans/>\n" @@ -354,7 +355,7 @@ msgstr "线性" #: editor/animation_track_editor.cpp msgid "Cubic" -msgstr "立方体" +msgstr "三次方" #: editor/animation_track_editor.cpp msgid "Clamp Loop Interp" @@ -732,8 +733,8 @@ msgid "Line Number:" msgstr "行号:" #: editor/code_editor.cpp -msgid "Replaced %d occurrence(s)." -msgstr "替换了%d项。" +msgid "%d replaced." +msgstr "已替换%d处。" #: editor/code_editor.cpp editor/editor_help.cpp msgid "%d match." @@ -1801,7 +1802,7 @@ msgstr "在文件管理器中显示" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "New Folder..." -msgstr "新建文件夹 ..." +msgstr "新建文件夹..." #: editor/editor_file_dialog.cpp #: editor/plugins/version_control_editor_plugin.cpp @@ -1814,7 +1815,7 @@ msgstr "所有可用类型" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "All Files (*)" -msgstr "所有文件(*)" +msgstr "所有文件(*)" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Open a File" @@ -2334,8 +2335,8 @@ msgid "" "Please read the documentation relevant to debugging to better understand " "this workflow." msgstr "" -"这是一个远程对象,因此不会保留对其的更改。 请阅读与调试相关的文档,以更好地了" -"解此工作流程。" +"这是远程对象,因此不会保留对其的更改。\n" +"请阅读与调试相关的文档,以更好地了解此工作流程。" #: editor/editor_node.cpp msgid "There is no defined scene to run." @@ -3131,11 +3132,11 @@ msgstr "更新" #: editor/editor_plugin_settings.cpp editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp msgid "Version:" -msgstr "版本:" +msgstr "版本:" #: editor/editor_plugin_settings.cpp editor/plugin_config_dialog.cpp msgid "Author:" -msgstr "作者:" +msgstr "作者:" #: editor/editor_plugin_settings.cpp msgid "Status:" @@ -3147,7 +3148,7 @@ msgstr "编辑:" #: editor/editor_profiler.cpp msgid "Measure:" -msgstr "测量:" +msgstr "测量:" #: editor/editor_profiler.cpp msgid "Frame Time (sec)" @@ -3207,7 +3208,7 @@ msgstr "[空]" #: editor/editor_properties.cpp editor/plugins/root_motion_editor_plugin.cpp msgid "Assign..." -msgstr "分配..." +msgstr "指定..." #: editor/editor_properties.cpp msgid "Invalid RID" @@ -3217,7 +3218,7 @@ msgstr "无效的RID" msgid "" "The selected resource (%s) does not match any type expected for this " "property (%s)." -msgstr "被选择的资源(%s)并不能匹配此属性(%s)应有的类型。" +msgstr "所选资源(%s)与该属性(%s)所需的类型都不匹配。" #: editor/editor_properties.cpp msgid "" @@ -3346,11 +3347,11 @@ msgstr "浏览" #: editor/editor_sub_scene.cpp msgid "Scene Path:" -msgstr "场景路径:" +msgstr "场景路径:" #: editor/editor_sub_scene.cpp msgid "Import From Node:" -msgstr "从节点中导入:" +msgstr "从节点中导入:" #: editor/export_template_manager.cpp msgid "Redownload" @@ -3387,7 +3388,7 @@ msgstr "检索镜像,请等待..." #: editor/export_template_manager.cpp msgid "Remove template version '%s'?" -msgstr "移除版本为 '%s' 的模板?" +msgstr "是否移除版本为“%s”的模板?" #: editor/export_template_manager.cpp msgid "Can't open export templates zip." @@ -3403,7 +3404,7 @@ msgstr "模板中没有找到version.txt文件。" #: editor/export_template_manager.cpp msgid "Error creating path for templates:" -msgstr "创建模板文件路径出错:" +msgstr "创建模板文件路径出错:" #: editor/export_template_manager.cpp msgid "Extracting Export Templates" @@ -3411,7 +3412,7 @@ msgstr "正在解压导出模板" #: editor/export_template_manager.cpp msgid "Importing:" -msgstr "导入:" +msgstr "正在导入:" #: editor/export_template_manager.cpp msgid "Error getting the list of mirrors." @@ -3430,7 +3431,7 @@ msgstr "没有找到这个版本的下载链接。直接下载只适用于正式 #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp msgid "Can't resolve." -msgstr "无法解析." +msgstr "无法解析。" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp @@ -3453,7 +3454,7 @@ msgstr "循环重定向。" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp msgid "Failed:" -msgstr "失败:" +msgstr "失败:" #: editor/export_template_manager.cpp msgid "Download Complete." @@ -3461,21 +3462,23 @@ msgstr "下载完成。" #: editor/export_template_manager.cpp msgid "Cannot remove temporary file:" -msgstr "无法移除临时文件:" +msgstr "无法移除临时文件:" #: editor/export_template_manager.cpp msgid "" "Templates installation failed.\n" "The problematic templates archives can be found at '%s'." -msgstr "模板安装失败。有问题的模板文档在 '%s' 。" +msgstr "" +"模板安装失败。\n" +"有问题的模板文档在“%s”。" #: editor/export_template_manager.cpp msgid "Error requesting URL:" -msgstr "错误的请求链接:" +msgstr "请求URL时出错:" #: editor/export_template_manager.cpp msgid "Connecting to Mirror..." -msgstr "正在连接镜像网站。。" +msgstr "正在连接镜像网站..." #: editor/export_template_manager.cpp msgid "Disconnected" @@ -3525,11 +3528,11 @@ msgstr "无压缩的Android Build资源" #: editor/export_template_manager.cpp msgid "Current Version:" -msgstr "当前版本:" +msgstr "当前版本:" #: editor/export_template_manager.cpp msgid "Installed Versions:" -msgstr "已安装版本:" +msgstr "已安装版本:" #: editor/export_template_manager.cpp msgid "Install From File" @@ -3565,7 +3568,7 @@ msgstr "收藏" #: editor/filesystem_dock.cpp msgid "Status: Import of file failed. Please fix file and reimport manually." -msgstr "状态: 导入文件失败。请手动修复文件后重新导入。" +msgstr "状态:导入文件失败。请手动修复文件后重新导入。" #: editor/filesystem_dock.cpp msgid "Cannot move/rename resources root." @@ -3577,15 +3580,15 @@ msgstr "无法将文件夹移动到其自身。" #: editor/filesystem_dock.cpp msgid "Error moving:" -msgstr "移动出错:" +msgstr "移动出错:" #: editor/filesystem_dock.cpp msgid "Error duplicating:" -msgstr "复制出错:" +msgstr "复制出错:" #: editor/filesystem_dock.cpp msgid "Unable to update dependencies:" -msgstr "无法更新依赖:" +msgstr "无法更新依赖:" #: editor/filesystem_dock.cpp editor/scene_tree_editor.cpp msgid "No name provided." @@ -3605,19 +3608,19 @@ msgstr "名称包含无效字符。" #: editor/filesystem_dock.cpp msgid "Renaming file:" -msgstr "重命名文件:" +msgstr "重命名文件:" #: editor/filesystem_dock.cpp msgid "Renaming folder:" -msgstr "重命名文件夹:" +msgstr "重命名文件夹:" #: editor/filesystem_dock.cpp msgid "Duplicating file:" -msgstr "拷贝文件:" +msgstr "拷贝文件:" #: editor/filesystem_dock.cpp msgid "Duplicating folder:" -msgstr "复制文件夹:" +msgstr "复制文件夹:" #: editor/filesystem_dock.cpp msgid "New Inherited Scene" @@ -3926,6 +3929,11 @@ msgid "Saving..." msgstr "保存中..." #: editor/import_dock.cpp +#, fuzzy +msgid "%d Files" +msgstr " 文件" + +#: editor/import_dock.cpp msgid "Set as Default for '%s'" msgstr "设置为“%s”的默认值" @@ -3934,10 +3942,6 @@ msgid "Clear Default for '%s'" msgstr "清除默认'%s'" #: editor/import_dock.cpp -msgid " Files" -msgstr " 文件" - -#: editor/import_dock.cpp msgid "Import As:" msgstr "导入为:" @@ -5247,22 +5251,22 @@ msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Lock Selected" -msgstr "锁定选定" +msgstr "锁定所选项" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Unlock Selected" -msgstr "解锁所选" +msgstr "解锁所选项" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Group Selected" -msgstr "分组选择" +msgstr "编组所选项" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Ungroup Selected" -msgstr "取消选定分组" +msgstr "解组所选项" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Paste Pose" @@ -5647,7 +5651,7 @@ msgstr "生成顶点计数:" #: editor/plugins/cpu_particles_2d_editor_plugin.cpp #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Emission Mask" -msgstr "发射遮罩" +msgstr "Emission Mask(发射遮挡)" #: editor/plugins/cpu_particles_2d_editor_plugin.cpp #: editor/plugins/particles_2d_editor_plugin.cpp @@ -5672,7 +5676,7 @@ msgstr "从像素捕获" #: editor/plugins/cpu_particles_2d_editor_plugin.cpp #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Emission Colors" -msgstr "发光颜色" +msgstr "Emission Colors(发射颜色)" #: editor/plugins/cpu_particles_editor_plugin.cpp msgid "CPUParticles" @@ -5785,12 +5789,12 @@ msgid "Mesh is empty!" msgstr "网格为空!" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Trimesh Body" -msgstr "创建静态三维身体" +msgid "Couldn't create a Trimesh collision shape." +msgstr "无法创建Trimesh碰撞形状。" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Convex Body" -msgstr "创建静态凸体(Convex Body)" +msgid "Create Static Trimesh Body" +msgstr "创建静态三维身体" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "This doesn't work on scene root!" @@ -5801,12 +5805,28 @@ msgid "Create Trimesh Static Shape" msgstr "创建三维网格静态形状" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Failed creating shapes!" -msgstr "创建形状失败!" +msgid "Can't create a single convex collision shape for the scene root." +msgstr "无法为场景根节点创建单一凸碰撞形状。" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Couldn't create a single convex collision shape." +msgstr "无法创建单一凸碰撞形状。" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Single Convex Shape" +msgstr "创建单一凸形状" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Convex Shape(s)" -msgstr "创建凸形" +msgid "Can't create multiple convex collision shapes for the scene root." +msgstr "无法为场景根节点创建多个凸碰撞形状。" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Couldn't create any collision shapes." +msgstr "无法创建碰撞形状。" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Multiple Convex Shapes" +msgstr "创建多个凸形状" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Navigation Mesh" @@ -5857,18 +5877,65 @@ msgid "Create Trimesh Static Body" msgstr "创建三角网格静态实体" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a StaticBody and assigns a polygon-based collision shape to it " +"automatically.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" +"创建StaticBody并自动为其分配基于多边形的碰撞形状。\n" +"这是最准确(但是最慢)的碰撞检测手段。" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Collision Sibling" msgstr "创建三角网格碰撞同级" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Convex Collision Sibling(s)" -msgstr "创建凸型碰撞同级" +msgid "" +"Creates a polygon-based collision shape.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" +"创建基于多边形的碰撞形状。\n" +"这是最准确(但是最慢)的碰撞检测手段。" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Single Convex Collision Siblings" +msgstr "创建单一凸碰撞同级" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a single convex collision shape.\n" +"This is the fastest (but least accurate) option for collision detection." +msgstr "" +"创建单一凸碰撞形状。\n" +"这是最快(但是最不精确)的碰撞检测手段。" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Create Multiple Convex Collision Siblings" +msgstr "创建多个凸碰撞同级" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a polygon-based collision shape.\n" +"This is a performance middle-ground between the two above options." +msgstr "" +"创建基于多边形的碰撞形状。\n" +"这是性能位于上述两种之间的碰撞检测手段。" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Outline Mesh..." msgstr "创建轮廓网格..." #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a static outline mesh. The outline mesh will have its normals " +"flipped automatically.\n" +"This can be used instead of the SpatialMaterial Grow property when using " +"that property isn't possible." +msgstr "" +"创建一个静态轮廓网格。轮廓网格会自动翻转法线。\n" +"可以用来在必要时代替SpatialMaterial的Grow属性。" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "View UV1" msgstr "查看UV1" @@ -7839,7 +7906,7 @@ msgstr "字体" #: editor/plugins/theme_editor_plugin.cpp msgid "Color" -msgstr "颜色" +msgstr "Color(颜色)" #: editor/plugins/theme_editor_plugin.cpp msgid "Theme File" @@ -8260,7 +8327,7 @@ msgstr "图块集" msgid "No VCS addons are available." msgstr "没有可用的VCS插件。" -#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Error" msgstr "错误" @@ -9383,24 +9450,29 @@ msgid "Export With Debug" msgstr "使用调试导出" #: editor/project_manager.cpp -msgid "The path does not exist." -msgstr "该路径不存在。" +msgid "The path specified doesn't exist." +msgstr "指定的路径不存在。" + +#: editor/project_manager.cpp +msgid "Error opening package file (it's not in ZIP format)." +msgstr "打开包文件时出错(非ZIP格式)。" #: editor/project_manager.cpp -msgid "Invalid '.zip' project file, does not contain a 'project.godot' file." -msgstr "无效的“.zip”项目文件,没有包含一个“project.godot”文件。" +msgid "" +"Invalid \".zip\" project file; it doesn't contain a \"project.godot\" file." +msgstr "无效的“.zip”项目文件;没有包含“project.godot”文件。" #: editor/project_manager.cpp msgid "Please choose an empty folder." msgstr "请选择空文件夹。" #: editor/project_manager.cpp -msgid "Please choose a 'project.godot' or '.zip' file." -msgstr "请选择一个“project.godot”或者“.zip”文件。" +msgid "Please choose a \"project.godot\" or \".zip\" file." +msgstr "请选择“project.godot”或“.zip”文件。" #: editor/project_manager.cpp -msgid "Directory already contains a Godot project." -msgstr "文件夹已经包含了一个Godot项目。" +msgid "This directory already contains a Godot project." +msgstr "该目录已经包含Godot项目。" #: editor/project_manager.cpp msgid "New Game Project" @@ -10081,6 +10153,10 @@ msgid "Suffix" msgstr "后缀" #: editor/rename_dialog.cpp +msgid "Use Regular Expressions" +msgstr "使用正则表达式" + +#: editor/rename_dialog.cpp msgid "Advanced Options" msgstr "高级选项" @@ -10117,7 +10193,7 @@ msgstr "" "比较计数器的选项。" #: editor/rename_dialog.cpp -msgid "Per Level counter" +msgid "Per-level Counter" msgstr "各级单独计数" #: editor/rename_dialog.cpp @@ -10149,10 +10225,6 @@ msgstr "" "缺失的数字将用0填充在头部。" #: editor/rename_dialog.cpp -msgid "Regular Expressions" -msgstr "正则表达式" - -#: editor/rename_dialog.cpp msgid "Post-Process" msgstr "后期处理" @@ -10161,11 +10233,11 @@ msgid "Keep" msgstr "保持" #: editor/rename_dialog.cpp -msgid "CamelCase to under_scored" +msgid "PascalCase to snake_case" msgstr "驼峰式转为下划线式" #: editor/rename_dialog.cpp -msgid "under_scored to CamelCase" +msgid "snake_case to PascalCase" msgstr "下划线式转为驼峰式" #: editor/rename_dialog.cpp @@ -10184,6 +10256,14 @@ msgstr "转为大写" msgid "Reset" msgstr "重置" +#: editor/rename_dialog.cpp +msgid "Regular Expression Error" +msgstr "正则表达式出错" + +#: editor/rename_dialog.cpp +msgid "At character %s" +msgstr "位于字符%s" + #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "重设父节点" @@ -10636,8 +10716,8 @@ msgid "Invalid inherited parent name or path." msgstr "所继承父类的名称或路径无效。" #: editor/script_create_dialog.cpp -msgid "Script is valid." -msgstr "脚本有效。" +msgid "Script path/name is valid." +msgstr "脚本路径/名称有效。" #: editor/script_create_dialog.cpp msgid "Allowed: a-z, A-Z, 0-9, _ and ." @@ -10728,6 +10808,10 @@ msgid "Copy Error" msgstr "复制错误信息" #: editor/script_editor_debugger.cpp +msgid "Video RAM" +msgstr "显存" + +#: editor/script_editor_debugger.cpp msgid "Skip Breakpoints" msgstr "跳过断点" @@ -10776,10 +10860,6 @@ msgid "Total:" msgstr "合计:" #: editor/script_editor_debugger.cpp -msgid "Video Mem" -msgstr "显存" - -#: editor/script_editor_debugger.cpp msgid "Resource Path" msgstr "资源路径" @@ -12371,6 +12451,15 @@ msgstr "变量只能在顶点函数中指定。" msgid "Constants cannot be modified." msgstr "不允许修改常量。" +#~ msgid "Replaced %d occurrence(s)." +#~ msgstr "替换了%d项。" + +#~ msgid "Create Static Convex Body" +#~ msgstr "创建静态凸体(Convex Body)" + +#~ msgid "Failed creating shapes!" +#~ msgstr "创建形状失败!" + #~ msgid "" #~ "There are currently no tutorials for this class, you can [color=$color]" #~ "[url=$url]contribute one[/url][/color] or [color=$color][url=" diff --git a/editor/translations/zh_HK.po b/editor/translations/zh_HK.po index e57c2c0303..23b5c90459 100644 --- a/editor/translations/zh_HK.po +++ b/editor/translations/zh_HK.po @@ -735,8 +735,8 @@ msgstr "行數:" #: editor/code_editor.cpp #, fuzzy -msgid "Replaced %d occurrence(s)." -msgstr "取代了 %d 個。" +msgid "%d replaced." +msgstr "取代" #: editor/code_editor.cpp editor/editor_help.cpp msgid "%d match." @@ -4149,6 +4149,11 @@ msgid "Saving..." msgstr "儲存中..." #: editor/import_dock.cpp +#, fuzzy +msgid "%d Files" +msgstr "檔案" + +#: editor/import_dock.cpp msgid "Set as Default for '%s'" msgstr "" @@ -4158,11 +4163,6 @@ msgstr "" #: editor/import_dock.cpp #, fuzzy -msgid " Files" -msgstr "檔案" - -#: editor/import_dock.cpp -#, fuzzy msgid "Import As:" msgstr "導入" @@ -6121,11 +6121,12 @@ msgid "Mesh is empty!" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Trimesh Body" -msgstr "" +#, fuzzy +msgid "Couldn't create a Trimesh collision shape." +msgstr "無法新增資料夾" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Convex Body" +msgid "Create Static Trimesh Body" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -6137,12 +6138,30 @@ msgid "Create Trimesh Static Shape" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Failed creating shapes!" +msgid "Can't create a single convex collision shape for the scene root." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Couldn't create a single convex collision shape." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp #, fuzzy -msgid "Create Convex Shape(s)" +msgid "Create Single Convex Shape" +msgstr "新增" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Can't create multiple convex collision shapes for the scene root." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Couldn't create any collision shapes." +msgstr "無法新增資料夾" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Create Multiple Convex Shapes" msgstr "新增" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -6194,19 +6213,57 @@ msgid "Create Trimesh Static Body" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a StaticBody and assigns a polygon-based collision shape to it " +"automatically.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Collision Sibling" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a polygon-based collision shape.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Create Single Convex Collision Siblings" +msgstr "縮放selection" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a single convex collision shape.\n" +"This is the fastest (but least accurate) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp #, fuzzy -msgid "Create Convex Collision Sibling(s)" +msgid "Create Multiple Convex Collision Siblings" msgstr "縮放selection" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a polygon-based collision shape.\n" +"This is a performance middle-ground between the two above options." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Outline Mesh..." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a static outline mesh. The outline mesh will have its normals " +"flipped automatically.\n" +"This can be used instead of the SpatialMaterial Grow property when using " +"that property isn't possible." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp #, fuzzy msgid "View UV1" msgstr "檔案" @@ -8740,7 +8797,7 @@ msgstr "TileSet..." msgid "No VCS addons are available." msgstr "" -#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Error" msgstr "" @@ -9875,11 +9932,16 @@ msgstr "" #: editor/project_manager.cpp #, fuzzy -msgid "The path does not exist." +msgid "The path specified doesn't exist." msgstr "檔案不存在." #: editor/project_manager.cpp -msgid "Invalid '.zip' project file, does not contain a 'project.godot' file." +msgid "Error opening package file (it's not in ZIP format)." +msgstr "" + +#: editor/project_manager.cpp +msgid "" +"Invalid \".zip\" project file; it doesn't contain a \"project.godot\" file." msgstr "" #: editor/project_manager.cpp @@ -9887,11 +9949,11 @@ msgid "Please choose an empty folder." msgstr "" #: editor/project_manager.cpp -msgid "Please choose a 'project.godot' or '.zip' file." +msgid "Please choose a \"project.godot\" or \".zip\" file." msgstr "" #: editor/project_manager.cpp -msgid "Directory already contains a Godot project." +msgid "This directory already contains a Godot project." msgstr "" #: editor/project_manager.cpp @@ -10571,6 +10633,10 @@ msgid "Suffix" msgstr "" #: editor/rename_dialog.cpp +msgid "Use Regular Expressions" +msgstr "" + +#: editor/rename_dialog.cpp #, fuzzy msgid "Advanced Options" msgstr "選項" @@ -10609,7 +10675,7 @@ msgid "" msgstr "" #: editor/rename_dialog.cpp -msgid "Per Level counter" +msgid "Per-level Counter" msgstr "" #: editor/rename_dialog.cpp @@ -10639,10 +10705,6 @@ msgid "" msgstr "" #: editor/rename_dialog.cpp -msgid "Regular Expressions" -msgstr "" - -#: editor/rename_dialog.cpp msgid "Post-Process" msgstr "" @@ -10651,11 +10713,11 @@ msgid "Keep" msgstr "保留" #: editor/rename_dialog.cpp -msgid "CamelCase to under_scored" +msgid "PascalCase to snake_case" msgstr "" #: editor/rename_dialog.cpp -msgid "under_scored to CamelCase" +msgid "snake_case to PascalCase" msgstr "" #: editor/rename_dialog.cpp @@ -10677,6 +10739,15 @@ msgstr "轉為..." msgid "Reset" msgstr "重設縮放比例" +#: editor/rename_dialog.cpp +msgid "Regular Expression Error" +msgstr "" + +#: editor/rename_dialog.cpp +#, fuzzy +msgid "At character %s" +msgstr "有效字符:" + #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "" @@ -11151,7 +11222,7 @@ msgstr "" #: editor/script_create_dialog.cpp #, fuzzy -msgid "Script is valid." +msgid "Script path/name is valid." msgstr "腳本" #: editor/script_create_dialog.cpp @@ -11258,6 +11329,10 @@ msgid "Copy Error" msgstr "載入錯誤" #: editor/script_editor_debugger.cpp +msgid "Video RAM" +msgstr "" + +#: editor/script_editor_debugger.cpp #, fuzzy msgid "Skip Breakpoints" msgstr "刪除" @@ -11308,10 +11383,6 @@ msgid "Total:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Video Mem" -msgstr "" - -#: editor/script_editor_debugger.cpp msgid "Resource Path" msgstr "" @@ -12902,6 +12973,10 @@ msgid "Constants cannot be modified." msgstr "" #, fuzzy +#~ msgid "Replaced %d occurrence(s)." +#~ msgstr "取代了 %d 個。" + +#, fuzzy #~ msgid "Brief Description" #~ msgstr "簡述:" diff --git a/editor/translations/zh_TW.po b/editor/translations/zh_TW.po index 6dfb9304f9..9678b2f8cb 100644 --- a/editor/translations/zh_TW.po +++ b/editor/translations/zh_TW.po @@ -23,7 +23,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2020-01-11 03:05+0000\n" +"PO-Revision-Date: 2020-01-30 03:56+0000\n" "Last-Translator: 鄭惟中 <biglionlion06@gmail.com>\n" "Language-Team: Chinese (Traditional) <https://hosted.weblate.org/projects/" "godot-engine/godot/zh_Hant/>\n" @@ -32,7 +32,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 3.10.1\n" +"X-Generator: Weblate 3.11-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -41,7 +41,7 @@ msgstr "Convert()函數所收到的參數錯誤,請用 TYPE_* 常數。" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp msgid "Expected a string of length 1 (a character)." -msgstr "應為一個長度是1(一個字元)的字串" +msgstr "應為一個長度是1(一個字元)的字串。" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/mono/glue/gd_glue.cpp @@ -142,9 +142,8 @@ msgid "Add Bezier Point" msgstr "添加貝塞爾點" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Move Bezier Points" -msgstr "移動貝塞爾點" +msgstr "移動Bezier點" #: editor/animation_bezier_editor.cpp editor/animation_track_editor.cpp msgid "Anim Duplicate Keys" @@ -333,11 +332,11 @@ msgstr "立方體" #: editor/animation_track_editor.cpp msgid "Clamp Loop Interp" -msgstr "" +msgstr "Clamp式內插循環" #: editor/animation_track_editor.cpp msgid "Wrap Loop Interp" -msgstr "" +msgstr "Wrap式內插循環" #: editor/animation_track_editor.cpp #: editor/plugins/canvas_item_editor_plugin.cpp @@ -398,7 +397,7 @@ msgstr "插入動畫" #: editor/animation_track_editor.cpp msgid "AnimationPlayer can't animate itself, only other players." -msgstr "" +msgstr "AnimationPlayer不能被自己所啟動,必須由其他player啟動。" #: editor/animation_track_editor.cpp msgid "Anim Create & Insert" @@ -424,7 +423,7 @@ msgstr "重新排列 Autoload" #: editor/animation_track_editor.cpp msgid "Transform tracks only apply to Spatial-based nodes." -msgstr "" +msgstr "Transform軌只能添加在spatial為主的節點。" #: editor/animation_track_editor.cpp msgid "" @@ -452,7 +451,7 @@ msgstr "無法添加沒有根目錄的新曲目" #: editor/animation_track_editor.cpp msgid "Invalid track for Bezier (no suitable sub-properties)" -msgstr "" +msgstr "此軌不能用於Bezier(子屬性不適合)" #: editor/animation_track_editor.cpp #, fuzzy @@ -637,9 +636,8 @@ msgid "Use Bezier Curves" msgstr "使用貝塞爾曲線" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim. Optimizer" -msgstr "動畫. 最佳化" +msgstr "動畫最佳化" #: editor/animation_track_editor.cpp msgid "Max. Linear Error:" @@ -734,8 +732,9 @@ msgid "Line Number:" msgstr "行號:" #: editor/code_editor.cpp -msgid "Replaced %d occurrence(s)." -msgstr "取代了 %d 個。" +#, fuzzy +msgid "%d replaced." +msgstr "替換…" #: editor/code_editor.cpp editor/editor_help.cpp #, fuzzy @@ -965,9 +964,8 @@ msgid "Go To Method" msgstr "前往方法" #: editor/create_dialog.cpp -#, fuzzy msgid "Change %s Type" -msgstr "變更 %s 尺寸" +msgstr "變更 %s 種類" #: editor/create_dialog.cpp editor/project_settings_editor.cpp msgid "Change" @@ -1158,7 +1156,6 @@ msgid "Change Dictionary Value" msgstr "改變字典 value" #: editor/editor_about.cpp -#, fuzzy msgid "Thanks from the Godot community!" msgstr "Godot 社群感謝你!" @@ -1195,7 +1192,6 @@ msgid "Gold Sponsors" msgstr "黃金贊助" #: editor/editor_about.cpp -#, fuzzy msgid "Mini Sponsors" msgstr "迷你贊助" @@ -1204,12 +1200,10 @@ msgid "Gold Donors" msgstr "黃金捐贈者" #: editor/editor_about.cpp -#, fuzzy msgid "Silver Donors" msgstr "白銀捐贈者" #: editor/editor_about.cpp -#, fuzzy msgid "Bronze Donors" msgstr "紅銅捐贈者" @@ -1292,7 +1286,6 @@ msgid "Install" msgstr "安裝" #: editor/editor_asset_installer.cpp -#, fuzzy msgid "Package Installer" msgstr "套件安裝" @@ -2034,7 +2027,7 @@ msgstr "掃描源" msgid "" "There are multiple importers for different types pointing to file %s, import " "aborted" -msgstr "" +msgstr "因為有多個不同種類importer指向檔案 %s,導入失敗" #: editor/editor_file_system.cpp msgid "(Re)Importing Assets" @@ -2257,8 +2250,9 @@ msgid "Start" msgstr "開始" #: editor/editor_network_profiler.cpp +#, fuzzy msgid "%s/s" -msgstr "" +msgstr "%s/s" #: editor/editor_network_profiler.cpp #, fuzzy @@ -2267,7 +2261,7 @@ msgstr "下載" #: editor/editor_network_profiler.cpp msgid "Up" -msgstr "" +msgstr "上" #: editor/editor_network_profiler.cpp editor/editor_node.cpp #, fuzzy @@ -2276,23 +2270,23 @@ msgstr "節點" #: editor/editor_network_profiler.cpp msgid "Incoming RPC" -msgstr "" +msgstr "進來的Rpc" #: editor/editor_network_profiler.cpp msgid "Incoming RSET" -msgstr "" +msgstr "進來的Rset" #: editor/editor_network_profiler.cpp msgid "Outgoing RPC" -msgstr "" +msgstr "出去的 RPC" #: editor/editor_network_profiler.cpp msgid "Outgoing RSET" -msgstr "" +msgstr "出去的 RSET" #: editor/editor_node.cpp editor/project_manager.cpp msgid "New Window" -msgstr "" +msgstr "新視窗" #: editor/editor_node.cpp msgid "Imported resources can't be saved." @@ -2681,6 +2675,8 @@ msgid "" "You can change it later in \"Project Settings\" under the 'application' " "category." msgstr "" +"選擇場景'%s'不存在,選擇另一個場景?\n" +"你之後可以在「應用程式」分類中的「專案設定」變更這設定。" #: editor/editor_node.cpp msgid "" @@ -2688,6 +2684,8 @@ msgid "" "You can change it later in \"Project Settings\" under the 'application' " "category." msgstr "" +"選擇的場景'%s'不是一個場景檔案,要選擇另一個場景嗎?\n" +"你之後可以在「應用程式」分類中的「專案設定」變更這設定。" #: editor/editor_node.cpp msgid "Save Layout" @@ -2726,7 +2724,7 @@ msgstr "關閉其他選項卡" #: editor/editor_node.cpp msgid "Close Tabs to the Right" -msgstr "" +msgstr "關閉右方所有的分頁" #: editor/editor_node.cpp #, fuzzy @@ -4126,6 +4124,11 @@ msgid "Saving..." msgstr "儲存中……" #: editor/import_dock.cpp +#, fuzzy +msgid "%d Files" +msgstr " 資料夾" + +#: editor/import_dock.cpp msgid "Set as Default for '%s'" msgstr "設定為“%s”的預設值" @@ -4134,10 +4137,6 @@ msgid "Clear Default for '%s'" msgstr "清除“%s”的預設值" #: editor/import_dock.cpp -msgid " Files" -msgstr " 資料夾" - -#: editor/import_dock.cpp msgid "Import As:" msgstr "導入為:" @@ -6104,12 +6103,13 @@ msgid "Mesh is empty!" msgstr "網格是空的!" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Trimesh Body" -msgstr "" +#, fuzzy +msgid "Couldn't create a Trimesh collision shape." +msgstr "無法新增資料夾." #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Create Static Convex Body" -msgstr "創建靜態凸體" +msgid "Create Static Trimesh Body" +msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "This doesn't work on scene root!" @@ -6121,12 +6121,30 @@ msgid "Create Trimesh Static Shape" msgstr "創建凸形靜態體" #: editor/plugins/mesh_instance_editor_plugin.cpp -msgid "Failed creating shapes!" +msgid "Can't create a single convex collision shape for the scene root." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Couldn't create a single convex collision shape." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Create Single Convex Shape" +msgstr "創建凸面形狀" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "Can't create multiple convex collision shapes for the scene root." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp #, fuzzy -msgid "Create Convex Shape(s)" +msgid "Couldn't create any collision shapes." +msgstr "無法新增資料夾." + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Create Multiple Convex Shapes" msgstr "創建凸面形狀" #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -6178,19 +6196,57 @@ msgid "Create Trimesh Static Body" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a StaticBody and assigns a polygon-based collision shape to it " +"automatically.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Collision Sibling" msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a polygon-based collision shape.\n" +"This is the most accurate (but slowest) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +#, fuzzy +msgid "Create Single Convex Collision Siblings" +msgstr "創建碰撞多邊形" + +#: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a single convex collision shape.\n" +"This is the fastest (but least accurate) option for collision detection." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp #, fuzzy -msgid "Create Convex Collision Sibling(s)" +msgid "Create Multiple Convex Collision Siblings" msgstr "創建碰撞多邊形" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a polygon-based collision shape.\n" +"This is a performance middle-ground between the two above options." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Outline Mesh..." msgstr "創建輪廓網格…" #: editor/plugins/mesh_instance_editor_plugin.cpp +msgid "" +"Creates a static outline mesh. The outline mesh will have its normals " +"flipped automatically.\n" +"This can be used instead of the SpatialMaterial Grow property when using " +"that property isn't possible." +msgstr "" + +#: editor/plugins/mesh_instance_editor_plugin.cpp #, fuzzy msgid "View UV1" msgstr "過濾檔案..." @@ -8716,7 +8772,7 @@ msgstr "" msgid "No VCS addons are available." msgstr "" -#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Error" msgstr "" @@ -9848,11 +9904,19 @@ msgid "Export With Debug" msgstr "導出為調試" #: editor/project_manager.cpp -msgid "The path does not exist." +#, fuzzy +msgid "The path specified doesn't exist." msgstr "路徑不存在." #: editor/project_manager.cpp -msgid "Invalid '.zip' project file, does not contain a 'project.godot' file." +#, fuzzy +msgid "Error opening package file (it's not in ZIP format)." +msgstr "開啟套件檔案出錯,非 zip 格式。" + +#: editor/project_manager.cpp +#, fuzzy +msgid "" +"Invalid \".zip\" project file; it doesn't contain a \"project.godot\" file." msgstr "“.zip”項目檔案無效,不包含“project.godot”檔案。" #: editor/project_manager.cpp @@ -9860,11 +9924,13 @@ msgid "Please choose an empty folder." msgstr "請選擇一個空資料夾。" #: editor/project_manager.cpp -msgid "Please choose a 'project.godot' or '.zip' file." +#, fuzzy +msgid "Please choose a \"project.godot\" or \".zip\" file." msgstr "請選擇“project.godot”或“.zip”檔案。" #: editor/project_manager.cpp -msgid "Directory already contains a Godot project." +#, fuzzy +msgid "This directory already contains a Godot project." msgstr "目錄已包含一個godot項目。" #: editor/project_manager.cpp @@ -10548,6 +10614,11 @@ msgstr "" #: editor/rename_dialog.cpp #, fuzzy +msgid "Use Regular Expressions" +msgstr "設置磁貼區域" + +#: editor/rename_dialog.cpp +#, fuzzy msgid "Advanced Options" msgstr "吸附選項" @@ -10585,7 +10656,7 @@ msgid "" msgstr "" #: editor/rename_dialog.cpp -msgid "Per Level counter" +msgid "Per-level Counter" msgstr "" #: editor/rename_dialog.cpp @@ -10616,10 +10687,6 @@ msgid "" msgstr "" #: editor/rename_dialog.cpp -msgid "Regular Expressions" -msgstr "" - -#: editor/rename_dialog.cpp msgid "Post-Process" msgstr "" @@ -10628,11 +10695,11 @@ msgid "Keep" msgstr "" #: editor/rename_dialog.cpp -msgid "CamelCase to under_scored" +msgid "PascalCase to snake_case" msgstr "" #: editor/rename_dialog.cpp -msgid "under_scored to CamelCase" +msgid "snake_case to PascalCase" msgstr "" #: editor/rename_dialog.cpp @@ -10654,6 +10721,15 @@ msgstr "轉換成..." msgid "Reset" msgstr "重設縮放大小" +#: editor/rename_dialog.cpp +msgid "Regular Expression Error" +msgstr "" + +#: editor/rename_dialog.cpp +#, fuzzy +msgid "At character %s" +msgstr "合法字元:" + #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "" @@ -11125,7 +11201,7 @@ msgstr "" #: editor/script_create_dialog.cpp #, fuzzy -msgid "Script is valid." +msgid "Script path/name is valid." msgstr "動畫樹有效。" #: editor/script_create_dialog.cpp @@ -11235,6 +11311,11 @@ msgstr "連接..." #: editor/script_editor_debugger.cpp #, fuzzy +msgid "Video RAM" +msgstr "影片記憶體" + +#: editor/script_editor_debugger.cpp +#, fuzzy msgid "Skip Breakpoints" msgstr "刪除" @@ -11286,10 +11367,6 @@ msgid "Total:" msgstr "總計:" #: editor/script_editor_debugger.cpp -msgid "Video Mem" -msgstr "影片記憶體" - -#: editor/script_editor_debugger.cpp msgid "Resource Path" msgstr "資源路徑" @@ -12904,6 +12981,12 @@ msgstr "" msgid "Constants cannot be modified." msgstr "" +#~ msgid "Replaced %d occurrence(s)." +#~ msgstr "取代了 %d 個。" + +#~ msgid "Create Static Convex Body" +#~ msgstr "創建靜態凸體" + #~ msgid "" #~ "There are currently no tutorials for this class, you can [color=$color]" #~ "[url=$url]contribute one[/url][/color] or [color=$color][url=" |